gpt4 book ai didi

flutter - Flutter 上从静态路由到动态路由的优势

转载 作者:行者123 更新时间:2023-12-04 11:51:49 24 4
gpt4 key购买 nike

我可以看到 MaterialApp应用程序可以接收路线。
1.静态路由

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
routes: {
'/page1': (context) => Page1(title: "Main page"),
...
并从小部件显示它们,例如:
myKey.currentState.pushNamed("/page1");
还有其他参数,如 onGenerateRouteinitialRoute这让我更加困惑。
2. 动态页面
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondRoute()),
);
}

我想知道这个参数的含义是什么,让这个“责任”给 MaterialApp ,以及为什么我们应该这样做,也许与内存管理有关或如何 Widget生命周期有效,还是什么?
1. 和 2. 之间有什么区别?

最佳答案

答案更多地在于您的架构。
1.静态路由在管理项目复杂性方面是两者中更好的。明确定义了路线供多个开发者理解,导航代码更容易,Navigator.of(context).pushNamed('your-route');对比

Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondRoute()),
);
2.动态页面在教程中很常见,以减少样板代码。它只是导航的快捷方式。这样做的缺点是很难管理路线,因此应该仅限于简短的教程。
3.生成的路由不过,还有第三种选择,在我看来,这是两者中最好的一种,那就是生成的路线。这是最干净和最容易维护的结构。有一个很棒的教程 here关于它。这是纲要:
  • 声明路由:
  • class RoutePaths {
    static const Start = '/';
    static const SecondScreen = 'second'
    }
  • 声明你的路由器:
  • class Router {
    static Route<dynamic> generateRoute(RouteSettings settings) {
    switch (settings.name) {
    case RoutePaths.Start:
    return MaterialPageRoute(builder: (_) => YourFirstScreenWidget());

    case RoutePaths.SecondScreen:
    // you can do things like pass arguments to screens
    final event = settings.arguments as Event;
    return MaterialPageRoute(
    builder: (_) => YourSecondScreenWidget(event: event));

    default:
    return MaterialPageRoute(
    builder: (_) => Scaffold(
    body: Center(
    child: Text('No route defined for ${settings.name}'),
    ),
    ));
    }
    }
    }

  • 在 main.dart 中声明
  • initialRoute: RoutePaths.Start,
    onGenerateRoute: Router.generateRoute,
  • 导航
  • // arguments: event is an optional parameter to send to secondScreen
    Navigator.of(context).pushNamed(RoutePaths.SecondScreen, arguments: event);

    关于flutter - Flutter 上从静态路由到动态路由的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63219912/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com