Flutter:如何分离网络和本地数据操作?
Flutter: How can i separate network and local data operations?
如果用户想注册或登录应用程序,我想从网络获取数据。但是,如果用户想在本地应用程序中工作,则从本地数据中获取数据。顺便说一句,我使用提供者进行数据管理。有人可以给我一些想法吗?
创建一个parentChangeNotifier
并标记为摘要。
在里面包含所有的公共成员变量和声明方法
没有实施它们。
现在创建两个 ChangeNotifier
来扩展 parent
在每个方法中实现缺失的代码
parentChangeNotifier
根据 online/offline 使用正确的 child ChangeNotifier
状态
这是一个例子:
abstract class DataManagerNotifier extends ChangeNotifier {
List currentData;
String uID;
void getData();
void changeData();
}
而2 child人会是这样的:
class OfflineDataManagerNotifier extends DataManagerNotifier {
@override
void changeData() {
// TODO: implement changeData locally
}
@override
void getData() {
// TODO: implement getData locally
}
}
和
class OnlineDataManagerNotifier extends DataManagerNotifier {
@override
void changeData() {
// TODO: implement changeData from network
}
@override
void getData() {
// TODO: implement getData from network
}
}
最后根据用户状态使用
class Screen extends StatelessWidget {
@override
Widget build(BuildContext context) {
if(isOnlineMode){
return ChangeNotifierProvider<DataManagerNotifier>(
create: (context) => OnlineDataManagerNotifier(),
child: _ScreenContent()
);
}
return ChangeNotifierProvider<DataManagerNotifier>(
create: (context) => OfflineDataManagerNotifier(),
child: _ScreenContent()
);
}
}
并且不要忘记将 ChangeNotifierProvider 设置为 <DataManagerNotifier>
如果用户想注册或登录应用程序,我想从网络获取数据。但是,如果用户想在本地应用程序中工作,则从本地数据中获取数据。顺便说一句,我使用提供者进行数据管理。有人可以给我一些想法吗?
创建一个parent
ChangeNotifier
并标记为摘要。在里面包含所有的公共成员变量和声明方法 没有实施它们。
现在创建两个
ChangeNotifier
来扩展 parent在每个方法中实现缺失的代码 parent
ChangeNotifier
根据 online/offline 使用正确的 child ChangeNotifier 状态
这是一个例子:
abstract class DataManagerNotifier extends ChangeNotifier {
List currentData;
String uID;
void getData();
void changeData();
}
而2 child人会是这样的:
class OfflineDataManagerNotifier extends DataManagerNotifier {
@override
void changeData() {
// TODO: implement changeData locally
}
@override
void getData() {
// TODO: implement getData locally
}
}
和
class OnlineDataManagerNotifier extends DataManagerNotifier {
@override
void changeData() {
// TODO: implement changeData from network
}
@override
void getData() {
// TODO: implement getData from network
}
}
最后根据用户状态使用
class Screen extends StatelessWidget {
@override
Widget build(BuildContext context) {
if(isOnlineMode){
return ChangeNotifierProvider<DataManagerNotifier>(
create: (context) => OnlineDataManagerNotifier(),
child: _ScreenContent()
);
}
return ChangeNotifierProvider<DataManagerNotifier>(
create: (context) => OfflineDataManagerNotifier(),
child: _ScreenContent()
);
}
}
并且不要忘记将 ChangeNotifierProvider 设置为 <DataManagerNotifier>