|
@@ -3,11 +3,11 @@ import "dart:async";
|
|
import "package:flutter/material.dart";
|
|
import "package:flutter/material.dart";
|
|
import "package:like_button/like_button.dart";
|
|
import "package:like_button/like_button.dart";
|
|
import "package:logging/logging.dart";
|
|
import "package:logging/logging.dart";
|
|
|
|
+import "package:photos/core/configuration.dart";
|
|
import "package:photos/generated/l10n.dart";
|
|
import "package:photos/generated/l10n.dart";
|
|
import 'package:photos/models/file/file.dart';
|
|
import 'package:photos/models/file/file.dart';
|
|
import "package:photos/services/favorites_service.dart";
|
|
import "package:photos/services/favorites_service.dart";
|
|
-import "package:photos/ui/common/progress_dialog.dart";
|
|
|
|
-import "package:photos/utils/dialog_util.dart";
|
|
|
|
|
|
+import "package:photos/ui/common/loading_widget.dart";
|
|
import "package:photos/utils/toast_util.dart";
|
|
import "package:photos/utils/toast_util.dart";
|
|
|
|
|
|
class FavoriteWidget extends StatefulWidget {
|
|
class FavoriteWidget extends StatefulWidget {
|
|
@@ -18,13 +18,13 @@ class FavoriteWidget extends StatefulWidget {
|
|
super.key,
|
|
super.key,
|
|
});
|
|
});
|
|
|
|
|
|
- // State<ShareCollectionPage> createState() => _ShareCollectionPageState();
|
|
|
|
@override
|
|
@override
|
|
State<StatefulWidget> createState() => _FavoriteWidgetState();
|
|
State<StatefulWidget> createState() => _FavoriteWidgetState();
|
|
}
|
|
}
|
|
|
|
|
|
class _FavoriteWidgetState extends State<FavoriteWidget> {
|
|
class _FavoriteWidgetState extends State<FavoriteWidget> {
|
|
late Logger _logger;
|
|
late Logger _logger;
|
|
|
|
+ bool _isLoading = false;
|
|
|
|
|
|
@override
|
|
@override
|
|
void initState() {
|
|
void initState() {
|
|
@@ -42,61 +42,67 @@ class _FavoriteWidgetState extends State<FavoriteWidget> {
|
|
future: _fetchData(),
|
|
future: _fetchData(),
|
|
builder: (context, snapshot) {
|
|
builder: (context, snapshot) {
|
|
final bool isLiked = snapshot.data ?? false;
|
|
final bool isLiked = snapshot.data ?? false;
|
|
- return LikeButton(
|
|
|
|
- size: 24,
|
|
|
|
- isLiked: isLiked,
|
|
|
|
- onTap: (oldValue) async {
|
|
|
|
- final isLiked = !oldValue;
|
|
|
|
- bool hasError = false;
|
|
|
|
- if (isLiked) {
|
|
|
|
- final shouldBlockUser = widget.file.uploadedFileID == null;
|
|
|
|
- late ProgressDialog dialog;
|
|
|
|
- if (shouldBlockUser) {
|
|
|
|
- dialog = createProgressDialog(
|
|
|
|
- context,
|
|
|
|
- S.of(context).addingToFavorites,
|
|
|
|
- );
|
|
|
|
- await dialog.show();
|
|
|
|
- }
|
|
|
|
- try {
|
|
|
|
- await FavoritesService.instance.addToFavorites(
|
|
|
|
- context,
|
|
|
|
- widget.file,
|
|
|
|
- );
|
|
|
|
- } catch (e, s) {
|
|
|
|
- _logger.severe(e, s);
|
|
|
|
- hasError = true;
|
|
|
|
- showToast(context, S.of(context).sorryCouldNotAddToFavorites);
|
|
|
|
- } finally {
|
|
|
|
- if (shouldBlockUser) {
|
|
|
|
- await dialog.hide();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- try {
|
|
|
|
- await FavoritesService.instance
|
|
|
|
- .removeFromFavorites(context, widget.file);
|
|
|
|
- } catch (e, s) {
|
|
|
|
- _logger.severe(e, s);
|
|
|
|
- hasError = true;
|
|
|
|
- showToast(
|
|
|
|
- context,
|
|
|
|
- S.of(context).sorryCouldNotRemoveFromFavorites,
|
|
|
|
- );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return hasError ? oldValue : isLiked;
|
|
|
|
- },
|
|
|
|
- likeBuilder: (isLiked) {
|
|
|
|
- return Icon(
|
|
|
|
- isLiked ? Icons.favorite_rounded : Icons.favorite_border_rounded,
|
|
|
|
- color: isLiked
|
|
|
|
- ? Colors.pinkAccent
|
|
|
|
- : Colors.white, //same for both themes
|
|
|
|
- size: 24,
|
|
|
|
- );
|
|
|
|
- },
|
|
|
|
- );
|
|
|
|
|
|
+ return _isLoading
|
|
|
|
+ ? const EnteLoadingWidget(
|
|
|
|
+ size: 12,
|
|
|
|
+ ) // Add this line
|
|
|
|
+ : LikeButton(
|
|
|
|
+ size: 24,
|
|
|
|
+ isLiked: isLiked,
|
|
|
|
+ onTap: (oldValue) async {
|
|
|
|
+ if (widget.file.uploadedFileID == null ||
|
|
|
|
+ widget.file.ownerID !=
|
|
|
|
+ Configuration.instance.getUserID()!) {
|
|
|
|
+ setState(() {
|
|
|
|
+ _isLoading = true; // Add this line
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ final isLiked = !oldValue;
|
|
|
|
+ bool hasError = false;
|
|
|
|
+ if (isLiked) {
|
|
|
|
+ try {
|
|
|
|
+ await FavoritesService.instance.addToFavorites(
|
|
|
|
+ context,
|
|
|
|
+ widget.file,
|
|
|
|
+ );
|
|
|
|
+ } catch (e, s) {
|
|
|
|
+ _logger.severe(e, s);
|
|
|
|
+ hasError = true;
|
|
|
|
+ showToast(
|
|
|
|
+ context, S.of(context).sorryCouldNotAddToFavorites);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ try {
|
|
|
|
+ await FavoritesService.instance
|
|
|
|
+ .removeFromFavorites(context, widget.file);
|
|
|
|
+ } catch (e, s) {
|
|
|
|
+ _logger.severe(e, s);
|
|
|
|
+ hasError = true;
|
|
|
|
+ showToast(
|
|
|
|
+ context,
|
|
|
|
+ S.of(context).sorryCouldNotRemoveFromFavorites,
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ setState(() {
|
|
|
|
+ _isLoading = false; // Add this line
|
|
|
|
+ });
|
|
|
|
+ return hasError ? oldValue : isLiked;
|
|
|
|
+ },
|
|
|
|
+ likeBuilder: (isLiked) {
|
|
|
|
+ debugPrint(
|
|
|
|
+ "File Upload ID ${widget.file.uploadedFileID} & collection ${widget.file.collectionID}");
|
|
|
|
+ return Icon(
|
|
|
|
+ isLiked
|
|
|
|
+ ? Icons.favorite_rounded
|
|
|
|
+ : Icons.favorite_border_rounded,
|
|
|
|
+ color: isLiked
|
|
|
|
+ ? Colors.pinkAccent
|
|
|
|
+ : Colors.white, //same for both themes
|
|
|
|
+ size: 24,
|
|
|
|
+ );
|
|
|
|
+ },
|
|
|
|
+ );
|
|
},
|
|
},
|
|
);
|
|
);
|
|
}
|
|
}
|