第十四回:如何在页面之间传递数据

news/2024/7/20 23:07:43 标签: flutter, android, ios, route, 页面跳转时传递数据

文章目录

  • 概念介绍
  • 实现方法
  • 示例代码

我们在上一章回中介绍了Route和Navigator相关的内容,本章回中将介绍如何在 页面之间传递数据。闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在这里说的数据传递表示把数据从一个页面传递到另外一个页面。在上一章回中介绍完在页面之间跳转的内容后,我们接着介绍在页面之间传递数据,因为在页面跳转时伴随着数据传递。

实现方法

  1. 在页面所属的Widget中定义一个属性(或者叫变量),我们给它取名叫data;
  2. 在页面所属Widget的构造方法中给data变量赋值;
  3. 创建该页面的对象时通过构造方法对页面对象初始化,其中包含对data变量的初始化操作;
  4. 把页面对象当作Route的成员,使用Route进行页面跳转的同时传递数据;

示例代码

上面的方法比较抽象,我们通过具体的代码来演示如何在页面之间传递数据;

class SecondRouter extends StatelessWidget {
  const SecondRouter({Key? key,required this.data}) : super(key: key);

  final String data;
  
  Widget build(BuildContext context) {
    // TODO: implement build

    return Scaffold(
      appBar: AppBar(
        title: const Text("This is the second page"),
        backgroundColor: Colors.purpleAccent,
      ),
      body: OutlinedButton(
        onPressed: (){
          Navigator.pop(context,
              MaterialPageRoute(builder: (context){
                return const MyHomePage(title: "Back to Home");
              })
          );
        },
        // child: const Text("Back"),
        child: Text(data),
      ),
    );
  }
}

上面的代码大部分内容和上一章回中的代码一致,不一样的地方在于我们定义了新的属性:data,并且修改了该类的构造方法,在构造方法中初始化data属性。我们把代码中OutlinedButton中显示的文字修改成了data的内容,这样在接收到新数据后就可以在Button上面显示出来。下面是创建该页面对象的代码:

  ElevatedButton(
  onPressed: () {
    Navigator.push(context, MaterialPageRoute(builder: (context) {
      return SecondRouter(data: "send data");
    }));
  },
  child: Text(
    title,
  ),
),

上面代码中,我们创建了SecondRouter这个类表示的页面对象,创建对象时把data初始化为"send data",然后把该对象放到了MaterialPageRoute中,这样在页面跳转时就可以传递数据到SecondRouter这个页面中。最后,我们把页面跳转的方法封装到了ElevatedButton的事件响应方法中(onPressed),点击该Button时就会跳转到SecondRouter页面中,同时也会发生数据传递,被传递数据会显示在SecondRouter页面中的Button上面。我在这里就不演示程序的运行结果了,建议大家自己动手去实践。

此外,我们在这里只演示了部分程序代码,我把完整的项目代码放到了Github上,本章回的内容与ex006_xxx这个文件的中的代码相对应。

看官们,关于"如何在页面之间传递数据"的内容就介绍到这里,欢迎大家在评论区交流与讨论!


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

相关文章

YOLOv8 更换主干网络之 PP-LCNet

《PP-LCNet: A Lightweight CPU Convlutional Neural Network》 论文地址:https://arxiv.org/abs/2109.15099 代码地址:https://github.com/ngnquan/PP-LCNet 我们提出了一种基于MKLDNN加速策略的轻量级CPU网络,名为PP LCNet,它提高了轻量级模型在多个任务上的性能。本文列…

【小样本分割 2020 ICCV】PANet

文章目录 【小样本分割 2020 ICCV】PANet1. 简介2. 网络2.1 整体架构2.2 原型学习2.3 非参数度量学习2.4 原型对齐正则化 3. 代码3.1 backbone3.2 模型代码 【小样本分割 2020 ICCV】PANet 论文题目:PANet: Few-Shot Image Semantic Segmentation with Prototype Al…

SpringCloud入门实战(七)-Hystrix服务限流

📝 学技术、更要掌握学习的方法,一起学习,让进步发生 👩🏻 作者:一只IT攻城狮 。 💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看&…

深入浅出openGauss的执行器基础

目录 火山模型 Tuple 数据结构设计 条件计算 Expr 和 Var 示例1 filter 示例2 join 示例3 index scan & index only scan 火山模型 执行器各个算子解耦合的基础。对于每个算子来说,只有三步: 1、向自己的孩子拿一个 tuple。即调用孩子节点…

《面试1v1》java泛型

我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。 面试官:小伙子,说实话,泛型这个机制一开始我也是一头雾水,搞不太明白它到底要解决什么问题。你能不能不那么书呆子,给我普普通通地讲一讲泛型? 候选人…

【13】SCI易中期刊推荐——计算机工程 | 电子与电气(中科院4区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…

测试Ocr工具IronOCR(续:编写图片圈选程序)

上一篇文章学习了IronOCR的基本用法之后&#xff0c;计划做一个加载本地图片后&#xff0c;从图片中圈选某一位置的文字&#xff0c;然后调用IronOCR识别圈选区域文本的程序。本文实现从本地加载图片并完成圈选的功能。   主要的功能包括以下几点&#xff1a;   1&#xff…

随机模型预测控制(SMPC)——考虑概率约束(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 模型预测控制&#xff08;MPC&#xff09;又称为滚动时域控制和滚动时域控制&#xff0c;是一种强有力的工程应用技术。MPC的价…