【问题标题】:Flutter: How do I pass a parameter from one screen to another without changing the screenFlutter:如何在不更改屏幕的情况下将参数从一个屏幕传递到另一个屏幕
【发布时间】:2020-09-03 06:10:23
【问题描述】:

我最近开始使用颤振,目前正在导航。我想知道是否有一种方法可以将参数从一个小部件传递到另一个(或一个屏幕到另一个),而无需调用构建器函数并更改屏幕?我查看了 onGenerateRoute 和导航器,但它们都会导致屏幕发生变化。有没有办法在 navigator.push() 期间阻止这种变化?

我真正想要的很简单。我想要一个切换按钮将布尔值传递给读取它并将其应用于条件语句的小部件。

【问题讨论】:

  • 你为什么需要一个新的小部件/屏幕呢?如果你唯一想要的是你的切换对 UI 产生影响,你应该使用 StatefulWidgetsetState 方法。
  • 如果您只想将一个布尔值传递到某个地方,您可以使用 sharedpreferences 来保留它的值,或者需要应用您可以使用的功能但是如何在不构建的情况下使用该小部件或页面?如果您提供更多信息,您的主要目标是什么,那么也许我们可以提出其他建议。
  • @puelo 是否可以通过相关小部件的按下事件来设置兄弟(或父小部件)的状态?假设我有一个切换按钮,它给出了一个布尔值 true 但我怎样才能将它发送到兄弟或父小部件。甚至是没有导航到它的子小部件?
  • @erbazkamran 如果父级由于 setState 而重建,所有子级也将被重建。您可以将布尔值传递给子小部件的构造函数,然后它也应该被重建。
  • @puelo 那么有没有办法将数据从孩子发送给父母?我已阅读有关 VoidCallback 的信息,并将研究它作为我的问题的解决方案。你认为这是一个正确的方法还是我应该使用像 BLoC 这样的状态管理系统?感谢您的回复。

标签: flutter flutter-navigation


【解决方案1】:

你应该这样做:

            child: RaisedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => SecondPage(
                      value: true,
                    ),
                  ),
                );
              },
            ),



class SecondPage extends StatelessWidget {
  final bool value;

  const SecondPage({Key key, @required this.value}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

【讨论】:

  • 但这不会也改变屏幕吗?我怎样才能有同样的效果,但没有改变?
  • @erbaz kamran 我也有同样的问题,你找到解决方案了吗?
猜你喜欢
  • 1970-01-01
  • 2021-01-06
  • 2019-10-27
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 2022-12-07
  • 2019-01-18
  • 2020-05-24
相关资源
最近更新 更多