【问题标题】:Flutter: How to pass data between screens?Flutter:如何在屏幕之间传递数据?
【发布时间】:2021-12-27 18:21:12
【问题描述】:

如何从screen "Y" 上的按钮更改screen "X" 上按钮的visibility

【问题讨论】:

标签: flutter


【解决方案1】:

一种流行的方法(使用provider 架构)是这样的:

定义一个provider 来处理所有逻辑并保存您的数据:

class MyProvider extends ChangeNotifier {
  bool showMyButton = false;

  MyProvider() {}

  void showButton() {
    showMyButton = true;
    // This line notifies all consumers
    notifyListeners();
  }

  void refresh() {
    notifyListeners();
  }
}

要在任何需要注册的地方访问provider

void main() => runApp(
      // You can wrap multiple providers like this
      MultiProvider(
        providers: [
          ChangeNotifierProvider<MyProvider>(create: (_) => MyProvider()),
        ],
        child: const MyApp(),
      ),
    );

在您想要控制的按钮上,您可以使用Consumer 来监听providers 值:

Consumer<MyProvider>(builder: (_, model, __) {
     return Visibility(
             visible: model.showMyButton,
             child: MaterialButton(...),
     );
})

现在在您的第二个屏幕中,您可以通过以下方式访问该提供商:

Provider.of<MyProvider>(context, listen: false)
                        .showButton();

但是,从screen Y 回到screen X 时,您可能需要再调用一次notifyListener

await Navigator.push(
                  context,
                  MaterialPageRoute(
                      builder: (context) => ScreenY()));
Provider.of<MyProvider>(context, listen: false).refresh();

请记住,provider 的内容还有很多,所以请查看他们的官方docs

还请注意,easier ways 仅用于在屏幕之间传递数据,但您通常会到达需要更好的状态管理方式的地步,provider 提供了这一点;)

【讨论】:

    【解决方案2】:

    您可以通过导航的推送和弹出来传递数据。或者使用 ChangeNotifier 类轻松通知按钮的状态。

    【讨论】:

      猜你喜欢
      • 2021-03-01
      • 2019-05-20
      • 1970-01-01
      • 2019-11-01
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多