【发布时间】:2021-07-22 19:00:03
【问题描述】:
如果用户想注册或登录应用程序,我想从网络获取数据。但是,如果用户想在本地应用程序中工作,则从本地数据中获取数据。顺便说一下,我使用提供者进行数据管理。有人可以给我一些想法吗?
【问题讨论】:
-
请参阅How to Ask 以改进此问题。
标签: flutter flutter-provider data-management
如果用户想注册或登录应用程序,我想从网络获取数据。但是,如果用户想在本地应用程序中工作,则从本地数据中获取数据。顺便说一下,我使用提供者进行数据管理。有人可以给我一些想法吗?
【问题讨论】:
标签: flutter flutter-provider data-management
创建父 ChangeNotifier 并将其标记为抽象。
在其中包含所有常见的成员变量并声明方法 没有实现它们。
现在创建两个扩展父级的ChangeNotifier
在每一个中实现其方法中缺少的代码
家长ChangeNotifier
根据在线/离线使用正确的子ChangeNotifier 状态
这是一个例子:
abstract class DataManagerNotifier extends ChangeNotifier {
List currentData;
String uID;
void getData();
void changeData();
}
两个孩子会是这样的:
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>
【讨论】: