diff --git a/lib/ui/routes/main_route/main_route.dart b/lib/ui/routes/main_route/main_route.dart index c5bc642..49a0b5a 100644 --- a/lib/ui/routes/main_route/main_route.dart +++ b/lib/ui/routes/main_route/main_route.dart @@ -6,13 +6,21 @@ import 'package:flutter/material.dart'; /// /// @author Pierre Hubert +/// Main controller key statically shared across application +/// +/// Do not use it directly to avoid context leak, instead use the access method +/// [MainController.of] +final mainControllerKey = GlobalKey(); + mixin MainRoute implements StatefulWidget {} /// Public interface of home controller mixin MainController implements State { /// Get current instance of Home controller - static MainController of(BuildContext context) => - context.findAncestorStateOfType(); + static MainController of(BuildContext context) { + assert(context != null); // A future implementation might need context again + return mainControllerKey.currentState; + } /// Open user page void openUserPage(int userID); diff --git a/lib/ui/routes/main_route/smartphone_route.dart b/lib/ui/routes/main_route/smartphone_route.dart index 4843195..1daf2fe 100644 --- a/lib/ui/routes/main_route/smartphone_route.dart +++ b/lib/ui/routes/main_route/smartphone_route.dart @@ -27,6 +27,8 @@ import '../login_route.dart'; /// @author Pierre HUBERT class SmartphoneMainRoute extends StatefulWidget implements MainRoute { + const SmartphoneMainRoute({Key key}) : super(key: key); + @override State createState() => _MainRouteState(); } diff --git a/lib/ui/routes/main_route/tablet_route.dart b/lib/ui/routes/main_route/tablet_route.dart index d0549e0..f05c2b7 100644 --- a/lib/ui/routes/main_route/tablet_route.dart +++ b/lib/ui/routes/main_route/tablet_route.dart @@ -11,6 +11,8 @@ import 'package:flutter/material.dart'; /// @author Pierre Hubert class TabletRoute extends StatefulWidget implements MainRoute { + const TabletRoute({Key key}) : super(key: key); + @override _TabletRouteState createState() => _TabletRouteState(); } diff --git a/lib/ui/widgets/init_widget.dart b/lib/ui/widgets/init_widget.dart index 98d36da..5653842 100644 --- a/lib/ui/widgets/init_widget.dart +++ b/lib/ui/widgets/init_widget.dart @@ -1,6 +1,7 @@ import 'package:comunic/helpers/events_helper.dart'; import 'package:comunic/helpers/websocket_helper.dart'; import 'package:comunic/ui/routes/login_route.dart'; +import 'package:comunic/ui/routes/main_route/main_route.dart'; import 'package:comunic/ui/routes/main_route/smartphone_route.dart'; import 'package:comunic/ui/routes/main_route/tablet_route.dart'; import 'package:comunic/ui/widgets/safe_state.dart'; @@ -77,7 +78,9 @@ class _InitializeWidgetState extends SafeState { @override Widget build(BuildContext context) { return !_error && WebSocketHelper.isConnected() - ? (isTablet(context) ? TabletRoute() : SmartphoneMainRoute()) + ? (isTablet(context) + ? TabletRoute(key: mainControllerKey) + : SmartphoneMainRoute(key: mainControllerKey)) : _buildNonReadyWidget(); }