modular
modular copied to clipboard
WildcardRoute sempre acionado ao iniciar o app
Describe the question Temos um app com bottom navigation em RouterOutlet, ao aplicar WildcardRoute em MenuModule, ele sempre carrega em WildcardRoute ao iniciar o app. Alguma ideia do que posso estar fazendo errado? Agradeco qualquer ajuda!
Expected behavior Iniciar o app com o menu e home tab. Caso o app abra em rota nao existente(por deeplink ou push notification), ir para WildcardRoute.
Screenshots

AppModule:
import 'package:flutter_modular/flutter_modular.dart';
import 'app_store.dart';
import 'common/common_module.dart';
import 'modules/login/login_module.dart';
import 'modules/menu/menu_module.dart';
class AppModule extends Module {
@override
List<Module> get imports => [CommonModule()];
@override
final List<Bind> binds = [
Bind.singleton((i) => AppStore(i(), i(), i())),
];
static const String login = '/login';
static pushLogin() async =>
await Modular.to.pushNamed<bool>('${AppModule.login}/');
@override
final List<ModularRoute> routes = [
ModuleRoute(Modular.initialRoute, module: MenuModule()),
ModuleRoute(login, module: LoginModule()),
];
}
AppWidget
import 'package:asuka/asuka.dart' as asuka;
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_modular/flutter_modular.dart';
...
import 'app_store.dart';
final scaffoldMessengerKey = GlobalKey<ScaffoldMessengerState>();
class AppWidget extends StatefulWidget {
const AppWidget({Key? key}) : super(key: key);
@override
State<AppWidget> createState() => _AppWidgetState();
}
class _AppWidgetState extends State<AppWidget> {
final store = Modular.get<AppStore>();
final _analyticsService = Modular.get<IAnalyticsService>();
@override
void initState() {
super.initState();
Modular.setInitialRoute(MenuModule.homeTab);
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: store.init(),
builder: (context, snapshot) {
if (snapshot.connectionState != ConnectionState.done) {
return const CustomProgressIndicatorWidget();
}
return MaterialApp.router(
title: AppConstants.appName,
theme: store.appTheme,
builder: (context, child) => asuka.builder(
context,
MediaQuery(
data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
child: AppScaffoldWidget(child: child)),
),
routeInformationParser: Modular.routeInformationParser,
routerDelegate: Modular.routerDelegate
..setObservers([
asuka.asukaHeroController,
_analyticsService.getAnalyticsObserver(),
]),
);
});
}
}
class AppScaffoldWidget extends HookWidget {
const AppScaffoldWidget({Key? key, this.child}) : super(key: key);
final Widget? child;
@override
Widget build(BuildContext context) {
final appStore = Modular.get<AppStore>();
final appState = useAppLifecycleState();
useEffect(() {
appStore.setAppLifeCycleState(appState);
return;
}, [appState]);
return GestureDetector(
onTap: () => DeviceUtils.hideKeyboard(context),
child: Scaffold(
resizeToAvoidBottomInset: false,
backgroundColor: Colors.transparent,
body: child,
),
);
}
}
MenuModule
import 'package:flutter_modular/flutter_modular.dart';
import 'package:studentedge_app/app/common/auth/guard/auth_guard.dart';
import 'package:studentedge_app/app/modules/deals/deals_module.dart';
import 'package:studentedge_app/app/modules/favourites/favourites_module.dart';
import 'package:studentedge_app/app/modules/feed/feed_module.dart';
import 'package:studentedge_app/app/modules/home/home_module.dart';
import 'package:studentedge_app/app/modules/more/more_module.dart';
import 'package:studentedge_app/app/modules/survey/survey_module.dart';
import 'package:studentedge_app/widgets/failure_widget.dart';
import 'menu_page.dart';
import 'menu_store.dart';
class MenuModule extends Module {
@override
List<Module> get imports => [
SurveyModule(),
DealsModule(),
FavouritesModule(),
FeedModule(),
];
@override
final List<Bind> binds = [
Bind((i) => MenuStore(i(), i(), i(), i(), i())),
];
static const tabsList = [homeTab, dealsTab, favouritesTab, feedTab, moreTab];
static bool get isOnTab => tabsList.contains(Modular.routerDelegate.path
.substring(0, Modular.routerDelegate.path.length - 1));
static const String homeTab = '/home';
static const String dealsTab = '/deals';
static const String feedTab = '/feed';
static const String surveyTab = '/surveys';
static const String favouritesTab = '/favourites';
static const String moreTab = '/more';
@override
final List<ModularRoute> routes = [
ChildRoute(Modular.initialRoute,
child: (_, args) => const MenuPage(),
children: [
ModuleRoute(homeTab, module: HomeModule()),
ModuleRoute(dealsTab, module: DealsModule()),
ModuleRoute(feedTab, module: FeedModule()),
ModuleRoute(surveyTab, module: SurveyModule()),
ModuleRoute(favouritesTab,
module: FavouritesModule(), guards: [AuthGuard()]),
ModuleRoute(moreTab, module: MoreModule()),
WildcardRoute(child: (_, __) => const FailureWidget()),
]),
];
}
Só com esse Trecho de Codigo nao consegui simular aqui =/
Tenta adicionar um Modular.to.addListener(print) para ver as rotas que estao sendo chamadas e tentar identificar qual a rota ele esta chamando ao abrir o App.