Compare commits
	
		
			4 Commits
		
	
	
		
			d07b194c04
			...
			596d212593
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 596d212593 | |||
| 54f290327e | |||
| 16f248ceab | |||
| 856d811187 | 
| @@ -169,12 +169,12 @@ class IslandApp extends HookConsumerWidget { | ||||
|     final theme = ref.watch(themeProvider); | ||||
|  | ||||
|     void handleMessage(RemoteMessage notification) { | ||||
|       if (notification.data['action_uri'] != null) { | ||||
|         var uri = notification.data['action_uri'] as String; | ||||
|       if (notification.data['meta']?['action_uri'] != null) { | ||||
|         var uri = notification.data['meta']['action_uri'] as String; | ||||
|         if (uri.startsWith('/')) { | ||||
|           // In-app routes | ||||
|           final router = ref.read(routerProvider); | ||||
|           router.go(notification.data['action_uri']); | ||||
|           router.push(notification.data['meta']['action_uri']); | ||||
|         } else { | ||||
|           // External links | ||||
|           launchUrlString(uri); | ||||
| @@ -186,27 +186,6 @@ class IslandApp extends HookConsumerWidget { | ||||
|       if (!kIsWeb && Platform.isLinux) { | ||||
|         return null; | ||||
|       } | ||||
|       const channel = MethodChannel('dev.solsynth.solian/notifications'); | ||||
|  | ||||
|       Future<void> handleInitialLink() async { | ||||
|         final String? link = await channel.invokeMethod('initialLink'); | ||||
|         if (link != null) { | ||||
|           final router = ref.read(routerProvider); | ||||
|           router.go(link); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       if (!kIsWeb && Platform.isAndroid) { | ||||
|         handleInitialLink(); | ||||
|       } | ||||
|  | ||||
|       channel.setMethodCallHandler((call) async { | ||||
|         if (call.method == 'newLink') { | ||||
|           final String link = call.arguments; | ||||
|           final router = ref.read(routerProvider); | ||||
|           router.go(link); | ||||
|         } | ||||
|       }); | ||||
|  | ||||
|       // When the app is opened from a terminated state. | ||||
|       FirebaseMessaging.instance.getInitialMessage().then((message) { | ||||
|   | ||||
| @@ -44,7 +44,7 @@ class AccountName extends StatelessWidget { | ||||
|           VerificationMark(mark: account.profile.verification!), | ||||
|         if (account.automatedId != null) | ||||
|           Tooltip( | ||||
|             message: 'automatedAccount'.tr(), | ||||
|             message: 'accountAutomated'.tr(), | ||||
|             child: Icon( | ||||
|               Symbols.smart_toy, | ||||
|               size: 16, | ||||
|   | ||||
| @@ -1,9 +1,12 @@ | ||||
| import 'dart:convert'; | ||||
| import 'dart:io'; | ||||
| import 'dart:math' as math; | ||||
| import 'dart:ui'; | ||||
|  | ||||
| import 'package:dismissible_page/dismissible_page.dart'; | ||||
| import 'package:easy_localization/easy_localization.dart'; | ||||
| import 'package:file_saver/file_saver.dart'; | ||||
| import 'package:flutter/foundation.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:flutter/services.dart'; | ||||
| import 'package:flutter_blurhash/flutter_blurhash.dart'; | ||||
| @@ -321,7 +324,7 @@ class CloudFileZoomIn extends HookConsumerWidget { | ||||
|     Future<void> saveToGallery() async { | ||||
|       try { | ||||
|         // Show loading indicator | ||||
|         showSnackBar('Saving image to gallery...'); | ||||
|         showSnackBar('Saving image...'); | ||||
|  | ||||
|         // Get the image URL | ||||
|         final client = ref.watch(apiClientProvider); | ||||
| @@ -339,10 +342,18 @@ class CloudFileZoomIn extends HookConsumerWidget { | ||||
|           filePath, | ||||
|           queryParameters: {'original': true}, | ||||
|         ); | ||||
|         await Gal.putImage(filePath, album: 'Solar Network'); | ||||
|  | ||||
|         // Show success message | ||||
|         showSnackBar('Image saved to gallery'); | ||||
|         if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) { | ||||
|           // Save to gallery | ||||
|           await Gal.putImage(filePath, album: 'Solar Network'); | ||||
|           // Show success message | ||||
|           showSnackBar('Image saved to gallery'); | ||||
|         } else { | ||||
|           await FileSaver.instance.saveFile( | ||||
|             name: item.name.isEmpty ? '${item.id}.$extName' : item.name, | ||||
|             file: File(filePath), | ||||
|           ); | ||||
|           showSnackBar('Image saved to $filePath'); | ||||
|         } | ||||
|       } catch (e) { | ||||
|         showErrorAlert(e); | ||||
|       } | ||||
| @@ -437,7 +448,24 @@ class CloudFileZoomIn extends HookConsumerWidget { | ||||
|                     ).padding(horizontal: 24, vertical: 16), | ||||
|                     const Divider(height: 1), | ||||
|                     ListTile( | ||||
|                       leading: const Icon(Icons.file_present), | ||||
|                       leading: const Icon(Symbols.tag), | ||||
|                       title: Text('ID').tr(), | ||||
|                       subtitle: Text( | ||||
|                         item.id, | ||||
|                         maxLines: 1, | ||||
|                         overflow: TextOverflow.ellipsis, | ||||
|                       ), | ||||
|                       contentPadding: EdgeInsets.symmetric(horizontal: 24), | ||||
|                       trailing: IconButton( | ||||
|                         icon: const Icon(Icons.copy), | ||||
|                         onPressed: () { | ||||
|                           Clipboard.setData(ClipboardData(text: item.id)); | ||||
|                           showSnackBar('File ID copied to clipboard'); | ||||
|                         }, | ||||
|                       ), | ||||
|                     ), | ||||
|                     ListTile( | ||||
|                       leading: const Icon(Symbols.file_present), | ||||
|                       title: Text('Name').tr(), | ||||
|                       subtitle: Text( | ||||
|                         item.name, | ||||
| @@ -623,6 +651,10 @@ class CloudFileZoomIn extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     final shadow = [ | ||||
|       Shadow(color: Colors.black54, blurRadius: 5.0, offset: Offset(1.0, 1.0)), | ||||
|     ]; | ||||
|  | ||||
|     return DismissiblePage( | ||||
|       isFullScreen: true, | ||||
|       backgroundColor: Colors.transparent, | ||||
| @@ -660,22 +692,17 @@ class CloudFileZoomIn extends HookConsumerWidget { | ||||
|               children: [ | ||||
|                 Row( | ||||
|                   children: [ | ||||
|                     IconButton( | ||||
|                       icon: Icon( | ||||
|                         Icons.save_alt, | ||||
|                         color: Colors.white, | ||||
|                         shadows: [ | ||||
|                           Shadow( | ||||
|                             color: Colors.black54, | ||||
|                             blurRadius: 5.0, | ||||
|                             offset: Offset(1.0, 1.0), | ||||
|                           ), | ||||
|                         ], | ||||
|                     if (!kIsWeb) | ||||
|                       IconButton( | ||||
|                         icon: Icon( | ||||
|                           Icons.save_alt, | ||||
|                           color: Colors.white, | ||||
|                           shadows: shadow, | ||||
|                         ), | ||||
|                         onPressed: () async { | ||||
|                           saveToGallery(); | ||||
|                         }, | ||||
|                       ), | ||||
|                       onPressed: () async { | ||||
|                         saveToGallery(); | ||||
|                       }, | ||||
|                     ), | ||||
|                     IconButton( | ||||
|                       onPressed: () { | ||||
|                         showOriginal.value = !showOriginal.value; | ||||
| @@ -683,29 +710,13 @@ class CloudFileZoomIn extends HookConsumerWidget { | ||||
|                       icon: Icon( | ||||
|                         showOriginal.value ? Symbols.hd : Symbols.sd, | ||||
|                         color: Colors.white, | ||||
|                         shadows: [ | ||||
|                           Shadow( | ||||
|                             color: Colors.black54, | ||||
|                             blurRadius: 5.0, | ||||
|                             offset: Offset(1.0, 1.0), | ||||
|                           ), | ||||
|                         ], | ||||
|                         shadows: shadow, | ||||
|                       ), | ||||
|                     ), | ||||
|                   ], | ||||
|                 ), | ||||
|                 IconButton( | ||||
|                   icon: Icon( | ||||
|                     Icons.close, | ||||
|                     color: Colors.white, | ||||
|                     shadows: [ | ||||
|                       Shadow( | ||||
|                         color: Colors.black54, | ||||
|                         blurRadius: 5.0, | ||||
|                         offset: Offset(1.0, 1.0), | ||||
|                       ), | ||||
|                     ], | ||||
|                   ), | ||||
|                   icon: Icon(Icons.close, color: Colors.white, shadows: shadow), | ||||
|                   onPressed: () => Navigator.of(context).pop(), | ||||
|                 ), | ||||
|               ], | ||||
| @@ -722,26 +733,24 @@ class CloudFileZoomIn extends HookConsumerWidget { | ||||
|                   icon: Icon( | ||||
|                     Icons.info_outline, | ||||
|                     color: Colors.white, | ||||
|                     shadows: [ | ||||
|                       Shadow( | ||||
|                         color: Colors.black54, | ||||
|                         blurRadius: 5.0, | ||||
|                         offset: Offset(1.0, 1.0), | ||||
|                       ), | ||||
|                     ], | ||||
|                     shadows: shadow, | ||||
|                   ), | ||||
|                   onPressed: showInfoSheet, | ||||
|                 ), | ||||
|                 Spacer(), | ||||
|                 IconButton( | ||||
|                   icon: Icon(Icons.remove, color: Colors.white), | ||||
|                   icon: Icon( | ||||
|                     Icons.remove, | ||||
|                     color: Colors.white, | ||||
|                     shadows: shadow, | ||||
|                   ), | ||||
|                   onPressed: () { | ||||
|                     photoViewController.scale = | ||||
|                         (photoViewController.scale ?? 1) - 0.05; | ||||
|                   }, | ||||
|                 ), | ||||
|                 IconButton( | ||||
|                   icon: Icon(Icons.add, color: Colors.white), | ||||
|                   icon: Icon(Icons.add, color: Colors.white, shadows: shadow), | ||||
|                   onPressed: () { | ||||
|                     photoViewController.scale = | ||||
|                         (photoViewController.scale ?? 1) + 0.05; | ||||
| @@ -752,13 +761,7 @@ class CloudFileZoomIn extends HookConsumerWidget { | ||||
|                   icon: Icon( | ||||
|                     Icons.rotate_left, | ||||
|                     color: Colors.white, | ||||
|                     shadows: [ | ||||
|                       Shadow( | ||||
|                         color: Colors.black54, | ||||
|                         blurRadius: 5.0, | ||||
|                         offset: Offset(1.0, 1.0), | ||||
|                       ), | ||||
|                     ], | ||||
|                     shadows: shadow, | ||||
|                   ), | ||||
|                   onPressed: () { | ||||
|                     rotation.value = (rotation.value - 1) % 4; | ||||
|   | ||||
| @@ -7,6 +7,7 @@ | ||||
| #include "generated_plugin_registrant.h" | ||||
|  | ||||
| #include <bitsdojo_window_linux/bitsdojo_window_plugin.h> | ||||
| #include <file_saver/file_saver_plugin.h> | ||||
| #include <file_selector_linux/file_selector_plugin.h> | ||||
| #include <flutter_platform_alert/flutter_platform_alert_plugin.h> | ||||
| #include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h> | ||||
| @@ -28,6 +29,9 @@ void fl_register_plugins(FlPluginRegistry* registry) { | ||||
|   g_autoptr(FlPluginRegistrar) bitsdojo_window_linux_registrar = | ||||
|       fl_plugin_registry_get_registrar_for_plugin(registry, "BitsdojoWindowPlugin"); | ||||
|   bitsdojo_window_plugin_register_with_registrar(bitsdojo_window_linux_registrar); | ||||
|   g_autoptr(FlPluginRegistrar) file_saver_registrar = | ||||
|       fl_plugin_registry_get_registrar_for_plugin(registry, "FileSaverPlugin"); | ||||
|   file_saver_plugin_register_with_registrar(file_saver_registrar); | ||||
|   g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = | ||||
|       fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); | ||||
|   file_selector_plugin_register_with_registrar(file_selector_linux_registrar); | ||||
|   | ||||
| @@ -4,6 +4,7 @@ | ||||
|  | ||||
| list(APPEND FLUTTER_PLUGIN_LIST | ||||
|   bitsdojo_window_linux | ||||
|   file_saver | ||||
|   file_selector_linux | ||||
|   flutter_platform_alert | ||||
|   flutter_secure_storage_linux | ||||
|   | ||||
| @@ -9,6 +9,7 @@ import bitsdojo_window_macos | ||||
| import connectivity_plus | ||||
| import device_info_plus | ||||
| import file_picker | ||||
| import file_saver | ||||
| import file_selector_macos | ||||
| import firebase_analytics | ||||
| import firebase_core | ||||
| @@ -45,6 +46,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { | ||||
|   ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin")) | ||||
|   DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) | ||||
|   FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin")) | ||||
|   FileSaverPlugin.register(with: registry.registrar(forPlugin: "FileSaverPlugin")) | ||||
|   FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) | ||||
|   FirebaseAnalyticsPlugin.register(with: registry.registrar(forPlugin: "FirebaseAnalyticsPlugin")) | ||||
|   FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) | ||||
|   | ||||
| @@ -9,6 +9,8 @@ PODS: | ||||
|     - FlutterMacOS | ||||
|   - file_picker (0.0.1): | ||||
|     - FlutterMacOS | ||||
|   - file_saver (0.0.1): | ||||
|     - FlutterMacOS | ||||
|   - file_selector_macos (0.0.1): | ||||
|     - FlutterMacOS | ||||
|   - Firebase/CoreOnly (12.0.0): | ||||
| @@ -249,6 +251,7 @@ DEPENDENCIES: | ||||
|   - croppy (from `Flutter/ephemeral/.symlinks/plugins/croppy/macos`) | ||||
|   - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) | ||||
|   - file_picker (from `Flutter/ephemeral/.symlinks/plugins/file_picker/macos`) | ||||
|   - file_saver (from `Flutter/ephemeral/.symlinks/plugins/file_saver/macos`) | ||||
|   - file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`) | ||||
|   - firebase_analytics (from `Flutter/ephemeral/.symlinks/plugins/firebase_analytics/macos`) | ||||
|   - firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`) | ||||
| @@ -315,6 +318,8 @@ EXTERNAL SOURCES: | ||||
|     :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos | ||||
|   file_picker: | ||||
|     :path: Flutter/ephemeral/.symlinks/plugins/file_picker/macos | ||||
|   file_saver: | ||||
|     :path: Flutter/ephemeral/.symlinks/plugins/file_saver/macos | ||||
|   file_selector_macos: | ||||
|     :path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos | ||||
|   firebase_analytics: | ||||
| @@ -384,6 +389,7 @@ SPEC CHECKSUMS: | ||||
|   croppy: d9bfc8c02f3cd1851f669a421df298a474b78f43 | ||||
|   device_info_plus: 4fb280989f669696856f8b129e4a5e3cd6c48f76 | ||||
|   file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a | ||||
|   file_saver: e35bd97de451dde55ff8c38862ed7ad0f3418d0f | ||||
|   file_selector_macos: 6280b52b459ae6c590af5d78fc35c7267a3c4b31 | ||||
|   Firebase: 800d487043c0557d9faed71477a38d9aafb08a41 | ||||
|   firebase_analytics: 53f0dc87ad10f56a6df8746da60d8a5fe41f886f | ||||
|   | ||||
							
								
								
									
										20
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								pubspec.lock
									
									
									
									
									
								
							| @@ -569,6 +569,14 @@ packages: | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "10.3.2" | ||||
|   file_saver: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: file_saver | ||||
|       sha256: "9d93db09bd4da9e43238f9dd485360fc51a5c138eea5ef5f407ec56e58079ac0" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "0.3.1" | ||||
|   file_selector_linux: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -1921,10 +1929,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: record_ios | ||||
|       sha256: "895c9467faec72d8e718a3142b51114958f42f18053836a8b484a74f9372f51a" | ||||
|       sha256: "13e241ed9cbc220534a40ae6b66222e21288db364d96dd66fb762ebd3cb77c71" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.1.1" | ||||
|     version: "1.1.2" | ||||
|   record_linux: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -2041,10 +2049,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: screen_brightness_android | ||||
|       sha256: fb5fa43cb89d0c9b8534556c427db1e97e46594ac5d66ebdcf16063b773d54ed | ||||
|       sha256: d34f5321abd03bc3474f4c381f53d189117eba0b039eac1916aa92cca5fd0a96 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.1.2" | ||||
|     version: "2.1.3" | ||||
|   screen_brightness_platform_interface: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -2640,10 +2648,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: watcher | ||||
|       sha256: "0b7fd4a0bbc4b92641dbf20adfd7e3fd1398fe17102d94b674234563e110088a" | ||||
|       sha256: "5bf046f41320ac97a469d506261797f35254fa61c641741ef32dacda98b7d39c" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.1.2" | ||||
|     version: "1.1.3" | ||||
|   waveform_flutter: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|   | ||||
| @@ -8,6 +8,7 @@ | ||||
|  | ||||
| #include <bitsdojo_window_windows/bitsdojo_window_plugin.h> | ||||
| #include <connectivity_plus/connectivity_plus_windows_plugin.h> | ||||
| #include <file_saver/file_saver_plugin.h> | ||||
| #include <file_selector_windows/file_selector_windows.h> | ||||
| #include <firebase_core/firebase_core_plugin_c_api.h> | ||||
| #include <flutter_inappwebview_windows/flutter_inappwebview_windows_plugin_c_api.h> | ||||
| @@ -35,6 +36,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { | ||||
|       registry->GetRegistrarForPlugin("BitsdojoWindowPlugin")); | ||||
|   ConnectivityPlusWindowsPluginRegisterWithRegistrar( | ||||
|       registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin")); | ||||
|   FileSaverPluginRegisterWithRegistrar( | ||||
|       registry->GetRegistrarForPlugin("FileSaverPlugin")); | ||||
|   FileSelectorWindowsRegisterWithRegistrar( | ||||
|       registry->GetRegistrarForPlugin("FileSelectorWindows")); | ||||
|   FirebaseCorePluginCApiRegisterWithRegistrar( | ||||
|   | ||||
| @@ -5,6 +5,7 @@ | ||||
| list(APPEND FLUTTER_PLUGIN_LIST | ||||
|   bitsdojo_window_windows | ||||
|   connectivity_plus | ||||
|   file_saver | ||||
|   file_selector_windows | ||||
|   firebase_core | ||||
|   flutter_inappwebview_windows | ||||
|   | ||||
		Reference in New Issue
	
	Block a user