带有 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 方法的主要内容,如果未能解决你的问题,请参考以下文章