diff --git a/lib/states/user_details_state.dart b/lib/states/user_details_state.dart index cd3b901fd..dcc08bd66 100644 --- a/lib/states/user_details_state.dart +++ b/lib/states/user_details_state.dart @@ -19,12 +19,12 @@ class UserDetailsStateWidget extends StatefulWidget { } class UserDetailsStateWidgetState extends State { - late Future userDetails; + late UserDetails? userDetails; late StreamSubscription _openedSettingsEventSubscription; @override void initState() { - userDetails = Future.value(null); + userDetails = null; _openedSettingsEventSubscription = Bus.instance.on().listen((event) { Future.delayed( @@ -50,8 +50,9 @@ class UserDetailsStateWidgetState extends State { child: widget.child, ); - void _fetchUserDetails() { - userDetails = UserService.instance.getUserDetailsV2(memoryCount: true); + void _fetchUserDetails() async { + userDetails = + await UserService.instance.getUserDetailsV2(memoryCount: true); if (mounted) { setState(() {}); } @@ -60,7 +61,7 @@ class UserDetailsStateWidgetState extends State { class InheritedUserDetails extends InheritedWidget { final UserDetailsStateWidgetState userDetailsState; - final Future userDetails; + final UserDetails? userDetails; const InheritedUserDetails({ Key? key, @@ -73,6 +74,8 @@ class InheritedUserDetails extends InheritedWidget { context.dependOnInheritedWidgetOfExactType(); @override - bool updateShouldNotify(covariant InheritedUserDetails oldWidget) => - userDetails != oldWidget.userDetails; + bool updateShouldNotify(covariant InheritedUserDetails oldWidget) { + return (userDetails?.usage != oldWidget.userDetails?.usage) || + (userDetails?.fileCount != oldWidget.userDetails?.fileCount); + } } diff --git a/lib/ui/settings/settings_title_bar_widget.dart b/lib/ui/settings/settings_title_bar_widget.dart index 3c2e0482e..02f9c24b7 100644 --- a/lib/ui/settings/settings_title_bar_widget.dart +++ b/lib/ui/settings/settings_title_bar_widget.dart @@ -12,6 +12,7 @@ class SettingsTitleBarWidget extends StatelessWidget { @override Widget build(BuildContext context) { final logger = Logger((SettingsTitleBarWidget).toString()); + final userDetails = InheritedUserDetails.of(context)?.userDetails; return Container( padding: const EdgeInsets.symmetric(vertical: 4), child: Padding( @@ -26,31 +27,12 @@ class SettingsTitleBarWidget extends StatelessWidget { }, icon: const Icon(Icons.keyboard_double_arrow_left_outlined), ), - FutureBuilder( - future: InheritedUserDetails.of(context)?.userDetails, - builder: (context, snapshot) { - if (InheritedUserDetails.of(context) == null) { - logger.severe( - (InheritedUserDetails).toString() + - ' not found before ' + - (SettingsTitleBarWidget).toString() + - ' on tree', - ); - throw Error(); - } else if (snapshot.hasData) { - final userDetails = snapshot.data as UserDetails; - return Text( + userDetails is UserDetails + ? Text( "${NumberFormat().format(userDetails.fileCount)} memories", style: getEnteTextTheme(context).largeBold, - ); - } else if (snapshot.hasError) { - logger.severe('failed to load user details'); - return const EnteLoadingWidget(); - } else { - return const EnteLoadingWidget(); - } - }, - ) + ) + : const EnteLoadingWidget(), ], ), ), diff --git a/lib/ui/settings/storage_card_widget.dart b/lib/ui/settings/storage_card_widget.dart index d51572d9a..58d6787a3 100644 --- a/lib/ui/settings/storage_card_widget.dart +++ b/lib/ui/settings/storage_card_widget.dart @@ -9,7 +9,6 @@ import 'package:photos/theme/ente_theme.dart'; import 'package:photos/ui/common/loading_widget.dart'; // ignore: import_of_legacy_library_into_null_safe import 'package:photos/ui/payment/subscription.dart'; -import 'package:photos/ui/settings/storage_error_widget.dart'; import 'package:photos/ui/settings/storage_progress_widget.dart'; import 'package:photos/utils/data_util.dart'; @@ -51,6 +50,7 @@ class _StorageCardWidgetState extends State { @override Widget build(BuildContext context) { final inheritedUserDetails = InheritedUserDetails.of(context); + final userDetails = inheritedUserDetails?.userDetails; if (inheritedUserDetails == null) { _logger.severe( @@ -72,13 +72,13 @@ class _StorageCardWidgetState extends State { onTapDown: (details) => _isStorageCardPressed.value = true, onTapCancel: () => _isStorageCardPressed.value = false, onTapUp: (details) => _isStorageCardPressed.value = false, - child: containerForUserDetails(inheritedUserDetails), + child: containerForUserDetails(userDetails), ); } } Widget containerForUserDetails( - InheritedUserDetails inheritedUserDetails, + UserDetails? userDetails, ) { return ConstrainedBox( constraints: const BoxConstraints(maxWidth: 350), @@ -87,22 +87,11 @@ class _StorageCardWidgetState extends State { child: Stack( children: [ _background, - FutureBuilder( - future: inheritedUserDetails.userDetails, - builder: (context, snapshot) { - if (snapshot.hasData) { - return userDetails(snapshot.data as UserDetails); - } - if (snapshot.hasError) { - _logger.severe( - 'failed to load user details', - snapshot.error, - ); - return const StorageErrorWidget(); - } - return const EnteLoadingWidget(color: strokeBaseDark); - }, - ), + userDetails is UserDetails + ? _userDetails(userDetails) + : const EnteLoadingWidget( + color: strokeBaseDark, + ), Align( alignment: Alignment.centerRight, child: Padding( @@ -124,7 +113,7 @@ class _StorageCardWidgetState extends State { ); } - Widget userDetails(UserDetails userDetails) { + Widget _userDetails(UserDetails userDetails) { const hundredMBinBytes = 107374182; const oneTBinBytes = 1073741824000;