如何在 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 的函数中将类作为参数传递?

如何在 Flutter 中将 textEditiing 控制器与 Provider 一起使用

Flutter-如何在flutter的整个应用程序生命周期中将数据保存在内存中?

如何通过 Facebook 移动应用程序在 Flutter 应用程序中将链接(或图像)与用户管理的 Facebook 页面共享

如何使用 GoogleMaps 在 PlacePicker 中将当前位置设置为 initialPosition - Flutter