Flutter路由传参

news/2024/6/18 21:32:00 标签: flutter

Flutter路由传参

  • 1、普通路由
  • 2、路由拦截onGenerateRoute

1、普通路由

//main.dart
routes: routes,
// 路由跳转
onTap: () {
  // 跳转到任务详情页
  Navigator.of(context).pushNamed('taskDetail',
      arguments:listViewData[index]);
},
// 接收参数,在Widget中
Text(ModalRoute.of(context).settings.arguments.toString();)

2、路由拦截onGenerateRoute

我想把传过来的参数,放在initState中,初始化一个变量,再以变量为参数发送请求获得数据

  void initState() {
    super.initState();
    _taskTrunk = ModalRoute.of(context).settings.arguments;//报错,不知是何原因?
  }

查了下网上的同学们提供的方法onGenerateRoute

   // main.dart路由
   initialRoute: '/',
   // routes: routes,//普通路由时定义的
   onGenerateRoute: onGenerateRoute,
// route.dart
//配置路由
import 'package:AGV/view/login_view.dart';
import 'package:AGV/view/mainPage_view.dart';
import 'package:AGV/view/task/taskDetail_view.dart';
import 'package:flutter/material.dart';
import 'package:AGV/view/task/taskAdd_view.dart';

final routes = {
  "/": (context, {arguments}) => MainPageView(),
  "login": (context, {arguments}) => LoginView(),
  "taskAdd": (context, {arguments}) => TaskAddView(),
  "taskDetail": (context, {arguments}) => TaskDetailView(arguments: arguments),
};

// 处理参数传递
// ignore: top_level_function_literal_block
var onGenerateRoute = (RouteSettings settings) {
  // 获取声明的路由页面函数
  // var pageBuilder = routes[settings.name];
  final Function pageBuilder = routes[settings.name];
  print('********************************');
  if (pageBuilder != null) {
    if (settings.arguments != null) {
      // print(settings.arguments);
      final Route route = MaterialPageRoute(
        builder: (context) {
          //将RouteSettings中的arguments参数取出来,通过构造函数传入
          return pageBuilder(context, arguments: settings.arguments);
        },
        settings: settings,
      );
      return route;
    } else {
      return MaterialPageRoute(builder: (context) => pageBuilder(context));
    }
  }
  return MaterialPageRoute(builder: (context) => MainPageView());
};
// 路由跳转
onTap: () {
  // 跳转到任务详情页
  Navigator.of(context).pushNamed('taskDetail',
      arguments: {'taskData': listViewData[index]});
},
// 接收参数
class TaskDetailView extends StatefulWidget {
  TaskDetailView({Key key, this.arguments}) : super(key: key);
  final Map arguments;
  @override
  _TaskDetailViewState createState() => _TaskDetailViewState();
}

class _TaskDetailViewState extends State<TaskDetailView> {
  TaskTrunk _taskTrunk;
  void initState() {
    super.initState();
    _taskTrunk = widget.arguments['taskData'];
  }

http://www.niftyadmin.cn/n/1409594.html

相关文章

TCP/IP基础总结性学习(4)

返回结果的 HTTP 状态码 一.简单介绍&#xff1a; 总述&#xff1a;HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。状态码构成&#xff1a;以 3 位数字和原因短语组成。数字中的第一位指定了响应类别&#xff0c;后两位无…

xgboost算法_手把手机器学习实战系列:xgboost 算法

算法简介xgboost算法是一种boosting的集成学习算法&#xff0c;是将多个弱学习模型进行组合&#xff0c;从而获得更好的效果&#xff0c;使得组合后的模型有更强的泛化能力&#xff0c; 它通常是由基本的回归树(CART)树模型组成如图所示:通过输入用户的年龄&#xff0c;性别来判…

python计划任务

2019独角兽企业重金招聘Python工程师标准>>> APScheduler模块不同于python-crontab模块&#xff0c;它不会在系统上创建任何cronjob,所有任务将在运行时执行。 APScheduler是基于Quartz的一个Python定时任务框架&#xff0c;实现了Quartz的所有功能&#xff0c;使用…

Flutter日期时间

Flutter日期时间1、日期选择器2、当前时间3、UTC时间4、时间戳转日期1、日期选择器 //日期选择flutter_datetime_picker: ^1.5.1//日期格式化date_format: ^2.0.4// showDatePicker、showTimePicker、showDateTimePicker TextButton(onPressed: () {DatePicker.showDateTimePic…

雷果国(goosman.lei),2009年毕业于兰州商学院计算机科学专业,

雷果国&#xff08;goosman.lei&#xff09;&#xff0c;2009年毕业于兰州商学院计算机科学专业&#xff0c;目前在百度任职PHP高级研发工程师。翻译有《extending and embedding php》一书&#xff0c;以及JQuery-UI-1.7.2官方文档、Pcntl、Pcre、Memcache和Memcached等PHP扩展…

手机屏幕分辨率

1、问&#xff1a;什么是手机屏幕分辨率&#xff1f; 答&#xff1a;手机厂商公布的屏幕物理像素点&#xff0c;一般在手机"设置"->"关于手机"里可以查看,如iPhone 6的屏幕分辨率750*1334(px) 2、问&#xff1a;那屏幕尺寸是&#xff1f; 答&#xf…

elixir 调用erlang 代码

备注&#xff1a; 项目比较简单&#xff0c;主要是elixir 混合erlang 代码&#xff0c;elixir 调用erlang 模块方法1. 初始化项目mix new erlangelixirdemo项目结构如下&#xff1a;├── README.md ├── config │ └── config.exs ├── lib │ └── erlangeli…

codesoft指定打印机打印_制造业中的标签打印解决方案

>> 点击上方 懒人MES 关注我们今天我们来说说制造业中的标签打印解决方案&#xff0c;标签打印解决方案主要用于创建&#xff0c;自定义&#xff0c;编辑和打印各种业务需要的标签。我们在实施或者是使用MES的时候一般都会涉及到标签打印功能。MES作为制造执行解决方案&a…