Browse Source

Added error message for wrong decode file and logo for failed to load file

Alex Tran 3 years ago
parent
commit
660e51a8a3

+ 27 - 2
mobile/lib/modules/asset_viewer/views/image_viewer_page.dart

@@ -59,12 +59,34 @@ class ImageViewerPage extends HookConsumerWidget {
             imageUrl: imageUrl,
             httpHeaders: {"Authorization": "Bearer ${box.get(accessTokenKey)}"},
             fadeInDuration: const Duration(milliseconds: 250),
-            errorWidget: (context, url, error) => const Icon(Icons.error),
+            errorWidget: (context, url, error) => ConstrainedBox(
+              constraints: const BoxConstraints(maxWidth: 300),
+              child: Wrap(
+                spacing: 32,
+                runSpacing: 32,
+                alignment: WrapAlignment.center,
+                children: [
+                  const Text(
+                    "Failed To Render Image - Possibly Corrupted Data",
+                    textAlign: TextAlign.center,
+                    style: TextStyle(fontSize: 16, color: Colors.white),
+                  ),
+                  SingleChildScrollView(
+                    child: Text(
+                      error.toString(),
+                      textAlign: TextAlign.center,
+                      style: TextStyle(fontSize: 12, color: Colors.grey[400]),
+                    ),
+                  ),
+                ],
+              ),
+            ),
             // imageBuilder: (context, imageProvider) {
             //   return PhotoView(imageProvider: imageProvider);
             // },
             placeholder: (context, url) {
               return CachedNetworkImage(
+                cacheKey: thumbnailUrl,
                 fit: BoxFit.cover,
                 imageUrl: thumbnailUrl,
                 httpHeaders: {"Authorization": "Bearer ${box.get(accessTokenKey)}"},
@@ -73,7 +95,10 @@ class ImageViewerPage extends HookConsumerWidget {
                   scale: 0.2,
                   child: CircularProgressIndicator(value: downloadProgress.progress),
                 ),
-                errorWidget: (context, url, error) => const Icon(Icons.error),
+                errorWidget: (context, url, error) => Icon(
+                  Icons.error,
+                  color: Colors.grey[300],
+                ),
               );
             },
           ),

+ 15 - 1
mobile/lib/modules/home/ui/thumbnail_image.dart

@@ -7,6 +7,7 @@ import 'package:hive_flutter/hive_flutter.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:immich_mobile/constants/hive_box.dart';
 import 'package:immich_mobile/modules/home/providers/home_page_state.provider.dart';
+import 'package:immich_mobile/modules/login/providers/authentication.provider.dart';
 import 'package:immich_mobile/shared/models/immich_asset.model.dart';
 import 'package:immich_mobile/routing/router.dart';
 
@@ -25,6 +26,7 @@ class ThumbnailImage extends HookConsumerWidget {
 
     var selectedAsset = ref.watch(homePageStateProvider).selectedItems;
     var isMultiSelectEnable = ref.watch(homePageStateProvider).isMultiSelectEnable;
+    var deviceId = ref.watch(authenticationProvider).deviceId;
 
     Widget _buildSelectionIcon(ImmichAsset asset) {
       if (selectedAsset.contains(asset)) {
@@ -102,7 +104,10 @@ class ThumbnailImage extends HookConsumerWidget {
                 errorWidget: (context, url, error) {
                   debugPrint("Error Loading Thumbnail Widget $error");
                   cacheKey.value += 1;
-                  return const Icon(Icons.error);
+                  return Icon(
+                    Icons.image_not_supported_outlined,
+                    color: Theme.of(context).primaryColor,
+                  );
                 },
               ),
             ),
@@ -117,6 +122,15 @@ class ThumbnailImage extends HookConsumerWidget {
                     )
                   : Container(),
             ),
+            Positioned(
+              right: 10,
+              bottom: 5,
+              child: Icon(
+                (deviceId != asset.deviceId) ? Icons.cloud_done_outlined : Icons.photo_library_rounded,
+                color: Colors.white,
+                size: 18,
+              ),
+            )
           ],
         ),
       ),

+ 1 - 1
mobile/lib/modules/login/ui/login_form.dart

@@ -15,7 +15,7 @@ class LoginForm extends HookConsumerWidget {
   Widget build(BuildContext context, WidgetRef ref) {
     final usernameController = useTextEditingController(text: 'testuser@email.com');
     final passwordController = useTextEditingController(text: 'password');
-    final serverEndpointController = useTextEditingController(text: 'http://192.168.1.204:2283');
+    final serverEndpointController = useTextEditingController(text: 'http://192.168.1.103:2283');
 
     return Center(
       child: ConstrainedBox(