【问题标题】:Flutter get data that was returned to Drawer from Navigator.pop()Flutter 获取从 Navigator.pop() 返回到 Drawer 的数据
【发布时间】:2020-12-07 16:44:45
【问题描述】:

我有我的应用程序的主/主页小部件,我们称之为home.dart

在这个小部件中,我在Scaffold 小部件中定义了抽屉键。 Drawer 对象的代码在一个单独的文件中,navdrawer.dart

home.dart

import 'navdrawer.dart';
. . .
@override
  Widget build(BuildContext context) {
    return Scaffold(
      drawer: NavDrawer(),
      ...

现在在NavDrawer 中,我构建了我的Drawer 小部件,它有一个设置 按钮,该按钮链接到settings.dart 屏幕。

我喜欢这样:

navdrawer.dart

. . .
InkWell(
              onTap: () async {
                final result = await Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => Settings()),
                );
                print(result);
              },
              child: ListTile(
                  leading: Icon(
                    Icons.settings,
                    color: AppTextColor,
                  ),
                  title: Text('Settings'))),

所以现在,当用户在设置页面上按下返回按钮时,Navigator.pop() 调用会将我需要的数据返回到navdrawer.dart 中的result 变量。

但我的问题是……如何将这些数据发送到我的home.dart 屏幕/状态?

【问题讨论】:

    标签: flutter


    【解决方案1】:

    我建议您为此使用providerscoped_model 或其他状态管理技术。最简单(但也是毫无价值)的解决方案是使用全局变量。

    但是,有一个中间立场。为简单起见,我使用dynamic 作为结果类型,您最好知道Settings 返回什么,因此请改用该类型。

    您的home.dart 文件

    class _HomePageState extends State<HomePage> {
      dynamic _result; // Create a variable. 
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          drawer: NavDrawer(
            onResult: (result) {
              _result = result; // <-- This is your result. 
            }
          ),
        );
      }
    }
    

    在您的navdrawer.dart 中添加以下内容:

    class NavDrawer extends StatelessWidget {
    
      // Add these two lines. 
      final ValueChanged onResult; 
      NavDrawer({this.onResult}); 
    
      // Other code ...
    
    } 
    

    navdrawer.dart 文件中修改您的onTap 方法:

    onTap: () async {
      final result = await Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => Settings()),
      );
      onResult(result); // <-- Add this line. 
    }   
    

    【讨论】:

      【解决方案2】:

      请在pop方法中设置参数。 喜欢

      Navigator.pop(context,true)
      

      【讨论】:

      • 是的,但是如何将这些值添加到我的主页屏幕/小部件?
      【解决方案3】:

      在主页屏幕/小部件中定义“静态”全局变量 然后从任何地方调用变量:

      1- 主页:

      Static String getData;
      

      2- 返回抽屉时:

      homepage.getData=value;
      Navigator.pop();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-28
        • 1970-01-01
        • 2021-01-29
        • 2013-04-10
        相关资源
        最近更新 更多