【问题标题】:call onGenerateRoute function without arguments不带参数调用 onGenerateRoute 函数
【发布时间】:2021-06-03 22:38:15
【问题描述】:

我想知道我们如何在没有参数的情况下调用 generateRoute onGenerateRoute: RouteGenerator.generateRoute

我的期望是: RouteGenerator.generateRoute(设置)

谢谢,

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<int>(
        stream: NumberCreator().stream,
        builder: (context, snapshot) {
          print('StreamBuilder: ${snapshot.connectionState}');

          return MaterialApp(
            title: 'Demo',
            **onGenerateRoute: RouteGenerator.generateRoute,**
            onGenerateInitialRoutes: (String initialRouteName) {
              return [
                RouteGenerator.generateRoute(
                    RouteSettings(name: '/', arguments: snapshot)),
              ];
            },
          );
        });
  }
}

class RouteGenerator {
  static Route<dynamic> generateRoute(RouteSettings settings) {
    final args = settings.arguments;

    switch (settings.name) {
      case '/':
        if (args is AsyncSnapshot<int>) {

【问题讨论】:

    标签: flutter navigation arguments


    【解决方案1】:

    这并不是你在没有参数的情况下调用onGenerateRoute,而是因为你传递的参数符合预期的类型RouteFactorydefined as follow in the flutter documentation

    typedef RouteFactory = Route<dynamic>? Function(RouteSettings settings);
    

    您的generateRoute 符合这种类型,因为它是一个接受RouteSettings 参数并返回Route&lt;dynamic&gt; 类型的对象的函数。

    这是我在项目中使用的代码:

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Demo',
          initialRoute: /*<my_initial_route */,
          onGenerateRoute: MyRouter.generateRoute,
        );
      }
    }
    
    class RouteGenerator {
      static Route<dynamic> generateRoute(RouteSettings settings) {
        switch (settings.name) {
          // your cases ...
          default:
            return MaterialPageRoute(
              builder: (_) => Scaffold(
                body: Center(
                  child: Text('No route defined for ${settings.name}'),
                ),
              ),
            );
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      • 2016-11-29
      • 2014-04-02
      • 2013-02-17
      • 1970-01-01
      相关资源
      最近更新 更多