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

标签 flutter flutter-provider

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

相关文章:

firebase - Flutter Provider显示来自错误用户的数据

Flutter 等待 Provider 在 multiprovider 中准备就绪

flutter - Azure管道错误: No `Podfile' found in the project directory

flutter - 如何从 Flutter Firebase 实时数据库读取数据?

android - Flutter ClassNotFoundException (java.lang.RuntimeException) 崩溃错误

android - Flutter:在同一棵树中使用 Multiprovider 和 Consumer 进行依赖注入(inject)

flutter - 如何使Flutter提供程序从工厂提供者notifyListeners()?

Flutter构建不生成文件

在后台使用 OneSignal PushNotifications 进行抖动

flutter - 使用Flutter Provider管理嵌套类的状态