带有 Provider 的单个模型(不是列表)的 CRUD 方法

Posted

技术标签:

【中文标题】带有 Provider 的单个模型(不是列表)的 CRUD 方法【英文标题】:CRUD Methods for single Model (not a list) with Provider 【发布时间】:2021-06-26 17:01:58 【问题描述】:

如何为不是 Flutter 的 Provider 列表的单个模型定义方法(函数)?例如,我为一个列表模型创建了 4 个函数:

List<User> _userList = [];
List<User> get userList => _userList;
//method for getiing and setting the list of users
setUserList(List<User> list) 
    _userList = list;
    notifyListeners();
  
// method for removing a single user
  deleteUser(User list) 
    _userList.remove(list);
    notifyListeners();
  
//adding a new user
  addUser(User list) 
    _userList.add(list);
   notifyListeners();
  
//updating the specific user
  updateUser(User user) 
    _userList [_userList.indexWhere((element) => element.id == user.id)] = user;
    notifyListeners();
  

当它是用户列表时,这些都可以正常工作(至少我认为在我测试它们时它们可以工作:D),但是当它是单个对象/项目(单个用户)而不是列表? .add()remove() 是在存在列表时可用的方法,但在存在单个项目时不可用。这些 CRUD 模型方法的最佳方法是什么?当它是一个列表时,'Read' 类似:

User get user => _user;

//method for getting the user data
setUser(User user) 
    _user = user;
    notifyListeners();
   

但是我如何定义 CRUD 模型的其余部分,例如创建(添加)、更新和删除单个模型而不是列表?

【问题讨论】:

【参考方案1】:

当您管理列表或单个项目时,实际上并没有太大区别 - 只是您将拥有适用于单个项目的方法。您没有在上面显示它,但您应该将您的方法包装在维护数据的类(“服务”)中。

这是一个创建和删除User 的身份验证服务示例:

class AuthService with ChangeNotifier 
  User _user;
  User get user => _user;

  Future<void> _authenticate(String email, String password,
      [String name]) async 
    // This is where you authenticate or register the user, and update the state
    _user = User("dummy");
    return Future<void>(() );
  

  Future<void> register(String name, String email, String password) async 
    return _authenticate(email, password, name);
  

  Future<void> login(String email, String password) async 
    return _authenticate(email, password);
  

  Future<void> logout() async 
    _user = null;
    notifyListeners();
    return Future<void>(() );
  

如果不清楚请在cmets中询问。

【讨论】:

以上是关于带有 Provider 的单个模型(不是列表)的 CRUD 方法的主要内容,如果未能解决你的问题,请参考以下文章

带有导航器的列表视图推送到不同的屏幕而不是单个屏幕

Flutter Provider 重建不必要的小部件

为啥带有单个条目的python列表为-1索引和0索引提供第0个元素? [复制]

单个休息“放置”端点是不是足以更新带有嵌套数组的文档?

基于单个数据源更新多个 Qt 模型

如何在具有值而不是单个变量值的列表上应用 PyQt5 事件? [关闭]