如何在 Flutter 的另一个提供程序类中将 Setter 用于提供程序类
Posted
技术标签:
【中文标题】如何在 Flutter 的另一个提供程序类中将 Setter 用于提供程序类【英文标题】:How to use Setter for a Provider Class in Another Provider Class with flutter 【发布时间】:2020-08-14 19:21:11 【问题描述】:我有一个General Provider
,它在应用启动时被调用。
它fetches
通过 API 获取一些数据。通常我会把它留给那个 Provider 以备不时之需,但随着应用程序的增长,我认为最好将所有逻辑分开。
第一个 API 还引入了 user
数据。现在我在应用程序中也有一个UserProvider
。我为它创建了以下内容。
class UserProvider extends ChangeNotifier
UserModel _user;
UserProvider(this._user);
set setUser(user)
_user = user;
notifyListeners();
UserModel get getUser => _user;
这里没有错误,但问题是如何在GeneralProvider
类中调用这个setter
?
我知道的方法如下:
1) UserProvider(UserModel(your_data));
2) `Provider.of(context).setUser(UserModel(your_data));
第一个对我有用。第二个不在provider part
。
使用first way
的真正问题:
在我的main.dart
提供所有提供程序的地方,我需要这样做。
ChangeNotifierProvider.value(
value: UserProvider(UserModel(your_data),
),
我更喜欢在为base data
调用general api
时更新UserProvider。
【问题讨论】:
【参考方案1】:方法如下:
Provider.of<UserProvider>(context, listen: false).setUser = your_parameter_here;
可能您已经找到了解决方案,如果没有,这就是答案。
【讨论】:
【参考方案2】:我的解决方案是 UserProvider 类中的这个设置器:
void setUser(User s)
_user = s;
notifyListeners();
用以下方式包装您的小部件:
return Consumer<UserProvider>(builder: (_,provider,__)
return WhateverYouWantToBuild(
...
),
);
然后调用它:
provider.setUser(newValue!);
【讨论】:
以上是关于如何在 Flutter 的另一个提供程序类中将 Setter 用于提供程序类的主要内容,如果未能解决你的问题,请参考以下文章
如何访问和更改在 FLUTTER/DART 的另一个类中声明的字符串变量的值
如何在 Flutter 中将 textEditiing 控制器与 Provider 一起使用
Flutter-如何在flutter的整个应用程序生命周期中将数据保存在内存中?
如何通过 Facebook 移动应用程序在 Flutter 应用程序中将链接(或图像)与用户管理的 Facebook 页面共享
如何使用 GoogleMaps 在 PlacePicker 中将当前位置设置为 initialPosition - Flutter