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 树中传递数据。

相关文章
|
1月前
|
前端开发
Flutter快速实现自定义折线图,支持数据改变过渡动画
Flutter快速实现自定义折线图,支持数据改变过渡动画
37 4
Flutter快速实现自定义折线图,支持数据改变过渡动画
|
19天前
|
开发者 监控 开发工具
如何将JSF应用送上云端?揭秘在Google Cloud Platform上部署JSF应用的神秘步骤
【8月更文挑战第31天】本文详细介绍如何在Google Cloud Platform (GCP) 上部署JavaServer Faces (JSF) 应用。首先,确保已准备好JSF应用并通过Maven构建WAR包。接着,使用Google Cloud SDK登录并配置GCP环境。然后,创建`app.yaml`文件以配置Google App Engine,并使用`gcloud app deploy`命令完成部署。最后,通过`gcloud app browse`访问应用,并利用GCP的监控和日志服务进行管理和故障排查。整个过程简单高效,帮助开发者轻松部署和管理JSF应用。
32 0
|
4月前
Flutter笔记:使用Flutter构建响应式PC客户端/Web页面-案例
Flutter笔记:使用Flutter构建响应式PC客户端/Web页面-案例
187 0
|
4月前
Flutter StatefulWidget传递数据,多级控件传递数据
Flutter StatefulWidget传递数据,多级控件传递数据 在Flutter中,StatefulWidget可以通过构造函数将数据传递给其子控件,这种方式适用于一些简单的场景。但是,当存在多级嵌套控件时,将数据从祖先传递到后代可能会变得困难。在这种情况下,可以使用Flutter提供的InheritedWidget类来传递数据。
|
Dart Android开发 iOS开发
【Flutter】Flutter 混合开发 ( 安卓端向 Flutter 传递数据 | FlutterFragment 数据传递 | FlutterActivity 数据传递 )
【Flutter】Flutter 混合开发 ( 安卓端向 Flutter 传递数据 | FlutterFragment 数据传递 | FlutterActivity 数据传递 )
501 0
【Flutter】Flutter 混合开发 ( 安卓端向 Flutter 传递数据 | FlutterFragment 数据传递 | FlutterActivity 数据传递 )
Flutter仿写微信导航栏快速实现页面导航
Flutter仿写微信导航栏快速实现页面导航
如何用一行代码实现Flutter页面变灰效果?
如何用一行代码实现Flutter页面变灰效果?
如何用一行代码实现Flutter页面变灰效果?
|
存储 数据安全/隐私保护
Flutter App页面路由及路由拦截实现
直接使用页面跳转会带来诸多缺陷,通过路由管理可以降低页面耦合,提高代码的可维护性和权限控制。本篇介绍了 Flutter 的路由管理和拦截实现。
1302 1
Flutter App页面路由及路由拦截实现
|
JSON Dart Android开发
flutter 使用 http 请求数据
flutter 使用 http 请求数据
307 0

相关实验场景

更多