Flutter 如何使用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将与下面的代码

我是Riverpod州管理部门的新手,如果我的问题很基本,我很抱歉

因此,我对如何创建当前用户数据提供者感到困惑。例如,假设我有这个
用户
模型

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;
}