Fixed recurring loading state of storage card and uploaded file count
This commit is contained in:
parent
aca1da4b43
commit
3a49a433ee
3 changed files with 24 additions and 50 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,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;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue