陕西省住房和城乡建设厅网站上怎么打印证书,成crm软件,本地建设网站软件下载,住房和城乡建设部网站注册我们可以通过创建一个新的Route#xff0c;使用Navigator来导航到一个新的页面#xff0c;但是如果在应用中很多地方都需要导航到同一个页面#xff08;比如在开发中#xff0c;首页、推荐、分类页都可能会跳到详情页#xff09;#xff0c;那么就会存在很多重复的代码。…我们可以通过创建一个新的Route使用Navigator来导航到一个新的页面但是如果在应用中很多地方都需要导航到同一个页面比如在开发中首页、推荐、分类页都可能会跳到详情页那么就会存在很多重复的代码。在这种情况下我们就可以使用 命名路由。 优点
名称路由是将名字和路由的映射关系在一个地方进行统一管理有了命名路由我们可以通过Navigator.pushNamed() 方法来跳转到新的页面
命名路由怎么使用 1、可以放在MaterialApp的 initialRoute 和 routes 中 initialRoute : 设置应用程序从哪一个路由开始启动设置了该属性就不需要再设置home 属性了 2、routes定义名称和路由之间的映射关系类型为 MapString, WidgetBuilder
基本代码如下
return MaterialApp(title: Flutter Demo,theme: ThemeData(primarySwatch: Colors.blue, splashColor: Colors.transparent),initialRoute: /,routes: {/home: (ctx) HYHomePage(),/detail: (ctx) HYDetailPage()},
);在使用跳转的时候则
_onPushTap(BuildContext context) {Navigator.of(context).pushNamed(/detail);
}为了更加规范使用路由则在开发中让每个界面都对 routeName 统一这样每个界面都定义一个路由常量来使用
class HYHomePage extends StatefulWidget {static const String routeName /home;
}class HYDetailPage extends StatelessWidget {static const String routeName /detail;
}为了更好的管理路由映射则单独创建一个文件进行管理 管理路由文件代码如下
import package:flutter/material.dart;
import package:list/douban/Data/my_provider_demo.dart;
import ../Page/detail.dart;
import ../Page/about.dart;
import ../Page/un_known.dart;
import package:list/douban/main.dart;class HYRouter {static final MapString, WidgetBuilder routes {MyHomePage1.routeName:(context) MyHomePage1(),// 默认界面Deatail.routeName:(context) Deatail(),AboutPage.routeName:(context) AboutPage(),
};
// 默认界面static final String initialRoute MyHomePage1.routeName;// 钩子函数
static final RouteFactory generateRoute (settings) {if (settings.name Deatail.routeName){return MaterialPageRoute(builder: (context){// settings.argumentsreturn Deatail();});}return null;
};// 错误界面
static final RouteFactory unKnownRoute (settings) {return MaterialPageRoute(builder: (context) {return UnknownPage();});
};}则MaterialApp 代码也需要优化
Widget build(BuildContext context) {return MaterialApp(title: Flutter Demo,theme: ThemeData(primarySwatch: Colors.blue,),routes: HYRouter.routes,onGenerateRoute:HYRouter.unKnownRoute,onUnknownRoute: HYRouter.unKnownRoute,initialRoute: HYRouter.initialRoute,);跳转 TextButton(child: Text(打开详情),onPressed: () {print(点击打开详情);final result Navigator.of(context).pushNamed(Deatail.routeName,arguments: 去详情界面的数据);result.then((value) {print(${value});});},)在跳转的界面接受参数
Widget build(BuildContext context) {final message ModalRoute.of(context)?.settings.arguments as String;}上述就完成最基本的命名路由的注册映射关系以及跳转。 路由钩子 onGenerateRoute的钩子函数 加入我们有一个界面已经创建好并且传入对应的参数message并且已经有一个 对应的构造方法此时如果将其放到路由映射表中则不合适。因为该界面必需要求传入一个参数这时候我们就可以使用onGenerateRoute的钩子函数当我们通过pushNamed进行跳转但是对应的name没有在routes中有映射关系那么就会执行onGenerateRoute钩子函数我们可以在该函数中手动创建对应的Route进行返回该函数有一个参数RouteSettings该类有两个常用的属性 - name: 跳转的路径名称 - arguments跳转时携带的参数
onGenerateRoute: (settings) {if (settings.name /about) {return MaterialPageRoute(builder: (ctx) {return HYAboutPage(settings.arguments);});}returnnull;
},onUnknownRoute 如果我们打开的一个路由名称是根本不存在这个时候我们希望跳转到一个统一的错误页面。
onUnknownRoute: (settings) {return MaterialPageRoute(builder: (ctx) {return UnknownPage();});
},