flutter使用重定向路由接收命名路由参数

命名路由如果在initstate中接收路由参数,需要通过重定向路由把参数转发到接收参数的页面

step1.在main中定义重定向路由

  Widget build(Object context) {

    return MaterialApp(

      home: Tabs(),

      theme: ThemeData(primaryColor: Colors.green),

      routes: route,

      // 重定向路由

      onGenerateRoute: (RouteSettings settings) {

        print('build route for ${settings.name}');

        var routes = <String, WidgetBuilder>{

            //在此处设置路由,如果有单独路由表的,需要删除路由表上的路由

          "/newsdetail": (ctx) => NewsDetailPage(settings.arguments),

        };

        WidgetBuilder builder = routes[settings.name];

        return MaterialPageRoute(builder: (ctx) => builder(ctx));

      },

    );

  }

step2。发起页面跳转的Navigator.pushNamed

Navigator.pushNamed(context, "/newsdetail",

                                arguments: "${this._newList[index]["aid"]}"); //替换路由

step3.接收参数的页面

class NewsDetailPage extends StatefulWidget {

    //定义接收参数的构造函数

  final aid;

  NewsDetailPage(this.aid, {Key key}) : super(key: key);

  @override

  _NewsDetailPageState createState() => _NewsDetailPageState(this.aid);

}

class _NewsDetailPageState extends State<NewsDetailPage> {

  _NewsDetailPageState(this.aid);

  var aid;

  List _list = [];

  @override

  void initState() {

    // TODO: implement initState

    super.initState();

    this._getNewsDetail();

  }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。