Parcourir la source

Fixed recurring loading state of storage card and uploaded file count

ashilkn il y a 2 ans
Parent
commit
3a49a433ee

+ 10 - 7
lib/states/user_details_state.dart

@@ -19,12 +19,12 @@ class UserDetailsStateWidget extends StatefulWidget {
 }
 
 class UserDetailsStateWidgetState extends State<UserDetailsStateWidget> {
-  late Future<UserDetails?> userDetails;
+  late UserDetails? userDetails;
   late StreamSubscription<OpenedSettingsEvent> _openedSettingsEventSubscription;
 
   @override
   void initState() {
-    userDetails = Future.value(null);
+    userDetails = null;
     _openedSettingsEventSubscription =
         Bus.instance.on<OpenedSettingsEvent>().listen((event) {
       Future.delayed(
@@ -50,8 +50,9 @@ class UserDetailsStateWidgetState extends State<UserDetailsStateWidget> {
         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<UserDetailsStateWidget> {
 
 class InheritedUserDetails extends InheritedWidget {
   final UserDetailsStateWidgetState userDetailsState;
-  final Future<UserDetails?> userDetails;
+  final UserDetails? userDetails;
 
   const InheritedUserDetails({
     Key? key,
@@ -73,6 +74,8 @@ class InheritedUserDetails extends InheritedWidget {
       context.dependOnInheritedWidgetOfExactType<InheritedUserDetails>();
 
   @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);
+  }
 }

+ 5 - 23
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(),
           ],
         ),
       ),

+ 9 - 20
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<StorageCardWidget> {
   @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<StorageCardWidget> {
         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<StorageCardWidget> {
         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<StorageCardWidget> {
     );
   }
 
-  Widget userDetails(UserDetails userDetails) {
+  Widget _userDetails(UserDetails userDetails) {
     const hundredMBinBytes = 107374182;
     const oneTBinBytes = 1073741824000;