【发布时间】:2021-12-27 18:21:12
【问题描述】:
如何从screen "Y" 上的按钮更改screen "X" 上按钮的visibility。
【问题讨论】:
-
你指的是你想在另一个屏幕上修改另一个屏幕的视图吗?
标签: flutter
如何从screen "Y" 上的按钮更改screen "X" 上按钮的visibility。
【问题讨论】:
标签: flutter
一种流行的方法(使用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 提供了这一点;)
【讨论】:
您可以通过导航的推送和弹出来传递数据。或者使用 ChangeNotifier 类轻松通知按钮的状态。
【讨论】: