Fixed recurring loading state of storage card and uploaded file count

This commit is contained in:
ashilkn 2022-12-13 20:30:35 +05:30
parent aca1da4b43
commit 3a49a433ee
3 changed files with 24 additions and 50 deletions

View file

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

View file

@ -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(),
],
),
),

View file

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