如何解决在Flutter中将提供程序模式与数据库一起使用
我是新手,尤其是提供者模式。我浏览了有关提供程序模式状态管理的文档,示例和一些教程,我试图在我的一个项目中实现它。我正在开发个人支出经理应用程序。问题在于,所有文档,示例和教程都假定模型提供者在内存中具有所有必需的数据,也就是说,列表中已经存在所有模拟数据。很容易理解数据的添加/删除和更改通知。但是在实际应用中,需要从本地数据库或Internet加载数据。那就是当事情变得混乱和混乱的时候。这是我的模型:
class Expense {
int id;
String name;
DateTime date;
double amount;
PaymentType paymentType; //This is an enum (card,cash etc.)
ExpenseCategory category; //Categories like fuel,groceries etc.
Expense({@required this.name,@required this.date,@required this.amount,@required this.paymentType,@required this.category});
}
class ExpenseCategory {
int id;
String name;
ExpenseCategory({@required this.name});
}
数据操作类:
class ExpenseRepository {
static Future<List<Expense>> getAllExpenses({@required int month}) async {
return await mockService.getAllExpensesData(month: month);
}
static Future<List<Expense>> getRecentExpenses() async {
return await mockService.getRecentExpensesData();
}
static Future<List<CategorywiseAmount>> getCategorywiseExpensesList({@required int month}) async {
return await mockService.getCategorywiseExpensesListData(month: month);
}
}
目前,数据是从模拟服务加载的,该服务将被本地数据库替换。不过,它模拟了异步/等待模式。
-
我是否必须将“费用”模型转换为提供程序(“费用”和“费用”提供程序),还是必须创建一个单独的类来充当提供程序?在文档和教程中,我已经看到模型已转换为提供程序,但这是正确的做法吗?我可能是错的,但是我认为关注点分离将被违反。据我所读,除了成为模型之外,模型不应做任何其他事情。
class ExpensesProvider with ChangeNotifier {
List<Expense> _expensesList;
List<Expense> get recentExpenses {
return _expensesList;
}
}
但是,提供程序将如何将数据从模拟数据库加载到_expensesList属性中,因为模拟方法getRecentExpenses()返回的是Future(而实际方法也将返回)并且不能在getter中使用。还是我也必须从吸气剂本身返回未来?
- 如果添加了新费用,则最近费用列表应自动更新。让我们暂时假设此提供程序已以某种方式挂接到数据库。我有以下疑问: a)提供程序是否监视数据库中的更改,还是监视内存模型/列表中的更改并自动触发重建? b)也许它不监视以上任何内容,而我们需要使用notifyListeners手动触发它? 困惑来自评论
// Consumer looks for an ancestor Provider widget
// and retrieves its model (Counter,in this case).
// Then it uses that model to build widgets,and will trigger
// rebuilds if the model is updated.
这些评论来自Flutter示例应用https://github.com/flutter/samples/blob/master/provider_counter/lib/main.dart
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。