♻️ Update the way to render total counts of data in UI, close #220

This commit is contained in:
2026-01-01 11:43:56 +08:00
parent 38dffa414f
commit 0a4e797eec
2 changed files with 9 additions and 12 deletions

View File

@@ -624,7 +624,8 @@ class _ChatMemberListSheet extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, WidgetRef ref) { Widget build(BuildContext context, WidgetRef ref) {
final memberNotifier = ref.read(chatMemberListProvider(roomId).notifier); final memberState = ref.watch(chatMemberListProvider(roomId));
final memberNotifier = ref.watch(chatMemberListProvider(roomId).notifier);
final roomIdentity = ref.watch(chatRoomIdentityProvider(roomId)); final roomIdentity = ref.watch(chatRoomIdentityProvider(roomId));
final chatRoom = ref.watch(chatRoomProvider(roomId)); final chatRoom = ref.watch(chatRoomProvider(roomId));
@@ -664,7 +665,7 @@ class _ChatMemberListSheet extends HookConsumerWidget {
child: Row( child: Row(
children: [ children: [
Text( Text(
'members'.plural(memberNotifier.totalCount ?? 0), 'members'.plural(memberState.value?.totalCount ?? 0),
style: Theme.of(context).textTheme.headlineSmall?.copyWith( style: Theme.of(context).textTheme.headlineSmall?.copyWith(
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
letterSpacing: -0.5, letterSpacing: -0.5,

View File

@@ -527,12 +527,11 @@ class _RealmMemberListSheet extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, WidgetRef ref) { Widget build(BuildContext context, WidgetRef ref) {
final realmIdentity = ref.watch(realmIdentityProvider(realmSlug));
final memberListProvider = realmMemberListNotifierProvider(realmSlug); final memberListProvider = realmMemberListNotifierProvider(realmSlug);
// memberListNotifier is not watched here to prevent unnecessary rebuilds of this widget
// when we only need it for passing to PaginationList as a Refreshable final memberListState = ref.watch(memberListProvider);
// However, we used useEffect to dispose it, but AutoDispose handles it. final memberListNotifier = ref.watch(memberListProvider.notifier);
// So we remove the useEffect and the watch. final realmIdentity = ref.watch(realmIdentityProvider(realmSlug));
Future<void> invitePerson() async { Future<void> invitePerson() async {
final result = await showModalBottomSheet( final result = await showModalBottomSheet(
@@ -549,7 +548,7 @@ class _RealmMemberListSheet extends HookConsumerWidget {
data: {'related_user_id': result.id, 'role': 0}, data: {'related_user_id': result.id, 'role': 0},
); );
// Refresh the provider // Refresh the provider
ref.invalidate(memberListProvider); memberListNotifier.refresh();
} catch (err) { } catch (err) {
showErrorAlert(err); showErrorAlert(err);
} }
@@ -562,11 +561,8 @@ class _RealmMemberListSheet extends HookConsumerWidget {
children: [ children: [
Consumer( Consumer(
builder: (context, ref, _) { builder: (context, ref, _) {
// effective watch to rebuild when data changes (and totalCount updates)
ref.watch(memberListProvider);
final notifier = ref.read(memberListProvider.notifier);
return Text( return Text(
'members'.plural(notifier.totalCount ?? 0), 'members'.plural(memberListState.value?.totalCount ?? 0),
style: Theme.of(context).textTheme.headlineSmall?.copyWith( style: Theme.of(context).textTheme.headlineSmall?.copyWith(
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
letterSpacing: -0.5, letterSpacing: -0.5,