gpt4 book ai didi

flutter - 如何从没有上下文的类访问提供者字段?

转载 作者:IT王子 更新时间:2023-10-29 07:15:51 25 4
gpt4 key购买 nike

我正在使用 Provider。我有两个类:class TenderApiData {} 它是独立的类(不是小部件)。如何将 accesstoken 写入 AppState

class AppState extends ChangeNotifier // putted to ChangeNotifierProvider
{
String _accesstoken; // need to fill not from widget but from stand alone class
String _customer; // Fill from widget
List<String> _regions; // Fill from widget
List<String> _industry; // Fill from widget
...
}

我需要从独立类中读取\写入 accesstoken 的方法。

或者我的应用架构有问题?

Here是完整的源代码。

最佳答案

您不能也不应该访问小部件树之外的提供程序。

即使理论上您可以使用全局变量/单例变量或类似 get_it 的替代方法,也不要那样做

相反,您会希望使用小部件在您的提供者和您的模型之间架起桥梁。

这通常是通过 didChangeDependencies 生命周期实现的,如下所示:

class MyState extends State<T> {
MyModel model = MyModel();

@override
void didChangeDependencies() {
super.didChangeDependencies();
model.valueThatComesFromAProvider = Provider.of<MyDependency>(context);
}
}

provider 带有一个 widget 内置的 widgets,可以帮助处理常见的场景,它们是:

  • ProxyProvider
  • ChangeNotifierProxyProvider

一个典型的例子是:

ChangeNotifierProxyProvider<TenderApiData, AppState>(
initialBuilder: () => AppState(),
builder: (_, tender, model) => model
..accessToken = tender.accessToken,
child: ...,
);

关于flutter - 如何从没有上下文的类访问提供者字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57415617/

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