Flutter学习 路由传值的四种代码写法

这篇博客详细介绍了在Flutter中进行路由传值的四种方法,包括直接在routes中书写、使用onGenerateRoute方法、综合使用routes和onGenerateRoute,以及通过ModelRoute传递值。并提供了具体的取值代码示例。

第一种:直接在routes中书写

@override
  Widget build(BuildContext context) {
    return MaterialApp(
      home:AppScaffoldFul(),
       routes: {
        // "/proudctlist":(context,{arguments})=>ProductList(arguments: arguments),
        "/cateory":(context)=>CateoryPage(),
      },

       // 处理Named页面跳转 传递参数
      onGenerateRoute: (RouteSettings setting) {
        if(setting.name == '/proudctlist') {
          return MaterialPageRoute(builder: (context) => ProductList(arguments: setting.arguments));
        }
      },
     
      // onGenerateRoute: generateRoute,
    );
  }
}

第二种:抽取方法onGenerateRoute

class MyApp2 extends StatelessWidget {
  const MyApp2({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home:AppScaffoldFul(),
       routes: {
        // "/proudctlist":(context,{arguments})=>ProductList(arguments: arguments),
        "/cateory":(context)=>CateoryPage(),
      },
      onGenerateRoute: generateRoute,
    );
  }
}

var generateRoute = (RouteSettings settings){

  String name = settings.name;
  print(name);
  if ("/proudctlist" == name) {
    return MaterialPageRoute(
      builder: (context)=> ProductList(arguments:settings.arguments)
      );
  }
};

第三种:(大家推荐)抽取 routes 和 onGenerateRoute

final routes = {
        "/proudctlist":(context,{arguments})=>ProductList(arguments: arguments),
        "/cateory":(context)=>CateoryPage(),
};

var generateRoute = (RouteSettings settings){

  //方式三
  final String name = settings.name;
  // final Function pageContentBuilder = (context,{arguments})=>ProductList(arguments: arguments);
  final Function pageContentBuilder = routes[name]; 
  if (pageContentBuilder != null) {
    if (settings.arguments != null) {
      final Route route = MaterialPageRoute(
          builder: (context) =>
              pageContentBuilder(context, arguments: settings.arguments));
      return route;
    } else {
      final Route route =
          MaterialPageRoute(builder: (context) => pageContentBuilder(context));
      return route;
    }
  }
};

取值代码如下

 


import 'package:flutter/material.dart';

class ProductList extends StatelessWidget {

  Map arguments;

   ProductList({Key key, this.arguments}) : super(key: key);


  @override
  Widget build(BuildContext context) {
     Map map = this.arguments;
    return Scaffold(
      appBar: AppBar(
        title:Text("列表标题")
      ),
      body: Text(
        "完成===${this.arguments['id']}"
        // "商品列表${(map == null )?map['id']:"222"}"
      ),
    );
  }
}

// "完成===${this.arguments['id']}"

"商品列表:${(map == null )?"没有获取参数":map['id']}"

四种:

官方新增加一种modelrout传值

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值