Flutter 如何使用Riverpod使当前用户数据提供者能够处理来自服务器的最新更新?
我是Riverpod州管理部门的新手,如果我的问题很基本,我很抱歉 因此,我对如何创建当前用户数据提供者感到困惑。例如,假设我有这个Flutter 如何使用Riverpod使当前用户数据提供者能够处理来自服务器的最新更新?,flutter,riverpod,Flutter,Riverpod,我是Riverpod州管理部门的新手,如果我的问题很基本,我很抱歉 因此,我对如何创建当前用户数据提供者感到困惑。例如,假设我有这个用户模型 class User { final String uid; final String fullname; UserKM({ required this.uid, required this.fullname, }); } 假设我有两个页面,HomePage和ProfilePage。ProfilePage将与下面的代码
用户
模型
class User {
final String uid;
final String fullname;
UserKM({
required this.uid,
required this.fullname,
});
}
假设我有两个页面,HomePage
和ProfilePage
。ProfilePage
将与下面的代码类似。只需通过查看当前用户数据提供程序,使用文本显示用户全名
class ProfilePage extends ConsumerWidget {
@override
Widget build(context, watch) {
final currentUser = watch(currentUserDataProvider);
return Scaffold(
body: Text(currentUser.fullname),
);
}
}
现在想象一下,主页具有拉入刷新功能,可以从服务器获取最新的用户数据
class HomePage extends ConsumerWidget {
@override
Widget build(context, watch) {
final homePageController = watch(homePageControllerNotifier);
return Scaffold(
body: RefreshIndicator(
onRefresh: () async => homePageController.getLatestDataFromServer(), // perform pull to refresh
child: ,
);
}
}
我有一个HomePageController,它基本上就是这样一个变更通知程序
final homePageControllerNotifier = ChangeNotifierProvider<HomePageController>((ref) {
return HomePageController();
});
class HomePageController with ChangeNotifier {
Future<void> getLatestDataFromServer() async {
// perform asynchronous operation using DB service .......
// then successfully get user data from server
final Map<String, dynamic> userData = dataFromServer;
// then what should I do to this latest `userData` ???
// to make latest update also displayed in ProfilePage that listen to current user Data Provider
}
}
final homePageControllerNotifier=ChangeNotifierProvider((ref){
返回HomePageController();
});
使用ChangeNotifier类HomePageController{
未来getLatestDataFromServer()异步{
//使用DB服务执行异步操作。。。。。。。
//然后成功地从服务器获取用户数据
最终映射userData=dataFromServer;
//那么我应该如何处理这个最新的“userData”???
//使最新更新也显示在侦听当前用户数据提供程序的ProfilePage中
}
}
我不知道如何创建currentUserDataProvider
(将由ProfilePage
监视/侦听的提供程序),因为我不知道如何将最新的用户数据从服务器放到currentUserDataProvider
因此,如果我从服务器更改了全名,那么用户通过pull to refresh刷新数据,我想使最新的全名显示在
ProfilePage
中。如果您使用的是ChangeNotifierProvider
,那么您应该使用在var中存储userData
,并使用notifyListeners()更新它代码>
但是,鉴于这是可行的,我建议对自定义状态类使用StateNotifier
,这样可以避免使用notifyListeners()代码>每次有更新时
class HomePageController with ChangeNotifier {
Map<String, dynamic> userData?;
Future<void> getLatestDataFromServer() async {
// perform asynchronous operation using DB service .......
// then successfully get user data from server
userData = dataFromServer;
// then what should I do to this latest `userData` ???
// to make latest update also displayed in ProfilePage that listen to current user Data Provider
notifyListeners();
}
}
final currentUserDataProvider = Provider<Map<String, dynamic>?>((ref) {
final homePageController = ref.watch(homePageControllerNotifier);
return homePageController.userData;
}