From d0be93dd6414434c8b0d57816d2a627f91d57650 Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Sun, 24 Nov 2024 23:57:43 +0800 Subject: [PATCH 01/20] build(pubspec): upgrade dependencies --- pubspec.lock | 216 +++++++++++++++++++++++++++++++++++++++++++-------- pubspec.yaml | 9 ++- 2 files changed, 190 insertions(+), 35 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 873cc41..472e2e9 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -358,6 +358,22 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.19.0" + connectivity_plus: + dependency: "direct main" + description: + name: connectivity_plus + sha256: "876849631b0c7dc20f8b471a2a03142841b482438e3b707955464f5ffca3e4c3" + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.1.0" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + sha256: "42657c1715d48b167930d5f34d00222ac100475f73d10162ddf43e714932f204" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.0.1" console: dependency: transitive description: @@ -506,10 +522,10 @@ packages: dependency: transitive description: name: equatable - sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 + sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7" url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.5" + version: "2.0.7" extended_list_library: dependency: transitive description: @@ -610,10 +626,10 @@ packages: dependency: "direct main" description: name: fl_chart - sha256: "94307bef3a324a0d329d3ab77b2f0c6e5ed739185ffc029ed28c0f9b019ea7ef" + sha256: "74959b99b92b9eebeed1a4049426fd67c4abc3c5a0f4d12e2877097d6a11ae08" url: "https://pub.flutter-io.cn" source: hosted - version: "0.69.0" + version: "0.69.2" flat_buffers: dependency: transitive description: @@ -767,10 +783,10 @@ packages: dependency: transitive description: name: flutter_keyboard_visibility_temp_fork - sha256: "2d94acecfc170d244157821cc67e784f60972677aac94a6672626a5d6b2dc537" + sha256: cecc44a350a8a369efbc960bb2126386af53cb0597ca6789607cbfb88081b9f4 url: "https://pub.flutter-io.cn" source: hosted - version: "0.1.3" + version: "0.1.4" flutter_keyboard_visibility_windows: dependency: transitive description: @@ -848,6 +864,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.4.2" + flutter_quill_extensions: + dependency: "direct main" + description: + name: flutter_quill_extensions + sha256: e8ff79c2bbdbf57d3248ec07055ec54ef0c35e270659d6058efd42a0e0ae1286 + url: "https://pub.flutter-io.cn" + source: hosted + version: "10.8.5" flutter_rust_bridge: dependency: "direct main" description: @@ -882,6 +906,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "10.8.0" + freezed_annotation: + dependency: transitive + description: + name: freezed_annotation + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.4.4" frontend_server_client: dependency: transitive description: @@ -898,6 +930,22 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.4.0" + gal: + dependency: transitive + description: + name: gal + sha256: "54c9b72528efce7c66234f3b6dd01cb0304fd8af8196de15571d7bdddb940977" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.3.0" + gal_linux: + dependency: transitive + description: + name: gal_linux + sha256: "0040d61843134cc5a93e4597080a86f2ba073217957e28b2a684b4d8b050873c" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.1.2" geolocator: dependency: "direct main" description: @@ -1122,6 +1170,22 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.0.4" + irondash_engine_context: + dependency: transitive + description: + name: irondash_engine_context + sha256: cd7b769db11a2b5243b037c8a9b1ecaef02e1ae27a2d909ffa78c1dad747bb10 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.5.4" + irondash_message_channel: + dependency: transitive + description: + name: irondash_message_channel + sha256: b4101669776509c76133b8917ab8cfc704d3ad92a8c450b92934dd8884a2f060 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.7.0" isar: dependency: "direct main" description: @@ -1582,10 +1646,10 @@ packages: dependency: transitive description: name: permission_handler_html - sha256: "6b9cb54b7135073841a35513fba39e598b421702d5f4d92319992fd6eb5532a9" + sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24" url: "https://pub.flutter-io.cn" source: hosted - version: "0.1.3+4" + version: "0.1.3+5" permission_handler_platform_interface: dependency: transitive description: @@ -1618,6 +1682,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "0.15.0" + pixel_snap: + dependency: transitive + description: + name: pixel_snap + sha256: "677410ea37b07cd37ecb6d5e6c0d8d7615a7cf3bd92ba406fd1ac57e937d1fb0" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.1.5" platform: dependency: transitive description: @@ -1702,66 +1774,66 @@ packages: dependency: transitive description: name: quill_native_bridge - sha256: "5ccf1930fe52db91846754bd56391d251071524ec594eb4c8509b3095f7f9e28" + sha256: "0b3200c57bb4f1f12d6c764648d42482891f20f12024c75fe3479cafc1e132c9" url: "https://pub.flutter-io.cn" source: hosted - version: "10.7.9" + version: "10.7.11" quill_native_bridge_android: dependency: transitive description: name: quill_native_bridge_android - sha256: "4e787041ad4ab99421dfed0199cb5a6f136b5f6a9e68d20b199064d85d4161d8" + sha256: df94b59081dfded10052b61fd4bb80a013499029841d3f64b753b117c8db9dc3 url: "https://pub.flutter-io.cn" source: hosted - version: "0.0.1-dev.4" + version: "0.0.1-dev.5" quill_native_bridge_ios: dependency: transitive description: name: quill_native_bridge_ios - sha256: "16dd18a56bdc60f396eb873a0786141d8e3281cc0cb6ad7af24c2286abec43d8" + sha256: "2bec0c95558eea85f422767c6ddab87ef774cf5fe4222e295a436a169d314ecc" url: "https://pub.flutter-io.cn" source: hosted - version: "0.0.1-dev.4" + version: "0.0.1-dev.6" quill_native_bridge_linux: dependency: transitive description: name: quill_native_bridge_linux - sha256: a0d8aa775b36a7b8ac7ace5bd6ba05b21fed6c9b04a9f328f95489254ae0f7a3 + sha256: d226004634b69119007dffb95c88e06698644c1b3adfe984b78024129e223426 url: "https://pub.flutter-io.cn" source: hosted - version: "0.0.1-dev.3" + version: "0.0.1-dev.4" quill_native_bridge_macos: dependency: transitive description: name: quill_native_bridge_macos - sha256: "76d441a905181af04c51b9cf71a13e04c3dd51ed482dcb543a01e14d78ad3fc0" + sha256: "9bbe855cc2248f098732794a4861852fede97a384299b02646cb3dbfbc996a87" url: "https://pub.flutter-io.cn" source: hosted - version: "0.0.1-dev.2" + version: "0.0.1-dev.5" quill_native_bridge_platform_interface: dependency: transitive description: name: quill_native_bridge_platform_interface - sha256: "5ad4a9cdb6fadd6575bca29c277f83daa324539c97f58cf45cff6195135defb9" + sha256: fdfc1001c9a152eb5789916f55da97a3de548ccd41fe3cdd0bfcc371bdf41d10 url: "https://pub.flutter-io.cn" source: hosted - version: "0.0.1-dev.4" + version: "0.0.1-dev.5" quill_native_bridge_web: dependency: transitive description: name: quill_native_bridge_web - sha256: bb3ab017fdb9b60a29cac0bce3acfd48396d13c1bd0499c97af112c84937b4d1 + sha256: ad8076ad740318b3cf6b9a043d3dc206bb2e1383e5371cbe09711b9c609b64a0 url: "https://pub.flutter-io.cn" source: hosted - version: "0.0.1-dev.5" + version: "0.0.1-dev.6" quill_native_bridge_windows: dependency: transitive description: name: quill_native_bridge_windows - sha256: "78bc40cc4a23387ed79a309fc04f7a95a0b6da9ebce67f739dd08b0fd0523641" + sha256: "62583f68dd426aa9a98a0582631780db44d0c6708625d27f84cc87bf02e49ea3" url: "https://pub.flutter-io.cn" source: hosted - version: "0.0.1-dev.3" + version: "0.0.1-dev.4" quiver: dependency: transitive description: @@ -2013,10 +2085,10 @@ packages: dependency: transitive description: name: shelf_web_socket - sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" + sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67 url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.0" + version: "2.0.1" simple_gesture_detector: dependency: transitive description: @@ -2090,10 +2162,10 @@ packages: dependency: transitive description: name: sqflite_common - sha256: "4468b24876d673418a7b7147e5a08a715b4998a7ae69227acafaab762e0e5490" + sha256: "761b9740ecbd4d3e66b8916d784e581861fd3c3553eda85e167bc49fdb68f709" url: "https://pub.flutter-io.cn" source: hosted - version: "2.5.4+5" + version: "2.5.4+6" sqflite_darwin: dependency: transitive description: @@ -2166,22 +2238,38 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.8.1" + super_clipboard: + dependency: transitive + description: + name: super_clipboard + sha256: "4a6ae6dfaa282ec1f2bff750976f535517ed8ca842d5deae13985eb11c00ac1f" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.8.24" + super_native_extensions: + dependency: transitive + description: + name: super_native_extensions + sha256: a433bba8186cd6b707560c42535bf284804665231c00bca86faf1aa4968b7637 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.8.24" syncfusion_flutter_core: dependency: transitive description: name: syncfusion_flutter_core - sha256: "225b1cc135549bb4eef096d63b7323c30ee61c4b095c7e8a14bf9333e243d84b" + sha256: a39ddfb22b30c7cba620fec7dc682e46f151998febd25bca5519c17431084951 url: "https://pub.flutter-io.cn" source: hosted - version: "27.2.2" + version: "27.2.3" syncfusion_flutter_sliders: dependency: "direct main" description: name: syncfusion_flutter_sliders - sha256: af68a903ed78cd1c168df62aaeb3dca1a0f25e46058a89dd086b3538348cd2d0 + sha256: "9b94199adf221da7b924bc59a52a8915d0c1e48a0662ee84667fe551e0307433" url: "https://pub.flutter-io.cn" source: hosted - version: "27.2.2" + version: "27.2.3" synchronized: dependency: transitive description: @@ -2254,6 +2342,22 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.2.2" universal_platform: dependency: transitive description: @@ -2350,6 +2454,46 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.1.4" + video_player: + dependency: transitive + description: + name: video_player + sha256: "4a8c3492d734f7c39c2588a3206707a05ee80cef52e8c7f3b2078d430c84bc17" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.9.2" + video_player_android: + dependency: transitive + description: + name: video_player_android + sha256: "391e092ba4abe2f93b3e625bd6b6a6ec7d7414279462c1c0ee42b5ab8d0a0898" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.7.16" + video_player_avfoundation: + dependency: transitive + description: + name: video_player_avfoundation + sha256: "0b146e5d82e886ff43e5a46c6bcbe390761b802864a6e2503eb612d69a405dfa" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.6.3" + video_player_platform_interface: + dependency: transitive + description: + name: video_player_platform_interface + sha256: "229d7642ccd9f3dc4aba169609dd6b5f3f443bb4cc15b82f7785fcada5af9bbb" + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.2.3" + video_player_web: + dependency: transitive + description: + name: video_player_web + sha256: "881b375a934d8ebf868c7fb1423b2bfaa393a0a265fa3f733079a86536064a10" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.3.3" visibility_detector: dependency: transitive description: @@ -2486,6 +2630,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.0.3" + youtube_explode_dart: + dependency: transitive + description: + name: youtube_explode_dart + sha256: "51ca5b2c03bf56060143d4f87df90ec3227592d7ae8a8003532533ae019d4291" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.3.6" sdks: dart: ">=3.6.0-0 <4.0.0" flutter: ">=3.24.0" diff --git a/pubspec.yaml b/pubspec.yaml index d4f25cb..73ce7a9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -38,7 +38,7 @@ dependencies: logger: 2.5.0 flutter_drawing_board: 0.9.5 flutter_displaymode: 0.6.0 - fl_chart: 0.69.0 + fl_chart: 0.69.2 file_picker: 8.1.4 local_auth: 2.3.0 local_auth_android: 1.0.46 @@ -96,14 +96,17 @@ dependencies: faker: 2.2.0 flutter_inappwebview: 6.1.5 flutter_rust_bridge: 2.6.0 - syncfusion_flutter_sliders: 27.2.2 + syncfusion_flutter_sliders: 27.2.3 + flutter_quill_extensions: 10.8.5 + connectivity_plus: 6.1.0 flutter_localizations: sdk: flutter rust_lib_mood_diary: path: rust_builder - +dependency_overrides: + device_info_plus: 11.1.1 dev_dependencies: flutter_test: sdk: flutter From 95886edb3b428255773b18ea134db78a34af5d99 Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Tue, 26 Nov 2024 10:47:27 +0800 Subject: [PATCH 02/20] feat(kmp): add kmp search use rust --- lib/src/rust/api/compress.dart | 10 +- lib/src/rust/api/constants.dart | 3 +- lib/src/rust/api/kmp.dart | 19 ++ lib/src/rust/frb_generated.dart | 281 +++++++++++++++++++++++++-- lib/src/rust/frb_generated.io.dart | 107 ++++++++++- lib/src/rust/frb_generated.web.dart | 89 ++++++++- rust/src/api/compress.rs | 1 + rust/src/api/kmp.rs | 84 ++++++++ rust/src/api/mod.rs | 3 +- rust/src/frb_generated.rs | 284 +++++++++++++++++++++++++++- 10 files changed, 851 insertions(+), 30 deletions(-) create mode 100644 lib/src/rust/api/kmp.dart create mode 100644 rust/src/api/kmp.rs diff --git a/lib/src/rust/api/compress.dart b/lib/src/rust/api/compress.dart index 789f1a4..d2a8e86 100644 --- a/lib/src/rust/api/compress.dart +++ b/lib/src/rust/api/compress.dart @@ -3,10 +3,9 @@ // ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import -import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; - import '../frb_generated.dart'; import 'constants.dart'; +import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; // These functions are ignored because they are not marked as `pub`: `calculate_target_dimensions`, `load_image` @@ -24,8 +23,11 @@ abstract class DynamicImage implements RustOpaqueInterface {} // Rust type: RustOpaqueMoi> abstract class ImageCompress implements RustOpaqueInterface { - static Future contain( - {required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}) => + static Future contain({required String filePath, + CompressFormat? compressFormat, + int? maxWidth, + int? maxHeight, + int? quality}) => RustLib.instance.api.crateApiCompressImageCompressContain( filePath: filePath, compressFormat: compressFormat, diff --git a/lib/src/rust/api/constants.dart b/lib/src/rust/api/constants.dart index 8082d4c..f9134e4 100644 --- a/lib/src/rust/api/constants.dart +++ b/lib/src/rust/api/constants.dart @@ -3,9 +3,8 @@ // ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import -import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; - import '../frb_generated.dart'; +import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; // These function are ignored because they are on traits that is not defined in current crate (put an empty `#[frb]` on it to unignore): `assert_receiver_is_total_eq`, `eq` diff --git a/lib/src/rust/api/kmp.dart b/lib/src/rust/api/kmp.dart new file mode 100644 index 0000000..37f1b38 --- /dev/null +++ b/lib/src/rust/api/kmp.dart @@ -0,0 +1,19 @@ +// This file is automatically generated, so please do not edit it. +// @generated by `flutter_rust_bridge`@ 2.6.0. + +// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import + +import '../frb_generated.dart'; +import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; + +Future buildPrefixTable({required String pattern}) => + RustLib.instance.api.crateApiKmpBuildPrefixTable(pattern: pattern); + +Future kmpSearch({required String text, required String pattern}) => + RustLib.instance.api.crateApiKmpKmpSearch(text: text, pattern: pattern); + +// Rust type: RustOpaqueMoi> +abstract class Kmp implements RustOpaqueInterface { + static Future replaceWithKmp({required String text, required Map replacements}) => + RustLib.instance.api.crateApiKmpKmpReplaceWithKmp(text: text, replacements: replacements); +} diff --git a/lib/src/rust/frb_generated.dart b/lib/src/rust/frb_generated.dart index 087667b..82afd5d 100644 --- a/lib/src/rust/frb_generated.dart +++ b/lib/src/rust/frb_generated.dart @@ -3,15 +3,14 @@ // ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field -import 'dart:async'; -import 'dart:convert'; - -import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; - import 'api/compress.dart'; import 'api/constants.dart'; +import 'api/kmp.dart'; +import 'dart:async'; +import 'dart:convert'; import 'frb_generated.dart'; import 'frb_generated.io.dart' if (dart.library.js_interop) 'frb_generated.web.dart'; +import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; /// Main entrypoint of the Rust API class RustLib extends BaseEntrypoint { @@ -65,7 +64,7 @@ class RustLib extends BaseEntrypoint { String get codegenVersion => '2.6.0'; @override - int get rustContentHash => 1782633232; + int get rustContentHash => -914742464; static const kDefaultExternalLibraryLoaderConfig = ExternalLibraryLoaderConfig( stem: 'rust_lib_mood_diary', @@ -75,8 +74,15 @@ class RustLib extends BaseEntrypoint { } abstract class RustLibApi extends BaseApi { - Future crateApiCompressImageCompressContain( - {required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}); + Future crateApiCompressImageCompressContain({required String filePath, + CompressFormat? compressFormat, + int? maxWidth, + int? maxHeight, + int? quality}); + + Future crateApiKmpKmpReplaceWithKmp({required String text, required Map replacements}); + + Future crateApiKmpBuildPrefixTable({required String pattern}); Future crateApiCompressCompress( {required DynamicImage img, @@ -85,6 +91,8 @@ abstract class RustLibApi extends BaseApi { required CompressFormat compressFormat, required int quality}); + Future crateApiKmpKmpSearch({required String text, required String pattern}); + RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_DynamicImage; RustArcDecrementStrongCountFnType get rust_arc_decrement_strong_count_DynamicImage; @@ -96,6 +104,12 @@ abstract class RustLibApi extends BaseApi { RustArcDecrementStrongCountFnType get rust_arc_decrement_strong_count_ImageCompress; CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_ImageCompressPtr; + + RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_Kmp; + + RustArcDecrementStrongCountFnType get rust_arc_decrement_strong_count_Kmp; + + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_KmpPtr; } class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { @@ -107,8 +121,11 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { }); @override - Future crateApiCompressImageCompressContain( - {required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}) { + Future crateApiCompressImageCompressContain({required String filePath, + CompressFormat? compressFormat, + int? maxWidth, + int? maxHeight, + int? quality}) { return handler.executeNormal(NormalTask( callFfi: (port_) { final serializer = SseSerializer(generalizedFrbRustBinding); @@ -134,6 +151,53 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { argNames: ["filePath", "compressFormat", "maxWidth", "maxHeight", "quality"], ); + @override + Future crateApiKmpKmpReplaceWithKmp({required String text, required Map replacements}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_String(text, serializer); + sse_encode_Map_String_String(replacements, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 2, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_String, + decodeErrorData: null, + ), + constMeta: kCrateApiKmpKmpReplaceWithKmpConstMeta, + argValues: [text, replacements], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiKmpKmpReplaceWithKmpConstMeta => const TaskConstMeta( + debugName: "Kmp_replace_with_kmp", + argNames: ["text", "replacements"], + ); + + @override + Future crateApiKmpBuildPrefixTable({required String pattern}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_String(pattern, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 3, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_list_prim_usize_strict, + decodeErrorData: null, + ), + constMeta: kCrateApiKmpBuildPrefixTableConstMeta, + argValues: [pattern], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiKmpBuildPrefixTableConstMeta => const TaskConstMeta( + debugName: "build_prefix_table", + argNames: ["pattern"], + ); + @override Future crateApiCompressCompress( {required DynamicImage img, @@ -149,7 +213,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_u_32(dstWidth, serializer); sse_encode_compress_format(compressFormat, serializer); sse_encode_u_8(quality, serializer); - pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 2, port: port_); + pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 4, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_list_prim_u_8_strict, @@ -166,6 +230,30 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { argNames: ["img", "dstHeight", "dstWidth", "compressFormat", "quality"], ); + @override + Future crateApiKmpKmpSearch({required String text, required String pattern}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_String(text, serializer); + sse_encode_String(pattern, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 5, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_list_prim_usize_strict, + decodeErrorData: null, + ), + constMeta: kCrateApiKmpKmpSearchConstMeta, + argValues: [text, pattern], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiKmpKmpSearchConstMeta => const TaskConstMeta( + debugName: "kmp_search", + argNames: ["text", "pattern"], + ); + RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_DynamicImage => wire.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage; @@ -178,6 +266,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { RustArcDecrementStrongCountFnType get rust_arc_decrement_strong_count_ImageCompress => wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress; + RustArcIncrementStrongCountFnType get rust_arc_increment_strong_count_Kmp => + wire.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp; + + RustArcDecrementStrongCountFnType get rust_arc_decrement_strong_count_Kmp => + wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp; + @protected AnyhowException dco_decode_AnyhowException(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -191,6 +285,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return ImageCompressImpl.frbInternalDcoDecode(raw as List); } + @protected + Kmp dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return KmpImpl.frbInternalDcoDecode(raw as List); + } + @protected DynamicImage dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( dynamic raw) { @@ -198,6 +298,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return DynamicImageImpl.frbInternalDcoDecode(raw as List); } + @protected + Map dco_decode_Map_String_String(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Map.fromEntries(dco_decode_list_record_string_string(raw).map((e) => MapEntry(e.$1, e.$2))); + } + @protected DynamicImage dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -210,6 +316,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return ImageCompressImpl.frbInternalDcoDecode(raw as List); } + @protected + Kmp dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return KmpImpl.frbInternalDcoDecode(raw as List); + } + @protected String dco_decode_String(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -252,6 +364,18 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return raw as Uint8List; } + @protected + Uint64List dco_decode_list_prim_usize_strict(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as Uint64List; + } + + @protected + List<(String, String)> dco_decode_list_record_string_string(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return (raw as List).map(dco_decode_record_string_string).toList(); + } + @protected CompressFormat? dco_decode_opt_box_autoadd_compress_format(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -270,6 +394,19 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return raw == null ? null : dco_decode_box_autoadd_u_8(raw); } + @protected + (String, String) dco_decode_record_string_string(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + final arr = raw as List; + if (arr.length != 2) { + throw Exception('Expected 2 elements, got ${arr.length}'); + } + return ( + dco_decode_String(arr[0]), + dco_decode_String(arr[1]), + ); + } + @protected int dco_decode_u_32(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -282,6 +419,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return raw as int; } + @protected + void dco_decode_unit(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return; + } + @protected BigInt dco_decode_usize(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -302,6 +445,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return ImageCompressImpl.frbInternalSseDecode(sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); } + @protected + Kmp sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return KmpImpl.frbInternalSseDecode(sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + @protected DynamicImage sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( SseDeserializer deserializer) { @@ -309,6 +459,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return DynamicImageImpl.frbInternalSseDecode(sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); } + @protected + Map sse_decode_Map_String_String(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var inner = sse_decode_list_record_string_string(deserializer); + return Map.fromEntries(inner.map((e) => MapEntry(e.$1, e.$2))); + } + @protected DynamicImage sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( SseDeserializer deserializer) { @@ -323,6 +480,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return ImageCompressImpl.frbInternalSseDecode(sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); } + @protected + Kmp sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return KmpImpl.frbInternalSseDecode(sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + @protected String sse_decode_String(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -368,6 +531,25 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return deserializer.buffer.getUint8List(len_); } + @protected + Uint64List sse_decode_list_prim_usize_strict(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var len_ = sse_decode_i_32(deserializer); + return deserializer.buffer.getUint64List(len_); + } + + @protected + List<(String, String)> sse_decode_list_record_string_string(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var len_ = sse_decode_i_32(deserializer); + var ans_ = <(String, String)>[]; + for (var idx_ = 0; idx_ < len_; ++idx_) { + ans_.add(sse_decode_record_string_string(deserializer)); + } + return ans_; + } + @protected CompressFormat? sse_decode_opt_box_autoadd_compress_format(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -401,6 +583,14 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { } } + @protected + (String, String) sse_decode_record_string_string(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var var_field0 = sse_decode_String(deserializer); + var var_field1 = sse_decode_String(deserializer); + return (var_field0, var_field1); + } + @protected int sse_decode_u_32(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -413,6 +603,11 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return deserializer.buffer.getUint8(); } + @protected + void sse_decode_unit(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + } + @protected BigInt sse_decode_usize(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -438,6 +633,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_usize((self as ImageCompressImpl).frbInternalSseEncode(move: true), serializer); } + @protected + void sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + Kmp self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize((self as KmpImpl).frbInternalSseEncode(move: true), serializer); + } + @protected void sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( DynamicImage self, SseSerializer serializer) { @@ -445,6 +647,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_usize((self as DynamicImageImpl).frbInternalSseEncode(move: false), serializer); } + @protected + void sse_encode_Map_String_String(Map self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_list_record_string_string(self.entries.map((e) => (e.key, e.value)).toList(), serializer); + } + @protected void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( DynamicImage self, SseSerializer serializer) { @@ -459,6 +667,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_usize((self as ImageCompressImpl).frbInternalSseEncode(move: null), serializer); } + @protected + void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + Kmp self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize((self as KmpImpl).frbInternalSseEncode(move: null), serializer); + } + @protected void sse_encode_String(String self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -502,6 +717,22 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { serializer.buffer.putUint8List(self); } + @protected + void sse_encode_list_prim_usize_strict(Uint64List self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_i_32(self.length, serializer); + serializer.buffer.putUint64List(self); + } + + @protected + void sse_encode_list_record_string_string(List<(String, String)> self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_i_32(self.length, serializer); + for (final item in self) { + sse_encode_record_string_string(item, serializer); + } + } + @protected void sse_encode_opt_box_autoadd_compress_format(CompressFormat? self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -532,6 +763,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { } } + @protected + void sse_encode_record_string_string((String, String) self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_String(self.$1, serializer); + sse_encode_String(self.$2, serializer); + } + @protected void sse_encode_u_32(int self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -544,6 +782,11 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { serializer.buffer.putUint8(self); } + @protected + void sse_encode_unit(void self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + } + @protected void sse_encode_usize(BigInt self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -588,3 +831,19 @@ class ImageCompressImpl extends RustOpaque implements ImageCompress { rustArcDecrementStrongCountPtr: RustLib.instance.api.rust_arc_decrement_strong_count_ImageCompressPtr, ); } + +@sealed +class KmpImpl extends RustOpaque implements Kmp { + // Not to be used by end users + KmpImpl.frbInternalDcoDecode(List wire) : super.frbInternalDcoDecode(wire, _kStaticData); + + // Not to be used by end users + KmpImpl.frbInternalSseDecode(BigInt ptr, int externalSizeOnNative) + : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: RustLib.instance.api.rust_arc_increment_strong_count_Kmp, + rustArcDecrementStrongCount: RustLib.instance.api.rust_arc_decrement_strong_count_Kmp, + rustArcDecrementStrongCountPtr: RustLib.instance.api.rust_arc_decrement_strong_count_KmpPtr, + ); +} diff --git a/lib/src/rust/frb_generated.io.dart b/lib/src/rust/frb_generated.io.dart index 649d2f6..93bdca2 100644 --- a/lib/src/rust/frb_generated.io.dart +++ b/lib/src/rust/frb_generated.io.dart @@ -3,15 +3,14 @@ // ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field +import 'api/compress.dart'; +import 'api/constants.dart'; +import 'api/kmp.dart'; import 'dart:async'; import 'dart:convert'; import 'dart:ffi' as ffi; - -import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_io.dart'; - -import 'api/compress.dart'; -import 'api/constants.dart'; import 'frb_generated.dart'; +import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_io.dart'; abstract class RustLibApiImplPlatform extends BaseApiImpl { RustLibApiImplPlatform({ @@ -27,6 +26,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_ImageCompressPtr => wire ._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompressPtr; + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_KmpPtr => + wire._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmpPtr; + @protected AnyhowException dco_decode_AnyhowException(dynamic raw); @@ -34,16 +36,25 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { ImageCompress dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress( dynamic raw); + @protected + Kmp dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(dynamic raw); + @protected DynamicImage dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( dynamic raw); + @protected + Map dco_decode_Map_String_String(dynamic raw); + @protected DynamicImage dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(dynamic raw); @protected ImageCompress dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(dynamic raw); + @protected + Kmp dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(dynamic raw); + @protected String dco_decode_String(dynamic raw); @@ -65,6 +76,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); + @protected + Uint64List dco_decode_list_prim_usize_strict(dynamic raw); + + @protected + List<(String, String)> dco_decode_list_record_string_string(dynamic raw); + @protected CompressFormat? dco_decode_opt_box_autoadd_compress_format(dynamic raw); @@ -74,12 +91,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected int? dco_decode_opt_box_autoadd_u_8(dynamic raw); + @protected + (String, String) dco_decode_record_string_string(dynamic raw); + @protected int dco_decode_u_32(dynamic raw); @protected int dco_decode_u_8(dynamic raw); + @protected + void dco_decode_unit(dynamic raw); + @protected BigInt dco_decode_usize(dynamic raw); @@ -90,10 +113,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { ImageCompress sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress( SseDeserializer deserializer); + @protected + Kmp sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + SseDeserializer deserializer); + @protected DynamicImage sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( SseDeserializer deserializer); + @protected + Map sse_decode_Map_String_String(SseDeserializer deserializer); + @protected DynamicImage sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( SseDeserializer deserializer); @@ -102,6 +132,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { ImageCompress sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress( SseDeserializer deserializer); + @protected + Kmp sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(SseDeserializer deserializer); + @protected String sse_decode_String(SseDeserializer deserializer); @@ -123,6 +156,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); + @protected + Uint64List sse_decode_list_prim_usize_strict(SseDeserializer deserializer); + + @protected + List<(String, String)> sse_decode_list_record_string_string(SseDeserializer deserializer); + @protected CompressFormat? sse_decode_opt_box_autoadd_compress_format(SseDeserializer deserializer); @@ -132,12 +171,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected int? sse_decode_opt_box_autoadd_u_8(SseDeserializer deserializer); + @protected + (String, String) sse_decode_record_string_string(SseDeserializer deserializer); + @protected int sse_decode_u_32(SseDeserializer deserializer); @protected int sse_decode_u_8(SseDeserializer deserializer); + @protected + void sse_decode_unit(SseDeserializer deserializer); + @protected BigInt sse_decode_usize(SseDeserializer deserializer); @@ -151,10 +196,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { void sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress( ImageCompress self, SseSerializer serializer); + @protected + void sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + Kmp self, SseSerializer serializer); + @protected void sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( DynamicImage self, SseSerializer serializer); + @protected + void sse_encode_Map_String_String(Map self, SseSerializer serializer); + @protected void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( DynamicImage self, SseSerializer serializer); @@ -163,6 +215,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress( ImageCompress self, SseSerializer serializer); + @protected + void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(Kmp self, SseSerializer serializer); + @protected void sse_encode_String(String self, SseSerializer serializer); @@ -184,6 +239,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_list_prim_u_8_strict(Uint8List self, SseSerializer serializer); + @protected + void sse_encode_list_prim_usize_strict(Uint64List self, SseSerializer serializer); + + @protected + void sse_encode_list_record_string_string(List<(String, String)> self, SseSerializer serializer); + @protected void sse_encode_opt_box_autoadd_compress_format(CompressFormat? self, SseSerializer serializer); @@ -193,12 +254,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_opt_box_autoadd_u_8(int? self, SseSerializer serializer); + @protected + void sse_encode_record_string_string((String, String) self, SseSerializer serializer); + @protected void sse_encode_u_32(int self, SseSerializer serializer); @protected void sse_encode_u_8(int self, SseSerializer serializer); + @protected + void sse_encode_unit(void self, SseSerializer serializer); + @protected void sse_encode_usize(BigInt self, SseSerializer serializer); @@ -276,4 +343,34 @@ class RustLibWire implements BaseWire { late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress = _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompressPtr .asFunction)>(); + + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmpPtr = + _lookup)>>( + 'frbgen_mood_diary_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp'); + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp = + _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmpPtr + .asFunction)>(); + + void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmpPtr = + _lookup)>>( + 'frbgen_mood_diary_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp'); + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp = + _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmpPtr + .asFunction)>(); } diff --git a/lib/src/rust/frb_generated.web.dart b/lib/src/rust/frb_generated.web.dart index 2cfda93..6c6fe47 100644 --- a/lib/src/rust/frb_generated.web.dart +++ b/lib/src/rust/frb_generated.web.dart @@ -6,14 +6,13 @@ // Static analysis wrongly picks the IO variant, thus ignore this // ignore_for_file: argument_type_not_assignable -import 'dart:async'; -import 'dart:convert'; - -import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_web.dart'; - import 'api/compress.dart'; import 'api/constants.dart'; +import 'api/kmp.dart'; +import 'dart:async'; +import 'dart:convert'; import 'frb_generated.dart'; +import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated_web.dart'; abstract class RustLibApiImplPlatform extends BaseApiImpl { RustLibApiImplPlatform({ @@ -29,6 +28,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_ImageCompressPtr => wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress; + CrossPlatformFinalizerArg get rust_arc_decrement_strong_count_KmpPtr => + wire.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp; + @protected AnyhowException dco_decode_AnyhowException(dynamic raw); @@ -36,16 +38,25 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { ImageCompress dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress( dynamic raw); + @protected + Kmp dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(dynamic raw); + @protected DynamicImage dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( dynamic raw); + @protected + Map dco_decode_Map_String_String(dynamic raw); + @protected DynamicImage dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage(dynamic raw); @protected ImageCompress dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress(dynamic raw); + @protected + Kmp dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(dynamic raw); + @protected String dco_decode_String(dynamic raw); @@ -67,6 +78,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); + @protected + Uint64List dco_decode_list_prim_usize_strict(dynamic raw); + + @protected + List<(String, String)> dco_decode_list_record_string_string(dynamic raw); + @protected CompressFormat? dco_decode_opt_box_autoadd_compress_format(dynamic raw); @@ -76,12 +93,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected int? dco_decode_opt_box_autoadd_u_8(dynamic raw); + @protected + (String, String) dco_decode_record_string_string(dynamic raw); + @protected int dco_decode_u_32(dynamic raw); @protected int dco_decode_u_8(dynamic raw); + @protected + void dco_decode_unit(dynamic raw); + @protected BigInt dco_decode_usize(dynamic raw); @@ -92,10 +115,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { ImageCompress sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress( SseDeserializer deserializer); + @protected + Kmp sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + SseDeserializer deserializer); + @protected DynamicImage sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( SseDeserializer deserializer); + @protected + Map sse_decode_Map_String_String(SseDeserializer deserializer); + @protected DynamicImage sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( SseDeserializer deserializer); @@ -104,6 +134,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { ImageCompress sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress( SseDeserializer deserializer); + @protected + Kmp sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(SseDeserializer deserializer); + @protected String sse_decode_String(SseDeserializer deserializer); @@ -125,6 +158,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); + @protected + Uint64List sse_decode_list_prim_usize_strict(SseDeserializer deserializer); + + @protected + List<(String, String)> sse_decode_list_record_string_string(SseDeserializer deserializer); + @protected CompressFormat? sse_decode_opt_box_autoadd_compress_format(SseDeserializer deserializer); @@ -134,12 +173,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected int? sse_decode_opt_box_autoadd_u_8(SseDeserializer deserializer); + @protected + (String, String) sse_decode_record_string_string(SseDeserializer deserializer); + @protected int sse_decode_u_32(SseDeserializer deserializer); @protected int sse_decode_u_8(SseDeserializer deserializer); + @protected + void sse_decode_unit(SseDeserializer deserializer); + @protected BigInt sse_decode_usize(SseDeserializer deserializer); @@ -153,10 +198,17 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { void sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress( ImageCompress self, SseSerializer serializer); + @protected + void sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + Kmp self, SseSerializer serializer); + @protected void sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( DynamicImage self, SseSerializer serializer); + @protected + void sse_encode_Map_String_String(Map self, SseSerializer serializer); + @protected void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( DynamicImage self, SseSerializer serializer); @@ -165,6 +217,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress( ImageCompress self, SseSerializer serializer); + @protected + void sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(Kmp self, SseSerializer serializer); + @protected void sse_encode_String(String self, SseSerializer serializer); @@ -186,6 +241,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_list_prim_u_8_strict(Uint8List self, SseSerializer serializer); + @protected + void sse_encode_list_prim_usize_strict(Uint64List self, SseSerializer serializer); + + @protected + void sse_encode_list_record_string_string(List<(String, String)> self, SseSerializer serializer); + @protected void sse_encode_opt_box_autoadd_compress_format(CompressFormat? self, SseSerializer serializer); @@ -195,12 +256,18 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_opt_box_autoadd_u_8(int? self, SseSerializer serializer); + @protected + void sse_encode_record_string_string((String, String) self, SseSerializer serializer); + @protected void sse_encode_u_32(int self, SseSerializer serializer); @protected void sse_encode_u_8(int self, SseSerializer serializer); + @protected + void sse_encode_unit(void self, SseSerializer serializer); + @protected void sse_encode_usize(BigInt self, SseSerializer serializer); @@ -236,6 +303,12 @@ class RustLibWire implements BaseWire { wasmModule .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress( ptr); + + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(int ptr) => + wasmModule.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(ptr); + + void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(int ptr) => + wasmModule.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp(ptr); } @JS('wasm_bindgen') @@ -259,4 +332,10 @@ extension type RustLibWasmModule._(JSObject _) implements JSObject { external void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerImageCompress( int ptr); + + external void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + int ptr); + + external void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + int ptr); } diff --git a/rust/src/api/compress.rs b/rust/src/api/compress.rs index 54794a5..8acc5ae 100644 --- a/rust/src/api/compress.rs +++ b/rust/src/api/compress.rs @@ -3,6 +3,7 @@ use std::io::BufWriter; use anyhow::Result; use fast_image_resize::images::Image; use fast_image_resize::{IntoImageView, Resizer}; + use flutter_rust_bridge::frb; use image::{ codecs::{ diff --git a/rust/src/api/kmp.rs b/rust/src/api/kmp.rs new file mode 100644 index 0000000..a66d9a0 --- /dev/null +++ b/rust/src/api/kmp.rs @@ -0,0 +1,84 @@ +use flutter_rust_bridge::frb; +use std::collections::HashMap; + +pub fn build_prefix_table(pattern: &str) -> Vec { + let m = pattern.len(); + let mut prefix_table = vec![0; m]; + let mut j = 0; + + for i in 1..m { + while j > 0 && pattern.chars().nth(i) != pattern.chars().nth(j) { + j = prefix_table[j - 1]; + } + if pattern.chars().nth(i) == pattern.chars().nth(j) { + j += 1; + } + prefix_table[i] = j; + } + + prefix_table +} + +pub fn kmp_search(text: &str, pattern: &str) -> Vec { + let m = pattern.len(); + let prefix_table = build_prefix_table(pattern); + let mut matches = Vec::new(); + let mut j = 0; + + for (i, c) in text.chars().enumerate() { + while j > 0 && Some(c) != pattern.chars().nth(j) { + j = prefix_table[j - 1]; + } + if Some(c) == pattern.chars().nth(j) { + j += 1; + } + if j == m { + matches.push(i + 1 - m); // 添加匹配的起始索引 + j = prefix_table[j - 1]; + } + } + + matches +} + +#[frb(opaque)] +pub struct Kmp; + +impl Kmp { + pub fn replace_with_kmp(text: String, replacements: HashMap) -> String { + if replacements.is_empty() { + return text; + } + + let mut match_entries: HashMap = HashMap::new(); + + for (pattern, replacement) in &replacements { + let matches = kmp_search(&text, pattern); + for &index in &matches { + if !match_entries.contains_key(&index) + || match_entries[&index].0.len() < pattern.len() + { + // 确保在相同索引位置,优先使用较长的模式 + match_entries.insert(index, (pattern, replacement)); + } + } + } + + let mut result = String::new(); + let mut last_index = 0; + + let mut match_entries: Vec<_> = match_entries.into_iter().collect(); + match_entries.sort_by_key(|&(index, _)| index); + + for (index, (pattern, replacement)) in match_entries { + if index >= last_index { + result.push_str(&text[last_index..index]); + result.push_str(replacement); + last_index = index + pattern.len(); + } + } + + result.push_str(&text[last_index..]); + result + } +} diff --git a/rust/src/api/mod.rs b/rust/src/api/mod.rs index 93b4567..883b255 100644 --- a/rust/src/api/mod.rs +++ b/rust/src/api/mod.rs @@ -1,2 +1,3 @@ pub mod compress; -pub mod constants; \ No newline at end of file +pub mod constants; +pub mod kmp; \ No newline at end of file diff --git a/rust/src/frb_generated.rs b/rust/src/frb_generated.rs index e16dfb4..a5d87c0 100644 --- a/rust/src/frb_generated.rs +++ b/rust/src/frb_generated.rs @@ -26,6 +26,7 @@ // Section: imports use crate::api::compress::*; +use crate::api::kmp::*; use flutter_rust_bridge::for_generated::byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt}; use flutter_rust_bridge::for_generated::{transform_result_dco, Lifetimeable, Lockable}; use flutter_rust_bridge::{Handler, IntoIntoDart}; @@ -38,7 +39,7 @@ flutter_rust_bridge::frb_generated_boilerplate!( default_rust_auto_opaque = RustAutoOpaqueMoi, ); pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.6.0"; -pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 1782633232; +pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -914742464; // Section: executor @@ -92,6 +93,78 @@ fn wire__crate__api__compress__ImageCompress_contain_impl( }, ) } +fn wire__crate__api__kmp__Kmp_replace_with_kmp_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "Kmp_replace_with_kmp", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_text = ::sse_decode(&mut deserializer); + let api_replacements = + >::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, ()>((move || { + let output_ok = Result::<_, ()>::Ok(crate::api::kmp::Kmp::replace_with_kmp( + api_text, + api_replacements, + ))?; + Ok(output_ok) + })()) + } + }, + ) +} +fn wire__crate__api__kmp__build_prefix_table_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "build_prefix_table", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_pattern = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, ()>((move || { + let output_ok = + Result::<_, ()>::Ok(crate::api::kmp::build_prefix_table(&api_pattern))?; + Ok(output_ok) + })()) + } + }, + ) +} fn wire__crate__api__compress__compress_impl( port_: flutter_rust_bridge::for_generated::MessagePort, ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, @@ -154,6 +227,41 @@ fn wire__crate__api__compress__compress_impl( }, ) } +fn wire__crate__api__kmp__kmp_search_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "kmp_search", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_text = ::sse_decode(&mut deserializer); + let api_pattern = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, ()>((move || { + let output_ok = + Result::<_, ()>::Ok(crate::api::kmp::kmp_search(&api_text, &api_pattern))?; + Ok(output_ok) + })()) + } + }, + ) +} // Section: related_funcs @@ -163,6 +271,9 @@ flutter_rust_bridge::frb_generated_moi_arc_impl_value!( flutter_rust_bridge::frb_generated_moi_arc_impl_value!( flutter_rust_bridge::for_generated::RustAutoOpaqueInner ); +flutter_rust_bridge::frb_generated_moi_arc_impl_value!( + flutter_rust_bridge::for_generated::RustAutoOpaqueInner +); // Section: dart2rust @@ -184,6 +295,22 @@ impl SseDecode for ImageCompress { } } +impl SseDecode for Kmp { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = >>::sse_decode(deserializer); + return flutter_rust_bridge::for_generated::rust_auto_opaque_decode_owned(inner); + } +} + +impl SseDecode for std::collections::HashMap { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = >::sse_decode(deserializer); + return inner.into_iter().collect(); + } +} + impl SseDecode for RustOpaqueMoi> { @@ -204,6 +331,14 @@ impl SseDecode } } +impl SseDecode for RustOpaqueMoi> { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = ::sse_decode(deserializer); + return decode_rust_opaque_moi(inner); + } +} + impl SseDecode for String { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -244,6 +379,30 @@ impl SseDecode for Vec { } } +impl SseDecode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut len_ = ::sse_decode(deserializer); + let mut ans_ = vec![]; + for idx_ in 0..len_ { + ans_.push(::sse_decode(deserializer)); + } + return ans_; + } +} + +impl SseDecode for Vec<(String, String)> { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut len_ = ::sse_decode(deserializer); + let mut ans_ = vec![]; + for idx_ in 0..len_ { + ans_.push(<(String, String)>::sse_decode(deserializer)); + } + return ans_; + } +} + impl SseDecode for Option { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -279,6 +438,15 @@ impl SseDecode for Option { } } +impl SseDecode for (String, String) { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_field0 = ::sse_decode(deserializer); + let mut var_field1 = ::sse_decode(deserializer); + return (var_field0, var_field1); + } +} + impl SseDecode for u32 { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -293,6 +461,11 @@ impl SseDecode for u8 { } } +impl SseDecode for () { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {} +} + impl SseDecode for usize { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -322,7 +495,10 @@ fn pde_ffi_dispatcher_primary_impl( rust_vec_len, data_len, ), - 2 => wire__crate__api__compress__compress_impl(port, ptr, rust_vec_len, data_len), + 2 => wire__crate__api__kmp__Kmp_replace_with_kmp_impl(port, ptr, rust_vec_len, data_len), + 3 => wire__crate__api__kmp__build_prefix_table_impl(port, ptr, rust_vec_len, data_len), + 4 => wire__crate__api__compress__compress_impl(port, ptr, rust_vec_len, data_len), + 5 => wire__crate__api__kmp__kmp_search_impl(port, ptr, rust_vec_len, data_len), _ => unreachable!(), } } @@ -356,6 +532,21 @@ impl flutter_rust_bridge::IntoIntoDart> for ImageCompr } } +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for FrbWrapper { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self.0) + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for FrbWrapper {} + +impl flutter_rust_bridge::IntoIntoDart> for Kmp { + fn into_into_dart(self) -> FrbWrapper { + self.into() + } +} + // Codec=Dco (DartCObject based), see doc to use other codecs impl flutter_rust_bridge::IntoDart for crate::api::constants::CompressFormat { fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { @@ -393,6 +584,23 @@ impl SseEncode for ImageCompress { } } +impl SseEncode for Kmp { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + >>::sse_encode( + flutter_rust_bridge::for_generated::rust_auto_opaque_encode::<_, MoiArc<_>>(self), + serializer, + ); + } +} + +impl SseEncode for std::collections::HashMap { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + >::sse_encode(self.into_iter().collect(), serializer); + } +} + impl SseEncode for RustOpaqueMoi> { @@ -415,6 +623,15 @@ impl SseEncode } } +impl SseEncode for RustOpaqueMoi> { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + let (ptr, size) = self.sse_encode_raw(); + ::sse_encode(ptr, serializer); + ::sse_encode(size, serializer); + } +} + impl SseEncode for String { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -456,6 +673,26 @@ impl SseEncode for Vec { } } +impl SseEncode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.len() as _, serializer); + for item in self { + ::sse_encode(item, serializer); + } + } +} + +impl SseEncode for Vec<(String, String)> { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.len() as _, serializer); + for item in self { + <(String, String)>::sse_encode(item, serializer); + } + } +} + impl SseEncode for Option { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -486,6 +723,14 @@ impl SseEncode for Option { } } +impl SseEncode for (String, String) { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.0, serializer); + ::sse_encode(self.1, serializer); + } +} + impl SseEncode for u32 { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -500,6 +745,11 @@ impl SseEncode for u8 { } } +impl SseEncode for () { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {} +} + impl SseEncode for usize { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -526,6 +776,7 @@ mod io { use super::*; use crate::api::compress::*; + use crate::api::kmp::*; use flutter_rust_bridge::for_generated::byteorder::{ NativeEndian, ReadBytesExt, WriteBytesExt, }; @@ -563,6 +814,20 @@ mod io { ) { MoiArc::>::decrement_strong_count(ptr as _); } + + #[no_mangle] + pub extern "C" fn frbgen_mood_diary_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::increment_strong_count(ptr as _); + } + + #[no_mangle] + pub extern "C" fn frbgen_mood_diary_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::decrement_strong_count(ptr as _); + } } use image::DynamicImage; #[cfg(not(target_family = "wasm"))] @@ -578,6 +843,7 @@ mod web { use super::*; use crate::api::compress::*; + use crate::api::kmp::*; use flutter_rust_bridge::for_generated::byteorder::{ NativeEndian, ReadBytesExt, WriteBytesExt, }; @@ -617,6 +883,20 @@ mod web { ) { MoiArc::>::decrement_strong_count(ptr as _); } + + #[wasm_bindgen] + pub fn rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::increment_strong_count(ptr as _); + } + + #[wasm_bindgen] + pub fn rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerKmp( + ptr: *const std::ffi::c_void, + ) { + MoiArc::>::decrement_strong_count(ptr as _); + } } #[cfg(target_family = "wasm")] pub use web::*; From 820586bcdf9e0440a3f9936b279704eebb48d09e Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Wed, 27 Nov 2024 23:59:21 +0800 Subject: [PATCH 03/20] feat(webdav): init webdav util --- lib/utils/webdav_util.dart | 135 +++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 lib/utils/webdav_util.dart diff --git a/lib/utils/webdav_util.dart b/lib/utils/webdav_util.dart new file mode 100644 index 0000000..6840909 --- /dev/null +++ b/lib/utils/webdav_util.dart @@ -0,0 +1,135 @@ +import 'dart:convert'; + +import 'package:dio/dio.dart'; +import 'package:http_status_code/http_status_code.dart'; +import 'package:mood_diary/utils/utils.dart'; + +class WebDavException implements Exception { + final String message; + final dynamic cause; + final StackTrace? stackTrace; + + WebDavException(this.message, {this.cause, this.stackTrace}); + + @override + String toString() { + return 'WebDavException: $message, Cause: $cause'; + } +} + +class WebDavUtil { + late String baseUrl; + late String username; + late String password; + late final Dio _dio; + + WebDavUtil() { + var webDavOptions = Utils().prefUtil.getValue>('webDavOption'); + if (webDavOptions == null || webDavOptions.isEmpty) { + throw WebDavException("WebDAV options not configured"); + } + baseUrl = webDavOptions[0]; + username = webDavOptions[1]; + password = webDavOptions[2]; + _dio = Dio(BaseOptions( + baseUrl: baseUrl, + headers: { + 'Authorization': 'Basic ${base64Encode(utf8.encode('$username:$password'))}', + }, + followRedirects: false, + )); + } + + Future _safeExecute(Future Function() operation, String action) async { + try { + return await operation(); + } catch (e, stack) { + throw WebDavException('Error during $action', cause: e, stackTrace: stack); + } + } + + Future uploadFile(String remotePath, String localPath) async { + await _safeExecute(() async { + final file = await MultipartFile.fromFile(localPath); + final formData = FormData.fromMap({'file': file}); + final response = await _dio.put(remotePath, data: formData); + if (response.statusCode != StatusCode.CREATED && response.statusCode != StatusCode.NO_CONTENT) { + throw Exception('Upload failed with status code: ${response.statusCode}'); + } + }, 'uploadFile'); + } + + Future downloadFile(String remotePath, String localPath) async { + await _safeExecute(() async { + final response = await _dio.download(remotePath, localPath); + if (response.statusCode != StatusCode.OK) { + throw Exception('Download failed with status code: ${response.statusCode}'); + } + }, 'downloadFile'); + } + + Future> listDirectory(String remotePath) async { + return await _safeExecute(() async { + final response = await _dio.request( + remotePath, + options: Options(method: 'PROPFIND', headers: {'Depth': '1'}), + ); + if (response.statusCode == StatusCode.MULTI_STATUS) { + return _parsePropFindResponse(response.data.toString()); + } else { + throw Exception('Directory listing failed with status code: ${response.statusCode}'); + } + }, 'listDirectory'); + } + + Future deleteFile(String remotePath) async { + await _safeExecute(() async { + final response = await _dio.delete(remotePath); + if (response.statusCode != StatusCode.NO_CONTENT) { + throw Exception('Deletion failed with status code: ${response.statusCode}'); + } + }, 'deleteFile'); + } + + Future createDirectory(String remotePath) async { + await _safeExecute(() async { + final response = await _dio.request( + remotePath, + options: Options(method: 'MKCOL'), + ); + if (response.statusCode != StatusCode.CREATED) { + throw Exception('Directory creation failed with status code: ${response.statusCode}'); + } + }, 'createDirectory'); + } + + Future exists(String remotePath) async { + return await _safeExecute(() async { + try { + final response = await _dio.request( + remotePath, + options: Options(method: 'HEAD'), + ); + return response.statusCode == StatusCode.OK; + } on DioException catch (e) { + if (e.response?.statusCode == StatusCode.NOT_FOUND) { + return false; + } + rethrow; + } + }, 'exists'); + } + + List _parsePropFindResponse(String xmlResponse) { + final items = []; + final regex = RegExp(r'(.*?)<\/D:href>'); + final matches = regex.allMatches(xmlResponse); + for (var match in matches) { + final href = match.group(1); + if (href != null) { + items.add(Uri.decodeFull(href)); + } + } + return items; + } +} From 64d81d198ba322a9728802bfda8cdadcd290b16b Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Thu, 28 Nov 2024 23:51:16 +0800 Subject: [PATCH 04/20] build(rust): update dependencies --- lib/src/rust/api/compress.dart | 7 ++----- lib/src/rust/frb_generated.dart | 14 ++++---------- rust/Cargo.lock | 12 ++++++------ rust/Cargo.toml | 4 ++-- 4 files changed, 14 insertions(+), 23 deletions(-) diff --git a/lib/src/rust/api/compress.dart b/lib/src/rust/api/compress.dart index d2a8e86..52c1d3c 100644 --- a/lib/src/rust/api/compress.dart +++ b/lib/src/rust/api/compress.dart @@ -23,11 +23,8 @@ abstract class DynamicImage implements RustOpaqueInterface {} // Rust type: RustOpaqueMoi> abstract class ImageCompress implements RustOpaqueInterface { - static Future contain({required String filePath, - CompressFormat? compressFormat, - int? maxWidth, - int? maxHeight, - int? quality}) => + static Future contain( + {required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}) => RustLib.instance.api.crateApiCompressImageCompressContain( filePath: filePath, compressFormat: compressFormat, diff --git a/lib/src/rust/frb_generated.dart b/lib/src/rust/frb_generated.dart index 82afd5d..28ae6d1 100644 --- a/lib/src/rust/frb_generated.dart +++ b/lib/src/rust/frb_generated.dart @@ -74,11 +74,8 @@ class RustLib extends BaseEntrypoint { } abstract class RustLibApi extends BaseApi { - Future crateApiCompressImageCompressContain({required String filePath, - CompressFormat? compressFormat, - int? maxWidth, - int? maxHeight, - int? quality}); + Future crateApiCompressImageCompressContain( + {required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}); Future crateApiKmpKmpReplaceWithKmp({required String text, required Map replacements}); @@ -121,11 +118,8 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { }); @override - Future crateApiCompressImageCompressContain({required String filePath, - CompressFormat? compressFormat, - int? maxWidth, - int? maxHeight, - int? quality}) { + Future crateApiCompressImageCompressContain( + {required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}) { return handler.executeNormal(NormalTask( callFfi: (port_) { final serializer = SseSerializer(generalizedFrbRustBinding); diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 335448b..247b0cd 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -977,9 +977,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.70" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -1020,9 +1020,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quote" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -1240,9 +1240,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.39" +version = "2.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" dependencies = [ "proc-macro2", "quote", diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 4918728..afcabff 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -8,7 +8,7 @@ crate-type = ["cdylib", "staticlib"] [dependencies] flutter_rust_bridge = "=2.6.0" -image = "0.25.2" +image = "0.25.5" fast_image_resize = { version = "5.0.0", features = ["image"] } anyhow = "1.0.93" -bytemuck = "1.16.3" \ No newline at end of file +bytemuck = "1.16.3" From ffa5bcaf4e4a3129177c304ad326294f84de70fb Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Sun, 1 Dec 2024 02:30:47 +0800 Subject: [PATCH 05/20] chore(git): add attributes --- .gitattributes | 1 + .../main/kotlin/cn/yooss/util/DatabaseUtil.kt | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 server/src/main/kotlin/cn/yooss/util/DatabaseUtil.kt diff --git a/.gitattributes b/.gitattributes index 7d63010..a2b8357 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,2 @@ *.tflite filter=lfs diff=lfs merge=lfs -text +* text=auto eol=lf diff --git a/server/src/main/kotlin/cn/yooss/util/DatabaseUtil.kt b/server/src/main/kotlin/cn/yooss/util/DatabaseUtil.kt new file mode 100644 index 0000000..2e9e65d --- /dev/null +++ b/server/src/main/kotlin/cn/yooss/util/DatabaseUtil.kt @@ -0,0 +1,44 @@ +package cn.yooss.util + +/* + * Author: ZhuJHua + * Date: 2024/11/25 22:08 + * Description: Database + */ + +import com.mongodb.ConnectionString +import com.mongodb.MongoClientSettings +import com.mongodb.ServerApi +import com.mongodb.ServerApiVersion +import com.mongodb.kotlin.client.coroutine.MongoClient +import kotlinx.coroutines.runBlocking +import org.bson.Document + + +object MongoClientConnectionExample { + + fun main() { + // Replace the placeholders with your credentials and hostname + val connectionString = + "" + + val serverApi = ServerApi.builder() + .version(ServerApiVersion.V1) + .build() + + val mongoClientSettings = MongoClientSettings.builder() + .applyConnectionString(ConnectionString(connectionString)) + .serverApi(serverApi) + .build() + + // Create a new client and connect to the server + MongoClient.create(mongoClientSettings).use { mongoClient -> + val database = mongoClient.getDatabase("admin") + runBlocking { + database.runCommand(Document("ping", 1)) + } + println("Pinged your deployment. You successfully connected to MongoDB!") + } + } + +} From f7b19c043f2ec8c3b68ea78bc16e5ef9a130ad26 Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Sun, 1 Dec 2024 02:31:33 +0800 Subject: [PATCH 06/20] feat(server): init server --- server/build.gradle.kts | 3 +++ server/gradle.properties | 1 + server/src/main/kotlin/cn/yooss/Frameworks.kt | 6 +----- server/src/main/kotlin/cn/yooss/HelloService.kt | 5 ----- server/src/test/kotlin/cn/yooss/ApplicationTest.kt | 10 ++-------- 5 files changed, 7 insertions(+), 18 deletions(-) delete mode 100644 server/src/main/kotlin/cn/yooss/HelloService.kt diff --git a/server/build.gradle.kts b/server/build.gradle.kts index 8603523..0036cf5 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -1,6 +1,7 @@ val koin_version: String by project val kotlin_version: String by project val logback_version: String by project +val mongodb_version: String by project plugins { kotlin("jvm") version "2.0.21" @@ -34,6 +35,8 @@ dependencies { implementation("io.ktor:ktor-server-netty-jvm") implementation("ch.qos.logback:logback-classic:$logback_version") implementation("io.ktor:ktor-server-config-yaml-jvm") + implementation("org.mongodb:mongodb-driver-kotlin-coroutine:$mongodb_version") testImplementation("io.ktor:ktor-server-test-host-jvm") testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version") + } diff --git a/server/gradle.properties b/server/gradle.properties index dd47831..0b46d18 100644 --- a/server/gradle.properties +++ b/server/gradle.properties @@ -3,3 +3,4 @@ koin_version=3.5.6 kotlin_version=2.0.21 ktor_version=3.0.1 logback_version=1.4.14 +mongodb_version=5.2.0 \ No newline at end of file diff --git a/server/src/main/kotlin/cn/yooss/Frameworks.kt b/server/src/main/kotlin/cn/yooss/Frameworks.kt index ec59b4d..6146308 100644 --- a/server/src/main/kotlin/cn/yooss/Frameworks.kt +++ b/server/src/main/kotlin/cn/yooss/Frameworks.kt @@ -9,11 +9,7 @@ fun Application.configureFrameworks() { install(Koin) { slf4jLogger() modules(module { - single { - HelloService { - println(environment.log.info("Hello, World!")) - } - } + }) } } diff --git a/server/src/main/kotlin/cn/yooss/HelloService.kt b/server/src/main/kotlin/cn/yooss/HelloService.kt deleted file mode 100644 index 772c01d..0000000 --- a/server/src/main/kotlin/cn/yooss/HelloService.kt +++ /dev/null @@ -1,5 +0,0 @@ -package cn.yooss - -fun interface HelloService { - fun sayHello() -} diff --git a/server/src/test/kotlin/cn/yooss/ApplicationTest.kt b/server/src/test/kotlin/cn/yooss/ApplicationTest.kt index 45f80ab..98ae731 100644 --- a/server/src/test/kotlin/cn/yooss/ApplicationTest.kt +++ b/server/src/test/kotlin/cn/yooss/ApplicationTest.kt @@ -1,10 +1,7 @@ package cn.yooss -import io.ktor.client.request.* -import io.ktor.client.statement.* -import io.ktor.http.* import io.ktor.server.testing.* -import kotlin.test.* +import kotlin.test.Test class ApplicationTest { @Test @@ -12,9 +9,6 @@ class ApplicationTest { application { configureRouting() } - client.get("/").apply { - assertEquals(HttpStatusCode.OK, status) - assertEquals("Hello World!", bodyAsText()) - } + } } From 00e7c3a9664c2032fd176dada0e005c2a66a4bd9 Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Sun, 1 Dec 2024 02:32:40 +0800 Subject: [PATCH 07/20] build(rust): generated rust builder --- lib/src/rust/api/compress.dart | 7 ++- lib/src/rust/api/kmp.dart | 3 ++ lib/src/rust/frb_generated.dart | 77 +++++++++++++++++++++++++---- lib/src/rust/frb_generated.io.dart | 9 ++++ lib/src/rust/frb_generated.web.dart | 9 ++++ rust/src/api/kmp.rs | 14 +++++- rust/src/frb_generated.rs | 70 ++++++++++++++++++++++++-- 7 files changed, 172 insertions(+), 17 deletions(-) diff --git a/lib/src/rust/api/compress.dart b/lib/src/rust/api/compress.dart index 52c1d3c..d2a8e86 100644 --- a/lib/src/rust/api/compress.dart +++ b/lib/src/rust/api/compress.dart @@ -23,8 +23,11 @@ abstract class DynamicImage implements RustOpaqueInterface {} // Rust type: RustOpaqueMoi> abstract class ImageCompress implements RustOpaqueInterface { - static Future contain( - {required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}) => + static Future contain({required String filePath, + CompressFormat? compressFormat, + int? maxWidth, + int? maxHeight, + int? quality}) => RustLib.instance.api.crateApiCompressImageCompressContain( filePath: filePath, compressFormat: compressFormat, diff --git a/lib/src/rust/api/kmp.dart b/lib/src/rust/api/kmp.dart index 37f1b38..a0afa6f 100644 --- a/lib/src/rust/api/kmp.dart +++ b/lib/src/rust/api/kmp.dart @@ -14,6 +14,9 @@ Future kmpSearch({required String text, required String pattern}) => // Rust type: RustOpaqueMoi> abstract class Kmp implements RustOpaqueInterface { + static Future> findMatches({required String text, required List patterns}) => + RustLib.instance.api.crateApiKmpKmpFindMatches(text: text, patterns: patterns); + static Future replaceWithKmp({required String text, required Map replacements}) => RustLib.instance.api.crateApiKmpKmpReplaceWithKmp(text: text, replacements: replacements); } diff --git a/lib/src/rust/frb_generated.dart b/lib/src/rust/frb_generated.dart index 28ae6d1..64f0bd2 100644 --- a/lib/src/rust/frb_generated.dart +++ b/lib/src/rust/frb_generated.dart @@ -64,7 +64,7 @@ class RustLib extends BaseEntrypoint { String get codegenVersion => '2.6.0'; @override - int get rustContentHash => -914742464; + int get rustContentHash => 444186734; static const kDefaultExternalLibraryLoaderConfig = ExternalLibraryLoaderConfig( stem: 'rust_lib_mood_diary', @@ -74,8 +74,13 @@ class RustLib extends BaseEntrypoint { } abstract class RustLibApi extends BaseApi { - Future crateApiCompressImageCompressContain( - {required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}); + Future crateApiCompressImageCompressContain({required String filePath, + CompressFormat? compressFormat, + int? maxWidth, + int? maxHeight, + int? quality}); + + Future> crateApiKmpKmpFindMatches({required String text, required List patterns}); Future crateApiKmpKmpReplaceWithKmp({required String text, required Map replacements}); @@ -118,8 +123,11 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { }); @override - Future crateApiCompressImageCompressContain( - {required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}) { + Future crateApiCompressImageCompressContain({required String filePath, + CompressFormat? compressFormat, + int? maxWidth, + int? maxHeight, + int? quality}) { return handler.executeNormal(NormalTask( callFfi: (port_) { final serializer = SseSerializer(generalizedFrbRustBinding); @@ -145,6 +153,30 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { argNames: ["filePath", "compressFormat", "maxWidth", "maxHeight", "quality"], ); + @override + Future> crateApiKmpKmpFindMatches({required String text, required List patterns}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_String(text, serializer); + sse_encode_list_String(patterns, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 2, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_list_String, + decodeErrorData: null, + ), + constMeta: kCrateApiKmpKmpFindMatchesConstMeta, + argValues: [text, patterns], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiKmpKmpFindMatchesConstMeta => const TaskConstMeta( + debugName: "Kmp_find_matches", + argNames: ["text", "patterns"], + ); + @override Future crateApiKmpKmpReplaceWithKmp({required String text, required Map replacements}) { return handler.executeNormal(NormalTask( @@ -152,7 +184,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { final serializer = SseSerializer(generalizedFrbRustBinding); sse_encode_String(text, serializer); sse_encode_Map_String_String(replacements, serializer); - pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 2, port: port_); + pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 3, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_String, @@ -175,7 +207,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { callFfi: (port_) { final serializer = SseSerializer(generalizedFrbRustBinding); sse_encode_String(pattern, serializer); - pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 3, port: port_); + pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 4, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_list_prim_usize_strict, @@ -207,7 +239,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_u_32(dstWidth, serializer); sse_encode_compress_format(compressFormat, serializer); sse_encode_u_8(quality, serializer); - pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 4, port: port_); + pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 5, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_list_prim_u_8_strict, @@ -231,7 +263,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { final serializer = SseSerializer(generalizedFrbRustBinding); sse_encode_String(text, serializer); sse_encode_String(pattern, serializer); - pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 5, port: port_); + pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 6, port: port_); }, codec: SseCodec( decodeSuccessData: sse_decode_list_prim_usize_strict, @@ -352,6 +384,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return raw as int; } + @protected + List dco_decode_list_String(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return (raw as List).map(dco_decode_String).toList(); + } + @protected Uint8List dco_decode_list_prim_u_8_strict(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -518,6 +556,18 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return deserializer.buffer.getInt32(); } + @protected + List sse_decode_list_String(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var len_ = sse_decode_i_32(deserializer); + var ans_ = []; + for (var idx_ = 0; idx_ < len_; ++idx_) { + ans_.add(sse_decode_String(deserializer)); + } + return ans_; + } + @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -704,6 +754,15 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { serializer.buffer.putInt32(self); } + @protected + void sse_encode_list_String(List self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_i_32(self.length, serializer); + for (final item in self) { + sse_encode_String(item, serializer); + } + } + @protected void sse_encode_list_prim_u_8_strict(Uint8List self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs diff --git a/lib/src/rust/frb_generated.io.dart b/lib/src/rust/frb_generated.io.dart index 93bdca2..2077bf1 100644 --- a/lib/src/rust/frb_generated.io.dart +++ b/lib/src/rust/frb_generated.io.dart @@ -73,6 +73,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected int dco_decode_i_32(dynamic raw); + @protected + List dco_decode_list_String(dynamic raw); + @protected Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); @@ -153,6 +156,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected int sse_decode_i_32(SseDeserializer deserializer); + @protected + List sse_decode_list_String(SseDeserializer deserializer); + @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); @@ -236,6 +242,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_i_32(int self, SseSerializer serializer); + @protected + void sse_encode_list_String(List self, SseSerializer serializer); + @protected void sse_encode_list_prim_u_8_strict(Uint8List self, SseSerializer serializer); diff --git a/lib/src/rust/frb_generated.web.dart b/lib/src/rust/frb_generated.web.dart index 6c6fe47..3e82edc 100644 --- a/lib/src/rust/frb_generated.web.dart +++ b/lib/src/rust/frb_generated.web.dart @@ -75,6 +75,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected int dco_decode_i_32(dynamic raw); + @protected + List dco_decode_list_String(dynamic raw); + @protected Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); @@ -155,6 +158,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected int sse_decode_i_32(SseDeserializer deserializer); + @protected + List sse_decode_list_String(SseDeserializer deserializer); + @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); @@ -238,6 +244,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_i_32(int self, SseSerializer serializer); + @protected + void sse_encode_list_String(List self, SseSerializer serializer); + @protected void sse_encode_list_prim_u_8_strict(Uint8List self, SseSerializer serializer); diff --git a/rust/src/api/kmp.rs b/rust/src/api/kmp.rs index a66d9a0..a99b3a7 100644 --- a/rust/src/api/kmp.rs +++ b/rust/src/api/kmp.rs @@ -33,7 +33,7 @@ pub fn kmp_search(text: &str, pattern: &str) -> Vec { j += 1; } if j == m { - matches.push(i + 1 - m); // 添加匹配的起始索引 + matches.push(i + 1 - m); j = prefix_table[j - 1]; } } @@ -81,4 +81,16 @@ impl Kmp { result.push_str(&text[last_index..]); result } + + pub fn find_matches(text: &str, patterns: Vec) -> Vec { + let mut matched_patterns = Vec::new(); + + for pattern in &patterns { + if !kmp_search(text, pattern).is_empty() { + matched_patterns.push(pattern.clone()); + } + } + + matched_patterns + } } diff --git a/rust/src/frb_generated.rs b/rust/src/frb_generated.rs index a5d87c0..1a010f1 100644 --- a/rust/src/frb_generated.rs +++ b/rust/src/frb_generated.rs @@ -39,7 +39,7 @@ flutter_rust_bridge::frb_generated_boilerplate!( default_rust_auto_opaque = RustAutoOpaqueMoi, ); pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.6.0"; -pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -914742464; +pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 444186734; // Section: executor @@ -93,6 +93,43 @@ fn wire__crate__api__compress__ImageCompress_contain_impl( }, ) } +fn wire__crate__api__kmp__Kmp_find_matches_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "Kmp_find_matches", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_text = ::sse_decode(&mut deserializer); + let api_patterns = >::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, ()>((move || { + let output_ok = Result::<_, ()>::Ok(crate::api::kmp::Kmp::find_matches( + &api_text, + api_patterns, + ))?; + Ok(output_ok) + })()) + } + }, + ) +} fn wire__crate__api__kmp__Kmp_replace_with_kmp_impl( port_: flutter_rust_bridge::for_generated::MessagePort, ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, @@ -367,6 +404,18 @@ impl SseDecode for i32 { } } +impl SseDecode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut len_ = ::sse_decode(deserializer); + let mut ans_ = vec![]; + for idx_ in 0..len_ { + ans_.push(::sse_decode(deserializer)); + } + return ans_; + } +} + impl SseDecode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -495,10 +544,11 @@ fn pde_ffi_dispatcher_primary_impl( rust_vec_len, data_len, ), - 2 => wire__crate__api__kmp__Kmp_replace_with_kmp_impl(port, ptr, rust_vec_len, data_len), - 3 => wire__crate__api__kmp__build_prefix_table_impl(port, ptr, rust_vec_len, data_len), - 4 => wire__crate__api__compress__compress_impl(port, ptr, rust_vec_len, data_len), - 5 => wire__crate__api__kmp__kmp_search_impl(port, ptr, rust_vec_len, data_len), + 2 => wire__crate__api__kmp__Kmp_find_matches_impl(port, ptr, rust_vec_len, data_len), + 3 => wire__crate__api__kmp__Kmp_replace_with_kmp_impl(port, ptr, rust_vec_len, data_len), + 4 => wire__crate__api__kmp__build_prefix_table_impl(port, ptr, rust_vec_len, data_len), + 5 => wire__crate__api__compress__compress_impl(port, ptr, rust_vec_len, data_len), + 6 => wire__crate__api__kmp__kmp_search_impl(port, ptr, rust_vec_len, data_len), _ => unreachable!(), } } @@ -663,6 +713,16 @@ impl SseEncode for i32 { } } +impl SseEncode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.len() as _, serializer); + for item in self { + ::sse_encode(item, serializer); + } + } +} + impl SseEncode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { From 163d030cabdc9ca8a21c6fdecf97df4bceb46a09 Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Sun, 1 Dec 2024 07:51:33 +0800 Subject: [PATCH 08/20] fix(rust): fix string error in kmp --- lib/src/rust/api/compress.dart | 7 +-- lib/src/rust/api/kmp.dart | 2 +- lib/src/rust/frb_generated.dart | 66 +++++++++++++++++++++++------ lib/src/rust/frb_generated.io.dart | 18 ++++++++ lib/src/rust/frb_generated.web.dart | 18 ++++++++ rust/src/api/kmp.rs | 33 +++++++++------ rust/src/frb_generated.rs | 39 ++++++++++++++++- 7 files changed, 150 insertions(+), 33 deletions(-) diff --git a/lib/src/rust/api/compress.dart b/lib/src/rust/api/compress.dart index d2a8e86..52c1d3c 100644 --- a/lib/src/rust/api/compress.dart +++ b/lib/src/rust/api/compress.dart @@ -23,11 +23,8 @@ abstract class DynamicImage implements RustOpaqueInterface {} // Rust type: RustOpaqueMoi> abstract class ImageCompress implements RustOpaqueInterface { - static Future contain({required String filePath, - CompressFormat? compressFormat, - int? maxWidth, - int? maxHeight, - int? quality}) => + static Future contain( + {required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}) => RustLib.instance.api.crateApiCompressImageCompressContain( filePath: filePath, compressFormat: compressFormat, diff --git a/lib/src/rust/api/kmp.dart b/lib/src/rust/api/kmp.dart index a0afa6f..c5a907b 100644 --- a/lib/src/rust/api/kmp.dart +++ b/lib/src/rust/api/kmp.dart @@ -6,7 +6,7 @@ import '../frb_generated.dart'; import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; -Future buildPrefixTable({required String pattern}) => +Future buildPrefixTable({required List pattern}) => RustLib.instance.api.crateApiKmpBuildPrefixTable(pattern: pattern); Future kmpSearch({required String text, required String pattern}) => diff --git a/lib/src/rust/frb_generated.dart b/lib/src/rust/frb_generated.dart index 64f0bd2..467a993 100644 --- a/lib/src/rust/frb_generated.dart +++ b/lib/src/rust/frb_generated.dart @@ -74,17 +74,14 @@ class RustLib extends BaseEntrypoint { } abstract class RustLibApi extends BaseApi { - Future crateApiCompressImageCompressContain({required String filePath, - CompressFormat? compressFormat, - int? maxWidth, - int? maxHeight, - int? quality}); + Future crateApiCompressImageCompressContain( + {required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}); Future> crateApiKmpKmpFindMatches({required String text, required List patterns}); Future crateApiKmpKmpReplaceWithKmp({required String text, required Map replacements}); - Future crateApiKmpBuildPrefixTable({required String pattern}); + Future crateApiKmpBuildPrefixTable({required List pattern}); Future crateApiCompressCompress( {required DynamicImage img, @@ -123,11 +120,8 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { }); @override - Future crateApiCompressImageCompressContain({required String filePath, - CompressFormat? compressFormat, - int? maxWidth, - int? maxHeight, - int? quality}) { + Future crateApiCompressImageCompressContain( + {required String filePath, CompressFormat? compressFormat, int? maxWidth, int? maxHeight, int? quality}) { return handler.executeNormal(NormalTask( callFfi: (port_) { final serializer = SseSerializer(generalizedFrbRustBinding); @@ -202,11 +196,11 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { ); @override - Future crateApiKmpBuildPrefixTable({required String pattern}) { + Future crateApiKmpBuildPrefixTable({required List pattern}) { return handler.executeNormal(NormalTask( callFfi: (port_) { final serializer = SseSerializer(generalizedFrbRustBinding); - sse_encode_String(pattern, serializer); + sse_encode_list_Char(pattern, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 4, port: port_); }, codec: SseCodec( @@ -324,6 +318,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return DynamicImageImpl.frbInternalDcoDecode(raw as List); } + @protected + String dco_decode_Char(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return String.fromCharCode(raw); + } + @protected Map dco_decode_Map_String_String(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -384,6 +384,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return raw as int; } + @protected + List dco_decode_list_Char(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return (raw as List).map(dco_decode_Char).toList(); + } + @protected List dco_decode_list_String(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs @@ -491,6 +497,13 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return DynamicImageImpl.frbInternalSseDecode(sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); } + @protected + String sse_decode_Char(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var inner = sse_decode_String(deserializer); + return inner; + } + @protected Map sse_decode_Map_String_String(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -556,6 +569,18 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return deserializer.buffer.getInt32(); } + @protected + List sse_decode_list_Char(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + var len_ = sse_decode_i_32(deserializer); + var ans_ = []; + for (var idx_ = 0; idx_ < len_; ++idx_) { + ans_.add(sse_decode_Char(deserializer)); + } + return ans_; + } + @protected List sse_decode_list_String(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -691,6 +716,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_usize((self as DynamicImageImpl).frbInternalSseEncode(move: false), serializer); } + @protected + void sse_encode_Char(String self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_String(self, serializer); + } + @protected void sse_encode_Map_String_String(Map self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -754,6 +785,15 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { serializer.buffer.putInt32(self); } + @protected + void sse_encode_list_Char(List self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_i_32(self.length, serializer); + for (final item in self) { + sse_encode_Char(item, serializer); + } + } + @protected void sse_encode_list_String(List self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs diff --git a/lib/src/rust/frb_generated.io.dart b/lib/src/rust/frb_generated.io.dart index 2077bf1..e4c2bbe 100644 --- a/lib/src/rust/frb_generated.io.dart +++ b/lib/src/rust/frb_generated.io.dart @@ -43,6 +43,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { DynamicImage dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( dynamic raw); + @protected + String dco_decode_Char(dynamic raw); + @protected Map dco_decode_Map_String_String(dynamic raw); @@ -73,6 +76,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected int dco_decode_i_32(dynamic raw); + @protected + List dco_decode_list_Char(dynamic raw); + @protected List dco_decode_list_String(dynamic raw); @@ -124,6 +130,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { DynamicImage sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( SseDeserializer deserializer); + @protected + String sse_decode_Char(SseDeserializer deserializer); + @protected Map sse_decode_Map_String_String(SseDeserializer deserializer); @@ -156,6 +165,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected int sse_decode_i_32(SseDeserializer deserializer); + @protected + List sse_decode_list_Char(SseDeserializer deserializer); + @protected List sse_decode_list_String(SseDeserializer deserializer); @@ -210,6 +222,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { void sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( DynamicImage self, SseSerializer serializer); + @protected + void sse_encode_Char(String self, SseSerializer serializer); + @protected void sse_encode_Map_String_String(Map self, SseSerializer serializer); @@ -242,6 +257,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_i_32(int self, SseSerializer serializer); + @protected + void sse_encode_list_Char(List self, SseSerializer serializer); + @protected void sse_encode_list_String(List self, SseSerializer serializer); diff --git a/lib/src/rust/frb_generated.web.dart b/lib/src/rust/frb_generated.web.dart index 3e82edc..9d8451b 100644 --- a/lib/src/rust/frb_generated.web.dart +++ b/lib/src/rust/frb_generated.web.dart @@ -45,6 +45,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { DynamicImage dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( dynamic raw); + @protected + String dco_decode_Char(dynamic raw); + @protected Map dco_decode_Map_String_String(dynamic raw); @@ -75,6 +78,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected int dco_decode_i_32(dynamic raw); + @protected + List dco_decode_list_Char(dynamic raw); + @protected List dco_decode_list_String(dynamic raw); @@ -126,6 +132,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { DynamicImage sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( SseDeserializer deserializer); + @protected + String sse_decode_Char(SseDeserializer deserializer); + @protected Map sse_decode_Map_String_String(SseDeserializer deserializer); @@ -158,6 +167,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected int sse_decode_i_32(SseDeserializer deserializer); + @protected + List sse_decode_list_Char(SseDeserializer deserializer); + @protected List sse_decode_list_String(SseDeserializer deserializer); @@ -212,6 +224,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { void sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerDynamicImage( DynamicImage self, SseSerializer serializer); + @protected + void sse_encode_Char(String self, SseSerializer serializer); + @protected void sse_encode_Map_String_String(Map self, SseSerializer serializer); @@ -244,6 +259,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { @protected void sse_encode_i_32(int self, SseSerializer serializer); + @protected + void sse_encode_list_Char(List self, SseSerializer serializer); + @protected void sse_encode_list_String(List self, SseSerializer serializer); diff --git a/rust/src/api/kmp.rs b/rust/src/api/kmp.rs index a99b3a7..bfa52f2 100644 --- a/rust/src/api/kmp.rs +++ b/rust/src/api/kmp.rs @@ -1,16 +1,16 @@ use flutter_rust_bridge::frb; use std::collections::HashMap; -pub fn build_prefix_table(pattern: &str) -> Vec { +pub fn build_prefix_table(pattern: &[char]) -> Vec { let m = pattern.len(); let mut prefix_table = vec![0; m]; let mut j = 0; for i in 1..m { - while j > 0 && pattern.chars().nth(i) != pattern.chars().nth(j) { + while j > 0 && pattern[i] != pattern[j] { j = prefix_table[j - 1]; } - if pattern.chars().nth(i) == pattern.chars().nth(j) { + if pattern[i] == pattern[j] { j += 1; } prefix_table[i] = j; @@ -20,16 +20,18 @@ pub fn build_prefix_table(pattern: &str) -> Vec { } pub fn kmp_search(text: &str, pattern: &str) -> Vec { - let m = pattern.len(); - let prefix_table = build_prefix_table(pattern); + let text_chars: Vec = text.chars().collect(); + let pattern_chars: Vec = pattern.chars().collect(); + let m = pattern_chars.len(); + let prefix_table = build_prefix_table(&pattern_chars); let mut matches = Vec::new(); let mut j = 0; - for (i, c) in text.chars().enumerate() { - while j > 0 && Some(c) != pattern.chars().nth(j) { + for (i, &c) in text_chars.iter().enumerate() { + while j > 0 && c != pattern_chars[j] { j = prefix_table[j - 1]; } - if Some(c) == pattern.chars().nth(j) { + if c == pattern_chars[j] { j += 1; } if j == m { @@ -58,7 +60,6 @@ impl Kmp { if !match_entries.contains_key(&index) || match_entries[&index].0.len() < pattern.len() { - // 确保在相同索引位置,优先使用较长的模式 match_entries.insert(index, (pattern, replacement)); } } @@ -66,15 +67,21 @@ impl Kmp { let mut result = String::new(); let mut last_index = 0; - let mut match_entries: Vec<_> = match_entries.into_iter().collect(); match_entries.sort_by_key(|&(index, _)| index); + let text_chars: Vec = text.chars().collect(); for (index, (pattern, replacement)) in match_entries { - if index >= last_index { - result.push_str(&text[last_index..index]); + let start_byte_index = text_chars[..index] + .iter() + .map(|c| c.len_utf8()) + .sum::(); + let end_byte_index = start_byte_index + pattern.len(); + + if start_byte_index >= last_index { + result.push_str(&text[last_index..start_byte_index]); result.push_str(replacement); - last_index = index + pattern.len(); + last_index = end_byte_index; } } diff --git a/rust/src/frb_generated.rs b/rust/src/frb_generated.rs index 1a010f1..73ddfb5 100644 --- a/rust/src/frb_generated.rs +++ b/rust/src/frb_generated.rs @@ -190,7 +190,7 @@ fn wire__crate__api__kmp__build_prefix_table_impl( }; let mut deserializer = flutter_rust_bridge::for_generated::SseDeserializer::new(message); - let api_pattern = ::sse_decode(&mut deserializer); + let api_pattern = >::sse_decode(&mut deserializer); deserializer.end(); move |context| { transform_result_sse::<_, ()>((move || { @@ -340,6 +340,14 @@ impl SseDecode for Kmp { } } +impl SseDecode for char { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = ::sse_decode(deserializer); + return inner.chars().next().unwrap(); + } +} + impl SseDecode for std::collections::HashMap { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -404,6 +412,18 @@ impl SseDecode for i32 { } } +impl SseDecode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut len_ = ::sse_decode(deserializer); + let mut ans_ = vec![]; + for idx_ in 0..len_ { + ans_.push(::sse_decode(deserializer)); + } + return ans_; + } +} + impl SseDecode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { @@ -644,6 +664,13 @@ impl SseEncode for Kmp { } } +impl SseEncode for char { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.to_string(), serializer); + } +} + impl SseEncode for std::collections::HashMap { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { @@ -713,6 +740,16 @@ impl SseEncode for i32 { } } +impl SseEncode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.len() as _, serializer); + for item in self { + ::sse_encode(item, serializer); + } + } +} + impl SseEncode for Vec { // Codec=Sse (Serialization based), see doc to use other codecs fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { From 1a19527b132818bfd9c48bc46ec812088b0c004c Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Sun, 1 Dec 2024 08:00:44 +0800 Subject: [PATCH 09/20] feat(*): add rich text and media editor Closes #45,#28,#50 --- .../audio_player/audio_player_view.dart | 12 +- lib/components/quill_embed/audio_embed.dart | 40 + lib/components/quill_embed/image_embed.dart | 42 + lib/components/quill_embed/text_indent.dart | 36 + lib/components/quill_embed/video_embed.dart | 42 + .../video_player/video_player_logic.dart | 41 + .../video_player/video_player_state.dart | 11 + .../video_player/video_player_view.dart | 61 + lib/l10n/intl_en.arb | 7 +- lib/l10n/intl_zh.arb | 7 +- lib/main.dart | 8 +- .../diary_details/diary_details_logic.dart | 2 +- .../diary_details/diary_details_state.dart | 2 + .../diary_details/diary_details_view.dart | 21 +- lib/pages/draw/draw_logic.dart | 2 +- lib/pages/edit/edit_logic.dart | 264 ++-- lib/pages/edit/edit_state.dart | 21 +- lib/pages/edit/edit_view.dart | 1080 ++++++++++------- lib/pages/home/media/media_view.dart | 5 +- lib/router/app_pages.dart | 2 + lib/utils/file_util.dart | 1 - lib/utils/media_util.dart | 97 +- lib/utils/notice_util.dart | 4 +- lib/utils/theme_util.dart | 4 +- pubspec.yaml | 18 +- 25 files changed, 1237 insertions(+), 593 deletions(-) create mode 100644 lib/components/quill_embed/audio_embed.dart create mode 100644 lib/components/quill_embed/image_embed.dart create mode 100644 lib/components/quill_embed/text_indent.dart create mode 100644 lib/components/quill_embed/video_embed.dart create mode 100644 lib/components/video_player/video_player_logic.dart create mode 100644 lib/components/video_player/video_player_state.dart create mode 100644 lib/components/video_player/video_player_view.dart diff --git a/lib/components/audio_player/audio_player_view.dart b/lib/components/audio_player/audio_player_view.dart index 0251f16..7bc0473 100644 --- a/lib/components/audio_player/audio_player_view.dart +++ b/lib/components/audio_player/audio_player_view.dart @@ -52,11 +52,10 @@ class NoOverlayShape extends SfOverlayShape { } class AudioPlayerComponent extends StatelessWidget { - const AudioPlayerComponent({super.key, required this.path, this.isEdit = false}); + const AudioPlayerComponent({super.key, required this.path}); final String path; - final bool isEdit; @override Widget build(BuildContext context) { @@ -132,15 +131,6 @@ class AudioPlayerComponent extends StatelessWidget { ], ), ), - if (isEdit) - IconButton( - onPressed: () { - logic.editLogic.deleteAudio(path); - }, - icon: const Icon( - Icons.cancel, - ), - ) ], ), ), diff --git a/lib/components/quill_embed/audio_embed.dart b/lib/components/quill_embed/audio_embed.dart new file mode 100644 index 0000000..b7e4032 --- /dev/null +++ b/lib/components/quill_embed/audio_embed.dart @@ -0,0 +1,40 @@ +import 'package:flutter/widgets.dart'; +import 'package:flutter_quill/flutter_quill.dart'; +import 'package:mood_diary/utils/utils.dart'; + +import '../audio_player/audio_player_view.dart'; + +class AudioBlockEmbed extends BlockEmbed { + const AudioBlockEmbed(String value) : super(embedType, value); + + static const String embedType = 'audio'; + + static AudioBlockEmbed fromName(String name) => AudioBlockEmbed(name); + + String get name => data as String; +} + +class AudioEmbedBuilder extends EmbedBuilder { + final bool isEdit; + + AudioEmbedBuilder({required this.isEdit}); + + @override + String get key => AudioBlockEmbed.embedType; + + @override + String toPlainText(Embed node) => ''; + + @override + Widget build( + BuildContext context, + EmbedContext embedContext, + ) { + final audioEmbed = AudioBlockEmbed(embedContext.node.value.data); // 从数据构造 AudioBlockEmbed + final path = isEdit + ? Utils().fileUtil.getCachePath(audioEmbed.name) + : Utils().fileUtil.getRealPath('audio', audioEmbed.name); + + return AudioPlayerComponent(path: path); // 使用音频播放器组件渲染 + } +} diff --git a/lib/components/quill_embed/image_embed.dart b/lib/components/quill_embed/image_embed.dart new file mode 100644 index 0000000..e12ab9c --- /dev/null +++ b/lib/components/quill_embed/image_embed.dart @@ -0,0 +1,42 @@ +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:flutter_quill/flutter_quill.dart'; +import 'package:mood_diary/utils/utils.dart'; + +class ImageBlockEmbed extends BlockEmbed { + const ImageBlockEmbed(String value) : super(embedType, value); + + static const String embedType = 'image'; + + static ImageBlockEmbed fromName(String name) => ImageBlockEmbed(name); + + String get name => data as String; +} + +class ImageEmbedBuilder extends EmbedBuilder { + final bool isEdit; + + ImageEmbedBuilder({required this.isEdit}); + + @override + String get key => ImageBlockEmbed.embedType; + + @override + String toPlainText(Embed node) => ''; + + @override + Widget build( + BuildContext context, + EmbedContext embedContext, + ) { + final imageEmbed = ImageBlockEmbed(embedContext.node.value.data); + // 从数据构造 ImageBlockEmbed + final imagePath = isEdit ? imageEmbed.name : Utils().fileUtil.getRealPath('image', imageEmbed.name); + + return Card.filled( + clipBehavior: Clip.hardEdge, + child: Image.file(File(imagePath)), + ); + } +} diff --git a/lib/components/quill_embed/text_indent.dart b/lib/components/quill_embed/text_indent.dart new file mode 100644 index 0000000..9712714 --- /dev/null +++ b/lib/components/quill_embed/text_indent.dart @@ -0,0 +1,36 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_quill/flutter_quill.dart'; + +class TextIndentEmbed extends BlockEmbed { + const TextIndentEmbed(String value) : super(embedType, value); + static const String embedType = 'text_indent'; +} + +class TextIndentEmbedBuilder extends EmbedBuilder { + final bool isEdit; + + TextIndentEmbedBuilder({required this.isEdit}); + + @override + String get key => TextIndentEmbed.embedType; + + @override + bool get expanded => false; + + @override + String toPlainText(Embed node) => ''; + + @override + WidgetSpan buildWidgetSpan(Widget widget) { + return WidgetSpan(child: widget); + } + + @override + Widget build(BuildContext context, EmbedContext embedContext) { + var indent = embedContext.node.value.data as String; + return SizedBox( + width: (embedContext.textStyle.fontSize ?? 16.0) * int.parse(indent), + child: isEdit ? Text('\u21E5' * int.parse(indent)) : null, + ); + } +} diff --git a/lib/components/quill_embed/video_embed.dart b/lib/components/quill_embed/video_embed.dart new file mode 100644 index 0000000..700ece0 --- /dev/null +++ b/lib/components/quill_embed/video_embed.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_quill/flutter_quill.dart'; +import 'package:mood_diary/components/video_player/video_player_view.dart'; +import 'package:mood_diary/utils/utils.dart'; + +class VideoBlockEmbed extends BlockEmbed { + const VideoBlockEmbed(String value) : super(embedType, value); + + static const String embedType = 'video'; + + static VideoBlockEmbed fromName(String name) => VideoBlockEmbed(name); + + String get name => data as String; +} + +class VideoEmbedBuilder extends EmbedBuilder { + final bool isEdit; + + VideoEmbedBuilder({required this.isEdit}); + + @override + String get key => VideoBlockEmbed.embedType; + + @override + String toPlainText(Embed node) => ''; + + @override + Widget build( + BuildContext context, + EmbedContext embedContext, + ) { + final videoEmbed = VideoBlockEmbed(embedContext.node.value.data); + final videoPath = isEdit ? videoEmbed.name : Utils().fileUtil.getRealPath('video', videoEmbed.name); + + return Card.filled( + clipBehavior: Clip.hardEdge, + child: VideoPlayerComponent( + videoPath: videoPath, + ), + ); // 使用音频播放器组件渲染 + } +} diff --git a/lib/components/video_player/video_player_logic.dart b/lib/components/video_player/video_player_logic.dart new file mode 100644 index 0000000..b5a8a48 --- /dev/null +++ b/lib/components/video_player/video_player_logic.dart @@ -0,0 +1,41 @@ +import 'dart:io'; + +import 'package:chewie/chewie.dart'; +import 'package:get/get.dart'; +import 'package:video_player/video_player.dart'; + +import 'video_player_state.dart'; + +class VideoPlayerLogic extends GetxController { + final VideoPlayerState state = VideoPlayerState(); + + late final videoPlayerController = VideoPlayerController.file(File(state.videoPath)); + late final chewieController = ChewieController( + videoPlayerController: videoPlayerController, + aspectRatio: 16 / 9, + useRootNavigator: false, + ); + + VideoPlayerLogic({required String videoPath}) { + state.videoPath = videoPath; + } + + @override + void onInit() { + super.onInit(); + } + + @override + void onReady() async { + await videoPlayerController.initialize(); + update(); + super.onReady(); + } + + @override + void onClose() { + videoPlayerController.dispose(); + chewieController.dispose(); + super.onClose(); + } +} diff --git a/lib/components/video_player/video_player_state.dart b/lib/components/video_player/video_player_state.dart new file mode 100644 index 0000000..363901a --- /dev/null +++ b/lib/components/video_player/video_player_state.dart @@ -0,0 +1,11 @@ +import 'package:media_kit/media_kit.dart'; + +class VideoPlayerState { + late Playable playable; + + late String videoPath; + + VideoPlayerState() { + ///Initialize variables + } +} diff --git a/lib/components/video_player/video_player_view.dart b/lib/components/video_player/video_player_view.dart new file mode 100644 index 0000000..a93fd1d --- /dev/null +++ b/lib/components/video_player/video_player_view.dart @@ -0,0 +1,61 @@ +import 'dart:io'; + +import 'package:chewie/chewie.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:media_kit_video/media_kit_video.dart'; + +import 'video_player_logic.dart'; +import 'video_player_state.dart'; + +class VideoPlayerComponent extends StatelessWidget { + final String videoPath; + + const VideoPlayerComponent({super.key, required this.videoPath}); + + @override + Widget build(BuildContext context) { + final VideoPlayerLogic logic = Get.put(VideoPlayerLogic(videoPath: videoPath), tag: videoPath); + final VideoPlayerState state = Bind.find(tag: videoPath).state; + final colorScheme = Theme.of(context).colorScheme; + + Widget buildCustomTheme({required Widget child}) { + if (Platform.isAndroid || Platform.isIOS) { + return MaterialVideoControlsTheme( + normal: kDefaultMaterialVideoControlsThemeData.copyWith( + seekBarPositionColor: colorScheme.primary, + seekBarThumbColor: colorScheme.primary, + seekBarMargin: const EdgeInsets.all(8.0)), + fullscreen: kDefaultMaterialVideoControlsThemeDataFullscreen.copyWith( + seekBarPositionColor: colorScheme.primary, + seekBarThumbColor: colorScheme.primary, + ), + child: child, + ); + } else { + return MaterialDesktopVideoControlsTheme( + normal: kDefaultMaterialDesktopVideoControlsThemeData.copyWith( + seekBarPositionColor: colorScheme.primary, + seekBarThumbColor: colorScheme.primary, + ), + fullscreen: kDefaultMaterialDesktopVideoControlsThemeData.copyWith( + seekBarPositionColor: colorScheme.primary, + seekBarThumbColor: colorScheme.primary, + ), + child: child, + ); + } + } + + return AspectRatio( + aspectRatio: 16 / 9, + child: GetBuilder( + assignId: true, + tag: videoPath, + builder: (_) { + return Chewie(controller: logic.chewieController); + }, + ), + ); + } +} diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 1ce8075..d953c6b 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -95,5 +95,10 @@ "mediaTypeImage": "Image", "mediaTypeAudio": "Audio", "mediaTypeVideo": "Video", - "mediaDeleteUseLessFile": "Delete useless file" + "mediaDeleteUseLessFile": "Delete useless file", + "backupSyncTitle": "Backup and Sync", + "backupSyncLocal": "Local Network Transfer", + "backupSyncWebdav": "WebDAV", + "backupSyncWebdavNoOption": "Not Configured", + "backupSyncWebdavOption": "Configured" } \ No newline at end of file diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index bf055e8..151eee7 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -95,5 +95,10 @@ "mediaTypeImage": "图片", "mediaTypeAudio": "音频", "mediaTypeVideo": "视频", - "mediaDeleteUseLessFile": "清理无用文件" + "mediaDeleteUseLessFile": "清理无用文件", + "backupSyncTitle": "备份与同步", + "backupSyncLocal": "局域网传输", + "backupSyncWebdav": "WebDAV", + "backupSyncWebdavNoOption": "未配置", + "backupSyncWebdavOption": "已配置" } \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 05a2e6b..9158e16 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -6,14 +6,15 @@ import 'package:flutter/material.dart'; import 'package:flutter_displaymode/flutter_displaymode.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_map_tile_caching/flutter_map_tile_caching.dart'; +import 'package:flutter_quill/flutter_quill.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:get/get.dart'; import 'package:intl/find_locale.dart'; -import 'package:media_kit/media_kit.dart'; import 'package:mood_diary/router/app_pages.dart'; import 'package:mood_diary/router/app_routes.dart'; import 'package:mood_diary/src/rust/frb_generated.dart'; import 'package:mood_diary/utils/utils.dart'; +import 'package:video_player_media_kit/video_player_media_kit.dart'; import 'components/window_buttons/window_buttons.dart'; @@ -26,7 +27,8 @@ Future initSystem() async { //初始化Isar await Utils().isarUtil.initIsar(); //初始化视频播放 - MediaKit.ensureInitialized(); + VideoPlayerMediaKit.ensureInitialized(android: true, iOS: true, macOS: true, windows: true, linux: true); + //MediaKit.ensureInitialized(); //地图缓存 await FMTCObjectBoxBackend().initialise(); await const FMTCStore('mapStore').manage.create(); @@ -97,7 +99,7 @@ void main() { themeMode: ThemeMode.values[Utils().prefUtil.getValue('themeMode')!], defaultTransition: Transition.cupertino, getPages: AppPages.routes, - localizationsDelegates: AppLocalizations.localizationsDelegates, + localizationsDelegates: const [...AppLocalizations.localizationsDelegates, FlutterQuillLocalizations.delegate], supportedLocales: AppLocalizations.supportedLocales, )); }); diff --git a/lib/pages/diary_details/diary_details_logic.dart b/lib/pages/diary_details/diary_details_logic.dart index 6af0bf5..cd55a52 100644 --- a/lib/pages/diary_details/diary_details_logic.dart +++ b/lib/pages/diary_details/diary_details_logic.dart @@ -50,7 +50,7 @@ class DiaryDetailsLogic extends GetxController { //编辑日记 Future toEditPage(Diary diary) async { //这里参数为diary,表示编辑日记,等待跳转结果为changed,重新获取日记 - if ((await Get.toNamed(AppRoutes.editPage, arguments: diary)) == 'changed') { + if ((await Get.toNamed(AppRoutes.editPage, arguments: diary.clone())) == 'changed') { //重新获取日记 state.diary = (await Utils().isarUtil.getDiaryByID(state.diary.isarId))!; quillController = QuillController( diff --git a/lib/pages/diary_details/diary_details_state.dart b/lib/pages/diary_details/diary_details_state.dart index fa038a6..7ae037d 100644 --- a/lib/pages/diary_details/diary_details_state.dart +++ b/lib/pages/diary_details/diary_details_state.dart @@ -10,5 +10,7 @@ class DiaryDetailsState { int? get imageColor => diary.imageColor; + RxBool isScrolling = false.obs; + DiaryDetailsState(); } diff --git a/lib/pages/diary_details/diary_details_view.dart b/lib/pages/diary_details/diary_details_view.dart index 32c6565..e29ef20 100644 --- a/lib/pages/diary_details/diary_details_view.dart +++ b/lib/pages/diary_details/diary_details_view.dart @@ -15,6 +15,10 @@ import 'package:mood_diary/components/mood_icon/mood_icon_view.dart'; import 'package:mood_diary/utils/utils.dart'; import 'package:smooth_page_indicator/smooth_page_indicator.dart'; +import '../../components/quill_embed/audio_embed.dart'; +import '../../components/quill_embed/image_embed.dart'; +import '../../components/quill_embed/text_indent.dart'; +import '../../components/quill_embed/video_embed.dart'; import 'diary_details_logic.dart'; class DiaryDetailsPage extends StatelessWidget { @@ -277,7 +281,7 @@ class DiaryDetailsPage extends StatelessWidget { body: CustomScrollView( slivers: [ SliverAppBar( - expandedHeight: state.aspect != null ? min(size.width / state.aspect!, size.height * 0.618) : null, + expandedHeight: state.aspect != null ? min(size.width / state.aspect!, size.height * 0.382) : null, title: Text( state.diary.title, style: textStyle.titleMedium, @@ -357,22 +361,23 @@ class DiaryDetailsPage extends StatelessWidget { scrollDirection: Axis.horizontal, child: buildChipList(customColorScheme)), ), Card.filled( - color: customColorScheme.surfaceContainer, + color: customColorScheme.surfaceContainerLow, child: Padding( padding: const EdgeInsets.all(8.0), child: QuillEditor.basic( controller: logic.quillController, - configurations: const QuillEditorConfigurations( + config: QuillEditorConfig( showCursor: false, - sharedConfigurations: QuillSharedConfigurations(), + embedBuilders: [ + ImageEmbedBuilder(isEdit: false), + VideoEmbedBuilder(isEdit: false), + AudioEmbedBuilder(isEdit: false), + TextIndentEmbedBuilder(isEdit: false), + ], ), ), ), ), - buildAudioList(), - Wrap( - children: [if (state.diary.videoName.isNotEmpty) ...buildMultiVideo(customColorScheme)], - ), ], ), ), diff --git a/lib/pages/draw/draw_logic.dart b/lib/pages/draw/draw_logic.dart index 13f2231..34aaa1a 100644 --- a/lib/pages/draw/draw_logic.dart +++ b/lib/pages/draw/draw_logic.dart @@ -19,8 +19,8 @@ class DrawLogic extends GetxController { Future getImageData() async { var data = await drawingController.getImageData(); var image = data!.buffer.asUint8List(); - editLogic.pickDraw(image); Get.backLegacy(); + editLogic.pickDraw(image); } void pickColor(Color color) { diff --git a/lib/pages/edit/edit_logic.dart b/lib/pages/edit/edit_logic.dart index f8f9e1f..86e7927 100644 --- a/lib/pages/edit/edit_logic.dart +++ b/lib/pages/edit/edit_logic.dart @@ -10,31 +10,36 @@ import 'package:image_picker/image_picker.dart'; import 'package:latlong2/latlong.dart'; import 'package:mood_diary/api/api.dart'; import 'package:mood_diary/common/models/isar/diary.dart'; -import 'package:mood_diary/common/values/keyboard_state.dart'; +import 'package:mood_diary/components/quill_embed/text_indent.dart'; +import 'package:mood_diary/components/quill_embed/video_embed.dart'; import 'package:mood_diary/router/app_routes.dart'; +import 'package:mood_diary/src/rust/api/kmp.dart'; import 'package:mood_diary/utils/utils.dart'; import 'package:uuid/uuid.dart'; +import '../../common/values/keyboard_state.dart'; +import '../../components/quill_embed/audio_embed.dart'; +import '../../components/quill_embed/image_embed.dart'; import 'edit_state.dart'; class EditLogic extends GetxController with WidgetsBindingObserver { final EditState state = EditState(); - //分类控制器 + //标签控制器 late TextEditingController tagTextEditingController = TextEditingController(); //标题 late TextEditingController titleTextEditingController = TextEditingController(); - late PageController pageController = PageController(); //编辑器控制器 - late QuillController quillController = QuillController.basic(); + late QuillController quillController; //聚焦对象 late FocusNode contentFocusNode = FocusNode(); late FocusNode titleFocusNode = FocusNode(); List heightList = []; + Timer? _timer; @override void didChangeMetrics() { @@ -66,51 +71,23 @@ class EditLogic extends GetxController with WidgetsBindingObserver { @override void onInit() { - //如果是新增 + _calculateDuration(); + WidgetsBinding.instance.addObserver(this); - if (Get.arguments == 'new') { - state.currentDiary = Diary(); - if (Utils().prefUtil.getValue('autoWeather') == true) { - unawaited(getPositionAndWeather()); - } - } else { - //如果是编辑,将日记对象赋值 - state.isNew = false; - var oldDiary = Get.arguments as Diary; - state.currentDiary = oldDiary; - // 初始化quill控制器 - quillController = QuillController( - document: Document.fromJson(jsonDecode(oldDiary.content)), - selection: const TextSelection.collapsed(offset: 0)); - // 获取分类名称 - if (oldDiary.categoryId != null) { - state.categoryName = Utils().isarUtil.getCategoryName(oldDiary.categoryId!)!.categoryName; - } - // 初始化标题控制器 - titleTextEditingController = TextEditingController(text: oldDiary.title); - //临时拷贝一份图片数据 - for (var name in oldDiary.imageName) { - state.imageFileList.add(XFile(Utils().fileUtil.getRealPath('image', name))); - } - //临时拷贝一份拷贝音频数据到缓存目录 - for (var name in oldDiary.audioName) { - state.audioNameList.add(name); - File(Utils().fileUtil.getRealPath('audio', name)).copySync(Utils().fileUtil.getCachePath(name)); - } - //临时拷贝一份视频数据,别忘记了缩略图 - for (var name in oldDiary.videoName) { - state.videoFileList.add(XFile(Utils().fileUtil.getRealPath('video', name))); - state.videoThumbnailFileList.add(XFile(Utils().fileUtil.getRealPath('thumbnail', name))); - } - state.totalCount = quillController.document.toPlainText().trim().length; - } - update(['All']); super.onInit(); } @override - void onReady() { - listenCount(); + void onReady() async { + await _initEdit(); + quillController.addListener(_listenCount); + quillController.document.changes.listen((change) { + var operations = change.change.operations; + var lastOperation = operations.last; + if (lastOperation.key == 'insert' && lastOperation.value == '\n') { + insertNewLine(); + } + }); super.onReady(); } @@ -123,16 +100,91 @@ class EditLogic extends GetxController with WidgetsBindingObserver { contentFocusNode.dispose(); pageController.dispose(); quillController.dispose(); + _timer?.cancel(); + _timer = null; super.onClose(); } - void listenCount() { - quillController.addListener(() { - state.totalCount = quillController.document.toPlainText().trim().length; - update(['Count']); + Future _initEdit() async { + //如果是新增 + if (Get.arguments == 'new') { + quillController = QuillController.basic(); + state.currentDiary = Diary(); + insertNewLine(); + if (Utils().prefUtil.getValue('autoWeather') == true) { + unawaited(getPositionAndWeather()); + } + } else { + //如果是编辑,将日记对象赋值 + state.isNew = false; + var oldDiary = Get.arguments as Diary; + state.currentDiary = oldDiary; + // 获取分类名称 + if (oldDiary.categoryId != null) { + state.categoryName = Utils().isarUtil.getCategoryName(oldDiary.categoryId!)!.categoryName; + } + // 初始化标题控制器 + titleTextEditingController.text = oldDiary.title; + // 待替换的字符串map + Map replaceMap = {}; + //临时拷贝一份图片数据 + for (var name in oldDiary.imageName) { + // 生成一个临时文件 + var xFile = XFile(Utils().fileUtil.getRealPath('image', name)); + replaceMap[name] = xFile.path; + state.imageFileList.add(xFile); + } + //临时拷贝一份拷贝音频数据到缓存目录 + for (var name in oldDiary.audioName) { + state.audioNameList.add(name); + await File(Utils().fileUtil.getRealPath('audio', name)).copy(Utils().fileUtil.getCachePath(name)); + } + //临时拷贝一份视频数据,别忘记了缩略图 + for (var name in oldDiary.videoName) { + // 生成一个临时文件 + var videoXFile = XFile(Utils().fileUtil.getRealPath('video', name)); + replaceMap[name] = videoXFile.path; + state.videoFileList.add(videoXFile); + } + quillController = QuillController( + document: + Document.fromJson(jsonDecode(await Kmp.replaceWithKmp(text: oldDiary.content, replacements: replaceMap))), + selection: const TextSelection.collapsed(offset: 0)); + state.totalCount.value = _toPlainText().length; + } + state.isInit = true; + update(['body']); + } + + //计算写作时长 + void _calculateDuration() { + _timer?.cancel(); + _timer = Timer.periodic(const Duration(seconds: 1), (timer) { + state.duration += const Duration(seconds: 1); + state.durationString.value = state.duration.toString().split('.')[0].padLeft(8, '0'); }); } + String _toPlainText() { + return quillController.document.toPlainText([ + ImageEmbedBuilder(isEdit: true), + VideoEmbedBuilder(isEdit: true), + AudioEmbedBuilder(isEdit: true), + TextIndentEmbedBuilder(isEdit: true), + ]).trim(); + } + + void _listenCount() { + state.totalCount.value = _toPlainText().length; + } + + // 插入换行时自动首行缩进 + void insertNewLine() { + final index = quillController.selection.baseOffset; + final length = quillController.selection.extentOffset - index; + quillController.replaceText(index, length, const TextIndentEmbed('2'), TextSelection.collapsed(offset: index + 1)); + } + Future addNewImage(XFile xFile) async { //图片列表中新增一个 state.imageFileList.add(xFile); @@ -144,36 +196,41 @@ class EditLogic extends GetxController with WidgetsBindingObserver { //获取一张图片 final XFile? photo = await Utils().mediaUtil.pickPhoto(imageSource); if (photo != null) { - //关闭dialog Get.backLegacy(); await addNewImage(photo); + final imageBlock = ImageBlockEmbed.fromName(photo.path); + final index = quillController.selection.baseOffset; + final length = quillController.selection.extentOffset - index; + quillController.replaceText(index, length, imageBlock, TextSelection.collapsed(offset: index + 1)); } else { - //关闭dialog - Get.backLegacy(); //弹出一个提示 + Get.backLegacy(); Utils().noticeUtil.showToast('取消图片选择'); } } //画图照片 Future pickDraw(Uint8List dataList) async { - var path = Utils().fileUtil.getCachePath('${const Uuid().v7()}.jpg'); - await addNewImage(XFile.fromData(dataList, path: path)..saveTo(path)); + var path = Utils().fileUtil.getCachePath('${const Uuid().v7()}.png'); + await addNewImage(XFile.fromData(dataList, path: path)); + Get.backLegacy(result: path); } //网络图片 Future networkImage() async { - //关闭dialog - Get.backLegacy(); Utils().noticeUtil.showToast('图片获取中'); var imageUrl = await Api().updateImageUrl(); + String? result; if (imageUrl != null) { var imageData = await Api().getImageData(imageUrl.first); if (imageData != null) { - var path = Utils().fileUtil.getCachePath('${const Uuid().v7()}.jpg'); + var path = Utils().fileUtil.getCachePath('${const Uuid().v7()}.png'); addNewImage(XFile.fromData(imageData, path: path)..saveTo(path)); + result = path; } } + //关闭dialog + Get.backLegacy(result: result); } //相册选择多张照片 @@ -198,11 +255,6 @@ class EditLogic extends GetxController with WidgetsBindingObserver { } Future addNewVideo(XFile xFile) async { - //获取缩略图 - String fileName = '${const Uuid().v7()}.jpeg'; - if (await Utils().mediaUtil.getVideoThumbnail(xFile, Utils().fileUtil.getCachePath(fileName))) { - state.videoThumbnailFileList.add(XFile(Utils().fileUtil.getCachePath(fileName))); - } //视频list中新增一个 state.videoFileList.add(xFile); update(['Video']); @@ -210,13 +262,16 @@ class EditLogic extends GetxController with WidgetsBindingObserver { //选择视频 Future pickVideo(ImageSource imageSource) async { + // 获取一个视频 XFile? video = await Utils().mediaUtil.pickVideo(imageSource); if (video != null) { - //关闭dialog Get.backLegacy(); await addNewVideo(video); + final videoBlock = VideoBlockEmbed.fromName(video.path); + final index = quillController.selection.baseOffset; + final length = quillController.selection.extentOffset - index; + quillController.replaceText(index, length, videoBlock, TextSelection.collapsed(offset: index + 1)); } else { - //关闭dialog Get.backLegacy(); //弹出一个提示 Utils().noticeUtil.showToast('取消视频选择'); @@ -234,10 +289,11 @@ class EditLogic extends GetxController with WidgetsBindingObserver { } //删除图片 - void deleteImage(index) async { - var imageFile = state.imageFileList.removeAt(index); - await Utils().fileUtil.deleteFile(imageFile.path); - Get.backLegacy(); + void deleteImage({required String path}) async { + // 移除这个图片 + state.imageFileList.removeWhere((file) => file.path == path); + await Utils().fileUtil.deleteFile(path); + //Get.backLegacy(); Utils().noticeUtil.showToast('删除成功'); update(['Image']); } @@ -245,9 +301,7 @@ class EditLogic extends GetxController with WidgetsBindingObserver { //删除视频 void deleteVideo(index) async { var videoFile = state.videoFileList.removeAt(index); - var thumbnailFile = state.videoThumbnailFileList.removeAt(index); await Utils().fileUtil.deleteFile(videoFile.path); - await Utils().fileUtil.deleteFile(thumbnailFile.path); Get.backLegacy(); Utils().noticeUtil.showToast('删除成功'); update(['Video']); @@ -284,54 +338,50 @@ class EditLogic extends GetxController with WidgetsBindingObserver { //保存日记 Future saveDiary() async { - // Get.dialog(SimpleDialog( - // children: [ - // Lottie.asset( - // 'assets/lottie/file_process.json', - // addRepaintBoundary: true, - // width: 200, - // height: 200, - // frameRate: FrameRate.max, - // ), - // const Row( - // mainAxisAlignment: MainAxisAlignment.center, - // children: [Text('处理中')], - // ) - // ], - // )); state.isSaving = true; update(['modal']); - //保存图片 - var imageNameList = await Utils().mediaUtil.saveImages(imageFileList: state.imageFileList); - //保存视频 - var videoNameList = await Utils() - .mediaUtil - .saveVideo(videoFileList: state.videoFileList, videoThumbnailFileList: state.videoThumbnailFileList); + // 根据文本中的实际内容移除不需要的资源 + var originContent = jsonEncode(quillController.document.toDelta().toJson()); + var needImage = await Kmp.findMatches(text: originContent, patterns: state.imagePathList); + var needVideo = await Kmp.findMatches(text: originContent, patterns: state.videoPathList); + var needAudio = await Kmp.findMatches(text: originContent, patterns: state.audioNameList); + state.imageFileList.removeWhere((file) => !needImage.contains(file.path)); + state.videoFileList.removeWhere((file) => !needVideo.contains(file.path)); + state.audioNameList.removeWhere((name) => !needAudio.contains(name)); + // 保存图片 + var imageNameMap = await Utils().mediaUtil.saveImages(imageFileList: state.imageFileList); + // 保存视频 + var videoNameMap = await Utils().mediaUtil.saveVideo(videoFileList: state.videoFileList); //保存录音 - await Utils().mediaUtil.saveAudio(state.audioNameList); + var audioNameMap = await Utils().mediaUtil.saveAudio(state.audioNameList); + var content = await Kmp.replaceWithKmp( + text: originContent, replacements: {...imageNameMap, ...videoNameMap, ...audioNameMap}); state.currentDiary ..title = titleTextEditingController.text - ..content = jsonEncode(quillController.document.toDelta().toJson()) - ..contentText = quillController.document.toPlainText().trim() + ..content = content + ..contentText = _toPlainText() ..audioName = state.audioNameList - ..imageName = imageNameList - ..videoName = videoNameList + ..imageName = imageNameMap.values.toList() + ..videoName = videoNameMap.values.toList() ..imageColor = await getCoverColor() ..aspect = await getCoverAspect(); + await Utils().isarUtil.updateADiary(state.currentDiary); state.isNew ? Get.backLegacy(result: state.currentDiary.categoryId ?? '') : Get.backLegacy(result: 'changed'); Utils().noticeUtil.showToast(state.isNew ? '保存成功' : '修改成功'); } - // void handleBack() { - // DateTime currentTime = DateTime.now(); - // if (state.oldTime != null && currentTime.difference(state.oldTime!) < const Duration(seconds: 3)) { - // Get.backLegacy(); - // } else { - // state.oldTime = currentTime; - // Utils().noticeUtil.showToast('再滑一次退出'); - // } - // } + DateTime? oldTime; + + void handleBack() { + DateTime currentTime = DateTime.now(); + if (oldTime != null && currentTime.difference(oldTime!) < const Duration(seconds: 3)) { + Get.backLegacy(); + } else { + oldTime = currentTime; + Utils().noticeUtil.showToast('再滑一次退出'); + } + } Future changeDate() async { var nowDateTime = await showDatePicker( @@ -365,7 +415,6 @@ class EditLogic extends GetxController with WidgetsBindingObserver { //去画画 void toDrawPage() { - Get.backLegacy(); Get.toNamed(AppRoutes.drawPage); } @@ -416,6 +465,11 @@ class EditLogic extends GetxController with WidgetsBindingObserver { //获取音频名称 void setAudioName(String name) { state.audioNameList.add(name); + final audioBlock = AudioBlockEmbed.fromName(name); + final index = quillController.selection.baseOffset; + final length = quillController.selection.extentOffset - index; + // 插入音频 Embed + quillController.replaceText(index, length, audioBlock, TextSelection.collapsed(offset: index + 1)); update(['Audio']); } diff --git a/lib/pages/edit/edit_state.dart b/lib/pages/edit/edit_state.dart index c65108f..41ec899 100644 --- a/lib/pages/edit/edit_state.dart +++ b/lib/pages/edit/edit_state.dart @@ -1,4 +1,5 @@ import 'package:cross_file/cross_file.dart'; +import 'package:get/get_rx/src/rx_types/rx_types.dart'; import 'package:mood_diary/common/models/isar/diary.dart'; import 'package:mood_diary/common/values/keyboard_state.dart'; @@ -7,12 +8,19 @@ class EditState { late Diary currentDiary; List imageFileList = []; + + List get imagePathList => imageFileList.map((e) => e.path).toList(); List videoFileList = []; + + List get videoPathList => videoFileList.map((e) => e.path).toList(); List audioFileList = []; - List videoThumbnailFileList = []; + + List get audioPathList => audioFileList.map((e) => e.path).toList(); List audioNameList = []; + String currentAudioName = ''; + // 分类名称 String categoryName = ''; @@ -25,10 +33,19 @@ class EditState { KeyboardState keyboardState = KeyboardState.closed; - int totalCount = 0; + // 总字数 + RxInt totalCount = 0.obs; + + // 已写作时长 + Duration duration = Duration.zero; + + RxString durationString = ''.obs; // 是否展示保存动画 bool isSaving = false; + // 是否完成初始化 + bool isInit = false; + EditState(); } diff --git a/lib/pages/edit/edit_view.dart b/lib/pages/edit/edit_view.dart index 416d478..c0b5d90 100644 --- a/lib/pages/edit/edit_view.dart +++ b/lib/pages/edit/edit_view.dart @@ -1,9 +1,9 @@ -import 'dart:io'; - +import 'package:auto_size_text_field/auto_size_text_field.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_quill/flutter_quill.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:flutter_quill_extensions/flutter_quill_extensions.dart'; import 'package:get/get.dart'; import 'package:image_picker/image_picker.dart'; import 'package:mood_diary/common/values/border.dart'; @@ -13,9 +13,13 @@ import 'package:mood_diary/components/category_add/category_add_view.dart'; import 'package:mood_diary/components/keepalive/keepalive.dart'; import 'package:mood_diary/components/lottie_modal/lottie_modal.dart'; import 'package:mood_diary/components/mood_icon/mood_icon_view.dart'; +import 'package:mood_diary/components/quill_embed/image_embed.dart'; +import 'package:mood_diary/components/quill_embed/text_indent.dart'; +import 'package:mood_diary/components/quill_embed/video_embed.dart'; import 'package:mood_diary/components/record_sheet/record_sheet_view.dart'; import 'package:mood_diary/utils/utils.dart'; +import '../../components/quill_embed/audio_embed.dart'; import 'edit_logic.dart'; class EditPage extends StatelessWidget { @@ -28,6 +32,7 @@ class EditPage extends StatelessWidget { final colorScheme = Theme.of(context).colorScheme; final size = MediaQuery.sizeOf(context); final i18n = AppLocalizations.of(context)!; + final textStyle = Theme.of(context).textTheme; Widget buildAddContainer(Widget icon) { return Container( @@ -67,10 +72,7 @@ class EditPage extends StatelessWidget { return Wrap( children: [ ...List.generate(state.audioNameList.length, (index) { - return AudioPlayerComponent( - path: Utils().fileUtil.getCachePath(state.audioNameList[index]), - isEdit: true, - ); + return AudioPlayerComponent(path: Utils().fileUtil.getCachePath(state.audioNameList[index])); }), ActionChip( label: const Text('添加'), @@ -90,280 +92,280 @@ class EditPage extends StatelessWidget { ); } - Widget buildImage() { - return Padding( - padding: const EdgeInsets.only(top: 8.0), - child: Wrap( - spacing: 8.0, - runSpacing: 8.0, - children: [ - ...List.generate(state.imageFileList.length, (index) { - return InkWell( - borderRadius: AppBorderRadius.smallBorderRadius, - onLongPress: () { - logic.setCover(index); - }, - onTap: () { - logic.toPhotoView( - List.generate(state.imageFileList.length, (index) { - return state.imageFileList[index].path; - }), - index); - }, - child: Container( - constraints: const BoxConstraints(maxWidth: 150, maxHeight: 150), - width: ((size.width - 56.0) / 3).truncateToDouble(), - height: ((size.width - 56.0) / 3).truncateToDouble(), - padding: const EdgeInsets.all(2.0), - decoration: BoxDecoration( - borderRadius: AppBorderRadius.smallBorderRadius, - border: Border.all(color: colorScheme.outline.withAlpha((255 * 0.5).toInt())), - image: DecorationImage( - image: FileImage(File(state.imageFileList[index].path)), - fit: BoxFit.cover, - ), - ), - child: Row( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - decoration: BoxDecoration( - color: colorScheme.surface.withAlpha((255 * 0.5).toInt()), - borderRadius: AppBorderRadius.smallBorderRadius, - ), - child: IconButton( - onPressed: () { - showDialog( - context: context, - builder: (context) { - return AlertDialog( - title: const Text('提示'), - content: const Text('确认删除这张照片吗'), - actions: [ - TextButton( - onPressed: () { - Get.backLegacy(); - }, - child: const Text('取消')), - TextButton( - onPressed: () { - logic.deleteImage(index); - }, - child: const Text('确认')) - ], - ); - }); - }, - constraints: const BoxConstraints(), - icon: Icon( - Icons.remove_circle_outlined, - color: colorScheme.tertiary, - ), - style: IconButton.styleFrom( - tapTargetSize: MaterialTapTargetSize.shrinkWrap, - padding: const EdgeInsets.all(4.0), - ), - ), - ), - ], - ), - ), - ); - }), - ...[ - InkWell( - borderRadius: AppBorderRadius.smallBorderRadius, - onTap: () { - showDialog( - context: context, - builder: (context) { - return SimpleDialog( - title: const Text('选择来源'), - children: [ - SimpleDialogOption( - child: const Row( - spacing: 8.0, - children: [ - Icon(Icons.photo_library_outlined), - Text('相册'), - ], - ), - onPressed: () { - logic.pickMultiPhoto(); - }, - ), - SimpleDialogOption( - child: const Row( - spacing: 8.0, - children: [ - Icon(Icons.camera_alt_outlined), - Text('相机'), - ], - ), - onPressed: () { - logic.pickPhoto(ImageSource.camera); - }, - ), - SimpleDialogOption( - child: const Row( - spacing: 8.0, - children: [ - Icon(Icons.image_search_outlined), - Text('网络'), - ], - ), - onPressed: () { - logic.networkImage(); - }, - ), - SimpleDialogOption( - child: const Row( - spacing: 8.0, - children: [ - Icon(Icons.draw_outlined), - Text('画画'), - ], - ), - onPressed: () { - logic.toDrawPage(); - }, - ), - ], - ); - }); - }, - child: buildAddContainer(const FaIcon(FontAwesomeIcons.image)), - ) - ], - ], - ), - ); - } + // Widget buildImage() { + // return Padding( + // padding: const EdgeInsets.only(top: 8.0), + // child: Wrap( + // spacing: 8.0, + // runSpacing: 8.0, + // children: [ + // ...List.generate(state.imageFileList.length, (index) { + // return InkWell( + // borderRadius: AppBorderRadius.smallBorderRadius, + // onLongPress: () { + // logic.setCover(index); + // }, + // onTap: () { + // logic.toPhotoView( + // List.generate(state.imageFileList.length, (index) { + // return state.imageFileList[index].path; + // }), + // index); + // }, + // child: Container( + // constraints: const BoxConstraints(maxWidth: 150, maxHeight: 150), + // width: ((size.width - 56.0) / 3).truncateToDouble(), + // height: ((size.width - 56.0) / 3).truncateToDouble(), + // padding: const EdgeInsets.all(2.0), + // decoration: BoxDecoration( + // borderRadius: AppBorderRadius.smallBorderRadius, + // border: Border.all(color: colorScheme.outline.withAlpha((255 * 0.5).toInt())), + // image: DecorationImage( + // image: FileImage(File(state.imageFileList[index].path)), + // fit: BoxFit.cover, + // ), + // ), + // child: Row( + // mainAxisSize: MainAxisSize.min, + // mainAxisAlignment: MainAxisAlignment.end, + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // Container( + // decoration: BoxDecoration( + // color: colorScheme.surface.withAlpha((255 * 0.5).toInt()), + // borderRadius: AppBorderRadius.smallBorderRadius, + // ), + // child: IconButton( + // onPressed: () { + // showDialog( + // context: context, + // builder: (context) { + // return AlertDialog( + // title: const Text('提示'), + // content: const Text('确认删除这张照片吗'), + // actions: [ + // TextButton( + // onPressed: () { + // Get.backLegacy(); + // }, + // child: const Text('取消')), + // TextButton( + // onPressed: () { + // logic.deleteImage(index); + // }, + // child: const Text('确认')) + // ], + // ); + // }); + // }, + // constraints: const BoxConstraints(), + // icon: Icon( + // Icons.remove_circle_outlined, + // color: colorScheme.tertiary, + // ), + // style: IconButton.styleFrom( + // tapTargetSize: MaterialTapTargetSize.shrinkWrap, + // padding: const EdgeInsets.all(4.0), + // ), + // ), + // ), + // ], + // ), + // ), + // ); + // }), + // ...[ + // InkWell( + // borderRadius: AppBorderRadius.smallBorderRadius, + // onTap: () { + // showDialog( + // context: context, + // builder: (context) { + // return SimpleDialog( + // title: const Text('选择来源'), + // children: [ + // SimpleDialogOption( + // child: const Row( + // spacing: 8.0, + // children: [ + // Icon(Icons.photo_library_outlined), + // Text('相册'), + // ], + // ), + // onPressed: () { + // logic.pickMultiPhoto(); + // }, + // ), + // SimpleDialogOption( + // child: const Row( + // spacing: 8.0, + // children: [ + // Icon(Icons.camera_alt_outlined), + // Text('相机'), + // ], + // ), + // onPressed: () { + // logic.pickPhoto(ImageSource.camera); + // }, + // ), + // SimpleDialogOption( + // child: const Row( + // spacing: 8.0, + // children: [ + // Icon(Icons.image_search_outlined), + // Text('网络'), + // ], + // ), + // onPressed: () { + // logic.networkImage(); + // }, + // ), + // SimpleDialogOption( + // child: const Row( + // spacing: 8.0, + // children: [ + // Icon(Icons.draw_outlined), + // Text('画画'), + // ], + // ), + // onPressed: () { + // logic.toDrawPage(); + // }, + // ), + // ], + // ); + // }); + // }, + // child: buildAddContainer(const FaIcon(FontAwesomeIcons.image)), + // ) + // ], + // ], + // ), + // ); + // } - Widget buildVideo() { - return Padding( - padding: const EdgeInsets.only(top: 8.0), - child: Wrap( - spacing: 8.0, - runSpacing: 8.0, - children: [ - ...List.generate(state.videoFileList.length, (index) { - return InkWell( - onTap: () { - logic.toVideoView( - List.generate(state.videoFileList.length, (index) { - return state.videoFileList[index].path; - }), - index); - }, - child: Container( - constraints: const BoxConstraints(maxWidth: 150, maxHeight: 150), - width: ((size.width - 56.0) / 3).truncateToDouble(), - height: ((size.width - 56.0) / 3).truncateToDouble(), - padding: const EdgeInsets.all(2.0), - decoration: BoxDecoration( - borderRadius: AppBorderRadius.smallBorderRadius, - border: Border.all(color: colorScheme.outline.withAlpha((255 * 0.5).toInt())), - image: DecorationImage( - image: FileImage(File(state.videoThumbnailFileList[index].path)), - fit: BoxFit.cover, - )), - child: Row( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - decoration: BoxDecoration( - color: colorScheme.surface.withAlpha((255 * 0.5).toInt()), - borderRadius: AppBorderRadius.smallBorderRadius, - ), - child: IconButton( - onPressed: () { - showDialog( - context: context, - builder: (context) { - return AlertDialog( - title: const Text('提示'), - content: const Text('确认删除这个视频吗'), - actions: [ - TextButton( - onPressed: () { - Get.backLegacy(); - }, - child: const Text('取消')), - TextButton( - onPressed: () { - logic.deleteVideo(index); - }, - child: const Text('确认')) - ], - ); - }); - }, - constraints: const BoxConstraints(), - icon: Icon( - Icons.remove_circle_outlined, - color: colorScheme.tertiary, - ), - style: IconButton.styleFrom( - tapTargetSize: MaterialTapTargetSize.shrinkWrap, - padding: const EdgeInsets.all(4.0), - ), - ), - ), - ], - ), - ), - ); - }), - if (state.videoFileList.length < 9) ...[ - InkWell( - borderRadius: AppBorderRadius.smallBorderRadius, - onTap: () { - showDialog( - context: context, - builder: (context) { - return SimpleDialog( - title: const Text('选择来源'), - children: [ - SimpleDialogOption( - child: const Row( - spacing: 8.0, - children: [ - Icon(Icons.photo_library_outlined), - Text('相册'), - ], - ), - onPressed: () { - logic.pickVideo(ImageSource.gallery); - }, - ), - SimpleDialogOption( - child: const Row( - spacing: 8.0, - children: [ - Icon(Icons.camera_alt_outlined), - Text('拍摄'), - ], - ), - onPressed: () { - logic.pickVideo(ImageSource.camera); - }, - ), - ], - ); - }); - }, - child: buildAddContainer(const FaIcon(FontAwesomeIcons.video)), - ) - ], - ], - ), - ); - } + // Widget buildVideo() { + // return Padding( + // padding: const EdgeInsets.only(top: 8.0), + // child: Wrap( + // spacing: 8.0, + // runSpacing: 8.0, + // children: [ + // ...List.generate(state.videoFileList.length, (index) { + // return InkWell( + // onTap: () { + // logic.toVideoView( + // List.generate(state.videoFileList.length, (index) { + // return state.videoFileList[index].path; + // }), + // index); + // }, + // child: Container( + // constraints: const BoxConstraints(maxWidth: 150, maxHeight: 150), + // width: ((size.width - 56.0) / 3).truncateToDouble(), + // height: ((size.width - 56.0) / 3).truncateToDouble(), + // padding: const EdgeInsets.all(2.0), + // decoration: BoxDecoration( + // borderRadius: AppBorderRadius.smallBorderRadius, + // border: Border.all(color: colorScheme.outline.withAlpha((255 * 0.5).toInt())), + // image: DecorationImage( + // image: FileImage(File(state.videoThumbnailFileList[index].path)), + // fit: BoxFit.cover, + // )), + // child: Row( + // mainAxisSize: MainAxisSize.min, + // mainAxisAlignment: MainAxisAlignment.end, + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // Container( + // decoration: BoxDecoration( + // color: colorScheme.surface.withAlpha((255 * 0.5).toInt()), + // borderRadius: AppBorderRadius.smallBorderRadius, + // ), + // child: IconButton( + // onPressed: () { + // showDialog( + // context: context, + // builder: (context) { + // return AlertDialog( + // title: const Text('提示'), + // content: const Text('确认删除这个视频吗'), + // actions: [ + // TextButton( + // onPressed: () { + // Get.backLegacy(); + // }, + // child: const Text('取消')), + // TextButton( + // onPressed: () { + // logic.deleteVideo(index); + // }, + // child: const Text('确认')) + // ], + // ); + // }); + // }, + // constraints: const BoxConstraints(), + // icon: Icon( + // Icons.remove_circle_outlined, + // color: colorScheme.tertiary, + // ), + // style: IconButton.styleFrom( + // tapTargetSize: MaterialTapTargetSize.shrinkWrap, + // padding: const EdgeInsets.all(4.0), + // ), + // ), + // ), + // ], + // ), + // ), + // ); + // }), + // if (state.videoFileList.length < 9) ...[ + // InkWell( + // borderRadius: AppBorderRadius.smallBorderRadius, + // onTap: () { + // showDialog( + // context: context, + // builder: (context) { + // return SimpleDialog( + // title: const Text('选择来源'), + // children: [ + // SimpleDialogOption( + // child: const Row( + // spacing: 8.0, + // children: [ + // Icon(Icons.photo_library_outlined), + // Text('相册'), + // ], + // ), + // onPressed: () { + // logic.pickVideo(ImageSource.gallery); + // }, + // ), + // SimpleDialogOption( + // child: const Row( + // spacing: 8.0, + // children: [ + // Icon(Icons.camera_alt_outlined), + // Text('拍摄'), + // ], + // ), + // onPressed: () { + // logic.pickVideo(ImageSource.camera); + // }, + // ), + // ], + // ); + // }); + // }, + // child: buildAddContainer(const FaIcon(FontAwesomeIcons.video)), + // ) + // ], + // ], + // ), + // ); + // } Widget buildMoodSlider() { return Container( @@ -389,6 +391,94 @@ class EditPage extends StatelessWidget { ); } + Widget buildPickImage() { + return SimpleDialog( + title: const Text('选择来源'), + children: [ + SimpleDialogOption( + child: const Row( + spacing: 8.0, + children: [ + Icon(Icons.photo_library_outlined), + Text('相册'), + ], + ), + onPressed: () async { + await logic.pickPhoto(ImageSource.gallery); + }, + ), + SimpleDialogOption( + child: const Row( + spacing: 8.0, + children: [ + Icon(Icons.camera_alt_outlined), + Text('相机'), + ], + ), + onPressed: () async { + await logic.pickPhoto(ImageSource.camera); + }, + ), + SimpleDialogOption( + child: const Row( + spacing: 8.0, + children: [ + Icon(Icons.image_search_outlined), + Text('网络'), + ], + ), + onPressed: () async { + await logic.networkImage(); + }, + ), + SimpleDialogOption( + child: const Row( + spacing: 8.0, + children: [ + Icon(Icons.draw_outlined), + Text('画画'), + ], + ), + onPressed: () { + logic.toDrawPage(); + }, + ), + ], + ); + } + + Widget buildPickVideo() { + return SimpleDialog( + title: const Text('选择来源'), + children: [ + SimpleDialogOption( + child: const Row( + spacing: 8.0, + children: [ + Icon(Icons.photo_library_outlined), + Text('相册'), + ], + ), + onPressed: () async { + await logic.pickVideo(ImageSource.gallery); + }, + ), + SimpleDialogOption( + child: const Row( + spacing: 8.0, + children: [ + Icon(Icons.camera_alt_outlined), + Text('拍摄'), + ], + ), + onPressed: () async { + await logic.pickVideo(ImageSource.camera); + }, + ), + ], + ); + } + Widget buildDetail() { return ListView( children: [ @@ -508,158 +598,316 @@ class EditPage extends StatelessWidget { return buildMoodSlider(); }), ), - ListTile( - title: const Text('图片'), - subtitle: GetBuilder( - id: 'Image', - builder: (_) { - return buildImage(); - }), - ), - ListTile( - title: const Text('视频'), - subtitle: GetBuilder( - id: 'Video', - builder: (_) { - return buildVideo(); - }), - ), - ListTile( - title: const Text('音频'), - subtitle: GetBuilder( - id: 'Audio', - builder: (_) { - return buildAudioPlayer(); - }), - ), + // ListTile( + // title: const Text('图片'), + // subtitle: GetBuilder( + // id: 'Image', + // builder: (_) { + // return buildImage(); + // }), + // ), + // ListTile( + // title: const Text('视频'), + // subtitle: GetBuilder( + // id: 'Video', + // builder: (_) { + // return buildVideo(); + // }), + // ), + // ListTile( + // title: const Text('音频'), + // subtitle: GetBuilder( + // id: 'Audio', + // builder: (_) { + // return buildAudioPlayer(); + // }), + // ), ], ); } + Widget buildTimer() { + return Container( + decoration: BoxDecoration( + color: colorScheme.surfaceContainerLow.withAlpha(220), + borderRadius: AppBorderRadius.smallBorderRadius, + ), + padding: const EdgeInsets.symmetric(horizontal: 8.0), + child: Obx(() { + return RichText( + text: TextSpan( + text: '时间 ', + style: textStyle.labelSmall, + children: [ + TextSpan( + text: state.durationString.value.toString(), + style: textStyle.labelSmall + ?.copyWith(color: colorScheme.primary, fontFeatures: [const FontFeature.tabularFigures()]), + ), + ], + ), + ); + }), + ); + } + + Widget buildCount() { + return Container( + decoration: BoxDecoration( + color: colorScheme.surfaceContainerLow.withAlpha(220), + borderRadius: AppBorderRadius.smallBorderRadius, + ), + padding: const EdgeInsets.symmetric(horizontal: 8.0), + child: Obx(() { + return RichText( + text: TextSpan( + text: '字数 ', + style: textStyle.labelSmall, + children: [ + TextSpan( + text: state.totalCount.value.toString(), + style: textStyle.labelSmall + ?.copyWith(color: colorScheme.primary, fontFeatures: [const FontFeature.tabularFigures()]), + ), + ], + ), + ); + }), + ); + } + + Widget buildTitle() { + return Container( + decoration: BoxDecoration( + color: colorScheme.surfaceContainerLow, + borderRadius: AppBorderRadius.smallBorderRadius, + ), + child: AutoSizeTextField( + controller: logic.titleTextEditingController, + focusNode: logic.titleFocusNode, + textAlign: TextAlign.center, + maxLines: 1, + style: textStyle.titleMedium!.copyWith(fontWeight: FontWeight.bold), + textInputAction: TextInputAction.done, + decoration: const InputDecoration( + border: UnderlineInputBorder(borderSide: BorderSide.none), + hintText: '标题', + contentPadding: EdgeInsets.symmetric(horizontal: 16.0), + ), + ), + ); + } + + Widget buildToolBar() { + return Padding( + padding: const EdgeInsets.all(8.0), + child: TooltipTheme( + data: const TooltipThemeData(preferBelow: false), + child: QuillSimpleToolbar( + controller: logic.quillController, + config: QuillSimpleToolbarConfig( + showFontFamily: false, + showFontSize: false, + showColorButton: false, + showBackgroundColorButton: false, + showAlignmentButtons: true, + showClipboardPaste: false, + showClipboardCut: false, + showClipboardCopy: false, + showIndent: false, + showDividers: false, + headerStyleType: HeaderStyleType.buttons, + multiRowsDisplay: false, + showLink: false, + decoration: BoxDecoration( + color: colorScheme.surfaceContainerLow, + borderRadius: AppBorderRadius.smallBorderRadius, + ), + embedButtons: [ + ...FlutterQuillEmbeds.toolbarButtons( + imageButtonOptions: QuillToolbarImageButtonOptions( + imageButtonConfig: QuillToolbarImageConfig( + onRequestPickImage: (_) async { + var imagePath = await Get.dialog(buildPickImage()); + return imagePath as String?; + }, + ), + ), + videoButtonOptions: QuillToolbarVideoButtonOptions( + videoConfig: QuillToolbarVideoConfig( + onRequestPickVideo: (_) async { + var videoPath = await Get.dialog(buildPickVideo()); + return videoPath as String?; + }, + ), + ), + ), + ( + BuildContext context, + EmbedButtonContext embedContext, + ) { + return IconButton( + icon: const Icon( + Icons.audiotrack, + size: 24, + ), + tooltip: 'Insert Audio', + onPressed: () async { + await showModalBottomSheet( + context: context, + showDragHandle: true, + useSafeArea: true, + isScrollControlled: true, + builder: (context) { + return const RecordSheetComponent(); + }); + }, + ); + }, + ( + BuildContext context, + EmbedButtonContext embedContext, + ) { + return IconButton( + icon: const Icon( + Icons.format_indent_increase, + size: 24, + ), + tooltip: 'Insert Newline', + onPressed: () async { + logic.insertNewLine(); + }, + ); + }, + ], + ), + ), + ), + ); + } + Widget buildWriting() { return Column( children: [ - TextField( - maxLines: 1, - controller: logic.titleTextEditingController, - focusNode: logic.titleFocusNode, - decoration: const InputDecoration( - border: UnderlineInputBorder(), contentPadding: EdgeInsets.all(12.0), hintText: '标题'), - ), - Expanded( - child: QuillEditor.basic( - focusNode: logic.contentFocusNode, - controller: logic.quillController, - configurations: const QuillEditorConfigurations( - padding: EdgeInsets.all(12.0), - placeholder: '正文', - sharedConfigurations: QuillSharedConfigurations(), - expands: true, - ), - ), - ), - Padding( - padding: const EdgeInsets.all(12.0), - child: Row( + Flexible( + child: Stack( + alignment: Alignment.center, children: [ - GetBuilder( - id: 'Count', - builder: (_) { - return Text('字数:${state.totalCount.toString()}'); - }) + QuillEditor.basic( + focusNode: logic.contentFocusNode, + controller: logic.quillController, + config: QuillEditorConfig( + padding: const EdgeInsets.fromLTRB(16, 20, 16, 20), + placeholder: '正文', + expands: true, + paintCursorAboveText: true, + keyboardAppearance: CupertinoTheme.maybeBrightnessOf(context) ?? Theme.of(context).brightness, + embedBuilders: [ + ImageEmbedBuilder(isEdit: true), + VideoEmbedBuilder(isEdit: true), + AudioEmbedBuilder(isEdit: true), + TextIndentEmbedBuilder(isEdit: true), + ], + ), + ), + Positioned( + top: 2, + left: 16, + right: 16, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + spacing: 8.0, + children: [ + buildTimer(), + buildCount(), + ], + )), ], ), ), - SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: TooltipTheme( - data: const TooltipThemeData(preferBelow: false), - child: QuillSimpleToolbar( - controller: logic.quillController, - configurations: const QuillSimpleToolbarConfigurations( - showFontFamily: false, - showFontSize: false, - showColorButton: false, - showBackgroundColorButton: false, - showAlignmentButtons: true, - showClipboardPaste: false, - showClipboardCut: false, - showClipboardCopy: false, - headerStyleType: HeaderStyleType.buttons, - sharedConfigurations: QuillSharedConfigurations(), - ), - ), - ), - ), + buildToolBar() ], ); } - return GetBuilder( - id: 'All', - builder: (_) { - return Stack( - alignment: Alignment.center, - children: [ - Scaffold( - appBar: AppBar( - title: state.isNew ? const Text('新增日记') : const Text('编辑日记'), - actions: [ - IconButton( - icon: const Icon(Icons.check), - onPressed: () { - logic.unFocus(); - logic.saveDiary(); - }, - tooltip: '保存', - ), - ], - ), - body: size.aspectRatio < 1.0 - ? PageView( - controller: logic.pageController, - physics: const NeverScrollableScrollPhysics(), - children: [KeepAliveWrapper(child: buildWriting()), KeepAliveWrapper(child: buildDetail())], - ) - : Row( - children: [ - Flexible(flex: 4, child: SafeArea(child: buildWriting())), - Flexible(flex: 3, child: buildDetail()) - ], - ), - bottomNavigationBar: size.aspectRatio < 1.0 - ? GetBuilder( - id: 'NavigationBar', - builder: (_) { - return NavigationBar( - destinations: const [ - NavigationDestination( - icon: Icon(Icons.edit_outlined), - label: '撰写', - selectedIcon: Icon(Icons.edit), - ), - NavigationDestination( - icon: Icon(Icons.more_outlined), - label: '更多', - selectedIcon: Icon(Icons.more), - ) - ], - selectedIndex: state.tabIndex, - onDestinationSelected: (index) { - logic.selectTabView(index); - }, - ); - }) - : null, - ), - GetBuilder( - id: 'modal', - builder: (_) { - return state.isSaving ? const LottieModal(type: LoadingType.cat) : const SizedBox.shrink(); - }), - ], - ); + return PopScope( + canPop: false, + onPopInvokedWithResult: (canPop, _) { + if (canPop) return; + logic.handleBack(); }, + child: Stack( + alignment: Alignment.center, + children: [ + GetBuilder( + id: 'body', + builder: (_) { + return Scaffold( + appBar: AppBar( + title: buildTitle(), + actions: [ + IconButton( + icon: const Icon(Icons.check), + onPressed: () { + logic.unFocus(); + logic.saveDiary(); + }, + tooltip: '保存', + ), + ], + ), + body: state.isInit + ? (size.aspectRatio < 1.0 + ? PageView( + controller: logic.pageController, + physics: const NeverScrollableScrollPhysics(), + children: [ + KeepAliveWrapper(child: buildWriting()), + KeepAliveWrapper(child: buildDetail()) + ], + ) + : Row( + children: [ + Flexible(flex: 4, child: SafeArea(child: buildWriting())), + Flexible(flex: 3, child: buildDetail()) + ], + )) + : const Center(child: CircularProgressIndicator()), + bottomNavigationBar: size.aspectRatio < 1.0 + ? GetBuilder( + id: 'NavigationBar', + builder: (_) { + return NavigationBar( + destinations: const [ + NavigationDestination( + icon: Icon(Icons.edit_outlined), + label: '撰写', + selectedIcon: Icon(Icons.edit), + ), + NavigationDestination( + icon: Icon(Icons.more_outlined), + label: '更多', + selectedIcon: Icon(Icons.more), + ) + ], + labelBehavior: NavigationDestinationLabelBehavior.alwaysHide, + height: 56.0, + selectedIndex: state.tabIndex, + onDestinationSelected: (index) { + logic.selectTabView(index); + }, + ); + }) + : null, + ); + }), + GetBuilder( + id: 'modal', + builder: (_) { + return state.isSaving ? const LottieModal(type: LoadingType.cat) : const SizedBox.shrink(); + }), + ], + ), ); } } diff --git a/lib/pages/home/media/media_view.dart b/lib/pages/home/media/media_view.dart index 0c400fa..6f0cb3f 100644 --- a/lib/pages/home/media/media_view.dart +++ b/lib/pages/home/media/media_view.dart @@ -63,10 +63,7 @@ class MediaPage extends StatelessWidget { return SliverList.builder( key: UniqueKey(), itemBuilder: (context, index) { - return AudioPlayerComponent( - path: state.filePath[index], - isEdit: false, - ); + return AudioPlayerComponent(path: state.filePath[index]); }, itemCount: state.filePath.length); } diff --git a/lib/router/app_pages.dart b/lib/router/app_pages.dart index e90e9b8..ade7736 100644 --- a/lib/router/app_pages.dart +++ b/lib/router/app_pages.dart @@ -77,6 +77,7 @@ class AppPages { GetPage( name: AppRoutes.photoPage, page: () => const ImagePage(), + popGesture: false, binds: [Bind.lazyPut(() => ImageLogic())], ), //回收站 @@ -95,6 +96,7 @@ class AppPages { GetPage( name: AppRoutes.editPage, page: () => const EditPage(), + popGesture: false, binds: [Bind.lazyPut(() => EditLogic())], ), //分享页路由 diff --git a/lib/utils/file_util.dart b/lib/utils/file_util.dart index 23f6279..41d76b7 100644 --- a/lib/utils/file_util.dart +++ b/lib/utils/file_util.dart @@ -184,7 +184,6 @@ class FileUtil { } String getCachePath(String fileName) { - Utils().logUtil.printInfo(join(_cachePath, fileName)); return join(_cachePath, fileName); } diff --git a/lib/utils/media_util.dart b/lib/utils/media_util.dart index f220870..48a6924 100644 --- a/lib/utils/media_util.dart +++ b/lib/utils/media_util.dart @@ -4,6 +4,8 @@ import 'dart:io'; import 'package:fc_native_video_thumbnail/fc_native_video_thumbnail.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; +import 'package:image_picker_android/image_picker_android.dart'; +import 'package:image_picker_platform_interface/image_picker_platform_interface.dart'; import 'package:mood_diary/src/rust/api/compress.dart'; import 'package:mood_diary/utils/utils.dart'; import 'package:uuid/uuid.dart'; @@ -15,43 +17,79 @@ class MediaUtil { late final _thumbnail = FcNativeVideoThumbnail(); - // 保存图片 - Future> saveImages({required List imageFileList}) async { - List nameList = []; - for (var imageFile in imageFileList) { - //生成新的名字 - var imageName = 'image-${const Uuid().v7()}.png'; - nameList.add(imageName); - await _compressRust(imageFile, Utils().fileUtil.getRealPath('image', imageName), r_type.CompressFormat.png); - //await _compressAndSaveImage(imageFile, Utils().fileUtil.getRealPath('image', imageName), CompressFormat.png); + MediaUtil() { + final ImagePickerPlatform imagePickerImplementation = ImagePickerPlatform.instance; + if (imagePickerImplementation is ImagePickerAndroid) { + imagePickerImplementation.useAndroidPhotoPicker = true; } - return nameList; } - // 保存录音 - Future saveAudio(List audioName) async { - for (var name in audioName) { + /// 保存图片 + /// 返回值: + /// key:XFile 文件的临时目录 + /// value:实际的文件名 + Future> saveImages({required List imageFileList}) async { + final imageNameMap = {}; + // 并发处理图片列表 + await Future.wait(imageFileList.map((imageFile) async { + // 生成新的名字 + final imageName = 'image-${const Uuid().v7()}.png'; + imageNameMap[imageFile.path] = imageName; + final targetPath = Utils().fileUtil.getRealPath('image', imageName); + if (imageFile.path.endsWith('.heic') || imageFile.path.endsWith('.heif')) { + await imageFile.saveTo(targetPath); + } else { + await _compressRust(imageFile, targetPath, r_type.CompressFormat.png); + } + })); + + return imageNameMap; + } + + /// 保存图片 + /// 返回值: + /// key:缓存目录的路径 + /// value:实际的文件名 + Future> saveAudio(List audioNames) async { + final audioNameMap = {}; + await Future.wait(audioNames.map((name) async { final file = File(Utils().fileUtil.getCachePath(name)); - await file.copy(Utils().fileUtil.getRealPath('audio', name)); - } + final targetPath = Utils().fileUtil.getRealPath('audio', name); + audioNameMap[file.path] = name; + await file.copy(targetPath); + })); + return audioNameMap; } - // 保存视频 - Future> saveVideo( - {required List videoFileList, required List videoThumbnailFileList}) async { - List nameList = []; - for (var i = 0; i < videoFileList.length; ++i) { + /// 保存视频 + /// 返回值: + /// key:XFile 文件的临时目录 + /// value:实际的文件名 + Future> saveVideo({required List videoFileList}) async { + Map videoNameMap = {}; + + await Future.wait(videoFileList.map((videoFile) async { // 生成文件名 final uuid = const Uuid().v7(); var videoName = 'video-$uuid.mp4'; - nameList.add(videoName); - await videoFileList[i].saveTo(Utils().fileUtil.getRealPath('video', videoName)); + videoNameMap[videoFile.path] = videoName; + // 保存视频文件 + await videoFile.saveTo(Utils().fileUtil.getRealPath('video', videoName)); + // 获取缩略图 + var tempThumbnailPath = Utils().fileUtil.getCachePath('${const Uuid().v7()}.jpeg'); + await Utils().mediaUtil.getVideoThumbnail(videoFile, tempThumbnailPath); + // 压缩缩略图并保存 + var compressedPath = Utils().fileUtil.getRealPath('thumbnail', videoName); await _compressRust( - videoThumbnailFileList[i], Utils().fileUtil.getRealPath('thumbnail', videoName), r_type.CompressFormat.jpeg); - // await _compressAndSaveImage( - // videoThumbnailFileList[i], Utils().fileUtil.getRealPath('thumbnail', videoName), CompressFormat.jpeg); - } - return nameList; + XFile(tempThumbnailPath), + compressedPath, + r_type.CompressFormat.jpeg, + ); + // 清理临时文件 + await File(tempThumbnailPath).delete(); + })); + + return videoNameMap; } //获取图片宽高 @@ -118,8 +156,9 @@ class MediaUtil { 2 => 1440, _ => 1080, }; - var newImage = await ImageCompress.contain( - filePath: oldImage.path, maxWidth: quality, maxHeight: quality, compressFormat: format); + var oldPath = oldImage.path; + var newImage = + await ImageCompress.contain(filePath: oldPath, maxWidth: quality, maxHeight: quality, compressFormat: format); await File(targetPath).writeAsBytes(newImage); } diff --git a/lib/utils/notice_util.dart b/lib/utils/notice_util.dart index ee23c7d..9824278 100644 --- a/lib/utils/notice_util.dart +++ b/lib/utils/notice_util.dart @@ -27,7 +27,7 @@ class NoticeUtil { ), ), gravity: ToastGravity.CENTER, - isDismissable: true); + ); }); } @@ -43,7 +43,7 @@ class NoticeUtil { ), child: Text( message, - style: TextStyle(fontSize: 16.0, color: Colors.white), + style: const TextStyle(fontSize: 16.0, color: Colors.white), ), ), gravity: ToastGravity.CENTER, diff --git a/lib/utils/theme_util.dart b/lib/utils/theme_util.dart index fdb9dac..79c6f40 100644 --- a/lib/utils/theme_util.dart +++ b/lib/utils/theme_util.dart @@ -1,7 +1,6 @@ -import 'dart:io'; - import 'package:dynamic_color/dynamic_color.dart'; import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; import 'package:mood_diary/common/values/colors.dart'; import 'package:mood_diary/utils/utils.dart'; @@ -32,7 +31,6 @@ class ThemeUtil { brightness: brightness, dynamicSchemeVariant: color == 4 ? DynamicSchemeVariant.fidelity : DynamicSchemeVariant.tonalSpot, ), - fontFamily: Platform.isWindows ? '微软雅黑' : null, ); return themeData; diff --git a/pubspec.yaml b/pubspec.yaml index 73ce7a9..dab3b0f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -48,7 +48,7 @@ dependencies: photo_view: 0.15.0 package_info_plus: 8.1.1 uuid: 4.5.1 - flutter_quill: 10.8.5 + flutter_quill: 11.0.0-dev.14 share_plus: 10.1.2 url_launcher: 6.3.1 archive: 3.6.1 @@ -96,17 +96,25 @@ dependencies: faker: 2.2.0 flutter_inappwebview: 6.1.5 flutter_rust_bridge: 2.6.0 - syncfusion_flutter_sliders: 27.2.3 - flutter_quill_extensions: 10.8.5 + syncfusion_flutter_sliders: 27.2.4 + flutter_quill_extensions: 11.0.0-dev.4 + img_picker_platform_interface: 3.0.0 connectivity_plus: 6.1.0 + image_picker_android: 0.8.12+18 + video_player_media_kit: 1.0.5 + video_player: 2.9.2 + chewie: 1.8.5 + http_status_code: 0.0.2 + pinput: 5.0.0 + flutter_markdown: 0.7.4+3 + google_fonts: 6.2.1 + auto_size_text_field: 2.2.4 flutter_localizations: sdk: flutter rust_lib_mood_diary: path: rust_builder -dependency_overrides: - device_info_plus: 11.1.1 dev_dependencies: flutter_test: sdk: flutter From 4c431746b51f50bee6dad655804284e138f0c48c Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Sun, 1 Dec 2024 08:10:10 +0800 Subject: [PATCH 10/20] fix(ui): fixed layout issues with three-button navigation mode Closes #51 --- .../cn/yooss/mood_diary/MainActivity.kt | 2 - lib/main.dart | 12 +++++- lib/pages/home/home_state.dart | 2 +- lib/pages/home/home_view.dart | 39 +++++++++++-------- 4 files changed, 33 insertions(+), 22 deletions(-) diff --git a/android/app/src/main/kotlin/cn/yooss/mood_diary/MainActivity.kt b/android/app/src/main/kotlin/cn/yooss/mood_diary/MainActivity.kt index 74e3020..ea5b344 100644 --- a/android/app/src/main/kotlin/cn/yooss/mood_diary/MainActivity.kt +++ b/android/app/src/main/kotlin/cn/yooss/mood_diary/MainActivity.kt @@ -1,7 +1,6 @@ package cn.yooss.mood_diary import android.os.Bundle -import androidx.activity.enableEdgeToEdge import com.github.gzuliyujiang.oaid.DeviceID import io.flutter.embedding.android.FlutterFragmentActivity import io.flutter.embedding.engine.FlutterEngine @@ -10,7 +9,6 @@ import io.flutter.plugin.common.MethodChannel class MainActivity : FlutterFragmentActivity() { override fun onCreate(savedInstanceState: Bundle?) { - enableEdgeToEdge() super.onCreate(savedInstanceState) } diff --git a/lib/main.dart b/lib/main.dart index 9158e16..a518985 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:bitsdojo_window/bitsdojo_window.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_displaymode/flutter_displaymode.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_map_tile_caching/flutter_map_tile_caching.dart'; @@ -28,11 +29,13 @@ Future initSystem() async { await Utils().isarUtil.initIsar(); //初始化视频播放 VideoPlayerMediaKit.ensureInitialized(android: true, iOS: true, macOS: true, windows: true, linux: true); - //MediaKit.ensureInitialized(); //地图缓存 await FMTCObjectBoxBackend().initialise(); await const FMTCStore('mapStore').manage.create(); await RustLib.init(); + SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); + SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle( + systemNavigationBarColor: Colors.transparent, systemNavigationBarContrastEnforced: false)); platFormOption(); } @@ -82,7 +85,12 @@ void main() { child: FToastBuilder()(context, child!), ); // 根据平台决定是否需要 MoveWindow - final windowChild = (Platform.isWindows || Platform.isMacOS || Platform.isWindows) + var autoFit = AnnotatedRegion( + value: SystemUiOverlayStyle( + systemNavigationBarColor: colorScheme.surface, + ), + child: mediaQuery); + final windowChild = (Platform.isWindows || Platform.isMacOS || Platform.isLinux) ? Column( children: [ WindowButtons( diff --git a/lib/pages/home/home_state.dart b/lib/pages/home/home_state.dart index ba0d440..13feb7e 100644 --- a/lib/pages/home/home_state.dart +++ b/lib/pages/home/home_state.dart @@ -8,7 +8,7 @@ class HomeState { //导航栏index int navigatorIndex = 0; - double navigatorBarHeight = 80.0; + double navigatorBarHeight = 56.0; HomeState(); } diff --git a/lib/pages/home/home_view.dart b/lib/pages/home/home_view.dart index e9770ad..d656f67 100644 --- a/lib/pages/home/home_view.dart +++ b/lib/pages/home/home_view.dart @@ -24,6 +24,7 @@ class HomePage extends StatelessWidget { final colorScheme = Theme.of(context).colorScheme; final i18n = AppLocalizations.of(context)!; final size = MediaQuery.sizeOf(context); + final padding = MediaQuery.paddingOf(context); Widget buildModal() { return AnimatedBuilder( @@ -360,31 +361,35 @@ class HomePage extends StatelessWidget { // } Widget buildNavigatorBar() { + var navigatorBarHeight = state.navigatorBarHeight + padding.bottom; return size.width < 600 ? AnimatedBuilder( animation: logic.barAnimation, builder: (context, child) { return SizedBox( - height: state.navigatorBarHeight * logic.barAnimation.value, + height: (navigatorBarHeight) * logic.barAnimation.value, child: child, ); }, - child: Container( - height: state.navigatorBarHeight * logic.barAnimation.value, - decoration: BoxDecoration(border: Border(top: BorderSide(color: colorScheme.outline, width: 0.2))), - child: Stack( - children: [ - NavigationBar( - destinations: destinations, - selectedIndex: state.navigatorIndex, - height: state.navigatorBarHeight, - onDestinationSelected: (index) { - logic.changeNavigator(index); - }, - labelBehavior: NavigationDestinationLabelBehavior.alwaysHide, - ), - buildModal() - ], + child: OverflowBox( + maxHeight: navigatorBarHeight, + alignment: Alignment.topCenter, + child: Container( + decoration: BoxDecoration( + border: Border(top: BorderSide(color: colorScheme.outline.withAlpha(150), width: 0.5)), + ), + child: Stack( + children: [ + NavigationBar( + destinations: destinations, + selectedIndex: state.navigatorIndex, + height: navigatorBarHeight, + onDestinationSelected: logic.changeNavigator, + labelBehavior: NavigationDestinationLabelBehavior.alwaysHide, + ), + buildModal() + ], + ), ), ), ) From f37f491dd008d34339603e88e4ada54f41a3ce6b Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Sun, 1 Dec 2024 21:53:59 +0800 Subject: [PATCH 11/20] perf(*): improve perf at home page --- .../diary_card/large_diary_card/large_diary_card_view.dart | 6 +++++- .../diary_card/small_diary_card/small_diary_card_view.dart | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/components/diary_card/large_diary_card/large_diary_card_view.dart b/lib/components/diary_card/large_diary_card/large_diary_card_view.dart index 3fa6237..bb5fb4b 100644 --- a/lib/components/diary_card/large_diary_card/large_diary_card_view.dart +++ b/lib/components/diary_card/large_diary_card/large_diary_card_view.dart @@ -16,13 +16,17 @@ class LargeDiaryCardComponent extends StatelessWidget with BasicCardLogic { Widget build(BuildContext context) { final colorScheme = Theme.of(context).colorScheme; final textStyle = Theme.of(context).textTheme; + final pixelRatio = MediaQuery.devicePixelRatioOf(context); Widget buildImage() { return Container( height: 154.0, decoration: BoxDecoration( image: DecorationImage( - image: FileImage(File(Utils().fileUtil.getRealPath('image', diary.imageName.first))), + image: ResizeImage( + FileImage(File(Utils().fileUtil.getRealPath('image', diary.imageName.first))), + height: (154 * pixelRatio).toInt(), + ), fit: BoxFit.cover, ), borderRadius: AppBorderRadius.mediumBorderRadius, diff --git a/lib/components/diary_card/small_diary_card/small_diary_card_view.dart b/lib/components/diary_card/small_diary_card/small_diary_card_view.dart index 0dfb522..f531571 100644 --- a/lib/components/diary_card/small_diary_card/small_diary_card_view.dart +++ b/lib/components/diary_card/small_diary_card/small_diary_card_view.dart @@ -18,13 +18,17 @@ class SmallDiaryCardComponent extends StatelessWidget with BasicCardLogic { Widget build(BuildContext context) { final colorScheme = Theme.of(context).colorScheme; final textStyle = Theme.of(context).textTheme; + final pixelRatio = MediaQuery.devicePixelRatioOf(context); Widget buildImage() { return AspectRatio( aspectRatio: 1.0, child: Container( decoration: BoxDecoration( image: DecorationImage( - image: FileImage(File(Utils().fileUtil.getRealPath('image', diary.imageName.first))), + image: ResizeImage( + FileImage(File(Utils().fileUtil.getRealPath('image', diary.imageName.first))), + width: (122 * pixelRatio).toInt(), + ), fit: BoxFit.cover, ), borderRadius: AppBorderRadius.mediumBorderRadius, From e0f7cab93b893ad817af5b80fb27d02d446ca46f Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Sun, 1 Dec 2024 22:42:43 +0800 Subject: [PATCH 12/20] fix(image_compress): fix can't compress heif image Closes #50 --- lib/utils/media_util.dart | 92 ++++++++++++++++++++++++--------------- pubspec.yaml | 5 ++- 2 files changed, 60 insertions(+), 37 deletions(-) diff --git a/lib/utils/media_util.dart b/lib/utils/media_util.dart index 48a6924..f25d8ea 100644 --- a/lib/utils/media_util.dart +++ b/lib/utils/media_util.dart @@ -3,9 +3,11 @@ import 'dart:io'; import 'package:fc_native_video_thumbnail/fc_native_video_thumbnail.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_image_compress/flutter_image_compress.dart'; import 'package:image_picker/image_picker.dart'; import 'package:image_picker_android/image_picker_android.dart'; import 'package:image_picker_platform_interface/image_picker_platform_interface.dart'; +import 'package:mime/mime.dart'; import 'package:mood_diary/src/rust/api/compress.dart'; import 'package:mood_diary/utils/utils.dart'; import 'package:uuid/uuid.dart'; @@ -24,29 +26,35 @@ class MediaUtil { } } + // 定义 MIME 类型到扩展名和压缩格式的映射 + final _compressConfig = { + 'image/jpeg': ['.jpg', r_type.CompressFormat.jpeg], + 'image/png': ['.png', r_type.CompressFormat.png], + 'image/heic': ['.heic', CompressFormat.heic], + 'image/webp': ['.webp', r_type.CompressFormat.webP], + }; + /// 保存图片 /// 返回值: /// key:XFile 文件的临时目录 /// value:实际的文件名 Future> saveImages({required List imageFileList}) async { final imageNameMap = {}; - // 并发处理图片列表 await Future.wait(imageFileList.map((imageFile) async { - // 生成新的名字 - final imageName = 'image-${const Uuid().v7()}.png'; + final mimeType = lookupMimeType(imageFile.path) ?? 'image/png'; // 默认使用 PNG + final config = _compressConfig[mimeType] ?? ['.png', r_type.CompressFormat.png]; + final extension = config[0] as String; + final format = config[1]; + final imageName = 'image-${const Uuid().v7()}$extension'; + final outputPath = Utils().fileUtil.getRealPath('image', imageName); + await _compressImage(imageFile, outputPath, format); imageNameMap[imageFile.path] = imageName; - final targetPath = Utils().fileUtil.getRealPath('image', imageName); - if (imageFile.path.endsWith('.heic') || imageFile.path.endsWith('.heif')) { - await imageFile.saveTo(targetPath); - } else { - await _compressRust(imageFile, targetPath, r_type.CompressFormat.png); - } })); return imageNameMap; } - /// 保存图片 + /// 保存音频 /// 返回值: /// key:缓存目录的路径 /// value:实际的文件名 @@ -149,6 +157,19 @@ class MediaUtil { return await _picker.pickMultiImage(limit: limit); } + // 通用压缩逻辑 + Future _compressImage( + XFile imageFile, + String outputPath, + dynamic format, + ) async { + if (format == CompressFormat.heic) { + await _compressNative(imageFile, outputPath, format); + } else { + await _compressRust(imageFile, outputPath, format); + } + } + Future _compressRust(XFile oldImage, String targetPath, r_type.CompressFormat format) async { var quality = switch (Utils().prefUtil.getValue('quality')) { 0 => 720, @@ -162,32 +183,31 @@ class MediaUtil { await File(targetPath).writeAsBytes(newImage); } - // //图片压缩 - // Future _compressAndSaveImage(XFile oldImage, String targetPath, CompressFormat format) async { - // // 如果是已经压缩过的 - // if (oldImage.path == targetPath) { - // return oldImage; - // } - // if (Platform.isWindows) { - // oldImage.saveTo(targetPath); - // return oldImage; - // } - // var quality = Utils().prefUtil.getValue('quality'); - // var height = switch (quality) { - // 0 => 720, - // 1 => 1080, - // 2 => 1440, - // _ => 1080, - // }; - // - // return await FlutterImageCompress.compressAndGetFile( - // oldImage.path, - // targetPath, - // minHeight: height, - // minWidth: height, - // format: format, - // ); - // } + //图片压缩 + Future _compressNative(XFile oldImage, String targetPath, CompressFormat format) async { + if (Platform.isWindows) { + oldImage.saveTo(targetPath); + return; + } + var quality = Utils().prefUtil.getValue('quality'); + var height = switch (quality) { + 0 => 720, + 1 => 1080, + 2 => 1440, + _ => 1080, + }; + var newImage = await FlutterImageCompress.compressWithFile( + oldImage.path, + minHeight: height, + minWidth: height, + format: format, + ); + if (newImage == null) { + oldImage.saveTo(targetPath); + return; + } + await File(targetPath).writeAsBytes(newImage); + } //获取视频缩略图 Future getVideoThumbnail(XFile xFile, destPath) async { diff --git a/pubspec.yaml b/pubspec.yaml index dab3b0f..b98d922 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -98,7 +98,6 @@ dependencies: flutter_rust_bridge: 2.6.0 syncfusion_flutter_sliders: 27.2.4 flutter_quill_extensions: 11.0.0-dev.4 - img_picker_platform_interface: 3.0.0 connectivity_plus: 6.1.0 image_picker_android: 0.8.12+18 video_player_media_kit: 1.0.5 @@ -108,6 +107,10 @@ dependencies: pinput: 5.0.0 flutter_markdown: 0.7.4+3 google_fonts: 6.2.1 + image_picker_platform_interface: 2.10.0 + chinese_font_library: 1.2.0 + flutter_image_compress: 2.3.0 + mime: 1.0.6 auto_size_text_field: 2.2.4 From 414c3ee5aa19c8f4b0f8e92d905c46cc6b00d016 Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Mon, 2 Dec 2024 12:16:37 +0800 Subject: [PATCH 13/20] ci(*): add workflows --- .github/workflows/build.yml | 178 ++++++++++++++++++++++++++ pubspec.lock | 243 ++++++++++++++++++++++-------------- pubspec.yaml | 10 +- 3 files changed, 336 insertions(+), 95 deletions(-) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..f7db1ce --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,178 @@ +name: Build & Release + +on: + pull_request: + branches: + - master + workflow_dispatch: + +jobs: + build-apk: + runs-on: ubuntu-latest + name: Build APK + + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Set Up Java + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + + - name: Set Up Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: '3.27.0-0.2.pre' + + - name: Install Dependencies + run: flutter pub get + + - name: Decode Keystore + run: | + echo "${{ secrets.ANDROID_KJS }}" | base64 --decode > android/app/key.jks + + - name: Create local.properties + run: | + echo "storePassword=${{ secrets.ANDROID_STORE_PASSWORD }}" > android/local.properties + echo "keyPassword=${{ secrets.ANDROID_KEY_PASSWORD }}" >> android/local.properties + + - name: Build APK + run: flutter build apk --release --obfuscate --split-debug-info=splitMap + + - name: Upload APK Artifact + uses: actions/upload-artifact@v3 + with: + name: android-apk + path: build/app/outputs/flutter-apk/app-release.apk + + build-msix: + runs-on: windows-latest + name: Build MSIX + needs: build-apk + + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Set Up Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: '3.27.0-0.2.pre' + + - name: Install Dependencies + run: flutter pub get + + - name: Build MSIX + run: flutter build windows --release + + - name: Upload MSIX Artifact + uses: actions/upload-artifact@v3 + with: + name: windows-msix + path: build/windows/runner/Release/*.msix + + # build-ios-macos: + # runs-on: macos-latest + # name: Build iOS & macOS + # needs: build-apk + # + # steps: + # - name: Checkout Repository + # uses: actions/checkout@v3 + # + # - name: Set Up Flutter + # uses: subosito/flutter-action@v2 + # with: + # flutter-version: '3.27.0-0.2.pre' + # + # - name: Install Dependencies + # run: flutter pub get + # + # - name: Set Up Certificates and Profiles + # run: | + # echo "${{ secrets.CERTIFICATE }}" | base64 --decode > signing_certificate.p12 + # echo "${{ secrets.PROFILE }}" | base64 --decode > provisioning_profile.mobileprovision + # + # - name: Build iOS + # run: flutter build ipa --release + # + # - name: Build macOS + # run: flutter build macos --release + # + # - name: Upload iOS Artifact + # uses: actions/upload-artifact@v3 + # with: + # name: ios-ipa + # path: build/ios/ipa/*.ipa + # + # - name: Upload macOS Artifact + # uses: actions/upload-artifact@v3 + # with: + # name: macos-app + # path: build/macos/Build/Products/Release/*.app + + release: + runs-on: ubuntu-latest + name: Publish Release + needs: [ build-apk, build-msix ] + + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + # 下载构建产物 + - name: Download APK Artifact + uses: actions/download-artifact@v3 + with: + name: android-apk + path: artifacts/android + + - name: Download MSIX Artifact + uses: actions/download-artifact@v3 + with: + name: windows-msix + path: artifacts/windows + + # - name: Download iOS Artifact + # uses: actions/download-artifact@v3 + # with: + # name: ios-ipa + # path: artifacts/ios + # + # - name: Download macOS Artifact + # uses: actions/download-artifact@v3 + # with: + # name: macos-app + # path: artifacts/macos + + # 提取版本号 + - name: Extract Version + id: extract_version + run: | + version=$(grep '^version: ' pubspec.yaml | cut -d ' ' -f 2 | tr -d '\r') + echo "VERSION=$version" >> $GITHUB_ENV + + # 重命名构建产物 + - name: Rename Artifacts + run: | + mkdir -p renamed-artifacts + mv artifacts/android/app-release.apk renamed-artifacts/moodiary-${{ env.VERSION }}-android-arm64.apk + mv artifacts/windows/*.msix renamed-artifacts/moodiary-${{ env.VERSION }}-windows-x64.msix + # mv artifacts/ios/*.ipa renamed-artifacts/moodiary-${{ env.VERSION }}-ios.ipa + # mv artifacts/macos/*.app renamed-artifacts/moodiary-${{ env.VERSION }}-macos.app + + # 生成 Release Notes + - name: Generate Release Notes + id: release_notes + uses: release-drafter/release-drafter@v5 + with: + config-name: release-drafter.yml + + # 发布 Release + - name: Create Release + uses: ncipollo/release-action@v1 + with: + artifacts: renamed-artifacts/* + tag: v${{ env.VERSION }} \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index 472e2e9..e16d483 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -150,6 +150,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" + auto_size_text_field: + dependency: "direct main" + description: + name: auto_size_text_field + sha256: "41c90b2270e38edc6ce5c02e5a17737a863e65e246bdfc94565a38f3ec399144" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.2.4" bitsdojo_window: dependency: "direct main" description: @@ -326,6 +334,22 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.0.3" + chewie: + dependency: "direct main" + description: + name: chewie + sha256: "335df378c025588aef400c704bd71f0daea479d4cd57c471c88c056c1144e7cd" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.8.5" + chinese_font_library: + dependency: "direct main" + description: + name: chinese_font_library + sha256: f6c18eb58c1514a95e4ed9a7e2f6702be1333b67e4226976b333e5918021c1df + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.0" cli_util: dependency: transitive description: @@ -586,10 +610,10 @@ packages: dependency: transitive description: name: file_selector_linux - sha256: b2b91daf8a68ecfa4a01b778a6f52edef9b14ecd506e771488ea0f2e0784198b + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" url: "https://pub.flutter-io.cn" source: hosted - version: "0.9.3+1" + version: "0.9.3+2" file_selector_macos: dependency: transitive description: @@ -691,6 +715,54 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "0.7.0" + flutter_image_compress: + dependency: "direct main" + description: + name: flutter_image_compress + sha256: "45a3071868092a61b11044c70422b04d39d4d9f2ef536f3c5b11fb65a1e7dd90" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.3.0" + flutter_image_compress_common: + dependency: transitive + description: + name: flutter_image_compress_common + sha256: "7f79bc6c8a363063620b4e372fa86bc691e1cb28e58048cd38e030692fbd99ee" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.5" + flutter_image_compress_macos: + dependency: transitive + description: + name: flutter_image_compress_macos + sha256: "26df6385512e92b3789dc76b613b54b55c457a7f1532e59078b04bf189782d47" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.2" + flutter_image_compress_ohos: + dependency: transitive + description: + name: flutter_image_compress_ohos + sha256: e76b92bbc830ee08f5b05962fc78a532011fcd2041f620b5400a593e96da3f51 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.0.3" + flutter_image_compress_platform_interface: + dependency: transitive + description: + name: flutter_image_compress_platform_interface + sha256: "579cb3947fd4309103afe6442a01ca01e1e6f93dc53bb4cbd090e8ce34a41889" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.5" + flutter_image_compress_web: + dependency: transitive + description: + name: flutter_image_compress_web + sha256: f02fe352b17f82b72f481de45add240db062a2585850bea1667e82cc4cd6c311 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.1.4+1" flutter_inappwebview: dependency: "direct main" description: @@ -711,10 +783,10 @@ packages: dependency: transitive description: name: flutter_inappwebview_internal_annotations - sha256: "5f80fd30e208ddded7dbbcd0d569e7995f9f63d45ea3f548d8dd4c0b473fb4c8" + sha256: "787171d43f8af67864740b6f04166c13190aa74a1468a1f1f1e9ee5b90c359cd" url: "https://pub.flutter-io.cn" source: hosted - version: "1.1.1" + version: "1.2.0" flutter_inappwebview_ios: dependency: transitive description: @@ -840,6 +912,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "9.1.3" + flutter_markdown: + dependency: "direct main" + description: + name: flutter_markdown + sha256: "255b00afa1a7bad19727da6a7780cf3db6c3c12e68d302d85e0ff1fdf173db9e" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.7.4+3" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -852,10 +932,10 @@ packages: dependency: "direct main" description: name: flutter_quill - sha256: "6274834823e61291c0cedee9dd7f73fc7836ea07a12596de8f5fa08598b5eb74" + sha256: "43ca068c81fcdad3771c027fdd0bdd49c9d3e518ca1ed1f210ce6f5923684bb9" url: "https://pub.flutter-io.cn" source: hosted - version: "10.8.5" + version: "11.0.0-dev.14" flutter_quill_delta_from_html: dependency: transitive description: @@ -868,10 +948,10 @@ packages: dependency: "direct main" description: name: flutter_quill_extensions - sha256: e8ff79c2bbdbf57d3248ec07055ec54ef0c35e270659d6058efd42a0e0ae1286 + sha256: "69f2dc335628b87d674e813bdcc9c58616874e2b48f13b6680150a34a2573906" url: "https://pub.flutter-io.cn" source: hosted - version: "10.8.5" + version: "11.0.0-dev.4" flutter_rust_bridge: dependency: "direct main" description: @@ -906,14 +986,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "10.8.0" - freezed_annotation: - dependency: transitive - description: - name: freezed_annotation - sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.4.4" frontend_server_client: dependency: transitive description: @@ -1018,6 +1090,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" + google_fonts: + dependency: "direct main" + description: + name: google_fonts + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.2.1" gotrue: dependency: transitive description: @@ -1082,6 +1162,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "4.1.1" + http_status_code: + dependency: "direct main" + description: + name: http_status_code + sha256: "052b42add019380f060cbf9cc9669b6831ca7e0244c925c520de8c1867dd139d" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.0.2" image: dependency: transitive description: @@ -1099,13 +1187,13 @@ packages: source: hosted version: "1.1.2" image_picker_android: - dependency: transitive + dependency: "direct main" description: name: image_picker_android - sha256: "8faba09ba361d4b246dc0a17cb4289b3324c2b9f6db7b3d457ee69106a86bd32" + sha256: fa8141602fde3f7e2f81dbf043613eb44dfa325fa0bcf93c0f142c9f7a2c193e url: "https://pub.flutter-io.cn" source: hosted - version: "0.8.12+17" + version: "0.8.12+18" image_picker_for_web: dependency: transitive description: @@ -1139,7 +1227,7 @@ packages: source: hosted version: "0.2.1+1" image_picker_platform_interface: - dependency: transitive + dependency: "direct main" description: name: image_picker_platform_interface sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" @@ -1170,22 +1258,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.0.4" - irondash_engine_context: - dependency: transitive - description: - name: irondash_engine_context - sha256: cd7b769db11a2b5243b037c8a9b1ecaef02e1ae27a2d909ffa78c1dad747bb10 - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.5.4" - irondash_message_channel: - dependency: transitive - description: - name: irondash_message_channel - sha256: b4101669776509c76133b8917ab8cfc704d3ad92a8c450b92934dd8884a2f060 - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.7.0" isar: dependency: "direct main" description: @@ -1197,10 +1269,11 @@ packages: isar_flutter_libs: dependency: "direct main" description: - name: isar_flutter_libs - sha256: "04a3f4035e213ddb6e78d0132a7c80296a085c2088c2a761b4a42ee5add36983" - url: "https://pub.flutter-io.cn" - source: hosted + path: "packages/isar_flutter_libs" + ref: HEAD + resolved-ref: "456a7fec4e6f19658426b73ebc5004c5bf08f70b" + url: "https://github.com/ZhuJHua/isar" + source: git version: "4.0.0-dev.14" js: dependency: transitive @@ -1467,7 +1540,7 @@ packages: source: hosted version: "2.0.0" mime: - dependency: transitive + dependency: "direct main" description: name: mime sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" @@ -1582,10 +1655,10 @@ packages: dependency: transitive description: name: path_provider_android - sha256: c464428172cb986b758c6d1724c603097febb8fb855aa265aeecc9280c294d4a + sha256: "8c4967f8b7cb46dc914e178daa29813d83ae502e0529d7b0478330616a691ef7" url: "https://pub.flutter-io.cn" source: hosted - version: "2.2.12" + version: "2.2.14" path_provider_foundation: dependency: transitive description: @@ -1682,14 +1755,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "0.15.0" - pixel_snap: - dependency: transitive + pinput: + dependency: "direct main" description: - name: pixel_snap - sha256: "677410ea37b07cd37ecb6d5e6c0d8d7615a7cf3bd92ba406fd1ac57e937d1fb0" + name: pinput + sha256: "7bf9aa7d0eeb3da9f7d49d2087c7bc7d36cd277d2e94cc31c6da52e1ebb048d0" url: "https://pub.flutter-io.cn" source: hosted - version: "0.1.5" + version: "5.0.0" platform: dependency: transitive description: @@ -1782,58 +1855,58 @@ packages: dependency: transitive description: name: quill_native_bridge_android - sha256: df94b59081dfded10052b61fd4bb80a013499029841d3f64b753b117c8db9dc3 + sha256: "7d77c4aafe0daf73df01e996d0ac37a0401e19b92210ce5fce76cb064cf57b18" url: "https://pub.flutter-io.cn" source: hosted - version: "0.0.1-dev.5" + version: "0.0.1" quill_native_bridge_ios: dependency: transitive description: name: quill_native_bridge_ios - sha256: "2bec0c95558eea85f422767c6ddab87ef774cf5fe4222e295a436a169d314ecc" + sha256: d23de3cd7724d482fe2b514617f8eedc8f296e120fb297368917ac3b59d8099f url: "https://pub.flutter-io.cn" source: hosted - version: "0.0.1-dev.6" + version: "0.0.1" quill_native_bridge_linux: dependency: transitive description: name: quill_native_bridge_linux - sha256: d226004634b69119007dffb95c88e06698644c1b3adfe984b78024129e223426 + sha256: "5fcc60cab2ab9079e0746941f05c5ca5fec85cc050b738c8c8b9da7c09da17eb" url: "https://pub.flutter-io.cn" source: hosted - version: "0.0.1-dev.4" + version: "0.0.1" quill_native_bridge_macos: dependency: transitive description: name: quill_native_bridge_macos - sha256: "9bbe855cc2248f098732794a4861852fede97a384299b02646cb3dbfbc996a87" + sha256: "1c0631bd1e2eee765a8b06017c5286a4e829778f4585736e048eb67c97af8a77" url: "https://pub.flutter-io.cn" source: hosted - version: "0.0.1-dev.5" + version: "0.0.1" quill_native_bridge_platform_interface: dependency: transitive description: name: quill_native_bridge_platform_interface - sha256: fdfc1001c9a152eb5789916f55da97a3de548ccd41fe3cdd0bfcc371bdf41d10 + sha256: "2d71b6c5106db0a4b1d788640d1b949ccdd0e570b5a5e0384f7b28be9630a94a" url: "https://pub.flutter-io.cn" source: hosted - version: "0.0.1-dev.5" + version: "0.0.1" quill_native_bridge_web: dependency: transitive description: name: quill_native_bridge_web - sha256: ad8076ad740318b3cf6b9a043d3dc206bb2e1383e5371cbe09711b9c609b64a0 + sha256: e7e55047d68f1a88574c26dbe3f12988f49d07740590d8fc6280028bbde5b908 url: "https://pub.flutter-io.cn" source: hosted - version: "0.0.1-dev.6" + version: "0.0.1" quill_native_bridge_windows: dependency: transitive description: name: quill_native_bridge_windows - sha256: "62583f68dd426aa9a98a0582631780db44d0c6708625d27f84cc87bf02e49ea3" + sha256: "60e50d74238f22ceb43113d9a42b6627451dab9fc27f527b979a32051cf1da45" url: "https://pub.flutter-io.cn" source: hosted - version: "0.0.1-dev.4" + version: "0.0.1" quiver: dependency: transitive description: @@ -2238,38 +2311,22 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.8.1" - super_clipboard: - dependency: transitive - description: - name: super_clipboard - sha256: "4a6ae6dfaa282ec1f2bff750976f535517ed8ca842d5deae13985eb11c00ac1f" - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.8.24" - super_native_extensions: - dependency: transitive - description: - name: super_native_extensions - sha256: a433bba8186cd6b707560c42535bf284804665231c00bca86faf1aa4968b7637 - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.8.24" syncfusion_flutter_core: dependency: transitive description: name: syncfusion_flutter_core - sha256: a39ddfb22b30c7cba620fec7dc682e46f151998febd25bca5519c17431084951 + sha256: "795530addc930b3b06f4f2fe99a039de276860af505fcf54c4516fbcb838a3cb" url: "https://pub.flutter-io.cn" source: hosted - version: "27.2.3" + version: "27.2.4" syncfusion_flutter_sliders: dependency: "direct main" description: name: syncfusion_flutter_sliders - sha256: "9b94199adf221da7b924bc59a52a8915d0c1e48a0662ee84667fe551e0307433" + sha256: "2ed4df2297af3922cd0264bff9bb43d6b73cf76256ae0bce0646e380a4506b96" url: "https://pub.flutter-io.cn" source: hosted - version: "27.2.3" + version: "27.2.4" synchronized: dependency: transitive description: @@ -2455,7 +2512,7 @@ packages: source: hosted version: "2.1.4" video_player: - dependency: transitive + dependency: "direct main" description: name: video_player sha256: "4a8c3492d734f7c39c2588a3206707a05ee80cef52e8c7f3b2078d430c84bc17" @@ -2478,6 +2535,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.6.3" + video_player_media_kit: + dependency: "direct main" + description: + name: video_player_media_kit + sha256: eadf78b85d0ecc6f65bb5ca84c5ad9546a8609c6c0ee207e81673f7969461f3b + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.5" video_player_platform_interface: dependency: transitive description: @@ -2578,10 +2643,10 @@ packages: dependency: transitive description: name: win32 - sha256: "84ba388638ed7a8cb3445a320c8273136ab2631cd5f2c57888335504ddab1bc2" + sha256: "8b338d4486ab3fbc0ba0db9f9b4f5239b6697fcee427939a40e720cbb9ee0a69" url: "https://pub.flutter-io.cn" source: hosted - version: "5.8.0" + version: "5.9.0" win32_registry: dependency: transitive description: @@ -2630,14 +2695,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.0.3" - youtube_explode_dart: - dependency: transitive - description: - name: youtube_explode_dart - sha256: "51ca5b2c03bf56060143d4f87df90ec3227592d7ae8a8003532533ae019d4291" - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.3.6" sdks: dart: ">=3.6.0-0 <4.0.0" flutter: ">=3.24.0" diff --git a/pubspec.yaml b/pubspec.yaml index b98d922..3478c48 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 2.4.9+49 +version: 2.6.0+60 environment: sdk: '>=3.4.0 <4.0.0' @@ -58,7 +58,10 @@ dependencies: geolocator: 13.0.2 shared_preferences: 2.3.3 isar: 4.0.0-dev.14 - isar_flutter_libs: 4.0.0-dev.14 + isar_flutter_libs: + git: + url: https://github.com/ZhuJHua/isar + path: packages/isar_flutter_libs fluttertoast: 8.2.8 cached_network_image: 3.4.1 audioplayers: 6.1.0 @@ -142,6 +145,9 @@ flutter: - family: qweather fonts: - asset: assets/fonts/qweather-icons.ttf + - family: noto serif + fonts: + - asset: assets/fonts/NotoSerifSC-VariableFont_wght.ttf assets: - assets/icon/ From 49bab7e4ac490be85fc1c7cdf45f954a18d1206b Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Tue, 3 Dec 2024 21:10:35 +0800 Subject: [PATCH 14/20] refactor(ui): improve ui --- lib/common/models/isar/diary.dart | 8 + lib/common/models/isar/diary.g.dart | 497 +++++++++++++----- lib/common/values/diary_type.dart | 8 + lib/components/tile/setting_tile.dart | 23 + lib/pages/about/about_view.dart | 7 +- .../diary_details/diary_details_state.dart | 3 + .../diary_details/diary_details_view.dart | 13 +- .../diary_setting/diary_setting_logic.dart | 38 +- .../diary_setting/diary_setting_state.dart | 26 +- .../diary_setting/diary_setting_view.dart | 172 ++++-- lib/pages/edit/edit_logic.dart | 33 +- lib/pages/edit/edit_state.dart | 21 + lib/pages/edit/edit_view.dart | 199 ++++--- lib/pages/home/home_logic.dart | 9 +- lib/pages/home/home_view.dart | 245 ++++----- lib/pages/home/setting/setting_logic.dart | 16 +- lib/pages/home/setting/setting_state.dart | 5 +- lib/pages/home/setting/setting_view.dart | 187 +++---- lib/utils/data/isar.dart | 29 +- lib/utils/data/pref.dart | 25 +- lib/utils/theme_util.dart | 305 ++++++++++- pubspec.lock | 9 +- pubspec.yaml | 8 +- 23 files changed, 1300 insertions(+), 586 deletions(-) create mode 100644 lib/common/values/diary_type.dart create mode 100644 lib/components/tile/setting_tile.dart diff --git a/lib/common/models/isar/diary.dart b/lib/common/models/isar/diary.dart index e1cd296..a901993 100644 --- a/lib/common/models/isar/diary.dart +++ b/lib/common/models/isar/diary.dart @@ -63,6 +63,9 @@ class Diary { // 位置信息 List position = []; + // 类型,富文本还是纯文本 + String? type; + //封面颜色,如果有的话 int? imageColor; @@ -89,6 +92,7 @@ class Diary { const ListEquality().equals(videoName, other.videoName) && const ListEquality().equals(tags, other.tags) && const ListEquality().equals(position, other.position) && + type == other.type && imageColor == other.imageColor && aspect == other.aspect; @@ -108,6 +112,7 @@ class Diary { const ListEquality().hash(videoName) ^ const ListEquality().hash(tags) ^ const ListEquality().hash(position) ^ + type.hashCode ^ imageColor.hashCode ^ aspect.hashCode; } @@ -131,6 +136,7 @@ class Diary { ..videoName = List.from(videoName) ..tags = List.from(tags) ..position = List.from(position) + ..type = type ..imageColor = imageColor ..aspect = aspect; } @@ -152,6 +158,7 @@ class Diary { 'videoName': videoName, 'tags': tags, 'position': position, + 'type': type, 'imageColor': imageColor, 'aspect': aspect, }; @@ -173,6 +180,7 @@ class Diary { ..videoName = List.from(json['videoName'] as List) ..tags = List.from(json['tags'] as List) ..position = List.from(json['position'] as List) + ..type = json['type'] as String ..imageColor = json['imageColor'] as int? ..aspect = (json['aspect'] as num?)?.toDouble(); } diff --git a/lib/common/models/isar/diary.g.dart b/lib/common/models/isar/diary.g.dart index 32a1063..939dd37 100644 --- a/lib/common/models/isar/diary.g.dart +++ b/lib/common/models/isar/diary.g.dart @@ -76,6 +76,10 @@ const DiarySchema = IsarGeneratedSchema( name: 'position', type: IsarType.stringList, ), + IsarPropertySchema( + name: 'type', + type: IsarType.string, + ), IsarPropertySchema( name: 'imageColor', type: IsarType.long, @@ -209,10 +213,18 @@ int serializeDiary(IsarWriter writer, Diary object) { } IsarCore.endList(writer, listWriter); } - IsarCore.writeLong(writer, 15, object.imageColor ?? -9223372036854775808); - IsarCore.writeDouble(writer, 16, object.aspect ?? double.nan); - IsarCore.writeString(writer, 17, object.yM); - IsarCore.writeString(writer, 18, object.yMd); + { + final value = object.type; + if (value == null) { + IsarCore.writeNull(writer, 15); + } else { + IsarCore.writeString(writer, 15, value); + } + } + IsarCore.writeLong(writer, 16, object.imageColor ?? -9223372036854775808); + IsarCore.writeDouble(writer, 17, object.aspect ?? double.nan); + IsarCore.writeString(writer, 18, object.yM); + IsarCore.writeString(writer, 19, object.yMd); return object.isarId; } @@ -330,8 +342,9 @@ Diary deserializeDiary(IsarReader reader) { } } } + object.type = IsarCore.readString(reader, 15); { - final value = IsarCore.readLong(reader, 15); + final value = IsarCore.readLong(reader, 16); if (value == -9223372036854775808) { object.imageColor = null; } else { @@ -339,7 +352,7 @@ Diary deserializeDiary(IsarReader reader) { } } { - final value = IsarCore.readDouble(reader, 16); + final value = IsarCore.readDouble(reader, 17); if (value.isNaN) { object.aspect = null; } else { @@ -478,17 +491,19 @@ dynamic deserializeDiaryProp(IsarReader reader, int property) { } } case 15: + return IsarCore.readString(reader, 15); + case 16: { - final value = IsarCore.readLong(reader, 15); + final value = IsarCore.readLong(reader, 16); if (value == -9223372036854775808) { return null; } else { return value; } } - case 16: + case 17: { - final value = IsarCore.readDouble(reader, 16); + final value = IsarCore.readDouble(reader, 17); if (value.isNaN) { return null; } else { @@ -497,10 +512,10 @@ dynamic deserializeDiaryProp(IsarReader reader, int property) { } case 0: return IsarCore.readId(reader); - case 17: - return IsarCore.readString(reader, 17) ?? ''; case 18: return IsarCore.readString(reader, 18) ?? ''; + case 19: + return IsarCore.readString(reader, 19) ?? ''; default: throw ArgumentError('Unknown property: $property'); } @@ -517,6 +532,7 @@ sealed class _DiaryUpdate { DateTime? time, bool? show, double? mood, + String? type, int? imageColor, double? aspect, String? yM, @@ -540,6 +556,7 @@ class _DiaryUpdateImpl implements _DiaryUpdate { Object? time = ignore, Object? show = ignore, Object? mood = ignore, + Object? type = ignore, Object? imageColor = ignore, Object? aspect = ignore, Object? yM = ignore, @@ -556,10 +573,11 @@ class _DiaryUpdateImpl implements _DiaryUpdate { if (time != ignore) 6: time as DateTime?, if (show != ignore) 7: show as bool?, if (mood != ignore) 8: mood as double?, - if (imageColor != ignore) 15: imageColor as int?, - if (aspect != ignore) 16: aspect as double?, - if (yM != ignore) 17: yM as String?, - if (yMd != ignore) 18: yMd as String?, + if (type != ignore) 15: type as String?, + if (imageColor != ignore) 16: imageColor as int?, + if (aspect != ignore) 17: aspect as double?, + if (yM != ignore) 18: yM as String?, + if (yMd != ignore) 19: yMd as String?, }) > 0; } @@ -576,6 +594,7 @@ sealed class _DiaryUpdateAll { DateTime? time, bool? show, double? mood, + String? type, int? imageColor, double? aspect, String? yM, @@ -599,6 +618,7 @@ class _DiaryUpdateAllImpl implements _DiaryUpdateAll { Object? time = ignore, Object? show = ignore, Object? mood = ignore, + Object? type = ignore, Object? imageColor = ignore, Object? aspect = ignore, Object? yM = ignore, @@ -613,10 +633,11 @@ class _DiaryUpdateAllImpl implements _DiaryUpdateAll { if (time != ignore) 6: time as DateTime?, if (show != ignore) 7: show as bool?, if (mood != ignore) 8: mood as double?, - if (imageColor != ignore) 15: imageColor as int?, - if (aspect != ignore) 16: aspect as double?, - if (yM != ignore) 17: yM as String?, - if (yMd != ignore) 18: yMd as String?, + if (type != ignore) 15: type as String?, + if (imageColor != ignore) 16: imageColor as int?, + if (aspect != ignore) 17: aspect as double?, + if (yM != ignore) 18: yM as String?, + if (yMd != ignore) 19: yMd as String?, }); } } @@ -637,6 +658,7 @@ sealed class _DiaryQueryUpdate { DateTime? time, bool? show, double? mood, + String? type, int? imageColor, double? aspect, String? yM, @@ -660,6 +682,7 @@ class _DiaryQueryUpdateImpl implements _DiaryQueryUpdate { Object? time = ignore, Object? show = ignore, Object? mood = ignore, + Object? type = ignore, Object? imageColor = ignore, Object? aspect = ignore, Object? yM = ignore, @@ -674,10 +697,11 @@ class _DiaryQueryUpdateImpl implements _DiaryQueryUpdate { if (time != ignore) 6: time as DateTime?, if (show != ignore) 7: show as bool?, if (mood != ignore) 8: mood as double?, - if (imageColor != ignore) 15: imageColor as int?, - if (aspect != ignore) 16: aspect as double?, - if (yM != ignore) 17: yM as String?, - if (yMd != ignore) 18: yMd as String?, + if (type != ignore) 15: type as String?, + if (imageColor != ignore) 16: imageColor as int?, + if (aspect != ignore) 17: aspect as double?, + if (yM != ignore) 18: yM as String?, + if (yMd != ignore) 19: yMd as String?, }); } } @@ -704,6 +728,7 @@ class _DiaryQueryBuilderUpdateImpl implements _DiaryQueryUpdate { Object? time = ignore, Object? show = ignore, Object? mood = ignore, + Object? type = ignore, Object? imageColor = ignore, Object? aspect = ignore, Object? yM = ignore, @@ -720,10 +745,11 @@ class _DiaryQueryBuilderUpdateImpl implements _DiaryQueryUpdate { if (time != ignore) 6: time as DateTime?, if (show != ignore) 7: show as bool?, if (mood != ignore) 8: mood as double?, - if (imageColor != ignore) 15: imageColor as int?, - if (aspect != ignore) 16: aspect as double?, - if (yM != ignore) 17: yM as String?, - if (yMd != ignore) 18: yMd as String?, + if (type != ignore) 15: type as String?, + if (imageColor != ignore) 16: imageColor as int?, + if (aspect != ignore) 17: aspect as double?, + if (yM != ignore) 18: yM as String?, + if (yMd != ignore) 19: yMd as String?, }); } finally { q.close(); @@ -2862,25 +2888,205 @@ extension DiaryQueryFilter on QueryBuilder { }); } - QueryBuilder imageColorIsNull() { + QueryBuilder typeIsNull() { return QueryBuilder.apply(this, (query) { return query.addFilterCondition(const IsNullCondition(property: 15)); }); } - QueryBuilder imageColorIsNotNull() { + QueryBuilder typeIsNotNull() { return QueryBuilder.apply(not(), (query) { return query.addFilterCondition(const IsNullCondition(property: 15)); }); } + QueryBuilder typeEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + EqualCondition( + property: 15, + value: value, + caseSensitive: caseSensitive, + ), + ); + }); + } + + QueryBuilder typeGreaterThan( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + GreaterCondition( + property: 15, + value: value, + caseSensitive: caseSensitive, + ), + ); + }); + } + + QueryBuilder typeGreaterThanOrEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + GreaterOrEqualCondition( + property: 15, + value: value, + caseSensitive: caseSensitive, + ), + ); + }); + } + + QueryBuilder typeLessThan( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + LessCondition( + property: 15, + value: value, + caseSensitive: caseSensitive, + ), + ); + }); + } + + QueryBuilder typeLessThanOrEqualTo( + String? value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + LessOrEqualCondition( + property: 15, + value: value, + caseSensitive: caseSensitive, + ), + ); + }); + } + + QueryBuilder typeBetween( + String? lower, + String? upper, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + BetweenCondition( + property: 15, + lower: lower, + upper: upper, + caseSensitive: caseSensitive, + ), + ); + }); + } + + QueryBuilder typeStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + StartsWithCondition( + property: 15, + value: value, + caseSensitive: caseSensitive, + ), + ); + }); + } + + QueryBuilder typeEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + EndsWithCondition( + property: 15, + value: value, + caseSensitive: caseSensitive, + ), + ); + }); + } + + QueryBuilder typeContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + ContainsCondition( + property: 15, + value: value, + caseSensitive: caseSensitive, + ), + ); + }); + } + + QueryBuilder typeMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + MatchesCondition( + property: 15, + wildcard: pattern, + caseSensitive: caseSensitive, + ), + ); + }); + } + + QueryBuilder typeIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + const EqualCondition( + property: 15, + value: '', + ), + ); + }); + } + + QueryBuilder typeIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + const GreaterCondition( + property: 15, + value: '', + ), + ); + }); + } + + QueryBuilder imageColorIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const IsNullCondition(property: 16)); + }); + } + + QueryBuilder imageColorIsNotNull() { + return QueryBuilder.apply(not(), (query) { + return query.addFilterCondition(const IsNullCondition(property: 16)); + }); + } + QueryBuilder imageColorEqualTo( int? value, ) { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 15, + property: 16, value: value, ), ); @@ -2893,7 +3099,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 15, + property: 16, value: value, ), ); @@ -2906,7 +3112,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 15, + property: 16, value: value, ), ); @@ -2919,7 +3125,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 15, + property: 16, value: value, ), ); @@ -2932,7 +3138,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 15, + property: 16, value: value, ), ); @@ -2946,7 +3152,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 15, + property: 16, lower: lower, upper: upper, ), @@ -2956,13 +3162,13 @@ extension DiaryQueryFilter on QueryBuilder { QueryBuilder aspectIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const IsNullCondition(property: 16)); + return query.addFilterCondition(const IsNullCondition(property: 17)); }); } QueryBuilder aspectIsNotNull() { return QueryBuilder.apply(not(), (query) { - return query.addFilterCondition(const IsNullCondition(property: 16)); + return query.addFilterCondition(const IsNullCondition(property: 17)); }); } @@ -2973,7 +3179,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 16, + property: 17, value: value, epsilon: epsilon, ), @@ -2988,7 +3194,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 16, + property: 17, value: value, epsilon: epsilon, ), @@ -3003,7 +3209,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 16, + property: 17, value: value, epsilon: epsilon, ), @@ -3018,7 +3224,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 16, + property: 17, value: value, epsilon: epsilon, ), @@ -3033,7 +3239,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 16, + property: 17, value: value, epsilon: epsilon, ), @@ -3049,7 +3255,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 16, + property: 17, lower: lower, upper: upper, epsilon: epsilon, @@ -3145,7 +3351,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 17, + property: 18, value: value, caseSensitive: caseSensitive, ), @@ -3160,7 +3366,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 17, + property: 18, value: value, caseSensitive: caseSensitive, ), @@ -3175,7 +3381,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 17, + property: 18, value: value, caseSensitive: caseSensitive, ), @@ -3190,7 +3396,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 17, + property: 18, value: value, caseSensitive: caseSensitive, ), @@ -3205,7 +3411,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 17, + property: 18, value: value, caseSensitive: caseSensitive, ), @@ -3221,7 +3427,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 17, + property: 18, lower: lower, upper: upper, caseSensitive: caseSensitive, @@ -3237,7 +3443,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( StartsWithCondition( - property: 17, + property: 18, value: value, caseSensitive: caseSensitive, ), @@ -3252,7 +3458,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EndsWithCondition( - property: 17, + property: 18, value: value, caseSensitive: caseSensitive, ), @@ -3264,7 +3470,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( ContainsCondition( - property: 17, + property: 18, value: value, caseSensitive: caseSensitive, ), @@ -3276,7 +3482,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( MatchesCondition( - property: 17, + property: 18, wildcard: pattern, caseSensitive: caseSensitive, ), @@ -3288,7 +3494,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const EqualCondition( - property: 17, + property: 18, value: '', ), ); @@ -3299,7 +3505,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const GreaterCondition( - property: 17, + property: 18, value: '', ), ); @@ -3313,7 +3519,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3328,7 +3534,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3343,7 +3549,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3358,7 +3564,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3373,7 +3579,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3389,7 +3595,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 18, + property: 19, lower: lower, upper: upper, caseSensitive: caseSensitive, @@ -3405,7 +3611,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( StartsWithCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3420,7 +3626,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EndsWithCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3432,7 +3638,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( ContainsCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3444,7 +3650,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( MatchesCondition( - property: 18, + property: 19, wildcard: pattern, caseSensitive: caseSensitive, ), @@ -3456,7 +3662,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const EqualCondition( - property: 18, + property: 19, value: '', ), ); @@ -3467,7 +3673,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const GreaterCondition( - property: 18, + property: 19, value: '', ), ); @@ -3609,30 +3815,49 @@ extension DiaryQuerySortBy on QueryBuilder { }); } + QueryBuilder sortByType({bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addSortBy( + 15, + caseSensitive: caseSensitive, + ); + }); + } + + QueryBuilder sortByTypeDesc({bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addSortBy( + 15, + sort: Sort.desc, + caseSensitive: caseSensitive, + ); + }); + } + QueryBuilder sortByImageColor() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(15); - }); - } - - QueryBuilder sortByImageColorDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(15, sort: Sort.desc); - }); - } - - QueryBuilder sortByAspect() { return QueryBuilder.apply(this, (query) { return query.addSortBy(16); }); } - QueryBuilder sortByAspectDesc() { + QueryBuilder sortByImageColorDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(16, sort: Sort.desc); }); } + QueryBuilder sortByAspect() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(17); + }); + } + + QueryBuilder sortByAspectDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(17, sort: Sort.desc); + }); + } + QueryBuilder sortByIsarId() { return QueryBuilder.apply(this, (query) { return query.addSortBy(0); @@ -3648,7 +3873,7 @@ extension DiaryQuerySortBy on QueryBuilder { QueryBuilder sortByYM({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addSortBy( - 17, + 18, caseSensitive: caseSensitive, ); }); @@ -3657,7 +3882,7 @@ extension DiaryQuerySortBy on QueryBuilder { QueryBuilder sortByYMDesc({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addSortBy( - 17, + 18, sort: Sort.desc, caseSensitive: caseSensitive, ); @@ -3667,7 +3892,7 @@ extension DiaryQuerySortBy on QueryBuilder { QueryBuilder sortByYMd({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addSortBy( - 18, + 19, caseSensitive: caseSensitive, ); }); @@ -3676,7 +3901,7 @@ extension DiaryQuerySortBy on QueryBuilder { QueryBuilder sortByYMdDesc({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addSortBy( - 18, + 19, sort: Sort.desc, caseSensitive: caseSensitive, ); @@ -3781,30 +4006,42 @@ extension DiaryQuerySortThenBy on QueryBuilder { }); } + QueryBuilder thenByType({bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(15, caseSensitive: caseSensitive); + }); + } + + QueryBuilder thenByTypeDesc({bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(15, sort: Sort.desc, caseSensitive: caseSensitive); + }); + } + QueryBuilder thenByImageColor() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(15); - }); - } - - QueryBuilder thenByImageColorDesc() { - return QueryBuilder.apply(this, (query) { - return query.addSortBy(15, sort: Sort.desc); - }); - } - - QueryBuilder thenByAspect() { return QueryBuilder.apply(this, (query) { return query.addSortBy(16); }); } - QueryBuilder thenByAspectDesc() { + QueryBuilder thenByImageColorDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(16, sort: Sort.desc); }); } + QueryBuilder thenByAspect() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(17); + }); + } + + QueryBuilder thenByAspectDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(17, sort: Sort.desc); + }); + } + QueryBuilder thenByIsarId() { return QueryBuilder.apply(this, (query) { return query.addSortBy(0); @@ -3819,25 +4056,25 @@ extension DiaryQuerySortThenBy on QueryBuilder { QueryBuilder thenByYM({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addSortBy(17, caseSensitive: caseSensitive); + return query.addSortBy(18, caseSensitive: caseSensitive); }); } QueryBuilder thenByYMDesc({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addSortBy(17, sort: Sort.desc, caseSensitive: caseSensitive); + return query.addSortBy(18, sort: Sort.desc, caseSensitive: caseSensitive); }); } QueryBuilder thenByYMd({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addSortBy(18, caseSensitive: caseSensitive); + return query.addSortBy(19, caseSensitive: caseSensitive); }); } QueryBuilder thenByYMdDesc({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addSortBy(18, sort: Sort.desc, caseSensitive: caseSensitive); + return query.addSortBy(19, sort: Sort.desc, caseSensitive: caseSensitive); }); } } @@ -3927,27 +4164,33 @@ extension DiaryQueryWhereDistinct on QueryBuilder { }); } - QueryBuilder distinctByImageColor() { + QueryBuilder distinctByType({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(15); + return query.addDistinctBy(15, caseSensitive: caseSensitive); }); } - QueryBuilder distinctByAspect() { + QueryBuilder distinctByImageColor() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(16); }); } + QueryBuilder distinctByAspect() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(17); + }); + } + QueryBuilder distinctByYM({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(17, caseSensitive: caseSensitive); + return query.addDistinctBy(18, caseSensitive: caseSensitive); }); } QueryBuilder distinctByYMd({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(18, caseSensitive: caseSensitive); + return query.addDistinctBy(19, caseSensitive: caseSensitive); }); } } @@ -4037,18 +4280,24 @@ extension DiaryQueryProperty1 on QueryBuilder { }); } - QueryBuilder imageColorProperty() { + QueryBuilder typeProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(15); }); } - QueryBuilder aspectProperty() { + QueryBuilder imageColorProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(16); }); } + QueryBuilder aspectProperty() { + return QueryBuilder.apply(this, (query) { + return query.addProperty(17); + }); + } + QueryBuilder isarIdProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(0); @@ -4057,13 +4306,13 @@ extension DiaryQueryProperty1 on QueryBuilder { QueryBuilder yMProperty() { return QueryBuilder.apply(this, (query) { - return query.addProperty(17); + return query.addProperty(18); }); } QueryBuilder yMdProperty() { return QueryBuilder.apply(this, (query) { - return query.addProperty(18); + return query.addProperty(19); }); } } @@ -4153,18 +4402,24 @@ extension DiaryQueryProperty2 on QueryBuilder { }); } - QueryBuilder imageColorProperty() { + QueryBuilder typeProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(15); }); } - QueryBuilder aspectProperty() { + QueryBuilder imageColorProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(16); }); } + QueryBuilder aspectProperty() { + return QueryBuilder.apply(this, (query) { + return query.addProperty(17); + }); + } + QueryBuilder isarIdProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(0); @@ -4173,13 +4428,13 @@ extension DiaryQueryProperty2 on QueryBuilder { QueryBuilder yMProperty() { return QueryBuilder.apply(this, (query) { - return query.addProperty(17); + return query.addProperty(18); }); } QueryBuilder yMdProperty() { return QueryBuilder.apply(this, (query) { - return query.addProperty(18); + return query.addProperty(19); }); } } @@ -4269,18 +4524,24 @@ extension DiaryQueryProperty3 on QueryBuilder imageColorProperty() { + QueryBuilder typeProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(15); }); } - QueryBuilder aspectProperty() { + QueryBuilder imageColorProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(16); }); } + QueryBuilder aspectProperty() { + return QueryBuilder.apply(this, (query) { + return query.addProperty(17); + }); + } + QueryBuilder isarIdProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(0); @@ -4289,13 +4550,13 @@ extension DiaryQueryProperty3 on QueryBuilder yMProperty() { return QueryBuilder.apply(this, (query) { - return query.addProperty(17); + return query.addProperty(18); }); } QueryBuilder yMdProperty() { return QueryBuilder.apply(this, (query) { - return query.addProperty(18); + return query.addProperty(19); }); } } diff --git a/lib/common/values/diary_type.dart b/lib/common/values/diary_type.dart new file mode 100644 index 0000000..dad1a53 --- /dev/null +++ b/lib/common/values/diary_type.dart @@ -0,0 +1,8 @@ +enum DiaryType { + text('text'), + richText('richText'); + + final String value; + + const DiaryType(this.value); +} diff --git a/lib/components/tile/setting_tile.dart b/lib/components/tile/setting_tile.dart new file mode 100644 index 0000000..4b33059 --- /dev/null +++ b/lib/components/tile/setting_tile.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; + +class SettingTitleTile extends StatelessWidget { + const SettingTitleTile({super.key, required this.title, this.subtitle}); + + final String title; + + final String? subtitle; + + @override + Widget build(BuildContext context) { + final textStyle = Theme.of(context).textTheme; + final colorScheme = Theme.of(context).colorScheme; + + return ListTile( + title: Text( + title, + style: textStyle.titleLarge!.copyWith(color: colorScheme.primary, fontWeight: FontWeight.bold), + ), + subtitle: subtitle != null ? Text(subtitle!) : null, + ); + } +} diff --git a/lib/pages/about/about_view.dart b/lib/pages/about/about_view.dart index 7171f53..ba83f0b 100644 --- a/lib/pages/about/about_view.dart +++ b/lib/pages/about/about_view.dart @@ -54,10 +54,10 @@ class AboutPage extends StatelessWidget { GetBuilder(builder: (_) { return buildLogoTitle(); }), - Card.filled( + Card.outlined( color: colorScheme.surfaceContainerLow, child: Column( - children: ListTile.divideTiles(tiles: [ + children: [ GetBuilder(builder: (_) { return ListTile( leading: const Icon(Icons.update), @@ -100,8 +100,7 @@ class AboutPage extends StatelessWidget { await logic.toReportPage(); }, ), - ], context: context) - .toList(), + ], ), ), ], diff --git a/lib/pages/diary_details/diary_details_state.dart b/lib/pages/diary_details/diary_details_state.dart index 7ae037d..08a9074 100644 --- a/lib/pages/diary_details/diary_details_state.dart +++ b/lib/pages/diary_details/diary_details_state.dart @@ -1,5 +1,6 @@ import 'package:get/get.dart'; import 'package:mood_diary/common/models/isar/diary.dart'; +import 'package:mood_diary/utils/utils.dart'; class DiaryDetailsState { Diary diary = Get.arguments[0]; @@ -12,5 +13,7 @@ class DiaryDetailsState { RxBool isScrolling = false.obs; + bool get diaryHeader => Utils().prefUtil.getValue('diaryHeader')!; + DiaryDetailsState(); } diff --git a/lib/pages/diary_details/diary_details_view.dart b/lib/pages/diary_details/diary_details_view.dart index e29ef20..8b5f617 100644 --- a/lib/pages/diary_details/diary_details_view.dart +++ b/lib/pages/diary_details/diary_details_view.dart @@ -273,22 +273,24 @@ class DiaryDetailsPage extends StatelessWidget { ) : colorScheme; return Theme( - data: Theme.of(context).copyWith( - colorScheme: customColorScheme, - ), + data: Theme.of(context).copyWith(colorScheme: customColorScheme), child: Scaffold( backgroundColor: customColorScheme.surface, body: CustomScrollView( slivers: [ SliverAppBar( - expandedHeight: state.aspect != null ? min(size.width / state.aspect!, size.height * 0.382) : null, + expandedHeight: state.diaryHeader + ? (state.aspect != null ? min(size.width / state.aspect!, size.height * 0.382) : null) + : null, title: Text( state.diary.title, style: textStyle.titleMedium, ), flexibleSpace: FlexibleSpaceBar( collapseMode: CollapseMode.pin, - background: state.diary.imageName.isNotEmpty ? buildImageView(customColorScheme) : null, + background: state.diaryHeader + ? (state.diary.imageName.isNotEmpty ? buildImageView(customColorScheme) : null) + : null, ), pinned: true, actions: [ @@ -368,6 +370,7 @@ class DiaryDetailsPage extends StatelessWidget { controller: logic.quillController, config: QuillEditorConfig( showCursor: false, + customStyles: Utils().themeUtil.getInstance(context), embedBuilders: [ ImageEmbedBuilder(isEdit: false), VideoEmbedBuilder(isEdit: false), diff --git a/lib/pages/diary_setting/diary_setting_logic.dart b/lib/pages/diary_setting/diary_setting_logic.dart index 9c52463..2dd61d3 100644 --- a/lib/pages/diary_setting/diary_setting_logic.dart +++ b/lib/pages/diary_setting/diary_setting_logic.dart @@ -10,20 +10,48 @@ class DiarySettingLogic extends GetxController { Future quality(int value) async { Get.backLegacy(); await Utils().prefUtil.setValue('quality', value); - state.quality = value; - update(['Quality']); + state.quality.value = value; } //自动天气 Future autoWeather(bool value) async { await Utils().prefUtil.setValue('autoWeather', value); - state.autoWeather = value; - update(['AutoWeather']); + state.autoWeather.value = value; } //动态配色 Future dynamicColor(bool value) async { await Utils().prefUtil.setValue('dynamicColor', value); - state.dynamicColor = value; + state.dynamicColor.value = value; + } + + // 日记页头图 + Future diaryHeader(bool value) async { + await Utils().prefUtil.setValue('diaryHeader', value); + state.diaryHeader.value = value; + } + + // 首行缩进 + Future firstLineIndent(bool value) async { + await Utils().prefUtil.setValue('firstLineIndent', value); + state.firstLineIndent.value = value; + } + + // 自动设置分类 + Future autoCategory(bool value) async { + await Utils().prefUtil.setValue('autoCategory', value); + state.autoCategory.value = value; + } + + // 展示写作时长 + Future showWriteTime(bool value) async { + await Utils().prefUtil.setValue('showWritingTime', value); + state.showWriteTime.value = value; + } + + // 展示字数统计 + Future showWordCount(bool value) async { + await Utils().prefUtil.setValue('showWordCount', value); + state.showWordCount.value = value; } } diff --git a/lib/pages/diary_setting/diary_setting_state.dart b/lib/pages/diary_setting/diary_setting_state.dart index ff6004d..0fd4468 100644 --- a/lib/pages/diary_setting/diary_setting_state.dart +++ b/lib/pages/diary_setting/diary_setting_state.dart @@ -1,12 +1,30 @@ +import 'package:get/get.dart'; import 'package:mood_diary/utils/utils.dart'; class DiarySettingState { // 图片质量 - int quality = Utils().prefUtil.getValue('quality')!; + RxInt quality = Utils().prefUtil.getValue('quality')!.obs; - // 自动获取天气 - bool dynamicColor = Utils().prefUtil.getValue('dynamicColor')!; - bool autoWeather = Utils().prefUtil.getValue('autoWeather')!; + // 动态配色 + RxBool dynamicColor = Utils().prefUtil.getValue('dynamicColor')!.obs; + + // 自动天气 + RxBool autoWeather = Utils().prefUtil.getValue('autoWeather')!.obs; + + // 日记页头图 + RxBool diaryHeader = Utils().prefUtil.getValue('diaryHeader')!.obs; + + // 首行缩进 + RxBool firstLineIndent = Utils().prefUtil.getValue('firstLineIndent')!.obs; + + // 自动分类 + RxBool autoCategory = Utils().prefUtil.getValue('autoCategory')!.obs; + + // 展示写作时长 + RxBool showWriteTime = Utils().prefUtil.getValue('showWritingTime')!.obs; + + // 展示字数统计 + RxBool showWordCount = Utils().prefUtil.getValue('showWordCount')!.obs; DiarySettingState(); } diff --git a/lib/pages/diary_setting/diary_setting_view.dart b/lib/pages/diary_setting/diary_setting_view.dart index 540ebbb..d7d348e 100644 --- a/lib/pages/diary_setting/diary_setting_view.dart +++ b/lib/pages/diary_setting/diary_setting_view.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:get/get.dart'; +import 'package:mood_diary/components/tile/setting_tile.dart'; import 'diary_setting_logic.dart'; @@ -15,21 +16,108 @@ class DiarySettingPage extends StatelessWidget { final colorScheme = Theme.of(context).colorScheme; final i18n = AppLocalizations.of(context)!; - return Scaffold( - appBar: AppBar( - title: const Text('日记个性化'), - ), - body: ListView( - children: [ - ListTile( - title: Text(i18n.settingImageQuality), - subtitle: Text(i18n.settingImageQualityDes), - leading: const Icon(Icons.gradient_outlined), - trailing: GetBuilder( - id: 'Quality', - builder: (_) { + // 通用设置 + List buildCommon() { + return [ + const SettingTitleTile( + title: '通用', + subtitle: '所有模式共享的设置', + ), + Card.filled( + color: colorScheme.surfaceContainerLow, + child: Column( + children: [ + Obx(() { + return SwitchListTile( + value: state.autoWeather.value, + onChanged: (value) { + logic.autoWeather(value); + }, + title: const Text('自动获取天气'), + secondary: const Icon(Icons.wb_sunny_outlined), + ); + }), + Obx(() { + return SwitchListTile( + value: state.autoCategory.value, + onChanged: logic.autoCategory, + secondary: const Icon(Icons.category_outlined), + title: const Text('自动设置分类'), + ); + }), + Obx(() { + return SwitchListTile( + value: state.showWriteTime.value, + onChanged: logic.showWriteTime, + secondary: const Icon(Icons.timer_outlined), + title: const Text('展示写作时长'), + ); + }), + Obx(() { + return SwitchListTile( + value: state.showWordCount.value, + onChanged: logic.showWordCount, + secondary: const Icon(Icons.font_download_outlined), + title: const Text('展示字数统计'), + ); + }), + Obx(() { + return SwitchListTile( + value: state.dynamicColor.value, + onChanged: logic.dynamicColor, + secondary: const Icon(Icons.color_lens_outlined), + title: const Text('日记页动态配色'), + subtitle: const Text('使用基于封面的配色'), + ); + }), + ], + ), + ), + ]; + } + + List buildPureText() { + return [ + const SettingTitleTile( + title: '纯文本', + subtitle: '去除多余干扰,享受更专注的写作体验', + ), + Card.filled( + color: colorScheme.surfaceContainerLow, + child: Column( + children: [ + Obx(() { + return SwitchListTile( + value: state.firstLineIndent.value, + onChanged: logic.firstLineIndent, + title: const Text('首行缩进'), + secondary: const Icon(Icons.format_indent_increase), + subtitle: const Text('只对修改后的日记生效'), + ); + }), + ], + ), + ), + ]; + } + + List buildRichText() { + return [ + const SettingTitleTile( + title: '富文本', + subtitle: '支持更多样式及附件,让内容呈现更丰富', + ), + Card.filled( + color: colorScheme.surfaceContainerLow, + child: Column( + children: [ + ListTile( + title: Text(i18n.settingImageQuality), + subtitle: Text(i18n.settingImageQualityDes), + leading: const Icon(Icons.gradient_outlined), + trailing: Obx(() { return Text( - switch (state.quality) { + switch (state.quality.value) { 0 => i18n.qualityLow, 1 => i18n.qualityMedium, 2 => i18n.qualityHigh, @@ -40,13 +128,11 @@ class DiarySettingPage extends StatelessWidget { ), ); }), - onTap: () { - showDialog( - context: context, - builder: (context) { - return GetBuilder( - id: 'Quality', - builder: (_) { + onTap: () { + showDialog( + context: context, + builder: (context) { + return Obx(() { return SimpleDialog( title: Text(i18n.settingImageQuality), children: [ @@ -55,7 +141,7 @@ class DiarySettingPage extends StatelessWidget { spacing: 8.0, children: [ Text(i18n.qualityLow), - if (state.quality == 0) ...[ + if (state.quality.value == 0) ...[ const Icon(Icons.check), ], ], @@ -69,7 +155,7 @@ class DiarySettingPage extends StatelessWidget { spacing: 8.0, children: [ Text(i18n.qualityMedium), - if (state.quality == 1) ...[ + if (state.quality.value == 1) ...[ const Icon(Icons.check), ], ], @@ -83,7 +169,7 @@ class DiarySettingPage extends StatelessWidget { spacing: 8.0, children: [ Text(i18n.qualityHigh), - if (state.quality == 2) ...[ + if (state.quality.value == 2) ...[ const Icon(Icons.check), ], ], @@ -95,22 +181,32 @@ class DiarySettingPage extends StatelessWidget { ], ); }); - }); - }, - ), - GetBuilder( - id: 'AutoWeather', - builder: (_) { + }); + }, + ), + Obx(() { return SwitchListTile( - value: state.autoWeather, - onChanged: (value) { - logic.autoWeather(value); - }, - title: const Text('自动获取天气'), - secondary: const Icon(Icons.sunny), + value: state.diaryHeader.value, + onChanged: logic.diaryHeader, + title: const Text('日记页展示头图'), + secondary: const Icon(Icons.broken_image_outlined), ); - }) - ], + }), + ], + ), + ), + ]; + } + + return Scaffold( + appBar: AppBar( + title: const Text('日记个性化'), + ), + body: SafeArea( + child: ListView( + padding: const EdgeInsets.all(4.0), + children: [...buildRichText(), ...buildPureText(), ...buildCommon()], + ), ), ); } diff --git a/lib/pages/edit/edit_logic.dart b/lib/pages/edit/edit_logic.dart index 86e7927..95202ae 100644 --- a/lib/pages/edit/edit_logic.dart +++ b/lib/pages/edit/edit_logic.dart @@ -10,6 +10,7 @@ import 'package:image_picker/image_picker.dart'; import 'package:latlong2/latlong.dart'; import 'package:mood_diary/api/api.dart'; import 'package:mood_diary/common/models/isar/diary.dart'; +import 'package:mood_diary/common/values/diary_type.dart'; import 'package:mood_diary/components/quill_embed/text_indent.dart'; import 'package:mood_diary/components/quill_embed/video_embed.dart'; import 'package:mood_diary/router/app_routes.dart'; @@ -71,8 +72,7 @@ class EditLogic extends GetxController with WidgetsBindingObserver { @override void onInit() { - _calculateDuration(); - + if (state.showWriteTime) _calculateDuration(); WidgetsBinding.instance.addObserver(this); super.onInit(); } @@ -81,13 +81,15 @@ class EditLogic extends GetxController with WidgetsBindingObserver { void onReady() async { await _initEdit(); quillController.addListener(_listenCount); - quillController.document.changes.listen((change) { - var operations = change.change.operations; - var lastOperation = operations.last; - if (lastOperation.key == 'insert' && lastOperation.value == '\n') { - insertNewLine(); - } - }); + if (state.firstLineIndent) { + quillController.document.changes.listen((change) { + var operations = change.change.operations; + var lastOperation = operations.last; + if (lastOperation.key == 'insert' && lastOperation.value == '\n') { + insertNewLine(); + } + }); + } super.onReady(); } @@ -106,18 +108,22 @@ class EditLogic extends GetxController with WidgetsBindingObserver { } Future _initEdit() async { - //如果是新增 - if (Get.arguments == 'new') { + //如果是新增,更具不同的分类展示不同的操作 + if (Get.arguments.runtimeType == DiaryType) { + // 配置日记类型 + state.type = Get.arguments as DiaryType; + Utils().logUtil.printInfo(state.type); quillController = QuillController.basic(); state.currentDiary = Diary(); - insertNewLine(); - if (Utils().prefUtil.getValue('autoWeather') == true) { + if (state.firstLineIndent) insertNewLine(); + if (state.autoWeather) { unawaited(getPositionAndWeather()); } } else { //如果是编辑,将日记对象赋值 state.isNew = false; var oldDiary = Get.arguments as Diary; + state.type = DiaryType.values.firstWhere((type) => type.value == oldDiary.type); state.currentDiary = oldDiary; // 获取分类名称 if (oldDiary.categoryId != null) { @@ -359,6 +365,7 @@ class EditLogic extends GetxController with WidgetsBindingObserver { state.currentDiary ..title = titleTextEditingController.text ..content = content + ..type = state.type.value ..contentText = _toPlainText() ..audioName = state.audioNameList ..imageName = imageNameMap.values.toList() diff --git a/lib/pages/edit/edit_state.dart b/lib/pages/edit/edit_state.dart index 41ec899..ff93cb9 100644 --- a/lib/pages/edit/edit_state.dart +++ b/lib/pages/edit/edit_state.dart @@ -1,8 +1,11 @@ import 'package:cross_file/cross_file.dart'; import 'package:get/get_rx/src/rx_types/rx_types.dart'; import 'package:mood_diary/common/models/isar/diary.dart'; +import 'package:mood_diary/common/values/diary_type.dart'; import 'package:mood_diary/common/values/keyboard_state.dart'; +import '../../utils/utils.dart'; + class EditState { // 当前编辑的日记对象 late Diary currentDiary; @@ -47,5 +50,23 @@ class EditState { // 是否完成初始化 bool isInit = false; + // 日记的类型 + late DiaryType type; + + // 自动获取天气 + bool get autoWeather => Utils().prefUtil.getValue('autoWeather')!; + + // 首行缩进 + bool get firstLineIndent => (Utils().prefUtil.getValue('firstLineIndent')!) && type == DiaryType.text; + + // 自动分类 + bool get autoCategory => Utils().prefUtil.getValue('autoCategory')!; + + // 展示写作时长 + bool get showWriteTime => Utils().prefUtil.getValue('showWritingTime')!; + + // 展示字数统计 + bool get showWordCount => Utils().prefUtil.getValue('showWordCount')!; + EditState(); } diff --git a/lib/pages/edit/edit_view.dart b/lib/pages/edit/edit_view.dart index c0b5d90..93d4f13 100644 --- a/lib/pages/edit/edit_view.dart +++ b/lib/pages/edit/edit_view.dart @@ -10,7 +10,6 @@ import 'package:mood_diary/common/values/border.dart'; import 'package:mood_diary/common/values/colors.dart'; import 'package:mood_diary/components/audio_player/audio_player_view.dart'; import 'package:mood_diary/components/category_add/category_add_view.dart'; -import 'package:mood_diary/components/keepalive/keepalive.dart'; import 'package:mood_diary/components/lottie_modal/lottie_modal.dart'; import 'package:mood_diary/components/mood_icon/mood_icon_view.dart'; import 'package:mood_diary/components/quill_embed/image_embed.dart'; @@ -19,6 +18,7 @@ import 'package:mood_diary/components/quill_embed/video_embed.dart'; import 'package:mood_diary/components/record_sheet/record_sheet_view.dart'; import 'package:mood_diary/utils/utils.dart'; +import '../../common/values/diary_type.dart'; import '../../components/quill_embed/audio_embed.dart'; import 'edit_logic.dart'; @@ -629,7 +629,7 @@ class EditPage extends StatelessWidget { Widget buildTimer() { return Container( decoration: BoxDecoration( - color: colorScheme.surfaceContainerLow.withAlpha(220), + color: colorScheme.surfaceContainer.withAlpha(240), borderRadius: AppBorderRadius.smallBorderRadius, ), padding: const EdgeInsets.symmetric(horizontal: 8.0), @@ -654,7 +654,7 @@ class EditPage extends StatelessWidget { Widget buildCount() { return Container( decoration: BoxDecoration( - color: colorScheme.surfaceContainerLow.withAlpha(220), + color: colorScheme.surfaceContainer.withAlpha(240), borderRadius: AppBorderRadius.smallBorderRadius, ), padding: const EdgeInsets.symmetric(horizontal: 8.0), @@ -677,53 +677,42 @@ class EditPage extends StatelessWidget { } Widget buildTitle() { - return Container( - decoration: BoxDecoration( - color: colorScheme.surfaceContainerLow, - borderRadius: AppBorderRadius.smallBorderRadius, - ), - child: AutoSizeTextField( - controller: logic.titleTextEditingController, - focusNode: logic.titleFocusNode, - textAlign: TextAlign.center, - maxLines: 1, - style: textStyle.titleMedium!.copyWith(fontWeight: FontWeight.bold), - textInputAction: TextInputAction.done, - decoration: const InputDecoration( - border: UnderlineInputBorder(borderSide: BorderSide.none), - hintText: '标题', - contentPadding: EdgeInsets.symmetric(horizontal: 16.0), - ), + return AutoSizeTextField( + controller: logic.titleTextEditingController, + focusNode: logic.titleFocusNode, + textAlign: TextAlign.center, + maxLines: 1, + style: textStyle.titleLarge!.copyWith(fontWeight: FontWeight.bold), + textInputAction: TextInputAction.done, + decoration: const InputDecoration( + border: UnderlineInputBorder(borderSide: BorderSide.none), + hintText: '标题', + contentPadding: EdgeInsets.symmetric(horizontal: 16.0), ), ); } Widget buildToolBar() { - return Padding( - padding: const EdgeInsets.all(8.0), - child: TooltipTheme( - data: const TooltipThemeData(preferBelow: false), - child: QuillSimpleToolbar( - controller: logic.quillController, - config: QuillSimpleToolbarConfig( - showFontFamily: false, - showFontSize: false, - showColorButton: false, - showBackgroundColorButton: false, - showAlignmentButtons: true, - showClipboardPaste: false, - showClipboardCut: false, - showClipboardCopy: false, - showIndent: false, - showDividers: false, - headerStyleType: HeaderStyleType.buttons, - multiRowsDisplay: false, - showLink: false, - decoration: BoxDecoration( - color: colorScheme.surfaceContainerLow, - borderRadius: AppBorderRadius.smallBorderRadius, - ), - embedButtons: [ + return TooltipTheme( + data: const TooltipThemeData(preferBelow: false), + child: QuillSimpleToolbar( + controller: logic.quillController, + config: QuillSimpleToolbarConfig( + showFontFamily: false, + showFontSize: false, + showColorButton: false, + showBackgroundColorButton: false, + showAlignmentButtons: true, + showClipboardPaste: false, + showClipboardCut: false, + showClipboardCopy: false, + showIndent: false, + showDividers: false, + headerStyleType: HeaderStyleType.buttons, + multiRowsDisplay: false, + showLink: false, + embedButtons: [ + if (state.type == DiaryType.richText) ...FlutterQuillEmbeds.toolbarButtons( imageButtonOptions: QuillToolbarImageButtonOptions( imageButtonConfig: QuillToolbarImageConfig( @@ -742,6 +731,7 @@ class EditPage extends StatelessWidget { ), ), ), + if (state.type == DiaryType.richText) ( BuildContext context, EmbedButtonContext embedContext, @@ -764,28 +754,44 @@ class EditPage extends StatelessWidget { }, ); }, - ( - BuildContext context, - EmbedButtonContext embedContext, - ) { - return IconButton( - icon: const Icon( - Icons.format_indent_increase, - size: 24, - ), - tooltip: 'Insert Newline', - onPressed: () async { - logic.insertNewLine(); - }, - ); - }, - ], - ), + ( + BuildContext context, + EmbedButtonContext embedContext, + ) { + return IconButton( + icon: const Icon( + Icons.format_indent_increase, + size: 24, + ), + tooltip: 'Insert Newline', + onPressed: () async { + logic.insertNewLine(); + }, + ); + }, + ], ), ), ); } + Widget buildMoreButton() { + return IconButton.filled( + icon: const Icon(Icons.keyboard_command_key), + style: const ButtonStyle(tapTargetSize: MaterialTapTargetSize.shrinkWrap), + onPressed: () { + showModalBottomSheet( + context: context, + builder: (context) { + return buildDetail(); + }, + showDragHandle: true, + useSafeArea: true, + ); + }, + ); + } + Widget buildWriting() { return Column( children: [ @@ -802,10 +808,13 @@ class EditPage extends StatelessWidget { expands: true, paintCursorAboveText: true, keyboardAppearance: CupertinoTheme.maybeBrightnessOf(context) ?? Theme.of(context).brightness, + customStyles: Utils().themeUtil.getInstance(context), embedBuilders: [ - ImageEmbedBuilder(isEdit: true), - VideoEmbedBuilder(isEdit: true), - AudioEmbedBuilder(isEdit: true), + if (state.type == DiaryType.richText) ...[ + ImageEmbedBuilder(isEdit: true), + VideoEmbedBuilder(isEdit: true), + AudioEmbedBuilder(isEdit: true), + ], TextIndentEmbedBuilder(isEdit: true), ], ), @@ -818,14 +827,23 @@ class EditPage extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, spacing: 8.0, children: [ - buildTimer(), - buildCount(), + if (state.showWriteTime) buildTimer(), + if (state.showWordCount) buildCount(), ], )), ], ), ), - buildToolBar() + Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + spacing: 8.0, + children: [ + buildMoreButton(), + Expanded(child: buildToolBar()), + ], + ), + ) ], ); } @@ -856,49 +874,8 @@ class EditPage extends StatelessWidget { ), ], ), - body: state.isInit - ? (size.aspectRatio < 1.0 - ? PageView( - controller: logic.pageController, - physics: const NeverScrollableScrollPhysics(), - children: [ - KeepAliveWrapper(child: buildWriting()), - KeepAliveWrapper(child: buildDetail()) - ], - ) - : Row( - children: [ - Flexible(flex: 4, child: SafeArea(child: buildWriting())), - Flexible(flex: 3, child: buildDetail()) - ], - )) - : const Center(child: CircularProgressIndicator()), - bottomNavigationBar: size.aspectRatio < 1.0 - ? GetBuilder( - id: 'NavigationBar', - builder: (_) { - return NavigationBar( - destinations: const [ - NavigationDestination( - icon: Icon(Icons.edit_outlined), - label: '撰写', - selectedIcon: Icon(Icons.edit), - ), - NavigationDestination( - icon: Icon(Icons.more_outlined), - label: '更多', - selectedIcon: Icon(Icons.more), - ) - ], - labelBehavior: NavigationDestinationLabelBehavior.alwaysHide, - height: 56.0, - selectedIndex: state.tabIndex, - onDestinationSelected: (index) { - logic.selectTabView(index); - }, - ); - }) - : null, + body: + SafeArea(child: state.isInit ? buildWriting() : const Center(child: CircularProgressIndicator())), ); }), GetBuilder( diff --git a/lib/pages/home/home_logic.dart b/lib/pages/home/home_logic.dart index acb65e3..53d2480 100644 --- a/lib/pages/home/home_logic.dart +++ b/lib/pages/home/home_logic.dart @@ -7,6 +7,7 @@ import 'package:mood_diary/pages/home/diary/diary_logic.dart'; import 'package:mood_diary/router/app_routes.dart'; import 'package:mood_diary/utils/utils.dart'; +import '../../common/values/diary_type.dart'; import 'home_state.dart'; class HomeLogic extends GetxController with GetTickerProviderStateMixin { @@ -81,7 +82,7 @@ class HomeLogic extends GetxController with GetTickerProviderStateMixin { } //新增一篇日记 - Future toEditPage() async { + Future toEditPage({required DiaryType type}) async { //同时关闭fab await HapticFeedback.selectionClick(); fabAnimationController.reset(); @@ -89,8 +90,8 @@ class HomeLogic extends GetxController with GetTickerProviderStateMixin { update(['Fab']); /// 需要注意,返回值为 '' 时才是没有选择分类,而返回值为 null 时,是没有进行操作直接返回 - var res = await Get.toNamed(AppRoutes.editPage, arguments: 'new'); - + var res = await Get.toNamed(AppRoutes.editPage, arguments: type); + Utils().logUtil.printInfo(res); if (res != null) { if (res == '') { await diaryLogic.updateDiary(null); @@ -100,8 +101,6 @@ class HomeLogic extends GetxController with GetTickerProviderStateMixin { } } - - Future hideNavigatorBar() async { await barAnimationController.forward(); } diff --git a/lib/pages/home/home_view.dart b/lib/pages/home/home_view.dart index d656f67..5f40409 100644 --- a/lib/pages/home/home_view.dart +++ b/lib/pages/home/home_view.dart @@ -6,6 +6,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:get/get.dart'; import 'package:mood_diary/common/values/border.dart'; +import 'package:mood_diary/common/values/diary_type.dart'; import 'package:mood_diary/pages/home/calendar/calendar_view.dart'; import 'package:mood_diary/pages/home/diary/diary_view.dart'; import 'package:mood_diary/pages/home/media/media_view.dart'; @@ -25,6 +26,7 @@ class HomePage extends StatelessWidget { final i18n = AppLocalizations.of(context)!; final size = MediaQuery.sizeOf(context); final padding = MediaQuery.paddingOf(context); + final textStyle = Theme.of(context).textTheme; Widget buildModal() { return AnimatedBuilder( @@ -32,7 +34,7 @@ class HomePage extends StatelessWidget { builder: (context, child) { return state.isFabExpanded ? ModalBarrier( - color: colorScheme.surface.withAlpha((255 * 0.6 * logic.fabAnimation.value).toInt()), + color: colorScheme.surfaceContainer.withAlpha((255 * 0.6 * logic.fabAnimation.value).toInt()), onDismiss: () async { await logic.closeFab(); }, @@ -74,150 +76,91 @@ class HomePage extends StatelessWidget { : const SizedBox.shrink(); } - Widget buildAddDiaryButton() { - return AnimatedBuilder( - animation: logic.fabAnimation, - child: GestureDetector( - onTap: () async { - await logic.toEditPage(); + Widget buildAnimatedActionButton({ + required String label, + required Function() onTap, + required IconData iconData, + required int index, + }) { + const double mainButtonHeight = 56.0; + const double mainButtonSpacing = 8.0; + const double secondaryButtonHeight = 46.0; + + double calculateVerticalTranslation(int index, double animationValue) { + const double baseOffset = mainButtonHeight + mainButtonSpacing; + return index == 1 + ? baseOffset * index * animationValue + : (baseOffset + (secondaryButtonHeight + mainButtonSpacing) * (index - 1)) * animationValue; + } + + return Visibility( + visible: state.isFabExpanded, + child: AnimatedBuilder( + animation: logic.fabAnimation, + builder: (context, child) { + final verticalTranslation = calculateVerticalTranslation(index, logic.fabAnimation.value); + return Positioned( + left: 0, + right: 0, + bottom: verticalTranslation, + child: Opacity( + opacity: logic.fabAnimation.value, + child: child!, + ), + ); }, - child: Container( - decoration: ShapeDecoration( - shape: const RoundedRectangleBorder(borderRadius: AppBorderRadius.largeBorderRadius), - color: colorScheme.primaryContainer, - shadows: [ - BoxShadow( - color: colorScheme.shadow.withAlpha((255 * 0.1).toInt()), - offset: const Offset(0, 2), - blurRadius: 2, - spreadRadius: 2) - ]), - height: 56.0, - alignment: Alignment.center, + child: GestureDetector( + onTap: onTap, child: Row( - mainAxisSize: MainAxisSize.min, - spacing: 16.0, + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - FaIcon( - FontAwesomeIcons.feather, - color: colorScheme.onPrimaryContainer, + Container( + decoration: ShapeDecoration( + shape: const RoundedRectangleBorder(borderRadius: AppBorderRadius.smallBorderRadius), + color: colorScheme.secondaryContainer, + shadows: [ + BoxShadow( + color: colorScheme.shadow.withAlpha((255 * 0.1).toInt()), + offset: const Offset(0, 2), + blurRadius: 2, + spreadRadius: 2, + ), + ], + ), + padding: const EdgeInsets.fromLTRB(8.0, 4.0, 8.0, 4.0), + child: Text( + label, + style: textStyle.labelMedium!.copyWith(color: colorScheme.onSecondaryContainer), + ), ), - Text( - i18n.homePageAddDiaryButton, - style: TextStyle(color: colorScheme.onPrimaryContainer), + Container( + decoration: ShapeDecoration( + shape: const RoundedRectangleBorder(borderRadius: AppBorderRadius.largeBorderRadius), + color: colorScheme.primaryContainer, + shadows: [ + BoxShadow( + color: colorScheme.shadow.withAlpha((255 * 0.1).toInt()), + offset: const Offset(0, 2), + blurRadius: 2, + spreadRadius: 2, + ), + ], + ), + width: 56.0, + height: 46.0, + alignment: Alignment.center, + child: FaIcon( + iconData, + color: colorScheme.onPrimaryContainer, + ), ), ], ), ), ), - builder: (context, child) { - return Transform( - transform: Matrix4.identity() - ..scale(pow(logic.fabAnimation.value, 2).toDouble(), logic.fabAnimation.value) - ..translate(.0, -((56.0 + 8.0)) * logic.fabAnimation.value), - alignment: FractionalOffset.centerRight, - child: child, - ); - }, ); } - // Widget buildToAiButton() { - // return AnimatedBuilder( - // animation: logic.fabAnimation, - // child: GestureDetector( - // onTap: () async { - // await logic.toAi(); - // }, - // child: Container( - // decoration: ShapeDecoration( - // shape: const RoundedRectangleBorder(borderRadius: AppBorderRadius.largeBorderRadius), - // color: colorScheme.primaryContainer, - // shadows: [ - // BoxShadow( - // color: colorScheme.shadow.withAlpha((255 * 0.1).toInt()), - // offset: const Offset(0, 2), - // blurRadius: 2, - // spreadRadius: 2) - // ]), - // height: 56.0, - // alignment: Alignment.center, - // child: Row( - // mainAxisSize: MainAxisSize.min, - // spacing: 16.0, - // children: [ - // FaIcon( - // FontAwesomeIcons.solidCommentDots, - // color: colorScheme.onPrimaryContainer, - // ), - // Text( - // '智能助手', - // style: TextStyle(color: colorScheme.onPrimaryContainer), - // ), - // ], - // ), - // ), - // ), - // builder: (context, child) { - // return Transform( - // transform: Matrix4.identity() - // ..scale(pow(logic.fabAnimation.value, 2).toDouble(), logic.fabAnimation.value) - // ..translate(.0, -((56.0 + 8.0) * 3) * logic.fabAnimation.value), - // alignment: FractionalOffset.centerRight, - // child: child, - // ); - // }, - // ); - // } - - // Widget buildToMapButton() { - // return AnimatedBuilder( - // animation: logic.fabAnimation, - // child: GestureDetector( - // onTap: () async { - // await logic.toMap(); - // }, - // child: Container( - // decoration: ShapeDecoration( - // shape: const RoundedRectangleBorder(borderRadius: AppBorderRadius.largeBorderRadius), - // color: colorScheme.primaryContainer, - // shadows: [ - // BoxShadow( - // color: colorScheme.shadow.withAlpha((255 * 0.1).toInt()), - // offset: const Offset(0, 2), - // blurRadius: 2, - // spreadRadius: 2) - // ]), - // height: 56.0, - // alignment: Alignment.center, - // child: Row( - // mainAxisSize: MainAxisSize.min, - // spacing: 16.0, - // children: [ - // FaIcon( - // FontAwesomeIcons.solidMap, - // color: colorScheme.onPrimaryContainer, - // ), - // Text( - // '查看足迹', - // style: TextStyle(color: colorScheme.onPrimaryContainer), - // ), - // ], - // ), - // ), - // ), - // builder: (context, child) { - // return Transform( - // transform: Matrix4.identity() - // ..scale(pow(logic.fabAnimation.value, 2).toDouble(), logic.fabAnimation.value) - // ..translate(.0, -((56.0 + 8.0) * 2) * logic.fabAnimation.value), - // alignment: FractionalOffset.centerRight, - // child: child, - // ); - // }, - // ); - // } - Widget buildFabButton() { return AnimatedBuilder( animation: logic.fabAnimation, @@ -232,20 +175,21 @@ class HomePage extends StatelessWidget { decoration: ShapeDecoration( shape: const RoundedRectangleBorder(borderRadius: AppBorderRadius.largeBorderRadius), color: Color.lerp( - colorScheme.primaryContainer, colorScheme.tertiaryContainer, logic.fabAnimation.value), + colorScheme.primaryContainer, colorScheme.surfaceContainerHighest, logic.fabAnimation.value), shadows: [ BoxShadow( - color: colorScheme.shadow.withAlpha((255 * 0.1).toInt()), - offset: const Offset(0, 2), - blurRadius: 2, - spreadRadius: 2) + color: colorScheme.shadow.withAlpha((255 * 0.1).toInt()), + offset: const Offset(0, 2), + blurRadius: 2, + spreadRadius: 2, + ), ]), child: Transform.rotate( angle: 3 * pi / 4 * logic.fabAnimation.value, child: Icon( FontAwesomeIcons.plus, - color: Color.lerp( - colorScheme.onPrimaryContainer, colorScheme.onTertiaryContainer, logic.fabAnimation.value), + color: + Color.lerp(colorScheme.onPrimaryContainer, colorScheme.onSurface, logic.fabAnimation.value), )), ), ); @@ -255,15 +199,26 @@ class HomePage extends StatelessWidget { Widget buildFab() { return state.navigatorIndex == 0 ? SizedBox( - height: state.isFabExpanded || state.isToTopShow ? 56 + (56 + 8) * 1 : 56, - width: state.isFabExpanded ? 156 : 56, + height: 56 + 46 + 46 + 16, + width: 56 + 32 + textStyle.labelMedium!.fontSize! * 3, child: Stack( alignment: Alignment.bottomRight, children: [ buildToTopButton(), - // buildToAiButton(), - // buildToMapButton(), - buildAddDiaryButton(), + buildAnimatedActionButton( + label: '纯文字', + onTap: () async { + await logic.toEditPage(type: DiaryType.text); + }, + iconData: FontAwesomeIcons.font, + index: 2), + buildAnimatedActionButton( + label: '富文本', + onTap: () async { + await logic.toEditPage(type: DiaryType.richText); + }, + iconData: FontAwesomeIcons.feather, + index: 1), buildFabButton(), ], ), diff --git a/lib/pages/home/setting/setting_logic.dart b/lib/pages/home/setting/setting_logic.dart index f929c9d..79f8faa 100644 --- a/lib/pages/home/setting/setting_logic.dart +++ b/lib/pages/home/setting/setting_logic.dart @@ -139,14 +139,14 @@ class SettingLogic extends GetxController { } } - // //更改字体 - // Future changeFontTheme(int value) async { - // Get.backLegacy(); - // await Utils().prefUtil.setValue('fontTheme', value); - // state.fontTheme.value = value; - // Get.changeTheme(await Utils().themeUtil.buildTheme(Brightness.light)); - // Get.changeTheme(await Utils().themeUtil.buildTheme(Brightness.dark)); - // } + //更改字体 + Future changeFontTheme(int value) async { + Get.backLegacy(); + await Utils().prefUtil.setValue('fontTheme', value); + state.fontTheme.value = value; + Get.changeTheme(Utils().themeUtil.buildTheme(Brightness.light)); + Get.changeTheme(Utils().themeUtil.buildTheme(Brightness.dark)); + } Future exportFile() async { Get.backLegacy(); diff --git a/lib/pages/home/setting/setting_state.dart b/lib/pages/home/setting/setting_state.dart index de66d8f..00fe622 100644 --- a/lib/pages/home/setting/setting_state.dart +++ b/lib/pages/home/setting/setting_state.dart @@ -1,3 +1,4 @@ +import 'package:get/get_rx/src/rx_types/rx_types.dart'; import 'package:mood_diary/utils/utils.dart'; class SettingState { @@ -8,7 +9,7 @@ class SettingState { int color = Utils().prefUtil.getValue('color')!; - // late RxInt fontTheme; + late RxInt fontTheme; bool lock = Utils().prefUtil.getValue('lock')!; @@ -19,6 +20,6 @@ class SettingState { String customTitle = Utils().prefUtil.getValue('customTitleName')!; SettingState() { - // fontTheme = Utils().prefUtil.getValue('fontTheme')!.obs; + fontTheme = Utils().prefUtil.getValue('fontTheme')!.obs; } } diff --git a/lib/pages/home/setting/setting_view.dart b/lib/pages/home/setting/setting_view.dart index 9b8ded8..07c27ad 100644 --- a/lib/pages/home/setting/setting_view.dart +++ b/lib/pages/home/setting/setting_view.dart @@ -8,6 +8,7 @@ import 'package:mood_diary/components/dashboard/dashboard_view.dart'; import 'package:mood_diary/components/remove_password/remove_password_view.dart'; import 'package:mood_diary/components/set_password/set_password_view.dart'; import 'package:mood_diary/components/theme_mode_dialog/theme_mode_dialog_view.dart'; +import 'package:mood_diary/components/tile/setting_tile.dart'; import 'setting_logic.dart'; @@ -50,12 +51,7 @@ class SettingPage extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - ListTile( - title: Text( - '功能', - style: textStyle.titleLarge!.copyWith(color: colorScheme.primary, fontWeight: FontWeight.bold), - ), - ), + const SettingTitleTile(title: '功能'), GridView( gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(maxCrossAxisExtent: 100, childAspectRatio: 1.0), @@ -100,12 +96,7 @@ class SettingPage extends StatelessWidget { Widget buildData() { return Column( children: [ - ListTile( - title: Text( - i18n.settingData, - style: textStyle.titleLarge!.copyWith(color: colorScheme.primary, fontWeight: FontWeight.bold), - ), - ), + SettingTitleTile(title: i18n.settingData), Card.filled( color: colorScheme.surfaceContainerLow, child: Column( @@ -208,19 +199,14 @@ class SettingPage extends StatelessWidget { Widget buildDisplay() { return Column( children: [ - ListTile( - title: Text( - i18n.settingDisplay, - style: textStyle.titleLarge!.copyWith(color: colorScheme.primary, fontWeight: FontWeight.bold), - ), - ), + SettingTitleTile(title: i18n.settingDisplay), Card.filled( color: colorScheme.surfaceContainerLow, child: Column( children: [ ListTile( title: Text(i18n.settingDiary), - leading: const Icon(Icons.article), + leading: const Icon(Icons.article_outlined), trailing: const Icon(Icons.chevron_right), onTap: () { logic.toDiarySettingPage(); @@ -272,7 +258,6 @@ class SettingPage extends StatelessWidget { }); }, ), - ListTile( title: Text(i18n.settingFontSize), leading: const Icon(Icons.format_size_outlined), @@ -281,85 +266,75 @@ class SettingPage extends StatelessWidget { logic.toFontSizePage(); }, ), - // ListTile( - // title: Text(i18n.settingFontStyle), - // leading: const Icon(Icons.text_format_outlined), - // trailing: Obx(() { - // return Text( - // switch (state.fontTheme.value) { - // 0 => '思源黑体', - // 1 => '思源宋体', - // int() => throw UnimplementedError(), - // }, - // style: textStyle.bodySmall!.copyWith( - // color: colorScheme.primary, - // ), - // ); - // }), - // onTap: () { - // showDialog( - // context: context, - // builder: (context) { - // return Obx(() { - // return SimpleDialog( - // title: Text(i18n.settingFontStyle), - // children: [ - // SimpleDialogOption( - // child: Row( - // children: [ - // const Text( - // '思源黑体', - // style: TextStyle( - // fontFamily: 'NotoSans SC', fontFamilyFallback: ['NotoSans SC']), - // ), - // const SizedBox( - // width: 10, - // ), - // if (state.fontTheme.value == 0) ...[ - // const Icon(Icons.check), - // ] - // ], - // ), - // onPressed: () { - // logic.changeFontTheme(0); - // }, - // ), - // SimpleDialogOption( - // child: Row( - // children: [ - // const Text( - // '思源宋体', - // style: TextStyle( - // fontFamily: 'NotoSerif SC', fontFamilyFallback: ['NotoSerif SC']), - // ), - // const SizedBox( - // width: 10, - // ), - // if (state.fontTheme.value == 1) ...[ - // const Icon(Icons.check), - // ] - // ], - // ), - // onPressed: () { - // logic.changeFontTheme(1); - // }, - // ), - // ], - // ); - // }); - // }); - // }, - // ), - // Obx(() { - // return SwitchListTile( - // value: state.getWeather.value, - // onChanged: (value) { - // logic.weather(value); - // }, - // title: Text(i18n.settingWeather), - // secondary: const Icon(Icons.sunny), - // ); - // }), + ListTile( + title: Text(i18n.settingFontStyle), + leading: const Icon(Icons.text_format_outlined), + trailing: Obx(() { + return Text( + switch (state.fontTheme.value) { + 0 => '思源黑体', + 1 => '思源宋体', + int() => throw UnimplementedError(), + }, + style: textStyle.bodySmall!.copyWith( + color: colorScheme.primary, + ), + ); + }), + onTap: () { + showDialog( + context: context, + builder: (context) { + return Obx(() { + return SimpleDialog( + title: Text(i18n.settingFontStyle), + children: [ + SimpleDialogOption( + child: Row( + children: [ + const Text( + '思源黑体', + style: + TextStyle(fontFamily: 'NotoSans SC', fontFamilyFallback: ['NotoSans SC']), + ), + const SizedBox( + width: 10, + ), + if (state.fontTheme.value == 0) ...[ + const Icon(Icons.check), + ] + ], + ), + onPressed: () { + logic.changeFontTheme(0); + }, + ), + SimpleDialogOption( + child: Row( + children: [ + const Text( + '思源宋体', + style: + TextStyle(fontFamily: 'NotoSerif SC', fontFamilyFallback: ['NotoSerif SC']), + ), + const SizedBox( + width: 10, + ), + if (state.fontTheme.value == 1) ...[ + const Icon(Icons.check), + ] + ], + ), + onPressed: () { + logic.changeFontTheme(1); + }, + ), + ], + ); + }); + }); + }, + ), ListTile( title: const Text('自定义首页名称'), leading: const Icon(Icons.drive_file_rename_outline), @@ -417,12 +392,7 @@ class SettingPage extends StatelessWidget { Widget buildPrivacy() { return Column( children: [ - ListTile( - title: Text( - i18n.settingPrivacy, - style: textStyle.titleLarge!.copyWith(color: colorScheme.primary, fontWeight: FontWeight.bold), - ), - ), + SettingTitleTile(title: i18n.settingPrivacy), Card.filled( color: colorScheme.surfaceContainerLow, child: Column( @@ -505,12 +475,7 @@ class SettingPage extends StatelessWidget { Widget buildMore() { return Column( children: [ - ListTile( - title: Text( - i18n.settingMore, - style: textStyle.titleLarge!.copyWith(color: colorScheme.primary, fontWeight: FontWeight.bold), - ), - ), + SettingTitleTile(title: i18n.settingMore), Card.filled( color: colorScheme.surfaceContainerLow, child: Column( diff --git a/lib/utils/data/isar.dart b/lib/utils/data/isar.dart index 0faa7c6..1259d73 100644 --- a/lib/utils/data/isar.dart +++ b/lib/utils/data/isar.dart @@ -3,6 +3,7 @@ import 'package:latlong2/latlong.dart'; import 'package:mood_diary/common/models/isar/category.dart'; import 'package:mood_diary/common/models/isar/diary.dart'; import 'package:mood_diary/common/models/map.dart'; +import 'package:mood_diary/common/values/diary_type.dart'; import 'package:mood_diary/utils/utils.dart'; import 'package:path/path.dart'; import 'package:uuid/uuid.dart'; @@ -234,12 +235,14 @@ class IsarUtil { return await _isar.diarys.where().findAllAsync(offset: offset, limit: limit); } + /// 2.4.8 版本变更 + /// 新增字段 + /// 1.position 用于记录位置 void mergeToV2_4_8(String dir) { var isar = Isar.open( schemas: [DiarySchema, CategorySchema], directory: dir, ); - // 如果当前数据库版本小雨 final countDiary = isar.diarys.where().count(); for (var i = 0; i < countDiary; i += 50) { var diaries = isar.diarys.where().findAll(offset: i, limit: 50); @@ -250,6 +253,30 @@ class IsarUtil { isar.close(); } + /// 2.6.0 版本变更 + /// 新增字段 + /// 1.type 类型字段,用于表示是纯文本还是富文本 + /// 变更 + void mergeToV2_6_0(String dir) { + var isar = Isar.open( + schemas: [DiarySchema, CategorySchema], + directory: dir, + ); + final countDiary = isar.diarys.where().count(); + for (var i = 0; i < countDiary; i += 50) { + var diaries = isar.diarys.where().findAll(offset: i, limit: 50); + isar.write((isar) { + for (var diary in diaries) { + if (diary.type == null) { + diary.type = DiaryType.richText.value; + isar.diarys.put(diary); + } + } + }); + } + isar.close(); + } + // 获取用于地图显示的对象 Future> getAllMapItem() async { List res = []; diff --git a/lib/utils/data/pref.dart b/lib/utils/data/pref.dart index 99fd62a..ee1a30a 100644 --- a/lib/utils/data/pref.dart +++ b/lib/utils/data/pref.dart @@ -66,7 +66,19 @@ class PrefUtil { //首页视图模式 'homeViewMode', //自动获取天气 - 'autoWeather' + 'autoWeather', + //webdav配置 + 'webDavOption', + // 日记展示头图 + 'diaryHeader', + // 首行缩进 + 'firstLineIndent', + // 自动设置分类 + 'autoCategory', + // 展示写作时长 + 'showWritingTime', + // 展示字数统计 + 'showWordCount', }; Future initPref() async { @@ -86,6 +98,11 @@ class PrefUtil { if (appVersion != null && appVersion.split('+')[0].compareTo('2.4.8') < 0) { await compute(Utils().isarUtil.mergeToV2_4_8, Utils().fileUtil.getRealPath('database', '')); } + + /// v2.6.0 + if (appVersion != null && appVersion.split('+')[0].compareTo('2.6.0') < 0) { + await compute(Utils().isarUtil.mergeToV2_6_0, Utils().fileUtil.getRealPath('database', '')); + } // 如果是首次启动或版本不一致 if (kDebugMode || firstStart || appVersion == null || appVersion != currentVersion) { await _prefs.setString('appVersion', currentVersion); @@ -134,6 +151,12 @@ class PrefUtil { await _prefs.setString('customTitleName', _prefs.getString('customTitleName') ?? ''); await _prefs.setInt('homeViewMode', _prefs.getInt('homeViewMode') ?? ViewModeType.list.number); await _prefs.setBool('autoWeather', _prefs.getBool('autoWeather') ?? false); + await _prefs.setStringList('webDavOption', _prefs.getStringList('webDavOption') ?? []); + await _prefs.setBool('diaryHeader', _prefs.getBool('diaryHeader') ?? true); + await _prefs.setBool('firstLineIndent', _prefs.getBool('firstLineIndent') ?? false); + await _prefs.setBool('autoCategory', _prefs.getBool('autoCategory') ?? false); + await _prefs.setBool('showWritingTime', _prefs.getBool('showWritingTime') ?? true); + await _prefs.setBool('showWordCount', _prefs.getBool('showWordCount') ?? true); } Future setValue(String key, T value) async { diff --git a/lib/utils/theme_util.dart b/lib/utils/theme_util.dart index 79c6f40..26a4eea 100644 --- a/lib/utils/theme_util.dart +++ b/lib/utils/theme_util.dart @@ -1,6 +1,8 @@ +import 'package:chinese_font_library/chinese_font_library.dart'; import 'package:dynamic_color/dynamic_color.dart'; import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; +import 'package:flutter_quill/flutter_quill.dart'; +import 'package:flutter_quill/flutter_quill_internal.dart'; import 'package:mood_diary/common/values/colors.dart'; import 'package:mood_diary/utils/utils.dart'; @@ -21,10 +23,62 @@ class ThemeUtil { 2 => AppColor.themeColorList[2], 3 => AppColor.themeColorList[3], 4 => AppColor.themeColorList[4], - //-1为系统配色,如果选了-1,肯定有 + // -1为系统配色,如果选了-1,肯定有 _ => Color(Utils().prefUtil.getValue('systemColor')!) }; + // 添加 fontVariations 的函数 + TextTheme addFontVariationsToTextTheme(TextTheme baseTheme) { + return baseTheme.copyWith( + displayLarge: baseTheme.displayLarge?.copyWith( + fontVariations: [const FontVariation('wght', 400)], + ), + displayMedium: baseTheme.displayMedium?.copyWith( + fontVariations: [const FontVariation('wght', 400)], + ), + displaySmall: baseTheme.displaySmall?.copyWith( + fontVariations: [const FontVariation('wght', 400)], + ), + headlineLarge: baseTheme.headlineLarge?.copyWith( + fontVariations: [const FontVariation('wght', 500)], + ), + headlineMedium: baseTheme.headlineMedium?.copyWith( + fontVariations: [const FontVariation('wght', 500)], + ), + headlineSmall: baseTheme.headlineSmall?.copyWith( + fontVariations: [const FontVariation('wght', 500)], + ), + titleLarge: baseTheme.titleLarge?.copyWith( + fontVariations: [const FontVariation('wght', 600)], + ), + titleMedium: baseTheme.titleMedium?.copyWith( + fontVariations: [const FontVariation('wght', 500)], + ), + titleSmall: baseTheme.titleSmall?.copyWith( + fontVariations: [const FontVariation('wght', 400)], + ), + bodyLarge: baseTheme.bodyLarge?.copyWith( + fontVariations: [const FontVariation('wght', 400)], + ), + bodyMedium: baseTheme.bodyMedium?.copyWith( + fontVariations: [const FontVariation('wght', 400)], + ), + bodySmall: baseTheme.bodySmall?.copyWith( + fontVariations: [const FontVariation('wght', 300)], + ), + labelLarge: baseTheme.labelLarge?.copyWith( + fontVariations: [const FontVariation('wght', 500)], + ), + labelMedium: baseTheme.labelMedium?.copyWith( + fontVariations: [const FontVariation('wght', 400)], + ), + labelSmall: baseTheme.labelSmall?.copyWith( + fontVariations: [const FontVariation('wght', 300)], + ), + ); + } + + // 创建基础的 ThemeData var themeData = ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: seedColor, @@ -33,6 +87,251 @@ class ThemeUtil { ), ); - return themeData; + // 使用系统中文字体的扩展 + return themeData.useSystemChineseFont(brightness); + } + + DefaultStyles getInstance(BuildContext context) { + final themeData = Theme.of(context); + final textStyle = Theme.of(context).textTheme; + final baseStyle = textStyle.bodyMedium!.copyWith( + fontSize: 16, + height: 1.5, + decoration: TextDecoration.none, + ); + const baseHorizontalSpacing = HorizontalSpacing(0, 0); + const baseVerticalSpacing = VerticalSpacing(6, 0); + final fontFamily = themeData.isCupertino ? 'Menlo' : 'Roboto Mono'; + + final inlineCodeStyle = TextStyle( + fontSize: 14, + color: themeData.colorScheme.primary.withAlpha(200), + fontFamily: fontFamily, + ); + + return DefaultStyles( + h1: DefaultTextBlockStyle( + textStyle.titleLarge!.copyWith( + fontSize: 34, + color: textStyle.titleLarge!.color, + letterSpacing: -0.5, + height: 1.083, + fontWeight: FontWeight.bold, + decoration: TextDecoration.none, + ), + baseHorizontalSpacing, + const VerticalSpacing(16, 0), + VerticalSpacing.zero, + null), + h2: DefaultTextBlockStyle( + textStyle.titleMedium!.copyWith( + fontSize: 30, + color: textStyle.titleMedium!.color, + letterSpacing: -0.8, + height: 1.067, + fontWeight: FontWeight.bold, + decoration: TextDecoration.none, + ), + baseHorizontalSpacing, + const VerticalSpacing(8, 0), + VerticalSpacing.zero, + null), + h3: DefaultTextBlockStyle( + textStyle.titleSmall!.copyWith( + fontSize: 24, + color: textStyle.titleSmall!.color, + letterSpacing: -0.5, + height: 1.083, + fontWeight: FontWeight.bold, + decoration: TextDecoration.none, + ), + baseHorizontalSpacing, + const VerticalSpacing(8, 0), + VerticalSpacing.zero, + null, + ), + h4: DefaultTextBlockStyle( + textStyle.titleSmall!.copyWith( + fontSize: 20, + color: textStyle.titleSmall!.color, + letterSpacing: -0.4, + height: 1.1, + fontWeight: FontWeight.bold, + decoration: TextDecoration.none, + ), + baseHorizontalSpacing, + const VerticalSpacing(6, 0), + VerticalSpacing.zero, + null, + ), + h5: DefaultTextBlockStyle( + textStyle.titleSmall!.copyWith( + fontSize: 18, + color: textStyle.titleSmall!.color, + letterSpacing: -0.2, + height: 1.11, + fontWeight: FontWeight.bold, + decoration: TextDecoration.none, + ), + baseHorizontalSpacing, + const VerticalSpacing(6, 0), + VerticalSpacing.zero, + null, + ), + h6: DefaultTextBlockStyle( + textStyle.titleSmall!.copyWith( + fontSize: 16, + color: textStyle.titleSmall!.color, + letterSpacing: -0.1, + height: 1.125, + fontWeight: FontWeight.bold, + decoration: TextDecoration.none, + ), + baseHorizontalSpacing, + const VerticalSpacing(4, 0), + VerticalSpacing.zero, + null, + ), + lineHeightNormal: DefaultTextBlockStyle( + baseStyle.copyWith(height: 1.15), + baseHorizontalSpacing, + VerticalSpacing.zero, + VerticalSpacing.zero, + null, + ), + lineHeightTight: DefaultTextBlockStyle( + baseStyle.copyWith(height: 1.30), + baseHorizontalSpacing, + VerticalSpacing.zero, + VerticalSpacing.zero, + null, + ), + lineHeightOneAndHalf: DefaultTextBlockStyle( + baseStyle.copyWith(height: 1.55), + baseHorizontalSpacing, + VerticalSpacing.zero, + VerticalSpacing.zero, + null, + ), + lineHeightDouble: DefaultTextBlockStyle( + baseStyle.copyWith(height: 2), + baseHorizontalSpacing, + VerticalSpacing.zero, + VerticalSpacing.zero, + null, + ), + paragraph: DefaultTextBlockStyle( + baseStyle, + baseHorizontalSpacing, + VerticalSpacing.zero, + VerticalSpacing.zero, + null, + ), + bold: const TextStyle(fontWeight: FontWeight.bold), + subscript: const TextStyle( + fontFeatures: [ + FontFeature.liningFigures(), + FontFeature.subscripts(), + ], + ), + superscript: const TextStyle( + fontFeatures: [ + FontFeature.liningFigures(), + FontFeature.superscripts(), + ], + ), + italic: const TextStyle(fontStyle: FontStyle.italic), + small: const TextStyle(fontSize: 12), + underline: const TextStyle(decoration: TextDecoration.underline), + strikeThrough: const TextStyle(decoration: TextDecoration.lineThrough), + inlineCode: InlineCodeStyle( + backgroundColor: Colors.grey.shade100, + radius: const Radius.circular(3), + style: inlineCodeStyle, + header1: inlineCodeStyle.copyWith( + fontSize: 32, + fontWeight: FontWeight.w500, + ), + header2: inlineCodeStyle.copyWith( + fontSize: 22, + fontWeight: FontWeight.w500, + ), + header3: inlineCodeStyle.copyWith( + fontSize: 18, + fontWeight: FontWeight.w500, + ), + ), + link: TextStyle( + color: themeData.colorScheme.secondary, + decoration: TextDecoration.underline, + ), + placeHolder: DefaultTextBlockStyle( + baseStyle.copyWith( + fontSize: 20, + height: 1.5, + color: Colors.grey.withOpacity(0.6), + ), + baseHorizontalSpacing, + VerticalSpacing.zero, + VerticalSpacing.zero, + null), + lists: DefaultListBlockStyle( + baseStyle, + baseHorizontalSpacing, + baseVerticalSpacing, + const VerticalSpacing(0, 6), + null, + null, + ), + quote: DefaultTextBlockStyle( + TextStyle(color: baseStyle.color!.withOpacity(0.6)), + baseHorizontalSpacing, + baseVerticalSpacing, + const VerticalSpacing(6, 2), + BoxDecoration( + border: Border( + left: BorderSide(width: 4, color: Colors.grey.shade300), + ), + ), + ), + code: DefaultTextBlockStyle( + TextStyle( + color: Colors.blue.shade900.withOpacity(0.9), + fontFamily: fontFamily, + fontSize: 13, + height: 1.15, + ), + baseHorizontalSpacing, + baseVerticalSpacing, + VerticalSpacing.zero, + BoxDecoration( + color: Colors.grey.shade50, + borderRadius: BorderRadius.circular(2), + )), + indent: DefaultTextBlockStyle( + baseStyle, + baseHorizontalSpacing, + baseVerticalSpacing, + const VerticalSpacing(0, 6), + null, + ), + align: DefaultTextBlockStyle( + baseStyle, + baseHorizontalSpacing, + VerticalSpacing.zero, + VerticalSpacing.zero, + null, + ), + leading: DefaultTextBlockStyle( + baseStyle, + baseHorizontalSpacing, + VerticalSpacing.zero, + VerticalSpacing.zero, + null, + ), + sizeSmall: const TextStyle(fontSize: 10), + sizeLarge: const TextStyle(fontSize: 18), + sizeHuge: const TextStyle(fontSize: 22), + ); } } diff --git a/pubspec.lock b/pubspec.lock index e16d483..f8e3bee 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1269,11 +1269,10 @@ packages: isar_flutter_libs: dependency: "direct main" description: - path: "packages/isar_flutter_libs" - ref: HEAD - resolved-ref: "456a7fec4e6f19658426b73ebc5004c5bf08f70b" - url: "https://github.com/ZhuJHua/isar" - source: git + name: isar_flutter_libs + sha256: "04a3f4035e213ddb6e78d0132a7c80296a085c2088c2a761b4a42ee5add36983" + url: "https://pub.flutter-io.cn" + source: hosted version: "4.0.0-dev.14" js: dependency: transitive diff --git a/pubspec.yaml b/pubspec.yaml index 3478c48..f37d087 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -58,10 +58,7 @@ dependencies: geolocator: 13.0.2 shared_preferences: 2.3.3 isar: 4.0.0-dev.14 - isar_flutter_libs: - git: - url: https://github.com/ZhuJHua/isar - path: packages/isar_flutter_libs + isar_flutter_libs: 4.0.0-dev.14 fluttertoast: 8.2.8 cached_network_image: 3.4.1 audioplayers: 6.1.0 @@ -145,9 +142,6 @@ flutter: - family: qweather fonts: - asset: assets/fonts/qweather-icons.ttf - - family: noto serif - fonts: - - asset: assets/fonts/NotoSerifSC-VariableFont_wght.ttf assets: - assets/icon/ From 74a33ef32017a3185a2a4f8c20dd5e9e1923759f Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Tue, 3 Dec 2024 21:11:22 +0800 Subject: [PATCH 15/20] build(*): platform build option --- ios/Podfile.lock | 86 ++++++++++--------- ios/Runner.xcodeproj/project.pbxproj | 16 +++- macos/Flutter/GeneratedPluginRegistrant.swift | 8 ++ .../flutter/generated_plugin_registrant.cc | 6 ++ windows/flutter/generated_plugins.cmake | 2 + 5 files changed, 74 insertions(+), 44 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 2577234..f961a5e 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -3,6 +3,9 @@ PODS: - Flutter - audioplayers_darwin (0.0.1): - Flutter + - connectivity_plus (0.0.1): + - Flutter + - FlutterMacOS - device_info_plus (0.0.1): - Flutter - DKImagePickerController/Core (4.3.9): @@ -43,42 +46,30 @@ PODS: - DKImagePickerController/PhotoGallery - Flutter - Flutter (1.0.0) - - flutter_image_compress_common (1.0.0): + - flutter_inappwebview_ios (0.0.1): - Flutter - - Mantle - - SDWebImage - - SDWebImageWebPCoder + - flutter_inappwebview_ios/Core (= 0.0.1) + - OrderedSet (~> 6.0.3) + - flutter_inappwebview_ios/Core (0.0.1): + - Flutter + - OrderedSet (~> 6.0.3) - flutter_keyboard_visibility_temp_fork (0.0.1): - Flutter - fluttertoast (0.0.2): - Flutter - Toast + - gal (1.0.0): + - Flutter + - FlutterMacOS - geolocator_apple (1.2.0): - Flutter - image_picker_ios (0.0.1): - Flutter - - integration_test (0.0.1): - - Flutter - isar_flutter_libs (1.0.0): - Flutter - - libwebp (1.3.2): - - libwebp/demux (= 1.3.2) - - libwebp/mux (= 1.3.2) - - libwebp/sharpyuv (= 1.3.2) - - libwebp/webp (= 1.3.2) - - libwebp/demux (1.3.2): - - libwebp/webp - - libwebp/mux (1.3.2): - - libwebp/demux - - libwebp/sharpyuv (1.3.2) - - libwebp/webp (1.3.2): - - libwebp/sharpyuv - local_auth_darwin (0.0.1): - Flutter - FlutterMacOS - - Mantle (2.2.0): - - Mantle/extobjc (= 2.2.0) - - Mantle/extobjc (2.2.0) - media_kit_libs_ios_video (1.0.4): - Flutter - media_kit_native_event_loop (1.0.0): @@ -91,6 +82,7 @@ PODS: - objectbox_flutter_libs (0.0.1): - Flutter - ObjectBox (= 4.0.1) + - OrderedSet (6.0.3) - package_info_plus (0.4.5): - Flutter - path_provider_foundation (0.0.1): @@ -102,14 +94,13 @@ PODS: - Flutter - record_darwin (1.0.0): - Flutter + - rust_lib_mood_diary (0.0.1): + - Flutter - screen_brightness_ios (0.1.0): - Flutter - SDWebImage (5.19.7): - SDWebImage/Core (= 5.19.7) - SDWebImage/Core (5.19.7) - - SDWebImageWebPCoder (0.14.6): - - libwebp (~> 1.0) - - SDWebImage/Core (~> 5.17) - share_plus (0.0.1): - Flutter - shared_preferences_foundation (0.0.1): @@ -144,6 +135,9 @@ PODS: - Toast (4.1.1) - url_launcher_ios (0.0.1): - Flutter + - video_player_avfoundation (0.0.1): + - Flutter + - FlutterMacOS - volume_controller (0.0.1): - Flutter - wakelock_plus (0.0.1): @@ -152,16 +146,17 @@ PODS: DEPENDENCIES: - app_links (from `.symlinks/plugins/app_links/ios`) - audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`) + - connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`) - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) - fc_native_video_thumbnail (from `.symlinks/plugins/fc_native_video_thumbnail/darwin`) - file_picker (from `.symlinks/plugins/file_picker/ios`) - Flutter (from `Flutter`) - - flutter_image_compress_common (from `.symlinks/plugins/flutter_image_compress_common/ios`) + - flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`) - flutter_keyboard_visibility_temp_fork (from `.symlinks/plugins/flutter_keyboard_visibility_temp_fork/ios`) - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) + - gal (from `.symlinks/plugins/gal/darwin`) - geolocator_apple (from `.symlinks/plugins/geolocator_apple/ios`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - - integration_test (from `.symlinks/plugins/integration_test/ios`) - isar_flutter_libs (from `.symlinks/plugins/isar_flutter_libs/ios`) - local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`) - media_kit_libs_ios_video (from `.symlinks/plugins/media_kit_libs_ios_video/ios`) @@ -174,12 +169,14 @@ DEPENDENCIES: - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - quill_native_bridge_ios (from `.symlinks/plugins/quill_native_bridge_ios/ios`) - record_darwin (from `.symlinks/plugins/record_darwin/ios`) + - rust_lib_mood_diary (from `.symlinks/plugins/rust_lib_mood_diary/ios`) - screen_brightness_ios (from `.symlinks/plugins/screen_brightness_ios/ios`) - share_plus (from `.symlinks/plugins/share_plus/ios`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`) - tflite_flutter (from `.symlinks/plugins/tflite_flutter/ios`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) + - video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`) - volume_controller (from `.symlinks/plugins/volume_controller/ios`) - wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`) @@ -187,11 +184,9 @@ SPEC REPOS: trunk: - DKImagePickerController - DKPhotoGallery - - libwebp - - Mantle - ObjectBox + - OrderedSet - SDWebImage - - SDWebImageWebPCoder - SwiftyGif - TensorFlowLiteC - TensorFlowLiteSwift @@ -202,6 +197,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/app_links/ios" audioplayers_darwin: :path: ".symlinks/plugins/audioplayers_darwin/ios" + connectivity_plus: + :path: ".symlinks/plugins/connectivity_plus/darwin" device_info_plus: :path: ".symlinks/plugins/device_info_plus/ios" fc_native_video_thumbnail: @@ -210,18 +207,18 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/file_picker/ios" Flutter: :path: Flutter - flutter_image_compress_common: - :path: ".symlinks/plugins/flutter_image_compress_common/ios" + flutter_inappwebview_ios: + :path: ".symlinks/plugins/flutter_inappwebview_ios/ios" flutter_keyboard_visibility_temp_fork: :path: ".symlinks/plugins/flutter_keyboard_visibility_temp_fork/ios" fluttertoast: :path: ".symlinks/plugins/fluttertoast/ios" + gal: + :path: ".symlinks/plugins/gal/darwin" geolocator_apple: :path: ".symlinks/plugins/geolocator_apple/ios" image_picker_ios: :path: ".symlinks/plugins/image_picker_ios/ios" - integration_test: - :path: ".symlinks/plugins/integration_test/ios" isar_flutter_libs: :path: ".symlinks/plugins/isar_flutter_libs/ios" local_auth_darwin: @@ -246,6 +243,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/quill_native_bridge_ios/ios" record_darwin: :path: ".symlinks/plugins/record_darwin/ios" + rust_lib_mood_diary: + :path: ".symlinks/plugins/rust_lib_mood_diary/ios" screen_brightness_ios: :path: ".symlinks/plugins/screen_brightness_ios/ios" share_plus: @@ -258,6 +257,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/tflite_flutter/ios" url_launcher_ios: :path: ".symlinks/plugins/url_launcher_ios/ios" + video_player_avfoundation: + :path: ".symlinks/plugins/video_player_avfoundation/darwin" volume_controller: :path: ".symlinks/plugins/volume_controller/ios" wakelock_plus: @@ -266,36 +267,36 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: app_links: e7a6750a915a9e161c58d91bc610e8cd1d4d0ad0 audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40 + connectivity_plus: 4c41c08fc6d7c91f63bc7aec70ffe3730b04f563 device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342 DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 fc_native_video_thumbnail: 927d4dcfd4c7e9f2cc1a20bb52dfee83de3792c2 file_picker: 09aa5ec1ab24135ccd7a1621c46c84134bfd6655 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - flutter_image_compress_common: ec1d45c362c9d30a3f6a0426c297f47c52007e3e - flutter_keyboard_visibility_temp_fork: 442dadca3b81868a225cd6a2f605bffff1215844 + flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4 + flutter_keyboard_visibility_temp_fork: 8a8809c4129e31d25fca77446e0f3fd548122ced fluttertoast: e9a18c7be5413da53898f660530c56f35edfba9c - geolocator_apple: 6cbaf322953988e009e5ecb481f07efece75c450 + gal: 61e868295d28fe67ffa297fae6dacebf56fd53e1 + geolocator_apple: 9bcea1918ff7f0062d98345d238ae12718acfbc1 image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 - integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573 isar_flutter_libs: b69f437aeab9c521821c3f376198c4371fa21073 - libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009 local_auth_darwin: 66e40372f1c29f383a314c738c7446e2f7fdadc3 - Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d media_kit_libs_ios_video: a5fe24bc7875ccd6378a0978c13185e1344651c1 media_kit_native_event_loop: e6b2ab20cf0746eb1c33be961fcf79667304fa2a media_kit_video: 5da63f157170e5bf303bf85453b7ef6971218a2e network_info_plus: 6613d9d7cdeb0e6f366ed4dbe4b3c51c52d567a9 ObjectBox: 0bc4bb75eea85f6af06b369148b334c2056bbc29 objectbox_flutter_libs: 2ce0da386c780878687c736b528ceaf371573efb + OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4 path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 - quill_native_bridge_ios: 277bdf5bf0fa5d7a12999556b415a5c63dd76ec4 + quill_native_bridge_ios: 2b01d585fcc73d0f5eed78c0bd244ee564b06f5a record_darwin: 3b1a8e7d5c0cbf45ad6165b4d83a6ca643d929c3 + rust_lib_mood_diary: 38a92354760d3409ebc859f812193e7c69e184ef screen_brightness_ios: 715ca807df953bf676d339f11464e438143ee625 SDWebImage: 8a6b7b160b4d710e2a22b6900e25301075c34cb3 - SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380 share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d @@ -305,9 +306,10 @@ SPEC CHECKSUMS: tflite_flutter: 9433d086a3060431bbc9f3c7c20d017db0e72d08 Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe + video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3 volume_controller: 531ddf792994285c9b17f9d8a7e4dcdd29b3eae9 wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1 PODFILE CHECKSUM: 9752b5340b4d3f9618318fcd530d907790e2a9f5 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index cf5c707..527d743 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -488,17 +488,21 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 3XA29H789G; + DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.lifestyle"; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = cn.yooss.moodDiary; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; @@ -677,17 +681,21 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 3XA29H789G; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.lifestyle"; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = cn.yooss.moodDiary; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -701,17 +709,21 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 3XA29H789G; + DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.lifestyle"; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = cn.yooss.moodDiary; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index b82fab2..215b243 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -8,11 +8,14 @@ import Foundation import app_links import audioplayers_darwin import bitsdojo_window_macos +import connectivity_plus import device_info_plus import dynamic_color import fc_native_video_thumbnail import file_selector_macos +import flutter_image_compress_macos import flutter_inappwebview_macos +import gal import geolocator_apple import isar_flutter_libs import local_auth_darwin @@ -29,17 +32,21 @@ import share_plus import shared_preferences_foundation import sqflite_darwin import url_launcher_macos +import video_player_avfoundation import wakelock_plus func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { AppLinksMacosPlugin.register(with: registry.registrar(forPlugin: "AppLinksMacosPlugin")) AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin")) BitsdojoWindowPlugin.register(with: registry.registrar(forPlugin: "BitsdojoWindowPlugin")) + ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin")) DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin")) FcNativeVideoThumbnailPlugin.register(with: registry.registrar(forPlugin: "FcNativeVideoThumbnailPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) + FlutterImageCompressMacosPlugin.register(with: registry.registrar(forPlugin: "FlutterImageCompressMacosPlugin")) InAppWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "InAppWebViewFlutterPlugin")) + GalPlugin.register(with: registry.registrar(forPlugin: "GalPlugin")) GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) IsarFlutterLibsPlugin.register(with: registry.registrar(forPlugin: "IsarFlutterLibsPlugin")) FLALocalAuthPlugin.register(with: registry.registrar(forPlugin: "FLALocalAuthPlugin")) @@ -56,5 +63,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) + FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin")) WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin")) } diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 7f5b874..e13a1cc 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -9,10 +9,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include #include @@ -32,6 +34,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("AudioplayersWindowsPlugin")); BitsdojoWindowPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("BitsdojoWindowPlugin")); + ConnectivityPlusWindowsPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin")); DynamicColorPluginCApiRegisterWithRegistrar( registry->GetRegistrarForPlugin("DynamicColorPluginCApi")); FcNativeVideoThumbnailPluginCApiRegisterWithRegistrar( @@ -40,6 +44,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("FileSelectorWindows")); FlutterInappwebviewWindowsPluginCApiRegisterWithRegistrar( registry->GetRegistrarForPlugin("FlutterInappwebviewWindowsPluginCApi")); + GalPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("GalPluginCApi")); GeolocatorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("GeolocatorWindows")); IsarFlutterLibsPluginRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 428b6a4..09b872d 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -6,10 +6,12 @@ list(APPEND FLUTTER_PLUGIN_LIST app_links audioplayers_windows bitsdojo_window_windows + connectivity_plus dynamic_color fc_native_video_thumbnail file_selector_windows flutter_inappwebview_windows + gal geolocator_windows isar_flutter_libs local_auth_windows From f9cdf4a9942b9dd55cd48735aeef6aac336f0b64 Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Wed, 4 Dec 2024 23:28:14 +0800 Subject: [PATCH 16/20] feat(util): add keyboard listener --- .../keyboard_listener/keyboard_listener.dart | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 lib/components/keyboard_listener/keyboard_listener.dart diff --git a/lib/components/keyboard_listener/keyboard_listener.dart b/lib/components/keyboard_listener/keyboard_listener.dart new file mode 100644 index 0000000..e13ba05 --- /dev/null +++ b/lib/components/keyboard_listener/keyboard_listener.dart @@ -0,0 +1,65 @@ +import 'dart:ui'; + +import 'package:flutter/widgets.dart'; + +import '../../common/values/keyboard_state.dart'; + +class KeyboardObserver with WidgetsBindingObserver { + /// 键盘高度变化回调 + final void Function(double height) onHeightChanged; + + /// 键盘状态变化回调 + final void Function(KeyboardState state)? onStateChanged; + + /// 上一次的键盘高度 + double _lastHeight = 0; + + /// 当前键盘状态 + KeyboardState _keyboardState = KeyboardState.closed; + + KeyboardObserver({ + required this.onHeightChanged, + this.onStateChanged, + }); + + /// 开始监听 + void start() { + WidgetsBinding.instance.addObserver(this); + } + + /// 停止监听 + void stop() { + WidgetsBinding.instance.removeObserver(this); + } + + @override + void didChangeMetrics() { + WidgetsBinding.instance.addPostFrameCallback((_) { + // 当前键盘高度 + final height = PlatformDispatcher.instance.views.first.viewInsets.bottom; + + // 通知键盘高度变化 + if (height != _lastHeight) { + onHeightChanged(height); + } + + // 检测键盘状态变化 + if (height > _lastHeight && _keyboardState != KeyboardState.opening) { + _keyboardState = KeyboardState.opening; + onStateChanged?.call(_keyboardState); + } else if (height < _lastHeight && _keyboardState != KeyboardState.closing) { + _keyboardState = KeyboardState.closing; + onStateChanged?.call(_keyboardState); + } + + // 如果键盘完全关闭 + if (height == 0 && _keyboardState != KeyboardState.closed) { + _keyboardState = KeyboardState.closed; + onStateChanged?.call(_keyboardState); + } + + // 更新最后的高度 + _lastHeight = height; + }); + } +} From 61c8341e8c03d5f8b63c9c25a3950c0c544cf8fc Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Fri, 6 Dec 2024 23:56:35 +0800 Subject: [PATCH 17/20] refactor(*): use the new flutter api to catch error --- lib/main.dart | 92 ++++++++++++++++++++++----------------------------- 1 file changed, 39 insertions(+), 53 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index a518985..359b0e1 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:io'; +import 'dart:ui'; import 'package:bitsdojo_window/bitsdojo_window.dart'; import 'package:flutter/material.dart'; @@ -32,7 +33,7 @@ Future initSystem() async { //地图缓存 await FMTCObjectBoxBackend().initialise(); await const FMTCStore('mapStore').manage.create(); - await RustLib.init(); + unawaited(RustLib.init()); SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle( systemNavigationBarColor: Colors.transparent, systemNavigationBarContrastEnforced: false)); @@ -61,58 +62,43 @@ String getInitialRoute() { return AppRoutes.homePage; } -void main() { - runZonedGuarded(() { - FlutterError.onError = (details) { - Utils().logUtil.printError('Flutter error', error: details.exception, stackTrace: details.stack); - if (details.exceptionAsString().contains('Render')) { - Utils().noticeUtil.showBug(message: '布局异常!'); - } else { - Utils().noticeUtil.showBug(message: '出错了,请联系开发者!'); - } - }; - initSystem().then((_) { - return runApp(GetMaterialApp( - initialRoute: getInitialRoute(), - onGenerateTitle: (context) => AppLocalizations.of(context)!.appName, - builder: (context, child) { - final fontScale = Utils().prefUtil.getValue('fontScale')!; - final colorScheme = Theme.of(context).colorScheme; - final mediaQuery = MediaQuery( - data: MediaQuery.of(context).copyWith( - textScaler: TextScaler.linear(fontScale), - ), - child: FToastBuilder()(context, child!), - ); - // 根据平台决定是否需要 MoveWindow - var autoFit = AnnotatedRegion( - value: SystemUiOverlayStyle( - systemNavigationBarColor: colorScheme.surface, - ), - child: mediaQuery); - final windowChild = (Platform.isWindows || Platform.isMacOS || Platform.isLinux) - ? Column( - children: [ - WindowButtons( - colorScheme: colorScheme, - ), - Expanded(child: mediaQuery), - ], - ) - : mediaQuery; - return windowChild; - }, - theme: Utils().themeUtil.buildTheme(Brightness.light), - darkTheme: Utils().themeUtil.buildTheme(Brightness.dark), - themeMode: ThemeMode.values[Utils().prefUtil.getValue('themeMode')!], - defaultTransition: Transition.cupertino, - getPages: AppPages.routes, - localizationsDelegates: const [...AppLocalizations.localizationsDelegates, FlutterQuillLocalizations.delegate], - supportedLocales: AppLocalizations.supportedLocales, - )); - }); - }, (error, stack) { +void main() async { + await initSystem(); + FlutterError.onError = (details) { + Utils().logUtil.printError('Flutter error', error: details.exception, stackTrace: details.stack); + if (details.exceptionAsString().contains('Render')) { + Utils().noticeUtil.showBug(message: '布局异常!'); + } else { + Utils().noticeUtil.showBug(message: '出错了,请联系开发者!'); + } + }; + PlatformDispatcher.instance.onError = (error, stack) { Utils().logUtil.printWTF('Error', error: error, stackTrace: stack); Utils().noticeUtil.showBug(message: '出错了,请联系开发者!'); - }); + return true; + }; + runApp(GetMaterialApp( + initialRoute: getInitialRoute(), + onGenerateTitle: (context) => AppLocalizations.of(context)!.appName, + builder: (context, child) { + final fontScale = Utils().prefUtil.getValue('fontScale')!; + final colorScheme = Theme.of(context).colorScheme; + final mediaQuery = MediaQuery( + data: MediaQuery.of(context).copyWith(textScaler: TextScaler.linear(fontScale)), + child: FToastBuilder()(context, child!), + ); + // 根据平台决定是否需要 MoveWindow + final windowChild = (Platform.isWindows || Platform.isMacOS || Platform.isLinux) + ? Column(children: [WindowButtons(colorScheme: colorScheme), Expanded(child: mediaQuery)]) + : mediaQuery; + return windowChild; + }, + theme: Utils().themeUtil.buildTheme(Brightness.light), + darkTheme: Utils().themeUtil.buildTheme(Brightness.dark), + themeMode: ThemeMode.values[Utils().prefUtil.getValue('themeMode')!], + defaultTransition: Transition.cupertino, + getPages: AppPages.routes, + localizationsDelegates: const [...AppLocalizations.localizationsDelegates, FlutterQuillLocalizations.delegate], + supportedLocales: AppLocalizations.supportedLocales, + )); } From 4eec59959263a59fd631146f7fe6607fdd81a453 Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Tue, 10 Dec 2024 14:05:01 +0800 Subject: [PATCH 18/20] feat(icon): use new app icon --- android/app/build.gradle | 6 +- android/app/src/main/AndroidManifest.xml | 3 +- .../res/drawable-hdpi/android12splash.png | Bin 0 -> 7611 bytes .../drawable-hdpi/ic_launcher_foreground.png | Bin 0 -> 3337 bytes .../drawable-hdpi/ic_launcher_monochrome.png | Bin 0 -> 3337 bytes .../app/src/main/res/drawable-hdpi/splash.png | Bin 0 -> 7611 bytes .../res/drawable-mdpi/android12splash.png | Bin 0 -> 4869 bytes .../drawable-mdpi/ic_launcher_foreground.png | Bin 0 -> 2266 bytes .../drawable-mdpi/ic_launcher_monochrome.png | Bin 0 -> 2266 bytes .../app/src/main/res/drawable-mdpi/splash.png | Bin 0 -> 4869 bytes .../drawable-night-hdpi/android12splash.png | Bin 0 -> 7425 bytes .../main/res/drawable-night-hdpi/splash.png | Bin 0 -> 7425 bytes .../drawable-night-mdpi/android12splash.png | Bin 0 -> 4789 bytes .../main/res/drawable-night-mdpi/splash.png | Bin 0 -> 4789 bytes .../res/drawable-night-v21/background.png | Bin 0 -> 69 bytes .../drawable-night-v21/launch_background.xml | 13 + .../drawable-night-xhdpi/android12splash.png | Bin 0 -> 8924 bytes .../main/res/drawable-night-xhdpi/splash.png | Bin 0 -> 8924 bytes .../drawable-night-xxhdpi/android12splash.png | Bin 0 -> 13818 bytes .../main/res/drawable-night-xxhdpi/splash.png | Bin 0 -> 13818 bytes .../android12splash.png | Bin 0 -> 16879 bytes .../res/drawable-night-xxxhdpi/splash.png | Bin 0 -> 16879 bytes .../main/res/drawable-night/background.png | Bin 0 -> 69 bytes .../res/drawable-night/launch_background.xml | 13 + .../src/main/res/drawable-v21/background.png | Bin 0 -> 69 bytes .../res/drawable-v21/launch_background.xml | 15 +- .../res/drawable-xhdpi/android12splash.png | Bin 0 -> 8864 bytes .../drawable-xhdpi/ic_launcher_foreground.png | Bin 0 -> 4566 bytes .../drawable-xhdpi/ic_launcher_monochrome.png | Bin 0 -> 4566 bytes .../src/main/res/drawable-xhdpi/splash.png | Bin 0 -> 8864 bytes .../res/drawable-xxhdpi/android12splash.png | Bin 0 -> 13715 bytes .../ic_launcher_foreground.png | Bin 0 -> 6290 bytes .../ic_launcher_monochrome.png | Bin 0 -> 6290 bytes .../src/main/res/drawable-xxhdpi/splash.png | Bin 0 -> 13715 bytes .../res/drawable-xxxhdpi/android12splash.png | Bin 0 -> 16872 bytes .../ic_launcher_foreground.png | Bin 0 -> 8359 bytes .../ic_launcher_monochrome.png | Bin 0 -> 8359 bytes .../src/main/res/drawable-xxxhdpi/splash.png | Bin 0 -> 16872 bytes .../app/src/main/res/drawable/background.png | Bin 0 -> 69 bytes .../main/res/drawable/launch_background.xml | 19 +- .../res/mipmap-anydpi-v26/ic_launcher.xml | 6 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - .../res/mipmap-anydpi-v26/launcher_icon.xml | 14 + .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 2782 -> 0 bytes .../mipmap-hdpi/ic_launcher_background.webp | Bin 2980 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 4036 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 4856 -> 0 bytes .../main/res/mipmap-hdpi/launcher_icon.png | Bin 0 -> 1265 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 1824 -> 0 bytes .../mipmap-mdpi/ic_launcher_background.webp | Bin 1016 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 2382 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 3014 -> 0 bytes .../main/res/mipmap-mdpi/launcher_icon.png | Bin 0 -> 745 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 4102 -> 0 bytes .../mipmap-xhdpi/ic_launcher_background.webp | Bin 6712 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 5872 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 7236 -> 0 bytes .../main/res/mipmap-xhdpi/launcher_icon.png | Bin 0 -> 1647 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 7242 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_background.webp | Bin 19904 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 9770 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 11890 -> 0 bytes .../main/res/mipmap-xxhdpi/launcher_icon.png | Bin 0 -> 2616 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 11300 -> 0 bytes .../ic_launcher_background.webp | Bin 47170 -> 0 bytes .../ic_launcher_foreground.webp | Bin 16810 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 18498 -> 0 bytes .../main/res/mipmap-xxxhdpi/launcher_icon.png | Bin 0 -> 3508 bytes .../src/main/res/values-night-v31/styles.xml | 21 + .../app/src/main/res/values-night/styles.xml | 4 + .../app/src/main/res/values-v31/styles.xml | 21 + ...{ic_launcher_background.xml => colors.xml} | 2 +- android/app/src/main/res/values/styles.xml | 4 + android/settings.gradle | 4 +- assets/icon/dark/dark_foreground.png | Bin 0 -> 15081 bytes assets/icon/dark/dark_icon.png | Bin 0 -> 17744 bytes assets/icon/dark/dark_splash_icon.png | Bin 0 -> 15998 bytes assets/icon/icon.png | Bin 213253 -> 0 bytes assets/icon/light/light_foreground.png | Bin 0 -> 15042 bytes assets/icon/light/light_icon.png | Bin 0 -> 17077 bytes assets/icon/light/light_splash_icon.png | Bin 0 -> 15963 bytes ios/Runner.xcodeproj/project.pbxproj | 4 +- .../AppIcon.appiconset/Contents.json | 582 +++++++++++++++--- .../Icon-App-1024x1024@1x.png | Bin 10932 -> 16176 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 295 -> 371 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 406 -> 532 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 450 -> 878 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 282 -> 603 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 462 -> 866 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 704 -> 1391 bytes .../AppIcon.appiconset/Icon-App-38x38@2x.png | Bin 0 -> 1174 bytes .../AppIcon.appiconset/Icon-App-38x38@3x.png | Bin 0 -> 1908 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 406 -> 924 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 586 -> 1213 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 862 -> 1950 bytes .../AppIcon.appiconset/Icon-App-50x50@1x.png | Bin 0 -> 1268 bytes .../AppIcon.appiconset/Icon-App-50x50@2x.png | Bin 0 -> 2995 bytes .../AppIcon.appiconset/Icon-App-57x57@1x.png | Bin 0 -> 1490 bytes .../AppIcon.appiconset/Icon-App-57x57@2x.png | Bin 0 -> 3421 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 862 -> 1950 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 1674 -> 3085 bytes .../AppIcon.appiconset/Icon-App-64x64@2x.png | Bin 0 -> 2125 bytes .../AppIcon.appiconset/Icon-App-64x64@3x.png | Bin 0 -> 3291 bytes .../AppIcon.appiconset/Icon-App-68x68@2x.png | Bin 0 -> 2323 bytes .../AppIcon.appiconset/Icon-App-72x72@1x.png | Bin 0 -> 1991 bytes .../AppIcon.appiconset/Icon-App-72x72@2x.png | Bin 0 -> 4453 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 762 -> 2118 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 1226 -> 2588 bytes .../Icon-App-83.5x83.5@2x.png | Bin 1418 -> 2750 bytes .../Icon-App-Dark-1024x1024@1x.png | Bin 0 -> 15967 bytes .../Icon-App-Dark-20x20@2x.png | Bin 0 -> 612 bytes .../Icon-App-Dark-20x20@3x.png | Bin 0 -> 930 bytes .../Icon-App-Dark-29x29@2x.png | Bin 0 -> 917 bytes .../Icon-App-Dark-29x29@3x.png | Bin 0 -> 1544 bytes .../Icon-App-Dark-38x38@2x.png | Bin 0 -> 1321 bytes .../Icon-App-Dark-38x38@3x.png | Bin 0 -> 2028 bytes .../Icon-App-Dark-40x40@2x.png | Bin 0 -> 1388 bytes .../Icon-App-Dark-40x40@3x.png | Bin 0 -> 2085 bytes .../Icon-App-Dark-60x60@2x.png | Bin 0 -> 2085 bytes .../Icon-App-Dark-60x60@3x.png | Bin 0 -> 3313 bytes .../Icon-App-Dark-64x64@2x.png | Bin 0 -> 2308 bytes .../Icon-App-Dark-64x64@3x.png | Bin 0 -> 3612 bytes .../Icon-App-Dark-68x68@2x.png | Bin 0 -> 2533 bytes .../Icon-App-Dark-76x76@2x.png | Bin 0 -> 2850 bytes .../Icon-App-Dark-83.5x83.5@2x.png | Bin 0 -> 3055 bytes .../Icon-App-Tinted-1024x1024@1x.png | Bin 0 -> 15920 bytes .../Icon-App-Tinted-20x20@2x.png | Bin 0 -> 671 bytes .../Icon-App-Tinted-20x20@3x.png | Bin 0 -> 1025 bytes .../Icon-App-Tinted-29x29@2x.png | Bin 0 -> 1030 bytes .../Icon-App-Tinted-29x29@3x.png | Bin 0 -> 1709 bytes .../Icon-App-Tinted-38x38@2x.png | Bin 0 -> 1476 bytes .../Icon-App-Tinted-38x38@3x.png | Bin 0 -> 2199 bytes .../Icon-App-Tinted-40x40@2x.png | Bin 0 -> 1535 bytes .../Icon-App-Tinted-40x40@3x.png | Bin 0 -> 2309 bytes .../Icon-App-Tinted-60x60@2x.png | Bin 0 -> 2309 bytes .../Icon-App-Tinted-60x60@3x.png | Bin 0 -> 3626 bytes .../Icon-App-Tinted-64x64@2x.png | Bin 0 -> 2463 bytes .../Icon-App-Tinted-64x64@3x.png | Bin 0 -> 3914 bytes .../Icon-App-Tinted-68x68@2x.png | Bin 0 -> 2788 bytes .../Icon-App-Tinted-76x76@2x.png | Bin 0 -> 3126 bytes .../Icon-App-Tinted-83.5x83.5@2x.png | Bin 0 -> 3292 bytes .../LaunchBackground.imageset/Contents.json | 22 + .../LaunchBackground.imageset/background.png | Bin 0 -> 69 bytes .../darkbackground.png | Bin 0 -> 69 bytes .../LaunchImage.imageset/Contents.json | 39 +- .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 4869 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 8864 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 13715 bytes .../LaunchImage.imageset/LaunchImageDark.png | Bin 0 -> 4789 bytes .../LaunchImageDark@2x.png | Bin 0 -> 8924 bytes .../LaunchImageDark@3x.png | Bin 0 -> 13818 bytes ios/Runner/Base.lproj/LaunchScreen.storyboard | 17 +- ios/Runner/Info.plist | 112 ++-- lib/pages/about/about_view.dart | 40 +- .../AppIcon.appiconset/Contents.json | 94 +-- .../AppIcon.appiconset/app_icon_1024.png | Bin 102994 -> 17713 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 5680 -> 2264 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 520 -> 254 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 14142 -> 4682 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 1066 -> 459 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 36406 -> 9486 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 2218 -> 1088 bytes pubspec.lock | 84 ++- pubspec.yaml | 147 +++-- windows/runner/resources/app_icon.ico | Bin 201777 -> 767 bytes 165 files changed, 970 insertions(+), 321 deletions(-) create mode 100644 android/app/src/main/res/drawable-hdpi/android12splash.png create mode 100644 android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/drawable-hdpi/ic_launcher_monochrome.png create mode 100644 android/app/src/main/res/drawable-hdpi/splash.png create mode 100644 android/app/src/main/res/drawable-mdpi/android12splash.png create mode 100644 android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/drawable-mdpi/ic_launcher_monochrome.png create mode 100644 android/app/src/main/res/drawable-mdpi/splash.png create mode 100644 android/app/src/main/res/drawable-night-hdpi/android12splash.png create mode 100644 android/app/src/main/res/drawable-night-hdpi/splash.png create mode 100644 android/app/src/main/res/drawable-night-mdpi/android12splash.png create mode 100644 android/app/src/main/res/drawable-night-mdpi/splash.png create mode 100644 android/app/src/main/res/drawable-night-v21/background.png create mode 100644 android/app/src/main/res/drawable-night-v21/launch_background.xml create mode 100644 android/app/src/main/res/drawable-night-xhdpi/android12splash.png create mode 100644 android/app/src/main/res/drawable-night-xhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-night-xxhdpi/android12splash.png create mode 100644 android/app/src/main/res/drawable-night-xxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png create mode 100644 android/app/src/main/res/drawable-night-xxxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-night/background.png create mode 100644 android/app/src/main/res/drawable-night/launch_background.xml create mode 100644 android/app/src/main/res/drawable-v21/background.png create mode 100644 android/app/src/main/res/drawable-xhdpi/android12splash.png create mode 100644 android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/drawable-xhdpi/ic_launcher_monochrome.png create mode 100644 android/app/src/main/res/drawable-xhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-xxhdpi/android12splash.png create mode 100644 android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/drawable-xxhdpi/ic_launcher_monochrome.png create mode 100644 android/app/src/main/res/drawable-xxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-xxxhdpi/android12splash.png create mode 100644 android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/drawable-xxxhdpi/ic_launcher_monochrome.png create mode 100644 android/app/src/main/res/drawable-xxxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable/background.png delete mode 100644 android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml delete mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.webp delete mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_background.webp delete mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp delete mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 android/app/src/main/res/mipmap-hdpi/launcher_icon.png delete mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.webp delete mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp delete mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp delete mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 android/app/src/main/res/mipmap-mdpi/launcher_icon.png delete mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp delete mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp delete mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp delete mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 android/app/src/main/res/mipmap-xhdpi/launcher_icon.png delete mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp delete mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp delete mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp delete mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png delete mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp delete mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp delete mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp delete mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png create mode 100644 android/app/src/main/res/values-night-v31/styles.xml create mode 100644 android/app/src/main/res/values-v31/styles.xml rename android/app/src/main/res/values/{ic_launcher_background.xml => colors.xml} (52%) create mode 100644 assets/icon/dark/dark_foreground.png create mode 100644 assets/icon/dark/dark_icon.png create mode 100644 assets/icon/dark/dark_splash_icon.png delete mode 100644 assets/icon/icon.png create mode 100644 assets/icon/light/light_foreground.png create mode 100644 assets/icon/light/light_icon.png create mode 100644 assets/icon/light/light_splash_icon.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-38x38@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-38x38@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-64x64@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-64x64@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-68x68@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-1024x1024@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-20x20@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-20x20@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-29x29@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-29x29@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-38x38@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-38x38@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-40x40@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-40x40@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-60x60@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-60x60@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-64x64@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-64x64@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-68x68@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-76x76@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-83.5x83.5@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-1024x1024@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-20x20@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-20x20@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-29x29@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-29x29@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-38x38@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-38x38@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-40x40@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-40x40@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-60x60@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-60x60@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-64x64@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-64x64@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-68x68@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-76x76@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-83.5x83.5@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png create mode 100644 ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@3x.png diff --git a/android/app/build.gradle b/android/app/build.gradle index 7589198..50ff83a 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -28,12 +28,12 @@ android { ndkVersion = "27.1.12297006" compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() + jvmTarget = JavaVersion.VERSION_21.toString() } signingConfigs { config { diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 544ab64..e08654f 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -33,11 +33,10 @@ -z1CcF&LrAcnecE4 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%0D#?w5@H+D4RO#G9ZOxcsN;7w9;1%Ihn- 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 YKwagSI3MBtFOI;~%Qs+krp__{1uPt2xc~qF literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-hdpi/ic_launcher_monochrome.png b/android/app/src/main/res/drawable-hdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..fd2950a9fe030176308a621b3b4388700aed309e GIT binary patch literal 3337 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 YKwagSI3MBtFOI;~%Qs+krp__{1uPt2xc~qF literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-hdpi/splash.png b/android/app/src/main/res/drawable-hdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..d8834526c0a76cfb0f66a76b21fc49c5e37b09bd GIT binary patch literal 7611 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%0D#?w5@H+D4RO#G9ZOxcsN;7w9;1%Ihn- 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 N2WD<(R%7b^^iMC6TUr1B literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-mdpi/ic_launcher_monochrome.png b/android/app/src/main/res/drawable-mdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..81a430878b60a48e931db9c56bc05ec6ecef41d6 GIT binary patch literal 2266 zcmai$XH*ji5`Y0Y7NiL#p$dW?P4KcHEn;{e2%*VBFbN0}k!D0d=~5*`k+uj?st{>Q zF99iu0U|}I28b+%x>QM|NC}~YWq;kfdv|Z=y_xwjf2O@}Cehx`LiDukX&xRPQJAHf z!-;?JmkJ7;*fcN1APK; z<2*Ii1j`#QcuGJ*K;-`h>ZmcL!mWjPfxn!-r5fb4ekC@b=0p6Ms=VZ2$b`Pg+zr!^c)-ziP{-&sxGPR1@wo` zxQZmbNVdFuS$%LmG&tKf#+k!=3mFuCYM@4PSL;W3|EUx@(r-REvD zzK*sWSxb@AuWAk7T4J``{LH{uIeCTi+(JqnZ)T5-O|tM=S#^fm%8@SUx%3Y}An<1$ z?;(KIMe(LEqiGBjYAvo6)q9ZnnmrQVLLre3fcGv@zp0%y|Gn)UImYS+9FE6i=o0}`e-rbczj}CtP_kZ*@xhWruJN|_FyYTMaiuT71bRa!~l zdpD|L0bdvlOtLJ{ar8Aq!JjQ-W?uW7nAmBfc^!Mc&x;E>N^iO`B=l305sr zd8|WZhTV}W@W)|w9Ygtt#njN`RI!YA@AO<~zdn!CQ#F(q6KCsRxuVHhUvI9ds1bXS zh~oIrHtC4t-HG&<5hGth>F0hyAlkR))5gCim=Y9ZXMBCpv>S6uwlenA zmfLHS0|TtPPY@Px>(Q2PPw&LKqxg-m&X$8Kn84qOsn zSQ4m1LT2BD#Y*C6V`G_xIyQcBN!FZKTCmOKp(9LoO4E)mSzJp6ssFHX$an6M>-P3e z^z0T#Wo5dmzpJZ7yjr>F+T>JUn&Po?J=ZG!su@b!p1NWBwj|-|GHCr(yuCqJ#qCHX z5nI1`JG)c_i^Zxb@?DS1&;QPT^Cl*EoypW09~qJDn*Y3$;$*)u*GVQHO2S9e5{j5_ zGTy(BBIe}C{+70Wl3!_iaZv$a-NYY1H3^DZU0!ziV_^kZNgyb79t6tC$~tU6=8QK4 z3J3_WX_ldS-JGq?#YG^~W4wx#+_PL#R-)n1I(=6TOqc zU}7U3Y!zp*qDf{plS8>z*#&tMc@}K@yY*R#rL9d62qa%YVXfV$qN29F!R-7QWD(O< zsLhuvzQ$yd{NMtuL*h&w%dt^5G6+|=Xe1}>LG(V#%xUl-R;d_< z=kkJZHK7L^8j@^6?y@;j+Nrfbs*dUg|2OY2XpIVuy>J4+xV#LKL@sQq!|t_IbE7F1 zg98J5aPM@fMo?*OtufXu1-|^NY9r`|g^$*Q6X}^Eg$5hS+ZoeQ3;(E2SX^MuJl-G3 zwk^Av4>p-3K+=o~o4^G7kFTssM8>!>ev)YHw`YHY*8jm=5H-tYi6^Q1eseqtmi8h8pQ`-sf z@}iaYeKc~#;+60$wtj-eXaNfH@AAdHJgQ|U zcHez3r|&FfY*2->tf`VS&YS>9tG)mt4{%o64qyz^bYJir$em&$bO1|#xRvnua zXW4qP_IK91QOK-NHI3Z2yy_zJt8ImswY8P2i;IKS70+$;ki&Z~T%aZav#n{dKpcvs zqSyTHT?ov@g~V8=udeuP>FDTuvAeFBz~?L--Lq7=eamS# z56S}Ud9*}yp6s%&`j)HH5@ETQ@Cq@mEPp{Ep`k~ik1Mm6d`|O{!O0|&OK=#{Xa9t_ z{Sl7}@OV$#$f`jl0gc301`rlvo|60M#JNE`y%u^@<;gg?* N2WD<(R%7b^^iMC6TUr1B literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-mdpi/splash.png b/android/app/src/main/res/drawable-mdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..a04480650eafacd6da73dbf9662e6f36324a91dc GIT binary patch literal 4869 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 VU5(y-4qR=5jBc12R9|;|@*f}m{K)_S literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-night-hdpi/splash.png b/android/app/src/main/res/drawable-night-hdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..eeb75aaec104a3f14be892cad8c344853f1ee2a3 GIT binary patch literal 7425 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 VU5(y-4qR=5jBc12R9|;|@*f}m{K)_S literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-night-mdpi/android12splash.png b/android/app/src/main/res/drawable-night-mdpi/android12splash.png new file mode 100644 index 0000000000000000000000000000000000000000..1c5cabc5b49fd39c7505454128ce7467b8e75cda GIT binary patch literal 4789 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-night-mdpi/splash.png b/android/app/src/main/res/drawable-night-mdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..1c5cabc5b49fd39c7505454128ce7467b8e75cda GIT binary patch literal 4789 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-night-v21/background.png b/android/app/src/main/res/drawable-night-v21/background.png new file mode 100644 index 0000000000000000000000000000000000000000..71e9c817e8c3531d8b353b9818aeece0e1e64971 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryJf1F&Ar*|ti3tfno(Kc$izVN6 PfGh@2S3j3^P6 + + + + + + + + diff --git a/android/app/src/main/res/drawable-night-xhdpi/android12splash.png b/android/app/src/main/res/drawable-night-xhdpi/android12splash.png new file mode 100644 index 0000000000000000000000000000000000000000..d844b4939afe3a574152868d50532b0d715d5572 GIT binary patch literal 8924 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-night-xhdpi/splash.png b/android/app/src/main/res/drawable-night-xhdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..d844b4939afe3a574152868d50532b0d715d5572 GIT binary patch literal 8924 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png b/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png new file mode 100644 index 0000000000000000000000000000000000000000..582ff9553e7d9f8a8fe5316d8c2733508afc7de8 GIT binary patch literal 13818 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 YV}dBAsB3T&yaGCHbJn`(B07NbD7XSbN literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-night-xxhdpi/splash.png b/android/app/src/main/res/drawable-night-xxhdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..582ff9553e7d9f8a8fe5316d8c2733508afc7de8 GIT binary patch literal 13818 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 YV}dBAsB3T&yaGCHbJn`(B07NbD7XSbN literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png b/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png new file mode 100644 index 0000000000000000000000000000000000000000..736d539342ddfcbf9f42a887981d225807178662 GIT binary patch literal 16879 zcmeHucT|&E*Y818Y!t;2r8@d5Dg#(3Qj*||3WyL;ic$h%L3;0j#9?fsz&JGN%&0^O z5S0=LNkCCh5TalV9Wew5E%Xpd_|C(8<)}+lWA)tl)C1=%{E?)kqIbXwR(S6!ISsVgZoP4OZVjzC-X`3%(n|cVF<`9sW0t z2nFr%w>U-p0v?MSCHlPCvtO`MI#mLI z*ES;fx+$|sA!#PykGitpoT-S&4>m*3W|owHlYw(f7u#Jl`O#Ims<8*+Sw@2gMIIp~ zQGAyBpRqekmp{mXwySI8fb)qG(H@GHNY)b{+mtr2d*;T>0s*Bc)ALFEp*UxTf&U4$ zV6qcg;7Ez+TNA%epTAX+*PQOg2 zNaG+uwzZb>WU@n7YdTd2omD)$Z;u=ZP?gvKivMWGAF+~EGvlUcI**fEXT^ipkI&!J zbRKCqs6mL;h-dlr1yRVUi<0q96+3|3A7CwTXe{+o7iZ14wBsjRAN758a-?62*eAwU zAWtiDiWlSf9+NpcC>z1rAAv;84@WY!nSVt^{B4`bH1KybR+N!3stB_UFW?nqm-D0< z>vn^$SJ&eCsOzm-ljHMu6e_5xBi`b68Ah5#RCK=Jt;Q6D~Va!tQ2zHw9 z4!5r03fnL8o(f5Zv6)m7+zn{2ZfUJY5PwMM9dJ}M^UR39;uFCOVazH3WoXMGM_`qAs6V zN-qw)OU=D_WR|Mrd^sC+8xV;Q**g@^2+<84Cbu7%Zgg$>6z%;(S%OZ6jOL(*9w8(yQ_KTX9CxgC(1T z=$^ENf%Fnmeu|xgf5c3ywyqVoqR(4`=!Wd+Pw5*$M?+a<$>>G8X3T^eY~eX2XA}lS z(z3RMg{3q$H)>?H)HdDHUioT3eiZw3^0!ot>U?jyD%fxm%4YscyWIRU9o$QI^wHHkdScvfA;(%_6x zP?(V&lHwqvk}@*B^xkdXEnU>)$W5I&mI&Q15NKpHlY_P!gMiGh5{&}e|4!#p# z?V;pnMa*7_^B!Ppwz^9la21)tdBbD*q$bmwEMBVRIy{uW|aWD^+V@;mk?zU_nmcJmbqY0yj>h8Y<~b#k*aQmi&+pP7T#wm3tXjZrf!6EIcCqq*<1e5QF>bv6%#M?!vD!QG9K=Sjja5HE_ zAsDb{*ViO@Rc;$P$BUR}cromBISnJh_y&Ubf+8WSE>MI|IG$^E*+#r1@}wV)$DHK~ zu_$%I(k@TDy&^@Mz_~^=s2F`iIksPuDSUL_hzSFPBw{4w5ou!Z9fJ#@Pb>^}`DCH# z?JbMd#m0K=S7;gn+~gaILP{r>ma|g99gze^CeZeY4PKe(eunpc-5kQpgCR-WKB^0P za>S~M6H+N;Z8Uu)iFl{AY))Nuq-#!!zK522+!#rAC0H@HlmB5M6hjFpnErJee__L= zgkPlqBw|AW#ZJvYtKSZFo6OA1+AW#LG2g%Ui@qL){Y5ZEji2Ki|1zSab?+D{%Tw`$Mokw3KzWy!`%{d<}jM=3h z`3VMVF$}{+{95hn;f9PT!h)gLqLwok>HP&)))l=GRQ!!V;z{RkEF6L&&ecJCw90#a zO@mq=?jN;Hpt&P__H z0sn0NklyFd@~`|d@LIH^KxeQz7rpc;b)dCuC9N*kze2$BY}N6jV6s#0M@OjvHw#4J zu({O5el9EV3&V_7m)JCLulf)4QqPWo&rh)VlN`r8nD)oR+F-VF&lb@3GXh5mrxlqX z?4-3_KOVt?fP9+GOilM=sD%tTk8q%{XFMD?bl>78}6THFH>prQlelr-{#iNR98 z9VSWnNC!QD)}!A%aIe=)P0Z7ybp9#K7cr`vHs_D15NW&pypUsDm13;jai)|9P5nOf1u}r=#o>!yQ>59gPo5ntqx}t%^C7 zD=~Vqk}+@WPl5Gh9b`>1<=`MGL0x zp%|3FN)65U>mc4Zo?-bW*VKG^{_f0#JkS0`_>;-R)(FdZiwhDkvs-nh_r1|84p2WF zLXSMqdtBL_-lWi*g~qq8?-2|9qV|1$l)QWP7yjZDmp^&g6F=~~wlD4I767Bg8sddv zKd_87NzdWW&C(PJ$uYV7XZ>s@dE1&Cu*i!nhw3e$#=W+=z$|OUPtUbKi8AaHOaFZ(rFi+RCXS+T zRV~j@`&pIgb|8lc{6sSM)yVO2cU2b+k{iP?h9NLd#8?*zSB{DFDkv=K!?L55P4jMw z`VRQwRm(*JaRQBOlu-5Xq$^}VHvhI-R+9p?m5af0XFcieH`4~>-^QxPQ!F?U%-Vx< zPnyvttdu@p1OTZ5bmJ8 zy^RELxC03cgrck#TINAP97lB(sP_CGl2sR?qpVDwRpmR19zQR}ZmzOkF!X;MIWxPA zDi$r#&-rwSbpX*9u?FQbKZ%jxAIxO-@cXPnn>Ee&(~)YK%X+_9=QfBf7OxuP#9A1- zcD#9g?+7=8r51iz3b-{Q=5CrT9gAse|Ec+5lfojuZ+suN@zM}3%8zL|@_gF7?D228 zaYu_$-wtB!8@~pTYdw!|QUw*s2*sb&AId4s$zOG@NnMVSOzCVQcw$R`Q9 zm5CX3T30yfmCXcKYXFK)9|BXH-z+2jlJj=9u#lr4N z*Ayp~{o(NdRZx?P2!Xh5|M1Y|b=C=(M4IOCQBH$*72UTWb!NFK_fa3lH3^85zC|M&LQ%gtD5dFqxw@k!kf-4@>dcAV%&9nA^uy^+ISwGkB5>7KG$&Pc zxsui<)1v#0&rqnuCy|48Xi?i7HGgt=hgLe)(P-$>EY@C#8ZO=`3Bs}TuPalAbaAkZBC2cA77i}(5B46$BK9P&YF7zlPbj0{;~?;NB#1R zv4g^%)W|@|xW!$Yep}&K{P2BrcYkMg z0-1;DC+WJs#x+sL49|VuxV7_}q$l2`mNW1$NI%|)KUn#`^VP8GI>KePe1p|;&OrTA zRTQOQC3+L^L26Z{bMCK_6!2)Zy*c_ja&S|!vyO}XGXXz|n%CW!K}C8m#1fu53f7j; zWn0fjKKAA%)hzVLMLG5m>=eX3$xfU7?HVV7!~FkJZ{Tj`M~a><)+!1%10N!?^dI6+ z_=l=~u2ZF%SNjJsu9_=12-|+MGEFu7^i8D5@-1kp(ea&hR5;Vys;&KryGR}&->~Y> z9UBW_2%n6o7NRQIpQZhy+0O)mXLe}yPaY}pZ>NLD^EqfUSJGvkgxfuc@W>h-GNx zlEFw+WYbtsJeDF;Fzh=N?K~ZmdHooerMbc!;9>r4&$~Y+dF}dTIO}=Xmn2cd9D0v6 zuHA0>zXGn|)UD0@g$PHM;744O?%8&jVxUu`II zTI7$sv*G65&;N1g{nP@w{|6k|Z(`|6=qt@Tx-N}Jo~_jZZkr)t0cA5k*iMO0hjZw4 zb^ZqrNqC)`^KR(#JEwd61iAirkh4MGW)QI!G0#*_tRRWo^w>*vZ%%K1{7s7uh955L zxsH(1)B5ndB5|WWL3Yf^o^{l<;|cx6Rv{N$ecwxpp4H{VO?!e#sy0^ zho7k5Q=y7Zi)^0;DMxinQ+lg5ANlJ;py2bZPlGYpMS_*{dfR%*sjobg?3ZTB>bHWA zi1uW@aMi4B+`lrJqputL_x%E&F5{w9a$LSI{RFK!)*#)Byl;dtXS=|}49 zTKTf6f~+OsZC|`LwrI+rQmi*NJ&iW4k*t}69>GnrA?IlHKE+Xo&PmyY`o@TtP3#l< z*6=v4A%EJ(R+~qSXXgt_JbBR}r2A#QeTQ;Of({$E-DEq0RfV&&uR7a+ne$J1F+R!n zy&f8BEjDa4cU)v!2%kk-7e`k-+uKV$b&(hR^0j)R@10*s*(YBaCv-5c%7LL&$c|H< z&%3PpD;EAjgDS%Vlr4r&<$W81ot%D@KXsRoB#R_CdPBU7DngxF*8E4CMTlHf1I zo%~`&kvXJfhAC^`#fXS@?CFYZ5h{@=D`Wh=dh*qI&u{#Y_+GO_|4!=-89rZ8YP{&* z)W97qq@g?Xa;yA-xrNwTn4s0R!mRRlUG3Scp7;atoMO~7#fCG*z7^TpO8)R%%R~rW zVVg@LJmY%1|L4!L4kPus@|5?~2Qc+^_2Ea6+fpOa;`LDyATJsk%xJNphFOjU_jyzW z!8%j@p0B(7P&xL)g1RTYjOU%B(Ho?jsolZ!LBANeGCd*7j_B5VdjRC^MW*HjZMIPn z!ccFneB6wp<{+Dx&f<0`wx${%Y{=6o*i&tDUKgJAf#Iz?)g8n@hldQg1wH9cgE42Cj8>tyI%^79)?C8)><(z z?a)Ia70MX?#JvL7ie%xdK9)N6oYN~Zxc#O7a%U@@c`RoByf#^`@Ojq~)4 zgINjdM46ve=<0+LL6JxHE-Dar>;2%T+ppd7JQqx?6&8#)?1A^X@bAhgBhIzIAN_Z3&xhCcoK`na`4|$k zeThpFi(@MX9%t?Rl0JhId1q%$^Ob#bydwC@k$$OxIqE@w@cX>GEMyIWcpHKlOD?ey z#g6L>@<}&%9Nf%ow!O!xUEp~fVhgBH2XAG{)MMEF4%!l_iglj&T;Et>mmupOWh*)a zdo;V$>+F`LQyfy61SFp`$VJ>?VOU0LVClC_e>sxxD6f+RFAyDzt_#h<_iRdiNgKFw z6RXNmo275=KYUD+e1%5S^y#ih#x6#^Rip?;!>BK(2I=#`_Tu&~Ew10io4Q4*N3KUT zd(*ZA!vqQumk>#D#C%LvxD!XQIAuhoJfJA;{iTCVB8FXw69Z?)_4QmL7qoL0m)H-0g9sf&S+UtpHE0_>n;x|fra!${yN3TAHZhrS@WL8&0Do;?)IG`NNufU*(>B~!K!gL1gP9viWFL=Nm+V7 zNfNR#50V-2K_=co4Hp%dPw(HeQh+HZ5)Ym7M#oAVLZclWl!D~meHwh%kQ(*f{RXxBu8+8rAo?{Baqr}y>Se$u@=1K+TQcC@;6oKf{E)R#>yg=W*^3j#_ za|dtdEzd+W3Sf$dWdBk2_7P{vW1`#i7+m=UQF{Lath7OoKdcmZTifgV) z;Gs34z8&?M05m}~K31FCVF24jcZQ@(!TRJrwO?6bV$8X0T?&B!E4eRtY4C9`0z+!z zY!0l4Z8Z~{nFogZTWM1R%vP_+=q6JydXt)7mg*7SK9j_v`7X>E?kszlbgx^RB>~Ej zv`YyovaGV(LLS{8#o1Yn8pb#}M2%C~_v@r_I^(=v zo}T(95b_H|Li*s!JGAp8Utf#RV1X|jn7%tEY>B8Xz(R5ovt|Aut?Ca_-BtbN2MkBu zw~ZFk56(9!vIyRa81^S;K$J!j4*mNh#-f>FX|vdpf$89Y?XZH9LyWg}#LL)WsjtwZ zHG)<*JyLvJ5|kqaP}L>2G`<8gs#89Idwr_Vs<(!N5ZW>&PQZI4i#Qa?sjG>lX1V9NnJDMX`sond*#JFMQ zsXb=nXo`!~S}>Fgx9enWohZFzKk|P1Ej9j@r1}jB6FI0WKGhsfKbKRQ%uf(SQ2eO%*{1hI&#I|qr?qyC9agn?f9Y;4^R_^ zqR~{_9BA`O~N5LX_0SO9z3E!?I)v<%F%ELNu^?~aP{>FeO%SAf*nK^60 zb2P%rXCG#pg={XB9~tn3v3FTjTnlC4)+#Rnz93#;F2g5kjdLW$>M|zYNGS)Nz3oS4 zeS`;Kg)fgB?d-GP2S+s{j2m^g&8*Fn+am!5v;m&7??&2^|EnM07BZlN@BW+#PvjUg z6E}3VOZb#af2!s<4k~(zDc3#pno1{i0jPq>0+1&SZKp;wUL;yj za7(14N`POtgTVi|Bo8RGtJb|4G86)y2w~ zW@EPiH{>*?X49FqG#gEax&F!dXV}43X1-@vV5b6j9*@lYA;k_AekjujhSk&momJ(j zr=IKm)>@n*cgjK7@(`YQODSb+12s2SL4X~5#!P^Ed_7CFbc}!LD2x};Svx?@lhwEI z=t?;@hu-f=ZLLVjslvdwQ4itUGpo=S?j%?_TX5TFGPKpCrG$payawdW=HyPMeLRMw z@`Tg#Tw4x2mqwo6vs7e`M=36{gIMreJZuVqW*e(TT4mk7ISuF$+SaUUj$ff@!8B*b zdhiiR0>0u$*2B?7&~-p-UJJeD_mA%oeAj~ShVXyI7j%yHwIvZ^6l-1}qja?rKr+iaf3jT|i3 zJ}SPo8UROlV*z9?r#r85Qm5W9{8PYsXd=&JQk)1@3aU_YhT$2OV+@9X)r3~okvcj zI4u!+i~(<$m6Vp4OTZgaIULx352$IiE9f+W+i$(|B`wWbZVJC8-^~yFI``SHo@Qsxp5)S4xFOilmcxza7yXu z+aN7iWq`v`kRbp}{yp(ViY%za|9>;B7c#eW* zu2|~)0c$_fG*UK5{6;}WmP28iREf_u4|>VI>Sx$R1K@_V!b`~-gTk`gZY|;$&L0TY z(Hs7GtW&U5yC@5F%7HgkRpxQ&B@S8p@D^n4a_0}#R7Zd21+8l5=pFk96?n_Sk&a&g zsD*6g#q=H+#PaavbGy&hbvC|TsxP|@z%5ufns6I1Z&u3TL_4kCBGl%j31JY^71{6t zq~m@~&=CUN(SJP6f_lq?BeO7c;XhxU6q$k$+7o_g7xf8Zbq63qyJsTPu5{LJpV6-nldzO_1@Dl>nm&5UjnI)#QvmrU=nNPP^2b z9pgelF2eUB^5h+SqLL*PWUf9z_`T(KO-)Xpn<@Z@Pe2aWK9{}Y^js(f_9IOsxjBhI zN!f1|YM-B3j3 z!(0T3ol*!L&FDNE+JS27>b6`c0x%~LZ$W4j#vycY;kE$VCZ(ge+>_h*Ur$D^%}JDv z_5~fm6hV#-qv6&Qu5%K)kp9}$QAl7_b5pY}K~ShT26vj5TO?)#SIY(?4A&ulK9%zX z;_~^|Y4p2Qa*%Rm-V84CO0!quAMbpuUCOrm1_J|X&sUGHYmd7K8Gwl`~Au?A&!RbhXE^afmpX4Nzj zV?z0ov+r~5lw$4|WCbV*Kn=an%m~62pv)fLYbW5G0Pz*ntePTcf#h%l@1j9&v61Ed zSOInrQHWxMjv^QMYQ^y_I`5M5EX5O1BWGj}^*IUY0h>roETS4$kc`5&O{z4T97ID< z5+O`Ak4koAAS~jLh3rQqX(imLj%bWK}|~2#3GCkR7_V;KWq> zj0{55Y3FY-Ci>R|vfz0*-1hL!MI!o3+>~NA!qP+J`qNIR7_1N*T;{5HS`qQYIcW`a zdokczgaro11)-UbBvLMX1r<6TO=$Rv9-}m+$Pl97!xT(Crgn;Z|>6Xi^TCx zIHvSx_%+P$*F|D;BMW~HZbcL#K;zC{SF`>P6*Ptx3g)iuStO1^gUdkVvzSVk{ZBRi zy0SWDoj{Uy0Mls$*#Kzd67i_ZSM=^^0wCtY_a;AFS|rlM+L;K^6Nvb&&qE8mz3i%k z0R1%*a+sF^l_6$r6lw0K@DQ6-p9Ro}v$JLQ>Ux*;D5o{%e#zmbLa?$Cle~=7)a==C z7Oh8WrmUl+>$Oe#Vj!}=AHtX8C&Kp8AiabblSGJ|`Ra4%jzGpoLbBJt7Kz0Te1w<) zB}mN2`wvDXS5;O8%If+V?jkW^(G0O_VkaV!9c2}=L-fS+h~8IhMuu3$EfRCOrWnxe zfp8=bwe<2)v#u5nzWmQ8Osa~-pPUQbto<9yxJ*xqHrD$fDr=qqX35N5Uvt`RTe9JYTTO{9ia+{3>cw^NB9l= zl|zF!RnYbSI7;NU=3zzbm}FG=ZEWyI3`<50-f|Qmx?{V*Fosbuwh|vBB}?c<_Csz$ z-*1Kv1V(Xf)~#--kRHr9F%dTYk?6RS?5Ed-&J(8!q$G`HfJqXvO7i+1sVh*&t0HmjUmk0~^?11BzvizQ z5VQu9sPj35l-`;z~-ssE|LpebzX7!g6YKy0 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-night-xxxhdpi/splash.png b/android/app/src/main/res/drawable-night-xxxhdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..736d539342ddfcbf9f42a887981d225807178662 GIT binary patch literal 16879 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-night/background.png b/android/app/src/main/res/drawable-night/background.png new file mode 100644 index 0000000000000000000000000000000000000000..71e9c817e8c3531d8b353b9818aeece0e1e64971 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryJf1F&Ar*|ti3tfno(Kc$izVN6 PfGh@2S3j3^P6 + + + + + + + + diff --git a/android/app/src/main/res/drawable-v21/background.png b/android/app/src/main/res/drawable-v21/background.png new file mode 100644 index 0000000000000000000000000000000000000000..3107d37fa533216ce211fdcdd7c9b8633fab4cc4 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryJf1F&Ar*|tKmY%?XJF%FW@0Ma R`v54;;OXk;vd$@?2>`rk4}t&y literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml index f74085f..077dfae 100644 --- a/android/app/src/main/res/drawable-v21/launch_background.xml +++ b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -1,12 +1,13 @@ - - - - - + android:src="@drawable/splash" /> + diff --git a/android/app/src/main/res/drawable-xhdpi/android12splash.png b/android/app/src/main/res/drawable-xhdpi/android12splash.png new file mode 100644 index 0000000000000000000000000000000000000000..bc51ba39fde3a6d31d177df8c233270ceac25064 GIT binary patch literal 8864 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..9303b2149ba3ee20a0d9f784992715ec9b6f48dd GIT binary patch literal 4566 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 D=nAJH literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-xhdpi/ic_launcher_monochrome.png b/android/app/src/main/res/drawable-xhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..9303b2149ba3ee20a0d9f784992715ec9b6f48dd GIT binary patch literal 4566 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 D=nAJH literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-xhdpi/splash.png b/android/app/src/main/res/drawable-xhdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..bc51ba39fde3a6d31d177df8c233270ceac25064 GIT binary patch literal 8864 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-xxhdpi/android12splash.png b/android/app/src/main/res/drawable-xxhdpi/android12splash.png new file mode 100644 index 0000000000000000000000000000000000000000..6a8caf4a1a5bcf3831b367d57cb10dd7317193e1 GIT binary patch literal 13715 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�Z1nJ{Ml&~Cei;KK0dpb2Ov!Lx>@eH**3mb1qa|`A_or|Hp1!_S8aJ_uKt&0hOc)o!4tCu$g90aqF=I|c!*PRy@6)^PeuXb z;Yjz5sGN(3RK>vz5At+$w4(vq#S*uF1yhKmbmHD^aND|ocOR3i4I^E>CP!8sh?xgK znaIio7_mwYH1IB31=FZ&Tijm$p!Ga#UfeRYY5--O0br14xOC|WuWF`@^7}$i)&B)6 ztH3cb+JD?=U)lUUrBnOMYGf8sVP>lDIRjGUbQ_*+T;BcugMpxe9exI_TSv2gt{7dg zgU{{Kt0`;YQCzj6ONyB(ntFWD3XrUvaP*ggc&MqVW+$vdJSSgJCmfEq04E{d3;!E6 zo8AM}`esJ%x&Bg%IF*>8lVAhie#rM);K|-#k)x$0OA5IlN^zEQ6(H0nj{&>Kt zndbV#q{{$aelAkrzNpSAITH0(`;B8--pt-;52GgsgxwoVgl#3TIpE~h2LBRP*)dx5ohnM8GX&0Hb=_w}oQr&;J+gpf z5Y2NYkg7CT@26vq2}m_feJRq#L53X{1rR{SU_}H9j5(s-XcD-oOAH?jvrgfE~{6y^#E^<*&+K3^Sh3Nir%QWW+ZM_nr5 z5Qg9ox>EtEPX)aLk6NC#jeMK5ra54u}GRBrLQ!>c?{mNWRaBmId?c+2i|hAE8d z7hW|rb}w8A>QMnop8-nWY#mgN~OF=g`(R^`y@Nyyd#MCHno5*9c} zw6>Z6^8+V_ME=T6ET9r{~U1kBGW`-t7NtCD7SM$P}8w zXi2@sx%sAhk~61poPir)ps@IvE;^a0JG$y1r03*gKEYW{0Ic>7h)s{v+Ot;-IOVb# z#W8LUou!)2fv((MR?3EvI5`T}ThN$9c!1fv^(r-89SEzDcmLcJ)jxux7!3+@AsRsN zXP%t-PLHejaBhcV%KY2H^u4W0oabdFjS7JE{JPh6+bM-(-JC8bqJOy5$1Z0lR^}6Y z(mpx&TxR!a{lhpyDn|>m!0(8eap~X^hg>^cnq$%<#i42absE5vGeB*On3A!t1sUl@ zLN8}A_=}^?P!A|*UW#zS4PXXk%lEb%uAJ~`nmP)p17~_`2(BNv=#GmOIwaTM)4GqP zJ?qWykK$4d1VR`^17jA;E$|3ew%oYd!!qC)p$6Ex#}T!_c|dOA{j?o?!;huLXb#O3R*(>u?*nYU40JnN zucn#8z(uJ#!?>M*$S}u2Mnjh?UA7hYtR?e_e5zH7Q#F?`~SL2f*^Of9EBnF zyE53x{x5&Ouj>!4d?Y`05{H~XN&G8}9!Li%g;W_<{U8%Z{6gh!O$6uu3Z|d|k}SFU zxr(7z-B_pe$bw@}q!~m6_py(g6%S4(!~$~(>uEG$xXWPSIji?8C)1xPqMzv6Vm{;aL)jEs|62nq8tP;QTp10 zI83p-zZXR0OeZUoth^S!W9OJ)tE{K1@rcCTiUkvjSt=Wj|5)ob%ZWaZjkGe0jcP1u z)E9aX`g;+H>!LRhVv^Xz>&9fWheq1V3JGN*Hy0m%u zi)GMDDPV66U+1dX6}s&kk!W9uDpo)Bm1Q`RDO}lM3q}s(|aiJm0X(W>Re-@DK4DZcQm9-H;m?uPRIx{Hahp zr?j}r1L!k^3<7*1%mx0ID2o@keXBt$_+9@0^rt7^-dxg@E>Ru_lS3wk<_7OCAs+q@ Dmk+?( literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..a16a3e21330a78cf096f53a07d84e891cbdeb5a3 GIT binary patch literal 6290 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�Z1nJ{Ml&~Cei;KK0dpb2Ov!Lx>@eH**3mb1qa|`A_or|Hp1!_S8aJ_uKt&0hOc)o!4tCu$g90aqF=I|c!*PRy@6)^PeuXb z;Yjz5sGN(3RK>vz5At+$w4(vq#S*uF1yhKmbmHD^aND|ocOR3i4I^E>CP!8sh?xgK znaIio7_mwYH1IB31=FZ&Tijm$p!Ga#UfeRYY5--O0br14xOC|WuWF`@^7}$i)&B)6 ztH3cb+JD?=U)lUUrBnOMYGf8sVP>lDIRjGUbQ_*+T;BcugMpxe9exI_TSv2gt{7dg zgU{{Kt0`;YQCzj6ONyB(ntFWD3XrUvaP*ggc&MqVW+$vdJSSgJCmfEq04E{d3;!E6 zo8AM}`esJ%x&Bg%IF*>8lVAhie#rM);K|-#k)x$0OA5IlN^zEQ6(H0nj{&>Kt zndbV#q{{$aelAkrzNpSAITH0(`;B8--pt-;52GgsgxwoVgl#3TIpE~h2LBRP*)dx5ohnM8GX&0Hb=_w}oQr&;J+gpf z5Y2NYkg7CT@26vq2}m_feJRq#L53X{1rR{SU_}H9j5(s-XcD-oOAH?jvrgfE~{6y^#E^<*&+K3^Sh3Nir%QWW+ZM_nr5 z5Qg9ox>EtEPX)aLk6NC#jeMK5ra54u}GRBrLQ!>c?{mNWRaBmId?c+2i|hAE8d z7hW|rb}w8A>QMnop8-nWY#mgN~OF=g`(R^`y@Nyyd#MCHno5*9c} zw6>Z6^8+V_ME=T6ET9r{~U1kBGW`-t7NtCD7SM$P}8w zXi2@sx%sAhk~61poPir)ps@IvE;^a0JG$y1r03*gKEYW{0Ic>7h)s{v+Ot;-IOVb# z#W8LUou!)2fv((MR?3EvI5`T}ThN$9c!1fv^(r-89SEzDcmLcJ)jxux7!3+@AsRsN zXP%t-PLHejaBhcV%KY2H^u4W0oabdFjS7JE{JPh6+bM-(-JC8bqJOy5$1Z0lR^}6Y z(mpx&TxR!a{lhpyDn|>m!0(8eap~X^hg>^cnq$%<#i42absE5vGeB*On3A!t1sUl@ zLN8}A_=}^?P!A|*UW#zS4PXXk%lEb%uAJ~`nmP)p17~_`2(BNv=#GmOIwaTM)4GqP zJ?qWykK$4d1VR`^17jA;E$|3ew%oYd!!qC)p$6Ex#}T!_c|dOA{j?o?!;huLXb#O3R*(>u?*nYU40JnN zucn#8z(uJ#!?>M*$S}u2Mnjh?UA7hYtR?e_e5zH7Q#F?`~SL2f*^Of9EBnF zyE53x{x5&Ouj>!4d?Y`05{H~XN&G8}9!Li%g;W_<{U8%Z{6gh!O$6uu3Z|d|k}SFU zxr(7z-B_pe$bw@}q!~m6_py(g6%S4(!~$~(>uEG$xXWPSIji?8C)1xPqMzv6Vm{;aL)jEs|62nq8tP;QTp10 zI83p-zZXR0OeZUoth^S!W9OJ)tE{K1@rcCTiUkvjSt=Wj|5)ob%ZWaZjkGe0jcP1u z)E9aX`g;+H>!LRhVv^Xz>&9fWheq1V3JGN*Hy0m%u zi)GMDDPV66U+1dX6}s&kk!W9uDpo)Bm1Q`RDO}lM3q}s(|aiJm0X(W>Re-@DK4DZcQm9-H;m?uPRIx{Hahp zr?j}r1L!k^3<7*1%mx0ID2o@keXBt$_+9@0^rt7^-dxg@E>Ru_lS3wk<_7OCAs+q@ Dmk+?( literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-xxxhdpi/android12splash.png b/android/app/src/main/res/drawable-xxxhdpi/android12splash.png new file mode 100644 index 0000000000000000000000000000000000000000..e68db46cfdd9f2e90a2d67f70c297966eb2f0c18 GIT binary patch literal 16872 zcmeHtdowK2~GApKl#1es%yyc$w{%+<6@s4 zd`#SVu4@dYB3x0&d z|Hc`i!%e9sMtW{vhCAs zYYu?&W^LdWxlMOiFW~IOVaf(W|F@bWN9V5ugls=262W!q;ZNqr&sX;wqA<@XOv{;P zD`zUKs^{!Z>0u&lc$9?f&9OR?31zaE8$A$(vi!aVgZBzJ{kAfj%81{LpNN; zq5qT)IT%ScX20ax%?1VV30I;CXZV`ZC1^DuyA>gjFl4_nGC#xa2oT83IFG5T?qzo; zStNEAKO={a-Atv}k=zqXGiKj;<(=4b7lcM^LfGD_JFFAnN01;n4|!N814?n{u7}EHiBF zX|q?q%tcHD3qP9(w8hqm0ZZ|^FG~|Sx^kC_$0XSsDGKNm1MO1GvOBaaUo|zP;5ju!-D+5)EgaMLRo#CuDSg7{w3*uM1gRg@O@~Q;QMdQAQ z#v_l-+Eq{v4}`eXw-36wMS3qvtpn@UzRetB@MudVG|cglLRZNsivI;FU8SruhCcLr zfyX!cwT_h!B;QQdm)UZ1AhxbN=%=qj00JatP3yfotvSLPxTb(DRWiT%m*K`r@^k8T z$rii4-~DJ_3(cNPLw)(&{DGyVENlEzie4Rk9e9U)I*6;I2lu!sq0dS>&DAK4u{`!Q zmL63$XUsXN?VnuvB|aq{d-i2`F9i3lsHraBW_Ys#HbkH9rv=0wg7siFukhf^8GO~P zdV`w0qpsu07$?8xbbGn5SaI^SN)R_}{8VmUn=<>8vvm!n$Z7pH5OnW9J`?vh8fL#a zB2eS=HFEFBSutYIH!vzR2&c^+-PAW+2{;zX7p*~YdA!6-c8=5r6i7Y@gtTq8MT=or zvXOi?A%T;7Ob(~j|25IyyUB|l9e%=Epk7+oU;g{y_IDEW4Zv>$^zd7fMQ)K*{_OAW za+h9`HIB+zE0^<+k*+kB#!rz{tDBEn`$l0Vl9!aLzxMDPEjh+C{=sd z2yDi8GFAR&V(Qj7)%&SRDP0@&a~YR1j|>E^ejs@s*+$}RQM*1hw?!VLX+cN&pkhC! z&a>U!ntSV<+I}aJg|ynh?;VY24zD|qr&_=IOq`rJoi~3Dr{?{snEjwtzpl;SV4X0) z9f8t0m0DC7Y}Zh;xFXH@bY_RWg>r;;_}Bu+7n*<)btTx0`GLfjPo<3vV8Zs0Hh{^K zh=h*pqcftyS4|BzHc{~br_Ba-1r#)w9*^x%qpAe?qh}{tY^|*y**j17pRu2{0JYnp z|H+o9+JS_A&cn-Lr=G!~R@2n2rUonO7Q;IOqkAv%l1mI%9UM380|mp- zw>Rbd@w`MoNB*aex6m5L-(-w^vcV)#uu6W;c5U<+&UfxhB^-TbC#!0Fv7~DGn3iV8 z%<|r`Z@vI@=^(&#)Q?9eaaFSGgM5OzW7?RU%j+H9UYm>0qOV$3P^?{5>V0CD*pepf zC3fm=)v{Ejs#V+9VBJ5^ScXOAC%GC`D1qI9`0pks^bLvvn%tCD@7D({W^N=o>ziLt zHXNo&;J%fcM3tRj(Y$VtH7RvJl?0nE!oXFw@qiV_r#s6opgX4VlZ`*^`%2Z3gWu$7 z6Lw>>Nv2&IS>CqiN2Dqee|r}6jh+*@TvW}W%DtW|TnD}(aOLZS(+5a#H<{NNzZb0Z zF(qrL@h@i`$0RV%q*1&ssfx+^Gp{;t{261oVu3$1@pd_@5EyrhYy#O3xQ9-yL&dD^ zy2GD-k@uVn(HSdey-qxUA_o5^LCtV~njeGxE@fRTa?R@S`@Unh`y-!Yqc9gjsEV!~ zjXY4i%wGq5qM_Tkdshq1WLV^{ueh!z9YV5jHEE8VTb3fu5i!XWnV0U@(ZoY7y0oQ> zTsAXvwnu4IHgZsdoxCzD_j2|XzUuE4t0bY3uQ}r6mV~0Ef#@@%OUuw0#1QH7RYA+a z5u1)!MJS%m@{G@AmSB0V>-U(k{HnluaWc--C3+%YH7tsR0+Rq5-MU|LotK|-@)O$q zR>v}1^`pWEeYhV;b%~@g4;IlV>YfN#vlvn&fnB31@7iK%u(8)rW|gUgE~F(aOz7Z- zjF}q_w=L{=kN7qcjEt>w(H@o`a|5DGgLPo|nV^NUSPs{<0{v;sjiia&3)H4I4$rhX z_z?)TK~Q}~O(%15B!rIM_-sdmdHe(|e6Y9vkAV4ErGd^Fzvb#UrpJEWcfz&GunpC| z5xKCP^B)ywqs=vXia zRe;$`TQhiIIwl%}!Et_qR;Df$DLA)0Q+eaLQ9L@1V(oZv_4k+@GH7Q$J_&3@5ss-i zLl*pC&~@S#%s+t-(r5R+L=AR!Dr?N3I=kk%yW6}C+UUHN`Jrl+eBa#&Fbhb~(X=9g z#vwVDnAUqVmA~jnl=fCF-tO8Y z0rF2lL-;m!3za6)ae7&bQ}FnEGd}2KB;9uf?X4MKGp)CGuVQKI0hI2rl>K5`nUQpF zjkCM}cjZRS5m0alK`<*aR+{jfLe7hO_qFV$maFM?gN?kA`5|h?tle_J;N=ycV#~j2 zujaJSiiZZ@Drd)?8g-=kT^4n{xdE0ew~?sA{=JUQ7-f5Q%ys5RPVY8?1QzFq*h$H{ z#Z~>zeRe>@#D%1B{E*1sz8T@HOT(nhS-owF<@C-z5ZZqT$}el%anXvLK=C~>Qb=_1 zS9knW`rAtqvwy74PF3kXM(?((_$<@CO*2GOYsIhJWYP-1GOUEor5uK_Db(=_{GZuI zWul-7f-Yb2{Gw!A-*#C3sAi%Di|&>RDwA-V7tS8O$hTRpSuqP(ag!jv{dPGif2%N9 zhqzu`g`~ECW^m^VVwfY)ir?gPI~(c;pCq<+4D&in7cVvDrq}p((7*4#8=xt^EjEygYhTE#;Q9PE-Mo;7l$+WcmR44(=%Ii(B!<#Kk}sn zZeR^L^UXjJ%7#mqY4fk1GOSs+-*eTIWJuo#nT~{O z5%h@*-6Gj7m&d1fYyj(#^ex8ln^8BYc&@3+j5eD`3^!6Ao^{{qm*AAr zHqGVb)ztQ&5Zo~pXMzN%RYB53ltpRiLiv`TMgE+3GqZ9Ny}leY&~S&`EY_a&R?rr* z-!P8cgktI6Zky#SXN<5#4ty2@T^@)TU$YAvM0u%1ctXDo2`KZer+MtFAf_g{($vR; zt}7fHVx~QjjP`G&b(}8i8*`IDB5eN85K<{`m8B`$1?uBjrt$WpoHj>k#gW3{={v?>`|=q%j5RXte*6ud+tdD!&)nsB#3SA8L5|tvzfb9}83xM*GGmP0ma?>^v|!Vfs>4 zCCF+!hWp`dU42kz!zYJ$_g$L6?I5J*)3--jh)kbdD6JP<8n%YDKF2xWrwb{>iL_kA zvGfq_WJT*g@@*y>FSrUd~!HPe+gWUrYW zCx2%Sr^@xoigDngxcJED1z5IoWz;V3b011zr)o``DOStuyF7f7uc_*{^nsErG#kM*Y#|I^Z_jzfPW#I>P$G)r9rZK$ zqi9l(b!J~hF|j5}N_l&uy~Mp#MH1^gZm4*CBh?Ta-*?Z97AX~TNn03{JcW$WFI(#z zX1RK~Haj}4#J$*=cEpyPDK&k>Buu<0;K?DmSn(PV+5mIH*MNk@d9>QVm7I}N-|C%v z%*y^qOV?bB3!iUG8meo&D)GdD+6OS{x00oF$CEqTGiCNiQ80fpTN!v8wddbyf47BG zRjWRPM9}ain~ijB1<88e-fsS{nmRBHmE!90FB@BuW?uA?flVbsrSPpeOSB_By@)q| zAO192=ivO`cIhR#J~O=kOT*vv{+VU1N-^<9DNc*izThwP?&VdC?V;Ifhy6h%H|q_p z1Eqw(Hb|&oKd<9-mD8LI3pRIIjoFQqW|~8}x_u8tGGk&gKIWBaq&D>>{YsA?t0uYo zWWaST^=tB^#!m!7JB2g%`4=K>!j*=`u)No60w)Y&GHH{?3b8NVg%lqUq!Hde$?CN{ zVEoh75WcM(p211VU`ne56ZPc>)9X%mmfX(`YH4~mW3$)PQ3xhi;ACt*b^4f~i)=)x zXvix4yQ4#gJ8@hNKZParWsTe{pZ<~=6*RcVHkLZJg{WC_a7(JU#0K_R7haqWNV|a$ zxcl~?r*w=$bw6`uJgw^VXqrLMF{-ok{VTf;uj=PCPj2>(?Q|7g4^+-WuT?NQ_sM;K zub=!?+<|AD`SKXU_v3R)Z$=ycoa3lyMW0dc-zNpSq@YwKeF+^p;Y?GJ;9v=2@w-+omX<=?yd^5ldqKtDz z-aDJ?Z3JFO$JcM{+d=u%jd?a)jcPip_2;RE4{n{dAZ?QkTt>W3v#G3Apnj9uB9Id9eNNdde5P_#Jk3|lbi zI=X4e*SKl8uXl-%fO<*#oAc1bMVR-%!QXMP$ZGIQM1>j~h%yuY6KIvCuGPK^&wcCw?qtq-=I6 zZM?l|o??t8&6R)FOOay|-=u#Pl2t*HiBaB-+D`MAo<82KDthc?Rog?1%pIfAw51n| zFw=6olc%ZeaWRS1Qk2-*F-)yX4jZ+I)EV34cZ@2G)sch?^cl>k{V#B!2ZNT4 zYKK}$a8Jk2%hwkVHcBd^au}Cl(>((_gR(8O0N+Id!+So#!Zt;c*b3$`Ui|ctGXq<^ zqY`Ai&Z1xggKT#D((CN>Sfh%@JM}0YdO^P06|KncK11+Ujh^Rl7xU7UYASMke_oMn z`zZhW+{PvvG;o(xZcvmXr;W+VAT1cM6X^6gPFaic>!ZSdc@AdyhBtg1{Qa%6l5H{+hYSSPi zd~c3znnQquS;&;F^`N=8=`$gqv1VOHzQvSJzZk+~kk#;%Iop2NF!=2g4aU+;rfw|h zCn`S1{npiv!K?nZW4uzL^t9E?7!nU1vhe#GcW1j(D}UX7hW7SSW^V8M&dAH$A`<=e>~f2Xue>}#@iB(UAU5}(o{lv!g9wCW z?ybsfIw=As_aO#BO`~|qB=hSolzQh4{Z>A3O_UxGD;3w4JZPj`*)j1_X&{b5&Pfc; zV@>&a)80vtw5;wg%pWd|=!nDynuKnv6AEpBg{%#yy?n!Dx~({)dVH?8qVv?~XvGOw zz{R|^7#o8|pe?~;oSmTk8E>bw9cUGsH425iC+l?IMaK4RP2 zP8PwL&q=9B_AF~Kfuf3=YnO7_P94}|;$qlqNFo|HnW*~Lw+*}aHpxGb_WiJuuNGKo zb^z&~YY`O2-g*aTXoc2g55@FD2;gW~6a)Es9Y$ppzt$+^<@U}cW>;=L3kuF7 z+juYyCMpWMyQ>;Q!sSBm#~m_V?yf1#DJ{L0)fNFb@v_>DLRss>^&sfR5s~#3fPDs32{T?06Ng5G|RjApvYaR;HbP6ysjE! zGTUO>un6mnov9r4I)x#Cu2V?5xmaE-FGweldj|MeY2)bCcbNW3<8SJPIt$zzt8-m( zgOP<<5&f6hpUINk55?(`En9%uBPgTfRnwL4u}Zyj(L5tle(Y`DBpw5ZOs3*;BFQD=Np8J^lN6C=So8FGo zrp~<^8K8DQ$h1PR7#M;n z_1<6-64zk+y+bE#JeDW2uwR0c%V5Fr;eCkjsI|4=D8aXQD_TygT1L_|q%*uj-gPf8 z5MNatUMe#`BMr3ABO9__=I}Pnx4|Lf=?s|#w4CWE@MhrCTCWK(CQZOVg660RI}M~IH8ct=`h?Icr{fR zI3ZIH6`NDU14OkqW2XDN`8mm5-it-~^L?(bxO)V7_whR$SlC>VG&w~ztK)*y?TzeA zd>@tE=}G{M+h31D;boB|`hZUN z%U`PVr)JGMMKbAD?i+!V8bYluM{?;7d9eFxb+unTNxoGS>koWSW0N(e>jE z_F*#Z)306L{wIt=c-%jelgGDGgz6#}4g4q3taV)n>~ z`Xvi+c_BNy94nJIfmWn=DV(olj0_zLx?Iu|kSR zuFVvirV9Pj&Q4+N&JUn`R78LJDE|R{yPnx;?*FgMC1wK;;n`qFWy~Y7dKr^k5m`9+ zT7$`{w4!uqr5tuoW4C@%SpGKNVU5L=&sR!5zih-LKaest$e9vI%qiR>_|!Aiw@8C^ zJD}fJc4$2sb8PHVE`_&!aL#8XP;m6|DU&G#UK=7{j2v}Q!CzItszBV3@ynFyMAs4f z?!im9E5=}dH-QA#%P^f*&(EkOrHasdG}>507&u!*scP*2HpmHr6X{c?Tx~I@LTQn9 zwr@rggd(S<1@~bGARZg}XZLpBUl3)cB1n#PX3By4Vw+)qr48VJ@8FyNr$1tJENqR& zG6#arO0Zsrb4dOP`h;yU^E02-=@;1qeT_nVW+Vv?EP^4E0BF1Y`1yYWL2bRXOTan+ zoMD{>6nzNIbaH#+aR55u{0CS%^#dj6+dH9c!Mp?%;i088JZfOJh5Jh4z7;fc0Z@Vw z8dy%tMrz>uvbhy|p~V*Q#{g)D9tSL6yk6In8&~R?CvjIg$t}XtO8?aqI zNdulf!^sE$U=#F&|As%=cAPT--f^Jj0k5o@hmqCYrcW?gE*bF3 zLbKZ`Vn53bUV4;AbfS38g=e9>n(Up73v8;^usN55=?2{inD2Xu=cg|h3~Y!WVV&{&J>3` z8>|Ok)nRZ9Rn%`Qi=jj&k^*7oin1VX1GUOX=1W0BFFf*<4fZ2ZnsAqHlauztyl03| zc~$k79h`qPCr9VxV%Jqar=-kFWD$fw5p42-dMTs>Pt5YhzukE6v7~lsxb>4Y08_|j zxbMC1ay%Tdk8}*58KyjgyteK@cul!c1;8@0?SGY9pVe@N5jOv{0Vjc?l@S}@sb5*S zxe)jO&xS!YymS>fcJnXFlqgzYxw-;-vN2av0O-gOkC)3?3B$I!Gg!?j7YW}sPh@Q8 z&Ve^3%Fr;sq#4Omh(@Y#d|5q`i&PwidJyz82RC12&lc%B2NwPT`AosFe0o zs$G032 zDoX=w%O{%{0Inc|xycVfZ&t2w=O}wnUz(A;r~{d)&95q9aLDQ(cfsNX@>V$#!H{sAT(Yd4?s@eAvvx4*&@Lw+uWB*8q_HH;?>V^B^@A0DmCa8-Vx!l;=Y~KKs80 ziAOcY`nV&tAn%J{tL-YvfeJP9zomknd2Wv|08f!wzDl(*yz&S<{%NY#)RoE%Lza7? zBGYt|7RGhXUssvyejaYc0{38IDH{HgFTLF@u~v zsl8Jjpk#fV6??h#fgOGO@~GMWT>6!(%l#DeCaBu7=33yMTLRKJ1xZ zU=b0qdB~HG@X3K>4l8Nx2{Pq*;BrSsOm#Sp1x_ND%hng59^NS6h=3!=bXIIp$X%Gz z#QXjl*>n|dD)s>_n>zfW3ez`t031Q?#A+g3pmPR!v<~TYARB@3_D0Ht|Lzy;oU0LbUJy{gPfEr=qY zAfa8{PNwy!)w99gwQXmSCW9ABc}ZsQbPzt=;kKa-lfn{_AuQ^euGgN(d7t5hS}fWW z;!+Ta_Q}Almrn3P6CwX=x^{=Sghm&jvds|``V!zyK~I9Uo6G6p<%qz;NZzEjL0lZ( z`OAD?V+R?LYsLm^>$^dmZIIj1GglUcOnhxvC~$H;+`&(g7n-A{NaC-V?N<1Ln>eDF z;EMk+S;UQNMY~0cu!wTPkn}AH4S3$PeC5KF`Fn3ham{N8)zb?Q3>T+DTyZEW*!fG5# zWbGwHn2pe!BD;CQU@`@6yOn}Y+go9cOJ5U-2E7P`y+w^CC^kBJuEm2ygcG-F4nJrS~le{qBk zxOV0iBB-t)6UeUIuff`T8Fm_oC)Cmqx&s@gh2O$BVV?-OH{MZ#%AOFseFZTDRCu8t zC?B2_4rmozFoI%$R2URM4z!eZ-87CP)kAkLLkcnMuNUBUX*sL;<}gl|S*~U*9xrWY z@y8Gk+$Rk8&CVwWb}pdPNS&#SJyDH)Yf;)w9KzW8cs1Q7zR(@+Qf5vvK!kHMLZ1Jz znr?ikTg1!60Eyb6z0l=C?>zZOyxLL7xwetSpomwWZVn<{UmWDVD7!vbn;D$ECY%-W zil;=M$ox_q3o(E)dB}+U_1n+_t1zC)OI3*cq?;+teiS?>$Xru z!AWH7Y;OT6BffG9S@(}!6gm*c3@&P53WKiwaDCtXiC}F~Y?JEZj2EhjU0oRt=bv4o z$VyCp@+!##H!$RB*&H-43N|5TmOlFdoz}daIFd$4J%C0-Eg;&mx0t&dw1w^gD>s|bBUGANLS97UWo?RP2**5)e=qBiFuC>>Fd-lPPi3X$HTzJk=yLugWLNC`#2Kq#-2 z&;o)$sEHB?y+cB0e$K2lm$TNaZ~bS@#dndLljNLz_CEW0_I`Gpsfq68i(D5$Akbxf zJ)I{Y5V-2^hv6Ks(rqFq0Rr9d)z{H74*{>uTn^#hi)`B>sq@OtyZ!e4RwnxI!&hJQ zKP3NH)QcUVkxVd41I0DaBz@F$63NCYNxm)5=nO(sT^%ORy-ZQkFLg2SP|dR7DiM(_ z-@nhtZ4+W+Ka*BJp20fV_T-{lYqYb1?!AdL>6K&ENR7b~-QlH|hpLatH+B$@f@50` z$hlWRph=!}DqtBWGtD`WX&ej;G8c3Lfif95L7F1}z4Tx6#8;ExhMici)m=fXzf49G zw%09KB6GS*ICFZII*#eK@=`#04+qXbaVMr?-xN~c5v56MJE0yh6a(ki_>LRCQ%mRP z$+y}OeKlcd?^V4iet2i`Q3Mx(L7qS_Uy16)X~$;icSHJWqElFiP(wqgi!#q)GhCZ4 zLc7gW(e>)iy-?Cd&GxKf|Bo0~Pm6F{ulo??CP@_~SvFLk8)l{a*%lZ11yYN!zx0T> z)zuhCCD<)hgU!HT?NJX;-|G40HJ9?Bn14vV7sjUz5=&D$FPBORn>zA(H5U*FEA#QN zA_-PG^S5>b`8O>U;;r$4Gj}g^KlM^wJ-QiePH_Dc(%7*=5VX`Vcpcu8X1@JLpO-_9 z9{2}++^}^(pkDQgq2^en9on<7dh1hsjMn||a?HBr9Qigp7DsG+7?HO~o`%i=r!2F` znI{B?OD8@oA>+;<7sie;u}rqD&qxT_@4sKyx>PUjq-$VK!gcuwDMm<^e9~4`u7Sv4 z?bXnJw?*es2ZNCP) z=ck2SBU*FI0lQei+I7n4w(Vc|@uh@*M79VA!k|3JN+`Hiqoow>c0g;N-_ygH{m=9I zmBz~s@VEB`cHYj53Y%h8lA#ZZe7bjt0^o38`L6RuPw5z+3Z&!4u7(*E2Odo~st~hG z)kK12Q;yCA@ShnSb!oP?`pD9Y>F-XU*4WIR0-&wqa9~Oh;z( zoTkAI(8T`Le(Y;(sM>Lbtxe9t*vJURcfFigwUskep9!4_7L{7r3P`;4^EIrw&C5Rf0p6dBR4gHzr3y=Z8Pyqf4Tl zZltzWs$k5NIU22AQ&&T}ei4b${egylRZ>R2zF4pN zW0LlL=2wc*j8KDPNTH-^_(i;? z5_Ipr&ZvOXmvbA^K@aeOXODmQH}tnq7^Ty%j|uq>oMd#&IqHTk_l$9>#wQjZ)lc0U z&2BYy@GG**x0q7`(2NPJU5KFJ38z+NsoMlH)#-51&g%x~}0Q>6e5-Qi9XhjuUx zmP{c8xsr0)bt0R7l1gcby0&&dZYE4x(=%M8i78aAeHZ9ZsxqHZk*eovE67Teo7D2h zQEMlsY)}9)9>{tnZe%6R8pq9T*YQ$5>)PtiW<|Pf5c(Q6LLw?x8l#^lZ3WB3%~)^e z`7>Sk84DBmIcFRh_9`|?mh~W>ZpE>u_N zc^Sz*aj%dbtnK6`Kfzv+8v81&!mcR?KQeNB9}@6Oge%ugiG$x|?|pCMHACfSt7JT% zD-(3@6ytVtJkl-VvQw|16N5ZTojw?`Locj{Do>h-+grKQzqGW}ESQeVku}b31~aGj z^~Hr8r9$Ko@EzV){mk!(g&hTF@d{j$Oa0@x5xK*uS?(q ziAEpOn32u2JNQzRqpOL*!OxI$D*IgIm*PWKw;LZ6k6ZRbU8S1q^Y3{e=|*;x6Es;^ z<><0>+&ffiTpyZ0X}fyogN1VPFZq{_ul<|7sa@wA?`qtc+%e!JA&qg;!8UIe_-duS z{P3R!f@9l@&ctVzRN!uP^PJZT0oqI%4U-D592Z5|p_fVRBt;#FvyZ&XqzWP3hO)cM z(;9Wsb)bUJ7n+ifR^^ULA-cFuEU{Ic$vB&7Y+414g>=z*=(Mr8IuJ7@?mDg9@y4{Y zY3ueFNlAkx=Q$I|c1{pkE%wewJu~SS%PB@;9Fx}ll({|o>#-^^vzxN!{9cfPIGy8z zCtc_M?qh{q?S`{x|1o{6`XqbYswDc>KI4T>enYYNNfE*^ud#D2?(U1QE3&c=ONLa1 z4JaM}J2>5cn%l5C_wT%BA>fyZcg-yAMW&9o9<2uP)T$m@=}vsfG<*z(LMxHD(9V@k z9knRK$dez&K$^g@B$vNTbRtgVS^PzUD@&P%69BZ7PSHw)e5OVk{S z)ogv&vldo&_Zw(N1e{ElYCh zCt-T`-9{b2|Lo_zj}d%bt)zIJCaZ}wLPPV=-7 z=?10(@JW$WnF8Y9>v4ES64JT7Dq8d%`NWY!=9{JC`|_Q1XRIXZ=t+2Z*@XS+fMU?0 z+J(xA%Nkh?lh)+&!J3(kn{0~okCxKhJ2-`{?kFlYBr3P>q@2EbMJL*-!@?rxQHSR` zacR+3&pPpwS>WSlij6Ysztru$C~zU(y{&l2!|T@6rr@7(83a{d2V&TL+UYIhmnmd0 zKK+=lk4bzsG~6)cvXgXGR5Pc(Q@`8bJD|es8?}fE1{{O#&+~M%gZF$_ z3oaRSts#F;R+u}CxQ=&3PK~`%XEGEdofTt(teH#c_g}%ZL_%p#A<7(gNnZK6rv(4J z1lQD1ZCS|Y_=cW&S~d_A{p>6aQYH(;G9x9BQ6sIX!)GvEwMj!v;bVeu)+M(gKaspM z@s(-E%Ji4FU)TrT6WJ|65V`4_WQ>%^SyrwW{ku>&Lro?BKJka zuS>Su?c=oF^OkgxTTM@#gFY&53!$q=8Y_?BY;m8~eHSc{_H~z|O$nO~*@hG69E5l5 zzs0!rMg)6fM868#Fx;kz(Ujw-W$G+1EuA+))~Tr{<9KAi-kF^D1gFA^Geo0ST`W-> zOKbUFNqO`+`TAi%$%yDyYBHQ4$B)%N9aAP{zQdwC{rv3j6fDr#u*lJwi1FMV;_}CY z^zraexyN3;A(P(=NfF-(g(O0f@=v|u@WqcU;tV)Y2$=oT-XPp9)&wgY4}8l5-Otrx zdV0C*@H%)8K=DOJ00Kh;+^M7Jye4yqd$iZo^PNa3R5r4C#~>#%&Y9`NeEV8#$&d#E z`nwN%z-Rn1jeBk~;u|{LUwfI!dZQ2)7_3@n@pZ(K?xlbe0}pa7aePl5r~*!fUi{Nu zWZC{_?gXNnczSy3`sfh~$%{-k&6!9(;M~sr$j5-^$t2*=RDDjAL{%@e26yG-DG$&9 zj7nNoh849&|K>q^of4>#Xo3j-e7>j1)dY%O8&g>2H2($>2T}xR9UC~qs!#OitY zbJZ0SPC`LGfXxpG-*8*Z%_b$=wMA19>aH&~t}pj=e(Y82o0BtE^_+^M_tO)RZnsc% zkysK0n`8q`oxmRfknIqZ5Ke);gSF4~ zCD3Oj1ONU)9slT6m53Y&B<5DB1-XN1Uc&@D)TlRJLf6Z@R$n&jc)gl#9+x!HtODY+AdKwz9~tC(&B+RDU#wK|LIQlt=y6qd9v1rm}99X zVF=Z*zvX5h&ZtbukNvYX9V7T*8_R8n&!)FT8;%<>nb(faPMG7ZOMyboo(=9UoD6yB zHlPlnIIUKo979?U-n}>h92^!FhGQIzP&@c)7xeK-4^G}iV%en`;Slz`TqvPG<-J$T zu^st)qTif`n7}uG0MKrf*&m11P?l62Cn=+e=1$1Nx%)Xc1}lKv7oxXbx56Ct4u z;042CMdRYYp{k9SnY;9JY8vqmOUgv_%KC0&E~GE2$to!A;m-{d%RGWB}>1|lTK`w&7Ke&Hx z``>??Sb7hXht_z}ho1WV8d#wj6y}5yY^SV~ne_nL+NR6+4 zjs9r~a-|&PQz&DQgNB?x+o>5tKKUV1TI~*ilM`S9EQd!&@T@YI9Ym7~ zHO1(rY7?XEGZS>cKXy@)2z+lQzMVQib`R*|A0Mr0r z$K_DzLDyRQfYRL;pK_{*w4j@`z#E^lquy@C$~^@T*4;|HRTrGW53H_^w~$Jr;LpAW z@GRsQ-E4CH%2&n7Df>S+TH8}g6``n_L%uACNCBpqGH{ym?%V7B-h9sm0`i6y^aUvG zLWVqcTdbrSD@PW94*0c^QWNGUDJ~?!SBz)UY&l2)xhiUhuaMl_tOUBE@)4h2D=)Wl zYSy8ero!JIF=S6#UxZ(JFO)4OUH6E|8t8CtBGTY5{RWDqz>>S01^&rj>VRX< zj5hn${@4rUZ-X2D;2ajYHc|PhFnbyJzB-ep2QvL>Lb_g{>grt6U*0C&#QHr3^n8@B!Nn7iQZcnuq9tVt}}TQ}sT`awRz|C=YP0{3d3; z5B{+BAS&rn8<>ufvl9@&3<1Tewm#oMCb&IdVw5m;_^8@yH}rk%IdgTIbBWIYT7N3z z---qQcKW|gCfF@k`H5fi0qAM92Qra+dzVy&QoDUyvGnGuz}C({A?K1zDzA$a|$F27@Zf6!IqjQnsKL+A<0E2P?y1VEXTs;VpK?07m>MC@Am} zN@Z|&I~Q@k4fcbe)a#;4p)&JG;^`PSFZ?ga`OhT%|LHBTgw*G^7|7IOw?@)+!>dZs z^IByShcn9c;fG>yT(*iN#gQ~l9wLP>6>@>K6~FLeGNv3&ekj2aeXIK8GAznKY3Tos zNSi&Iyd4hGL<9Y7=hO*b8%J;+0MESurLf#D`k7FDr-sviNeTj@qel>v?bnHvrosqoWlzfa=VH4y`1*Ae|kS0Zsm5tTyUUouzOZs0+0S zh0&sZBm6#kpQ1c?$J3ebLmYxTorfF`)tQ{+fto)C^H@XHZ~P9VX5#3WuaBd;0w}Ev zfc=fG0w+KJ+Z{kHyz8eiy$ePA6^|evu8oe2Yz_&~07UTOuRu06GA)k_oRK`{OL%k+ zP@^=26^5ImnCY^O=onwIGsRM7hKG-XFZYaC2Lv|~Nu}R_1|86^&Qgga(9OSh=vgK0 znM;Jm`g~SB;WK=zE~G)d3!HCG1MnxVBKKEjkEU1g5nHXHZ2m3*_BVh_{{^f!0c8fFf!|2-TC-%}57%#y7}1bIT02W!1f zwd!5HvJ;8Y6W%T+(t;(DU`3wO!^06+K*_}(oMVD zbHnXski8kS&l??{NF<5BkzQM?pzf2pPX65qICzsCuraK#44SF4dcszH5C#8e z4hU2OBBgUOKuYibHBf}jANr*fomEMEGb4XwL!#b*m1_Qyl`*xDPgn|s`kwqgX#WIU zUGUg$Hc%g!)g%E|`$R(%^L30sIIIImqd|PUl%yDk*EM>1!p9)@6p-K5Yt69z*46MH z+yroDimBM{mD6>4oTR(%3d>W#LH?%;&oP)OfMD^wIjmhiz zE6OHaIX11=$YMKjdcwmSKrl-o5+}tpEjClnG#a~12D#NPkW-`JSiKHXLznXq{}J$5 zB?O(?F;Rg{`<%lv(-z>uN)7h!Bt$?x=aXI3lL@OEr`<1kO_ z5cU?xj0;S=t#`WsfgFtWQEh&(&bQLe(qB|8^G9r_Z4uzczc4t1LsuZZDFX(rL4tgK z2z+$$FzS+rb{mYw_3Fz8x^gYwF^f$%Tv73Qd{n(}49NQL`b&KC3 zD&`!fGywDoroL<96&>G-aa|TihwlovaKy&b80fUYZgn^hwdkl3GI}7EkH);ZDH`oX z#js%(xk3iuO*jJZk(H7gm|k^YFMsrPe?SlxM8_!hM0c{KQ2?3qEHn5s6ZFfMg9zd! zFbHivC;)}r%BI!pc&3a1Z~1=_bBX|X`?ZcB0TGaHT%S)cjlm(cA5=)S z2f@AqRvgu>~S<}aD z9V~KAJi^XrLadEi5ND$J9-2quq8KooO-$DjOYd>DwZkhmweefb{o?cSwyXD)2N>WI z%{iksU_|7T!2RSGkUS0@%Y!dJtQmTFdQyxj-(jAbZLkYz$nkst7Tf}$hhk-bh4$Bh z8(DbTY5ruDb9yaofVxBY=H1i#G+13C7`|yE$_hvQHhrua3izIJdF7f<^llTesnb6% zdMjlAIWjV`arO-jO)?DZR#V^Zfc`EJ_(7+?!*elsB^+>BHV@!Sp}6sQfLM+WkIqAS zXJ+DbFxZV-V66vjF!=->!Pbnjzo>WvcoP3TY5ot++?UQk6@8p#m-ALFfiXWw|AC24 J<$b5u{{z#J_3Quu literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_monochrome.png b/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..eb96212c69cb53251158c3c76662be7f967ea536 GIT binary patch literal 8359 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 J<$b5u{{z#J_3Quu literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-xxxhdpi/splash.png b/android/app/src/main/res/drawable-xxxhdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..e68db46cfdd9f2e90a2d67f70c297966eb2f0c18 GIT binary patch literal 16872 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml index cd8c23c..077dfae 100644 --- a/android/app/src/main/res/drawable/launch_background.xml +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -1,12 +1,13 @@ - - - - - - - - - + + + + + + diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 31af4ff..0000000 --- a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 4ae7d12..0000000 --- a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml b/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml new file mode 100644 index 0000000..0a31601 --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp deleted file mode 100644 index 17737724ae1b4fb09ce2fa5e0d48cd52a439d7a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2782 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 aN%kv0Bk7~T78Q)BYrPcQUm^ZBmID9?j8ixO diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp deleted file mode 100644 index e1f90622967d0657cd97abef56add9c6a7642be4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4036 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 diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp deleted file mode 100644 index 341577c0d8c78f348cf1ce78e0ff5c7b687bff7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4856 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 ei%39VpYXr)o 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 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp deleted file mode 100644 index 295d7eddf2d092c66b1260383b5d095170742b06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2382 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 diff --git a/android/app/src/main/res/mipmap-mdpi/launcher_icon.png b/android/app/src/main/res/mipmap-mdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..799ab2b34c94a3c4200762f2a9117e35627ac74b GIT binary patch literal 745 zcmVX8r!4~JUvDdb#U+;FC_Q7LwnCn{=f63=hZ9j6L5qPDwphX$e7>uH;BZVtguL3liF)^Y3w);Bhw7S$LVpFmG{ zHzJV;g250LmzG#ZQJ4#C$F@;hTLYWThW3sdFqur~yY0l<+B#CH6f_zQ(>$gE$z&3H zdwb~b@57w|7rY;45eNkEg|v6HJBY*@&eYdKDlKJ}$yA^?{+Cx)F*WrPS6f=h&go=!fL5!8D2ga4DM4f7In2z=;#)e6ii%T^j!7uw^H8hREF;+p zWV1P#$PjTj9LQucu-omV^~Yh?<95O2_MlKGu#99YAc_LKJ}*{QSFp7eK~+^1ofj&V z3Oe0!^2-Q^dlKi#5V2aVxJ%Z1M|%fezna4P>1hb0iT{S-qyd5; zaI4Q#iI1!RZxjK!Q3T{h5s({h0z-p? zT#pbx;U=)Vo5cTk@y$)(>9gl}_x261@&_n$;CIsGKk&{@9JyQ$@puBM)K_|#D}Ltz zQvsb$2fyDBpKp%dU%Yhr;MwHl3s@{oEaNCl1q=oQoK7c3Mn?a5c7n*cT>~uRD9ne@ z^|n?le_Tdje*TyC`w#A+yu6%s9D9M{8;D|O!<(Ck#bUIrt@Ro%n9Z!CC|p({O<5Vn z$41fFbrY49r_tN%tGo}z4Ia-#^yjUpg7 bM_%AN?=Q)m-I3B-00000NkvXXu0mjfnfF#9 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp deleted file mode 100644 index 1bae1113036b8593b96c428488a4e295d0530900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4102 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 E0Kw+Qr2qf` diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp deleted file mode 100644 index 34458b25db3680935ef12b5fe672e2890f0b0e8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6712 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 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp deleted file mode 100644 index eccf4b17e9dc5ee7b3fb781d6aa1904abbb3d6bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5872 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 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp deleted file mode 100644 index 575c49729803a494206d66980050e3b67e754451..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7236 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 Ssx2)oEyYHQY!O8+Azz~vv7`%0DxutKN=q)s z{Ss3tHi|LY+)|i^Df@iqJLmiN>zv>FKF>ezKhHVOd9S%)9pq%T%K!iXIVVS3_YEcf zGZ65`9?yw20|3A#PPRupE&%89q%n$K@J{iby+s`;J&+!&tjqc~aw_CgQ2}1D+Vgf9 z&l~1tk;{-7PwLW2W}Lo_cMCPH3=30DKosCZ587pDM@lIu-&ZV04pjk18W|bT*+Agw#gy5_I-Xc6NZLhcS4| zPTD@I>N=j^Yv>5)29r~2&tc;GiH z7MmT|Dcnp`|B=2E9Zx*pt<5W2k>K%oQ|#yJmKVfmGjnsKUWgJ%LZWI{WGS+A>%)iU zGxI3BpCE%hBU@(OwXywzRZWM#ng+_fsz}QQdFarVslLL9g>kzeb#t0lM>`zFQVS0c z|D|^mRBII$riS5Z_j|C3gY?II;Yi)`*s`oL{TvsxA`*=aR;kO^X+VvP`uNdd*CINrZNUb=q>a7eo z_v-Ml#gn?)q+`X{#|7gS89UKenM{n9X`2g>H8wqctu+N25O@((Ca&Obs`&VE18x)zWH7R9fQuV8mcJ|3cX%q@Ij*c@fQ)>D^HZCb$O~0|a zruUZB*VkOXcXBep^c1G8!sq3kpkZZA2g`I83(p}G(Q>?7@TiTGTe_&ip6+hq{s-+; z>3C+`oTp&1rbbSU5fL42M+moETognI_^uVcDp$H3H5+sL(?X<-4;~CGiL@G$8(bbu z?5WFoH{U;N*0e{8@r;D#5+q?U#Dkay9Dt$0rt-YimVo zE}xq?IxO<~P(yX&$qJ*_^tQQ)1JH^3hPpjL!Jzp@|3f02nXHpxMFHW&4Pxw+G5RInno1oMUs?>nF@4RrD zCK?DcU5N0wQLG)aL>+-3YDYuxfeIko4sA)_x|r*S4=GK*Ux_(m4M@;xZ*B&nVuRdL z0*p*F@~al0-x&<|6n`ZX4XdCcK)@eDRWMA5K@8j1+#5|(P~%EY{fu9KsYF#EhC*}@ zdu9=fvNH5&m+fLrLKIcO&D)zg(RpcHeRjxtCk#ue)R2N{{tK0oCYbCS9&Rc2=|x;E zt=}PxS#D`eT!ZG$-H%&;pl^K-X;P z<|;*NuBc6t6MZci27*_Zjno|L%SbpX-?*xcLL91C$gv)|Ax$I7-@I%Fw$szEA!* hMIZ5Bu>WTSroZ{ji)vayTQ?pFz{w74`^=h{{5LiB|33f# literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp deleted file mode 100644 index 00604807b01586c6e26463624a017c2c7ca2678c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7242 zcmV-Q9JS+8Nk&FO8~^}UMM6+kP&iCA8~^|>kH8}k35RXlND>t7J#(J^8{WBjwt|TM zPXNy>7lg`O0@WveOTj-GsHCQvLd&QFDp6)4QD)MDhBgy4A8SS+;3yQgVINKBb}bZq zSZM5AxQT7sRd)G5aTnyIfD->&o`h3j;6Ls|g5yY%oG8&+^Cs2`{I?2D%!5%RNm5b* zfdFD(_j2Q3%Sb>%|0e+c8!Dk!|4?Gp8QnpvCqJgrA-+RAtNa510YLP2oT`gTX zFDUO^x^(E$p`*0Q>Cn{F6ezFCsj03mP-djAt`6Z4{Sf`T>L38%5L8teK~Pl<00>xy zL*$*T?e^r$Ctp7K^ve(cKLP*&5H6n#5;#{DN6$t=dcS=%vUuiKe4hC%-NlL<> z_5ODRB4PskEr%+b4ck=*opsifGe&i&f?~7c!pIh{bhz}L$(NUqqSM8G)X*Ml8meAF+%62P@6 zE*Zy>BsogeX#xDOf+zkvgBh|Mw{0UxbowuMf4g@Q5+wNlv1tP2M%(5{%Ga|TT5Aoa z3gJitiz1hagA^_TJZ(~EAuO%6X7x0h>8TkH@tKJAP9hV)(ge@}ToD4k)-VB_@F-kd zs@g`GU0dU^CK_VEqX@ulZClf^@B3#mqNxiFC|v`(kcwwMxYf2TPww}NyLTz^DMG~r zVFcI!Y7RT3h00fOhsxdE-QoNG|Aiv}kRhq6x_i#H5p8rIu$7y!)B6P9U|(kA6SnQU z+1>8039vM6+bT)QIhk4RHQ8P5?(U7dySuyn4}JhYfneqC&ba%uTe-Veioos?aSmiBaL5&a z9?`pfJp(Q|7P1tC$wmZVCMwBIqAe1&pdKIraCFF7zy~~n90<$~@HA0bL|=iovaEI{Bu8?=InLUBMt8!AKArEpG*-sYcIh z^+nfc$2b1Hiic`W1mXnuFU1)z_}Vv8^3d2Od{OwK^Wlra zFA9glgdu#<`7mK1Y*SKX0L|5PgfmO^ne*y1m#Vp3y>i}wp;F67lAr}NYEX+-3pkLX z5zvSR)F2x5Injs~En2i_1g%!95wsdaqdYQd^oUjkNgoU#&N^s;gQWw&0S@R#f%_B= zR()t32PbxdD?0$pq3nTQ3oK3|^9z;c0cC0yNo7G&WRXxL6j>w%kVR6E1zA~1K^7#H zE0vX0Qj4stERxDfRtsktL)A%T7)8y;=SGGRPSX|m#yLO8(&}y;TqD6}q;PCjhdzEF2 zO9!-v4-?ybH;BZ{v00$-j2M%yJCV>D9+fm9xG9K6cSMUh2P zKo++;n#zKtPH-d?@i;n(>J#1vot2f9;=?EAGh93x>e0{7cS{GL@aiEjW0Rhm+D4`{ z01Uv)R!&pYCt8wvY}m3NX;a4$3MyHD{2DR;A2JxU0o#i)%Kb1+=)3!<{-# zgJYVVzyJw^i;!t4Q&pr!@3{2){~x!JqgNlnRbV>GhT7I9aziomVYVE9&TQtisH=lq;Fc5cV6W>?`n|<7= zY!l7UW)5z|Y+SshK;xRJmJ&ldrntNMMazTOTV2(00|^KlaNIQF^_}3or9bL2H~u~T z|I6GMJhFyZ0i_kLRZ5wKsd_rW)j6-f?V-h8H1)C@^ffM2UlP735ir!~_xz6k_J+J5 z_O@nynmi^4Pc1fMHocrQ!)5TCkjK_`n!GoKXJYTX*FX2rW_8z9Y;T2x8q}gu3upw5 zpw);*4T4rn$_M}nb#fi`LO+Z3*q}N_TKT`fd~k2pTw3$`WWwfFvZ-w9{KO&>XFJu@ zs(Uy1_v31mLI~7|Rxi|`tz?gofpB2LK$!I~>wy6R6Lq-G$WUBzoDkV_0R|kOYe_W( zpU>M$`C7HNa8$nQ?(@Ub&d;Xs8olB+z&AGU4O^Gq>3q|HeHYbJ zvkje6Z8d5lT^k%oPRLmRS!Cg?G+R3}Nym(Xli|R`{)z*rSs4yPP?K=I`jt*gNC$f8 zy;CfwtDln+s^@Hg?_<;3x~_ZPo^HXmx*eY#69>Tuz@?h)Cf9D%6vq7%m{19oEV2ul-zPI#5{%ywW3+0^ESAdS$cOy^=<%sF1K%XwnnYV%KIq$ zQG4VOdvc+{lN%JP79YS#K7bJo>hXcYA$s&F+QAH2o48|2PXXBIxNX`5k9FS4?Z0F9 zdbF>XYnaR0i*?xS0eN}LSOr!068d!aPMhb7TlIbp)gl5yphoR5ggM0*9$RU6tlVUx zJ`rs?D51b$qv2Q01TeO6=3%WHde%r+s`bvF9=^ln$h-hT(M{BLq{;#zyuu3`(+MLuQ&i804^JtAf;)VjIjpHUk&QdGPaycEheog zTO80Pb8E63GXVjEN&pAo036(;$6LM?cElc0HIR7%>Wo<%vJX+kFKmc>aBwHfV1-hknqTG@A6tRE#0dn5Y%Q#LMV>|Gy#|Z9OoR4Gv-i+A4J)iD*!OYG^*D>y3@TX6Ym-}F~-ogRy8SStbA=P zub$K%0`Sukf|{iR2ROjNE!x8{T0jHpb87X9nnz2JHZ5F-*&8#Zlxl2|*f~qDVva~_ z@XS1fN+UZhy!o1wQ@9`rA&5Ezqb-_s(a2zXt081!5Dvh^nga*mpq2fPa1=>u8bGrT z4g-Lok&Gm2#iIC>003YNx8S|6Xv@s0o33yKopiWAaUetBut0c>u@#2E!Hbh(l}sX& zKtQ_AKHtmkhcU)fi&Jc|ee3L?vm}SyJevSqTfvtKzk)DX7*o^sXo|~C7PmMLjUl0U ztr_f*emAeCNZv6-u#7NBwkQ#2^?SKK0Q_&WX_tNPl2p-H005I70J9jYez1big%E

e5eQzGZ{uy46O6mUE$E*nOuzL{H^XDA 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

~KP+ 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

;_&LWVy7vg4kqUoQ8t`sx+nW(a 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

>leDcl0qhPLGw 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 VE45ta?O7GPWhtIr<-O|}7yzsNO1c05 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp deleted file mode 100644 index 83e23b907c6d7dfff41744c7d5838dafd916070a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18498 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 B%$NWG diff --git a/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9e688b9efe00c8b8de4572f4df63c112a2b4f75c GIT binary patch literal 3508 zcmcgvXFS|X+y1W}b(0Xn5+z5JAe<#xg4Kzv)mD@!ISJ7nZS@|6RT9xw7ZI$)CWzir zh#q7SWr?y%SaO85t3G=^oNv$XdEWQK`+k_Yesjn0DD`l@X4=M@Jw>vMT7poJo8B%}plNin5%w}d_0(3+zO!oXo zr{zKHMXUMK#)(%j|CK=vR`pYC`~K7_1am0E)Rh@ubsgx+1OrZ7AYkJE1DJ`eLFpM$ zC)nZQPB?kyU0Is2+8SzZygEK$ZA7fLwpQHH@eo7&o{hJ>O~59}5|OmMNzV~P-ov^uaJ9UZy5f$tofs#|qENWs>l zhXmbcCiWDvEUc{b&Fade9Z^<=s)1|cXC>B_kQz_7Ny{su0J{#r>vwV#f@>n?QC~&| zb^8gbdN%#AJCYnqd0c`h_Ii=PB{X3@{2|^qfco<+O!y)UlboDP*e2NzULWlFJpqtf zZo?&;Ygyi5=ior0O04r#yb?TlJ4N^qve^p1`TPGe$bNh8qy98y9#7i+{$32amKDPb zbt*YHHqMd1xW(hd4l*@Fqtkjer3wl+Ul@(*bj&tPG|V>HL}xkNYuRU9m^A zPfDuyq_M+@Wnn>iu=}dy`KV|=Kfm#TWzycyb>)cOh%EK!r8_CX!J{Fj+KFfQ(XEaq8DK>f$nCk^+cOOTR6`|VM<8aFNUZW-T^%3LsNB!5!XaNP z_y6g=ewESmUE`VEI6zAD@E(sT=EBgsx$~^u`so*Cs}j+ zdG5S^P9Q)-PiU*IL+(Q&qB+@e$`j1}aQX?DF}qK^!cK(EGwM!gAKBu&#G>p@ zFuaeIUa(mIe2J&edvuE!;kNU_$d+^irq=h+GA1(~SQ90EQ@mxae7hJOk=GI&T*+hg z&UIAVW6G}4r@ErsG^sUc+g(mVaDdO?v0l4lK%mw5*p!V1hNa%x(Zxkl_zo%w0)eJx}7}VZsON z*X%pOZPcTV6H<4(a~#cb-K2%zN^CM^BQ_{2LjSV~UsyrX>2sZH} z#1rE+p1Ry`+vu*>9@Z%}!>S${kmHqVjrtS4HCvA3CcYoWgPGvS=TVN}z{7*R*L}nx zL=n%`1bHz2imRz(+T6`-zZ9iNnw}L({Gnd2?{Ste!l+bOt>fwZ z&l)d#>3bXe5ANUBQK0S-*x(aWb-d@4bWc7swX|fkw&r_6IR03!qK<>r^-C@>!3~~I z>O+RqsUNjywgHGpOE+q*K(A!NHA`jWI2xRu_t+<_(WFpHSq{OSb0M8w{I0B3n`~IF zYJjW43`>d7(ZKrm_N?u%ErFLj2G5gYDCC*GXErUN=<+mS)wMk?Vu=>xxavf&KYOHU z{HCE_EyO(HaKV>(bm_9l;!%uTv5$5>+<+~b+k37}`fy%vTsP$}{>2MD{rc5opJHmB zJaM9dH}?J_i>+dcq{; znhy3T_(s%>b8~Q?T7A&A2JCpu7zA~$r5Gvd>2>o$l&s&sW}yop66z_Heqt3!>PMwc z{xSHZ=>&<&(z)m5Z0}{WvO?W97d+96QDy?Hb%5x92kv5ZssbyXSJ~il3rkCKc!7Hk z6=`kBPytp3Q{%R8)j4fi2{*>g3uw$eF#tgvg%{*XNCW^6HsDRdKR`IQxM;PQSGu?& z7;$(|y)D3)5D(CeN{O;}Iut6pNj!0Jtk_^oFdT4CD!3IC#d{}#Wr^M>J5*L+pa;5t zyR!caW6IzlXHX0t0R|X7h%J20O--g~vo_=JQYuSIni(?J`t(%L-n+V?gUW;eQIuDu}+VC`ZkX3p?j`~vWld4(00v%XgR@)5H9aDRL9 z2qYZ%Yxf0+F_zOxgZ|F7+uGaz7M}XZW0tr~1>8+~&Z}ZLRUihipCiYV8CY17W6mdM z%gR>@3AIM&UH7SRZH@+{Zrx>2)X+%N)=4yTbF2D;#4RLvYtF$TIg2%luB0o=YlfJ` z`D}8`&W>OEzy_h}JOUdlkJQluI7{rVBSXpKXY0|#&!JfoY0xjlrwK>SppS5X^TFmf z#ogn5%@ORYtAzu(8sz!qvD)%jJ7$y^z#`6VEoaw|=^zA4re}Yb4u8eO982E_egbOX zl+gh=dq>|g%h|L&?nx2ewa*JY#$_3DwaN5NJ~hR^*CQaaF(qW9VVV_U}vKDeTw*ytq_*T!gEn(n~x%;K&6eY zjh3Y}IY$EmM$aS>Qr-)8(8v#;+`n9U^X^@FZZ1sno6;N@koYm%Tz8Z}zoyilaI@`V z{@-&1mE9jams{chU90_TsmJ`*E%x%4FRNBl1r!Uy!`l!|sBkerUvi7P?ixi76(*XQ zjPWu3oF?r2k^eR$=o-jZe!BtRk@@gxlE|fikUVY%Cvg=Om1WZS5F!7)$bY5u|A6)X diy_meAPXjPt_Mo%kp3G3jPy)&YqXtW{{=RBMP>j1 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/values-night-v31/styles.xml b/android/app/src/main/res/values-night-v31/styles.xml new file mode 100644 index 0000000..2ddcec1 --- /dev/null +++ b/android/app/src/main/res/values-night-v31/styles.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml index 06952be..dbc9ea9 100644 --- a/android/app/src/main/res/values-night/styles.xml +++ b/android/app/src/main/res/values-night/styles.xml @@ -5,6 +5,10 @@ @drawable/launch_background + false + false + false + shortEdges + + + + diff --git a/android/app/src/main/res/values/ic_launcher_background.xml b/android/app/src/main/res/values/colors.xml similarity index 52% rename from android/app/src/main/res/values/ic_launcher_background.xml rename to android/app/src/main/res/values/colors.xml index c5d5899..ab98328 100644 --- a/android/app/src/main/res/values/ic_launcher_background.xml +++ b/android/app/src/main/res/values/colors.xml @@ -1,4 +1,4 @@ - #FFFFFF + #ffffff \ No newline at end of file diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index cb1ef88..0d1fa8f 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -5,6 +5,10 @@ @drawable/launch_background + false + false + false + shortEdges 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 aNn>tgW~qmLjyj%%9jnz{a@|yXB>w}hXPK7( diff --git a/assets/icon/light/light_foreground.png b/assets/icon/light/light_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..b054521d4d0504e500a757a2d51a5eb8a8263b27 GIT binary patch literal 15042 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 literal 0 HcmV?d00001 diff --git a/assets/icon/light/light_icon.png b/assets/icon/light/light_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e087366fed8ae7b9f8dc547ce8c9f171d9bfa58c GIT binary patch literal 17077 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 Rsulo8EKeLP*zfk|zX5{wwEF-6 literal 0 HcmV?d00001 diff --git a/assets/icon/light/light_splash_icon.png b/assets/icon/light/light_splash_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ec09a4398ccdea1011861c767865bf355f6c2136 GIT binary patch literal 15963 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 literal 10932 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 ByWIc) delta 279 zcmV+y0qFko0;d9y8Gi!+006pI?LPnj0Blf9R7L;)|5U~J`u_j-{Qm)0oAmqtj@kOz z^8J|I`-|B6ht~R5kG+%I`zf~eztraM`u^bc{`dO)zUlmg)%x%C`E}6wSI77~z4s`y z^XT{f(eM4n?EUff`e@AgO~UxV*5*r_%Uhbj5N)LaQj!wdIe!-b004GLL_t&-)18pX z4udcZ1u-#g(~z+5JN*AY5?>Gw7hsN~k)CYt4dQDFxbs5*_&e@Hj)wtt(&JE<3Eq*D z;_gQLvqXoKv=I*gWqM9C(Tvu0>=?hTbOp9!6k6AF;>f6|S5%jGEE}TA9h)e`Yuiu8 d7)l?o1NFcJg%EAfM$P~L002ovPDHLkV1jNYn$Z9N diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 797d452e458972bab9d994556c8305db4c827017..f6493ce29761afe31850c3c65bcdbe5a65ec501d 100644 GIT binary patch delta 517 zcmV+g0{Z=y1C#`i8Gix*000A=FFF7K0ozGLK~#7FWBLF8Kf^!(mI1MK)Z$T#ae!B^ zUI_>Yu(7cL*>B#w;o;%s;9#eR#T}hp@^W%{dAV=jzOAjRcXM?O3=E)$#ZR9;^Kf@h zPDvFO61KFkc=F^48HSK-@$1)byu3Vr{`{Gpm3iydZ4VFkRe!73eE$4}mzRgO7Vp`+ z=k~4J{{DXN-n}<9HNAN8()n}eog5u`c~xj@@rxHP1%(8aloa2-d&dJzSG>F|tSp~D zeBO~JgSUh{q zTsK#j0kHVb@85s^{22g?DFLGvk6MfaI5|2}+fe^^L$*z|o_}-o1N!{KSd(@7@EOU^KTlJbpZE)8;MDzyQd7_Uw6BXo!M> zJk2czHg~$aI^*KwfByUh+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f>q|%NB{r; diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 6ed2d933e1120817fe9182483a228007b18ab6ae..fcca99bfc4982e452d9646fef5647d12d198b92e 100644 GIT binary patch delta 866 zcmV-o1D*WB1MUWp8Gix*006a~P9*>U12suRK~#7FWBLF8Kf_Q1ECcNTa=@sg=>fm%IfjLW>g(%wbaYbD76vLh`svfB_wV2L_wzk- z=In}IadA?`E~+{D^qI4}cJ6xd;zdwkKzLZ_ zkt0W~EG<-3lz(T({SkWM$OV)j8PNCr_FP5%+L+U%!6+#EFw-Wn@%U zRjFbZ)f^oa8FBUMH8xh(b7#*2J41|&AVCO2QBm>R_kZuyaxnuH9sTI>;~O__EL^nY z^XJcxA3xI4(*F4I!}I4aG&D3mefr45!%HoT7^qp~{bx{7QJFbo+WGSr`X@{TGL9WP z2J{1vaq{G;*>mPl&7#q^2mJsI9j&IO79Ji-3zKQ+Xb}++Cr3wGm`p=QzkU1m@|7zN z_V!danSX|kzIpTJ^5rXsn4@V2MjcHrFzRS}fl)`(3yeCNUV!?JmX? zjusOW1$MotZY(mOzN4Q$eY$@AhMb&is+$Z4)OYl&SFcZeEIVJ{rf=1tJklnWq%6gw$5?CaLAhj7str6tAG zvWS6-j^^d%?dk4JOiKCr^Cy~=qk}^vRSQ9CrfE%0&GNF+rsfu8K}ku8hK4#u$S@g| z0F^UhK!E?*v*)&M+Xmq>Gc&ifw({}uQP&nKI~o|GRaF(&u3racK_E9hJgtG%jnmc9O-@Rry7>$=DyLPHmHYepR8*9in3!l`KCLPj3k!1^nanWK sYeag2QAg7Yj5?ZLVARp{0z=Z#09OAF_>5K*od5s;07*qoM6N<$f&%o$OaK4? delta 435 zcmV;k0Zjhx2Eqf78Gi!+000dlDL?=K0EAFXR7L;)|5U~JDYo_jSDRPH_*uvJ?fL$s z;QQnD{*>GM-ShrilfUZt{^9lhT*&z4_x{-O{Rv#2V9EI}xb^~1iQe@7)8g(7UZ4B@ z|4zgB>+<*9=;^^)>d)H7pzGjuM>Jnezy3`@G2r z?{~a!Fj;`+8Gq^x2Jl;?IEV8)=fG217*|@)CCYgFze-x?IFODUIA>nWKpE+bn~n7; z-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGrXPIdeRE&b2Thd#{MtDK$ zpx*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{HY|nMnXd&JOovdH8X7ME@*>~>T-LiFSL4F>Y<{mtBn1uzZX49t4OBOHr{^Q5r zzkijLmEXO4mzt8y&CN}+xnI6~S+i!%+&QziY}u-%rKPW@`+x8M|3?oWv9Ys>ii+CX z+3wuAD<~+CG;^Oldp2jzyqM@{W@eVDQ>Vqn#d30S-M@FAkDu?|yZ1suLQG6d7cO2T z+1%?lZX7y%SXo(V&YU?>QIVozq7x=gl987F`t2(>7x%Vp+rE7H8Xg{oOFK?;ot>P_ z&CFU_+iu>xwSQ{ma%N`cva*u?{)znj{NI0k=i=hFv$M-cPb1k}AOOb6*RNlzsw!An zS%KW(prEf`z8*YusHVF5$Il;<5)xcoTqK+O;^oT~D^^~-cxnFp1qTlvN{Ek}K7Hn) zLx*H#WqW#izkmBKA}Z3=*+H_o0{r|yvbw6$(#rDrvw!EnR4gJQ?CIrMR9FBM2ikPx z=utd=#c3`F2L~|O155o27cSnoaRbQSyLVq(d;7U_=Yg^xK74R@cO%E#_wU~WgL3`4 z4dxc+!1NCkVPj*nwY6=iuLH7Ity=y4`*(88J%9efp+kr3>+6)16d@wO*aNz~xw-Y{ z&mXsM-$pSrGbP7dCnrZBLKb0XX9q@_pPw%)2(a++@sVRLCNMNKm~1$KNX5gf{2euS bkeUksa&+2+<3qZU00000NkvXXu0mjf!m==i delta 266 zcmV+l0rmdd1eyYn8Gi!+003c4mpuRg09{Z_R7L;)|5U~JDYo_jSDX9(|7FYh`2GLd z^Zv2r{H^2sT*&w!Y^SB+`<>qVZqE6)=lqo0`vF#&*75!I`TIh@_d&k*HoEtQyV-iD z%Xz2D9EQRbeYh5Nr~y=#0ZD;^+vz0$004MNL_t(2&&|%+4u6C&2tZM$Wf&dzefR%A z(^3-?6X>hnCz2Ba@RH&`m!pgy?n@#@AuLYB&}Q)FGY`?vcft0!vht0Z@M&ZeNCWXh75gzRTXR8EE3oN&6 Q00000NkvXXt^-0~f;%dO(EtDd diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index fe730945a01f64a61e2235dbe3f45b08f7729182..c36307ff0d8bd86e0d9354e2ec2eb867fe5240c1 100644 GIT binary patch delta 854 zcmV-c1F8JZ1L6jd8Gix*003^;-G2Z811U*FK~#7F?U+kU6Hyd~r*uY;(sWuEJPLso zf+V;gJZemE2?Y|67B^~Wbs=sn7SM&|S*3**9|$3ei2+w?fX1YsH*i(+D8pduh~RqBfw8R=a{14}$R`(CGOu2t2ZsZl~jfZ=+* z-sR=xGI?pY$y~3w!Z6Ok!AH5ra~%!`R0IKt>vVplMWW23nSQ@tcH*R1EFK&rFQn$PFk*zo9Y-a^|0b>aSlU~ntS%iq44Uih>?%Zhq??>1e#u2d-G@=}wz z2aN?q^=S}R0ty!m0h`@U@QB#h*kCYNRawdMp~JN2n}26yWK^Tk#K#}re-I3=G*v2< zrWg&K>{2ExVvEKG?dz$jxw#J%1rr40azr9QO!Bgd-4(i?@b-%B?X8lM5{jZgf?#k1 zfvp6A;K}e1nzG#{Q-5FI%~gtCK8XrpLc$@6 zLIqTlv44u1af`G!MDAMhA=NJ5J zvfqmH=gxwp5Ky@2x~tXJ8w_24{*{=Rs8*{$QV77!P@_~%PrsX-d=>eS$K$oPwTeU{ zs1z_z>%07*qoM6N<$f>~CZ-~a#s delta 447 zcmV;w0YLuZ2F?SJ8Gi!+007oyx*7lg0G3cpR7L;)|5U~J0au$Tw)URh`@-w}Xw3Np zS)Ix4{k7)&ujKrh-TO(x_}20L&+q+}+xr1ilg8}*yXgGl_5RcF{f*iBEV%Z~-t4>5 ziGV;=={^- z?sLQGb)?A{hr$_!z8HbH7kH=vM0x-*R~t>;jsO4v^GQTOR7l6|(&r9>FcgO2dg?%> z;=sK?5%;?Pn^T7LL?Y$@5u?06NuIR*0?Yf$Hf5Afk+lM<^ch*jvO$sU*m9J?JI7eI zGFV6+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9R%3*Q+)t%S!MU_`id^@& zY{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&p6kME1_Z%?`+u)^el0!1<0sd p?Eyu!OMLDifi)An*I;?S-wj=m4RYIt!kPd8002ovPDHLkV1j7R^jQD^ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index 321773cd857a8a0f0c9c7d3dc3f5ff4fb298dc10..0540f4e603286ea892f914d70b75fe823582eb77 100644 GIT binary patch delta 1383 zcmX@W`krfoWIYoD1H->ne%1^OtY)4rjv*C{Z|79|1c%EU*MIx;?xzzz8I27rDUt`z zoH3ljxutZ*8K1_K13Jv#kJlJ1To4d(rDxxvg9WNJuFj>Crd7el1PAeRvYz z1Cao3jx0t;U4<2_EL$5EhzVR_YKn3|5@h67R#s+eJaGAPvG@O5w{C4tcTP;Sj*X2q zbU&24aQANY{SR^?Zk*fo`g%=Gjm+N-2g5Z&b#>Rie3_|wwCK#rf@lc?iKgaepdsDf z`_`=d*Oyvv&XlqBD>F0O#)uRH2?O_}578TXBHi5GKY#u#CB0vN{fa41pC0;gy|nC_ zxk*j+&r6+?m)F+T8iEu`Z0LSy?ZyM@2hBL#LO&?aJ7FnQ8yenKLC@ogyPD^1i=&apHve*|g8u z*$6vo3=W#4A7`O2!qwj1zV`FysNB1Y-TM>c7=pjQFF(ApoxlFX z!-9>fhtm~p-#(r?HT7_Vp`v14X6DNa3srWAC5TA)E|V_3{_S1u@eC7J*S(^mqF1k8 zEq#~6xGjOlk9+du`d451+uPc9RaYhG$V~A_i0kRB6whLb5N~Q~I(Gbc{p!`(%&muZ z?tj+frhG+2Pfri%zRe4QR?oNl>s<9_a!(JBy?uztkKe!3)6*^e1UiN4ci;Z@+wR0UG*CwAiY*0rk&G%ztZ_bz@ zkzrqNckB9f_SZ~0ivp}?`YcN*lS;kM>=Bc0g0dL3XBqJij;FN(R3~#sl^B z$4iaRB{802`Q100!!OZs`Rfpk(6`^;S>+u|I;N>}=G?hk+NX1K8!gcD0(u5H(=>g$ z`1#wjuPo1RoYDHpi1*z7v-_oz#P-ZhQ!rrBEqPHgPj24t@9&jG6O51On3(=O@%;1l z-Sw^Y1=IAmT$(Bb$#!|%xw-qLdfhT2bi~Zfx6hgtl_A}uRuIpV2CzgTh1D=AY_`D*uVef@{{`Idb_(13!G%U zrtPF8=DqaztXXvxM=cjFTzK@T>kXxw2W|E1pPc^m* zb<*SGo44Moa`$&|Xjt?`JBQyczcJ!!$+PY`_u^{n>-YZ+SgE14br2|=<_Wb|z`~RBV`-<24{r>;E==`tb{CU#(0alua*7{P! z_>|iF0Z@&o;`@Zw`ed2Hv*!Fwin#$(m7w4Ij@kM+yZ0`*_J0?7s{u=e0YGxN=lnXn z_j;$xb)?A|hr(Z#!1DV3H@o+7qQ_N_ycmMI0acg)Gg|cf|J(EaqTu_A!rvTerUFQQ z05n|zFjFP9FmM0>0mMl}K~z}7?bK^if#bc3@hBPX@I$58-z}(ZZE!t-aOGpjNkbau@>yEzH(5Yj4kZ ziMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_stABAHe$v|ToifVv60B@podBTcIqVcr1w`hG7HeY|fvLid#^Ok4NAXIXSt1 Zxpx7IC@PekH?;r&002ovPDHLkV1j=7Yl#2= diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-38x38@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-38x38@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b522219319103602fbbd420133a5cb0b5b0b42ec GIT binary patch literal 1174 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 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index 502f463a9bc882b461c96aadf492d1729e49e725..e84f2d9f37dbf80d78c1aa9e287c8dfcf7b03853 100644 GIT binary patch delta 1204 zcmV;l1WWtM1icB68Gix*0004VW%>XB1cXUMK~#7F?V5W`Q&$|vZ%c6`O_7kbg-S_W z#uA{E7SMGi0g|CGKwXq!CS`!=7;}#KiNm=r3sY(v-!x<4Qx z3bYl=CM-Y=lmX?jGnzESW!qo(*W_?MxqqB{?oEE*PtLjboPV2^wYs`WZ6sK(4gd`i z#vLMzJ46_Fh%oLDVca3Y^e{K~r&g<#%U|O2`Rn_amzOoIZBmKE&u{R z1Wfo5dVqa>e5)!e(lZX;>+WW;SXZxH-Xaj}*b&>-rk$AhgU{yyB!Lh{12{D`{mref zQCp|eU#zRuXj&s8B6vLB)b#Y3veN0P>4&2aF%cdb8h>6~T;%b%XvUgMrczR(>Ym-9 z;!vyAnv|H}FHixUOhcOxU*R3)m2tj zir(0}c7N|Vb@D`V@;)@xzx%!`Ix33C<2TgT(H({Y5JrR9`%ACUXc``7>G^_3X4(?ypA@{s9jWC zl9KXTs90>b+e^#N*laes!%$#5tuU!HCMKF%6P8FMv9T|sc5z85vW<_Ao1dRY!Z1n5 z_kS?%xKfz825?bV3SWNzl1LN`T-24q+qZ9nFX~ERv|??nDZMl9mCA~<=pzZTs4Io7 zfAa*mC|Qb{CIM561eDk$dtw%B7aN|?HwJ%!^4iYPNz4U&D7fO!=0VqS}c~O zr6rgc6o4?3$@Jm#HJVmuPn%ZjY~O8fM~9;=5D4fFL%|3umDO2?-u&-j%*@OP3zO0v zhJu;WVzKz>J4Y_oH~iZT;o)IN-p&C?LV-QQX=#eyzP_%md;h$|X0t2G&$_v}!G9zH z5@s+M73Jlr3dPviZ%kAWuf?Sq1Z}wEy)MOsavfJ&>&cwuoq@+Z!3>5G> z92^{U{MdU+)p^IMzff3^p9dL$g5P-T-=ETFFm!b2+}+))tIs+9ss;(PFnX9vON#H` zf1pS`5EK*$T%B^s){?{Fw5V^x*DZBG_R_dRgmH%m;|>wV9U_c7L>PBAobX=_0E@>M S;W2gq0000k~i3CaYJ8Gi!+006nq0-pc?0H{z*R7L;)|5U~JDYo_jSDXF*|5nEMy6F5^ z$M}8I`uzU?*Yf=uXr;5|{0m;6_Wb|A>ik^D_|)+I$?g3CSDK^3+eX0mD!2CP`2NN0 z{dLg!a?km&%iyTt`yiax0acdp`~T(l{$a`ZF1YpsRg(cvjDG_-U$Er-fz#Bw>2W$eUI#iU z)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G!hkE!s;%oku3;IwG3U^2k zw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn_j%}l|2+O?a>_7qq7W zmx(qtA2nV^tZlLpy_#$U%ZNx5;$`0L&dZ!@e7rFXPGAOup%q`|03hpdtXsPP0000< KMNUMnLSTX&OEp6P diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index 0ec303439225b78712f49115768196d8d76f6790..6663da6242c61122c1b098fdf496951ca5055b82 100644 GIT binary patch literal 1950 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 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..56ae8b3c16822638a4606ae34120cde53aa425ba GIT binary patch literal 1268 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 eaiAcF9_!2}ieA0>9*q0%*kq(38 zrLh&YOKY1H#gs`zFc__+@i%YtGBXeN-gCZ(@0@$i{eCy&hCLc60u$lk;Q?Z-kvC6g z{9h%+ciJg{G8_+&pg#s_;T+G)DH65?1%d{lXMlWn(%rSPaH$sCK9P>4j_fmFJ1+@I zaIHu>RP&-ou7_iHm12A-xMC@+K3zF8Q(nV_Ly|#yt_8$Q3>HuI|;4Yo_KNDR2jR_Ik1#Rl`0<4Ot3Z*k#wk!=sIWe;EA&d0ts8^toqOOkk=EY zwFh&d5J>oEimIupV0f5CMGy(z1&l>$z)<|b!7S6*d--VsXzcut1j6(b*>C8Mo7=1` z_wl-u6cMfyT~HXOh)AX$rJs#hXPd4rzCEgzmYyzoU{|0sG$<%eyG7GfRb53M4}JKc zd+9d{ptIbUDWj1$S`7Z>s!Of2hN~uamZmU2MIv4D6@}KYDHKDpc?$PT8|PS98$Ryy{XiFfhPjC^RK}99SKB(HoqUloS%e$g4p2--)!|Hmiv~X-G^!p}f4j zKDMfc>OeKRN=vB?^Y7maJ=M~}t*=y0H8U6t4Y$`F?d`p_W=3)T@ohJP)Ma;DI(itx zBAQUp@gGb&ylk>}eEezsu~yG3rp?Qn%UlE-FLcJ?CFJTzrdj=% zKq(1DlZOYxE?u>>uUm+=NVxR+XWK&YBc2mkm5vyn*vs@!p(8V4Q0*#}^TioipSD<6 zcJKy{`DzE<30!h~z~kTy0zvlS`tq_k95YMuYUjea{A);l zpW(T=x!&FtXG^ne0DvP_Dx_FnSEq;|Q46AmC};_pcXqb6rHcA`lHtCIiHTUOQiZtH zJr4+39dbDGoM!K3F}k~m<|2j)3ZCSs&>0` zpWXLds=p5}O{MZ5e@Ex+ASD(>Ml(nxQW{1s-5W%S82)jHxF5F_E_^?1Zhs3wP8gY4 ze4E%O^yHb-tpaJzszF(sd!+JJ#i{`huL~erf#~6ZT}w;jfew99cnvA)O;k5o>J$Y|-A9ITmjbJdsC)gJCt?MD;O!jnYq%O`?eTgWY52&zxoaKrbP zw1cz`<$QmB<-CfltgMdbKgH-78GW5r3>tQvnT~wk?&1z20>lj8IxPbwyLU1e1G3lkPf0{?nlJobJ!q{ZZ|sh2@>9O zmwvtSLwENhHt6SGH~MK7Z^_a^78pu+38jG;NX}9{^GHIm#<{NZ>tC;)%pVJkAWKR1Opq^YjEn6s;63;hDKS$?2qq23u=m z)jaFbG1L1+DD<}<4*e{9$BQ~cLPLKaFY1edC@kZdhY!FTZ1?ZMh3B`g?V)-8w)82a zP94sVgqx%#ohHnwvYfhtNG!mi=ohE6hUN)+7_!0Z5=06wW$h=UL>TO~za#`DA+NtZ zxeQEBzxq1LG=E)DrZ%s8b0et-YZ|;B5 zCD`uTyn2Of@+K|xoXgIfnVtPiP9|k9B2$?ScB??4H0JZwx zlC!cs7l?8dp~iK-Zu(0qQn>5a48s<8_9;X84*@{=bZJar0YodvbMO-SQp$+(yrE$U zKJEHtI19io_Z^_@9D!-LWH30T>!3C-kDm4?o6(BRRkFS14h0qv2q>&OA}Ouw=E30+ zlZ+E>XlQ5?sx&Z@1R5I~TVJy*Hwq8&-rJ5)GIi~BQ3+ed2U+}qomz+M)*` zCra{#+Zg@HYKN`tJ!g^=lWzjK3;l;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f?oc~$N&HU diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index e9f5fea27c705180eb716271f41b582e76dcbd90..31ca05b5af1c70a0b0cc625baf04ff89512c13f5 100644 GIT binary patch literal 3085 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 O0000ECBAF>F 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 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 8953cba09064923c5daf2d37e7c3c836ccdd794b..13c856aba162b48521ec57a47b5e34e87c060b5c 100644 GIT binary patch literal 2588 zcmb_eX*3&%7LE?FYpH~eJz{B$iha zq$NU0)iTwRv>Hn-)mj^C37NbMKGIVPUcsPEyI zqk3H^u0GixcJ&>|b6(9-BsI(R9ZL+PyoeO6S!eCB)>jLII#i0?3Ya zw3dT}wQ98C!q>WarWP?H=WrvXypaL&u2q2rPT~@bm^@>Zi4wNHE-Zr={P%!Ds1yne z1`EYthKGj_-gY&2buBwFS*_@Fn~Gdpw5S9GhsE01^bQVIrvW9+BR6R88ghBm!&e@4 zV`DouJ=4?S9xg^Y`d<|#Ac1X2|2Hhwv#Kie+eKX!mC?42jzph1I=ymh%c`ibFfuy2 z%S&g2J>PfFYl5Pv5f;TxFe(`;Mb|JTlc6Ori(EY><*?FV% z@0*{8i!69?(+(q_CScljQ^EdXa(atT@TeDBn3#>Wg*vP6$Ty^rlbSAYIDBbkiM!S> zNk&-?zdEgnoy!pSqtOzkcBNucLQYCRmY0_ck4ZQ;Y#qdHE^2D6XJuhKD=TFzi-YF+ zbJ^WVDghlerr}3*E&FYM0H(6j(`(2+VL?HQ3nUtwJj~WOO0kc( z_jBISk(zC$wb>2V>K88(juyDtad8oI^9I<}9vp#0BEe70b_g?vrndjQ#%rcf_D5BM ztl#(b#SZLL|61js?T7tiGum>3yFoM@MtdBG?yzRbD-6?pklgG?r;qzFh$ z&)!}f3JVQw>nt}4Wj)=AUf_>KS6BDi$itrYb`nWfk0-!UmH+FbUCX&xJx=r`Q0S^d zUQjfZO4U%PLL!l~4zXPCiI#VfQBesIGc$GNi9n~7%ez%M^4t@< z7rNSA%wwid!zzO7Gfj+@m4};hXG8>5;M8$rV|4!?`UVE6+0|)jy*Ub|Q`nFPwfX_( zX79^O54fA^js|%uR)qW$!o=gCtVL=}MSfvnpHbTDmhx$t2{(I-jY|QcD?z)aA31t* z@q`j_s=j{7`HIcy#|xe-3cC>gDC;cD&hbd3?4B!8qF^=3;0)|Lo@6RN}#|kdV+z4Gm)wsZ3e< zZ5PKSI}tnc?u8+R4ilAW}6seVFxmAeB^sn4IuFvF8bds6ot5;;Ks#~QXm0gbPK>c6;!s`W7NKDYiUXMA^`qi zJa_;$H1t6D`tE%Vj_JHoJ})#@u1p-9>Go4_ZzqYCxq3E6ojR?s;SC+q5gb+SKCLFC zG*eN1F&K$d7;+^^%b9L?&(96yk)rC$%9Lw3`uO=m_UU!}%jRNsp)0c4_k~!|YppuB z8?XfqF3J0oa0cjg!4vORlt1e{aM&(-fhy~~AaH4bINReT}a^Q{qiKa4@oVpF~>bIU+Iyz0b z-8D(ByRvfl2KF05pvC_3Whpn8yLp!n)&O~EH0IEkbEd+*o>>1ZbpRsZ=9c&Lul%9B zqy0fgKoTA=`rNlJH)R@%{oyE;`v2S%AF@9(m-6qmy;n?p@{)Md`x3vOt*z~wIR)(4s$ za~0JHkFROLCTQvxANiV!hT)pjnf0EH1te*_UA`iJ$=XiIi$9VPeMZLj_IfE>#?J>z z+SuBnP$-rJUg;@b5JL9?%N59i!8?b}KY?4aM6Ovu!PeSiG@Adw4)mE1pIoN4fBWqL z)#IL|q;y#upa#M3(cIWr!@!`CN=14U73L@JZQp(f5om2%{y_Tm%a?;9_9GgA&zWJi zW2dj%AL}`v0)O&6^2|M~z<_P^LQ+xVyc4ZL8-rT_o{ delta 1217 zcmV;y1U~zm6v_#Z8Gi!+001u>&=UXv0SHh`R7L;)|5U~JDYo_jSDRDC`1<|-SjPDL z{{Q{{{{H{}09Kk-#rR9Y_viNgVafPO!S|ls`uzR=MZfp^{QU=8od8La1X`Tr_Wmff z_5e$ivgQ1@=KMy$_g9a+`TPAle6cOJ_Fc#L7qIpvwDkd1mw$fK`6IOUD75rX!}mad zv(fMTE4=(Nx%L54lL1hVF1YpqNrC`FddBPg#_Ietx%Lrkq5wX00X1L{S%Cm9QY*av z#_Rh5PKy9KYTWbvz3BX9%J>0Hi1+#X{rLA{m%$Kamk?i!03AC38#Yrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`?TG`AHia671e^vgmp!llK zp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?tc*y?iZ$PR7_ceEIapF3KB14K0Pog?7wtd+^xgUCa_GVmlD z<^nU>AU_Yn-JU?NFdu|wf^bTCNf-wSBYVZltDdvGBln-YrbeGvJ!|s{#`gjN@yAMb zM6cjFz0eFECCsc|_8hTa3*9-JQGehksdoVP^K4m?&wpA~+|b%{EP5D-+7h)6CE; z*{>BP=GRR3Ea}xyV*bqry{l^J=0#DaC4ej;1qs8_by?H6Tr@7hl>UKNZt)^B&yl;)&oqzLg zcfZxpE?3k%_iTOVywh%`XVN-E#COl+($9{v(pqSQcrz=)>G!!3HeNxbXGM@})1|9g zG4*@(OBaMvY0P0_TfMFPh fVHk#CZX3S=^^2mI>Ux-D00000NkvXXu0mjfZ2g0p diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 0467bf12aa4d28f374bb26596605a46dcbb3e7c8..f1241de3bf55e1a3b33f2bb01732c76161f8b00e 100644 GIT binary patch literal 2750 zcmb`JXHXN^7RMpDAYDOeAu5lii1Z>LL=YbxL`taAl(JwzLQy&d=}nPPBSuPuBovVv z>98mw!UiHjfY2lwLQepJ@UrvfecF$2XMX40Pv_j3`=9?gH~o&a2|ten4;vdBznQ7= zUDk>ID^3Gg`7mq-&&I~{)Xdn>{xLfZ$$jS>L?S_4;Ov>(zqJg&YkQImeXc)!!<}}C zocPD#DI4#H=L{<@y&)%ZoleqmyHU~G;DC2ksCe}nfcV!dGJ9P@QqL>NYR>b{k|{p% z{sg@$e?#grQ?0D5(AMQj zQBKQiYe9j5J5u-$E8F?($s~1}$%3@R%)Iw2(dvGp6001B@Ev=!cdGI`P zos^glba@;cTz|#xhUm3>eJh3e^jv}4ekzLP+L6|lVH1n87WGx=c>RYdNF)w{5Gks| zV$E%Af`fv>Lc@05o3|McuXC=4Mw<=G00!&$rrrrODH|MbF7*HW`MbJ$Q{LxN4uH13 zy}gV~+Ie0eP>`Ey{Qr2m}(KdR5pF*KP3ikWO9Inky)UXJ6cK zv3H9h_ZSX7kNvefCn}7?%}#%_DI?puxs?@!SD;Xdn1Q}UyQ-nTF1_dC$Vt71l48jy zlx`fu%m|LDRlr!w%Y-OLGuFgGosl2%q(~P2f?e~Xb`Z!aei|$9;<_ysuW^2s>$I*6Cd_f`da|ot2aoFD|zBL3&b#R$zyS zf`Y25DtA0W0CZHH-Ah9CaIQHiD<}+)j3hmcKG@&N=l%FmfWhdD-n*b1MqvrIv%T%+ z?!GS!+W(1BMs3)bnH_5y808-Z$SX3Ut)YRfk9V+>o;-B3zhY_8>3`<4bZi2@w~ELZNY(SUpEUNmVD~HjBoNoo;Danp z`0cmgWQ}=;NU@@AadGj2!a{sU8z0bjT%0{Zda7~MmdFU0x%8A52J+n`8+y9mRg$94 zN{H1J7J^fZEl0Yhx-UNV!Mty@b$36eNjclW@=b4_lHUU!tmL}Z_ZK!^f8sM7WoE`b zLb7+M9~FsoL>4N>bf8_ zJ?&CbqJI!`c?5KmG=NksdONzbOcA@#WufZ#E6aIs5XXOW(YcW|waVkyrnV?Wv3Z+x zI#NGSu3Wi*m<99NbW!9gC8qD)BB~nwjilL*1rNUVft%9OUedO5Q#d@ny#`aWM;Z5F ziET9W`bLARXu5G-osy9WDyYGAh}(JS^j|;%{PQri855IdkFTEToQ$}lsOZ*m1iZuC z8Sg)`x?04Ar&GVG{~j19^{lw~HgSCXC}+M+{eRW}?eTwS5$aLw>-jFh8%7OI<@$l& z1;Nbag$3q<;E9)*BGGTOj6HMAHcYg^N&cJ^Rg6WiH)}Czs9yQl+dDTsY))}X=E|h! zjg8?WVM~kFZe|vS;Y+B9-fgBw7Zx5K8{6roBu|~12U~y8{rBIQdN(&QF`(~Jimsxm zk`x~1&N+@0ep-n!dQ_;Lp~_iGR7O{3NgO}GmzE7RpTy8Ue7Nj1H|n?jvd_|agXdOl zcRW2qw&*Q%`=h)Tk@!tV2kC?^{Mu)Y#g+EF2-nnXPD`7e%S4#UJh!e1dDbeL|K-?w zSa+;7c)rs%T10V|xzn$zr#It(af~pxpXDcFIasC!0yvC}T91m&cXxjUv1~e7Z>#PP z+T1ORQP*=-G$1TU7~RqWN=QU_o6hoR;W$D%=JApBZTq%d45WTEqN2hFojMWgN$fx% z9QW7VK@>7;=o}wAM%voXp7OKApuk}q0X&6MrVcN)0a{`ze=Qg zVaf!^lcd|AdY!^NKFY|*04oOg_|S%;W=4Cv!l9fSE1hj9)PnxtE}bsj7s*;Um#?X? zd(G>5LZMx8$B{Fw8;>FE&rHv?!~!KR4riI)yyL`GZBvSfRhR!kYL94Da(@4K*_45Y zT~H(@lF6@*j*d)ZWrLS<#kRg>oHsBsmJv(CQYrqasjZ{r2WsNwH5d#YW+K+&(NB(Q zt*)+4Ok{U$30i?^J>=6;Qxj5=G3v(aZXmvYFksHm)=B GO!^Ovv2yGH delta 1410 zcmV-|1%3Ly6^aXx8Gi!+002YCyxsr+0P|2xR7L;)|5U~JDYo_jSDRDB`2GI>{Qds= z{r_0T`1}6fwc-8!#-TGX}_?g)CZq4{k!uZ_g@DrQdoW0kI zu+W69&uN^)W`CK&06mMNcYMVF00dG=L_t(|+U?wHQxh>12H+Dm+1+fh+IF>G0SjJM zkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJTkdTm&kdTm&kdTm&kdP`e zsgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>VI$fQI%^ugM`#6By?GeadWcu z0gy9!D`m!H>Bd!JW(@avE8`|5XX(0PN}!8K>`dkavs;rHL+wy96QGNT=S@#7%xtlm zIW!++@*2zm-Py#Zr`DzqsLm!b{iskFNULSqE9A>SqHem>o31A%XL>S_5?=;V_i_y+ z(xxXhnt#r-l1Y8_*h`r?8Tr|)(RAiO)4jQR`13X0mx07C&p@KBP_2s``KEhv^|*8c z$$_T(v6^1Ig=#R}sE{vjA?ErGDZGUsyoJuWdJMc7Nb1^KF)-u<7q zPy$=;)0>vuWuK2hQhswLf!9yg`88u&eBbR8uhod?Nw09AXH}-#qOLLxeT2%C;R)QQ$Za#qp~cM&YVmS4i-*Fpd!cC zBXc?(4wcg>sHmXGd^VdE<5QX{Kyz$;$sCPl(_*-P2Iw?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF34$0Z;QO!J zOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUCUoZo%k(yku QW&i*H07*qoM6N<$f@tQ=3IG5A diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..aaaefb44e7c0960793c9d88aa48a638b401c1989 GIT binary patch literal 15967 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 TY49`^0Hd>JXNpd_{_%eRVBD#= literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..44f493ba824acf380097c6723ae8e43af534fb34 GIT binary patch literal 612 zcmV-q0-ODbP)D*ubJ5lyD{Rrq!8jiupm}qW1+-8RVr&O1S^aD8ET=Z2tq_bv5b%u=`3t~ zAS5Y71O=7d&0}|7_g>E|ETprzXPLmx50*1`ijR*wvvd6de8nKw7Siu^r&h=KzT>n?!JMnBJ3|?=)k5*IL)0K?MLJQSp5u8RHs|zOR@iPMkn2aI{3h;Z6NUFH6-?4% zB`-|35veD}x^|$%R+gJf_`8fd`5*lCUWt$D^e9P`;B?JaWNMi?{eiA>)w?9t^WJJhWd?@utx%Xy%xr zg3U%ZGtJb3zL_0CJpbO{xA!|0ZxS*=>sTzN@I=Uf*d$!#zh`g()UNn@CLT~I3&68pk$d_YJ~EEl6UM-h^PoImv|5qL=cI1a2FvGgJ6&x zlAs_$juL`G3?!P13K9@kW}oTl>3(fJNkHOUy9PV`U*`4efvWFSSJmr&%=0{DA&J%7 z0c?f9L01SIbcMh{R|p(*p#Z~fPW_d&h9d@h95ML7+`JH8G@Y|xj`f)aAI9(n1=tl{ zi{rQ*CCg)!s5838#$XW$z&=t`rEJ;m-ar96j%XF0(qiiTe70cU;LMqJT(Q#B+0&Bc zbPClgVE7@06k*X8HTh)#9O8_OLu8*rlm}xG?Y_q8XeM8|gW-pi@4yh<6;(&HL++TG1^)v*(U(}dMaUbQL28gI&Lc^e6e^BACeqNa8a zu6G+6d&!xY%oQpZVL>|bMf*x3rk^9qe+~?fa&O719?=*bC90BTjJ{9j%1_|&9su}0 zC|EmnPDc!lzJQ80mU$J(GOifvcj&9(jmg=|_;Xv}X|DU71kR&~WXC{kU}nv$+7Rs-N0 z;dzaa*ULF2<1lW3$Y=caMGB)WsQ@+Al#1+t0=6leuUwO3C|tYbBFv7r!}tP%FX3J~ z@Twayjn%h=$lE&5VqaA0YkN33~g#7yd^!uv|Be|*iNo3maAtL3~;>^ z0ta0oaL^S32VEg>(1i-ji2BJiSU;xCe|*3+1}_X>;t}mOrp@_61(v4`uzx-29q7`(Ze6@t!ZA<5@2SRvDT_IM|1(p51(#;6|LB|!#!P<8Z(pQPau}jK zo``Cvb49yn{ykWb&&h<*sj4c5D|kgKYVwEjY{|0S!+%XXsknZKA|10xp#jSXCgaA* zAL-J1=*Mg1Tr9#b=^7iw@<9rgURKhp_`TUwQG6vhstC;qs(EBjt^E)VF`v7&=mp)T?-EQH+TtHX?G?QWdHyG07*qoM6N<$ Ef~%RX?*IS* literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..93dea83282065f66503ba38a43098bf7fbfd6b27 GIT binary patch literal 917 zcmV;G18V$) zbg16&pJr|CcGlKMMSBnqN?DwTW4meKXZ5CkuaGsaMU-u8wu0-LhTlWGN3;hn@t~A# zMM$aY8u=82G&fUiEyDS)ievAqFL)!ADml>}xP*i9>_HYU=^Fk34-i>spCcH33n|-K zcI?B|y8A-32QHzYEjJi)z37x}X%EAQ^(?yKg>upEhu4!4W19_)OtLsG)f(OyAJR~m znxec21+`7>i5Jj;AY^+?oxCbJ)?jtseV#G3vAkuB*PGs51fx4+X%9p~atQ_X1KJlw ztd~bYh`2l+Kt5gug=idiwcKzRs`6FnZ;A3E6co%)5rU?=3f75spJ}KQ?Y5IMFS~v; z2u11u6sSO`7m*(h8Ttvs_8?T+=`}Bk6~i*sahP92kzRy?LZLAMwo!4cy-o(1SlNI@ZQxitFoh(L3 zX0WvCCQT`5(v*TGO(|&7Bn=cE$-d??`VCp}R!SNuM#wdFGV%W_#Yh@x6tV7F(|c4Y z+I_NOE|)aWSc$DTR%}`ERw^w<>nH@zp9Hc=Ag@bpINJS6j3sywyxoaV05Ij5YU}Us zqN}wtmUc&^4=&OBx(oS?ex=b0M%KIrq3>B+yD8EKm++wr*&6i&+V6*SwcP~ft7{*(czXxB!Ez?lni1xrGrRqY)ewXs*(Yd<&4o)rJr>S@{ zFL9+LZF=E5eoOc3C?vU7%$uiW{7IuNsq-id)v+*QyJ5J#R0;keGqzMve!oH{hh@fW rD_t2SO(|&7l!7KrDQMEPVL<-?d=x%T3=hTR00000NkvXXu0mjfW@e#j literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-29x29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..151ddecd1c5c9b2b8317291a674e4bb1ac1dd8a3 GIT binary patch literal 1544 zcmai!eK->c0LFDmixx5_r47-r`3R-?X2T5StD#|;N?2?@J88ZyA02JJrqCW-sAffm z`ASkFDmg9l*|FK3ubopZ3D-S$&pr1?&vSpg@B7F5=llHLoRgj|KzR*$85tQM#uerL zHF19lAotbDeS#<%nH{e%CkW^Tf6f3p?kk^lyUWuWjGpJIpQAz=Pn}JW0@<| zCOXOeXnR`Wai3R;J&S|oY0=cxrNpiqgD@}9t^-IId1s8y6Oni3z-<5nt8B#3#v7qq z@wqWv&@UAIp8pnu&*MAad7?|$t_A)f;ZzX1K%BMT58VdMt!f!w;e1y}LGY%7S);XK zn2wmPC?VAteJE2)_DSQ$J|m&H7|xE$s9_e7I9OEU8&#krgnN z=EzSX)Pyos(Pxm$N#G0&_lgo*2m56aGC#Oa@r2rfT~Pd&TK3YOZ2unxsjrX*C}U5Q z{EdrG!7Duv45WN~AOtmcE7iQ+tZd98sQD!U=kjc1Pv|->%<)NBLYF@|zp$_p^M^5+ zX9JlNYAXQ4h>Ci5Pk5bw;{E1|0!Ml|8pqQBSZqM&(Z|)(zJTLB)*QS#nEm}jzD6zj zZ`#&(tJyYwkXObwzaedrv)7F(hHcek8_a{)5T^=6PMt>BBkgMp&10iiktt<2yzT6> zyz)O_&AW^6fNK%WEf7KbxwbIPEEfH8;I#3;u;f=LKdX`^(f>&fx*8m}YyW(+l(qC( zIy(freb0q_SxK50o~h5h;FD~(R~AU(pL6o*LhT#UN-A>qH#-|SqR`_pc`5cE3RTr_ulrouy9q_m?;h`gm z=}}I=uIq4f58G8~DYQegq9>Kz&!nvb>v*{kKv_)aDW3Z0bQ9ggJ#oOSl~{-_v(}9t z0C)Q&kmxK}3?w&NFYFeYJ^Q(IaNbf&&#iyTe|xa3o@fg8Hw*=q+*apO$9wk62$Qw@ z70!DPGw=;`EHMs*Hv$$wOK7fKq4U}V0#kx1pJ-cJg5xUaW$noC>5n&uU3y(+gfre! zJ-jr5e!9?KMA^Fk4aB~|-YNy{P?uYEGRG=k)ZH=R$X5rcC!06yg-u1Ay>VTXLzaA6{1-6P%u1H=O=oEQR_@6EY?RO}0(%m7{0?uI$LPkI;D8a!kvVQuu%W`0sdY3IME1D4{jg Q=Ig`DV9=f@wj&|^Px)xx9RL6T literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-38x38@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-38x38@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..46109ecc66c350d83ef0259cf83b72aff042c46f GIT binary patch literal 1321 zcmaKseK->c9LITXm^Mb1+hWSO*2`pbk-Q&atz)rl$?JxivPam;oZ-Uep+$FN(W>)O z?waz_n7l2Pkl0#oWg#7ryhVANWasYx>v=xk@AvsW&+p&gH^(23HQ2I!iB3{iVoQ504SRnR{+^1khU9v5aKn%7P=80!uSAuY@IaxkhHZ=C^ap z@);TTA&x%I_3L$E9;p3v@#*ZjB#1;kFL1}+FQUi6`4AFCSo(`GInQnf`=?v( z;JNHr6B{3@$4s#Dq)rdJJxfwmJ?ai;GF^75!@elVA@cn+N55iiMrv@c!`Y{P7KQZ0X$}D z|*8ad5;X5J+&V4Zo6-K#z=PAlyTYNA77Tt1IB?JF=h3CTAjz)JDy2G>_D8PYW#VrW8q3(|3pW43nZA2d`{xLR?r(;j4`e4>tl+ zM3e3YVt{akf^YBoAdS}4?Lkf}8fu&@E-F6)Xa}UIegy#hGNsf^-exfyw`v+sVELRP zE2Y*0MHA0#7nIUbe=6NxG}L&!8}GgUb)oJJY-3F!#~7I-mXc#SYf@K@tQffS{5U() z)6{v_M8T9fNI@#9ia~MddDEgN&J@*1K4P(X$_24`vCYIY3A)!gF6$ndi@|*b2DDQoLy!sBIbLo3a1@Q52;HS)#$kto}1*qcLmO^+Wry<9y zMr#Gk^JjyA;dADLVqydB(xMa9;V7HE>%(Ka+mIg}hQ-{$H9f}l#E10 zs#V{|lp~#U&9ZSo)4U>9bGQPwKT9R<^XQ4dXI!9bHX*1@pK zRp*ZWoiA863s5u0i1A~^2Irs@Ajy_{VqGDhRF**o=$HH2@rqO-{d{>LMw{^$W#BYe z*KMOM;aS0y3rK-4Vm^S9Ix>ZHYt98JqYKFE_$qJFGQrb*y5mjo%?Z@PdE>pRJjogV E09u@Z)&Kwi literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-38x38@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-38x38@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..5a94fa1076daded10d0c9c7837630791a2dc4096 GIT binary patch literal 2028 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 F{sZ=Xm8$>% literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..314cca810e998013e3d88b3f476df89f983ac5ef GIT binary patch literal 2085 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 F{tsjPJtF`B literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-64x64@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-64x64@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4259733177773afceb87f4c43b08c54a9bfddbaa GIT binary patch literal 2308 zcmb7GX*kr47XQy6#2{Tu5mWYkU$V={kjOsS3fa;$28Hx8rZ8ly5V9om60&D6MAKkQ zrmk&bD7=;!gz?(OT;1onAKv@nzR&$|&iQaYob#ODbAG>H@)bKP$nn$10RVtl!(om` z74s{&jveJ*6CV-)aFMKG=FU+ddSOher^^}Q+P+3hqgIDkO2$U!C@d=xBYfFb=7b(3 zI3NDd(W4HZT*8jkG0WdeLWrGCbVOYEAY3n4Ac+IY$73e`_YJrTW~Vzu$=0N_!iL^luXT8KBOh%=l0t5*4vjywXeelFe4 zk`Q7Dd3`^zrpPQw!o-cabZ_0|^X@BFL;+qZD2|P1UE)|_tDx9ec-p(Bi(8>h!s3)W zbf=sO7IUzj?D~eUl+be7V!s;sV`!KeA#K-?ef}ZM2`>b-*5Xv?<|Krh!kc-s3mD~9 zhxPpxqqRw#G@aIg>6Kwf&zyT-{k5^-E_r#q6wQ;)9!Q2U!kJR$u9rzRUEb6)+v5yQw!$?^&DT5|n55!(NUV+p?|cK^Tmp zW78JDc5cY~E|$j{#UjN&Oq!~A^G9t+|h! zWN$`iq7iCR2@zw+(7BwZ?GgZ7FN&wOlJNhr$}DUm1%tf#aqo505l z4Xxj|oWqnVbyb{V>{@s$Zu4J~!7SvPS_Mkp-204Nq!2%3r!$yp^;HQnQ(yfp5=N+l zglbvQ?MR=gYpMn#;nl@CIph4ver7K^LdaKa`F**UW=}wb=|dAa8Yzj@Mnkn?a2X5` z9!bzr8x2 zRk;CUz%nKyYA}))w-F{FTf1lemP74Xil(i|zPQqPob*r5KB;`;^LY|yvw_8R2%=;9 zLAj#l&QlASNcw%$!GYQpmf9uKYIUx#HZH=;zn$?G;Q%ckPpJ6A9xiCr@sC(lxC|iJ zww6K^D;M(<9c4wA6q<_6u`3wtBU~Il63FL%%05nA<32i;+5MNC)>A_HCE|pv_0H%@ z+=_|ubeQcKR=NhbZ+sWL#LhLlRXRRC;~f{$(01qjv4!}`8zb5z<=65(1buJQvxPw4 z-ZQmr4XwE}QI|w*uiyOYGYa*-a8p3b+hd8O)sb+LY~|sl#lB0NM#}-^%++F`fA+4C zgf@h(m%EHw&XNmuHSl8CZ>z5qNmT>6^-j{*5iQaO;jrO_)n3Z#(2Cp0Vj*(=lF-}* zcTn!;gTGRse}Id6;$^H*_oHaymkM8r zZS}CUBEQ4FdPr~=yQZWv5XABGBh8w;yn@*F==+TGSrM5e&E;^f$cDjD#}5I-p#w>;EMTUyfrK zhn6Q@;#hh9z8D+Gjk`yCvejzR~%Z~j)1GIl%P;MzuWI4A6dEb7lDVbpKZ`^&^MHSCK z|0wrdEg(g6x;D{EpuMc~isDy8VX5X=*wF)tf~J&3=;Uno^{fpRbD?(c8)nn;RGiA| z2U%b)Poj|^tpB!j%yd)>QU2bjo3c}!|B2oohIk>fEAGB)e5DbPjd(HDH!22)A_OdB z_V$Mn`(LugF0c_#7Rl$wO`nla{u+5#t2x&ECWw9QoFs05?UU>crV}l_S~Alci0|X< z(Wi~9m!edi$HK{+XGr>AAGPj*1i@U#jFwB(ZAM{egRmL{Q5C+@sg`@E+@>;5n9Z>v zz91!Pp^|-B`~^+d9HuUGLSxT)9~SczvYi64xAqW8mVti$?RQ|&3vGeFzx<7JyQ|3U zRp^)h_4CGei>+-A1NMf;R*x@|GmurFJrK)mTC;k_*Pj~eB^Eb NYfC#=&4ugOe*r#vI#&Py literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-64x64@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-64x64@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9820d86f0f6d8c461603f69a0e664809659a7664 GIT binary patch literal 3612 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 DeGGED literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b2f4cbee413ee8700c9033461a05fae5c4ea5978 GIT binary patch literal 671 zcmV;Q0$}}#P)irK7IOB0vK9L{`~pFk)54gbN%{teP3VS(+FS>8;FSS&ATWC61Ox_AW`85tQJI)41Phlz>F&XXrkdIF<)ConXHfgvd*B_;J_KphAIii(Q2fxt*XLE-kD zJ9kWgG?2QZPYtuFUX!S+tDglHHLs~<9@QP_?CiXeiHV77=26{&GiT1MadB~3O)c}N z?!do)|FQuwE49oU8Lb&wf>8%j3Pz3t9UL6i0~@W6sAV1uP|bngzJ22Xwh5^oBUCf+ z)TvXhTwGl5sbwAv4F5F9&d&a$y1IJ)`}gm~_V3^C0c?JWA3l884M>Z6d3h}#a0f<5 zM^D|dWlI9EtEmLSATeOiP7&Azn5LwpbZfvJ2<-oU>hA6iNk~XI`TO^8PLLR|eRv7j z^(>;)Y!IMI8r0I#x?EILl;7FeIg5>r?OR)0TNJDlPbr{UCJ7G@pAF2(j=<*rUJVV6 ztJE@=Y7S&%WMt^;>x-h6c`z{iiy2yjQ3p~AMjc2g007_u-)5!>t26)r002ovPDHLk FV1iZqIi&yq literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..84887bbaf3754740fe039966ce6887cd7964077a GIT binary patch literal 1025 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-38x38@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-38x38@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1a21b4d95db042c20ae8934515053d8cc2b428ad GIT binary patch literal 1476 zcmaKsX;2af6vs8s@E+69lG3r%D77rhdn@wF3>EJ?%S_FSv^*Me1zk_lMLY=9Ty-5q zPy`QB0~9Co7Lp1rPf|=QHmOx>+1bzA%>TXj<<0x>|IhE`Lp@#80QvwK85uPj?IoPU@gQH6cn@>A3OGiMx}-}%&gfB4GooUZ*Pl1Akf2zCn}q*nj6fPkMW_QTL)fs_V)Iw?8}bGii;~uNJwa7RUO2US5{WE zrA{P1GF#hRUj7SQiB)Y6;Hx!;pQyy1kBy5X?JL!({SYqi|K12_<#6`wAeBZ7bI9D@ z0JiaYNZG(dU0vPz>gsCS@W4Pb`n|R3IUX;-re*>mFARdgU^(^mORAc2Z{NJp*JxZ0 zt|f4D>~4Jmn~l!Qh+UxdH?+02cP^GD*5L6Dcmjc7Wn+`R`g!H$I};O=+W-_3FqwAR z%4$YlUY>s+4&Tw^bOS=F40%W*k!YYqb?@xyxf2=|MmS<%(ARZyGL||_p-`L@t`_!% z-==kS1!{ooyE`ZpRuv8hUrOo0|FUfr($l_QPH3UgU8D>E^w!kWAaq(kOA30rx+Ff` zdhGP{^y1FW&S!J;^PnJa@06y20jK5i1FJ$|i+u3;2OG&5yI(&IInnP#Sbd)pk*vEf z2TjFv9*n5Q8l?F}k|a6?M=R|eYK8MMw$&TbPUY@c7GExrV#tGj*8 z+1VKoZ(?k`tEs1#eu%$c#MD>X#E4URb{&!g8(t^MMURs2(&_YjPpaB2LKY4Iz+mtx zejW;R(xZk&3nL*6wizgJya-`BtdJJzqGqJ3H3Eog4+sLGXYZ|Zn$7ruMRl!~G0AD0Ysj|OjiLTqe7_Kwu1C#9vOVlr_mhDRomNFwI+blKS8AoAe+ABac3 zz+F*nVxlOI#bO!e_UCCFInElJY$K6=Fv%0q6#q(()$vHdS;ZDIhr^l3%*dGcZ{dzB z0oy8G+^iu7oNPt7GajOdBP*XZ25%&zJ)5i$uX$TrTXtGnS`rN~&Wt>3X>gwvbA}8mjnJ($t;)TN{x-PUm=p|qd zV=|}tn^#uW?(@aPMZKk{_vWVCtYbHc;{uo#t6hp92_x244sFZIsZkR`VxdY{u>D2!I1hA%ZKUGRS8-Lpg wqpj#(Iyg>r+gXtQ!U^B6(eHFtTUfVzq5?n6;DXprHEhu0q_aUM*si- literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-38x38@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-38x38@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..8a94fa293970d341b0d4bb2bfe9ce8878e0d5b39 GIT binary patch literal 2199 zcmbW3do&Y_8^>LS=9VaTVht}QNs_$eGAx&+p%Akb5pvnVu{%wau4}8{mYLbA!A>>7T*3jJ!hk7YCFqfC2=Pj3lA+eaLcsXu%#c=NEh475Ju4P-gfp6!cFKOzm{5 zgo}`_H7v0D`ub|!5C}^p(%w3E)WdGg1Ti(%idpS6_w*BsO!90$` z;k2I^Rm$wZmz9-O=jZ23v3rUN#Vz8iWtN#j{TcI%i+NGe(JuFV^D3P3e)%*<=>~1_ zSfeGCE_q$7z{Z%s-r}_`I(-}%kO>3=j|abF8kWX!W`|za6c-oo-5XENk)gskUV`LE z^p5C#O^LJ-Hp0#Au%RdUFZ~KcQ|rjcNaD|q%=a7IQPZm+qNGjIV|XQ&zwu40sHiC0 z%AXPui&8ss?c({pT-+)^Oze4zdI4j6Jjw8?x{S<{ZFF?BYBx&XItDP^r!(mkSx~z})-F4$o8yS} z&>Na%GMSawgao06+oQSkG*_ACfG>}=!rLILput+4$j9Rl2cZvCs<{U4WSUl|__-wK z1FbrWEwF>+{b$m&8>JiDI$ByDHt*F-7rA_pBauKLNUyMa`2wH0&kp)ct*fg$Mx|1J zxVX4nek80v@a@~gO)kn}YxoBh>xa+Ccnu(Cl!zhySsE7Nycb7!;A`Qt=tg?-T0kK= zHX4gZfW=HN-<>2MOLz{5;cu$6-WNM;ImTd|8>iDra%prNO05b|YVt-}+w4MfbMv|_ zA#`i+yfqjh0Fm!f%rAIp9qtrBtEi}W-bN03Y7#PRUn2#vdw41&X{@Vj?zH4bxsv^? zF)`WN_9kUT!~}|V%Gz6yGGX=3o7yun5|8JbHzz@LWfLA<^6>CL`uR=xYRq;Y)KSN& z4;j5Js;ymQOFw;?6iN|oU8^%PGJ1Zg`1dV{-v-(Rs*BLh_D!+d z+bbw2P}$kpvDk-Ckpu>ML_|bPq@<+GY-^p#G0zeY1XP`;xt>~9O8)W0s4Sh;^-%@H zM}(a%q}KQ}O@+Kx+_I?yp$*LBa}T4*b1%Nn9jDT}r0zP$<}V{D_MtW!-b7(x;d!NM zxo*chj&OL*UtiG!vfh4v{7@7MB@8hPZp4)LD~=8f$jT`xH5r4!(~4J-zP?3*P3y(2 zt=0;~;jPv9D`1?v9yK>RoATH^Eue$q>>m-aM4V*xh4|*f>emN@&V=9^0zq4ZQ6?S< zURD9i0{_c8_%T*m|EohpIocHTb84!Z;eDk3IZ!RbfUH79qtWywFYPGR`nE9WbsQAb z8U}sp{BlQ9v^`^HW=5-}r6n(gKw~m8JAL2BSbV%eBV3)vY+cN>Um^A_d#b!YGPA@E zA2JhHPR%6i5MOB$VH*F0PrvcL`$2PI;FvXDP!y=Wy*(tyk%iUE3FdN0%gOK;Sy{a~ zQ&UqFHndh#4wR|SfqFyaaogJocK-hU_ucila_7}staN0-9f5&?i*QFrJzWT-Tj4)R zOhkn1*ZP~35nqnyCZGt0P5qyxZoLY^VzJ|E3454@Mk;kru->G=`LL9ssdA<-IJ2l9zxv`Oqo62ozvCOKju6|5hQ&UqjE=la@d;dOU+LlVm8)S!upyO#N%o>;Z`M80N2?d)#%2c5~Of0%LU;CfoM z3|hA&&R^kaVU4XLBbTqQgA^epN51d^;^Ui?c>(1kq5BPqW}fcuXAa-2x*9J*5bMMH z0{{S@zL}^M%pZSjoZq!=Nttw4P*Y37v-?7&^@tA{48~sYyXH>RDUSVcYFgTYUwx=o zl>mA~H43EU<>h4u@jGi`V$qt@)YKGhi*%No)6cdSu7GJv4C9nL^Jp4=+h)7#!9UpO zDh!gt2o-T8N_OV?h9b&`f-e-A$A)dqk5EGFFF1WDIrhc%x1(ap%F5b@)WnXL$ltp3 e2nPN?*cB2MT-oHh*#Qn74uOkyaA=JU>fYbpelyJg literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..47099f6489bd25cc1cdd23f4511a4e3d25caaa3b GIT binary patch literal 1535 zcmai!{XY{39LKfD^TUo(!;BeSx40wH9F3O8d5Gmew-|zR=&+GGjNON(rk(U93~G+u5RAMcw7U zlsY1+nZQksn3zPj9m*0DedtrZBD^3#z2{t1Kn8mCIK5Cc;HP50GGNYn@>p{%a~x}P zaCbok=7j=Hy1%I#G4Wv1W+se7bgaGTArH4|)s6*Tm}*wmwa?2fCTZI=Y4E$7_E?#Y z51-F`DT!w}u$(tjXN7wI@M%l&34^QK5ghjl<@tk7m`2;MAK;hoQ)FG(ONa;}67O~Q z^qeKlyo_1vop*3>(BIzPKJmUjBuF*At5e5tDhWh=TXkjd>C>m*3Y(jomsiFs!dWbq zQBc++M5O)X#6+9q zdXtKVhNzopbbr*&#%v;!JW=NY4GRuN|7vdjNmE_@+vw}pwnSfF-wQ;%atFZ8%Tm8|i20%4&cAt3?k@9!_EsDT(OA12Psg_$N|Fc_V5 z)MH+9a&i?GiyhgHZ87Ml#f~t57%3bMM^4yU&d$Pe6e1}UN^|6@dtgjVjQ!QC^M{C_ z1_=N);o7xs;o9W$8ZH+X%5-W-k;WBORfVo{xm?+qnVDF!w}PCUIQ{*B zZVA-|(y2gG+cPhfB>;XTp_I6;KYKgj6??C$1_Z=m;D3@IdfOrQ%A3mB+E7;dq-_4*Vnz_ZGa|HQ%3ntTCo%^Rqv?mN2U5ODXKj?A^?LKGaoq@%u@msHPz+}RD%_?l)y`- zBGdXxZoKQz64!;nGI|#`JJZtAW@!VPItp506v{*&!7wI!z)$wJlC2RMqWgU?GIENF zp)yiZko~_#z-20)moMj{5w}`gejLg!bS*?_4>K*|cad>%agrb5&bRET*2R|yKOavP z2{@b!(2&+uQWg;?{>S)Ayt%o#x5p}<&u>96^@;2SBok2gF4#mMb+J}DoJt~*`T$gX zEt|dgVQP=bWS*$za7KsfUG-&CtWLe6L-p_V%%ASefqhyYE)H?8$PFDd7Vd0#{Mp@I ze|}Z84>$;bz|HO@X!_*Hy2GNn?`f191ny|Pfx#?FuOgt zbU@+vGj$tWmLd5?HfR#t}8`60t%BlzHmF#sq!^UuyreK)V#JZm1puoX rO&&YHuw9AG%f7fKM8a8bj@l-A>|%Booluol_@sXU4W-m( literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..7aec81f9cd1aa96a7d9d15013c2bc79a04e0e6e6 GIT binary patch literal 2309 zcmbVOX*3(^77dLtrV3swEp2HHsiBRbYHW-#7fmB^BU-|uhMG$ZF}79ll#*U0R3}tk zRH+z?s(GlIN{9-JlHf(n)64zw-v4*k+UI=VzjM}E`|PtHIXha5i^_`v0041>jfD&E zjs7cy1$o)PTW=Tu5bi@*+;EHL;}nAI-F}=-RHGSrh!?vgYY4lZ#aW^|uJZwf)GY4{ zq-G1M!a#f$sunc$%Rm%VyQ&^3WryaAsHW2DZ{n`xR)V;G7thI@zlFWdefLV$YqY+r z;<&_6+)J0b($~~ydYtbu&}XnXbD*!dc(5pzRbgsuTxmXQNm&C3Z^DzZ&HsNSJBGNs zKlhA_JCsvYq+~IsryW_8qK8q0vVHLCognW}p2nPJ=fduZIf`W;$aq(3RCyxu6MJ$)l`^ zQ33TN5x7zw71AO79Y7hqBdSv zR~PU;9*6rZC@O8_Nsn5ac`~~=NYUafEukodg&az5uA73a?B)Y!XXj=ju@&qW+wkg@ zvf$nkd+A%LiMB(7Y24mOQsMS&>j}P=sNxuBk>-TsBlU#>lYOjdDt_t;B@2akMcXw}q z!C);x{{CF)M;5n)B+l5l)wZiQoFIjF^@0NY{Rz8|JmQK^8tLeG^Y4xlcDV~pJ=alw zXH#y4U+>y93}14-T#;-NbDQcRQWx?Qeo!B=;_m`L1_uUCKiK8^KzGuHV0wB*^D8E9 znO{L^H|aqkAt9+nMKgD|;yWJ88u#dtV@}|vyct77>#KPhm~zx~CPZJaXMqc&F*#cs z8&H?6)Qwd$F964pMmf4NR2|8gObCfLSGQsbBwL8Qf1LAkp^t(X8y!95pBJZMoAxN@ zHgnqA+H@5Z6ew!@4RreGXB%0wxC`?O90>`DPOpoH683|z3|dM`N=vmgH(E}lNJv>l zrA1LnYP}Pz;@IW&N)X!=qstzCZHG9=y-R+Xpz+K$Oilx>BjOry`CcKzj8JKRsn^cQ z$@KGpBnZ?nF*zxZ^Y+#O22+A(8tK5T!ESzHF=Y|sDk85%J})D>Z|~q>oqyRq^wZ0i zZE{wx!0ZQ|C`gXs)vF%>TTOD>lL-P9Y)qDd@m1nYlb%TyitNS+Hx|v$Q!bejc7`No9FzOJ5)zKTV?G5PqJH=u z?rrLOJ>DXG+uh$@b5hgNk|Z)XFe9S_@U@hGHcXkDn^(i(@PV*MC4V?ep#2>TUn={? zvw=(|r*w67y%;xOj*ZnqNRksXyYt;SEgGt-JI3?BAYd>!xB`mT{1)9x!|j3X=@n)n zzk8lR4Vm+3-txg>mmWTRD9Pb)4Bf!zTl^YvXV^=b@xk{v$7+Q$T6?o|m`z@J z(>oXUyPg6EmE<9iLU)nUYjD}|fZ*U`dVcRYnZzk7#Mgb z@^kImfsT#^kWZYeYtABP>eDov%`W%iLmF3L#WwGtGFv))4wiwbxQn#SG7^b&bSx>) z-PrI|Zhu)8v?Y0tbk-2x1%%PVmLteGQacj*4hUwZ0hQAK3u~wV#@)S!r$Htufzsuk z*>NY)YSH7=KPVrP*RIu>K?MT9%BKv_(CF~+-x^?W&i!VVvp!mlCnwh|H1jDA2!u$k zjWVTaPpsb(DzLr1{jW5*Q;G9?;!_~_PmqX}#NU8_tDvAD>=@KLG7_G$hT7q;nJq3Z zHX@pZ*eOf@kq{C5qFC5SBTKr zF7!?yKQGUUr%z|`gRZs+1cGI#U}C0$S}fRyKp^HD!P(e~h-tsNZ&(=K9Uh?`36WSBYjrZ>bYI{LgTL^Mf&EZZYc& zdYE;~iUCi0=~K0V70$jM1frw1lBVV=3WF)Y1O!wtEB4SR)W`NE<1R}NLZSd3ln8L8vnBXIrXg*lET5Vwt`~!a*=fXSegqmyy42Ve>mDH@6WJ zA)$2r81y7Ts1lcEqwFsM0@-Qu7AqvEpt?G&%Kj2`mRI3o}R848WC{_VP3hPiWJ71nFIm*c1g(rAFXJ$f6ol?{KJN4;jfD&E zjs7cy1$o)PTW=Tu5bi@*+;EHL;}nAI-F}=-RHGSrh!?vgYY4lZ#aW^|uJZwf)GY4{ zq-G1M!a#f$sunc$%Rm%VyQ&^3WryaAsHW2DZ{n`xR)V;G7thI@zlFWdefLV$YqY+r z;<&_6+)J0b($~~ydYtbu&}XnXbD*!dc(5pzRbgsuTxmXQNm&C3Z^DzZ&HsNSJBGNs zKlhA_JCsvYq+~IsryW_8qK8q0vVHLCognW}p2nPJ=fduZIf`W;$aq(3RCyxu6MJ$)l`^ zQ33TN5x7zw71AO79Y7hqBdSv zR~PU;9*6rZC@O8_Nsn5ac`~~=NYUafEukodg&az5uA73a?B)Y!XXj=ju@&qW+wkg@ zvf$nkd+A%LiMB(7Y24mOQsMS&>j}P=sNxuBk>-TsBlU#>lYOjdDt_t;B@2akMcXw}q z!C);x{{CF)M;5n)B+l5l)wZiQoFIjF^@0NY{Rz8|JmQK^8tLeG^Y4xlcDV~pJ=alw zXH#y4U+>y93}14-T#;-NbDQcRQWx?Qeo!B=;_m`L1_uUCKiK8^KzGuHV0wB*^D8E9 znO{L^H|aqkAt9+nMKgD|;yWJ88u#dtV@}|vyct77>#KPhm~zx~CPZJaXMqc&F*#cs z8&H?6)Qwd$F964pMmf4NR2|8gObCfLSGQsbBwL8Qf1LAkp^t(X8y!95pBJZMoAxN@ zHgnqA+H@5Z6ew!@4RreGXB%0wxC`?O90>`DPOpoH683|z3|dM`N=vmgH(E}lNJv>l zrA1LnYP}Pz;@IW&N)X!=qstzCZHG9=y-R+Xpz+K$Oilx>BjOry`CcKzj8JKRsn^cQ z$@KGpBnZ?nF*zxZ^Y+#O22+A(8tK5T!ESzHF=Y|sDk85%J})D>Z|~q>oqyRq^wZ0i zZE{wx!0ZQ|C`gXs)vF%>TTOD>lL-P9Y)qDd@m1nYlb%TyitNS+Hx|v$Q!bejc7`No9FzOJ5)zKTV?G5PqJH=u z?rrLOJ>DXG+uh$@b5hgNk|Z)XFe9S_@U@hGHcXkDn^(i(@PV*MC4V?ep#2>TUn={? zvw=(|r*w67y%;xOj*ZnqNRksXyYt;SEgGt-JI3?BAYd>!xB`mT{1)9x!|j3X=@n)n zzk8lR4Vm+3-txg>mmWTRD9Pb)4Bf!zTl^YvXV^=b@xk{v$7+Q$T6?o|m`z@J z(>oXUyPg6EmE<9iLU)nUYjD}|fZ*U`dVcRYnZzk7#Mgb z@^kImfsT#^kWZYeYtABP>eDov%`W%iLmF3L#WwGtGFv))4wiwbxQn#SG7^b&bSx>) z-PrI|Zhu)8v?Y0tbk-2x1%%PVmLteGQacj*4hUwZ0hQAK3u~wV#@)S!r$Htufzsuk z*>NY)YSH7=KPVrP*RIu>K?MT9%BKv_(CF~+-x^?W&i!VVvp!mlCnwh|H1jDA2!u$k zjWVTaPpsb(DzLr1{jW5*Q;G9?;!_~_PmqX}#NU8_tDvAD>=@KLG7_G$hT7q;nJq3Z zHX@pZ*eOf@kq{C5qFC5SBTKr zF7!?yKQGUUr%z|`gRZs+1cGI#U}C0$S}fRyKp^HD!P(e~h-tsNZ&(=K9Uh?`36WSBYjrZ>bYI{LgTL^Mf&EZZYc& zdYE;~iUCi0=~K0V70$jM1frw1lBVV=3WF)Y1O!wtEB4SR)W`NE<1R}NLZSd3ln8L8vnBXIrXg*lET5Vwt`~!a*=fXSegqmyy42Ve>mDH@6WJ zA)$2r81y7Ts1lcEqwFsM0@-Qu7AqvEpt?G&%Kj2`mRI3o}R848WC{_VP3hPiWJ71nFIm*c1g(rAFXJ$f6ol?{KJN4;lMn<$3_(PgXbI5`$!NhaVMH5sbfTm< zfI7zQc+Pco0)>| z19#k?i-8Vkbq45^fakx>zy>xisJC-jZEXG)?CEli6lQw$S{kX;K+_xuChSQuYsYLe zo>@6w$qt$_ixIVdcp0{Om!VSTtJ$+<#QSx#!qd9YeuL!me?KiJUBzvA;2DUUq^Dq!oorUHr*fx5=}ep$x_8R zV%=CtL$rBS+DLa zE)G3`YLN|0C;DzPM3lh$e=qkei{Li&p&U?OUz9n&iAX*Y$=Lxv+!;PNI7l5G9c_m+ z_{0YW2k-KiGP55q3TQp|VIwXsF1BiEYPM|{Dy^L!lc>1`b)N|1uA~ljQM3of>jDD< z^U;HgP;2WEj_mAgjD&xV(f`>ynexI6=uIoW6t#ox7==`U^!lx$X3&CD*B8jK!{~|61Cp-@O}{C6?HHo|p2-oq!{agPp>g?onXT z->+D(hZ;-k%Pvd#Yh?0DZNnPUe`w~cEGTS=WMgQN*2_dfhjNbm5$Rp*jMUzE~PL7Tq?==QR=-_0Pl}YuRo0}?*gWJ=! z?tOJGE-v**)U^jDO(Qj)KT*iTIr!a{S8)hL)oA9O_bO(Gf+leI3AoScva>KQZ9RYG z_~=N5RX2Qdv{d+QNOr1}*D@EQk=e6nIM=6nK*ZgO@^Xmj)Ds|mceRfeUiZ*vS|1G= z=Lkv9&Q4CMM;$2G6CKrQ&?b>9xwTIwDm(7+`lociDTKjbExhkN*7=>lfV>v?o^A{u z%5ZuZs?x2vNc|nLv$JC-eLBd3H9S)piS_u_`%X&8+siB4TnGu>Brs*)ZWw8^`^Leb zLt~C1nw>F$xwyExXRj=xYK5yU{QRm4>+0%!BPisJeR+BL`F%1uNzAG$^|U9p;co|r z<4g5iR*sGoC75%Ok*l@2xq0cQ2Uy$rk@@+m#6C3`o~#fXb!b%5UL}lk(O zUBnkENnkWoNC~vGv_I9<)DR!DG@FZye+8?YFdY`{BRU0UXJ$U3S-+(<2d?=x4zJD; zfp~jl@>bDTr>pLXD*?w96&11~@;hkWmb6Q`#^^4Ph}G?vReJ%tm`w88uxyS&9VPU; z=CJI^8QL&b{MnoYI%&!C;a{kX4BKbF`m;UhEjRY|_L>HVh7{91b~#QCck|u13GHK1 zgT_x+zjNuiX!*`G6^ogq^cTeB%*P6a^TN0Bx1yfg|%`y}!DC7)Z7|*++4;4E)nDz^Ln>N^Dr_V zFdW{xWAvfiu4+#2-i!bzC;6%z@djO=tiH$>9wcgHx2LB^h_~`=tlVyGaI5l9q~(&? zcomsgLf?IB>n9*X!_}Ianv0?$T<2;HEeO&1Ety}rysXUW+RLO%;dve_!CoRIygR=e z6^|$srw=zDV{FSGh8%27&5uq@nE1|r3S%BPKeYO7@AyOeQ~0z;s*>ZEI?3%5{a!=BsDvMVtd3U!5bEz{$mxZY6zHdIfWT zLn$7t^dK*}8!no`s}&5C#^^V1#xK*;PcZ8^Sy>Gkfe1vKa7j(g77u7%ZEbBirA?Tm zFv@puN9U%}e`gQ;_omiXrd?G%@P?F-P<~FhJ(Dqgbc2$HhK9v_C;{7&nwo0O9uI~Q zem|uJLHKIyXHa>0?LWqs7a0EuH!>qLGcTQujJ}ehqM|M`%rWU=`P50&AV~Js*4EqN z;^O9j=C%mpN^cP0#A`k}l9u{VnUU#ff=+5sTj+k70!#$Q7xh2HrGHS^fCWNV`T5qQ zFNEcbQ`De`xT2zB@HW1ltE;O^%Hv1waWl5Z4WSQJX6N7_QDfjR9Tqs<|HZfgQ^0NA zV6g4a=jZ3%HTExu#+PeMgmHWht8&FEp)whb#|V&gdlq7A_qN+FqlFVlw5{blNxhZ-(ppX_76>a%= zdsDC=w7m;jUIlQ_D*#^TIhKU|!8GATrMGY27MIwR*#|b>nWyR#XOI6rvyEqB!(YnH z%R6CWWJE!lp1QoVE#FtMYc()1IN9KTl+%o_173DgM&k?S8x(~&1&W}$iZRi9Z=(MI-TU%!W zO!=^3y>sg?2ADC_r7^>G<7T?~{*h^rn3!1Om#<&j{gVBsIN0z>>RMXPA74-qoOkob zp(^1WHi)HP*5VfdPf`Y)fHe9xKYzh4N95+=+%iA?@d2xFo`%TdL! z_iO^nR|7&025VPVR(N7EbA1%$;Zz_<9Izd8$H&Jz0Rz=rM+{^sx_!JYISuRc_ooLz z7!p1TjAJ30x9j$O7Jm|2nwoHx&K-hP(T=kbRGa&7Mcij2M{-u^Vr*C9=C-BWj+Z#9oQkfZ9f-6CfUi}B{#p%fa literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-64x64@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-64x64@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..78976d8e86684235b5f693cfdc13c62868e7b82d GIT binary patch literal 2463 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ⅆ=qK=Ly z)j2t~^3&0y*(en1$Afqkl)awyy?dF`QssGN7G$%)(XOsSmH{1; zxxT9zBB2hcoYC2xLEXpqZm(j0on-~TY!Rb~y0&cnEQsQLtgk<)VR6IUqxlkvNmf=i zJZ-wUxp_hotVEC$lLQwu^n^pjv?E~4D-y9gWKJ8XnDTjhdpon#ycA+cS`MY_A`rw8 zqEJjE63gAP(dhf+t`iy%SG(n|?C$QWO?;95z(!(nNqY8-YJcli*Gf*o_V#ww`PrGb zAw)t#VtQ$*9SLTJphF3P;ryzQLT&$5Ew*^wH)!;CYtH!3nr+;S;VOUUk+=u0uDZ)} zIDbDsr@;^f-#8>kPw|};MRzwh6M>X|PT#>EHJKqmQ%j3gooJj|>|Z*%&PZ4h8H&6K zyTXlGvCt5a83OV0@m)(wO>JXs%|1Lki?VK5cj4i616azT`7BF>fxzGDMA;Yrp}GF2 z^V<0Orl&tn%*`E#&=TtjfwbB+tWQ{l$+Hd}Y|@CDx&?6L;mOqZ9W1HZw*oL29HMpv zKZ-iBBRROLneNJ=6=~8aS;FCr=F;!j{N zj;?8$5jv5n=Ne;ob$6ec$KgzJA7URVI|&sRL?O2Nx-SU|3paE`1ut-sn3A78d(l1e zT>f|^l+dBt($caM5D+l=Jl8xA-v*-nFc@Paqvi2WpHf82!M(k`zt$)ehulI$M(-6uWxA5i5#S{vKw{ugAh8~ti z?%o!e{GCfD7r3trK*Fwg85kKw_)NVu6=2%xT>Dw@t$%PZF&S2z{yg0@51$5NR8p#T zwYjtQhnRLt^znqwqxsrL_PC{`l$f-pk3votbz}LYY|AYbkx_03O4@_N!({dxlZN%# zRAYPmYmijTT)mI=zdSwvv?#OSJVjj6)6+{!PEN*CsY-#?)SX@kl$D>K|5}E*!b(%X z`Ye*(+>!26uR8_U(Xxjf4v2OuDVlWgj?m7RM9ifThy5<``?0sgWLK8J?-fCm?WB-o6+%!iGyx#Zc&?f z{K3UanH=B2(rbkv@0n`nPI+ZzWgaVDzQr0(9+@FJczQwHU-9{Ws=5El#2L`b|7qdR UZz9^X>Xpv$jv4H|?gQk%0mxM_CIA2c literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Tinted-76x76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..326391d0455ba8be6b6173597666b6536a400953 GIT binary patch literal 3126 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png b/ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png new file mode 100644 index 0000000000000000000000000000000000000000..71e9c817e8c3531d8b353b9818aeece0e1e64971 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryJf1F&Ar*|ti3tfno(Kc$izVN6 PfGh@2S3j3^P6w+T)T*20I5 z9|D0u!nQV+&L9vEluYv}CDf1p98g8-hni2G#pDemj)nUBIjx7JTCwpuB-7 z$SQ1za2E;E(k1kLt<1E6GIdY!37mVGs&wxr4gW-@$cCH_-9H=Cly8`~VUs3j++;bq zdm!JKr-?vde**~z1g?NUi;754zbFKR6%YmK@ChUy=jB5R^Y9iVfq0xO5<#U3|5?*_ z)a4xGJbQYgsLy-rJu4?kvAfwQRu>x1u?-(#-Z&VWy58Wm+=|2~BE_>%Dy9u}Wf(}F z1O9aMz{DnbunT^#XxhrdvrUa>f-~fV@F9?ESCly@+-iJL4-Ue zN26!o|CC$_3kgnZqk1dWu+bEa+lJoctx`{J;66f-ZY21%5nPbs7`0m($Jf^E`*y1H zi@IDEBX&9>%aVCDTP^+zbCtVA2#rOfTbg_^H$Oyan{2a3m13?C(k;mO26T22LKKqn z6!}~^K)zEW`IB(%-X1X$Zcastn<}n8F!|d6SJpZ6ExKW}2MyQ4V7D}?D;#GlJCe*J zZ`+_5PNBD~RMPWK&i3YQ$lrNrl?cP4m5hh7q=^mhjBvJqOJ9pwS^4eXN5E;0c9x3L zdK*{58~7j72EIkbs%6%xP<}?)hr4*G~DJ)5)4G$H}yE2!jG>>f9(5lW8ii< z_^)_AH94MYs1&j5)cb|!`)$S2Lp9oy>8MvZN;c8Cr;ZX@uu^pHWh-lGl~L9QWW-z4 zyTMt~c<5Fmj^;p3utnr044KWM;b#+(iEq^89A%Dz1ka{Fx-)36-E_jG=67(uRd{2| zT)iA6w(1c&!3i6S^Y#w*sFyOx_OsV5VMwJD8RuAQI}=Sh_ZK?_0z*gkC0${>Xs=d2 zNN#rm%F4|9slZ-AN&UKp+nd9^q@ZDm>0&MPW%8xaUF;djVZ~1VX>AvW%k`-w+qq3Rs9ctZ=x9E5)Bm{X;xhU6EH7XvDN7o8IX<=5RZVm=3 zoA=s0>#EaIQgY*LZhGmo7jJPQqSe=L8dc@qza1EnNev@%dZeYKwtpjaM*cIs4|av~ zqRm(soI$S3k}jcpd%F`%)I%f44P{i!Ygkj*pI{-?G*ZFj7`&c9`v zf|FP5^kY=&(@>v7NyK!GOuM~HQz77dHV~1z2$@v6^A>4-EErekczVB*LRo1`_F}HK z7x%yZ}!yuYygv~43t%)#&dlw7!4ZOD2; z!R@(!y1^tZCHKPS^TbbAC$ni?_Nx%2I9g<%rC|@b0wbrk%q9?eXIMC;>iK*n*WS(u zcEIPs%;Byl=jj(%!pS&!{PIFPZtqg{UUXyEX~voL`vLXS+V&0-&z#y3$sIoe3V8uw zJN#R%kg=FU9PAW(_2&0a+drqfBp-gxA|2`*u>b8qb##LzKDiOocmOMUS?Rp8N-P@{ zs*XPjSwBaRXfs)Yk>$$edCGBc_;v(5^D^|rvk)Df{fw5+s%{5FYImIBRYHAy>5oI% zNXpK;o!WM1uBEZ_nCf4~T-9`Im6hxZ8?+0_p#6Ji!ogE{{@-rLDp}Do z3dVv&i~_1hgs@zDxr`8Y_R?xsvZJ!=q+SU(5=^}W?+D6jr8INFbK3K;WaYH7R7 zF-alk|5Jal(rW#aZ&U4=Q2R3rp_T^kF5h$)?hJ-ksP9 zp1r^+yHgjFR*3U1PN!d}mV5%I=64>0IW2e`4cC~_$n%lF2P>-Xwr^Q@i1Jj6-g+vZ zA&{5u9SV@y(n?>b%YKepHU2XZMN#1@#t zxFRGZ7(bS^>k|ZZjSesSDGATqO}a)Ioxv?X?c;jy$E+WEzLWwGwh-0ZlNmI0@Pg}| zY-f=OQ_4o=h_&*Erx>oUIP01^LB)QW!!vP1Xzq~?=*)KWZjOd{`uWZ$qwLht)cuy8 ztJKLqCDhky?H&wvxK>sDNPr`9bVMHy+QwZW5_{9ZIVVoQ2wAt3yZG7~h;&OL=n??N zlQG9B83jh6#UwUlmwa#L;aKmij1=9n= zsij9YMYz7T%FkSPI(5&kc>_k14pZkVeVE-F*bbf5z18d;CcPCp!yDEf7?^9co&RQa zS3Z5c#d0)b)LX;-#gAkm%;hMG!JLevQl&P-NJ?`XAd&B^Z9!H}y5|^^6T^@A=0Q_% zAuqkeLx56S?%R%D@Fn!>rHrdMZrD7=xBF-Bv^a2HJFQ95G*41*l5U+!yf^o>(EVEW zl1KQ*a`_C=_(%xiedJ$yCV$0<7O1gs26#WpD5aw&pb}LrJXKe+*nE(4xwNnW&AHfpn(i^)#S6Q@~DT_1MAMctuhk3ZZVtU1;MO~P6y!hqD)5VuylVRMXD+IZwy0$&@#AG`8F z=_f7Fj9cW9!IYRzG=x4X1aS6J)#u_w$90#p&i8cK@EQ=EOL+bUh9a=gk|5R;) zO8TuZwalF{!jfS*KTmb3&zZl;nqxnToGDfAQo8brUYXum&$!o_NfQIF2KD%BV`F!l z^g{P$(R(@0i>*w8!71rxn(=Kf>p%Z(JAbeG`Y`+cydv@6lTRHqpzjyrGG)!q{#$qc zU$xCMaPp@FWURbXynyJ#@>LBf2PN=pTuKqp5FITyyjO0S=;Rt7KX=uj-XE$Pm)$bg z?sMix#->T(jwmEUN$mKUlk7bt=YP~^=H~&`()c>}@-kpErSZzjQRDGEb&+J|lg)&} zI#I~6TA;gDAvoTp!e)hbPUI%gB}3mk#?qX;fTJ9jvduS5FaU&5v-sdQY1dP{_sU|@ zHbn}6egC}J^<`xKCPR493TsOE z`jYy0mE_8OgG<~8oBI#wS*+qkW4Yc?w(M;YUbN;K+Oaczzpkfpx%FB{>s{`?vKL$@ z&OBVcAO&>kiP3z1zlj{0GI|uQ%r&fNZJoajx|FfDT5!!V+AR+yctp)e*Wm9`7kz_q%cw1sLW34n<~negzo>y4 zS}m}EuL)8;D;rCGXgXaL5G|g$=>++EDGP{#uCifWH3^<(F)Gun@YfkJH~bAK><9#2 zu_zx8FxcPGS`KNOscp3Sl`_Gt>_o!d*&Pn658H?8=z0*n94;=xGpoJ>Q}-J>sdN*nhFsB zAZ^Umh8#n=WADzb9efU@l*H5-(oBqFld#CdGi3lKjGKyYb%CtvcV|E(qJ}b1=UKT_ z!#1RWO!2S^@<72!LrzTu_{K?4sMnH;2P|{olQ7on%GT z^Gkmco}_=%b3M&_PZf|;vAEW|FUT_!^1zKVz{S$r7lfV*@ZMvB5C1`a{F0%!xnZci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..bc51ba39fde3a6d31d177df8c233270ceac25064 100644 GIT binary patch literal 8864 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 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..6a8caf4a1a5bcf3831b367d57cb10dd7317193e1 100644 GIT binary patch literal 13715 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�Z1nJ{Ml&~Cei;KK0dpb2Ov!Lx>@eH**3mb1qa|`A_or|Hp1!_S8aJ_uKt&0hOc)o!4tCu$g90aqF=I|c!*PRy@6)^PeuXb z;Yjz5sGN(3RK>vz5At+$w4(vq#S*uF1yhKmbmHD^aND|ocOR3i4I^E>CP!8sh?xgK znaIio7_mwYH1IB31=FZ&Tijm$p!Ga#UfeRYY5--O0br14xOC|WuWF`@^7}$i)&B)6 ztH3cb+JD?=U)lUUrBnOMYGf8sVP>lDIRjGUbQ_*+T;BcugMpxe9exI_TSv2gt{7dg zgU{{Kt0`;YQCzj6ONyB(ntFWD3XrUvaP*ggc&MqVW+$vdJSSgJCmfEq04E{d3;!E6 zo8AM}`esJ%x&Bg%IF*>8lVAhie#rM);K|-#k)x$0OA5IlN^zEQ6(H0nj{&>Kt zndbV#q{{$aelAkrzNpSAITH0(`;B8--pt-;52GgsgxwoVgl#3TIpE~h2LBRP*)dx5ohnM8GX&0Hb=_w}oQr&;J+gpf z5Y2NYkg7CT@26vq2}m_feJRq#L53X{1rR{SU_}H9j5(s-XcD-oOAH?jvrgfE~{6y^#E^<*&+K3^Sh3Nir%QWW+ZM_nr5 z5Qg9ox>EtEPX)aLk6NC#jeMK5ra54u}GRBrLQ!>c?{mNWRaBmId?c+2i|hAE8d z7hW|rb}w8A>QMnop8-nWY#mgN~OF=g`(R^`y@Nyyd#MCHno5*9c} zw6>Z6^8+V_ME=T6ET9r{~U1kBGW`-t7NtCD7SM$P}8w zXi2@sx%sAhk~61poPir)ps@IvE;^a0JG$y1r03*gKEYW{0Ic>7h)s{v+Ot;-IOVb# z#W8LUou!)2fv((MR?3EvI5`T}ThN$9c!1fv^(r-89SEzDcmLcJ)jxux7!3+@AsRsN zXP%t-PLHejaBhcV%KY2H^u4W0oabdFjS7JE{JPh6+bM-(-JC8bqJOy5$1Z0lR^}6Y z(mpx&TxR!a{lhpyDn|>m!0(8eap~X^hg>^cnq$%<#i42absE5vGeB*On3A!t1sUl@ zLN8}A_=}^?P!A|*UW#zS4PXXk%lEb%uAJ~`nmP)p17~_`2(BNv=#GmOIwaTM)4GqP zJ?qWykK$4d1VR`^17jA;E$|3ew%oYd!!qC)p$6Ex#}T!_c|dOA{j?o?!;huLXb#O3R*(>u?*nYU40JnN zucn#8z(uJ#!?>M*$S}u2Mnjh?UA7hYtR?e_e5zH7Q#F?`~SL2f*^Of9EBnF zyE53x{x5&Ouj>!4d?Y`05{H~XN&G8}9!Li%g;W_<{U8%Z{6gh!O$6uu3Z|d|k}SFU zxr(7z-B_pe$bw@}q!~m6_py(g6%S4(!~$~(>uEG$xXWPSIji?8C)1xPqMzv6Vm{;aL)jEs|62nq8tP;QTp10 zI83p-zZXR0OeZUoth^S!W9OJ)tE{K1@rcCTiUkvjSt=Wj|5)ob%ZWaZjkGe0jcP1u z)E9aX`g;+H>!LRhVv^Xz>&9fWheq1V3JGN*Hy0m%u zi)GMDDPV66U+1dX6}s&kk!W9uDpo)Bm1Q`RDO}lM3q}s(|aiJm0X(W>Re-@DK4DZcQm9-H;m?uPRIx{Hahp zr?j}r1L!k^3<7*1%mx0ID2o@keXBt$_+9@0^rt7^-dxg@E>Ru_lS3wk<_7OCAs+q@ Dmk+?( literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark.png new file mode 100644 index 0000000000000000000000000000000000000000..1c5cabc5b49fd39c7505454128ce7467b8e75cda GIT binary patch literal 4789 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d844b4939afe3a574152868d50532b0d715d5572 GIT binary patch literal 8924 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..582ff9553e7d9f8a8fe5316d8c2733508afc7de8 GIT binary patch literal 13818 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 YV}dBAsB3T&yaGCHbJn`(B07NbD7XSbN literal 0 HcmV?d00001 diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard index f2e259c..5a37630 100644 --- a/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -16,13 +16,19 @@ - - + + - - + + + + + + + + @@ -32,6 +38,7 @@ - + + diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index b7fd4c0..6332a01 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -1,59 +1,61 @@ - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Mood Diary - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - mood_diary - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - - NSFaceIDUsageDescription - Used to apply locks - NSPhotoLibraryUsageDescription - Used to apply locks - NSCameraUsageDescription - Used to apply locks - NSMicrophoneUsageDescription - Used to apply locks - NSLocationWhenInUseUsageDescription - This app needs access to location when open. - + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Mood Diary + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + mood_diary + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + NSFaceIDUsageDescription + Used to apply locks + NSPhotoLibraryUsageDescription + Used to apply locks + NSCameraUsageDescription + Used to apply locks + NSMicrophoneUsageDescription + Used to apply locks + NSLocationWhenInUseUsageDescription + This app needs access to location when open. + UIStatusBarHidden + + diff --git a/lib/pages/about/about_view.dart b/lib/pages/about/about_view.dart index ba83f0b..15a9593 100644 --- a/lib/pages/about/about_view.dart +++ b/lib/pages/about/about_view.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:get/get.dart'; import 'package:mood_diary/utils/utils.dart'; @@ -24,15 +23,13 @@ class AboutPage extends StatelessWidget { padding: const EdgeInsets.all(32.0), child: Column( mainAxisSize: MainAxisSize.min, - spacing: 16.0, children: [ - ClipRRect( - borderRadius: const BorderRadius.all(Radius.circular(40.0)), - child: Image.asset( - 'assets/icon/icon.png', - height: 80.0, - width: 80.0, - ), + Image.asset( + colorScheme.brightness == Brightness.light + ? 'assets/icon/light/light_foreground.png' + : 'assets/icon/dark/dark_foreground.png', + height: 160.0, + width: 160.0, ), Column( spacing: 4.0, @@ -105,31 +102,6 @@ class AboutPage extends StatelessWidget { ), ], ), - bottomNavigationBar: Padding( - padding: const EdgeInsets.all(16.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - spacing: 4.0, - children: [ - Text( - 'Powered by', - style: textStyle.titleMedium, - ), - const FaIcon( - FontAwesomeIcons.flutter, - color: Colors.lightBlue, - ), - Text( - 'with', - style: textStyle.titleMedium, - ), - const FaIcon( - FontAwesomeIcons.solidHeart, - color: Colors.pinkAccent, - ) - ], - ), - ), ); } } diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index a2ec33f..2081acf 100644 --- a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,68 +1,68 @@ { - "images" : [ + "info": { + "version": 1, + "author": "xcode" + }, + "images": [ { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_16.png", - "scale" : "1x" + "size": "16x16", + "idiom": "mac", + "filename": "app_icon_16.png", + "scale": "1x" }, { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "2x" + "size": "16x16", + "idiom": "mac", + "filename": "app_icon_32.png", + "scale": "2x" }, { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "1x" + "size": "32x32", + "idiom": "mac", + "filename": "app_icon_32.png", + "scale": "1x" }, { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_64.png", - "scale" : "2x" + "size": "32x32", + "idiom": "mac", + "filename": "app_icon_64.png", + "scale": "2x" }, { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_128.png", - "scale" : "1x" + "size": "128x128", + "idiom": "mac", + "filename": "app_icon_128.png", + "scale": "1x" }, { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "2x" + "size": "128x128", + "idiom": "mac", + "filename": "app_icon_256.png", + "scale": "2x" }, { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "1x" + "size": "256x256", + "idiom": "mac", + "filename": "app_icon_256.png", + "scale": "1x" }, { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "2x" + "size": "256x256", + "idiom": "mac", + "filename": "app_icon_512.png", + "scale": "2x" }, { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "1x" + "size": "512x512", + "idiom": "mac", + "filename": "app_icon_512.png", + "scale": "1x" }, { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_1024.png", - "scale" : "2x" + "size": "512x512", + "idiom": "mac", + "filename": "app_icon_1024.png", + "scale": "2x" } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} + ] +} \ No newline at end of file diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png index 82b6f9d9a33e198f5747104729e1fcef999772a5..5f26ca3818377df9aedbbcce34907693d19e742e 100644 GIT binary patch literal 17713 zcmeHucT|(vyY3DsSP*bf5Rfu5GmIjlqM)>7#==-pks>V!(yR0q62$_7WE?31Ls14n zT0}Ys0R>TtK>_Im!AJ>7s7WC0?$7z1bMLzUoU_)s>#lXq8vls-zU*&*?|$FsecrM+ zaTm^;ZrP-?2>`I=)NjWx0k95!T?aNu!2j?nS}_0|=bk$L%jGcC+-PJF)eSeks)-4_ z%Gh1r6q4s59eBRkz|B@q!DBPyC}B&5i~6OvzkZ(*dE>{bgPHO_mFaHwiK8{8_)PwA zXk>3&Cg$0;oC`PCOI38)pi<6PUrNVRpO`)S_+fFqwmYL$x5;w(jFPbm^r&7oX`Ms~t^D*OVvBgByZeo#j~F=GE*{G)?^aPW^W z{6FD?-^V_`zS}V|ap{VkjS-t_sw(0&-?(w`(4n9?XLCtbVqZ3e|LT>TFxtK6=@7-$ z-~aisPzlg*0s!@rV|Tx{HxCXT)DNZaMze~`-|rzs(X`t0rzKi;9YhQVKd^**z^&;LVtP zwYjbReTR;2xA)@>x-4!VR*OT$i|S19E-rbHqm?%C-lq>f$kB?}VokmR%s$L8O} zcW9aj4{QY>Q3HVAU!^wkX-}nuR>u7K*R)^~{@Ch-f{EYngX_w^kQHM@7NJy}+3E_G z{DRN+!}eEriD5``0Q~lu;V0^Qiq&OH?C%+=3EMll8OwF*At`^*G;vt_BlVDA2z1B8 zaJ4p;FC3Tgj9IaaP5WBJaWF3((jEMR&Z%Ery?uv$&AKDFUr+^|LUbH}99CE7Nbg5_ z+YBiC-f^eg+qG5?sZ{&M@;uf;i65>guV0ejunPtjj*#sqvhAQcdwSv(ckcMv**RAm zPm1>E&VL>nM~5)|DwU=A=Le(T+1dzAKsN)C!>03K+Z`N3mMA8*Ws3@Lpf`m>cS-fm z{#i>)%O{+~RrwZO*GBlSqK3z`T+4L^8*`(Cf#rJZjc#j&nte)~^-67RZLMlh071G? z=Z&A3gVeTNO~;S=zfRiV|6Px+Zl$r@&`fDP)056aVXD6aVA`vrqr(SJc{G}Mg-I`M zc*~6J5dYnGg%uBDeKT8Pw%?T9;q6xgwPv zNGq)ulIzAoeVLzzvVhf`Cu1L{VOO;D))TWU;^=vC7gitH;=LhjL>A{1~bz^E^?KYH;nx2gexq3W?m!U%z4T~3nB~B zTAHS@$-)C-R7I(miiw?Q(>gG%fXq=eCI?h;%O3(>-=OXu)(P*J#4DWPI_nvvEca`; zHtWl~BjTRh9+Y4 za<171@V#qps+Hxe>cGCeBbLJ(MTN!>gQ-?Ju__|^mLIS7JUvHSqeinH3Zp3&tiqQ( z(ZU4h`$^{=;Q49j2!7f+q+Y?0^+Dl`8P#rI-E^fHmv=@pq*vmPm3=SHZg5L0gi+iT z&|hC{V}A;TxM-0Xx_`5Gh=rOowqvTeQG0(x2ikHiGPhgs;HjG%gCs&WcCw@ez^9wUAw-v z2shpj*rxtBg7a2y-+pR0)&00OAgurML+OvsRR$AHG{exoV8$bD@-^P^Rc@QBQbSkb zJr$9gt8XE1B}1QF%(iYdPs^HNuw+2cW<-YG;_cvoIU48fA30;*xzlg(MeW>BaQI+7 zXQ-}JZEH@dnZ%=Ptb16S$Q;MG?_Cr2#I<-AAUOO4*(Oz9K_MfgWM(EUUkY4>yzP?~ zp`j_>;(4>?yiOeHDEnZ6)f|`nNkg`0OYz<#X&a6S=HIRdy~m&-bq)u&(rG<{GOP+dByi8cVHYZ+ATS`pt^wbd&*Tjx)BhH5r?^? zQU4+PthYp1A&_;_oUSY(7;n1_aE2>+S_C+y7HYR~fYC$gRYJ_W?!xg)! z)6?toN6fBTw4}IFgm+z;TTr0kBtqqT_f@+7u24Q!MiycI777ymNs%aiTt!3OKV@-D=3J)K*C**3S2BsaNQ z>)rdw&o6MiS2IJ$EQZY-OY9eiT|`20+A$uxPq235#*Lx=7pixqyZRc4uWX#;FyJlX zO{`7|rFw2CFtGX)d&iEQJMESNovRE@s>h~i&JP>(UoK26j?qi$18)cioTCN2F|5hz zJF`CA{ecCvYP_}I+t{}s_mqSc0}%0z06l1%2(leL{q;$LvU4cS*|7s6W<6`Sf}e`c z0YHlNB;)a=btg)AQBi1yG+F9kCzpr6U%HV zjz%V$5=|>vQqMhIzdju@^?p+Avh?+ZOUKtbQt+O#`gCtDMEQ&&e=!>@`z}w%THAod+{t6wdGVkA8rhiU+h;m{dOqWx9X|CZl zkN@gd8jvlYG>4Jz&AyifMlcP6~}+mUZPRo|PL+7S4ZW>%1c-E3Xt={)>3@Bd!Nl%i!k4X?-Nc z5{71Xd=?UAqXv;6Q=0qM`>^Nli3xw$^d^)nWq+ zN7@+L>);njCnYUW3`vi@f+nu;Lww~og3({0G5nyL;@39~Ot0U9)o`V7%otiwYo$hu zZ#B-<6tTkubO$R=pr|cgAgkvybU9^+yJYLY?AopXx;G$7zsR~1wW4IK$0as<>9*|U zLT#Imv8y`L0~#zN2hU(_q8a^TA1dhfWnONBjm}Rz`fbmUOaf5gJ`z)u8B*Z&>#2T; zlCI^CsW1PUgB%fJ#`KsC&R~R7A|1k6ktCnl!_LPVL-33R-p68sIB38iVpl}SH6iYf z3GVpX<++rjI?5(OVt(2{XXI3m58;TY=_c%cKV$VKK6{% zTPrKe7Af2N_2)`$==Q;2nMQW8=yDb-l4Adx;$&8cyU63T)0Tr)DsPN4Bpk~Yjd%}J%N-&~!mfa^RgGkaNrWq5nKHfk`d_x& zHC{JV@^~eIBCDf#E`B%BWX*keY$;X9I8HhKheeswvkjH>_&I4Bx6@*20CyX27qm_i%FZ^1im5skTjoOA%TUC`SkM<4sMNc;;U# zSt9;a>ae`9_~o)oMn+@2z#~7?(qvvp?=a)Hm>pWFV_XhCitlUC06D1$y}c|n1=7-N zUtqnGXFJudX|lkh%{D}K9Fs8~nO||>zEVh`3f|s7S5y98sdz_d;TsJw?E-Bu18bPz zHTm?3Eq>g=A=6s~I+Y__B#OAiWCu}#n^CTmOg5H{n~u@0d(AGY6U%9z6a(G#Z)=30 z$fK}YVN`WFyzZ8*Z*5-G+SeEw9V?0m|MI{zYq_>;?P^%qU;MjTAyquR;U`%QDo)!m zWWjmR^bP^i%R`< z#nz@UWD`cyHPZR_qsF@Cu5M`FU-)T;b?4$tSMb3J)`J$BDc=DuleoU z-)e)LOl`-|joHwm1Wj0OPJ0lyj1_utyjhLU1TM1!ZRT;!o>AUo{1*XzS?{v!6IIdi zTpP25ov@gzB(Y$+xVS*mE4JL-zCZ?7G6Sezvtp-Kp}JR_jm1g$6rP#IEoDPDrwyI8^%!gzh{n z^g(gNS-S?OoXA2KQT})0vmu>H{Td;i#6131eal&E12vLg<>PaGiQx&jO+Z~7f;r1_ zWkXZQdV=+L)NVS5q2rvJYrpg}MrtJA&38{vk1p-)1J4h%urfu*qSmJ|7KavB07eJ8 z&2M=srr^ySKG|hKQ!eJ?4*zPeDSrNox-x9%n!a<6kzT|va?IJ@**K#G-9X4<(7Yfg z-$KQ`+WDk$R=i((u=M+oz2MK;fmacXw2{%O?K?8`dwo<_hgO*JI z97Gg(#e(RktZG6&5xPi8$Ne?37_gGbrmxUhBct=i6!2mfdO|pRzb7{QOw)T9Yr{g zu+J3>$+lz1`Xp`-8qGJw1UE1{btwf~`1Lc2YlUTQc}{1={xx->Nwx8j3ydhPx3G__ zv=_gmPc7!x@tF1Gv*#E(&{8TmrYLM>E~A^dMFEvF3Q;k%@4a0%*1Di;yiMIi&pW<3 zTuQa5bHs9V-SeK9kG`D1;i}}Ku@z<=RxLyAP1%iwt%f4v{X|vXptSyibWvQ}cZHpE zR$ERNk=x2x$D&$T3*Ar8Rg!8S^3*_+Ih5W#W5;uBZRFyqsd5tYQzIThXD zEH$axpHiu|V-RaNcs0WHX_eXQHHZGJx2KFx5^*J?JFkPcrigZw6lL{oZ^d#4V6i@QNia!N z@_u?`b7T9$_3tI#m6=DA;%@lfBD}6wH9V@$-gG2dR+Tz+MB;gx_(b0oVXU-;+6ni{ z*dq%|k_6vfkOTA%sNV}@a2UhX`Lckn?_zpmzbm@x6da7%N$yXe4Ig+!)R65jKW-v% zpJDV9X}hJFbS!ZI_=Sh(u|vDK4k43!MemUC8n4p84_udnM%Hd&v`M!9OWSq-(IbKN zbq4A!#VfP9Vhe7@;&ox?IuqIsJH_$eS&FytTHZu7yqLo`I8~89D2g7@@ZL>mYA{)= z%~oI^NA+nFqPj~EVqkKeX?5Y2`ph3)nO1HrXIFhyx!7ME`gX{Y;)#7%7FzRK4_0^- zc$7~Het30(Z}O)n`i5_JV#5z0Ck;Mtut%b)C}y&|ixS)>XfZW$8DaKh8l~1_F zW$%qMf< zzM<|#1Ho}<5UL*;!mf0; zuIHJlyQT&>WwZUpx;0I2XQpRjHtVG zIZpSv4k6{})Xo?@So;HJA7*iFVs)pC(z|y*d>A>a%2#83Fjdpmr}EQ=zTTP24E2>` z7N@uFQ{vx+t=;ofF;H>q+f$=UMMvnxKkp^PD?Akr$ImNs!D*&-!078(7+8 z-UAu^mGseZ7!HoG8|v_**;Jng8$mkUV#vwgX=3NoBxtv4d{T9hx{$F^FR;7O!`v-# zo;Po5GPLX^Y{l})=g6-4EfkmFHsNzzTT2~w*eBl%V9JpcD`|Cg^>j8lVs30;V0^NT zt)eEbgk!%nr`*fF{$}PJ`D;(MaQP`V(D=b#?VE zB1UKT;&*;fFf}zvo^)=CXl4DHZx#v&u1LJ!ZQ(Z8uf#{}|2~(vc(_xo%nu_arm=1>skm3wI2Pq*=jYyY!Kzc5iX`#)rP=FyC&8W5)$b_ZYyycWVQA)kK6Xlx`n7>O68vAHQbqGWROJ9p>qmS1U<4#%-Eg^jf}+ztyPAo(|I&408? zt@5FlkpiFFi5fXpbzgCuQLC}Ag)kpt4A-RfY3KniI(oc**$f|wB*(tJ{;K^6io!=er3P;k zZ+PtOK>NRb=GLv;H{0}F^}cF;jp{-{bA+XCi^e9Td1&&hk;K->?Fmvc{Sx&2wP*|D zP0zEY*MZTqa8}LB#wpq<^z1pMqK>sm%1Ql*_~vWH^06p)EgzUKv`M~PIl>tUY=^zE ziyV5jk1~l@Ne^Bb^O}vYFYb*M$WCaqP#P48n{O3noEO7XBmTD0f(R1Q##i>z{VscF z_0Iy?4i;9B{-N$>Yu3BbO2MXyqr%E84mvH&x3NzX)p9z)l~G4td-Ud=szR)VnECe7 z?V8^M3>wK}H(FSMmYl^ro#Bs9>W>O>Hs~`u4@@p)XOwjP(YC~;A25jc#b>;6Eg_1} z87L#i%RbNYY8gN3DjdEpmSG2?7qRw|FwFM7ViZJzK zQ-;*l^R)iszj-cS6a&-W3bn^s=fLpy5*>_f;>$jhla<8t4!LPg1Qpa1Ww#NZbsPR( zP()YM$(LzPuWK#QqU;mJrw5E{^Lwfne#qwc=6l|FqI}*N5KclL49aw6eWGqEJ31EJ z|EW6A*i2q|`y1E$^wG&2`$ldnx)^t8DF_9ow?TJF^lI}JbZt|fgZ--fE1!Rg7i@I$ zZ}6iEOXE%Q4eWF5c^H7nMFQ-ulohnzYcy8bI=H?o1Iy;-Pza=8C+y9#4jkC(NGxK|v8G$pzhe#1oF ziai1ItI8eE4W^ktEz}$72AVT85{P~!3=j2npxXz&c<5{U=tFx>0;lj%>-`(i^~5G; zp9O17RB@J#KVK+&=FDiQ!SP#!nrgT`ylO0#Qv|_Y(F&_(dwnj}{uBD3k&|<^>Lp&9 zprbQXG)UxPVLfK;PK)(6vv zpqf(R6^G8x&H7%!n~bt+nwqb`d(7{lvj%kd*rnjUrn#kHg*5Do;_UQ?#{2fe=9?80 z?yr_0yD0%N;^ID$BsIYY(agdi_Q=@mq}aj~+|dbM3jsL{xI`OYclQDvYW!I5d(&U| zCSu*^kemBbCfX8tjDaM^4M|n^)yVGQp%wSHu<6te6K|hz9bhd3rKqa$q+DZISF9LC z;`qJ-Kin``$CRjQ&*AauQv$jK^AD-nE2w$3(g6$A@Z|?Xt~VFTK0Qr=Ob7S*4jwsT z&GHe$^n6QarRpZmE+3Ki3ASSQ{nGm^gibohm7#<)1Jfg@%lY?}^^;!T?Z+Q%r3yx= z$<>W3R$2aaO|YHpW8OTO`w6zbD_ukfmi*>rFx5yURy0ZR#&#?&2GHoDPBYPETL149 zMYlh%>;_Rwws_tx5!Tp#{9~L-rHCjeu~T>B-wa@bU&|MnLU2)zjyv^>y&8 zUte(2z2ICjXuf|3b3GVB5*@GBH=Y(Rr%#~Ao)|u+w!D+Gz|EY&?$d#vHva$izM{pg z1WI%WB2&<(D{dBRDz8~0;KW*jq=k;-c=;gL{g~s{TV0##X0jrgrOT`6w8^EJB^B5_Le4u(pN4xWB3Ph_rWAzM-v-=Nc$u^4<;z=c}Wv=;{%?NSrqPft6bRKEjn@v<)dBm z@DrVsNmJw5SXx>dM5&boQjB58EhqFFYr+x(X2gH?hLU-l%*OSgAmiKPB+-hW0dBMZ zCDTN{bG{!6%pzWGk&>F)q2IW0|2$Q~C~qb$?S)U&%bsc!NJi#LhFkI9S~@esg#6_j zGEqo=r1|X^co+wn?KE`K59h=!u#q5`XWxJm5$Uuvs7$}4cL^!-fS~}&!ht2JCb8hqqL7tr4Iaq(@ z>_GuwoeIxN?2V5<?8fBpF)xzY^8|AG5OHGO?55b31NgyK2v2@Y$ygpw07$G zIroK36rjU62t%wtc!t4 zxEufv;T<&O4d(MX8m5W8LIHAC1a1o0NWm-(cGtispOR+L!mf38je%B!y0!HQ_wQG6 z-vdG=0*<=5j3F`;{$4s3dCmt5h~fa_h8Q?qTFu1nX};TRgbz$?!(`zPAQKj7z{}u> zp{?@Uel1IBJ7iN6o(Ys=Z2|?qBCpz3FVy$Ee*N9n8=(6a$OX@zhONuF7=I=neh>N` zj;Lt;{CWiq#~y<1_Wubc{2zeAf0pnM5;6Z{y>Z&<*s%yvMO8r%Bqs36cjsAn*A0Svrw30(4(0KY-5%2v4U$V-fS;T8}IZRgW7iu!i^qx;vgFQUcF`aKP%Y_Hhl@R+V#GhNIvUvkIgoNq;C>#GL z6Gn9OpDJAbOT$F?NREuMTeze@|Cifa^imABC(pdN5XUWkp-vk)e=g8>>xMtdFYoxn zkP>(7%PZ(tR^HGP1|`Rj;=nD@pb0+!95H#fyyMe!iQ`t$r5> zFvlSV?*}>^LB$n~V~9!!;G1)A!2I7AkGhk!tj@r{#E^r|Qjnl! zRhp!V3Za!#Otg%}z*(dvd(ebCj?FVA*w=9~L`%%px}tPIqJr z)r`3QGY9^DN%9{=lwH*16J=DvU-is7t%kJ>Y^tg_U>}EK1uQBTw`GSNv~P&0T>g0; z@4#JMde-Ne{D1zA<_kk-+RV_Cjlp~1kuJgVfHQiJu>_byP9XlMa-{ndMKo6%^mVTG zV=iVk$Y5q}P&cm)5OB~J3yNv9=%JCJ)2aI!EF!jv)x$pt>Ct(gsf|336!CeP4u;89 z)uA8Xzdt{7al;;w^jFPGAcqMxy@%1rV=CjyjQHHPsF36K& z0@#K9hDnwZF&~{llO3eC-YguLyR9VxvB*i~tx$|h3h(`naAYt)BWS#;2I>zhZRweC zs$Sj!_FEzMoYX+*L^~Qhf!yc5jR$HnqnM&st1ECy4BP+*_np;1^&gWL>PPoMNw-1i zyMJS&=7R;o2mg|O8!R5Wt=TC5Vop&WXoPttI1?5p%ag{@u`QLI_*Tz(b9Uli`YAJ(p2W zY#z6^v719wy$AN`)S<-b6sRHpKq%|y0m*K=eu{vEAaW0^E7f&}BkcQ@(#^QbPqa zF`zkbxv61r!S$Oxf)DM53hBKG-S?dd!JsahMm-6=Bu5WQ%DsmJD}NAuq2@t7jAKn! zbK(U=M0A^3#2Y-J=mgPKHO$K226vP}9#Z0gLal5bXBrLW?!#&I;ef;63=Y^x?ve3a zCMP1I;h2ZZ{-2Ror@%4Qj%t|T3Y(JazoP&fDw;412Pr|s`ZLu48>)a{2yYaBcnk6R zNCE`_v&n=IP&c~XN{DJof{=N>nT_hiHZJO**JQxiyKu_-YidnVwETU4@+1k64uGQ= z9MR_JzgJs(lQUXD!eD<=O;?fi9dR9eroOdX5d%{m+=TfMHQVDz1V9r zb5Ut(tyc66OBzsj&m~tEmidp?yhsfW5lJWE-|tK{K}Lh8=|E%>wb<9!cTjTwj}Tc4 zPfh?wM3DoMJn%HP&+{l$q%Lg7HJJ=Z?pJ}Bu33};u4m!$a4%#W@t;1Oe=06%fB@$W zG@9e4Iq`uE2i64}MJYt$@8LT4|Hww2{Rz98N`%?p5`=M65}ZmAV#~1+k$M*ogt#42 zdfM9R3$3UQ_e{XkP7}f~J;>l+roIJn-Xt|3=^wZ{f)@_LSrE(qeZ%b!ydG%c!!_>L z2v@_H(1o)_WNqWqKYkhAu<9lTl8_fl(aM<_85tg4^wE#G+h`+bkc7;TK%+CIMLB9A z@HtMlnjn;>29jW&0e{eMJSz6*j>OZ%OD(gr`yn~*hIYS&JhbzRAxncPKD{EHm)x8K zy%_`j*U|S0L)^X6X3|uIB6va%a!lOC5PvHoy%&gMf)OQ{USy-bOiClyNS9#0+c~Oa zH)9{7%{{+CZHlGW$*4mmW%~mFPjCXlujw^1>N6!Vf$15Mv_Q)M*&)YN{7#<#;VN{Etsg2)F372w308Xvc-t&AT#lIUocNIl?+X!0amzf@kBb3hxU{ByP}B=sSIw6zD<68` z1W_{=L-PK{#9@d<%bW-_inQH)1qVi% zuehh+Zh!-{c|lGgQ~a%!kah$GdSSc;+bvpg0MQK&5%a3WkmUYuwz+0UYtjEHxi_pfsC@)ma<@P0NU=;y-dwUz|5ELL!-@&ERY*oci!ZCp8Qi{{!@) zuj~lWG>43n(`Tc0q7R%+)xl=1(rJOB{QmP@{9r&>MdUxZXhPsW<#!GS>f#_NqtVyL zAy2zYLu7iohSz56Rabq?JLA_ici7VE?&JXMyxc`zl$0$tFgA9|(9qCaG}bWoc;VwO zAm<7q=wrTnbo6oj5D(ateB$!NKo>+b=3JMP8X*vN@9ZG=^$r~3pb}2LuBaKve03RM zwj+xUT-{9w9a}YB<4zJeeB(wz_c7=ae@?*P`;cV>u09Z?VxxDfprd!;R%xknc!4oz z#zYPk8!6b@BQBp40FYZxzPntqfsGh*IHgLOZ^l^@gI zX>>#=4t|G=1VEO6d;%0)(LWde=-?k5{NoFV7yN(5K@%RFHNP!1FMX|!y#3UP^T$hn Ib-ek%04E8W^#A|> literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z zKpxF`G*X(YOz2^@7i#D+s-~A1E;3&x%%qL5hkiy^JhYjJ74{hvVmAx*6BH`M`!qGC zO9pjEsR)A-n1`6KLACSL%FS_Kcm+?4*z-V?WAZPs?RkzoijIr~I+oh1^~T`q^dCFvG$Gbd8AnTYBjLKYUmayaQz#S1le7Q^Hyr#;X&h*1wDpm+gZC!rSKom zq|+o&UGpeXtlQ1;?@JukKG!8PGS1Io0z6O}ZeL&DsON^I0K+>Mxv#ohK+;ByAZ`Eb z2orY{j0Pa3edA(#-pJA0AaJ6h& z81Gl(pd#j~mrizktoid14K5ig7u8FvZmLLP%l@dl05IprCyqDB?mA2fc*6UB+49lb zZ8`V9epdo=OeZoiY%zw-w`8DNwTORV_>>3T{r)1-YsGSo0E2s>tix9OBqKFBjg#}G z`pgkCblKMYs!Z)r^(qT_c+}gLhR|gnq!1~Qr|~kt&2@_yswx{i$KEn`8J1W8BGljl zr@GEG#W(s#AKKyuqLp+cl1C}7%`m#-!$15XF{M(M*-fD%+i#mFbP35jlgN3{8#A-dmj&OQtG)!031jTwGMal=&YtPfq2AUWekP9J-JT(p099!L`+yen$ zVH1?kRrhV7(mGKkm_jPP_U@Xd;x=ppk}4WY0Rbr> z0MJM_;$GGxL*P68y%KBqHntF{>X&<{aeI4m6+{TQ%~Zp}v%Pujr)zg5mV;cFKqeA- zQm5`#Sd{B6Rc*4PS-rO(vf>YEdXmOK?>K@`L5}|9q}#t_IE%g+U<-1qw3mr5&v;2A zCQ}BEn9_u;;>n5N#dP0RhCF-_UplC+U(i~Zjh>U5+b8%@p3HK(R*IMQwE!uritb}< zF)AK2?+0@-aE3LYkg`B*&N&m~JWB9>(Z>`aqRwgioU)0w{U1K4?>-#i|ZfhNa9hV)2)(%ch zJMH1twoeZWwkE@I!dz$ma+;9GeACv>Ncupl@+gBSeU_uzfj!$+h&@EACkZG_vwLGA z(?^;rcJu1$5H~xI@6lHIYC-$+b&hF1p`AoAOKqw{t0Fu#X`OGt$)7Q!nmJ=&)xjq@ zHoxT4pcYKSPT5(4yzIuQ^S*N2NJpR4v0?rB-^JuaXNLis?E(l>Jo8mUw(gsFLLOy? zEszHWGaCn|lw$LSwoj{G7Uq(zK0W^VVWu#ms8BMRlF2z%-g`fOXmndgC(na8fc)s` zz$GAoxP+l|+T_S4$r1sLwkV77ew1Gug*`|HiE*?FGLm1q; z^p0A0eqqbmk3?|!CB9DBN1Zof6d7+ zJSn!`VD~tVaqy<*Mw^8dM5v3Bvj2VdVFb=)U3L2eDM3@>n(P z?Rr_=I17+r4fE{>1LBQG0&o97nef67n-aNnVP<{dd6*B!Q344 zZbsAof&jw+;CLeK2d87t9s~YZ5?6Qwf&{NPEBN+)LbjOcZRXNcR&h)x`TtdpI+b!>$E~h0o1L*2OddpR9!Gw~-E^Cj(7i69S<66ak$)AYMv|xG+;uR(`;h zGIV3}?+Qxdjz)s;s}jHY{JPmeo@-tN$H@hxaV@)}K?y~ts~E6H(F|SlsN5oH8g7*h zGiC!8c1doE3U|D}Vul1yPmXuCk*hmyU4MG2ml#V0+(G5I+`L_=3cD$%$I=@*8m-LU-!fn&-sZO1%ls63+w}AiAK`Jv z>`q~ztr&&(gCkFpci+*1Ekdv*MhBCzGfPBj9dM|YEjZk(tWBuz4?MGeq+*)t>Q=z6UXF_w z{QDUT4^JQ8J%hW;d2xGB>Fl4Y-bRT!ttP2GE5jYoI1e(eVK0&V5W+>zludt=nf|UN zi1IV;MK$Fy%$yw<oGeW?JIGjmfGLH$Y;l|T0p1V!N*Jvu zHSAG0WpwPip0vm7%VRq8$2O2>P5b!WBfTz*6dZ4Wd6O9Y(8A;nOuG((y?F`ac_u2( z#~17CoTK)1G<~~Z4jXlout{e&nZbDHyHf(=a?OtaJ(2Q(!g#)Ugw-QQ?A?mN#yN%T zBtJ`sA6Lpg`k>Pi8a7GssiY$eG0Be8LCoQL{GDqi-;j0pLmT!Z)szldvbN7GVcu*S zzb1rEq|M)1qa7rM*I8!<#w7FnQ?{v^? z0`MlS3+`#ZB5$DT4+`7e-Hlp_2G0`*F@STbRJ|!tk3cC~1T%NR-p4s=sTT+RqsMjF zyrp-Jv?CD4Y3N&Zb1gr=%`MFR8;|r)uxQ6*X{OpEhQ~+tu}^n8Wijiy`pSMw0uKNi zSNX^Z1y;WirM0o_x%zft0U2GcLm_2BS`b{Z>g|9VOVr%QF*R?pTpiJsEbj4jLVAyd zTA;x15=f~b0^(e*Vo;Tn;WTJSxpI9LmL($Lxob<^S!k7mGhnnVNnAC*g!$ms0#Q|q zs=25I0<>fUw_&+KU`}5P9wlmjRWdMYh%Np6n?AAHQ;JzG?s(Z9UR`pNh79Nzk~DF+ zX~jy>>f-2bl?drlM8 z3NfIQnrT@pLmv+QA6efWPv!sqe;mh3_RcOj5>Ya;4hhN13dtx*_TJ-=kX_kZQDkPz zIw}#e_dK%au@1*L&iUP^cfH?zf1iK)tHv=t|>-9mMT!;;Vg|svSzWkN7q#t$c4N$Q;tl3EYwef_4q>GO<#I89VhY;`X*hz$n*GZ%f+;uViG z?uLlxD1OIeid}0r9%Ssoc7@vJjZIsZlU9zvYpjhYiOrzD5sq3OC zpf-X;Nb!DLpxqX^zDIK%=46-Z3%i-bac`RIBS5*wcw5Pu>G|kF>TQP$dGRYh#1hwD z{|cbbTOKL>Gb1-;X6?vWLC+KJ_^Ij?KzJ7eZ?^8XNgoYU9^z&>d zsIjX*uOK`#Wu!`>L@y!=XpQcW+mBaRjm|XrB@etLdr}Ob57e7EkE;7a*t7=M#XFL6 za;KHHk-rBNTjp-gS^;ehKNv>K>+_jPQ45J%4><1HyKJ?;T9#~k_23?xD}B&@Wp{%H z($hU+nWR?g!9dsJkgVz(J_Yrdns+m~9V_gQ7Sb`&F4wZZ!k}##j$>O{4{?avCbCZfyW zO$)m7LE=P?$CXHDU_RUD+sYwT;nKI7 zSs_XTv!BuxpJ!7(b~uYfsgzt~mj5(vf2r~`LHwpePs!o2A3zEr@#sxo8HEe8>V||d zBiz0@e&6}p*}!6jsm}I0bN9Mc2(c#jg@;Nu6!Kv&4&P8-UcQ-00WJIO%4OuUn;^jU z;I3r=T3KQtiMQ7&x32eVtB`mCe)9ws^7u%2P`B%Xc}=Qc&O^{FmS^{~Rho}^s`B+H z=1_T);9LRK?{$Vx22!5m)Er8aoPOA8&{7fyt`t@~Vw%gtx~+g3qs8LFR%(2Uny28A6dFYnNQgcUa>Sq=%alFh&8#@1o_qgwve* zVFimnUtL{4aHP6s?FB%bu2SP=e*VGqXC8iuZ-JOc{5%Lx0g|VvyWkdh&FD^Gkc!0N zhoolXvp6GC8wj?Y+V;r*EN+<1ac`-+!8Mqb@Nz)=OqV?4gxhR^t7*+^+AfxxVt(n{ z+fkk|-xSGqmkZa@Q%`;;r`-Z|? z0fR6b@l%pTwK*@xY+(MwBUwf^z+F*~piC64BWTrz}-HS1-XF-IA%?Zs_#F8 zcmUuEZ6Of>YIJOe$&{V;3vIBw7|jSGPeS6cvTMdj96Y~pI-z7InGW;(DhFqaiTTO9@KWvQi9__j0btLZ9 zAa~-Po%^sDFfme4@Yiq}r`BgnYK2eTwCjg9_zC4V{{&_GTm-!qHGVR6JXDjw;}GzF z6lXA{xo1+tQM{9vwb1&sRXPdGDHbEMbnwh}t+%tvcw5p4J4r#hEpDl=A{;Mjc%0)T zsG}v<$^HhdcE)5IJ^iBWK{7?Zn)vb%c!5eIj4 zbT}CGO*u)Od@^LuIC@_2{=AP2-O99NglFudj{!T}0e8wtTQcB@F9QW6$J!0Ye`T+U zXDx84b$!hD#4YzSyZLy~!IIZuFa3%eU zG4eg5?}sZ6Yj29P^-PcXG*8%VzLL$0!oL?c(!oQ+G!kORsa+lsf5YER>PX83R4LgF zgPNQJ#Bo#)MXU%J9k?RWD;c>|as5b5p>xAwau=X5XbERX`_ZHB8_XSNDe`s?n(e>) zGF$G%n6o+W{6A-@4hsIK0*J%jpB#Y*G^B48eQD(CDZR5oBl-P=)r7fH^PLf?!aK6V zwkIM35?l*I6p@;^H}JIDNs-fF*IFN?k?kj(M)QKM%%?dSkf1d$Nly2z(>)oq8z}0H zH?Qa{x&36#W@y04!9zx@x7un@ob$&)V8#f~0n1|jF0kFs4aZ{ND1~QjWHToIY5)LY zrgKDCj@dFCx&-w$QMi=CqD*=`$NqC~2k366pPXl#>Y7A=iQD}f`)+B-pS@LIW_M?9 zlBS_)(vGz!L$#P`?<3Hvonw@B1uJ244y)M?0)z0-hq++sJ0GZ+{oiiH;lFi&wy(C! z0Bv9z^M;`4@)USP)7dhg@K5K&U&|7&-@I0Sk>I+ZH75_xEn>qh9qmc%aA@NEKBsVBgUuK zC=b{w-0oU|)~tAVI zyJ3BAB}%rsjz7qZ?x_XCWe6!_u-{e_3u68Asso0IvwKdxq1lN#%4w>J zi>}P;$JZ>58(ZAjsmSJl6BWUTe`0eGEf3f_yS#H6vx;UJWO7CCK!{)4C}`C$j5gNj|k znb$4QRurEE3tPEe!JzG-a0DmvXePO zSD#Q-qOAjTMm|=aBSnvwHoEbgyVIz@J$hT*legak-hhb}e#%cm2$nR2 zV9A{kc)WT$np=5coPQIskbGMO@Fn2NxPv$@SJZdG6}jV;+%(cH+*RFQ(+DjsJlman zy`D(yN?8MCtjWD3w}Q|jQccb$}BDW%M$zZZnri2+5ls)@@(wQD`jt_GpTKL_^CO&SSCcHbfMX#JXYFI^*947 zPh&S-G=l*C@`E5CU1$m7ao(Q&oSmY7)ZZ#5_fEyYzLsFJwJ%GfErFeRN@7lUbUrL| z$6;gQSNsI91LJvT+$Zb0>g<4g8T{B!U05lfKmoSRH^pB^^8sJ3{8PzVq0NeypMF5k zU3qOqksdq{>AUjm3O~dZx^vS6C$ldgCWszl?xd8-sJ;-kPnISB*-f=L*8XggOx$?u zg%B-QovSjBbj}%sShZv~r?`*6PiiQW;nee<-=+y4}S#}q_BgXIJoSOf$YbE7vXt4;Np zrKzZf6Ny0aES8(-cqmnIGMg&ieYWryBZ0VTB=4<*@auP4NdIk&q(Mt(OLPm|Yl za!0OpC9sA#tk>OsaCSx0;!$5r6naw ztzLBo>#LKaxxsO=yWe%yGilL`A|6E#TK! z+1VRQlo*D?(k0-mlRM+`OMT8kVB*-%ZGv}Aj1u^j!wu*~>L<-T+u?6sX!3C}lQte- zk(6_=iwXsQ0JbRvJDwMnk!c99w~s~uD_4vMB=m~-ft-*|z~$*g4g;pgG~Ap1m@@Fx zWS)8IKSN6`^vVQ8hv^Oc+O(Rt7!U%wVsGP+Y6fyS%GG+v+dIdVfCXPzAV~~li+3m5 ztFQmbE)(#2#Oi@k$1#zUS6ijD_yYsa{+BHZAw+^zAEI3bc(h0qm?|pNf?oS}Km#OG zrOfCKn_-CVO;}DXu|5YE#d8I2o>}vUxYlv&>=+I28WY>a1;uI)HUM_IvpF;Ln4ROT zf!=1rpKihNFUo=R@sD-pT!EOm%%ncl43f;aem^;|A#s3`b6vjeAzO!M-gwc`-Kj~{ zBX)tq64*kJl#TrgW4o%hTY3x$P01nD6a6s2#MmwM$vyX5PU|YngU*wXGK*?f?#Eg$~^OWW3I@of-=XVuu-b%A1Z|nqY_2 z;~jD&=QnB#WGU>;RwFq(I< z34K1fCMwf9F}G%k(&?~2EY&)W*-_z0ReS$;7+I1)zz`)M zpAF{5ZHLPMJhYU z;GE*@hM1NM{G{L94dL$!Y-h6A9K9W=I6AYb`Y=v{(tpyLQz^^Aibea(q()R*TU|-m zozpyr!|-BZ_Dn+$*2|vq2Y@ghHo!-`WjVtU-bab(SJp2*2i-}$UP9^qnF_OIFS~-< zYj^VS!)Wu}vn6!LDIt!HJ1SU-@ce>z8f4cT4R9V@O^Xg9)4`VpjsXm*~@%l^Ux;Rf#Zck`BNXu0Y(!C zj%Z}UAmD00nsOS%Uull)dU(fZgJ$bo>3Oa`8h~Wt)EM?v(ndlTS1p0|E9Pg>=&>58 zghD~%R;YpqZAw;F;M(lx5b_wkVbnd+ER+6A-SYj^1XUgNGn0I~ES|f|5emjyPIW)S z0z8i6)BZt&h(qQxih4HbFYa6~jyeKbc_`QEdLD@9SBGButjw|b^l*oQjDk<7Nig08IK zb`ATVGzK%LP+>9aFM0hr8t+m`uNr?h&8o3Rp$T&ql||K}7GgobFhCViaDH~+F#yC- zt>7T3&_PZ*feTKTyd6vlF~JmEA1f+*>CCE4ex}5N^$4o)YuxX&3T$P0(IS!+kan^J z_p>v#1J8bWELml|S02YAQe-&yVew+kipZr~H-I@yc$=8#rZ-8L<_nDx&Qv3dJDwUX z!)@=h1`~R2M{$J8bM^1O&Gy2oxe1T;K?NA{iv_eYuhpLyc3%xu%z`dVc}Z}%cHGHQ<7P!Q|e?dwnSpL!AUf!B^!?#^Q#W!Ry+7ofwPZ1mZq z(Id0{htmX1W?2cAYWZo_lOtT#+Us-nlP$=CGK|Ri4x0Xh>(|iN9y1 z=9y26A4Y}ViRi9Fxzm{>J`YM>GX1D|$4BY9xJrY{oY2~Z&};B{Zq9Pp!pox`8e#0C z-h~@fohA74(#ws!{7kIe4v6XUX<)9bd)g66Bz%^Y4p0~OF+rY;l$v&7T<3~4y!bv> zR$r#LblZcVgy2lq!ff+>yuR4qCcljQa03x|dTcG7`CHcxh#POtGKt6ymNd_0qF7Wf zBj_KC8{jl!zZ>0neDp19n3sD?HC=|WM3!}cK4zCnu6Uoj*hbV1<#F2BD)@A~y%@VXx+u}Hcn=_s-({PxzmMZ^xJ1SV zoZMY*FarYvO_@z8Lr2ep)%HgIL7rhYa~#X&&V8oYSw zA4m{3{hw1Vb~~26K^xro&e7i9eg^SqK0i}kG3z(!_~E?sjJlSWIWXJqKiHAWTG*SpPcCMD`kEc1gx`R^YkYWz zEN4vEIkj@&e4tC!(_~x`-K$w6CU%X7U2Y z)Y}T5stEyoSsB{H{+xfST3tov~6@lO}2gx#N(rHXiOAHT!dp6FiV8V)B4{L_P_% zmX0rPa^-{1xG6|#uEGo+!v)QAOjRe|jg2ICcXU!|Cr+LMbLHlhJ)ErR*P9*z$NLlt zmYjAUbljq004ZyOco?HJovV7M*Wb2nF8vT2D;3kGi%F)6Kr#TVW>}zTHnUQxoGmD0CY9J`|d%8@}n;_co2q zWr98`R_c@PQbMi}x3bWo4XZj{it6qYj+o*XvNoS4>rF;7WNn;vA*|A!3H}Wh-uk@n z*hV0S+XnX;K;BOoz?&*9_{NnM25s4^^QUt|>R!()^Z6#G3OmL{CU^-IG_M7_a~B+& zCrV;ouC1ljbK(K=ygqAE_-}ewnH2&&t0enS7}I4i0wJgNvCf|P$`|DHku`K`HfDa2=n@DCg8MRi_)vpMR2Mxy4PE2Qe! zD||kNXy=0WeU(43v%md9Hg9Zu#CP%d%C67gk_#pfXs8lf>M=betm(}0fdDKq0{26# z_c?J!Cgo-~*=wswLXkR|W8d+rDdV00`22Ouv=_Hod9bmB!=D$I4r@7DZX7e+0tO!9 zR{0d}A6^K#yRx@ykotO4(WUJsmFvN)d-o-wZ(wcDSUS`8jO-JSAMa4y@MK4fDP`(P zzxQ2})ofiauWKj9{Rm$Yw^?g=?`oO(Vf|T^I+-A+o1#F`>tn59d=FtgVJAV=y;G&` z0GMvtEeil5;e$Ln8-41(UeMl2kYLk%vPl?0+Egg_;g)494o5FsvdeZKP;&&fjw7o{ z|B+e%Z|)8Ts?=>@p|hr!nYXgV=ZjI4Cp#$E>+g^6r7Nd3<>-t=G%B5IyZUI{e{49G zqnIXEB=M@5Ndf1J#l5YWcLG=A4ufF8S{z5Kz-uM?Ni{{%mr);=l0=473h#cIc{K3> zZ-VUw_Ng5^HgWQhs5tQU@qv-YBej9`R$a^|lknX<*+sSVXue8M0#EPBJ6_Liwl*8l z_zoD#!l%WIXJZ$jm?|zUu0LdeP&8IW*(|39&QzKGnem$6--u{ZGtHt#Hro*h)?lu zXGKo-4Hv1WP*VLj;uA6UwGSV*6ro%PRbwR{@tXoCOb=OFTB4ru-|Id!rP5Y6LF*-D zy|t0qDSVPo$ffyoj#CIZV?l3VsPRYye$F^xxv~Z78_fwlCWbwW!nYCR2nx0_+@tg3C_UDMVa2Br=X3hfP}^Cp4Yg=#OK}K zKYVY`V9jEKD!UrCbSX6Xym2T-cg}!n;?;o{mM|zWj0P@D|FO-rQ zKt#ApEh#AX%_f%9!G6`I*K=bSnMIhQ%W5&BOMntzVr*eS;WR;FgM)+k`#+Vze*z&V zkU^I-R|!Nwy<~>eeQ~hJqa2|DdpX15kD=6U73Du;T|VarycBP^n#IZeIJ&H3S9#@oec~poZELqX$DAc>XZyuIqd^GK0Jq~0kI=d zA7gMo8%zmkEdnqMh)tkp?V0I;Tm3`>aU3^~dXw zlhdd3=iygnUgYu#GRhxln}4D?Gokczq?T;RjCk0=fUHy18$lt!-q!%sNxee7No^+N$9d?Es*``)0UJ4SC&FNY0pf z_MlbGdUy$|F}YDvJ9GTCkZbsNKj3DL5;=BGBx8xI;n)=A0d0j6MP7Mi6MQdk@Tux2Qy`oI_&*%EQ0bE?|R>P$rDhcFa8O?JIK zPOpFDa?-L*+Q7RrCg#y5z$l0d>n@+OYo3g>-Z*x&`Jj5|=*UOYaJer6;FAbdtt0O? zrFGUE?!XeUG}G8wMgeTs%+r;3uUU;Nq5EuU{h-g&UOBKhdS`;J=m!~xn*ztv_p@dD zR)tR!P=~5kX)FRsx9)uyuu?0dh%Ht7`PTM@e#Cq!z2ts;O;L)tQ1ipDiWqbGz@o_p z^D=UKR#`S7HAt4vQtD(_SeWyj_av~#tJKlb9>-s5Ykuzx_E1ZNl4)~f=zG$*;-y=T z2ozmFva9az<{2&63fQ?(Q8{IPx@t1LuFcxP-LXVctWh3AwazVTt2)w^*Zn-#eB`bD zSHoAusjOBK5(>uQPGj=ijdOH3jqG?(<5#C{*JQ?Lt~@zow=Ii4Al$Vr!#+Cf-gx)A z`_h(>b@7?*6bYM8%628gGW^rwWoG$mK_eCk`}B&llStfwHf12*{5spmTeNH$4{gCY z@Yuwr*k@%m;T<60bw9z6^WpWi@Bu^qe-g;YAzI+VjgsuZaGA=^G*I{KLy@rIjSpWb zFQNsCp2T;S$VaJtZ<(waRu8y7^X;>YhsWp zM)mKgCeE@K;J4vQSV z&-(Gl5AJCp>K*2-`U|4i;u3p8xo6(isu-38>cY zml1Eo&FBBKJpour?}q&nggpFiGM%m+YX`ng8P+uRnJiMyWcv*_AZ8KAB$w;rfmN8C z<-2EB6TqZO>A~P{*<);wYqZgxQS8E*syOXvGkGxF@s(scud0uv?T)fQ z(DGrwM7lvpitUG~6!*}kZUpBn9PuP`5^nMK@($xI^0Q~axP5qU>L~uF{R_<9&m z({}$$WuD1y-QzMVb3jLPk`~bDJNkw(Dv-6cKUb4uzD= z-w?i0NZ2K}AbT}Zi^uOZ32xmSxJw+6(3j%a!~Tdy-@RxVx6YUw2|V6JX+mSJNclfl zF~SD#eo+lnB=ZpHLl{)E+`sI^-V1Vn!6#Ml_W4aH*Pe(++sNI`M=5L3?X1z0;CJeE zJiX5Mp6JH*=R9W0t(1@>>1y=lP^F=yJil6JxU~I}EpTsBx?rJ5LbCbQ zuLBmmX1MO&!E}khx=+#hCesIB53`IWwqyFtR{AUv7vJ{Q^dn1S0@*^UOmRwctFy&> zd={(J@avBzmu$MbyamRMt_$kfHY<*v)%%&nY4hUDH=$k)$8LHlUG0G3Kv#T~-vQjw z)hXbsNIg?~b-jRw)ir5Q(gfwM+Zk+0haf z+4ER%>T8RnKAoJ-(s&tu&-iZ@A?^J|d z6md=9C4am*v2r=aa&a?~37bc($n#wQ<8UGXL+!RtrRXGSj-2INJ#+3J=}e6nOC}G8 zN~lvCS@rxoq7w$CLg-wx!%V%ymw>~xhUw4cADX*$A}D~{21F$!Y61aHwpdL!QcrsN zl~$s5kk%7HWHkZ43%mOcwlk3RcbKGQ*}K(Fxput)rpE0zH0vY(EyY=blQZ`odG#hD z)~{&r6XkSE(^csqsaMm>2c%xsT2&g_Nab1bTY%fIoNHatDY@C@Ei~v@19|F?szU6SWRS)uDXqNY!48RlAb;S*ijqus; zp;bteR835>3BXML2CewOM<^q3M*ubU`}gnI-oS&(vf=GF|JJB-inGOH_dc1xb|iqR zWgrcNy?1*8)vAlAaiBE%K3Q>5Ygy-#Wf$>FqL|Kvgb&6H?iQC*Z|PN)xZJhH#d#=a z@s9O0oea6Lg}submzNZ{iZ*_okZ$6G*h5YO!dE=7c4=YA9g$y%1xjkVl#|1DShEjM zH3(sS?uRfB3mhW5Wrm} zrY>KpBxM&CC;s5Ie_{o}upN{vdb8x<_$5iiQN49`z`+Zz`&E`yLAim;X&}$HAfKmT zkO2Dgdno95mWMH~h2c4);H=MigT8hyzl|4g;dU7F;p^X>w!fa0zf{^rf?>~ z0w{=F_R}ru{g5i@&xwC%R-!-1x|(k6pSb5_)$f`zyErIvSCs{z`iVvU4x_znFKti!!av6BkRX_=+kEc;*`_rla zB`g4ruCJGT3XVTTrlh3Yj>1>PNIy?sV%Yo*=qaBIOY87_?P04yx6TV?_{~K? zOHEo3|2EA2JAMPYZM!H<{|!s-$r>l5{19icxV`Wf-{<0I>{v&H4FZaCy$B6Ludz{v zRH!!HV#JGP?5(L!Zp#}NlOODgWqjO+yo~+LasPYxH+ht2KjdfCFQr(oovP3?vkFK^5FvPJ4^LD=DpYQi4tUXuY1;erJaBQ79 zHcp(>mKvoD+)bq5SX9siR>(%CL??*D>Snn%p}NfGO4(RY^puLI+j$Pw)NZLb5bKo{s|0L~ z-A3R~;QHMg0bHSgESOM&N&@oF4|8gkPF-nVM=sQ;d}wcS{{!iW-)yQ``D6t#xlh(O zRF0Z@O>0uMz9g)u{P))ptV5lH2(gC8I5i(FDRG5Gp1bgBydKgxJy5gBfK(#D7NzZU zatG}S^z#KL*Do5=K*F7hk(`mbdgI1XoM!8*-};#UzNtEG@Nki#`7)GfV;VlfW^)=` zBaAjK5>gx@wf_D!B!2C6xBK^K4%x|+#?P@5N7tlfWo6xWJD~Wz^cnPfFF($Ixt4!j z9%x^1$on56XZB0Irm^kw-*rd1YVO;(*LbB21@7OPJspo%WO676#~oUMws(zP#+shG+$ns0IC3W z_{kYU>N5<_6=j>*0d}r-?8U+--eXfy2M+opoYL|=I932TMp=&k#tzJ^72OtRJ8BVOvTYPh;@EE=LJLeOk`y?d|Dd9%fWlhON^LnB^6x0LyZqz@imyogJ`$C@Lr9Z4o)ZQz>NCavG$$@e2#r3 z4I=}I5KgV>wl)~_Ja7gLQGju0c1{h%cV&6c`doWWv$>q*=ZLc8J{hBiKXNK?zx2Nr zz!pph;BLU2OaZTv>Pzj(VpSp2&OWNCF<~>NgL!nezhxEgj;&2 zl>z@V#>sykFCnFL?|(j)J3SFr|FFa`n@KbhC2pZB7 z#3>qIn&~mG_Vki=p8_x&CFeD4V7MvgJlk^G7H;(apFxr+7Gc0+1KfI6$@aeF+d7DJ~_-A|H=0?Da#&^Cqb=!=fVz>giW5nw=jWQBS%L^t1EZ@ zCm9;qlG{($@0W3T&l17ownc5pWhfM8Mwn-fLtb7H|IYl)8@QikEc_Le+s60x?&B*m z5kObB5{BD}gGr7l84~vP{N)C~3V;xhBWd%=^j0&KBw3T3-HU`;hqWA3OWW~<8nl-M zfYn-BI0_?g`3$_;&Exw<(G{QM|8)Kq28x9NF-F$>r@_BO)t^T*i-U1bX01<)zC_uE zR@8qEQQ#cm$YbXIUPVO?z7KI$pw@r=-V{V@>dC9Hn==1QBVy_b;#*jR+&f*$AwCl?o&G?2Uk4=*Ej zFK^Yvw*HTO9n!XRBWe++o3)4O!OC9PC=_l_<$M(W8(Akk`zv5?nJifb^rH3N?Hhio zo$=nNmSEz_QFHj|XF!vQEcdqPyZz_4|M_GBH)k)KA9XGRlTJD;3*y1c#?ZWkeaQM* z^`Bf04#Z)ARgrE4rMmlk8E5F=NpaW8xKNd3)-orW$m+kh(W12jQbQ7oi z)=#qbmhkplt}u`FC0sV9sdnb5$E!zX_xlA{4wW&j0*DCm`=1;Sh_sB1xiH@C89Z93;8d)EUk=lPNIZ`o3H`Vd+Ig`=CV}#?PAXvzWk{x96fn z0(rYh<>?PJ>Hd8v@c8=*vm+)>P1k@i2>yMaKw2nihLV6Z;wcdc*E2{8=xNh(FkEe3 zq_pc;ISw&}`?lqKx<4vIa67!xu|P}G$c3MDyg?u^InS?uM6Zzys0QM9ChW>g-ypzA zkOUSfvhTTWq{_>TJ{+kpgwX{@>P5ptiJ1NTO5)8 z8BiLUY_!*AJ$V386^TicK@z0qOPWP#Ea5?}!$_&fQ zOcRKuR^tLX*&CM(ahYftiNg!a=uU|He)2nU2(~iX@Yo|foZp906;o=d%aK09YEW7_ z-yX*;XE#z@?zZ&fQ?2fYX!T8@-$(K5Jo+AkyOM+(944x4B%2NR&avFFJY^9_br5UtzSX5@gmYYm@ z@S$jtqFn18bXQr0IYhQ=+2~ZDB_DRW3d=*B+3q`-*1P$i!GVIG(AMp=vBQ#^_mNxp z(;4Iz#_~&9jZ}}7oW?R;_x8&h?b0N326NJq4~>W^TeI^!o4=G5G{|9ff|`NN5+?ns zL@IWva(*@PXPmVGQ#rgIOY*nnoqNDDy$hd2uMT>wBgzg>YT&BV2U{k1ah1(1j_v0` z@o;6~SUGW=!+j!oa9ko_2^G75?VolPmWk=Pb-h{k=phZga( z88Rp7QzbHkpYG!aug9e^DF63Bi|1#CeAW^CpakO9DTT!p$yhuT8Aq10^cl2O@Zl-2RXr`+zCPj#_FqXs}W2{Qvn2Y{BmNsG45? zB{BF_rVgT$u0 zE8o6|@C>uOK1Ba}!V zx!M$9J1B7#_JSs90cKlucib?T&HqQpLE9YV1?v{gh2NWKEt9FX8;3DePnCL5Z=k)Flp=?-i$<5H4zc z`?2ZZ+p~Y8FYr;m3Vn2(u5Z`Av6#S}zkpQpZ|vNP0DY^I-oa$HXzg+ajQC7%wldRN zfOAL!UwFtuphqqR41v|3He4cQF5;UU9M~lti-k<HSTs^#>-Tf|C2&~#m%6WZAy1jz!Q_-IbpZP z8ht8}UG13lz+N-7+01+RlE)6OT^3px7fn@1|_b7^{bhPet}< z_)77(<^>8-qQ2X(n4faVhm@T0@Z{5HFSWs~EDXtV@7IAMbVUP6;v8^%l3PZ#wOZ-* z*Vk4lRj6OYpAZ_$*`t|tYKmLar&&{5{d+5cst)rQTn`n8>Xi+0zXc6YbTPMgzewFg z23F=+`8=FXXF6b*CDVN$v3|6iy;TSFSYh$qrbhKDcT^U9l zj}3g#zty{k*>s8S+>t|cng#3@Rz`z}njy{*?90mV6_Mkvv=iL9pb0ttHf$7;TxkX1 z-klTGb`2~-Mxx6~+{b-KiFd3XG`p?+6-0PMorB#Q@TY_CH5)En#5WrmHqj;@Fvi1A zeGpO@wuYIPOgRY&02e-U+j7!$LZ#5mS72R3MJS^gfheL5`kQV_n{8}KXaj)V%4b~As zFrQ7yZal}~{ELX@8c#V?2LlM@)g(|;VvcBjEuTJ=`WkOem{DL!+7Lr!U;F!mGm_^~ z+V^T?%bz+8noq9{ybcq16Gzd^fS2`skac)@6|;8X8l6Q19epZ@l^3@1ES!x2XLNA4 z_FI8#x5sq7hXVr83D;_5$sU!*Ye}zyx1wMC?Q{DSgrUx#fM?_Fj@{syA2x2yL^J{S zPPLkQ#O+9E9a^H*USdriL6rGHDt$B!vu~t7^)@_e=(<|SVd!MenX48AP(Z$4WoC9_ zeN;I;hEAr{ZvB^gK*1AWfI~5H0a{Y#2UBjn9`7;3JDrI5leeufemoZol*pDlVTSHP z3#8@6kxsJwUFg9(;)>Xm!{nsFC<7}Xwv_?o=eP)$>vvvj>yw z=YS7{pIOg(u@mJ%G0G^TM@L6>l)?_{_e`(yLxmX%h*D zMJS13@e!}HFR{?GNtq;%=4#zUgfFP^$g|Ax1<`vC&qIPbwGNo}3>ZM?=Evk6r|J&S zi$UD-za)A$kcqu)8)1mG z{FI*zS4{wM6S3;RP-!$0&8!6*;>|%T%HJxZt}cmap#~4vD0Pkx22gBbPo~=2iEMFa zSN<~qRz>jf54?e)>3%j;Gc6C1_YO0C|CDQDt7+bE({$0($tizZ)xn2L?@6_ zR3$`yiwH?E%X*^k*^oQ=z!1GA|E&fXHPR=rIEGq4%0=SGvror2Y%k#d`aPmx5@~7a zdkmPa1d-<`6M%& zp9rn|?C(5SRowEcasXoE$)s`=GvJk9wPt|2VX31T2F}6x3#(&IMqZND*a1muBh9?X zX_HSLo?$y$a;qFx^U1W|YAd%)Gaf|AEHqZ*{PW96FF*&nO-@c?c6t5=K_z@2f$8<^ zY}d|9NRviy7sF$61>@bV$B3*VeDg4DX3qScxVTL~5Go^T?}aG+th- z2`EduJx~ZcSssR;yX%oW&ze|$TF?;>HGHp~Eq?$w&SAD?d#s$$|4F@l*T7}X$7>}7 zRvPwxrPaLO5X-qYiQ7{P^4Ui2GDbq&DJ3Yu`)8zfMi1{>HEq`+uR1bJ4x!#n0D6_M8Zs_# z3mc%u30aK|avL-!XI&?{^%v4OXUr4OzaL*|-HV&M5GPx)SUqYMWw@Ex;%DHx^&FOD zncjYHD@AiYbGx1O(rsKW>Eg}cid)6bqA}!r!G{?x#)c?^k+q_uv%Xh3ha^A^{%wnpRPY({1LqK{NQy>!UjUc8f7x2` zgyLiGpsKlFO75ee2#drn3Glyna)PvUP}e(t6P z(8^W6g23+fzT5gZQQ^L-Yg#^P;QK8FTZAe)*|CKS6(I>8a2aoN+XEkYf2jAF!Zi3! zjS($tF@bu(ypeC>`IZtF;jz`F6A-Y7ZUQBuZxp&q4zHb9cc*!1`T3p9xL9`nWhNVr z!2lf=fCA>;1E&E|yfmrHqB#XnUCu28b*4#eZ{lLL(42#`ui?BO&uZj|d_Fh!Bw8g$ zn@2uezsJz@^XM(T{!CEw+EyG*eaF`FuTN%C zOZg)khBpDobCl(3ud$bhr>EdmuQ^l^Cic|y2m>LM+gsZGYKUAeJE5YUX9}j^JDoojv<}Cm&t+agmp?JE0%d#fo}m_cYogpjn5&egilTvDFz-Df}1i zB4)bXfn$dqb!cCa13DdCgMNehaa&${n5Mw&bxeKfNmHq%e{T_H@WB!H3QgFK2gNpB zP<;xkez-y-Lr(0^P^G!YH~WLut`0=mPXbVN64iv6Nd`s=eUQ;?V((+QU0&B4SF3*{Pm$AVrq;v&)c>VLy_UCe45VEsI@ZWM2TaB# zRU6XaLx0^H=0)Z!$rIu`3*s{Z!W7pU@6aHvX*vUuzME+!B5H}k_gFD)3=f;nI zi1|B!@iO%p;L{!JSEI~vyUByf_{HY=;RuAK##-h!06XFwxYi?xl}oWStJ*P{OcVe~ z_v(y8!+BaLQB`(D(XrL0ReKMn$R)8mU2@$q$Pq; zbZq-$IkP4V(`m}e<)cwnZLrjiA-X0@VY~Gi5-PKX20#Eag!JOw1br%7Rr}`(v@d!u zCo@&wE1SwM=zt~$K!eJ**9GAv!}Cogn9(d0X~BwPkU4gaWh?WVRcE3N?C%_R_D)Vw z(YmJTJ_0~fhItqHPqoIFGQYE2!~?aSRa{vjcDWhy5>oT zGOMFTWfL`aLx-!QL(9r?~D6y9Uhq=af8z!rqg#p zXk%gE-;=@G>MUv7p@P#ni@zP*$YQwA0Dlc21`%pV;p!_F@xI(^eA5&SZ{rU?^Wj}! z6Y%C^eMYilc_~MAwqV`h=I0;WA)MqJ^$IvyJ-O0)*RuLYjTL1TWd|(NbhIZ;nOop( z`4bc=fsxaeI@zc!vvYFFetFRKSMjef2_#oIzzPIxZ4oB0sxKOzX4Wltz#G@LD2Qr5 zm9o~xF;EU*_!O`}IigC{sU%1^$$B@>Fa_H0*>*1Amc^7tnKxcPpr8zZTme`6(0@J| zXfBE;0)lcuv%tqq05V8P2B^)Nhq~qdR|1KCfe>(GeuFaNc)T~zvma>o)FZv;sVD@D zynx%jpd8m<{zI zz44BQcmN85TNhy2plu`Nt$b;sKELSBpW)my@*ZnL{lFaD|7-8c-;zw*wh@(1yH+~o zQd6mwOU~P(B4CS|mX=v+F44&NRvMbQpcpDmU!|BhndzGgrsa}~;RGs*v>~aLX|A9$ zxrCyC3y6ZiciVh3@BH@t1LJY%FM8{e94DY4JQ} zYS0fcOC|N!{@iq*a@H$Qe9ONriBWJrhLhC?o5K2)!=~i)0hGh-mMd~RkqdIGCB(fU zy5*IvHssJ&gxudt>g(3w2{)axskJ_#h96qTc~<{c!`n^f zg+SOfdm8=UI!4%}d%RkXd}yWU1H66h)eDTsQr!qkcZE^zbI#F$k(dn7l7z}@YSv1+ zIcEYw{HJjfg()x7R@zQ&o;LdJ2vi6Fkl?OHM-Ga!%w}co(6=I5LZ>n{9pr~6!z|S$ zq_VfE7##n|{H(t$wPI-D`~L#((@V(MZ>p6Eb8k%4{lIGT;hZ9cg%~HhcbDCd%0RbM zs?uZG1wSL{Z0f+NzDiO?w9~XT^dWptKJ@M~0(@5*az*ZgabU465JN9eFY7vD8Wdz_ zlAIonnlivB;uDXov3sIgoKx2>G6a;@?v0qg;r`RnZ{4wMw2%}(e*c8k`R7sNT@>H} zfUU~mHR~8!4rJTHVlT=v3wz2kx&95Nz?@Tj8)s5E}t{|AFA=d_Y zOTqb{ATx>U``k~NJ2hYk3r#Gn1}|1Xj}jq!9%;{k(?9!WZt1z#{OATvapC-}#$LWi zi2R>~v0v6A<|?Eg)Ye#VyRyr7RJ$N4vFEFfmb1jHF(yZN^rc!ULDen>KWu(D9Z5!P ze(qg(G2HmSqyi2B&W`vo@N=3l?+dXbWn-`1LrY1^_mSilpKLLxQp}@s?=Tqw6Do5Pui*IhPZtaT|GAE&MF$;(4s9Bt5f+vbITElRv3( ze&@3GgY%ltiz;PZXq||TeA+sP9bc(#*G<2ck&zF3W?0$Bxit`EwvZb7jke;810>h3 zb}}!oS_xUbJ^$_PWrSlJ-;v4qq!@|L9uM#ALcMu|+|fni+AqPpu+CtjBrs#Y1jKVU zEc6L$d!2l-MgMi5&7?{Dfxj)qn;mIZudn7I6V$88%05A!PtCQTGSxXKMGh;qXa|fE zJBUmhM!}@e#A?s%bajm+=Ka1WxHZWaj;k#XT{T#;bH9c5zA8txVHEz(EeE*PP9eD9 z<2|evdxmVLj_n@`lp>6@ zy_ZTczm54_lGjPwPaq$dF1HdIks&Mp;%bge$QZnnp${}#&Z3)z95ei@b9;c=kJpY- z$G#RZbgyTi3&d4=3%+gXOSp|g^~^%K1id>re4gTka;7m@WA}bFo`GUbT8-n19VVdO}IkuW(H_iil_S}@$xy(Q*fCcNaD60 zxqsWK5lESLWnKgy^ci@da#k9^aW5)oLzbFxlUVBA&UM~79PF7=rW@Ot`>9(Gju3N{A4%EK0dPuz{=J_LUv|Pe^*x3eq_ExMNjB3?{$+xH^_Y z;e5pH)*~Lo@y=;b=P$Iqp9KR|j(>D-kaI4WeI&&HPFRtbZBMiQ^PwE`pF$Z7#(@UF zP2~&InXDTNx3`4)H2mD8yHl{Jk(|C(VA2vwY}3IRqo*qy9HvN7a!$$hlZqjmb6tZy zp1fLd^be5LmcI`_d3@@A`jLDS!b0qXVvP%y>+DfL86Ie=*TZ)PL??Lk^F};4=dwv; zPRBV>*)f&NE0vtjYHw@vs9l(Dk*g-}ARSciwv!f)E361d_9y<;9b7)PBw$3dh`AZi zAY4)BVh3t>;gR=s)nZW3PT_3bOLDK)eTZT^*m%P!HdC!FvK=Z=_iA>Bg!`SsC|P3u zz+oMr^PUcTebccFK>bqp475+?5RUC{Y7klp^p=Q;ZM+c8Zq6wBtH*5c=QHlp7wZS%6AszeebN>>_2^H7uuK@g%1{vF}DT>U{h`}c+u5ubXcFMH)fZ6-l z!y=qVN>jqgj)3T!mALcM;1!8}PDcMCU6<9?l#euNff${zE=b0d%;TcPFfw`y>zjLg#_WgnwatH|t}Y&WrR32m5W_AWNa`OqIc{ zW{_mX(Ck1psRCgMhJ*hXhcAG1ocb_kuY)%9rlYzq8h$K;X}=5m+8CYpJ4Yw6zLi%S zpu}dkAc_hVv>NfWy9eLsQ-6OzoBl{WAkRi|U;anmJ5dFwz(C9~-A(!Vfw z(E!S5ua;@}(q5GrIc6|PAOSPg{il$s$UBI}tk5xuP-VedGyZd}xqXvWvU_`{;Cf0> z5fN79T(#iq-q$RLb(of0ZA0lfepj^!a2-6 zv{v^7r2J*xmj&XVgZ>Wd=RqwGGe1`-Svll~bz(-y7*N1ooU5J*aY@&5ea5ss6n(a? z`N9l?w~=^1g2wLDVRD5ovqLc^Z#YRDFR+QYV4emH*fzOpzer3>Pudh??f``be>dD3 z)xB}1O6bZpnt=j(m92Fxq0dz89n>B05xx10QDL-YDz&e>h_u@9+RG)Pv4{2IYNiMy z8auH}j+fW*;q%Ymtbq+KI_r4gxGUeYJ>hq~vbe!N3%NntH+Dyh7I70!cu(qE_`Vp; z07NvH4Q2s#9;mKj;>umoviK|H+#CbgGq`D+QxI*$r6&D`yf%-M^{H;6gi4*j3?c9c z8$}NK?0I4%b?c`p2;SvL3*xY`0fe_KIZqPm`M%{DCrPUt{bS|zlhbHBNlUe7zcK}E z$L2zIl+z#Z!thJW!}{G&JAC@Pg`H(}GLM_m;uV}C9Yt(vF+F0Dy7{`k zY&v=ZZf?8^qSD>~2iP#{qQK632aMplZye6Q3X>dctS@JHSz2)zJaqXvFEZlr>9$oY z^&9^4pN`1EJcEw_wi@P{zJqQX470?WZTB*5Y7F!3#xJO^z|Gw@)bFoY5#daTP5OgI zcbKI$Ok(|9g_%#If*$3ga=U0_n%|#}eWwyeW~(19Te+!xF*(rd=LU(nM15;<7Z&oA zrqIw#r7}&_qgCdvS7+!|3?8w7JNRtHQ$~8Yyw(xC+n=- z7SQBo3+)tbg2NJn^=lukNOCkiEsgt~4tCrZ{aSnrHRMk@_?1^whFrEn3mT1NSC9B&c-(JrWu@FUhSNf+(>-_%kX#@LYnzq`^M#XX}(*!_LZCY za24(5Y$WH^=;GY^#0c{Y4{_!GPvm_bd#&6ypUpfwu%|+=UEe^Q+oe$7cXnyF@O67L3%SKO#rdayD^4^vH2hG{w%vp|_*jKf4 z=jb?40UP4S+Mi~(Uz(^cvgVB+r+Rt|;wnFRYcz(i=&Q14Ok=V-tTPw4%v&;ZrxI#w z6&rvLjj#yzBr5~N*7o09CkIE=>EWwo`ceL*@Y=504RB*xY#SY{)p3Gvn9zBL_FCN0 zl^axu8p~su8HpiDNi{%5ojAv1{0?t7*mflF9&Y_x4#)X(jyLl~c+s6*I1G7{zBI;tH*_ z94)o##4$cU4ohj~e#C^E><)3E`d;ftdwTQZpDmp)9)n5^+h%BE?)8LI2A`L!zjTBL zPYE&+#0&jDFc&4Tg}VC}E@4ZGyWbiK2dvn6Mpu!cQT_^6!RG!7)fE>V>?PNFm?vc5 z>A8gcW=5Xm2#LEW_;XgMQ$=Y-#lc|zs2}}2ny_4Kb%D@Vrtu6rOmUe!ph7;;L`XHi zXcDHc;OYbIk44?|A9-=Ml{Xap)^{jb5$Kl?v`CIT`bDXV*x{h+UARtzOd}#US>a%X zOdU`5^_P@lkQxB*B<&RQB?FgJOH2-~rMnXf_{5%~s&OlUM^i30FeOM{`XOXs)3_BU zEAyNr%bz8RJ=Cvw8y=)3p z`K|i!j$l~LqQ)kabHK}7WeyB$x*({t#cQWf98qh&X{R*Y--9)~g)?XCL>&z;v9#hY zTFY?DV&1fPE&*z}6Ki`Y5#(-eVYB;OzZjPSDnN%ArA8D>wODpQT4Jt}ah556JE+G_! z_P0uQ!qDhR94VdpAqajIOl4~>oTaQ8H5yXaTZUOb%cRAkWYV?KSNlTqgSM=Wgf)JP zz=?Q5f5zPEVO!NbOCbqEwP^Ff_O_`gdm67#U{Mp^_bKcq2IoO%zcJb(M5z`cjv1Ck z+!awNRhwjj6CQqu+xC#{UWo^3+h?6ymzq3r?3JV}<|u_9x=MWAm`1AqAnOsJ*@)^4 zr|`FkZlg{Cd!#Chmhn=_ZQe;~-DTUOv>)Tbmh0{z_42vWa|vNUO% z_5KA1xNHBgw0zjUH|s5xg$b4k z@Koa#-AFizrr6h2#$k*41tm7_jp$yL4X*DZcklq!u+>9E0WnhcOFPn7Vh^ao@~tno z@RwY)*+8&|Hpdq)`a=L*Teuw;_B@u;o!a!YaOO@bs-?*gqpm?nRkXl~mKFfF z+OVzE%RlC`M5-+KM_GXZ@9b;=2C(sq+R&Ko_RzZ%5P~kDieK3yzV4BN*{$E%KY;4k z)s?*vacHYN~u+?SoI`e@S2!9Co!cdvz;@N@{yj`0-9^8osR(V7PR-O&gM)x3owqs5oJpIwc zgY`#VzjI$V>YYDrIr8D;0JK<10@ycefw z;;oV(!gUR*xBg%xTl-#d>u(5}#jFrLKo}q0b{IuuZhuO7n++ zo@9)d#`(AT$mbW5g;c;&z>1_2Nk%;L?TIhfeK%PYp>5N<5wdihxw4-qvVsN6t@bol zDFgi~t`B&ZU3ek!#fXVE5Ao$7AwI+@amT_m2SclwQE{cLcv3kwhokq+!S%>Fe_*(Z z75)vhq@YqZqa~Hf$0S?T@nr_%mV%*aT${~4)6|(P@Bq_Q!VC4tZa`7?ra`4?oV+wSr2`TVSUmKS_>V@3%0*S#!+L=3f@oF=4k9U9xv0p1;Fx&}V;X2J~h zcz^}G3|;s8JyEFR*LB*fPUm+?f+ofnBQ5uK%NrwA+RV_~h<6-mw_wU?NGRI!zNTh% z&>ty6x8&gW75gdW)?p->&%?{*brS|k@b|(>&<^nyO55Pi_q*eK)=J*Uunw2cw--p%E!VXuDa? ztZ$HPKJ6$Sh7!UrpxVBLFSnpZOw$(ftvg!Nk1LVfL+FL(u zh1Abu(oCSmgqQ2IrE;Zz2f2DAD%T4XO6tU&)2IB}vV3{^xpz1MYFEPy_09RP2QvmA zIqw<(UaCnCs!mFX$+3sjnV*(O5)y`jW!*wzF-l^K`Bxgap+0Ej z@c^nf{Ic`6I5#9bcE7fwiiP8JZ9dr3FsD~SBiW_`8{UgFt*{$@qj#E)90JYra>Zs3 z$sCTuzOye2GdTO;4@;wgJK@!ij-|c--insluCR}{#q=D6Xz#nL6;`rkc*UzLTR%Y{ zN2YK;Zcz4YY=+|(0_?E=#~3U@I1fIyRiBF zIeWj=id+b|L;kSMs>NMfeB^(={IdrC;NYJy_$L+olL`OdOqgH0OpSa?FTRhwb<|%A Pe7HEdAEg|=c=LY&YVNkY diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png index 13b35eba55c6dabc3aac36f33d859266c18fa0d0..d48c0053afb1cd2525142c34fe5984d1452bc13b 100644 GIT binary patch literal 2264 zcmbW3XHe6L62SkV27;7Oq)G@~0f9pS5eSABN(e}kj_3nX0)%@~f)I-IDqTg6Lk%5K zib@DY2p!=B=@1~&q)LY%kDE6)^X}7|_de|I?Ck99&d$znHy(pFI>#=|4gkP8l(D|m znI-%wV3sreNyohh0Kf$(eLd?S&{{qOW78qjaeAHqF$TlOuJ2~(q6j-5{d@0AUgT?U zD}`}zoXS;ubK!P$jGCntk%xN*%Abr<<~JW2MfFIQj1H<)Uvwx$6J$!bgsm^w2sv72 z8hvc&7L(Js&9F}moAF)f*Y@04&(nU_6tF+hxHwsRVhF@2)EU|lR0ISF8VZ2FJuvqM zXmba}ePZB_WrlG=5TgG*;H5|)&D4@e44-1oAu$-Yg6>~`4UM|_jYy?;N^b7&i&KS# zQ@=9M7JWNj_XT_7m!FI%dr)?cv%7k`TaCm|EPZ^(cVuMHxyrx&Q%$&nS;NJa1&_xw zv9d~de!Cci$4g$jw({Z-@^IZMSzJskS=Dk+e~e9l>i)WJj{!SFP9Bq&@9cZTyIe(Q z(F!}g5E@F^={#O07Py}^l&j&-0GE`^0^X9=y)HFZIMxr0juzKJ5)-0Z3PYY!9?d!4HDWZpEhXEoYBITX^kwhZ#$*YX)Yyl^7s1O#56{u*C z9<(DgxX$!sH>RLcEg~~AipC4_RUw}J&-L8h(=~lVj(QfT%JT9&88X@_&KuzbF)j8? zV})j9c3m8=tg|(P*n>-04){ z_EyWfHW&hFAHPy&^D#Cyc1gIr-QW9MNzY zJT&*|xfI@;tA%X2Og?~afI&{q&O?6HyjogX?;9HCU0uVIySp!1+t|3T49U+qwhz9Q zz0&L@-Mm;}SISn9lEPVgnHaz&uA>kwSVj365fK3wBqe||x}0R-tT7An3jrPnCfLH=^+-MeH7WK8qduL9pkstoSv zN2j?Jw|I`8dPx)7#>RxmIy&C?d5V*U=C#?KjwQgAd?C_qgoj%Y$eDwaC3$cDV_PB)==>I|(%Q0y{Z7S%>K9 zfx5fVaZA%u@RR&aI$2i6;%EGk8HMS1?*z1X-@CW9bF_8rkd^Yh7bwaCc6WD6xAt-_ zV2jNs36tP5`O92DZ(-QDgliuL<^WG*wJzwj&MMaZ} zi?j z!^6@%GSG+JTY@MMs2!==F_Hyhwp{5}QOxfl?UbCqpb1tQ9(FgKww01HLk7Jkb4Bd1 zKwxrHt_gEbpu0od5JXx^g9T50V2y|qZ_oe2*uM(=2bEtkZEkNPZ+@`}!UqdEXX!D@ zgJ@3?I2HNQ)QDY{Gp8v!U_LN56EL$dX2aMxR|q799F-75PV6uVX;7Hte0_0AiKX6e zB|W7QnG(_j4nSJn(Sf6~iyHA~&fiA>OQ~Z}yK-fA*e++sIOD`;?DnZ%;3!MM&UH|va bZRdFow0`9cx5$41&-*7n literal 5680 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 diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png index 0a3f5fa40fb3d1e0710331a48de5d256da3f275d..4d1ea22f51bae1f4c5297d1600a4eaa654452b09 100644 GIT binary patch delta 226 zcmV<803H8`1pWb#B!9(8L_t(|0j1C}4uUWk1>gsi0E>(y3^+(aLMItGjd~HmU9O|I zz=RPuh#UZswV-I?XtD5?e|leDOP)h8BV#l2!gd3Aj>kcEJHv1G4*}%Cuo`u&-1WcI$O96YlMMsilT%*(de$#ULrWcS_XY%wgP(*mT`njxgN@xNA1ntD3 diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png index bdb57226d5f2bd20f11934f4903f16459cf52379..5a203916aeea4fde3fed67112ee884875f77f743 100644 GIT binary patch literal 4682 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 literal 14142 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 Q|2aXYPr96_vA>-9A0;-7=>Px# literal 36406 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 diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png index 2f1632cfddf3d9dade342351e627a0a75609fb46..4d3d2b695eb967248658654bba00074c08fb0cd4 100644 GIT binary patch delta 1068 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 diff --git a/pubspec.lock b/pubspec.lock index f8e3bee..584131a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -30,6 +30,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "0.0.4" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.0.3" app_links: dependency: transitive description: @@ -382,6 +390,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.19.0" + confetti: + dependency: "direct main" + description: + name: confetti + sha256: "79376a99648efbc3f23582f5784ced0fe239922bd1a0fb41f582051eba750751" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.8.0" connectivity_plus: dependency: "direct main" description: @@ -867,6 +883,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + sha256: "31cd0885738e87c72d6f055564d37fabcdacee743b396b78c7636c169cac64f5" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.14.2" flutter_lints: dependency: "direct dev" description: @@ -908,10 +932,10 @@ packages: dependency: "direct main" description: name: flutter_map_tile_caching - sha256: "8f37d72546d8f0ad716142c4f44bf5a1cca3bbe8b1dbfa83cd5d49c9b97b8ae7" + sha256: "19b35c39a1958c0613a165b5f93df36d3446b023cd6e781145d29d18d5367402" url: "https://pub.flutter-io.cn" source: hosted - version: "9.1.3" + version: "9.1.4" flutter_markdown: dependency: "direct main" description: @@ -920,6 +944,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "0.7.4+3" + flutter_native_splash: + dependency: "direct main" + description: + name: flutter_native_splash + sha256: "1152ab0067ca5a2ebeb862fe0a762057202cceb22b7e62692dcbabf6483891bb" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.4.3" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -940,10 +972,10 @@ packages: dependency: transitive description: name: flutter_quill_delta_from_html - sha256: "288f879bd11f9b6857868e7b198e69918530bd63d196ead6d8a9ee780b4b44d2" + sha256: "63873b5391b56daa999ce8fa7dd23dfd7d0417a70e00a647ba450f4a8988afd0" url: "https://pub.flutter-io.cn" source: hosted - version: "1.4.2" + version: "1.4.3" flutter_quill_extensions: dependency: "direct main" description: @@ -1406,10 +1438,10 @@ packages: dependency: "direct main" description: name: lottie - sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" + sha256: fa39707f36786707b01eca7626d2c16c32aa603b3f3a146518518458847dc127 url: "https://pub.flutter-io.cn" source: hosted - version: "3.1.3" + version: "3.2.0" macros: dependency: transitive description: @@ -1662,10 +1694,10 @@ packages: dependency: transitive description: name: path_provider_foundation - sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 + sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" url: "https://pub.flutter-io.cn" source: hosted - version: "2.4.0" + version: "2.4.1" path_provider_linux: dependency: transitive description: @@ -1854,10 +1886,10 @@ packages: dependency: transitive description: name: quill_native_bridge_android - sha256: "7d77c4aafe0daf73df01e996d0ac37a0401e19b92210ce5fce76cb064cf57b18" + sha256: b75c7e6ede362a7007f545118e756b1f19053994144ec9eda932ce5e54a57569 url: "https://pub.flutter-io.cn" source: hosted - version: "0.0.1" + version: "0.0.1+2" quill_native_bridge_ios: dependency: transitive description: @@ -2093,10 +2125,10 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: "3b9febd815c9ca29c9e3520d50ec32f49157711e143b7a4ca039eb87e8ade5ab" + sha256: "7f172d1b06de5da47b6264c2692ee2ead20bbbc246690427cdb4fc301cd0c549" url: "https://pub.flutter-io.cn" source: hosted - version: "2.3.3" + version: "2.3.4" shared_preferences_foundation: dependency: transitive description: @@ -2314,18 +2346,18 @@ packages: dependency: transitive description: name: syncfusion_flutter_core - sha256: "795530addc930b3b06f4f2fe99a039de276860af505fcf54c4516fbcb838a3cb" + sha256: "325f519ce4ad8edd81811c21b853d72018529e353584490824da0555156ba076" url: "https://pub.flutter-io.cn" source: hosted - version: "27.2.4" + version: "27.2.5" syncfusion_flutter_sliders: dependency: "direct main" description: name: syncfusion_flutter_sliders - sha256: "2ed4df2297af3922cd0264bff9bb43d6b73cf76256ae0bce0646e380a4506b96" + sha256: "2ffde5c9ad7f50fbfef85dfb8cae4a50f0aa4729038e42c33253831e1b435800" url: "https://pub.flutter-io.cn" source: hosted - version: "27.2.4" + version: "27.2.5" synchronized: dependency: transitive description: @@ -2450,10 +2482,10 @@ packages: dependency: transitive description: name: url_launcher_ios - sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e + sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" url: "https://pub.flutter-io.cn" source: hosted - version: "6.3.1" + version: "6.3.2" url_launcher_linux: dependency: transitive description: @@ -2466,10 +2498,10 @@ packages: dependency: transitive description: name: url_launcher_macos - sha256: "769549c999acdb42b8bcfa7c43d72bf79a382ca7441ab18a808e101149daf672" + sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" url: "https://pub.flutter-io.cn" source: hosted - version: "3.2.1" + version: "3.2.2" url_launcher_platform_interface: dependency: transitive description: @@ -2530,10 +2562,10 @@ packages: dependency: transitive description: name: video_player_avfoundation - sha256: "0b146e5d82e886ff43e5a46c6bcbe390761b802864a6e2503eb612d69a405dfa" + sha256: f498e44a547a3572a928fa30ac8760e127d5e5fc86b81b10b0d56300866322f3 url: "https://pub.flutter-io.cn" source: hosted - version: "2.6.3" + version: "2.6.4" video_player_media_kit: dependency: "direct main" description: @@ -2638,6 +2670,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" + webdav_client: + dependency: "direct main" + description: + name: webdav_client + sha256: "682fffc50b61dc0e8f46717171db03bf9caaa17347be41c0c91e297553bf86b2" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.2" win32: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index f37d087..4533a8f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,32 +1,11 @@ name: mood_diary description: "A new Flutter project." -# The following line prevents the package from being accidentally published to -# pub.dev using `flutter pub publish`. This is preferred for private packages. -publish_to: 'none' # Remove this line if you wish to publish to pub.dev - -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -# In Windows, build-name is used as the major, minor, and patch parts -# of the product and file versions while build-number is used as the build suffix. +publish_to: 'none' version: 2.6.0+60 environment: sdk: '>=3.4.0 <4.0.0' -# Dependencies specify other packages that your package needs in order to work. -# To automatically upgrade your package dependencies to the latest versions -# consider running `flutter pub upgrade --major-versions`. Alternatively, -# dependencies can be manually updated by changing the version numbers below to -# the latest version available on pub.dev. To see which dependencies have newer -# versions available, run `flutter pub outdated`. dependencies: flutter: sdk: flutter @@ -73,7 +52,7 @@ dependencies: font_awesome_flutter: 10.8.0 tflite_flutter: 0.11.0 sliver_tools: 0.2.12 - lottie: 3.1.3 + lottie: 3.2.0 media_kit: 1.1.11 media_kit_video: 1.2.5 media_kit_libs_video: 1.0.5 @@ -81,7 +60,7 @@ dependencies: cross_file: 0.3.4+2 fc_native_video_thumbnail: 0.16.1 flutter_map: 7.0.2 - flutter_map_tile_caching: 9.1.3 + flutter_map_tile_caching: 9.1.4 flutter_map_marker_cluster: 1.4.0 latlong2: 0.9.1 shelf: 1.4.2 @@ -96,7 +75,7 @@ dependencies: faker: 2.2.0 flutter_inappwebview: 6.1.5 flutter_rust_bridge: 2.6.0 - syncfusion_flutter_sliders: 27.2.4 + syncfusion_flutter_sliders: 27.2.5 flutter_quill_extensions: 11.0.0-dev.4 connectivity_plus: 6.1.0 image_picker_android: 0.8.12+18 @@ -112,30 +91,123 @@ dependencies: flutter_image_compress: 2.3.0 mime: 1.0.6 auto_size_text_field: 2.2.4 - - + webdav_client: 1.2.2 + confetti: 0.8.0 + flutter_native_splash: 2.4.3 flutter_localizations: sdk: flutter rust_lib_mood_diary: path: rust_builder + dev_dependencies: flutter_test: sdk: flutter build_runner: 2.4.13 + flutter_launcher_icons: 0.14.2 msix: 3.16.8 - - # The "flutter_lints" package below contains a set of recommended lints to - # encourage good coding practices. The lint set provided by the package is - # activated in the `analysis_options.yaml` file located at the root of your - # package. See that file for information about deactivating specific lint - # rules and activating additional ones. flutter_lints: 5.0.0 +flutter_launcher_icons: + android: "launcher_icon" + ios: true + adaptive_icon_background: "#ffffff" + adaptive_icon_foreground: "assets/icon/light/light_foreground.png" + adaptive_icon_monochrome: "assets/icon/light/light_foreground.png" + image_path_ios_dark_transparent: "assets/icon/dark/dark_foreground.png" + image_path_ios_tinted_grayscale: "assets/icon/light/light_foreground.png" + desaturate_tinted_to_grayscale_ios: true + image_path: "assets/icon/light/light_icon.png" + remove_alpha_ios: true + min_sdk_android: 26 + windows: + generate: true + image_path: "assets/icon/light/light_icon.png" + icon_size: 48 + macos: + generate: true + image_path: "assets/icon/light/light_icon.png" -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec +flutter_native_splash: + color: "#ffffff" + image: assets/icon/light/light_splash_icon.png + color_dark: "#000000" + image_dark: assets/icon/dark/dark_splash_icon.png + + android_12: + image: assets/icon/light/light_splash_icon.png + color: "#ffffff" + image_dark: assets/icon/dark/dark_splash_icon.png + color_dark: "#000000" + + web: false + + # Platform specific images can be specified with the following parameters, which will override + # the respective parameter. You may specify all, selected, or none of these parameters: + #color_android: "#42a5f5" + #color_dark_android: "#042a49" + #color_ios: "#42a5f5" + #color_dark_ios: "#042a49" + #color_web: "#42a5f5" + #color_dark_web: "#042a49" + #image_android: assets/splash-android.png + #image_dark_android: assets/splash-invert-android.png + #image_ios: assets/splash-ios.png + #image_dark_ios: assets/splash-invert-ios.png + #image_web: assets/splash-web.gif + #image_dark_web: assets/splash-invert-web.gif + #background_image_android: "assets/background-android.png" + #background_image_dark_android: "assets/dark-background-android.png" + #background_image_ios: "assets/background-ios.png" + #background_image_dark_ios: "assets/dark-background-ios.png" + #background_image_web: "assets/background-web.png" + #background_image_dark_web: "assets/dark-background-web.png" + #branding_android: assets/brand-android.png + #branding_bottom_padding_android: 24 + #branding_dark_android: assets/dart_dark-android.png + #branding_ios: assets/brand-ios.png + #branding_bottom_padding_ios: 24 + #branding_dark_ios: assets/dart_dark-ios.png + #branding_web: assets/brand-web.gif + #branding_dark_web: assets/dart_dark-web.gif + + # The position of the splash image can be set with android_gravity, ios_content_mode, and + # web_image_mode parameters. All default to center. + # + # android_gravity can be one of the following Android Gravity (see + # https://developer.android.com/reference/android/view/Gravity): bottom, center, + # center_horizontal, center_vertical, clip_horizontal, clip_vertical, end, fill, fill_horizontal, + # fill_vertical, left, right, start, or top. + #android_gravity: center + # + # ios_content_mode can be one of the following iOS UIView.ContentMode (see + # https://developer.apple.com/documentation/uikit/uiview/contentmode): scaleToFill, + # scaleAspectFit, scaleAspectFill, center, top, bottom, left, right, topLeft, topRight, + # bottomLeft, or bottomRight. + #ios_content_mode: center + # + # web_image_mode can be one of the following modes: center, contain, stretch, and cover. + #web_image_mode: center + + # The screen orientation can be set in Android with the android_screen_orientation parameter. + # Valid parameters can be found here: + # https://developer.android.com/guide/topics/manifest/activity-element#screen + #android_screen_orientation: sensorLandscape + + # To hide the notification bar, use the fullscreen parameter. Has no effect in web since web + # has no notification bar. Defaults to false. + # NOTE: Unlike Android, iOS will not automatically show the notification bar when the app loads. + # To show the notification bar, add the following code to your Flutter app: + # WidgetsFlutterBinding.ensureInitialized(); + # SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.bottom, SystemUiOverlay.top], ); + #fullscreen: true + + # If you have changed the name(s) of your info.plist file(s), you can specify the filename(s) + # with the info_plist_files parameter. Remove only the # characters in the three lines below, + # do not remove any spaces: + #info_plist_files: + # - 'ios/Runner/Info-Debug.plist' + # - 'ios/Runner/Info-Release.plist' -# The following section is specific to Flutter packages. flutter: generate: true fonts: @@ -144,7 +216,8 @@ flutter: - asset: assets/fonts/qweather-icons.ttf assets: - - assets/icon/ + - assets/icon/dark/ + - assets/icon/light/ - assets/lottie/ uses-material-design: true diff --git a/windows/runner/resources/app_icon.ico b/windows/runner/resources/app_icon.ico index b7e948662785c94c6f8ec82cc2bc2ca6681c1cdf..e2108eb2837fe394d8cced7dc9bef0b428edf4b5 100644 GIT binary patch literal 767 zcmVYX`)6F z6f8J^PB0ch+8Py14B_PqXVj>h3}DOBvH+uiZ32{pb}9p{mV_GHqz^njMiO;!@Ek8B z_q#)T&rSZn^QGt2EAA6;gc0TLz`vph$c-W(H;RDVFc*kMqnLR71P_M>q1Wqan{RFo z!B0VWJZ{!;>;=|0HlP;O7#p8JPj@#WkqCmp5Ehq~SVvKq3v9=>QCnLBo6UyyjvFwU zOz6Aq#M;_AQmGU)8V%DtrUJ=i5_@}l=0aX1{vWHPYZ?WFa`Vb|k!!R7X#P$;mB zWGf(w0=zyiR#sQAwG}~CRTZ5VDwPU4-Es2E2#0$T=gAPUTCKQC)_X^L2VTFL!u#oI z2&Ci9%~#Obb&F*jMcIk}hT)_Ef*^3K&t1T5K2JZh*({g(+yz3R5M5S{MkAN{+yyqm zVLFMAtN?Em0l85GS{=m x#4CpHK458T;#r=eY-Dny2*`~hAU8)|;5+Xx$(-Gh(pmrj002ovPDHLkV1f^KSEK*{ literal 201777 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ⅇ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 Date: Tue, 10 Dec 2024 14:06:16 +0800 Subject: [PATCH 19/20] feat(webdav): support webdav sync --- lib/common/models/isar/diary.dart | 8 + lib/common/models/isar/diary.g.dart | 765 +++++++++++------- lib/common/values/webdav.dart | 25 + .../diary_tab_view/diary_tab_view_logic.dart | 9 +- .../local_send/local_send_view.dart | 13 +- lib/components/web_dav/web_dav_logic.dart | 94 +++ lib/components/web_dav/web_dav_state.dart | 15 + lib/components/web_dav/web_dav_view.dart | 153 ++++ .../web_dav_dashboard_logic.dart | 127 +++ .../web_dav_dashboard_state.dart | 34 + .../web_dav_dashboard_view.dart | 187 +++++ lib/main.dart | 4 +- lib/pages/backup_sync/backup_sync_view.dart | 16 +- lib/pages/edit/edit_view.dart | 2 + lib/pages/home/diary/diary_logic.dart | 4 +- lib/pages/home/diary/diary_view.dart | 13 + lib/pages/home/home_logic.dart | 9 +- lib/pages/home/media/media_view.dart | 5 + lib/pages/home/setting/setting_view.dart | 41 +- lib/router/app_pages.dart | 5 + lib/utils/data/isar.dart | 2 + lib/utils/notice_util.dart | 22 +- lib/utils/theme_util.dart | 5 +- lib/utils/utils.dart | 3 + lib/utils/webdav_util.dart | 356 +++++--- 25 files changed, 1448 insertions(+), 469 deletions(-) create mode 100644 lib/common/values/webdav.dart create mode 100644 lib/components/web_dav/web_dav_logic.dart create mode 100644 lib/components/web_dav/web_dav_state.dart create mode 100644 lib/components/web_dav/web_dav_view.dart create mode 100644 lib/components/web_dav_dashboard/web_dav_dashboard_logic.dart create mode 100644 lib/components/web_dav_dashboard/web_dav_dashboard_state.dart create mode 100644 lib/components/web_dav_dashboard/web_dav_dashboard_view.dart diff --git a/lib/common/models/isar/diary.dart b/lib/common/models/isar/diary.dart index a901993..173c101 100644 --- a/lib/common/models/isar/diary.dart +++ b/lib/common/models/isar/diary.dart @@ -38,6 +38,9 @@ class Diary { @Index() DateTime time = DateTime.now(); + //上次更新的时间,用于增量同步 + DateTime lastModified = DateTime.now(); + //是否显示,用于回收站 @Index() bool show = true; @@ -84,6 +87,7 @@ class Diary { content == other.content && contentText == other.contentText && time == other.time && + lastModified == other.lastModified && show == other.show && mood == other.mood && const ListEquality().equals(weather, other.weather) && @@ -104,6 +108,7 @@ class Diary { content.hashCode ^ contentText.hashCode ^ time.hashCode ^ + lastModified.hashCode ^ show.hashCode ^ mood.hashCode ^ const ListEquality().hash(weather) ^ @@ -128,6 +133,7 @@ class Diary { ..content = content ..contentText = contentText ..time = DateTime.fromMillisecondsSinceEpoch(time.millisecondsSinceEpoch) + ..lastModified = DateTime.fromMillisecondsSinceEpoch(lastModified.millisecondsSinceEpoch) ..show = show ..mood = mood ..weather = List.from(weather) @@ -150,6 +156,7 @@ class Diary { 'content': content, 'contentText': contentText, 'time': time.toIso8601String(), + 'lastModified': lastModified.toIso8601String(), 'show': show, 'mood': mood, 'weather': weather, @@ -172,6 +179,7 @@ class Diary { ..content = json['content'] as String ..contentText = json['contentText'] as String ..time = DateTime.parse(json['time'] as String) + ..lastModified = DateTime.parse(json['lastModified'] as String) ..show = json['show'] as bool ..mood = (json['mood'] as num).toDouble() ..weather = List.from(json['weather'] as List) diff --git a/lib/common/models/isar/diary.g.dart b/lib/common/models/isar/diary.g.dart index 939dd37..432beb2 100644 --- a/lib/common/models/isar/diary.g.dart +++ b/lib/common/models/isar/diary.g.dart @@ -44,6 +44,10 @@ const DiarySchema = IsarGeneratedSchema( name: 'time', type: IsarType.dateTime, ), + IsarPropertySchema( + name: 'lastModified', + type: IsarType.dateTime, + ), IsarPropertySchema( name: 'show', type: IsarType.bool, @@ -163,18 +167,11 @@ int serializeDiary(IsarWriter writer, Diary object) { IsarCore.writeString(writer, 4, object.content); IsarCore.writeString(writer, 5, object.contentText); IsarCore.writeLong(writer, 6, object.time.toUtc().microsecondsSinceEpoch); - IsarCore.writeBool(writer, 7, object.show); - IsarCore.writeDouble(writer, 8, object.mood); + IsarCore.writeLong(writer, 7, object.lastModified.toUtc().microsecondsSinceEpoch); + IsarCore.writeBool(writer, 8, object.show); + IsarCore.writeDouble(writer, 9, object.mood); { final list = object.weather; - final listWriter = IsarCore.beginList(writer, 9, list.length); - for (var i = 0; i < list.length; i++) { - IsarCore.writeString(listWriter, i, list[i]); - } - IsarCore.endList(writer, listWriter); - } - { - final list = object.imageName; final listWriter = IsarCore.beginList(writer, 10, list.length); for (var i = 0; i < list.length; i++) { IsarCore.writeString(listWriter, i, list[i]); @@ -182,7 +179,7 @@ int serializeDiary(IsarWriter writer, Diary object) { IsarCore.endList(writer, listWriter); } { - final list = object.audioName; + final list = object.imageName; final listWriter = IsarCore.beginList(writer, 11, list.length); for (var i = 0; i < list.length; i++) { IsarCore.writeString(listWriter, i, list[i]); @@ -190,7 +187,7 @@ int serializeDiary(IsarWriter writer, Diary object) { IsarCore.endList(writer, listWriter); } { - final list = object.videoName; + final list = object.audioName; final listWriter = IsarCore.beginList(writer, 12, list.length); for (var i = 0; i < list.length; i++) { IsarCore.writeString(listWriter, i, list[i]); @@ -198,7 +195,7 @@ int serializeDiary(IsarWriter writer, Diary object) { IsarCore.endList(writer, listWriter); } { - final list = object.tags; + final list = object.videoName; final listWriter = IsarCore.beginList(writer, 13, list.length); for (var i = 0; i < list.length; i++) { IsarCore.writeString(listWriter, i, list[i]); @@ -206,25 +203,33 @@ int serializeDiary(IsarWriter writer, Diary object) { IsarCore.endList(writer, listWriter); } { - final list = object.position; + final list = object.tags; final listWriter = IsarCore.beginList(writer, 14, list.length); for (var i = 0; i < list.length; i++) { IsarCore.writeString(listWriter, i, list[i]); } IsarCore.endList(writer, listWriter); } + { + final list = object.position; + final listWriter = IsarCore.beginList(writer, 15, list.length); + for (var i = 0; i < list.length; i++) { + IsarCore.writeString(listWriter, i, list[i]); + } + IsarCore.endList(writer, listWriter); + } { final value = object.type; if (value == null) { - IsarCore.writeNull(writer, 15); + IsarCore.writeNull(writer, 16); } else { - IsarCore.writeString(writer, 15, value); + IsarCore.writeString(writer, 16, value); } } - IsarCore.writeLong(writer, 16, object.imageColor ?? -9223372036854775808); - IsarCore.writeDouble(writer, 17, object.aspect ?? double.nan); - IsarCore.writeString(writer, 18, object.yM); - IsarCore.writeString(writer, 19, object.yMd); + IsarCore.writeLong(writer, 17, object.imageColor ?? -9223372036854775808); + IsarCore.writeDouble(writer, 18, object.aspect ?? double.nan); + IsarCore.writeString(writer, 19, object.yM); + IsarCore.writeString(writer, 20, object.yMd); return object.isarId; } @@ -244,10 +249,18 @@ Diary deserializeDiary(IsarReader reader) { object.time = DateTime.fromMicrosecondsSinceEpoch(value, isUtc: true).toLocal(); } } - object.show = IsarCore.readBool(reader, 7); - object.mood = IsarCore.readDouble(reader, 8); { - final length = IsarCore.readList(reader, 9, IsarCore.readerPtrPtr); + final value = IsarCore.readLong(reader, 7); + if (value == -9223372036854775808) { + object.lastModified = DateTime.fromMillisecondsSinceEpoch(0, isUtc: true).toLocal(); + } else { + object.lastModified = DateTime.fromMicrosecondsSinceEpoch(value, isUtc: true).toLocal(); + } + } + object.show = IsarCore.readBool(reader, 8); + object.mood = IsarCore.readDouble(reader, 9); + { + final length = IsarCore.readList(reader, 10, IsarCore.readerPtrPtr); { final reader = IsarCore.readerPtr; if (reader.isNull) { @@ -263,7 +276,7 @@ Diary deserializeDiary(IsarReader reader) { } } { - final length = IsarCore.readList(reader, 10, IsarCore.readerPtrPtr); + final length = IsarCore.readList(reader, 11, IsarCore.readerPtrPtr); { final reader = IsarCore.readerPtr; if (reader.isNull) { @@ -279,7 +292,7 @@ Diary deserializeDiary(IsarReader reader) { } } { - final length = IsarCore.readList(reader, 11, IsarCore.readerPtrPtr); + final length = IsarCore.readList(reader, 12, IsarCore.readerPtrPtr); { final reader = IsarCore.readerPtr; if (reader.isNull) { @@ -295,7 +308,7 @@ Diary deserializeDiary(IsarReader reader) { } } { - final length = IsarCore.readList(reader, 12, IsarCore.readerPtrPtr); + final length = IsarCore.readList(reader, 13, IsarCore.readerPtrPtr); { final reader = IsarCore.readerPtr; if (reader.isNull) { @@ -311,7 +324,7 @@ Diary deserializeDiary(IsarReader reader) { } } { - final length = IsarCore.readList(reader, 13, IsarCore.readerPtrPtr); + final length = IsarCore.readList(reader, 14, IsarCore.readerPtrPtr); { final reader = IsarCore.readerPtr; if (reader.isNull) { @@ -327,7 +340,7 @@ Diary deserializeDiary(IsarReader reader) { } } { - final length = IsarCore.readList(reader, 14, IsarCore.readerPtrPtr); + final length = IsarCore.readList(reader, 15, IsarCore.readerPtrPtr); { final reader = IsarCore.readerPtr; if (reader.isNull) { @@ -342,9 +355,9 @@ Diary deserializeDiary(IsarReader reader) { } } } - object.type = IsarCore.readString(reader, 15); + object.type = IsarCore.readString(reader, 16); { - final value = IsarCore.readLong(reader, 16); + final value = IsarCore.readLong(reader, 17); if (value == -9223372036854775808) { object.imageColor = null; } else { @@ -352,7 +365,7 @@ Diary deserializeDiary(IsarReader reader) { } } { - final value = IsarCore.readDouble(reader, 17); + final value = IsarCore.readDouble(reader, 18); if (value.isNaN) { object.aspect = null; } else { @@ -385,26 +398,18 @@ dynamic deserializeDiaryProp(IsarReader reader, int property) { } } case 7: - return IsarCore.readBool(reader, 7); - case 8: - return IsarCore.readDouble(reader, 8); - case 9: { - final length = IsarCore.readList(reader, 9, IsarCore.readerPtrPtr); - { - final reader = IsarCore.readerPtr; - if (reader.isNull) { - return const []; - } else { - final list = List.filled(length, '', growable: true); - for (var i = 0; i < length; i++) { - list[i] = IsarCore.readString(reader, i) ?? ''; - } - IsarCore.freeReader(reader); - return list; - } + final value = IsarCore.readLong(reader, 7); + if (value == -9223372036854775808) { + return DateTime.fromMillisecondsSinceEpoch(0, isUtc: true).toLocal(); + } else { + return DateTime.fromMicrosecondsSinceEpoch(value, isUtc: true).toLocal(); } } + case 8: + return IsarCore.readBool(reader, 8); + case 9: + return IsarCore.readDouble(reader, 9); case 10: { final length = IsarCore.readList(reader, 10, IsarCore.readerPtrPtr); @@ -491,19 +496,36 @@ dynamic deserializeDiaryProp(IsarReader reader, int property) { } } case 15: - return IsarCore.readString(reader, 15); - case 16: { - final value = IsarCore.readLong(reader, 16); + final length = IsarCore.readList(reader, 15, IsarCore.readerPtrPtr); + { + final reader = IsarCore.readerPtr; + if (reader.isNull) { + return const []; + } else { + final list = List.filled(length, '', growable: true); + for (var i = 0; i < length; i++) { + list[i] = IsarCore.readString(reader, i) ?? ''; + } + IsarCore.freeReader(reader); + return list; + } + } + } + case 16: + return IsarCore.readString(reader, 16); + case 17: + { + final value = IsarCore.readLong(reader, 17); if (value == -9223372036854775808) { return null; } else { return value; } } - case 17: + case 18: { - final value = IsarCore.readDouble(reader, 17); + final value = IsarCore.readDouble(reader, 18); if (value.isNaN) { return null; } else { @@ -512,10 +534,10 @@ dynamic deserializeDiaryProp(IsarReader reader, int property) { } case 0: return IsarCore.readId(reader); - case 18: - return IsarCore.readString(reader, 18) ?? ''; case 19: return IsarCore.readString(reader, 19) ?? ''; + case 20: + return IsarCore.readString(reader, 20) ?? ''; default: throw ArgumentError('Unknown property: $property'); } @@ -530,6 +552,7 @@ sealed class _DiaryUpdate { String? content, String? contentText, DateTime? time, + DateTime? lastModified, bool? show, double? mood, String? type, @@ -554,6 +577,7 @@ class _DiaryUpdateImpl implements _DiaryUpdate { Object? content = ignore, Object? contentText = ignore, Object? time = ignore, + Object? lastModified = ignore, Object? show = ignore, Object? mood = ignore, Object? type = ignore, @@ -571,13 +595,14 @@ class _DiaryUpdateImpl implements _DiaryUpdate { if (content != ignore) 4: content as String?, if (contentText != ignore) 5: contentText as String?, if (time != ignore) 6: time as DateTime?, - if (show != ignore) 7: show as bool?, - if (mood != ignore) 8: mood as double?, - if (type != ignore) 15: type as String?, - if (imageColor != ignore) 16: imageColor as int?, - if (aspect != ignore) 17: aspect as double?, - if (yM != ignore) 18: yM as String?, - if (yMd != ignore) 19: yMd as String?, + if (lastModified != ignore) 7: lastModified as DateTime?, + if (show != ignore) 8: show as bool?, + if (mood != ignore) 9: mood as double?, + if (type != ignore) 16: type as String?, + if (imageColor != ignore) 17: imageColor as int?, + if (aspect != ignore) 18: aspect as double?, + if (yM != ignore) 19: yM as String?, + if (yMd != ignore) 20: yMd as String?, }) > 0; } @@ -592,6 +617,7 @@ sealed class _DiaryUpdateAll { String? content, String? contentText, DateTime? time, + DateTime? lastModified, bool? show, double? mood, String? type, @@ -616,6 +642,7 @@ class _DiaryUpdateAllImpl implements _DiaryUpdateAll { Object? content = ignore, Object? contentText = ignore, Object? time = ignore, + Object? lastModified = ignore, Object? show = ignore, Object? mood = ignore, Object? type = ignore, @@ -631,13 +658,14 @@ class _DiaryUpdateAllImpl implements _DiaryUpdateAll { if (content != ignore) 4: content as String?, if (contentText != ignore) 5: contentText as String?, if (time != ignore) 6: time as DateTime?, - if (show != ignore) 7: show as bool?, - if (mood != ignore) 8: mood as double?, - if (type != ignore) 15: type as String?, - if (imageColor != ignore) 16: imageColor as int?, - if (aspect != ignore) 17: aspect as double?, - if (yM != ignore) 18: yM as String?, - if (yMd != ignore) 19: yMd as String?, + if (lastModified != ignore) 7: lastModified as DateTime?, + if (show != ignore) 8: show as bool?, + if (mood != ignore) 9: mood as double?, + if (type != ignore) 16: type as String?, + if (imageColor != ignore) 17: imageColor as int?, + if (aspect != ignore) 18: aspect as double?, + if (yM != ignore) 19: yM as String?, + if (yMd != ignore) 20: yMd as String?, }); } } @@ -656,6 +684,7 @@ sealed class _DiaryQueryUpdate { String? content, String? contentText, DateTime? time, + DateTime? lastModified, bool? show, double? mood, String? type, @@ -680,6 +709,7 @@ class _DiaryQueryUpdateImpl implements _DiaryQueryUpdate { Object? content = ignore, Object? contentText = ignore, Object? time = ignore, + Object? lastModified = ignore, Object? show = ignore, Object? mood = ignore, Object? type = ignore, @@ -695,13 +725,14 @@ class _DiaryQueryUpdateImpl implements _DiaryQueryUpdate { if (content != ignore) 4: content as String?, if (contentText != ignore) 5: contentText as String?, if (time != ignore) 6: time as DateTime?, - if (show != ignore) 7: show as bool?, - if (mood != ignore) 8: mood as double?, - if (type != ignore) 15: type as String?, - if (imageColor != ignore) 16: imageColor as int?, - if (aspect != ignore) 17: aspect as double?, - if (yM != ignore) 18: yM as String?, - if (yMd != ignore) 19: yMd as String?, + if (lastModified != ignore) 7: lastModified as DateTime?, + if (show != ignore) 8: show as bool?, + if (mood != ignore) 9: mood as double?, + if (type != ignore) 16: type as String?, + if (imageColor != ignore) 17: imageColor as int?, + if (aspect != ignore) 18: aspect as double?, + if (yM != ignore) 19: yM as String?, + if (yMd != ignore) 20: yMd as String?, }); } } @@ -726,6 +757,7 @@ class _DiaryQueryBuilderUpdateImpl implements _DiaryQueryUpdate { Object? content = ignore, Object? contentText = ignore, Object? time = ignore, + Object? lastModified = ignore, Object? show = ignore, Object? mood = ignore, Object? type = ignore, @@ -743,13 +775,14 @@ class _DiaryQueryBuilderUpdateImpl implements _DiaryQueryUpdate { if (content != ignore) 4: content as String?, if (contentText != ignore) 5: contentText as String?, if (time != ignore) 6: time as DateTime?, - if (show != ignore) 7: show as bool?, - if (mood != ignore) 8: mood as double?, - if (type != ignore) 15: type as String?, - if (imageColor != ignore) 16: imageColor as int?, - if (aspect != ignore) 17: aspect as double?, - if (yM != ignore) 18: yM as String?, - if (yMd != ignore) 19: yMd as String?, + if (lastModified != ignore) 7: lastModified as DateTime?, + if (show != ignore) 8: show as bool?, + if (mood != ignore) 9: mood as double?, + if (type != ignore) 16: type as String?, + if (imageColor != ignore) 17: imageColor as int?, + if (aspect != ignore) 18: aspect as double?, + if (yM != ignore) 19: yM as String?, + if (yMd != ignore) 20: yMd as String?, }); } finally { q.close(); @@ -1696,13 +1729,93 @@ extension DiaryQueryFilter on QueryBuilder { }); } + QueryBuilder lastModifiedEqualTo( + DateTime value, + ) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + EqualCondition( + property: 7, + value: value, + ), + ); + }); + } + + QueryBuilder lastModifiedGreaterThan( + DateTime value, + ) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + GreaterCondition( + property: 7, + value: value, + ), + ); + }); + } + + QueryBuilder lastModifiedGreaterThanOrEqualTo( + DateTime value, + ) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + GreaterOrEqualCondition( + property: 7, + value: value, + ), + ); + }); + } + + QueryBuilder lastModifiedLessThan( + DateTime value, + ) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + LessCondition( + property: 7, + value: value, + ), + ); + }); + } + + QueryBuilder lastModifiedLessThanOrEqualTo( + DateTime value, + ) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + LessOrEqualCondition( + property: 7, + value: value, + ), + ); + }); + } + + QueryBuilder lastModifiedBetween( + DateTime lower, + DateTime upper, + ) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + BetweenCondition( + property: 7, + lower: lower, + upper: upper, + ), + ); + }); + } + QueryBuilder showEqualTo( bool value, ) { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 7, + property: 8, value: value, ), ); @@ -1716,7 +1829,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 8, + property: 9, value: value, epsilon: epsilon, ), @@ -1731,7 +1844,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 8, + property: 9, value: value, epsilon: epsilon, ), @@ -1746,7 +1859,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 8, + property: 9, value: value, epsilon: epsilon, ), @@ -1761,7 +1874,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 8, + property: 9, value: value, epsilon: epsilon, ), @@ -1776,7 +1889,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 8, + property: 9, value: value, epsilon: epsilon, ), @@ -1792,7 +1905,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 8, + property: 9, lower: lower, upper: upper, epsilon: epsilon, @@ -1808,7 +1921,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 9, + property: 10, value: value, caseSensitive: caseSensitive, ), @@ -1823,7 +1936,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 9, + property: 10, value: value, caseSensitive: caseSensitive, ), @@ -1838,7 +1951,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 9, + property: 10, value: value, caseSensitive: caseSensitive, ), @@ -1853,7 +1966,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 9, + property: 10, value: value, caseSensitive: caseSensitive, ), @@ -1868,7 +1981,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 9, + property: 10, value: value, caseSensitive: caseSensitive, ), @@ -1884,7 +1997,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 9, + property: 10, lower: lower, upper: upper, caseSensitive: caseSensitive, @@ -1900,7 +2013,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( StartsWithCondition( - property: 9, + property: 10, value: value, caseSensitive: caseSensitive, ), @@ -1915,7 +2028,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EndsWithCondition( - property: 9, + property: 10, value: value, caseSensitive: caseSensitive, ), @@ -1927,7 +2040,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( ContainsCondition( - property: 9, + property: 10, value: value, caseSensitive: caseSensitive, ), @@ -1939,7 +2052,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( MatchesCondition( - property: 9, + property: 10, wildcard: pattern, caseSensitive: caseSensitive, ), @@ -1951,7 +2064,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const EqualCondition( - property: 9, + property: 10, value: '', ), ); @@ -1962,7 +2075,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const GreaterCondition( - property: 9, + property: 10, value: '', ), ); @@ -1976,7 +2089,7 @@ extension DiaryQueryFilter on QueryBuilder { QueryBuilder weatherIsNotEmpty() { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( - const GreaterOrEqualCondition(property: 9, value: null), + const GreaterOrEqualCondition(property: 10, value: null), ); }); } @@ -1988,7 +2101,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 10, + property: 11, value: value, caseSensitive: caseSensitive, ), @@ -2003,7 +2116,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 10, + property: 11, value: value, caseSensitive: caseSensitive, ), @@ -2018,7 +2131,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 10, + property: 11, value: value, caseSensitive: caseSensitive, ), @@ -2033,7 +2146,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 10, + property: 11, value: value, caseSensitive: caseSensitive, ), @@ -2048,7 +2161,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 10, + property: 11, value: value, caseSensitive: caseSensitive, ), @@ -2064,7 +2177,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 10, + property: 11, lower: lower, upper: upper, caseSensitive: caseSensitive, @@ -2080,7 +2193,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( StartsWithCondition( - property: 10, + property: 11, value: value, caseSensitive: caseSensitive, ), @@ -2095,7 +2208,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EndsWithCondition( - property: 10, + property: 11, value: value, caseSensitive: caseSensitive, ), @@ -2108,7 +2221,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( ContainsCondition( - property: 10, + property: 11, value: value, caseSensitive: caseSensitive, ), @@ -2121,7 +2234,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( MatchesCondition( - property: 10, + property: 11, wildcard: pattern, caseSensitive: caseSensitive, ), @@ -2133,7 +2246,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const EqualCondition( - property: 10, + property: 11, value: '', ), ); @@ -2144,7 +2257,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const GreaterCondition( - property: 10, + property: 11, value: '', ), ); @@ -2158,7 +2271,7 @@ extension DiaryQueryFilter on QueryBuilder { QueryBuilder imageNameIsNotEmpty() { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( - const GreaterOrEqualCondition(property: 10, value: null), + const GreaterOrEqualCondition(property: 11, value: null), ); }); } @@ -2170,7 +2283,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 11, + property: 12, value: value, caseSensitive: caseSensitive, ), @@ -2185,7 +2298,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 11, + property: 12, value: value, caseSensitive: caseSensitive, ), @@ -2200,7 +2313,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 11, + property: 12, value: value, caseSensitive: caseSensitive, ), @@ -2215,7 +2328,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 11, + property: 12, value: value, caseSensitive: caseSensitive, ), @@ -2230,7 +2343,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 11, + property: 12, value: value, caseSensitive: caseSensitive, ), @@ -2246,7 +2359,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 11, + property: 12, lower: lower, upper: upper, caseSensitive: caseSensitive, @@ -2262,7 +2375,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( StartsWithCondition( - property: 11, + property: 12, value: value, caseSensitive: caseSensitive, ), @@ -2277,7 +2390,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EndsWithCondition( - property: 11, + property: 12, value: value, caseSensitive: caseSensitive, ), @@ -2290,7 +2403,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( ContainsCondition( - property: 11, + property: 12, value: value, caseSensitive: caseSensitive, ), @@ -2303,7 +2416,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( MatchesCondition( - property: 11, + property: 12, wildcard: pattern, caseSensitive: caseSensitive, ), @@ -2315,7 +2428,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const EqualCondition( - property: 11, + property: 12, value: '', ), ); @@ -2326,7 +2439,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const GreaterCondition( - property: 11, + property: 12, value: '', ), ); @@ -2340,7 +2453,7 @@ extension DiaryQueryFilter on QueryBuilder { QueryBuilder audioNameIsNotEmpty() { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( - const GreaterOrEqualCondition(property: 11, value: null), + const GreaterOrEqualCondition(property: 12, value: null), ); }); } @@ -2352,7 +2465,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 12, + property: 13, value: value, caseSensitive: caseSensitive, ), @@ -2367,7 +2480,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 12, + property: 13, value: value, caseSensitive: caseSensitive, ), @@ -2382,7 +2495,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 12, + property: 13, value: value, caseSensitive: caseSensitive, ), @@ -2397,7 +2510,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 12, + property: 13, value: value, caseSensitive: caseSensitive, ), @@ -2412,7 +2525,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 12, + property: 13, value: value, caseSensitive: caseSensitive, ), @@ -2428,7 +2541,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 12, + property: 13, lower: lower, upper: upper, caseSensitive: caseSensitive, @@ -2444,7 +2557,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( StartsWithCondition( - property: 12, + property: 13, value: value, caseSensitive: caseSensitive, ), @@ -2459,7 +2572,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EndsWithCondition( - property: 12, + property: 13, value: value, caseSensitive: caseSensitive, ), @@ -2472,7 +2585,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( ContainsCondition( - property: 12, + property: 13, value: value, caseSensitive: caseSensitive, ), @@ -2485,7 +2598,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( MatchesCondition( - property: 12, + property: 13, wildcard: pattern, caseSensitive: caseSensitive, ), @@ -2497,7 +2610,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const EqualCondition( - property: 12, + property: 13, value: '', ), ); @@ -2508,7 +2621,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const GreaterCondition( - property: 12, + property: 13, value: '', ), ); @@ -2522,7 +2635,7 @@ extension DiaryQueryFilter on QueryBuilder { QueryBuilder videoNameIsNotEmpty() { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( - const GreaterOrEqualCondition(property: 12, value: null), + const GreaterOrEqualCondition(property: 13, value: null), ); }); } @@ -2534,7 +2647,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 13, + property: 14, value: value, caseSensitive: caseSensitive, ), @@ -2549,7 +2662,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 13, + property: 14, value: value, caseSensitive: caseSensitive, ), @@ -2564,7 +2677,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 13, + property: 14, value: value, caseSensitive: caseSensitive, ), @@ -2579,7 +2692,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 13, + property: 14, value: value, caseSensitive: caseSensitive, ), @@ -2594,7 +2707,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 13, + property: 14, value: value, caseSensitive: caseSensitive, ), @@ -2610,7 +2723,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 13, + property: 14, lower: lower, upper: upper, caseSensitive: caseSensitive, @@ -2626,7 +2739,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( StartsWithCondition( - property: 13, + property: 14, value: value, caseSensitive: caseSensitive, ), @@ -2641,7 +2754,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EndsWithCondition( - property: 13, + property: 14, value: value, caseSensitive: caseSensitive, ), @@ -2653,7 +2766,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( ContainsCondition( - property: 13, + property: 14, value: value, caseSensitive: caseSensitive, ), @@ -2665,7 +2778,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( MatchesCondition( - property: 13, + property: 14, wildcard: pattern, caseSensitive: caseSensitive, ), @@ -2677,7 +2790,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const EqualCondition( - property: 13, + property: 14, value: '', ), ); @@ -2688,7 +2801,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const GreaterCondition( - property: 13, + property: 14, value: '', ), ); @@ -2702,7 +2815,7 @@ extension DiaryQueryFilter on QueryBuilder { QueryBuilder tagsIsNotEmpty() { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( - const GreaterOrEqualCondition(property: 13, value: null), + const GreaterOrEqualCondition(property: 14, value: null), ); }); } @@ -2714,7 +2827,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 14, + property: 15, value: value, caseSensitive: caseSensitive, ), @@ -2729,7 +2842,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 14, + property: 15, value: value, caseSensitive: caseSensitive, ), @@ -2744,7 +2857,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 14, + property: 15, value: value, caseSensitive: caseSensitive, ), @@ -2759,7 +2872,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 14, + property: 15, value: value, caseSensitive: caseSensitive, ), @@ -2774,7 +2887,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 14, + property: 15, value: value, caseSensitive: caseSensitive, ), @@ -2790,7 +2903,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 14, + property: 15, lower: lower, upper: upper, caseSensitive: caseSensitive, @@ -2806,7 +2919,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( StartsWithCondition( - property: 14, + property: 15, value: value, caseSensitive: caseSensitive, ), @@ -2821,7 +2934,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EndsWithCondition( - property: 14, + property: 15, value: value, caseSensitive: caseSensitive, ), @@ -2833,7 +2946,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( ContainsCondition( - property: 14, + property: 15, value: value, caseSensitive: caseSensitive, ), @@ -2846,7 +2959,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( MatchesCondition( - property: 14, + property: 15, wildcard: pattern, caseSensitive: caseSensitive, ), @@ -2858,7 +2971,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const EqualCondition( - property: 14, + property: 15, value: '', ), ); @@ -2869,7 +2982,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const GreaterCondition( - property: 14, + property: 15, value: '', ), ); @@ -2883,20 +2996,20 @@ extension DiaryQueryFilter on QueryBuilder { QueryBuilder positionIsNotEmpty() { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( - const GreaterOrEqualCondition(property: 14, value: null), + const GreaterOrEqualCondition(property: 15, value: null), ); }); } QueryBuilder typeIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const IsNullCondition(property: 15)); + return query.addFilterCondition(const IsNullCondition(property: 16)); }); } QueryBuilder typeIsNotNull() { return QueryBuilder.apply(not(), (query) { - return query.addFilterCondition(const IsNullCondition(property: 15)); + return query.addFilterCondition(const IsNullCondition(property: 16)); }); } @@ -2907,7 +3020,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 15, + property: 16, value: value, caseSensitive: caseSensitive, ), @@ -2922,7 +3035,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 15, + property: 16, value: value, caseSensitive: caseSensitive, ), @@ -2937,7 +3050,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 15, + property: 16, value: value, caseSensitive: caseSensitive, ), @@ -2952,7 +3065,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 15, + property: 16, value: value, caseSensitive: caseSensitive, ), @@ -2967,7 +3080,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 15, + property: 16, value: value, caseSensitive: caseSensitive, ), @@ -2983,7 +3096,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 15, + property: 16, lower: lower, upper: upper, caseSensitive: caseSensitive, @@ -2999,7 +3112,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( StartsWithCondition( - property: 15, + property: 16, value: value, caseSensitive: caseSensitive, ), @@ -3014,7 +3127,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EndsWithCondition( - property: 15, + property: 16, value: value, caseSensitive: caseSensitive, ), @@ -3026,7 +3139,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( ContainsCondition( - property: 15, + property: 16, value: value, caseSensitive: caseSensitive, ), @@ -3038,7 +3151,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( MatchesCondition( - property: 15, + property: 16, wildcard: pattern, caseSensitive: caseSensitive, ), @@ -3050,7 +3163,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const EqualCondition( - property: 15, + property: 16, value: '', ), ); @@ -3061,7 +3174,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const GreaterCondition( - property: 15, + property: 16, value: '', ), ); @@ -3070,13 +3183,13 @@ extension DiaryQueryFilter on QueryBuilder { QueryBuilder imageColorIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const IsNullCondition(property: 16)); + return query.addFilterCondition(const IsNullCondition(property: 17)); }); } QueryBuilder imageColorIsNotNull() { return QueryBuilder.apply(not(), (query) { - return query.addFilterCondition(const IsNullCondition(property: 16)); + return query.addFilterCondition(const IsNullCondition(property: 17)); }); } @@ -3086,7 +3199,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 16, + property: 17, value: value, ), ); @@ -3099,7 +3212,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 16, + property: 17, value: value, ), ); @@ -3112,7 +3225,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 16, + property: 17, value: value, ), ); @@ -3125,7 +3238,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 16, + property: 17, value: value, ), ); @@ -3138,7 +3251,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 16, + property: 17, value: value, ), ); @@ -3152,7 +3265,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 16, + property: 17, lower: lower, upper: upper, ), @@ -3162,13 +3275,13 @@ extension DiaryQueryFilter on QueryBuilder { QueryBuilder aspectIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const IsNullCondition(property: 17)); + return query.addFilterCondition(const IsNullCondition(property: 18)); }); } QueryBuilder aspectIsNotNull() { return QueryBuilder.apply(not(), (query) { - return query.addFilterCondition(const IsNullCondition(property: 17)); + return query.addFilterCondition(const IsNullCondition(property: 18)); }); } @@ -3179,7 +3292,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 17, + property: 18, value: value, epsilon: epsilon, ), @@ -3194,7 +3307,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 17, + property: 18, value: value, epsilon: epsilon, ), @@ -3209,7 +3322,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 17, + property: 18, value: value, epsilon: epsilon, ), @@ -3224,7 +3337,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 17, + property: 18, value: value, epsilon: epsilon, ), @@ -3239,7 +3352,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 17, + property: 18, value: value, epsilon: epsilon, ), @@ -3255,7 +3368,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 17, + property: 18, lower: lower, upper: upper, epsilon: epsilon, @@ -3351,7 +3464,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3366,7 +3479,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3381,7 +3494,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3396,7 +3509,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3411,7 +3524,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3427,7 +3540,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 18, + property: 19, lower: lower, upper: upper, caseSensitive: caseSensitive, @@ -3443,7 +3556,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( StartsWithCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3458,7 +3571,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EndsWithCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3470,7 +3583,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( ContainsCondition( - property: 18, + property: 19, value: value, caseSensitive: caseSensitive, ), @@ -3482,7 +3595,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( MatchesCondition( - property: 18, + property: 19, wildcard: pattern, caseSensitive: caseSensitive, ), @@ -3494,7 +3607,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const EqualCondition( - property: 18, + property: 19, value: '', ), ); @@ -3505,7 +3618,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const GreaterCondition( - property: 18, + property: 19, value: '', ), ); @@ -3519,7 +3632,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EqualCondition( - property: 19, + property: 20, value: value, caseSensitive: caseSensitive, ), @@ -3534,7 +3647,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterCondition( - property: 19, + property: 20, value: value, caseSensitive: caseSensitive, ), @@ -3549,7 +3662,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( GreaterOrEqualCondition( - property: 19, + property: 20, value: value, caseSensitive: caseSensitive, ), @@ -3564,7 +3677,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessCondition( - property: 19, + property: 20, value: value, caseSensitive: caseSensitive, ), @@ -3579,7 +3692,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( LessOrEqualCondition( - property: 19, + property: 20, value: value, caseSensitive: caseSensitive, ), @@ -3595,7 +3708,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( BetweenCondition( - property: 19, + property: 20, lower: lower, upper: upper, caseSensitive: caseSensitive, @@ -3611,7 +3724,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( StartsWithCondition( - property: 19, + property: 20, value: value, caseSensitive: caseSensitive, ), @@ -3626,7 +3739,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( EndsWithCondition( - property: 19, + property: 20, value: value, caseSensitive: caseSensitive, ), @@ -3638,7 +3751,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( ContainsCondition( - property: 19, + property: 20, value: value, caseSensitive: caseSensitive, ), @@ -3650,7 +3763,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( MatchesCondition( - property: 19, + property: 20, wildcard: pattern, caseSensitive: caseSensitive, ), @@ -3662,7 +3775,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const EqualCondition( - property: 19, + property: 20, value: '', ), ); @@ -3673,7 +3786,7 @@ extension DiaryQueryFilter on QueryBuilder { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const GreaterCondition( - property: 19, + property: 20, value: '', ), ); @@ -3791,34 +3904,46 @@ extension DiaryQuerySortBy on QueryBuilder { }); } - QueryBuilder sortByShow() { + QueryBuilder sortByLastModified() { return QueryBuilder.apply(this, (query) { return query.addSortBy(7); }); } - QueryBuilder sortByShowDesc() { + QueryBuilder sortByLastModifiedDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(7, sort: Sort.desc); }); } - QueryBuilder sortByMood() { + QueryBuilder sortByShow() { return QueryBuilder.apply(this, (query) { return query.addSortBy(8); }); } - QueryBuilder sortByMoodDesc() { + QueryBuilder sortByShowDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(8, sort: Sort.desc); }); } + QueryBuilder sortByMood() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(9); + }); + } + + QueryBuilder sortByMoodDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(9, sort: Sort.desc); + }); + } + QueryBuilder sortByType({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addSortBy( - 15, + 16, caseSensitive: caseSensitive, ); }); @@ -3827,7 +3952,7 @@ extension DiaryQuerySortBy on QueryBuilder { QueryBuilder sortByTypeDesc({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addSortBy( - 15, + 16, sort: Sort.desc, caseSensitive: caseSensitive, ); @@ -3836,25 +3961,25 @@ extension DiaryQuerySortBy on QueryBuilder { QueryBuilder sortByImageColor() { return QueryBuilder.apply(this, (query) { - return query.addSortBy(16); + return query.addSortBy(17); }); } QueryBuilder sortByImageColorDesc() { return QueryBuilder.apply(this, (query) { - return query.addSortBy(16, sort: Sort.desc); + return query.addSortBy(17, sort: Sort.desc); }); } QueryBuilder sortByAspect() { return QueryBuilder.apply(this, (query) { - return query.addSortBy(17); + return query.addSortBy(18); }); } QueryBuilder sortByAspectDesc() { return QueryBuilder.apply(this, (query) { - return query.addSortBy(17, sort: Sort.desc); + return query.addSortBy(18, sort: Sort.desc); }); } @@ -3873,7 +3998,7 @@ extension DiaryQuerySortBy on QueryBuilder { QueryBuilder sortByYM({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addSortBy( - 18, + 19, caseSensitive: caseSensitive, ); }); @@ -3882,7 +4007,7 @@ extension DiaryQuerySortBy on QueryBuilder { QueryBuilder sortByYMDesc({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addSortBy( - 18, + 19, sort: Sort.desc, caseSensitive: caseSensitive, ); @@ -3892,7 +4017,7 @@ extension DiaryQuerySortBy on QueryBuilder { QueryBuilder sortByYMd({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addSortBy( - 19, + 20, caseSensitive: caseSensitive, ); }); @@ -3901,7 +4026,7 @@ extension DiaryQuerySortBy on QueryBuilder { QueryBuilder sortByYMdDesc({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addSortBy( - 19, + 20, sort: Sort.desc, caseSensitive: caseSensitive, ); @@ -3982,63 +4107,75 @@ extension DiaryQuerySortThenBy on QueryBuilder { }); } - QueryBuilder thenByShow() { + QueryBuilder thenByLastModified() { return QueryBuilder.apply(this, (query) { return query.addSortBy(7); }); } - QueryBuilder thenByShowDesc() { + QueryBuilder thenByLastModifiedDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(7, sort: Sort.desc); }); } - QueryBuilder thenByMood() { + QueryBuilder thenByShow() { return QueryBuilder.apply(this, (query) { return query.addSortBy(8); }); } - QueryBuilder thenByMoodDesc() { + QueryBuilder thenByShowDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(8, sort: Sort.desc); }); } + QueryBuilder thenByMood() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(9); + }); + } + + QueryBuilder thenByMoodDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(9, sort: Sort.desc); + }); + } + QueryBuilder thenByType({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addSortBy(15, caseSensitive: caseSensitive); + return query.addSortBy(16, caseSensitive: caseSensitive); }); } QueryBuilder thenByTypeDesc({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addSortBy(15, sort: Sort.desc, caseSensitive: caseSensitive); + return query.addSortBy(16, sort: Sort.desc, caseSensitive: caseSensitive); }); } QueryBuilder thenByImageColor() { return QueryBuilder.apply(this, (query) { - return query.addSortBy(16); + return query.addSortBy(17); }); } QueryBuilder thenByImageColorDesc() { return QueryBuilder.apply(this, (query) { - return query.addSortBy(16, sort: Sort.desc); + return query.addSortBy(17, sort: Sort.desc); }); } QueryBuilder thenByAspect() { return QueryBuilder.apply(this, (query) { - return query.addSortBy(17); + return query.addSortBy(18); }); } QueryBuilder thenByAspectDesc() { return QueryBuilder.apply(this, (query) { - return query.addSortBy(17, sort: Sort.desc); + return query.addSortBy(18, sort: Sort.desc); }); } @@ -4056,25 +4193,25 @@ extension DiaryQuerySortThenBy on QueryBuilder { QueryBuilder thenByYM({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addSortBy(18, caseSensitive: caseSensitive); + return query.addSortBy(19, caseSensitive: caseSensitive); }); } QueryBuilder thenByYMDesc({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addSortBy(18, sort: Sort.desc, caseSensitive: caseSensitive); + return query.addSortBy(19, sort: Sort.desc, caseSensitive: caseSensitive); }); } QueryBuilder thenByYMd({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addSortBy(19, caseSensitive: caseSensitive); + return query.addSortBy(20, caseSensitive: caseSensitive); }); } QueryBuilder thenByYMdDesc({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addSortBy(19, sort: Sort.desc, caseSensitive: caseSensitive); + return query.addSortBy(20, sort: Sort.desc, caseSensitive: caseSensitive); }); } } @@ -4116,81 +4253,87 @@ extension DiaryQueryWhereDistinct on QueryBuilder { }); } - QueryBuilder distinctByShow() { + QueryBuilder distinctByLastModified() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(7); }); } - QueryBuilder distinctByMood() { + QueryBuilder distinctByShow() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(8); }); } - QueryBuilder distinctByWeather() { + QueryBuilder distinctByMood() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(9); }); } - QueryBuilder distinctByImageName() { + QueryBuilder distinctByWeather() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(10); }); } - QueryBuilder distinctByAudioName() { + QueryBuilder distinctByImageName() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(11); }); } - QueryBuilder distinctByVideoName() { + QueryBuilder distinctByAudioName() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(12); }); } - QueryBuilder distinctByTags() { + QueryBuilder distinctByVideoName() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(13); }); } - QueryBuilder distinctByPosition() { + QueryBuilder distinctByTags() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(14); }); } + QueryBuilder distinctByPosition() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(15); + }); + } + QueryBuilder distinctByType({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(15, caseSensitive: caseSensitive); + return query.addDistinctBy(16, caseSensitive: caseSensitive); }); } QueryBuilder distinctByImageColor() { return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(16); + return query.addDistinctBy(17); }); } QueryBuilder distinctByAspect() { return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(17); + return query.addDistinctBy(18); }); } QueryBuilder distinctByYM({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(18, caseSensitive: caseSensitive); + return query.addDistinctBy(19, caseSensitive: caseSensitive); }); } QueryBuilder distinctByYMd({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addDistinctBy(19, caseSensitive: caseSensitive); + return query.addDistinctBy(20, caseSensitive: caseSensitive); }); } } @@ -4232,72 +4375,78 @@ extension DiaryQueryProperty1 on QueryBuilder { }); } - QueryBuilder showProperty() { + QueryBuilder lastModifiedProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(7); }); } - QueryBuilder moodProperty() { + QueryBuilder showProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(8); }); } - QueryBuilder, QAfterProperty> weatherProperty() { + QueryBuilder moodProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(9); }); } - QueryBuilder, QAfterProperty> imageNameProperty() { + QueryBuilder, QAfterProperty> weatherProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(10); }); } - QueryBuilder, QAfterProperty> audioNameProperty() { + QueryBuilder, QAfterProperty> imageNameProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(11); }); } - QueryBuilder, QAfterProperty> videoNameProperty() { + QueryBuilder, QAfterProperty> audioNameProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(12); }); } - QueryBuilder, QAfterProperty> tagsProperty() { + QueryBuilder, QAfterProperty> videoNameProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(13); }); } - QueryBuilder, QAfterProperty> positionProperty() { + QueryBuilder, QAfterProperty> tagsProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(14); }); } - QueryBuilder typeProperty() { + QueryBuilder, QAfterProperty> positionProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(15); }); } - QueryBuilder imageColorProperty() { + QueryBuilder typeProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(16); }); } - QueryBuilder aspectProperty() { + QueryBuilder imageColorProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(17); }); } + QueryBuilder aspectProperty() { + return QueryBuilder.apply(this, (query) { + return query.addProperty(18); + }); + } + QueryBuilder isarIdProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(0); @@ -4306,13 +4455,13 @@ extension DiaryQueryProperty1 on QueryBuilder { QueryBuilder yMProperty() { return QueryBuilder.apply(this, (query) { - return query.addProperty(18); + return query.addProperty(19); }); } QueryBuilder yMdProperty() { return QueryBuilder.apply(this, (query) { - return query.addProperty(19); + return query.addProperty(20); }); } } @@ -4354,72 +4503,78 @@ extension DiaryQueryProperty2 on QueryBuilder { }); } - QueryBuilder showProperty() { + QueryBuilder lastModifiedProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(7); }); } - QueryBuilder moodProperty() { + QueryBuilder showProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(8); }); } - QueryBuilder), QAfterProperty> weatherProperty() { + QueryBuilder moodProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(9); }); } - QueryBuilder), QAfterProperty> imageNameProperty() { + QueryBuilder), QAfterProperty> weatherProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(10); }); } - QueryBuilder), QAfterProperty> audioNameProperty() { + QueryBuilder), QAfterProperty> imageNameProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(11); }); } - QueryBuilder), QAfterProperty> videoNameProperty() { + QueryBuilder), QAfterProperty> audioNameProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(12); }); } - QueryBuilder), QAfterProperty> tagsProperty() { + QueryBuilder), QAfterProperty> videoNameProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(13); }); } - QueryBuilder), QAfterProperty> positionProperty() { + QueryBuilder), QAfterProperty> tagsProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(14); }); } - QueryBuilder typeProperty() { + QueryBuilder), QAfterProperty> positionProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(15); }); } - QueryBuilder imageColorProperty() { + QueryBuilder typeProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(16); }); } - QueryBuilder aspectProperty() { + QueryBuilder imageColorProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(17); }); } + QueryBuilder aspectProperty() { + return QueryBuilder.apply(this, (query) { + return query.addProperty(18); + }); + } + QueryBuilder isarIdProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(0); @@ -4428,13 +4583,13 @@ extension DiaryQueryProperty2 on QueryBuilder { QueryBuilder yMProperty() { return QueryBuilder.apply(this, (query) { - return query.addProperty(18); + return query.addProperty(19); }); } QueryBuilder yMdProperty() { return QueryBuilder.apply(this, (query) { - return query.addProperty(19); + return query.addProperty(20); }); } } @@ -4476,72 +4631,78 @@ extension DiaryQueryProperty3 on QueryBuilder showProperty() { + QueryBuilder lastModifiedProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(7); }); } - QueryBuilder moodProperty() { + QueryBuilder showProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(8); }); } - QueryBuilder), QOperations> weatherProperty() { + QueryBuilder moodProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(9); }); } - QueryBuilder), QOperations> imageNameProperty() { + QueryBuilder), QOperations> weatherProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(10); }); } - QueryBuilder), QOperations> audioNameProperty() { + QueryBuilder), QOperations> imageNameProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(11); }); } - QueryBuilder), QOperations> videoNameProperty() { + QueryBuilder), QOperations> audioNameProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(12); }); } - QueryBuilder), QOperations> tagsProperty() { + QueryBuilder), QOperations> videoNameProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(13); }); } - QueryBuilder), QOperations> positionProperty() { + QueryBuilder), QOperations> tagsProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(14); }); } - QueryBuilder typeProperty() { + QueryBuilder), QOperations> positionProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(15); }); } - QueryBuilder imageColorProperty() { + QueryBuilder typeProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(16); }); } - QueryBuilder aspectProperty() { + QueryBuilder imageColorProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(17); }); } + QueryBuilder aspectProperty() { + return QueryBuilder.apply(this, (query) { + return query.addProperty(18); + }); + } + QueryBuilder isarIdProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(0); @@ -4550,13 +4711,13 @@ extension DiaryQueryProperty3 on QueryBuilder yMProperty() { return QueryBuilder.apply(this, (query) { - return query.addProperty(18); + return query.addProperty(19); }); } QueryBuilder yMdProperty() { return QueryBuilder.apply(this, (query) { - return query.addProperty(19); + return query.addProperty(20); }); } } diff --git a/lib/common/values/webdav.dart b/lib/common/values/webdav.dart new file mode 100644 index 0000000..11e5f29 --- /dev/null +++ b/lib/common/values/webdav.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; + +class WebDavOptions { + static const String basePath = '/Moodiary'; + static const String imagePath = '/Moodiary/Asset/Image'; + static const String audioPath = '/Moodiary/Asset/Audio'; + static const String videoPath = '/Moodiary/Asset/Video'; + + static const String diaryPath = '/Moodiary/Diary'; + static const String categoryPath = '/Moodiary/Category'; + + //增量同步标记文件路径 + static const String syncFlagPath = '/Moodiary/sync.json'; + + // 连通性颜色标记 + static const Color connectivityColor = Color(0xFF4CAF50); + static const Color unConnectivityColor = Color(0xFFF44336); + static const Color connectingColor = Color(0xFFFFC107); +} + +enum WebDavConnectivityStatus { + connected, + unconnected, + connecting, +} diff --git a/lib/components/diary_tab_view/diary_tab_view_logic.dart b/lib/components/diary_tab_view/diary_tab_view_logic.dart index 3de2f23..679a278 100644 --- a/lib/components/diary_tab_view/diary_tab_view_logic.dart +++ b/lib/components/diary_tab_view/diary_tab_view_logic.dart @@ -15,11 +15,11 @@ class DiaryTabViewLogic extends GetxController { @override void onReady() async { - await getDiary(); + await _getDiary(); super.onReady(); } - Future getDiary() async { + Future _getDiary() async { state.isFetching = true; update(['PlaceHolder']); state.diaryList = await Utils().isarUtil.getDiaryByCategory(state.categoryId, 0, state.initLen); @@ -28,6 +28,11 @@ class DiaryTabViewLogic extends GetxController { update(['TabView']); } + Future updateDiary() async { + state.diaryList = await Utils().isarUtil.getDiaryByCategory(state.categoryId, 0, state.initLen); + update(['TabView']); + } + Future paginationDiary() async { state.diaryList += await Utils().isarUtil.getDiaryByCategory(state.categoryId, state.diaryList.length, state.pageLen); diff --git a/lib/components/local_send/local_send_view.dart b/lib/components/local_send/local_send_view.dart index 4d3dfa5..c7af1e4 100644 --- a/lib/components/local_send/local_send_view.dart +++ b/lib/components/local_send/local_send_view.dart @@ -111,10 +111,11 @@ class LocalSendComponent extends StatelessWidget { ); } - return GetBuilder( - assignId: true, - builder: (_) { - return Padding( + return ExpansionTile( + leading: const Icon(Icons.wifi_tethering_rounded), + title: const Text('局域网传输'), + children: [ + Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, @@ -142,8 +143,8 @@ class LocalSendComponent extends StatelessWidget { }), ], ), - ); - }, + ) + ], ); } } diff --git a/lib/components/web_dav/web_dav_logic.dart b/lib/components/web_dav/web_dav_logic.dart new file mode 100644 index 0000000..efb8e12 --- /dev/null +++ b/lib/components/web_dav/web_dav_logic.dart @@ -0,0 +1,94 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:mood_diary/utils/webdav_util.dart'; + +import '../../common/values/webdav.dart'; +import '../../utils/utils.dart'; +import 'web_dav_state.dart'; + +class WebDavLogic extends GetxController { + final WebDavState state = WebDavState(); + + WebDavUtil get webDav => Utils().webDavUtil; + + late TextEditingController webDavUrlController = TextEditingController(text: state.currentOptions[0]); + late FocusNode webDavUrlFocusNode = FocusNode(); + late TextEditingController usernameController = TextEditingController(text: state.currentOptions[1]); + late FocusNode usernameFocusNode = FocusNode(); + late TextEditingController passwordController = TextEditingController(text: state.currentOptions[2]); + late FocusNode passwordFocusNode = FocusNode(); + + @override + void onReady() async { + if (state.hasOption.value) { + await checkConnectivity(); + } + super.onReady(); + } + + @override + void onClose() { + webDavUrlFocusNode.dispose(); + usernameFocusNode.dispose(); + passwordFocusNode.dispose(); + webDavUrlController.dispose(); + usernameController.dispose(); + passwordController.dispose(); + super.onClose(); + } + + Future test() async { + var diary = await Utils().isarUtil.getAllDiaries(); + await webDav.syncDiary(diary); + } + + Future checkConnectivity() async { + state.connectivityStatus.value = WebDavConnectivityStatus.connecting; + var res = await webDav.checkConnectivity(); + state.connectivityStatus.value = res ? WebDavConnectivityStatus.connected : WebDavConnectivityStatus.unconnected; + } + + void unFocus() { + if (webDavUrlFocusNode.hasFocus) webDavUrlFocusNode.unfocus(); + if (usernameFocusNode.hasFocus) usernameFocusNode.unfocus(); + if (passwordFocusNode.hasFocus) passwordFocusNode.unfocus(); + } + + void submitForm() async { + if (state.formKey.currentState?.validate() ?? false) { + unFocus(); + state.formKey.currentState?.save(); + + await webDav.updateWebDav( + baseUrl: webDavUrlController.text, username: usernameController.text, password: passwordController.text); + state.hasOption.value = true; + await checkConnectivity(); + Utils().noticeUtil.showToast('保存成功'); + } + } + + DateTime? _firstClickTime; // 用于记录第一次点击时间 + + void removeWebDavOption() { + final currentTime = DateTime.now(); + + if (_firstClickTime == null) { + _firstClickTime = currentTime; + Utils().noticeUtil.showToast('请再次点击确认删除'); + return; + } + if (currentTime.difference(_firstClickTime!).inSeconds <= 2) { + _firstClickTime = null; // 重置点击时间 + webDavUrlController.text = ''; + usernameController.text = ''; + passwordController.text = ''; + state.hasOption.value = false; + webDav.removeWebDavOption(); + Utils().noticeUtil.showToast('删除成功'); + } else { + // 超过3秒,重置点击时间并提示 + _firstClickTime = currentTime; + Utils().noticeUtil.showToast('请再次点击确认删除'); + } + } +} diff --git a/lib/components/web_dav/web_dav_state.dart b/lib/components/web_dav/web_dav_state.dart new file mode 100644 index 0000000..8e5429d --- /dev/null +++ b/lib/components/web_dav/web_dav_state.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:mood_diary/common/values/webdav.dart'; +import 'package:mood_diary/utils/utils.dart'; + +class WebDavState { + final formKey = GlobalKey(); + + RxBool hasOption = Utils().webDavUtil.hasOption.obs; + List currentOptions = Utils().webDavUtil.options; + + Rx connectivityStatus = WebDavConnectivityStatus.connecting.obs; + + WebDavState(); +} diff --git a/lib/components/web_dav/web_dav_view.dart b/lib/components/web_dav/web_dav_view.dart new file mode 100644 index 0000000..52fd753 --- /dev/null +++ b/lib/components/web_dav/web_dav_view.dart @@ -0,0 +1,153 @@ +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:get/get.dart'; +import 'package:mood_diary/common/values/border.dart'; +import 'package:mood_diary/common/values/webdav.dart'; + +import 'web_dav_logic.dart'; +import 'web_dav_state.dart'; + +class WebDavComponent extends StatelessWidget { + const WebDavComponent({super.key}); + + @override + Widget build(BuildContext context) { + final WebDavLogic logic = Get.put(WebDavLogic()); + final WebDavState state = Bind.find().state; + final colorScheme = Theme.of(context).colorScheme; + return ExpansionTile( + leading: const Icon(Icons.backup_rounded), + title: const Text('WebDav'), + subtitle: Obx(() { + return state.hasOption.value + ? Row( + children: [ + const Text('已配置 连通性 '), + Icon( + Icons.circle, + color: switch (state.connectivityStatus.value) { + WebDavConnectivityStatus.connected => WebDavOptions.connectivityColor, + WebDavConnectivityStatus.unconnected => WebDavOptions.unConnectivityColor, + WebDavConnectivityStatus.connecting => WebDavOptions.connectingColor, + }, + size: 16, + ), + ], + ) + : const Text('未配置'); + }), + children: [ + Padding( + padding: const EdgeInsets.all(16.0), + child: Form( + key: state.formKey, + child: Column( + spacing: 16.0, + children: [ + TextFormField( + decoration: InputDecoration( + labelText: '服务器地址', + border: const OutlineInputBorder(borderRadius: AppBorderRadius.smallBorderRadius), + prefixIcon: const Padding( + padding: EdgeInsets.all(16.0), + child: FaIcon( + FontAwesomeIcons.globe, + size: 16, + ), + ), + fillColor: colorScheme.surfaceContainer, + filled: true, + ), + focusNode: logic.webDavUrlFocusNode, + controller: logic.webDavUrlController, + textInputAction: TextInputAction.next, + keyboardType: TextInputType.url, + validator: (value) { + if (value == null || value.isEmpty) { + return '请输入服务器地址'; + } + return null; + }, + onSaved: (value) { + logic.webDavUrlController.text = value ?? ''; + }, + ), + TextFormField( + decoration: InputDecoration( + labelText: '用户名', + border: const OutlineInputBorder(borderRadius: AppBorderRadius.smallBorderRadius), + prefixIcon: const Padding( + padding: EdgeInsets.all(16.0), + child: FaIcon( + FontAwesomeIcons.solidUser, + size: 16, + )), + fillColor: colorScheme.surfaceContainer, + filled: true, + ), + textInputAction: TextInputAction.next, + focusNode: logic.usernameFocusNode, + controller: logic.usernameController, + validator: (value) { + if (value == null || value.isEmpty) { + return '请输入用户名'; + } + return null; + }, + onSaved: (value) { + logic.usernameController.text = value ?? ''; + }, + ), + TextFormField( + decoration: InputDecoration( + labelText: '密码', + border: const OutlineInputBorder(borderRadius: AppBorderRadius.smallBorderRadius), + prefixIcon: const Padding( + padding: EdgeInsets.all(16.0), + child: FaIcon( + FontAwesomeIcons.lock, + size: 16, + ), + ), + fillColor: colorScheme.surfaceContainer, + filled: true, + ), + textInputAction: TextInputAction.done, + focusNode: logic.passwordFocusNode, + controller: logic.passwordController, + obscureText: true, + validator: (value) { + if (value == null || value.isEmpty) { + return '请输入密码'; + } + return null; + }, + onSaved: (value) { + logic.passwordController.text = value ?? ''; + }, + ), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + TextButton( + onPressed: logic.removeWebDavOption, + child: Text( + '删除配置', + style: TextStyle(color: colorScheme.error), + )), + TextButton( + onPressed: logic.submitForm, + child: Obx(() { + return Text(!state.hasOption.value ? '保存配置' : '更新配置'); + }), + ), + ], + ), + ], + ), + ), + ) + ], + ); + } +} diff --git a/lib/components/web_dav_dashboard/web_dav_dashboard_logic.dart b/lib/components/web_dav_dashboard/web_dav_dashboard_logic.dart new file mode 100644 index 0000000..f3b6445 --- /dev/null +++ b/lib/components/web_dav_dashboard/web_dav_dashboard_logic.dart @@ -0,0 +1,127 @@ +import 'package:get/get.dart'; +import 'package:mood_diary/pages/home/diary/diary_logic.dart'; +import 'package:mood_diary/router/app_routes.dart'; +import 'package:mood_diary/utils/utils.dart'; + +import '../../common/values/webdav.dart'; +import 'web_dav_dashboard_state.dart'; + +class WebDavDashboardLogic extends GetxController { + final WebDavDashboardState state = WebDavDashboardState(); + + @override + void onReady() async { + await updateWebdav(isInit: true); + super.onReady(); + } + + @override + void onClose() { + // TODO: implement onClose + super.onClose(); + } + + Future updateWebdav({required bool isInit}) async { + state.isFetching = true; + if (!isInit) update(); + await checkConnectivity(); + if (state.connectivityStatus.value == WebDavConnectivityStatus.connected) { + await fetchingWebDavSyncFlag(); + if (isInit) await fetchDiaryList(); + } + state.isFetching = false; + update(); + } + + Future fetchDiaryList() async { + // 获取所有日记 + state.diaryList = await Utils().isarUtil.getAllDiaries(); + state.toUploadDiaries.clear(); + state.toDownloadIds.clear(); + // 本地日记 Map,id 对应最后修改时间 + final Map localDiaryMap = {for (var diary in state.diaryList) diary.id: diary.lastModified}; + // 查找待上传的日记 + _findToUploadDiaries(localDiaryMap); + // 查找待下载的日记 + _findToDownloadIds(localDiaryMap); + } + + void _findToUploadDiaries(Map localDiaryMap) { + for (var diary in state.diaryList) { + final remoteModifiedTime = state.webdavSyncMap[diary.id]; + if (remoteModifiedTime == null || DateTime.parse(remoteModifiedTime).isBefore(diary.lastModified)) { + state.toUploadDiaries.add(diary); + } + } + state.toUploadDiariesCount.value = state.toUploadDiaries.length.toString(); + } + + void _findToDownloadIds(Map localDiaryMap) { + for (var id in state.webdavSyncMap.keys) { + if (!localDiaryMap.containsKey(id)) { + state.toDownloadIds.add(id); + } + } + state.toDownloadIdsCount.value = state.toDownloadIds.length.toString(); + } + + Future checkConnectivity() async { + state.connectivityStatus.value = WebDavConnectivityStatus.connecting; + var res = await Utils().webDavUtil.checkConnectivity(); + state.connectivityStatus.value = res ? WebDavConnectivityStatus.connected : WebDavConnectivityStatus.unconnected; + } + + Future fetchingWebDavSyncFlag() async { + state.webdavSyncMap = await Utils().webDavUtil.fetchServerSyncData(); + state.webDavDiaryCount.value = state.webdavSyncMap.length.toString(); + } + + void toWebDavPage() async { + await Get.toNamed(AppRoutes.backupSyncPage); + await updateWebdav(isInit: false); + } + + // 同步日记 + + Future syncDiary() async { + checkIsUploading(); + checkIsDownloading(); + await Utils().webDavUtil.syncDiary(state.diaryList, onUpload: () { + state.toUploadDiariesCount.value = (int.parse(state.toUploadDiariesCount.value) - 1).toString(); + checkIsUploading(); + }, onDownload: () async { + state.toDownloadIdsCount.value = (int.parse(state.toDownloadIdsCount.value) - 1).toString(); + checkIsDownloading(); + await Bind.find().updateCategory(); + await Bind.find().updateDiary(null); + }, onComplete: () { + Get.backLegacy(); + Utils().noticeUtil.showToast('同步完成'); + }); + } + + void checkIsUploading() { + state.isUploading.value = int.parse(state.toUploadDiariesCount.value) > 0; + } + + void checkIsDownloading() { + state.isDownloading.value = int.parse(state.toDownloadIdsCount.value) > 0; + } + +// Future uploadDiary() async { +// state.isUploading.value = true; +// await Utils().webDavUtil.syncDiary(state.toUploadDiaries); +// state.isUploading.value = false; +// await fetchingWebDavSyncFlag(); +// await fetchDiaryList(); +// } +// +// // 下载日记 +// Future downloadDiary() async { +// state.isDownloading.value = true; +// await Utils().webDavUtil.syncDiary(); +// state.isDownloading.value = false; +// await fetchingWebDavSyncFlag(); +// await fetchDiaryList(); +// } +} diff --git a/lib/components/web_dav_dashboard/web_dav_dashboard_state.dart b/lib/components/web_dav_dashboard/web_dav_dashboard_state.dart new file mode 100644 index 0000000..1b842df --- /dev/null +++ b/lib/components/web_dav_dashboard/web_dav_dashboard_state.dart @@ -0,0 +1,34 @@ +import 'package:get/get.dart'; +import 'package:mood_diary/common/models/isar/diary.dart'; + +import '../../common/values/webdav.dart'; + +class WebDavDashboardState { + Rx connectivityStatus = WebDavConnectivityStatus.connecting.obs; + + RxString webDavDiaryCount = '...'.obs; + + Map webdavSyncMap = {}; + + // 所有的日记 + List diaryList = []; + + // 待上传的日记,有两种情况,一种是本地有,服务器没有,一种是本地有,服务器有,但是本地的更新时间比服务器的新 + List toUploadDiaries = []; + + RxString toUploadDiariesCount = '...'.obs; + + // 待下载的日记id,只有服务器有,本地没有的情况 + List toDownloadIds = []; + + RxString toDownloadIdsCount = '...'.obs; + + bool isFetching = true; + + RxBool isUploading = false.obs; + RxBool isDownloading = false.obs; + + WebDavDashboardState() { + ///Initialize variables + } +} diff --git a/lib/components/web_dav_dashboard/web_dav_dashboard_view.dart b/lib/components/web_dav_dashboard/web_dav_dashboard_view.dart new file mode 100644 index 0000000..e7b7fec --- /dev/null +++ b/lib/components/web_dav_dashboard/web_dav_dashboard_view.dart @@ -0,0 +1,187 @@ +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:get/get.dart'; + +import '../../common/values/webdav.dart'; +import 'web_dav_dashboard_logic.dart'; +import 'web_dav_dashboard_state.dart'; + +class WebDavDashboardComponent extends StatelessWidget { + const WebDavDashboardComponent({super.key}); + + Widget _buildError() { + return const Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + spacing: 8.0, + children: [ + FaIcon( + FontAwesomeIcons.solidCircleXmark, + size: 56, + ), + Text('暂未配置或连接失败') + ], + ), + ); + } + + // 当前任务队列 + Widget _buildTaskQueue({required RxBool isUploading, required RxBool isDownloading}) { + return ListTile( + title: const Text('当前任务队列'), + subtitle: Obx(() { + String status; + if (isUploading.value && isDownloading.value) { + status = '上传、下载中'; + } else if (isUploading.value) { + status = '上传中'; + } else if (isDownloading.value) { + status = '下载中'; + } else { + status = '空闲'; + } + return Text(status); + }), + trailing: Padding( + padding: const EdgeInsets.symmetric(horizontal: 12.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Obx(() { + return isUploading.value + ? const Row( + mainAxisSize: MainAxisSize.min, + spacing: 8.0, + children: [ + FaIcon( + FontAwesomeIcons.arrowUp, + size: 12, + ), + Text('上传'), + ], + ) + : const SizedBox.shrink(); + }), + Obx(() { + return isDownloading.value + ? const Row( + mainAxisSize: MainAxisSize.min, + spacing: 8.0, + children: [ + FaIcon( + FontAwesomeIcons.arrowDown, + size: 12, + ), + Text('下载'), + ], + ) + : const SizedBox.shrink(); + }), + ], + ), + ), + ); + } + + Widget _buildCloudCount({required RxString cloudCount, required Function() onTap}) { + return ListTile( + title: const Text('云端日记数量'), + subtitle: Obx(() { + return Text(cloudCount.value); + }), + trailing: FilledButton(onPressed: onTap, child: const FaIcon(FontAwesomeIcons.arrowsRotate)), + ); + } + + // 本地日记数量,包括待上传和待下载 + Widget _buildLocalDiaryCount( + {required RxString toUploadCount, required RxString toDownloadCount, required Function() onTap}) { + return ListTile( + title: const Text('本地日记数量'), + subtitle: Row( + spacing: 8.0, + children: [ + Obx(() { + return Text('待上传 ${toUploadCount.value}'); + }), + Obx(() { + return Text('待下载 ${toDownloadCount.value}'); + }), + ], + ), + trailing: FilledButton(onPressed: onTap, child: const FaIcon(FontAwesomeIcons.arrowRightArrowLeft)), + ); + } + + // 本地待上传的日记数量 + Widget _buildLocalSyncCount({required RxString localSyncCount, required Function() onTap}) { + return ListTile( + title: const Text('待上传日记数量'), + subtitle: Obx(() { + return Text(localSyncCount.value); + }), + trailing: FilledButton(onPressed: onTap, child: const FaIcon(FontAwesomeIcons.upload))); + } + + // 本地待下载的日记数量 + Widget _buildLocalUnSyncCount({required RxString localUnSyncCount, required Function() onTap}) { + return ListTile( + title: const Text('待下载日记数量'), + subtitle: Obx(() { + return Text(localUnSyncCount.value); + }), + trailing: FilledButton(onPressed: onTap, child: const FaIcon(FontAwesomeIcons.download))); + } + + Widget _buildToWebDavSetting({required Rx state, required Function() onTap}) { + return ListTile( + title: Row( + children: [ + const Text('服务连通性 '), + Obx(() { + return Icon( + Icons.circle, + color: switch (state.value) { + WebDavConnectivityStatus.connected => WebDavOptions.connectivityColor, + WebDavConnectivityStatus.unconnected => WebDavOptions.unConnectivityColor, + WebDavConnectivityStatus.connecting => WebDavOptions.connectingColor, + }, + size: 16, + ); + }) + ], + ), + trailing: TextButton(onPressed: onTap, child: const Text('WebDav 设置')), + ); + } + + @override + Widget build(BuildContext context) { + final WebDavDashboardLogic logic = Get.put(WebDavDashboardLogic()); + final WebDavDashboardState state = Bind.find().state; + + return GetBuilder( + assignId: true, + builder: (_) { + return Stack( + children: [ + ListView( + children: [ + _buildToWebDavSetting(onTap: logic.toWebDavPage, state: state.connectivityStatus), + if (state.connectivityStatus.value == WebDavConnectivityStatus.connected) ...[ + _buildTaskQueue(isUploading: state.isUploading, isDownloading: state.isDownloading), + _buildCloudCount(cloudCount: state.webDavDiaryCount, onTap: logic.fetchingWebDavSyncFlag), + _buildLocalDiaryCount( + toUploadCount: state.toUploadDiariesCount, + toDownloadCount: state.toDownloadIdsCount, + onTap: logic.syncDiary) + ], + ], + ), + if (state.isFetching) const Center(child: CircularProgressIndicator()), + if (state.connectivityStatus.value == WebDavConnectivityStatus.unconnected) _buildError(), + ], + ); + }); + } +} diff --git a/lib/main.dart b/lib/main.dart index 359b0e1..a79a4da 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -22,6 +22,7 @@ import 'components/window_buttons/window_buttons.dart'; Future initSystem() async { WidgetsFlutterBinding.ensureInitialized(); + // GestureBinding.instance.resamplingEnabled = true; //获取系统语言 await findSystemLocale(); //初始化pref @@ -33,6 +34,7 @@ Future initSystem() async { //地图缓存 await FMTCObjectBoxBackend().initialise(); await const FMTCStore('mapStore').manage.create(); + unawaited(Utils().webDavUtil.initWebDav()); unawaited(RustLib.init()); SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle( @@ -64,7 +66,7 @@ String getInitialRoute() { void main() async { await initSystem(); - FlutterError.onError = (details) { + FlutterError.onError = (details) async { Utils().logUtil.printError('Flutter error', error: details.exception, stackTrace: details.stack); if (details.exceptionAsString().contains('Render')) { Utils().noticeUtil.showBug(message: '布局异常!'); diff --git a/lib/pages/backup_sync/backup_sync_view.dart b/lib/pages/backup_sync/backup_sync_view.dart index 128048a..b04ac67 100644 --- a/lib/pages/backup_sync/backup_sync_view.dart +++ b/lib/pages/backup_sync/backup_sync_view.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:mood_diary/components/local_send/local_send_view.dart'; +import 'package:mood_diary/components/web_dav/web_dav_view.dart'; import 'backup_sync_logic.dart'; import 'backup_sync_state.dart'; @@ -18,20 +19,7 @@ class BackupSyncPage extends StatelessWidget { title: const Text('备份与同步'), ), body: ListView( - children: const [ - ExpansionTile( - leading: Icon(Icons.wifi_tethering_rounded), - title: Text('局域网传输'), - children: [LocalSendComponent()], - ), - ExpansionTile( - leading: Icon(Icons.backup_rounded), - title: Text('WebDav'), - subtitle: Text('即将支持'), - enabled: false, - children: [], - ) - ], + children: const [LocalSendComponent(), WebDavComponent()], ), ); } diff --git a/lib/pages/edit/edit_view.dart b/lib/pages/edit/edit_view.dart index 93d4f13..8e56ed6 100644 --- a/lib/pages/edit/edit_view.dart +++ b/lib/pages/edit/edit_view.dart @@ -863,6 +863,8 @@ class EditPage extends StatelessWidget { return Scaffold( appBar: AppBar( title: buildTitle(), + titleSpacing: .0, + centerTitle: true, actions: [ IconButton( icon: const Icon(Icons.check), diff --git a/lib/pages/home/diary/diary_logic.dart b/lib/pages/home/diary/diary_logic.dart index dfc3b66..b5f0d5a 100644 --- a/lib/pages/home/diary/diary_logic.dart +++ b/lib/pages/home/diary/diary_logic.dart @@ -128,9 +128,9 @@ class DiaryLogic extends GetxController with GetTickerProviderStateMixin { } //如果控制器已经存在,重新获取,如果不存在,不需要任何操作 if (tabViewIndex != 0 && Bind.isRegistered(tag: categoryId)) { - await Bind.find(tag: categoryId).getDiary(); + await Bind.find(tag: categoryId).updateDiary(); } - await Bind.find(tag: 'default').getDiary(); + await Bind.find(tag: 'default').updateDiary(); } /// 分类刷新函数 diff --git a/lib/pages/home/diary/diary_view.dart b/lib/pages/home/diary/diary_view.dart index f4f0c5a..153834b 100644 --- a/lib/pages/home/diary/diary_view.dart +++ b/lib/pages/home/diary/diary_view.dart @@ -7,6 +7,7 @@ import 'package:mood_diary/components/diary_tab_view/diary_tab_view_view.dart'; import 'package:mood_diary/components/keepalive/keepalive.dart'; import 'package:mood_diary/components/scroll/fix_scroll.dart'; import 'package:mood_diary/components/search_sheet/search_sheet_view.dart'; +import 'package:mood_diary/components/web_dav_dashboard/web_dav_dashboard_view.dart'; import 'diary_logic.dart'; @@ -121,6 +122,18 @@ class DiaryPage extends StatelessWidget { icon: const Icon(Icons.search), tooltip: i18n.diaryPageSearchButton, ), + IconButton( + onPressed: () { + showModalBottomSheet( + context: context, + builder: (context) { + return const WebDavDashboardComponent(); + }, + showDragHandle: true, + useSafeArea: true); + }, + icon: const Icon(Icons.cloud_sync_outlined), + ), PopupMenuButton( offset: const Offset(0, 46), tooltip: i18n.diaryPageViewModeButton, diff --git a/lib/pages/home/home_logic.dart b/lib/pages/home/home_logic.dart index 53d2480..5ee10cb 100644 --- a/lib/pages/home/home_logic.dart +++ b/lib/pages/home/home_logic.dart @@ -84,14 +84,13 @@ class HomeLogic extends GetxController with GetTickerProviderStateMixin { //新增一篇日记 Future toEditPage({required DiaryType type}) async { //同时关闭fab - await HapticFeedback.selectionClick(); - fabAnimationController.reset(); - state.isFabExpanded = false; - update(['Fab']); + HapticFeedback.selectionClick(); /// 需要注意,返回值为 '' 时才是没有选择分类,而返回值为 null 时,是没有进行操作直接返回 var res = await Get.toNamed(AppRoutes.editPage, arguments: type); - Utils().logUtil.printInfo(res); + fabAnimationController.reset(); + state.isFabExpanded = false; + update(['Fab']); if (res != null) { if (res == '') { await diaryLogic.updateDiary(null); diff --git a/lib/pages/home/media/media_view.dart b/lib/pages/home/media/media_view.dart index 6f0cb3f..169e7f2 100644 --- a/lib/pages/home/media/media_view.dart +++ b/lib/pages/home/media/media_view.dart @@ -21,6 +21,8 @@ class MediaPage extends StatelessWidget { final state = Bind.find().state; final i18n = AppLocalizations.of(context)!; final colorScheme = Theme.of(context).colorScheme; + final pixelRatio = MediaQuery.devicePixelRatioOf(context); + final size = MediaQuery.sizeOf(context); final iconMap = { MediaType.image: FontAwesomeIcons.image, @@ -52,6 +54,7 @@ class MediaPage extends StatelessWidget { child: Image.file( File(state.filePath[index]), fit: BoxFit.cover, + cacheWidth: 120 * pixelRatio.toInt(), ), ), ); @@ -91,6 +94,7 @@ class MediaPage extends StatelessWidget { child: Image.file( File(thumbnailList[index]), // 使用缩略图文件路径显示图像 fit: BoxFit.cover, // 让图像完全覆盖卡片 + cacheWidth: 120 * pixelRatio.toInt(), // 缓存宽度 ), ), ); @@ -106,6 +110,7 @@ class MediaPage extends StatelessWidget { alignment: Alignment.center, children: [ CustomScrollView( + cacheExtent: size.height * 2, slivers: [ SliverAppBar( title: Text(i18n.homeNavigatorMedia), diff --git a/lib/pages/home/setting/setting_view.dart b/lib/pages/home/setting/setting_view.dart index 07c27ad..37a05f8 100644 --- a/lib/pages/home/setting/setting_view.dart +++ b/lib/pages/home/setting/setting_view.dart @@ -22,6 +22,7 @@ class SettingPage extends StatelessWidget { final textStyle = Theme.of(context).textTheme; final colorScheme = Theme.of(context).colorScheme; final i18n = AppLocalizations.of(context)!; + final size = MediaQuery.sizeOf(context); Widget buildDashboard() { return const DashboardComponent(); @@ -507,34 +508,28 @@ class SettingPage extends StatelessWidget { assignId: true, builder: (_) { return CustomScrollView( + cacheExtent: size.height * 2, slivers: [ SliverAppBar( title: Text(i18n.homeNavigatorSetting), pinned: true, ), - SliverPadding( - padding: const EdgeInsets.all(4.0), - sliver: SliverToBoxAdapter(child: buildDashboard()), - ), - SliverPadding( - padding: const EdgeInsets.all(4.0), - sliver: SliverToBoxAdapter(child: buildFeature()), - ), - SliverPadding( - padding: const EdgeInsets.all(4.0), - sliver: SliverToBoxAdapter(child: buildData()), - ), - SliverPadding( - padding: const EdgeInsets.all(4.0), - sliver: SliverToBoxAdapter(child: buildDisplay()), - ), - SliverPadding( - padding: const EdgeInsets.all(4.0), - sliver: SliverToBoxAdapter(child: buildPrivacy()), - ), - SliverPadding( - padding: const EdgeInsets.all(4.0), - sliver: SliverToBoxAdapter(child: buildMore()), + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.all(4.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + spacing: 4.0, + children: [ + buildDashboard(), + buildFeature(), + buildData(), + buildDisplay(), + buildPrivacy(), + buildMore(), + ], + ), + ), ), ], ); diff --git a/lib/router/app_pages.dart b/lib/router/app_pages.dart index ade7736..041ccc5 100644 --- a/lib/router/app_pages.dart +++ b/lib/router/app_pages.dart @@ -51,6 +51,7 @@ class AppPages { //启动页 GetPage( name: AppRoutes.startPage, + transition: Transition.fadeIn, page: () => const StartPage(), binds: [Bind.lazyPut(() => StartLogic())], ), @@ -58,6 +59,7 @@ class AppPages { GetPage( name: AppRoutes.homePage, page: () => const HomePage(), + transition: Transition.fadeIn, binds: [ Bind.lazyPut(() => HomeLogic()), ], @@ -71,6 +73,7 @@ class AppPages { //日记页路由 GetPage( name: AppRoutes.diaryPage, + transition: Transition.fadeIn, page: () => DiaryDetailsPage(), ), //图片路由 @@ -97,6 +100,7 @@ class AppPages { name: AppRoutes.editPage, page: () => const EditPage(), popGesture: false, + transition: Transition.fadeIn, binds: [Bind.lazyPut(() => EditLogic())], ), //分享页路由 @@ -137,6 +141,7 @@ class AppPages { //锁 GetPage( name: AppRoutes.lockPage, + transition: Transition.fadeIn, page: () => const LockPage(), binds: [Bind.lazyPut(() => LockLogic())], ), diff --git a/lib/utils/data/isar.dart b/lib/utils/data/isar.dart index 1259d73..3fc3027 100644 --- a/lib/utils/data/isar.dart +++ b/lib/utils/data/isar.dart @@ -271,6 +271,8 @@ class IsarUtil { diary.type = DiaryType.richText.value; isar.diarys.put(diary); } + diary.lastModified = diary.time; + isar.diarys.put(diary); } }); } diff --git a/lib/utils/notice_util.dart b/lib/utils/notice_util.dart index 9824278..ff6a910 100644 --- a/lib/utils/notice_util.dart +++ b/lib/utils/notice_util.dart @@ -15,18 +15,18 @@ class NoticeUtil { late final colorScheme = Theme.of(Get.context!).colorScheme; _fToast.removeCustomToast(); _fToast.showToast( - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 12.0), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(16.0), - color: colorScheme.primaryContainer.withAlpha(240), - ), - child: Text( - message, - style: TextStyle(fontSize: 16.0, color: colorScheme.onPrimaryContainer), - ), + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 12.0), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(16.0), + color: colorScheme.primaryContainer.withAlpha(240), ), - gravity: ToastGravity.CENTER, + child: Text( + message, + style: TextStyle(fontSize: 16.0, color: colorScheme.onPrimaryContainer), + ), + ), + gravity: ToastGravity.CENTER, ); }); } diff --git a/lib/utils/theme_util.dart b/lib/utils/theme_util.dart index 26a4eea..fdf2c94 100644 --- a/lib/utils/theme_util.dart +++ b/lib/utils/theme_util.dart @@ -2,7 +2,7 @@ import 'package:chinese_font_library/chinese_font_library.dart'; import 'package:dynamic_color/dynamic_color.dart'; import 'package:flutter/material.dart'; import 'package:flutter_quill/flutter_quill.dart'; -import 'package:flutter_quill/flutter_quill_internal.dart'; +import 'package:flutter_quill/internal.dart'; import 'package:mood_diary/common/values/colors.dart'; import 'package:mood_diary/utils/utils.dart'; @@ -83,8 +83,9 @@ class ThemeUtil { colorScheme: ColorScheme.fromSeed( seedColor: seedColor, brightness: brightness, - dynamicSchemeVariant: color == 4 ? DynamicSchemeVariant.fidelity : DynamicSchemeVariant.tonalSpot, + dynamicSchemeVariant: color == 4 ? DynamicSchemeVariant.monochrome : DynamicSchemeVariant.tonalSpot, ), + brightness: brightness, ); // 使用系统中文字体的扩展 diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index da39ace..9a1c876 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -14,6 +14,7 @@ import 'package:mood_diary/utils/permission_util.dart'; import 'package:mood_diary/utils/signature_util.dart'; import 'package:mood_diary/utils/theme_util.dart'; import 'package:mood_diary/utils/update_util.dart'; +import 'package:mood_diary/utils/webdav_util.dart'; import 'array_util.dart'; @@ -57,4 +58,6 @@ class Utils { late final PrefUtil prefUtil = PrefUtil(); late final SupabaseUtil supabaseUtil = SupabaseUtil(); + + late final WebDavUtil webDavUtil = WebDavUtil(); } diff --git a/lib/utils/webdav_util.dart b/lib/utils/webdav_util.dart index 6840909..b1b0183 100644 --- a/lib/utils/webdav_util.dart +++ b/lib/utils/webdav_util.dart @@ -1,135 +1,289 @@ import 'dart:convert'; +import 'dart:io'; -import 'package:dio/dio.dart'; -import 'package:http_status_code/http_status_code.dart'; +import 'package:flutter/foundation.dart' as flutter; +import 'package:mood_diary/common/models/isar/category.dart'; +import 'package:mood_diary/common/values/webdav.dart'; import 'package:mood_diary/utils/utils.dart'; +import 'package:webdav_client/webdav_client.dart' as webdav; -class WebDavException implements Exception { - final String message; - final dynamic cause; - final StackTrace? stackTrace; - - WebDavException(this.message, {this.cause, this.stackTrace}); - - @override - String toString() { - return 'WebDavException: $message, Cause: $cause'; - } -} +import '../common/models/isar/diary.dart'; class WebDavUtil { - late String baseUrl; - late String username; - late String password; - late final Dio _dio; + Set syncingDiaries = {}; - WebDavUtil() { - var webDavOptions = Utils().prefUtil.getValue>('webDavOption'); - if (webDavOptions == null || webDavOptions.isEmpty) { - throw WebDavException("WebDAV options not configured"); + webdav.Client? _client; + + List get options => Utils().prefUtil.getValue>('webDavOption')!; + + bool get hasOption => Utils().prefUtil.getValue>('webDavOption')!.isNotEmpty; + + Future initWebDav() async { + final webDavOption = options; + if (webDavOption.isEmpty) { + _client = null; + return; } - baseUrl = webDavOptions[0]; - username = webDavOptions[1]; - password = webDavOptions[2]; - _dio = Dio(BaseOptions( - baseUrl: baseUrl, - headers: { - 'Authorization': 'Basic ${base64Encode(utf8.encode('$username:$password'))}', - }, - followRedirects: false, - )); + if (_client != null) { + _client = null; + } + _client = + webdav.newClient(webDavOption[0], user: webDavOption[1], password: webDavOption[2], debug: flutter.kDebugMode); + _client?.setHeaders({ + 'accept-charset': 'utf-8', + 'Content-Type': 'application/json', + }); + await initDir(); } - Future _safeExecute(Future Function() operation, String action) async { + Future checkConnectivity() async { try { - return await operation(); - } catch (e, stack) { - throw WebDavException('Error during $action', cause: e, stackTrace: stack); + await _client?.ping(); + return true; + } catch (e) { + return false; } } - Future uploadFile(String remotePath, String localPath) async { - await _safeExecute(() async { - final file = await MultipartFile.fromFile(localPath); - final formData = FormData.fromMap({'file': file}); - final response = await _dio.put(remotePath, data: formData); - if (response.statusCode != StatusCode.CREATED && response.statusCode != StatusCode.NO_CONTENT) { - throw Exception('Upload failed with status code: ${response.statusCode}'); - } - }, 'uploadFile'); + Future initDir() async { + await _client!.mkdirAll(WebDavOptions.imagePath); + await _client!.mkdirAll(WebDavOptions.videoPath); + await _client!.mkdirAll(WebDavOptions.audioPath); + await _client!.mkdirAll(WebDavOptions.diaryPath); + await _client!.mkdirAll(WebDavOptions.categoryPath); + await checkSyncFlag(); } - Future downloadFile(String remotePath, String localPath) async { - await _safeExecute(() async { - final response = await _dio.download(remotePath, localPath); - if (response.statusCode != StatusCode.OK) { - throw Exception('Download failed with status code: ${response.statusCode}'); - } - }, 'downloadFile'); + Future checkSyncFlag() async { + try { + await _client!.read(WebDavOptions.syncFlagPath); + } catch (e) { + await _client!.write(WebDavOptions.syncFlagPath, utf8.encode(jsonEncode({}))); + } } - Future> listDirectory(String remotePath) async { - return await _safeExecute(() async { - final response = await _dio.request( - remotePath, - options: Options(method: 'PROPFIND', headers: {'Depth': '1'}), - ); - if (response.statusCode == StatusCode.MULTI_STATUS) { - return _parsePropFindResponse(response.data.toString()); - } else { - throw Exception('Directory listing failed with status code: ${response.statusCode}'); - } - }, 'listDirectory'); + Future updateWebDav({required String baseUrl, required String username, required String password}) async { + await Utils().prefUtil.setValue('webDavOption', [baseUrl, username, password]); + initWebDav(); } - Future deleteFile(String remotePath) async { - await _safeExecute(() async { - final response = await _dio.delete(remotePath); - if (response.statusCode != StatusCode.NO_CONTENT) { - throw Exception('Deletion failed with status code: ${response.statusCode}'); - } - }, 'deleteFile'); + Future removeWebDavOption() async { + _client = null; + await Utils().prefUtil.setValue>('webDavOption', []); } - Future createDirectory(String remotePath) async { - await _safeExecute(() async { - final response = await _dio.request( - remotePath, - options: Options(method: 'MKCOL'), - ); - if (response.statusCode != StatusCode.CREATED) { - throw Exception('Directory creation failed with status code: ${response.statusCode}'); + Future> fetchServerSyncData() async { + if (_client != null) { + final response = await _client!.read(WebDavOptions.syncFlagPath); + if (response.isNotEmpty) { + return Map.from(jsonDecode(utf8.decode(response))); } - }, 'createDirectory'); + } + return {}; } - Future exists(String remotePath) async { - return await _safeExecute(() async { + Future updateServerSyncData(Map syncData) async { + if (_client != null) { + await _client!.write(WebDavOptions.syncFlagPath, utf8.encode(jsonEncode(syncData))); + } + } + + Future syncDiary( + List localDiaries, { + flutter.VoidCallback? onUpload, + flutter.VoidCallback? onDownload, + flutter.VoidCallback? onComplete, + }) async { + final serverSyncData = await fetchServerSyncData(); + final Map updatedSyncData = {...serverSyncData}; + + // 本地日记的 ID -> 修改时间映射 + final Map localDiaryMap = { + for (final diary in localDiaries) diary.id: diary.lastModified.toIso8601String() + }; + + for (final entry in serverSyncData.entries) { + final diaryId = entry.key; + final serverLastModified = entry.value; + + if (syncingDiaries.contains(diaryId)) { + continue; // 正在同步中,跳过 + } + + final localLastModified = localDiaryMap[diaryId]; + + if (localLastModified == null || serverLastModified.compareTo(localLastModified) > 0) { + // 本地不存在该日记,下载 + syncingDiaries.add(diaryId); + final updatedDiary = await downloadDiary(diaryId); // 下载日记的实现 + await saveLocalDiary(updatedDiary); // 保存到本地的实现 + onDownload?.call(); + syncingDiaries.remove(diaryId); + } + } + + for (final diary in localDiaries) { + if (syncingDiaries.contains(diary.id)) { + continue; // 正在同步中,跳过 + } + + final serverLastModified = serverSyncData[diary.id]; + final localLastModified = diary.lastModified.toIso8601String(); + + if (serverLastModified == null || serverLastModified.compareTo(localLastModified) < 0) { + // 服务器不存在该日记,或服务器版本较旧 + syncingDiaries.add(diary.id); + await uploadDiary(diary); // 上传日记的实现 + onUpload?.call(); + updatedSyncData[diary.id] = localLastModified; + syncingDiaries.remove(diary.id); + } + } + + // 更新服务器的同步 JSON 文件 + await updateServerSyncData(updatedSyncData); + onComplete?.call(); + } + + Future uploadDiary(Diary diary) async { + // 检查并上传分类 + if (diary.categoryId != null) { + final categoryName = Utils().isarUtil.getCategoryName(diary.categoryId!)?.categoryName; + if (categoryName != null) { + await uploadCategory(diary.categoryId!, categoryName); + } + } + + // 上传日记 JSON 数据 + final diaryPath = '${WebDavOptions.diaryPath}/${diary.id}.json'; + final diaryData = jsonEncode(diary.toJson()); + + try { + _client!.setHeaders({ + 'accept-charset': 'utf-8', + 'Content-Type': 'application/json', + }); + await _client!.write(diaryPath, utf8.encode(diaryData)); + Utils().logUtil.printInfo('Diary JSON uploaded: $diaryPath'); + } catch (e) { + Utils().logUtil.printInfo('Failed to upload diary JSON: $e'); + rethrow; + } + + // 上传资源文件 + await _uploadFiles(diary.imageName, WebDavOptions.imagePath, 'image'); + await _uploadFiles(diary.audioName, WebDavOptions.audioPath, 'audio'); + await _uploadFiles(diary.videoName, WebDavOptions.videoPath, 'video'); + } + + Future _uploadFiles(List fileNames, String resourcePath, String type) async { + for (final fileName in fileNames) { + final filePath = Utils().fileUtil.getRealPath(type, fileName); + try { - final response = await _dio.request( - remotePath, - options: Options(method: 'HEAD'), - ); - return response.statusCode == StatusCode.OK; - } on DioException catch (e) { - if (e.response?.statusCode == StatusCode.NOT_FOUND) { - return false; - } + final fileBytes = await File(filePath).readAsBytes(); + _client!.setHeaders({ + 'accept-charset': 'utf-8', + 'Content-Type': 'application/octet-stream', + }); + await _client!.write('$resourcePath/$fileName', fileBytes); + Utils().logUtil.printInfo('$type file uploaded: $fileName'); + } catch (e) { + Utils().logUtil.printInfo('Failed to upload $type file: $fileName, Error: $e'); rethrow; } - }, 'exists'); + } } - List _parsePropFindResponse(String xmlResponse) { - final items = []; - final regex = RegExp(r'(.*?)<\/D:href>'); - final matches = regex.allMatches(xmlResponse); - for (var match in matches) { - final href = match.group(1); - if (href != null) { - items.add(Uri.decodeFull(href)); + Future downloadDiary(String diaryId) async { + // 下载日记 JSON 数据 + final diaryPath = '${WebDavOptions.diaryPath}/$diaryId.json'; + late Diary diary; + + try { + final diaryData = await _client!.read(diaryPath); + diary = Diary.fromJson(jsonDecode(utf8.decode(diaryData))); + Utils().logUtil.printInfo('Diary JSON downloaded: $diaryPath'); + } catch (e) { + Utils().logUtil.printInfo('Failed to download diary JSON: $e'); + rethrow; + } + + // 同步分类 + if (diary.categoryId != null) { + try { + final category = await downloadCategory(diary.categoryId!); + Utils().isarUtil.insertACategory(Category() + ..id = category['id']! + ..categoryName = category['name']!); + } catch (e) { + Utils().logUtil.printInfo('Failed to sync category for diary: $diaryId, Error: $e'); } } - return items; + + // 下载资源文件 + diary.imageName = await _downloadFiles(diary.imageName, WebDavOptions.imagePath, 'image'); + diary.audioName = await _downloadFiles(diary.audioName, WebDavOptions.audioPath, 'audio'); + diary.videoName = await _downloadFiles(diary.videoName, WebDavOptions.videoPath, 'video'); + + return diary; + } + + Future> _downloadFiles(List fileNames, String resourcePath, String type) async { + final localFileNames = []; + + for (final fileName in fileNames) { + final serverFilePath = '$resourcePath/$fileName'; + final localFilePath = Utils().fileUtil.getRealPath(type, fileName); + + try { + final fileBytes = await _client!.read(serverFilePath); + final file = File(localFilePath); + await file.writeAsBytes(fileBytes); + localFileNames.add(fileName); + Utils().logUtil.printInfo('$type file downloaded: $fileName'); + } catch (e) { + Utils().logUtil.printInfo('Failed to download $type file: $fileName, Error: $e'); + } + } + + return localFileNames; + } + + Future saveLocalDiary(Diary diary) async { + // 使用 Isar 或文件存储 + await Utils().isarUtil.insertADiary(diary); + } + + Future uploadCategory(String categoryId, String categoryName) async { + final categoryPath = '${WebDavOptions.categoryPath}/$categoryId.json'; + final categoryData = jsonEncode({'id': categoryId, 'name': categoryName}); + + try { + _client!.setHeaders({ + 'accept-charset': 'utf-8', + 'Content-Type': 'application/json', + }); + await _client!.write(categoryPath, utf8.encode(categoryData)); + Utils().logUtil.printInfo('Category uploaded: $categoryPath'); + } catch (e) { + Utils().logUtil.printInfo('Failed to upload category: $e'); + rethrow; + } + } + + Future> downloadCategory(String categoryId) async { + final categoryPath = '${WebDavOptions.categoryPath}/$categoryId.json'; + + try { + final categoryData = await _client!.read(categoryPath); + final categoryMap = jsonDecode(utf8.decode(categoryData)) as Map; + final categoryName = categoryMap['name'] as String; + Utils().logUtil.printInfo('Category downloaded: $categoryPath'); + return {'id': categoryId, 'name': categoryName}; + } catch (e) { + Utils().logUtil.printInfo('Failed to download category: $e'); + throw Exception('Category not found: $categoryId'); + } } } From 8d760023e97a0fde55b0482fd7a73d9df8dae304 Mon Sep 17 00:00:00 2001 From: ZhuJHua <1624109111@qq.com> Date: Tue, 10 Dec 2024 14:08:06 +0800 Subject: [PATCH 20/20] chore(release): prepare release version 2.6.0 --- pubspec.yaml | 67 ---------------------------------------------------- 1 file changed, 67 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index 4533a8f..6bb86d8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -141,73 +141,6 @@ flutter_native_splash: web: false - # Platform specific images can be specified with the following parameters, which will override - # the respective parameter. You may specify all, selected, or none of these parameters: - #color_android: "#42a5f5" - #color_dark_android: "#042a49" - #color_ios: "#42a5f5" - #color_dark_ios: "#042a49" - #color_web: "#42a5f5" - #color_dark_web: "#042a49" - #image_android: assets/splash-android.png - #image_dark_android: assets/splash-invert-android.png - #image_ios: assets/splash-ios.png - #image_dark_ios: assets/splash-invert-ios.png - #image_web: assets/splash-web.gif - #image_dark_web: assets/splash-invert-web.gif - #background_image_android: "assets/background-android.png" - #background_image_dark_android: "assets/dark-background-android.png" - #background_image_ios: "assets/background-ios.png" - #background_image_dark_ios: "assets/dark-background-ios.png" - #background_image_web: "assets/background-web.png" - #background_image_dark_web: "assets/dark-background-web.png" - #branding_android: assets/brand-android.png - #branding_bottom_padding_android: 24 - #branding_dark_android: assets/dart_dark-android.png - #branding_ios: assets/brand-ios.png - #branding_bottom_padding_ios: 24 - #branding_dark_ios: assets/dart_dark-ios.png - #branding_web: assets/brand-web.gif - #branding_dark_web: assets/dart_dark-web.gif - - # The position of the splash image can be set with android_gravity, ios_content_mode, and - # web_image_mode parameters. All default to center. - # - # android_gravity can be one of the following Android Gravity (see - # https://developer.android.com/reference/android/view/Gravity): bottom, center, - # center_horizontal, center_vertical, clip_horizontal, clip_vertical, end, fill, fill_horizontal, - # fill_vertical, left, right, start, or top. - #android_gravity: center - # - # ios_content_mode can be one of the following iOS UIView.ContentMode (see - # https://developer.apple.com/documentation/uikit/uiview/contentmode): scaleToFill, - # scaleAspectFit, scaleAspectFill, center, top, bottom, left, right, topLeft, topRight, - # bottomLeft, or bottomRight. - #ios_content_mode: center - # - # web_image_mode can be one of the following modes: center, contain, stretch, and cover. - #web_image_mode: center - - # The screen orientation can be set in Android with the android_screen_orientation parameter. - # Valid parameters can be found here: - # https://developer.android.com/guide/topics/manifest/activity-element#screen - #android_screen_orientation: sensorLandscape - - # To hide the notification bar, use the fullscreen parameter. Has no effect in web since web - # has no notification bar. Defaults to false. - # NOTE: Unlike Android, iOS will not automatically show the notification bar when the app loads. - # To show the notification bar, add the following code to your Flutter app: - # WidgetsFlutterBinding.ensureInitialized(); - # SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.bottom, SystemUiOverlay.top], ); - #fullscreen: true - - # If you have changed the name(s) of your info.plist file(s), you can specify the filename(s) - # with the info_plist_files parameter. Remove only the # characters in the three lines below, - # do not remove any spaces: - #info_plist_files: - # - 'ios/Runner/Info-Debug.plist' - # - 'ios/Runner/Info-Release.plist' - flutter: generate: true fonts:

`U=E1fcQFK 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 E07Gyl?EnA( diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp deleted file mode 100644 index 08a81312ec555874fbaf99ede42275cda8cbafee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11890 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 diff --git a/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2e447a8f8020b083b90cec2d0174245cf9544239 GIT binary patch literal 2616 zcmbVOX*3&%78XG%2BoEzXi-{AY;A|yH9@tCsiFu)Eu}~#YN?Rv47C<5&szIdYK>4q zwGnD+k7`0tOA<7e+8V_2%sKCzH}Aaje$4xE?>*nI`<-*|cfT8NbK6|-q~u8s4i3Q^ z7LZ?#YwDlD%X6F;%;w&5aPS@7fSA~Y0am8?Z0uNokLv}P65$ZB)Td6>oKDHobQ{|b zdS{bOl5#HQ^CmcyYUaeZ*uGC_wjF(F2T9J+@e}O^rd-a~7Lk0fQX|5Bxlrd~w?9#I z?=afkOCB;OOX+5@`__fiN-=~GOW0`cIGJ!^ExFp&j3rq87dC65QigheSOpW z*)DV8(;X6<3j=D%-KS4E+l{VpW~#fHL5Ow_ydRvYTkyjrk4rCU6@E;SmH(NAZ}0Hx zvwt-47En|)Uyt{hQq9fLF-{k`Fgw{=pm9z^IB1)h*s^!x)5qZ8;41V! z1Cj}dKU%WR*H3HF*3wGNd-2pd^GHzM{CUp?U4>@fGde1Y^Cz2q=y;;Dv(lNGp3bGN zuHK(-AX-r8q^9)s0+XZ-<4MoR2-w;@M4u3zSxe~zCz|+D!j>rwcU&!zaCoYyx5(Hb znk~p$@ZT(Y;`HF^)vIG#kC7#P7$Oz^VPZluD(aQSgWmhQ*tRx3#$a~xF2A9sldEcr zM|Xwq=gOk}@VQbx%IQw2*Gkr(rg9zKm|tqDS`{e_XJiC)ZE-`mJ;u2Dz0Ac zIm#H=@VR;OrfQavQ1qkGp89_30lP0TE6kb=$GgY^NojAERRjDoFd>J3K zn~*_i4rt3`DlAW_DfQ3EJ$DS6Xgcc_h2sugo9^~e$&}&@4o0OrS1!L%z0)p$EzHH7 z`mypGRE>Xk)w2H{K7?N*LSIeI%5{OknEO)W99uIwCZMZ?O=b1|0b(!dSoXTEJF`K5CnnTpeP@;-=FZ<5HP+gmOVHV00{vZkMqzlRND z0B?~CKSf5iBX)X4&ZcH%X%{+7c0Egh&l0%9pY$Z9&}a@4`eDM}Lpcu}Yprs>Yy_~g zG)uf7WlDpD7Z)@qocB?>p?;*&`1ZBQR^){9Q6Qcjm%Bx#;Dqfp*JLL(%DoHWqjfjFuv@S4ubQ^55->U98=0; z+D=YhTNHs{(pLCH33TZy$cF#B zF=-e~s~owPJ32Zl*wW1xhD0I@YN`thPn!E3qE6emuNN>o(lVbdX&Wkswq|3!Guf0+ zLx--1dj(?uU{k6s9RRv|Eme&niRwki%uu13 z9-f}REmmHf%Ev%6>n1)@rRE8y4G~svHt^oJj)VttmROgw@B$VRKZ6B~6e`YLxw2hG z9;vVn;^G#pB-)PY;{|(3q*IAFSay~WePQ8#>@*@pY9M69_ydEiEnl+N!GJ zR(3*haq&qbYofS}Ow8Uk(_wbej|X-_0rg|^y5piFu{Qbm2T=SyKuXN>Y{gedCMyLTb-RjO!nI``B)+eeqwv#3i^8)h9Cv zn1pdERsNdtDN!Y>ORSw?g7ukRH+GSagv}+HYbfKL9mG!L*tZ3c6i8p-@DOIDp}g6H zi8`;UDz-36f-ercccEQfUE|`i{0O$$>O5Qg9#NvLzUR$cBx912Zc)a^&wKyjmh?^* zGNe(c<>>6}IZl!w_VlCFY{p~gWizHth0imkv W(=H~7aQsyO literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp deleted file mode 100644 index 21682088d0f33fb0054c78ae7e71f68b10e5d26d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11300 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 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp deleted file mode 100644 index f73db9b3e93f92b93efebab3d59750553ed50c8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47170 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