小编Sou*_*SIS的帖子

为什么我应该使用命名路由?

我搜索了很多有关“使用命名路线在屏幕之间导航的好处是什么”的信息。我找不到任何实际的好处,实际上它有很多缺点并且令人讨厌。

1. flutter文档中说命名路由是为了避免代码重复。

例如,如果我想使用 String 一个参数导航到 SecondRoute,它会从此更改

Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => SecondRoute('Some text')),
);
Run Code Online (Sandbox Code Playgroud)

对此

Navigator.pushNamed(context, SecondRoute.routeName, arguments: 'Some text');
Run Code Online (Sandbox Code Playgroud)

我需要在主文件中注册它

MaterialApp(
  onGenerateRoute: (settings) {
    if (settings.name == SecondRoute.routeName) {
      final String text = settings.arguments as String;
      return MaterialPageRoute(
        builder: (context) => SecondRoute(text),
      );
    }
  },
);
Run Code Online (Sandbox Code Playgroud)

如果我有更多路线,我需要为每个路线处理和分配参数。这不是更多的重复和复杂性吗?

setting.arguments没有类型,那不是很糟糕吗?

2. 使用时无法选择使用哪个构造函数pushNamed

例如,我有两个构造函数defaultotherConstructor

class SecondRoute extends StatelessWidget {
  static const String routeName = '/second';
  String? text;

  SecondRoute(this.text);

  SecondRoute.otherConstructor(String text) {
    this.text = …
Run Code Online (Sandbox Code Playgroud)

flutter

10
推荐指数
1
解决办法
4218
查看次数

到处使用 const 可以吗?

我听说 const 变量不容易处置。

那么,如果可以的话,是否可以始终将小部件创建为 const,即使该小部件仅使用一次?const多了会不会占用很多内存?

例如,我将所有屏幕创建为 const。

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

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      initialRoute: Home.routeName,
      routes: {
        AuthScreen.routeName: (context) => const AuthScreen(),
        Home.routeName: (context) => const Home(),
        OrderScreen.routeName: (context) => const OrderScreen(),
        EmailLoginScreen.routeName:(context) => const EmailLoginScreen(),
      },
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

flutter

6
推荐指数
1
解决办法
2617
查看次数

标签 统计

flutter ×2