gpt4 book ai didi

flutter - 如何控制提供者的对话?

转载 作者:行者123 更新时间:2023-12-05 03:54:21 25 4
gpt4 key购买 nike

我是 Flutter 的新手。我正在尝试学习 Dart 语法和 Flutter 结构和约定。这很有趣。我是 JS 开发人员,react,react native,node.js 基础。所以,我想我已经习惯了声明式结构和设计。

我正在使用提供商构建一个小型玩具项目。大多数全局变量和状态都处于全局状态并提供给整个应用程序。实际上,我的一个问题是打开一个对话框。我知道如何使用 showDialog() 方法打开对话框。但是,我想按提供商的状态打开它。例如。提供程序中的 isOpenCustomDialog 状态。

Widget build(BuildContext context) {
var isOpenCustomDialog = Provider.of<Store>(context).isOpenCustomDialog;

// it throws error
if(isOpenCustomDialog) showDialog( ... )

return ...
}

我尝试了几种方法,但没有收获,我想知道为此目的最好的约定是什么。

最佳答案

在方法构建中打开对话框或调用函数不是好的做法。那是因为 Flutter 可以随时重建,一个或多个 setState 可以触发副作用。对您来说,一种可能更简单、更实用的方法是直接从您的提供者类调用您的对话,因为您依赖于它的状态。您可以通过将您的上下文发送到您的类(class)来做到这一点(我认为这是一个丑陋的解决方案)或者简单地使用这个允许您从代码中的任何地方打开对话框的包,因为您不需要上下文。

https://pub.dev/packages/get

因此在您的 Store 类中,您可以使用以下内容:

Get.dialog(SimpleAlertDialog());

但是,如果你只是想消除这个错误,也许观看构造结束调用对话框也可以帮助你:

Widget build(BuildContext context) {
SchedulerBinding.instance.addPostFrameCallback((_) {
if(isOpenCustomDialog) showDialog( ... )
});

关于flutter - 如何控制提供者的对话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61071575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com