如何将值发送到 Flutter 中的多个屏幕?
Posted
技术标签:
【中文标题】如何将值发送到 Flutter 中的多个屏幕?【英文标题】:How to send a value to several screens in Flutter? 【发布时间】:2021-10-24 00:17:46 【问题描述】:我是 Flutter 的新手,我正在使用 CRUD
制作一个应用程序,在家中应该出现每个用户,并且当触摸它时应该将用户的 id
发送到其他屏幕以便能够查询.
我已经尝试使用Class
和Streams
将数据发送到其他屏幕,但我无法做到,我展示了一个我正在测试的示例:
主页
import 'package:flutter/material.dart';
class HomePage extends StatefulWidget
const HomePage(Key? key) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
class _HomePageState extends State<HomePage>
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
body: Center(
child: ListView(
padding: EdgeInsets.symmetric(horizontal: 20.0),
children: [
Row(
children: [
Text('User 1'),
Expanded(child: Column()),
ElevatedButton(
child: Text('Send id'),
onPressed: ()
Navigator.pushNamed(context, 'pageOne');
,
),
],
),
],
),
),
);
一页
import 'package:flutter/material.dart';
class PageOne extends StatefulWidget
PageOne(Key? key) : super(key: key);
@override
_PageOneState createState() => _PageOneState();
class _PageOneState extends State<PageOne>
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(
title: Text('PageOne'),
),
body: Center(
child: Column(
children: [
Text('Id: ##'),
ElevatedButton(
child: Text('Send id to page two'),
onPressed: ()
Navigator.pushNamed(context, 'pageTwo');
,
),
],
),
),
);
【问题讨论】:
你在控制台上打印 ID 吗?参考我的回答here 你试试我的答案here如果有任何问题请告诉我 您发送数据但收不到数据。在这里阅读:flutter.dev/docs/cookbook/navigation/passing-data 我已经尝试用你的答案来做到这一点并且它有效,但是作为几个屏幕,在我的情况下,我必须在屏幕之间发送和返回 id 才能保持价值并制作咨询,通过Navigator
。我不知道这样做是否正确或者代码是否干净,您有什么建议?我希望我已经很好地解释了我的意思。
【参考方案1】:
您必须在小部件树中向下传递数据
首页
Navigator.push(
context,
MaterialPageRoute(builder: (context) => PageOne(id: YOUR INT ID)),
);
第1页:
import 'package:flutter/material.dart';
class PageOne extends StatefulWidget
final int id;
PageOne(Key? key, required this.id) : super(key: key);
@override
_PageOneState createState() => _PageOneState();
class _PageOneState extends State<PageOne>
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(
title: Text('PageOne'),
),
body: Center(
child: Column(
children: [
Text('Id: ' + id.toString()),
ElevatedButton(
child: Text('Send id to page two'),
onPressed: ()
Navigator.push(context,MaterialPageRoute(builder:(context) => Page2(id: YOUR INT ID)),);
,
),
],
),
),
);
第2页:与第1页相同
【讨论】:
以上是关于如何将值发送到 Flutter 中的多个屏幕?的主要内容,如果未能解决你的问题,请参考以下文章