Flutter页面返回数据传递

简介: Flutter页面返回数据传递

问题描述

从A页面跳转到B页面后,在B页面操作后,退出B页面时回到A页面时返回一些数据给A页面

A页面下的跳转

ElevatedButton(
    child: const Text("载入设置"),
    onPressed: () {
        // List<Task>  data = await _dbProvider.getAll();
        _dbProvider.getAll().then((value) => {
        // 跳转到新页面
        Navigator.push(context, MaterialPageRoute(builder: (context) {
        return TaskListPage(value,(index){
            // Navigator.push(context, ...) // 根据 index 跳转
            print("index=$index");
        }); // 传入 Task 列表
        }))
        });
    },
),

新页面

// 新页面
class TaskListPage extends StatelessWidget {
  final List<Task> tasks;
  // TaskListPage(this.tasks);
  TaskListPage(this.tasks, this.onTaskTap);
  final Function onTaskTap;
  @override
  Widget build(BuildContext context) {
    // 根据 Task 数量动态生成 ElevatedButton
    List<Widget> buttons = tasks.map((task) {
      return ElevatedButton(
          style: ElevatedButton.styleFrom(
            backgroundColor: Colors.blue,
            shape: CircleBorder(),
          ),
          child: Column(
              mainAxisAlignment: MainAxisAlignment.center, //居中对齐
              children: [
                Icon(Icons.people),
                Text(task.title)
              ]
          ),
          onPressed: () {
            // 点击事件
            onTaskTap(tasks.indexOf(task));
            Navigator.of(context).pop();
          }
      );
    }).toList();
    // 使用 GridView 实现网格布局
    return Scaffold(
        body: GridView.count(
            crossAxisCount: 3,
            children: buttons,
            padding: EdgeInsets.fromLTRB(10,40,20,10), // 添加 20 的内边距
            // padding: EdgeInsets.symmetric(horizontal: 20),
            crossAxisSpacing: 20 ,     // 设置行列间距为 20
        )
    );
  }
}

主要步骤说明

1、B页面中在TaskListPage 类中添加构造函数TaskListPage(this.tasks, this.onTaskTap);

final Function onTaskTap;

2、A页面在跳转到B页面时,传入要接受数据的变量

        return TaskListPage(value,(index){
            // Navigator.push(context, ...) // 根据 index 跳转
            print("index=$index");
        }); // 传入 Task 列表

结果

点击B页面从数据库里读取出来的数据后,会返回告知A页面,点击了第几个

这只是一个简单的方式,推荐使用Provider, Provider是一个 Flutter 官方推荐的状态管理方案,主要用于在 Widget 树中传递数据。

相关文章
|
4月前
Flutter笔记:使用Flutter构建响应式PC客户端/Web页面-案例
Flutter笔记:使用Flutter构建响应式PC客户端/Web页面-案例
59 0
|
5月前
Flutter StatefulWidget传递数据,多级控件传递数据
Flutter StatefulWidget传递数据,多级控件传递数据 在Flutter中,StatefulWidget可以通过构造函数将数据传递给其子控件,这种方式适用于一些简单的场景。但是,当存在多级嵌套控件时,将数据从祖先传递到后代可能会变得困难。在这种情况下,可以使用Flutter提供的InheritedWidget类来传递数据。
|
11月前
|
UED 索引
Flutter仿写微信导航栏快速实现页面导航
Flutter仿写微信导航栏快速实现页面导航
Flutter实时动态UI刷新、数据交互
Flutter实时动态UI刷新、数据交互
|
Dart Android开发 iOS开发
【Flutter】Flutter 混合开发 ( 安卓端向 Flutter 传递数据 | FlutterFragment 数据传递 | FlutterActivity 数据传递 )
【Flutter】Flutter 混合开发 ( 安卓端向 Flutter 传递数据 | FlutterFragment 数据传递 | FlutterActivity 数据传递 )
460 0
【Flutter】Flutter 混合开发 ( 安卓端向 Flutter 传递数据 | FlutterFragment 数据传递 | FlutterActivity 数据传递 )
|
JSON Dart Android开发
flutter 使用 http 请求数据
flutter 使用 http 请求数据
227 0
如何用一行代码实现Flutter页面变灰效果?
如何用一行代码实现Flutter页面变灰效果?
如何用一行代码实现Flutter页面变灰效果?
|
API
Flutter 用 Dio的 Patch请求完成数据编辑功能
本篇介绍了详情数据的获取,实体对象的部分修改来展示 Dio的 patch 请求。可以看到,Dio 提供的一系列 Restful 请求的方式基本相同,可以做到更好的封装。
242 0
Flutter 用 Dio的 Patch请求完成数据编辑功能
|
存储 数据安全/隐私保护
Flutter App页面路由及路由拦截实现
直接使用页面跳转会带来诸多缺陷,通过路由管理可以降低页面耦合,提高代码的可维护性和权限控制。本篇介绍了 Flutter 的路由管理和拦截实现。
1150 1
Flutter App页面路由及路由拦截实现
|
JSON 数据格式 容器
Flutter 仿微信价值几个亿的页面
网传微信支付页面的第三方链接一个格子需要广告费1一个亿,微信支付页非常适合做功能导航,本篇使用 ListView和 GridView 模仿微信支付页面
222 0
Flutter 仿微信价值几个亿的页面