mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-04 04:04:18 +00:00 
			
		
		
		
	Remove Navigator references from conversations pages
This commit is contained in:
		@@ -1,7 +1,9 @@
 | 
			
		||||
import 'package:comunic/helpers/conversations_helper.dart';
 | 
			
		||||
import 'package:comunic/models/conversation.dart';
 | 
			
		||||
import 'package:comunic/ui/routes/home_route.dart';
 | 
			
		||||
import 'package:comunic/ui/routes/update_conversation_route.dart';
 | 
			
		||||
import 'package:comunic/ui/screens/conversation_screen.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/comunic_back_button_widget.dart';
 | 
			
		||||
import 'package:comunic/utils/intl_utils.dart';
 | 
			
		||||
import 'package:comunic/utils/ui_utils.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
@@ -44,11 +46,10 @@ class _ConversationRouteState extends State<ConversationRoute> {
 | 
			
		||||
 | 
			
		||||
    if (_conversation == null) return setError(true);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    final conversationName =
 | 
			
		||||
        await ConversationsHelper.getConversationNameAsync(_conversation);
 | 
			
		||||
 | 
			
		||||
    if(!this.mounted) return null;
 | 
			
		||||
    if (!this.mounted) return null;
 | 
			
		||||
 | 
			
		||||
    if (conversationName == null) return setError(true);
 | 
			
		||||
 | 
			
		||||
@@ -58,11 +59,11 @@ class _ConversationRouteState extends State<ConversationRoute> {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void _openSettings() {
 | 
			
		||||
    Navigator.of(context).push(MaterialPageRoute(builder: (b) {
 | 
			
		||||
      return UpdateConversationRoute(
 | 
			
		||||
        conversationID: widget.conversationID,
 | 
			
		||||
      );
 | 
			
		||||
    }));
 | 
			
		||||
    HomeController.of(context).push(
 | 
			
		||||
        UpdateConversationRoute(
 | 
			
		||||
          conversationID: widget.conversationID,
 | 
			
		||||
        ),
 | 
			
		||||
        hideNavBar: true);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Widget _buildRouteBody() {
 | 
			
		||||
@@ -95,6 +96,7 @@ class _ConversationRouteState extends State<ConversationRoute> {
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      appBar: AppBar(
 | 
			
		||||
        leading: ComunicBackButton(),
 | 
			
		||||
        title: Text(
 | 
			
		||||
          _conversationName == null ? tr("Loading") : _conversationName,
 | 
			
		||||
        ),
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
import 'package:comunic/helpers/account_helper.dart';
 | 
			
		||||
import 'package:comunic/ui/routes/app_settings_route.dart';
 | 
			
		||||
import 'package:comunic/ui/routes/conversation_route.dart';
 | 
			
		||||
import 'package:comunic/ui/screens/conversations_list_screen.dart';
 | 
			
		||||
import 'package:comunic/ui/screens/friends_list_screen.dart';
 | 
			
		||||
import 'package:comunic/ui/screens/group_screen.dart';
 | 
			
		||||
@@ -29,8 +30,14 @@ class HomeRoute extends StatefulWidget {
 | 
			
		||||
class CurrPage {
 | 
			
		||||
  final BarCallbackActions action;
 | 
			
		||||
  final Map<String, dynamic> args;
 | 
			
		||||
  final bool hideNavBar;
 | 
			
		||||
 | 
			
		||||
  const CurrPage(this.action, {this.args}) : assert(action != null);
 | 
			
		||||
  const CurrPage(
 | 
			
		||||
    this.action, {
 | 
			
		||||
    this.args,
 | 
			
		||||
    this.hideNavBar = false,
 | 
			
		||||
  })  : assert(action != null),
 | 
			
		||||
        assert(hideNavBar != null);
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  String toString() =>
 | 
			
		||||
@@ -60,6 +67,12 @@ abstract class HomeController extends State<HomeRoute> {
 | 
			
		||||
 | 
			
		||||
  /// Pop current page. Last page can not be popped
 | 
			
		||||
  void popPage();
 | 
			
		||||
 | 
			
		||||
  /// Push a new widget
 | 
			
		||||
  void push(Widget w, {bool hideNavBar});
 | 
			
		||||
 | 
			
		||||
  /// Open a conversation
 | 
			
		||||
  void openConversation(int convID);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Private implementation of HomeController
 | 
			
		||||
@@ -129,6 +142,9 @@ class _HomeRouteState extends HomeController {
 | 
			
		||||
  /// Build the body of the application
 | 
			
		||||
  Widget _buildBody(BuildContext context) {
 | 
			
		||||
    switch (_currTab.action) {
 | 
			
		||||
      case BarCallbackActions.OPEN_CUSTOM_WIDGET:
 | 
			
		||||
        return _currTab.args["widget"];
 | 
			
		||||
 | 
			
		||||
      case BarCallbackActions.OPEN_NOTIFICATIONS:
 | 
			
		||||
        return NotificationsScreen();
 | 
			
		||||
 | 
			
		||||
@@ -158,6 +174,11 @@ class _HomeRouteState extends HomeController {
 | 
			
		||||
          userID: _currTab.args["userID"],
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
      case BarCallbackActions.OPEN_CONVERSATION:
 | 
			
		||||
        return ConversationRoute(
 | 
			
		||||
          conversationID: _currTab.args["convID"],
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
      default:
 | 
			
		||||
        throw "Invalid tab : " + _currTab.toString();
 | 
			
		||||
    }
 | 
			
		||||
@@ -172,10 +193,12 @@ class _HomeRouteState extends HomeController {
 | 
			
		||||
        child: WillPopScope(
 | 
			
		||||
          onWillPop: _willPop,
 | 
			
		||||
          child: Scaffold(
 | 
			
		||||
            appBar: ComunicAppBar(
 | 
			
		||||
              onTap: _onTap,
 | 
			
		||||
              selectedAction: _currTab.action,
 | 
			
		||||
            ),
 | 
			
		||||
            appBar: _currTab.hideNavBar
 | 
			
		||||
                ? null
 | 
			
		||||
                : ComunicAppBar(
 | 
			
		||||
                    onTap: _onTap,
 | 
			
		||||
                    selectedAction: _currTab.action,
 | 
			
		||||
                  ),
 | 
			
		||||
            body: SafeArea(
 | 
			
		||||
              child: _buildBody(context),
 | 
			
		||||
            ),
 | 
			
		||||
@@ -232,4 +255,22 @@ class _HomeRouteState extends HomeController {
 | 
			
		||||
    _pushPage(CurrPage(BarCallbackActions.OPEN_USER_FRIENDS_LIST,
 | 
			
		||||
        args: {"userID": userID}));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  void push(Widget w, {bool hideNavBar = false}) {
 | 
			
		||||
    _pushPage(CurrPage(
 | 
			
		||||
      BarCallbackActions.OPEN_CUSTOM_WIDGET,
 | 
			
		||||
      args: {"widget": w},
 | 
			
		||||
      hideNavBar: hideNavBar,
 | 
			
		||||
    ));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  void openConversation(int convID) {
 | 
			
		||||
    _pushPage(CurrPage(
 | 
			
		||||
      BarCallbackActions.OPEN_CONVERSATION,
 | 
			
		||||
      args: {"convID": convID},
 | 
			
		||||
      hideNavBar: true,
 | 
			
		||||
    ));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ import 'package:comunic/helpers/users_helper.dart';
 | 
			
		||||
import 'package:comunic/lists/users_list.dart';
 | 
			
		||||
import 'package:comunic/models/conversation.dart';
 | 
			
		||||
import 'package:comunic/ui/screens/update_conversation_screen.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/comunic_back_button_widget.dart';
 | 
			
		||||
import 'package:comunic/utils/intl_utils.dart';
 | 
			
		||||
import 'package:comunic/utils/ui_utils.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
@@ -83,6 +84,7 @@ class _UpdateConversationRoute extends State<UpdateConversationRoute> {
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      appBar: AppBar(
 | 
			
		||||
        leading: ComunicBackButton(),
 | 
			
		||||
        title: Text(tr("Update a conversation")),
 | 
			
		||||
      ),
 | 
			
		||||
      body: _buildBody(),
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,9 @@ import 'package:comunic/helpers/conversations_helper.dart';
 | 
			
		||||
import 'package:comunic/helpers/users_helper.dart';
 | 
			
		||||
import 'package:comunic/lists/conversations_list.dart';
 | 
			
		||||
import 'package:comunic/models/conversation.dart';
 | 
			
		||||
import 'package:comunic/ui/routes/conversation_route.dart';
 | 
			
		||||
import 'package:comunic/ui/routes/create_conversation_route.dart';
 | 
			
		||||
import 'package:comunic/ui/routes/home_route.dart';
 | 
			
		||||
import 'package:comunic/ui/routes/update_conversation_route.dart';
 | 
			
		||||
import 'package:comunic/ui/screens/create_conversation_screen.dart';
 | 
			
		||||
import 'package:comunic/ui/tiles/conversation_tile.dart';
 | 
			
		||||
import 'package:comunic/utils/intl_utils.dart';
 | 
			
		||||
import 'package:comunic/utils/ui_utils.dart';
 | 
			
		||||
@@ -94,27 +94,20 @@ class _ConversationScreenState extends State<ConversationsListScreen> {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Open a conversation
 | 
			
		||||
  void _openConversation(BuildContext context, int conversationId) {
 | 
			
		||||
    Navigator.of(context).push(MaterialPageRoute(builder: (c) {
 | 
			
		||||
      return ConversationRoute(
 | 
			
		||||
        conversationID: conversationId,
 | 
			
		||||
      );
 | 
			
		||||
    }));
 | 
			
		||||
  void _openConversation(int conversationId) {
 | 
			
		||||
    HomeController.of(context).openConversation(conversationId);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Create a new conversation
 | 
			
		||||
  void _createConversation(BuildContext context) {
 | 
			
		||||
    Navigator.of(context)
 | 
			
		||||
        .push(MaterialPageRoute(builder: (c) => CreateConversationRoute()));
 | 
			
		||||
  void _createConversation() {
 | 
			
		||||
    HomeController.of(context).push(CreateConversationScreen());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Handle conversations updated requests
 | 
			
		||||
  void _updateConversation(Conversation conversation) {
 | 
			
		||||
    Navigator.of(context).push(
 | 
			
		||||
      MaterialPageRoute(
 | 
			
		||||
        builder: (c) => UpdateConversationRoute(
 | 
			
		||||
              conversationID: conversation.id,
 | 
			
		||||
            ),
 | 
			
		||||
    HomeController.of(context).push(
 | 
			
		||||
      UpdateConversationRoute(
 | 
			
		||||
        conversationID: conversation.id,
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
@@ -181,7 +174,7 @@ class _ConversationScreenState extends State<ConversationsListScreen> {
 | 
			
		||||
                      conversation: _list.elementAt(index),
 | 
			
		||||
                      usersList: _list.users,
 | 
			
		||||
                      onOpen: (c) {
 | 
			
		||||
                        _openConversation(context, c.id);
 | 
			
		||||
                        _openConversation(c.id);
 | 
			
		||||
                      },
 | 
			
		||||
                      onRequestUpdate: _updateConversation,
 | 
			
		||||
                      onRequestDelete: _requestDeleteConversation,
 | 
			
		||||
@@ -199,7 +192,7 @@ class _ConversationScreenState extends State<ConversationsListScreen> {
 | 
			
		||||
          right: 20.0,
 | 
			
		||||
          bottom: 20.0,
 | 
			
		||||
          child: FloatingActionButton(
 | 
			
		||||
            onPressed: () => _createConversation(context),
 | 
			
		||||
            onPressed: () => _createConversation(),
 | 
			
		||||
            child: Icon(Icons.add),
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
import 'package:comunic/ui/screens/update_conversation_screen.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/comunic_back_button_widget.dart';
 | 
			
		||||
import 'package:comunic/utils/intl_utils.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
@@ -6,14 +7,14 @@ import 'package:flutter/material.dart';
 | 
			
		||||
///
 | 
			
		||||
/// @author Pierre HUBERT
 | 
			
		||||
 | 
			
		||||
class CreateConversationRoute extends StatelessWidget {
 | 
			
		||||
class CreateConversationScreen extends StatelessWidget {
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      appBar: AppBar(
 | 
			
		||||
        leading: ComunicBackButton(),
 | 
			
		||||
        title: Text(tr("Create a conversation")),
 | 
			
		||||
      ),
 | 
			
		||||
 | 
			
		||||
      body: UpdateConversationScreen(),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
import 'package:comunic/helpers/conversations_helper.dart';
 | 
			
		||||
import 'package:comunic/lists/users_list.dart';
 | 
			
		||||
import 'package:comunic/models/conversation.dart';
 | 
			
		||||
import 'package:comunic/ui/routes/conversation_route.dart';
 | 
			
		||||
import 'package:comunic/ui/routes/home_route.dart';
 | 
			
		||||
import 'package:comunic/ui/tiles/simple_user_tile.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/pick_user_widget.dart';
 | 
			
		||||
import 'package:comunic/utils/intl_utils.dart';
 | 
			
		||||
@@ -71,8 +71,8 @@ class _UpdateConversationScreen extends State<UpdateConversationScreen> {
 | 
			
		||||
            label: tr("Add member"),
 | 
			
		||||
            enabled: isOwner,
 | 
			
		||||
            onSelectUser: (user) => setState(() {
 | 
			
		||||
                  if (!_members.contains(user)) _members.add(user);
 | 
			
		||||
                }),
 | 
			
		||||
              if (!_members.contains(user)) _members.add(user);
 | 
			
		||||
            }),
 | 
			
		||||
          ),
 | 
			
		||||
 | 
			
		||||
          //Conversation members
 | 
			
		||||
@@ -91,11 +91,11 @@ class _UpdateConversationScreen extends State<UpdateConversationScreen> {
 | 
			
		||||
                                      _membersMenuItemSelected(i, choice),
 | 
			
		||||
                                  itemBuilder: (c) =>
 | 
			
		||||
                                      <PopupMenuEntry<_MembersMenuChoices>>[
 | 
			
		||||
                                        PopupMenuItem(
 | 
			
		||||
                                          child: Text(tr("Remove")),
 | 
			
		||||
                                          value: _MembersMenuChoices.REMOVE,
 | 
			
		||||
                                        )
 | 
			
		||||
                                      ],
 | 
			
		||||
                                    PopupMenuItem(
 | 
			
		||||
                                      child: Text(tr("Remove")),
 | 
			
		||||
                                      value: _MembersMenuChoices.REMOVE,
 | 
			
		||||
                                    )
 | 
			
		||||
                                  ],
 | 
			
		||||
                                )
 | 
			
		||||
                              : null,
 | 
			
		||||
                        );
 | 
			
		||||
@@ -110,8 +110,8 @@ class _UpdateConversationScreen extends State<UpdateConversationScreen> {
 | 
			
		||||
              Switch(
 | 
			
		||||
                value: _followConversation,
 | 
			
		||||
                onChanged: (b) => setState(() {
 | 
			
		||||
                      _followConversation = b;
 | 
			
		||||
                    }),
 | 
			
		||||
                  _followConversation = b;
 | 
			
		||||
                }),
 | 
			
		||||
              ),
 | 
			
		||||
              Text(tr("Follow conversation"))
 | 
			
		||||
            ],
 | 
			
		||||
@@ -158,7 +158,8 @@ class _UpdateConversationScreen extends State<UpdateConversationScreen> {
 | 
			
		||||
    if (isUpdating)
 | 
			
		||||
      error = !(await ConversationsHelper().updateConversation(settings));
 | 
			
		||||
    else {
 | 
			
		||||
      conversationID = await ConversationsHelper().createConversation(settings);
 | 
			
		||||
      conversationID =
 | 
			
		||||
          await ConversationsHelper().createConversation(settings);
 | 
			
		||||
      if (conversationID < 1) error = true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -172,9 +173,9 @@ class _UpdateConversationScreen extends State<UpdateConversationScreen> {
 | 
			
		||||
      ));
 | 
			
		||||
 | 
			
		||||
    // Open the conversation
 | 
			
		||||
    Navigator.of(context).pushReplacement(MaterialPageRoute(
 | 
			
		||||
        builder: (c) => ConversationRoute(
 | 
			
		||||
              conversationID: conversationID,
 | 
			
		||||
            )));
 | 
			
		||||
 | 
			
		||||
    HomeController.of(context).popPage();
 | 
			
		||||
    if (!isUpdating)
 | 
			
		||||
      HomeController.of(context).openConversation(conversationID);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								lib/ui/widgets/comunic_back_button_widget.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								lib/ui/widgets/comunic_back_button_widget.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
import 'package:comunic/utils/navigation_utils.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
class ComunicBackButton extends StatelessWidget {
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return BackButton(
 | 
			
		||||
      onPressed: () => popPage(context),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -10,6 +10,7 @@ typedef OnSelectMenuAction = void Function(BarCallbackActions);
 | 
			
		||||
 | 
			
		||||
/// Callback actions
 | 
			
		||||
enum BarCallbackActions {
 | 
			
		||||
  OPEN_CUSTOM_WIDGET,
 | 
			
		||||
  OPEN_NOTIFICATIONS,
 | 
			
		||||
  OPEN_CONVERSATIONS,
 | 
			
		||||
  OPEN_NEWEST_POSTS,
 | 
			
		||||
@@ -22,6 +23,7 @@ enum BarCallbackActions {
 | 
			
		||||
  OPEN_APP_SETTINGS,
 | 
			
		||||
  OPEN_USER_FRIENDS_LIST,
 | 
			
		||||
  OPEN_ABOUT_DIALOG,
 | 
			
		||||
  OPEN_CONVERSATION,
 | 
			
		||||
  NONE,
 | 
			
		||||
  ACTION_LOGOUT
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user