我用的是Provider美元.我有两个类:class TenderApiData {},它是独立类(不是小部件).我怎么写accesstokenAppState呢?

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_itdon't do that的替代方法.

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

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

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

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

provider附带了一个小部件内置小部件,可帮助解决常见场景,包括:

  • ProxyProvider
  • ChangeNotifierProxyProvider

典型的示例是:

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

Flutter相关问答推荐

底部导航栏项目在抖动中不更改 colored颜色

audioQuery不会等待判断存储权限

将CLOUD_FIRESTORE程序包更新到版本4.13.0(到Windows)时出现问题

关闭模式,但再次打开时微件条件相同

Firebase存储不显示在Flutter 中链接的图像

应为标识符,并应为查找)错误

如何在 Flutter 中设计像 zomato 应用程序一样的搜索字段?

如何在flutter中实现这样的底部导航栏?

Flutter 中的区域不匹配

Firebase Auth - 有没有办法为新用户预先生成 UID?

Elevated 和 Outlined 按钮之间的动画

Freezed+BLoc 如何从 BLoc Listener 查看当前状态和特定状态的变量

更改文本字段Flutter 中最大字母的 colored颜色

如何制作两个显示相关内容且可编辑的文本字段?

为什么容器会填满整个空间?

Flutter 中的 Firebase 后台消息处理程序产生重复的隔离并运行应用程序两次

如何使用 Riverpod 在运行时动态创建提供程序?

有没有办法帮助我修复类型 null 不是 Map 类型的子类型?

我已经删除了我的 .android 密钥库,但我没有使用它,如何生成一个新的?

如何在没有上下文的情况下使用国际Flutter ?