如何将值发送到 Flutter 中的多个屏幕?

Posted

技术标签:

【中文标题】如何将值发送到 Flutter 中的多个屏幕?【英文标题】:How to send a value to several screens in Flutter? 【发布时间】:2021-10-24 00:17:46 【问题描述】:

我是 Flutter 的新手,我正在使用 CRUD 制作一个应用程序,在家中应该出现每个用户,并且当触摸它时应该将用户的 id 发送到其他屏幕以便能够查询. 我已经尝试使用ClassStreams 将数据发送到其他屏幕,但我无法做到,我展示了一个我正在测试的示例:

主页

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 中的多个屏幕?的主要内容,如果未能解决你的问题,请参考以下文章

通过通道将值发送到多个 goroutine

如何将 Flutter 中的消息发送到通道 websocket?

环回:如何确保将值发送到本地数据库,而不是远程数据库?

翩翩将数据发送到其他屏幕,而不需要导航仪。

Laravel:如何将值从控制器发送到模型?

Bootstrap Datepicker - 如何将值发送到 URL?