使用颤振将多个参数传递给命名路由

奥马尔·阿卜杜拉齐姆

我正在尝试使用具有多个命名参数的命名路由作为下面的示例,问题是如果我想将多个参数传递给屏幕,所以我需要使用这些参数定义一个自定义类。假设我有 10 个屏幕要导航,所以用它的参数定义 10 个自定义类是有意义的?

    import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      onGenerateRoute: (settings) {
        if (settings.name == FirstScreen.routeName) {
        
          final args = settings.arguments as FirstScreenArguments;

          return MaterialPageRoute(
            builder: (context) {
              return FirstScreen(
                title: args.title,
                message: args.message,
              );
            },
          );
        } else if (settings.name == HomeScreen.routeName)
          return MaterialPageRoute(
            builder: (context) {
              return HomeScreen();
            },
          );
        assert(false, 'Need to implement ${settings.name}');
        return null;
      },
      title: 'Navigation with named arguments',
      initialRoute: HomeScreen.routeName,
    );
  }
}

class HomeScreen extends StatelessWidget {
  HomeScreen({Key? key}) : super(key: key);

  static const routeName = '/';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Home Screen'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.pushNamed(
              context,
              FirstScreen.routeName,
              arguments: FirstScreenArguments(
                title: 'Welcome',
                message: "Coming from home screen ",
              ),
            );
          },
          child: const Text('Navigate to first screen'),
        ),
      ),
    );
  }
}

class FirstScreen extends StatelessWidget {
  final String title;
  final String message;

  const FirstScreen({Key? key, required this.title, required this.message})
      : super(key: key);

  static const routeName = '/firstScreen';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Screen'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(title),
            Text(message),
          ],
        ),
      ),
    );
  }
}

class FirstScreenArguments {
  final String title;
  final String message;

  FirstScreenArguments({required this.title, required this.message});
}
阿巴西森

标准方法是为每个页面定义相关类,但是您可以JSON在每个页面上创建一个字符串并将其传递给另一个页面。例如,首先在第 1 页定义它:

String temp = json.encode({
par1:"test",
par2:"test2" // and so on
});

然后将其传递到另一个页面:

Navigator.pushNamed(
              context,
              FirstScreen.routeName,
              arguments: temp
            );

然后在另一个页面上解码它:

Map<String, dynamic> data = json.decode(temp);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将多个命名参数传递给Spring JdbcTemplate?

将参数传递给路由

如何使用ODBC将多个命名参数传递给DB2数据库

颤振:位置参数太多:预期为 0,但在我将函数传递给其他函数时发现 1

颤振:位置参数太多:预期为 0,但在我将函数传递给其他函数时发现 1

如何将参数传递给未命名的路由:TypeError:“instanceof”的右侧不可调用

将命名参数传递给Shell脚本

PowerShell将命名参数传递给ArgumentList

如何将参数传递给路由

如何将参数传递给路由?

将多个参数/参数传递给目标

如何使用__new__将多个参数传递给类?

如何使用JavaScript XMLHttpRequest将多个参数传递给@RequestBody

使用laravel将多个参数传递给onClick()函数

Python Pandas:使用参数将多个函数传递给agg()

如何使用 | 将多个参数传递给 Ruby 方法?

如何使用按钮将多个参数传递给 WPF 命令?

颤振:如何将值传递给对话框?

如何将地图从子级传递给父级颤振

如何将多个路由作为参数传递给 Laravel 8 中的 Route::is() 方法?

将多个参数从 Laravel 5 中的路由传递给控制器

如何将变量传递给FlowRouter“命名路由”?

将道具传递给 <nuxt-link> 或将隐藏数据传递给路由器但不使用参数

将多个参数传递给operator []

将多个参数传递给RecyclerView

将多个参数传递给addTarget

将多个参数传递给咖喱函数

将多个参数传递给API

将多个参数传递给 Maven