微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有提供程序的单个模型不是列表的 CRUD 方法

如何解决带有提供程序的单个模型不是列表的 CRUD 方法

如何为不是 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 模型的其余部分,例如为单个模型而不是列表创建(添加)、更新和删除

解决方法

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

以下是创建和删除 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,password);
  }

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

如果有不清楚的请在评论中提问。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。