做视频网站怎么对接云盘,爱情动作片做网站,会展相关网站建设情况,网站内部链接的作用有哪些flutter中使用动态路由传递参数的封装案例#xff0c;子组件页面只需要接收arguments参数即可#xff0c;参数是一个map#xff0c;里面包含有所需要的参数#xff0c;类似于json。在MaterialApp中配置onGenerateRoute#xff0c;然后动态判断传递参数#xff1a;
route…flutter中使用动态路由传递参数的封装案例子组件页面只需要接收arguments参数即可参数是一个map里面包含有所需要的参数类似于json。在MaterialApp中配置onGenerateRoute然后动态判断传递参数
routes列表 // 命名路由传参Map routes {/home: (content) Home(),/search: (context) SearchPage(),// 传递参数的形式/store: (context, {arguments}) Store(arguments: arguments)}; onGenerateRoute函数 onGenerateRoute: (RouteSettings settings) {// 获取声明的路由页面函数var pageBuilder routes[settings.name];if (pageBuilder ! null) {if (settings.arguments ! null) {// 创建路由页面并携带参数return MaterialPageRoute(builder: (context) pageBuilder(context, arguments: settings.arguments));} else {return MaterialPageRoute(builder: (context) pageBuilder(context));}}return MaterialPageRoute(builder: (context) HomePage());}
然后在路由跳转的时候 使用pushNamed进行传递参数 Navigator.pushNamed(context, /store,arguments: {title: 京东首页, price: 100});
在子组件里面定义并接收参数:
import package:flutter/material.dart;class Store extends StatefulWidget {const Store({super.key, this.arguments});final dynamic arguments;overrideStateStore createState() _StoreState();
}class _StoreState extends StateStore {overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text(${widget.arguments ! null ? widget.arguments[title] : ThirdPage}),),body: Center(child: ElevatedButton(child: Text(返回上一家),onPressed: () {print(返回上一家);Navigator.pop(context);},),),);}
}最后的优化可以将route封装成一个dart包然后引入到materialApp中让逻辑更清晰 router.dart源代码
import package:flutter/material.dart;
import ../main.dart;
import ../pages/home.dart;
import ../pages/search.dart;
import ../pages/store.dart;// 命名路由传参
Map routes {/home: (content) Home(),/search: (context) SearchPage(),/store: (context, {arguments}) Store(arguments: arguments)
};// 定义一个函数并返回MaterialPageRoute
var onGenerateRoute (RouteSettings settings) {var pageBuilder routes[settings.name];if (pageBuilder ! null) {if (settings.arguments ! null) {// 创建路由页面并携带参数return MaterialPageRoute(builder: (context) pageBuilder(context, arguments: settings.arguments));} else {return MaterialPageRoute(builder: (context) pageBuilder(context));}}return MaterialPageRoute(builder: (context) HomePage());
};在materialApp中引入
最后的效果图