我正在使用 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/