我搜索了很多有关“使用命名路线在屏幕之间导航的好处是什么”的信息。我找不到任何实际的好处,实际上它有很多缺点并且令人讨厌。
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。
例如,我有两个构造函数default和otherConstructor
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) 我听说 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 ×2