From 3f889e220d7671478969f06f38ce82ab9ec656b8 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Tue, 13 Apr 2021 16:28:27 +0200 Subject: [PATCH] refactor: MVC new group view --- lib/config/routes.dart | 2 +- lib/controllers/new_group_controller.dart | 44 ++++++++++++ lib/views/new_group.dart | 84 ----------------------- lib/views/new_group_view.dart | 57 +++++++++++++++ 4 files changed, 102 insertions(+), 85 deletions(-) create mode 100644 lib/controllers/new_group_controller.dart delete mode 100644 lib/views/new_group.dart create mode 100644 lib/views/new_group_view.dart diff --git a/lib/config/routes.dart b/lib/config/routes.dart index 19b4e2f4..f7cd5679 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -15,7 +15,7 @@ import 'package:fluffychat/views/empty_page.dart'; import 'package:fluffychat/views/loading_view.dart'; import 'package:fluffychat/views/log_view.dart'; import 'package:fluffychat/views/login.dart'; -import 'package:fluffychat/views/new_group.dart'; +import 'package:fluffychat/controllers/new_group_controller.dart'; import 'package:fluffychat/views/new_private_chat.dart'; import 'package:fluffychat/views/search_view.dart'; import 'package:fluffychat/views/settings.dart'; diff --git a/lib/controllers/new_group_controller.dart b/lib/controllers/new_group_controller.dart new file mode 100644 index 00000000..28bc651e --- /dev/null +++ b/lib/controllers/new_group_controller.dart @@ -0,0 +1,44 @@ +import 'package:adaptive_page_layout/adaptive_page_layout.dart'; +import 'package:famedlysdk/famedlysdk.dart' as sdk; +import 'package:fluffychat/views/new_group_view.dart'; +import 'package:future_loading_dialog/future_loading_dialog.dart'; +import 'package:fluffychat/views/widgets/matrix.dart'; +import 'package:flutter/material.dart'; + +class NewGroup extends StatefulWidget { + @override + NewGroupController createState() => NewGroupController(); +} + +class NewGroupController extends State { + TextEditingController controller = TextEditingController(); + bool publicGroup = false; + + void setPublicGroup(bool b) => setState(() => publicGroup = b); + + void submitAction([_]) async { + final matrix = Matrix.of(context); + final roomID = await showFutureLoadingDialog( + context: context, + future: () => matrix.client.createRoom( + preset: publicGroup + ? sdk.CreateRoomPreset.public_chat + : sdk.CreateRoomPreset.private_chat, + visibility: publicGroup ? sdk.Visibility.public : null, + roomAliasName: publicGroup && controller.text.isNotEmpty + ? controller.text.trim().toLowerCase().replaceAll(' ', '_') + : null, + name: controller.text.isNotEmpty ? controller.text : null, + ), + ); + AdaptivePageLayout.of(context).popUntilIsFirst(); + if (roomID != null) { + await AdaptivePageLayout.of(context).pushNamed('/rooms/${roomID.result}'); + await AdaptivePageLayout.of(context) + .pushNamed('/rooms/${roomID.result}/invite'); + } + } + + @override + Widget build(BuildContext context) => NewGroupView(this); +} diff --git a/lib/views/new_group.dart b/lib/views/new_group.dart deleted file mode 100644 index fb19890e..00000000 --- a/lib/views/new_group.dart +++ /dev/null @@ -1,84 +0,0 @@ -import 'package:adaptive_page_layout/adaptive_page_layout.dart'; -import 'package:famedlysdk/famedlysdk.dart' as sdk; -import 'package:fluffychat/views/widgets/max_width_body.dart'; -import 'package:future_loading_dialog/future_loading_dialog.dart'; -import 'package:fluffychat/views/widgets/matrix.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; - -class NewGroup extends StatefulWidget { - @override - _NewGroupState createState() => _NewGroupState(); -} - -class _NewGroupState extends State { - TextEditingController controller = TextEditingController(); - bool publicGroup = false; - - void submitAction(BuildContext context) async { - final matrix = Matrix.of(context); - final roomID = await showFutureLoadingDialog( - context: context, - future: () => matrix.client.createRoom( - preset: publicGroup - ? sdk.CreateRoomPreset.public_chat - : sdk.CreateRoomPreset.private_chat, - visibility: publicGroup ? sdk.Visibility.public : null, - roomAliasName: publicGroup && controller.text.isNotEmpty - ? controller.text.trim().toLowerCase().replaceAll(' ', '_') - : null, - name: controller.text.isNotEmpty ? controller.text : null, - ), - ); - AdaptivePageLayout.of(context).popUntilIsFirst(); - if (roomID != null) { - await AdaptivePageLayout.of(context).pushNamed('/rooms/${roomID.result}'); - await AdaptivePageLayout.of(context) - .pushNamed('/rooms/${roomID.result}/invite'); - } - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - leading: BackButton(), - title: Text(L10n.of(context).createNewGroup), - elevation: 0, - ), - body: MaxWidthBody( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.all(12.0), - child: TextField( - controller: controller, - autofocus: true, - autocorrect: false, - textInputAction: TextInputAction.go, - onSubmitted: (s) => submitAction(context), - decoration: InputDecoration( - labelText: L10n.of(context).optionalGroupName, - prefixIcon: Icon(Icons.people_outlined), - hintText: L10n.of(context).enterAGroupName), - ), - ), - SwitchListTile( - title: Text(L10n.of(context).groupIsPublic), - value: publicGroup, - onChanged: (bool b) => setState(() => publicGroup = b), - ), - Expanded( - child: Image.asset('assets/new_group_wallpaper.png'), - ), - ], - ), - ), - floatingActionButton: FloatingActionButton( - onPressed: () => submitAction(context), - child: Icon(Icons.arrow_forward_outlined), - ), - ); - } -} diff --git a/lib/views/new_group_view.dart b/lib/views/new_group_view.dart new file mode 100644 index 00000000..cadbef40 --- /dev/null +++ b/lib/views/new_group_view.dart @@ -0,0 +1,57 @@ +import 'package:fluffychat/controllers/new_group_controller.dart'; +import 'package:fluffychat/views/widgets/max_width_body.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; + +class NewGroupView extends StatelessWidget { + final NewGroupController controller; + + const NewGroupView( + this.controller, { + Key key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + leading: BackButton(), + title: Text(L10n.of(context).createNewGroup), + elevation: 0, + ), + body: MaxWidthBody( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.all(12.0), + child: TextField( + controller: controller.controller, + autofocus: true, + autocorrect: false, + textInputAction: TextInputAction.go, + onSubmitted: controller.submitAction, + decoration: InputDecoration( + labelText: L10n.of(context).optionalGroupName, + prefixIcon: Icon(Icons.people_outlined), + hintText: L10n.of(context).enterAGroupName), + ), + ), + SwitchListTile( + title: Text(L10n.of(context).groupIsPublic), + value: controller.publicGroup, + onChanged: controller.setPublicGroup, + ), + Expanded( + child: Image.asset('assets/new_group_wallpaper.png'), + ), + ], + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: controller.submitAction, + child: Icon(Icons.arrow_forward_outlined), + ), + ); + } +}