【问题标题】:Problem accessing routes from a module that inherits from ModuleWidget从继承自 ModuleWidget 的模块访问路由时出现问题
【发布时间】:2020-09-01 18:52:06
【问题描述】:
class SearchModule extends ModuleWidget {
  @override
  List<Bind> get binds => [
        Bind((i) => SearchController()),
      ];

  @override
  List<Router> get routers => [
        Router(Modular.initialRoute, child: (_, args) => SearchPage()),
        Router("teacher", child: (_, args) => TeacherListPage()),
      ];

  @override
  Widget get view => SearchPage();

  static Inject get to => Inject<SearchModule>.of();
}

我无法访问此模块的“教师”路线。也就是说,我无法使用Modular.to.pushNamed('/teacher', arguments: TeacherListPage())方法导航到这条路线

我收到以下错误:Could not find a generator for route RouteSettings("/teacher", TeacherListPage) in the _WidgetsAppState.

谁能给我点灯??呵呵

跟随模块的流程。:

I/flutter (13793): -- AppModule INITIALIZED
I/flutter (13793): -- HomeModule INITIALIZED
I/flutter (13793): -- ReviewsModule INITIALIZED
I/flutter (13793): -- HomeModule DISPOSED
I/flutter (13793): -- SearchModule INITIALIZED

遵循模块的结构。:

<------------------------------------------------------------------------>

class AppModule extends MainModule {
  @override
  List<Bind> get binds => [
        Bind((i) => TeacherListController()),
        Bind((i) => ReviewsContentController()),
        Bind((i) => SigninController()),
        Bind((i) => SignupController()),
        Bind((i) => AppController()),
      ];

  @override
  List<Router> get routers => [
        Router(Modular.initialRoute, module: HomeModule()),
        Router('/reviews', module: ReviewsModule()),
      ];

  @override
  Widget get bootstrap => AppWidget();

  static Inject get to => Inject<AppModule>.of();
}

<------------------------------------------------------------------------>

class HomeModule extends ChildModule {
  @override
  List<Bind> get binds => [
        Bind((i) => HomeController()),
      ];

  @override
  List<Router> get routers => [
        Router(Modular.initialRoute, child: (_, args) => HomePage()),
        Router("signUp", child: (_, args) => SignupPage()),
        Router("signIn", child: (_, args) => SigninPage()),
      ];

  static Inject get to => Inject<HomeModule>.of();
}

<------------------------------------------------------------------------>

class ReviewsModule extends ChildModule {
  @override
  List<Bind> get binds => [
        Bind((i) => ReviewsController()),
      ];

  @override
  List<Router> get routers => [
        Router(Modular.initialRoute, child: (_, args) => ReviewsPage()),
      ];

  static Inject get to => Inject<ReviewsModule>.of();
}

<------------------------------------------------------------------------>

class SearchModule extends ModuleWidget {
  @override
  List<Bind> get binds => [
        Bind((i) => SearchController()),
      ];

  @override
  List<Router> get routers => [
        Router(Modular.initialRoute, child: (_, args) => SearchPage()),
        Router("teacher", child: (_, args) => TeacherListPage()),
      ];

  @override
  Widget get view => SearchPage();

  static Inject get to => Inject<SearchModule>.of();
}

<------------------------------------------------------------------------>

【问题讨论】:

  • 我没有阅读完整的代码,但你能确定不是因为在某些地方你使用路由名称为teacher,然后尝试用名称@推送它987654327@.
  • 否定!但是 tkx ;)

标签: android flutter routes dart-pub modular


【解决方案1】:

解决方法是我错误地调用了路由。

当我试图调用 SearchModule 模块中的路由时,我没有找到正确的路径,也就是说,我是这样调用它的:

Modular.to.pushNamed('/teacher')

但是,当这样调用时,Modular 做的第一件事就是检查 AppModule Module 中是否存在这条路由,如上图,只有这条路由

Router('/reviews', module: ReviewsModule()),

因此,正确的导航方法是进入模块“内部”,直到到达具有教师路线的 SearchModule 模块。记住我必须在 ReviewModule 模块中添加 SearchModule 的路由,该路由最终具有教师路由。

很快我不得不添加,

Router('/search', module: SearchModule()),

最后,正确的调用应该是,

Modular.to.pushNamed('/reviews/search/teacher')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2011-08-26
    • 2020-08-08
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多