modular icon indicating copy to clipboard operation
modular copied to clipboard

WildcardRoute sempre acionado ao iniciar o app

Open ktnishide opened this issue 3 years ago • 1 comments

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 image

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()),
        ]),
  ];
}

ktnishide avatar Jul 01 '22 01:07 ktnishide

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.

Bwolfs2 avatar Jul 14 '22 20:07 Bwolfs2