[英]how to make current user data provider using Riverpod that can handle latest update from Server?
我是Riverpod state 管理的新手,如果我的問題非常基本,我很抱歉。
所以我很困惑如何制作當前的用戶數據提供者。 比如說我有這個User
model
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
}
}
我很困惑如何制作currentUserDataProvider
(將由ProfilePage
觀看/收聽的提供者),因為我不知道如何將最新的 userData 從服務器放入currentUserDataProvider
。
所以如果我從服務器更改全名,然后用戶通過拉刷新數據刷新,我想讓最新的全名顯示在ProfilePage
如果您使用的是ChangeNotifierProvider
,那么您應該使用將userData
存儲在 var 中並使用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();
}
}
然后你可以像這樣定義你的currentUserDataProvider
:
final currentUserDataProvider = Provider<Map<String, dynamic>?>((ref) {
final homePageController = ref.watch(homePageControllerNotifier);
return homePageController.userData;
}
但是盡管這可行,但我建議將StateNotifier
與自定義 state class 一起使用,從而避免使用notifyListeners();
每次有更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.