From 250f21a2b8bdefb2c0690fe40e6959cb8476c161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E9=94=8B?= <2535831261@qq.com> Date: Thu, 4 Jun 2026 10:50:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.en.md | 34 +- README.md | 34 +- android/app/build.gradle.kts | 7 +- .../main/kotlin/com/gdfw/fxjk/AppConstants.kt | 9 + .../fxjk}/MainActivity.kt | 6 +- .../recording/BatteryOptimizationHelper.kt | 2 +- .../fxjk}/recording/DoNotDisturbHelper.kt | 2 +- .../recording/RecordingCameraController.kt | 2 +- .../recording/RecordingForegroundService.kt | 15 +- .../recording/RecordingPlatformHandler.kt | 9 +- .../recording/RecordingPreviewFactory.kt | 4 +- .../fxjk}/recording/RecordingSession.kt | 2 +- .../fxjk}/recording/RecordingState.kt | 2 +- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 2492 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 442 -> 1618 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 3281 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 5183 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 7256 bytes .../reports/problems/problems-report.html | 663 ++++++++++++++++++ .../Icon-App-1024x1024@1x.png | Bin 10932 -> 46216 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 295 -> 622 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 406 -> 1274 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 450 -> 2016 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 282 -> 945 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 462 -> 1910 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 704 -> 2949 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 406 -> 1274 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 586 -> 2665 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 862 -> 4191 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 862 -> 4191 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 1674 -> 6662 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 762 -> 2581 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 1226 -> 5362 bytes .../Icon-App-83.5x83.5@2x.png | Bin 1418 -> 6139 bytes ios/Runner/RecordingPlugin.swift | 10 +- lib/app/app.dart | 40 +- lib/app/bootstrap.dart | 8 +- lib/core/network/api_client.dart | 6 +- lib/core/network/header_interceptor.dart | 8 +- lib/core/network/network_monitor.dart | 2 +- .../offline_queue_interceptor.dart | 6 +- .../offline_queue/offline_queue_manager.dart | 10 +- .../offline_queue/offline_queue_storage.dart | 6 +- lib/core/network/providers/dio_providers.dart | 12 +- .../network/providers/network_providers.dart | 4 +- .../providers/offline_queue_providers.dart | 8 +- .../recording/model/model_clipboard.dart | 44 ++ .../recording/model/model_recording.dart | 26 + .../recording/recording_channel_names.dart | 5 + lib/features/recording/recording_page.dart | 12 +- .../recording/recording_platform.dart | 5 +- .../recording_session_controller.dart | 12 +- .../view-model/view_model_recording.dart | 56 ++ lib/main.dart | 2 +- lib/shared/widgets/app_avatar.dart | 2 +- lib/shared/widgets/app_card.dart | 2 +- lib/shared/widgets/app_error_view.dart | 2 +- lib/shared/widgets/app_search_bar.dart | 2 +- lib/shared/widgets/app_status_view.dart | 6 +- lib/shared/widgets/app_toast.dart | 2 +- pubspec.yaml | 7 +- lib/features/webview/test.html => test.html | 0 .../permission/permission_service_test.dart | 55 +- .../recording/model_clipboard_test.dart | 41 ++ .../recording/recording_platform_test.dart | 2 +- .../recording/view_model_recording_test.dart | 148 ++++ test/widget_test.dart | 9 +- 67 files changed, 1192 insertions(+), 159 deletions(-) create mode 100644 android/app/src/main/kotlin/com/gdfw/fxjk/AppConstants.kt rename android/app/src/main/kotlin/com/{example/flutter_template => gdfw/fxjk}/MainActivity.kt (87%) rename android/app/src/main/kotlin/com/{example/flutter_template => gdfw/fxjk}/recording/BatteryOptimizationHelper.kt (96%) rename android/app/src/main/kotlin/com/{example/flutter_template => gdfw/fxjk}/recording/DoNotDisturbHelper.kt (97%) rename android/app/src/main/kotlin/com/{example/flutter_template => gdfw/fxjk}/recording/RecordingCameraController.kt (99%) rename android/app/src/main/kotlin/com/{example/flutter_template => gdfw/fxjk}/recording/RecordingForegroundService.kt (93%) rename android/app/src/main/kotlin/com/{example/flutter_template => gdfw/fxjk}/recording/RecordingPlatformHandler.kt (96%) rename android/app/src/main/kotlin/com/{example/flutter_template => gdfw/fxjk}/recording/RecordingPreviewFactory.kt (91%) rename android/app/src/main/kotlin/com/{example/flutter_template => gdfw/fxjk}/recording/RecordingSession.kt (94%) rename android/app/src/main/kotlin/com/{example/flutter_template => gdfw/fxjk}/recording/RecordingState.kt (91%) create mode 100644 android/build/reports/problems/problems-report.html create mode 100644 lib/features/recording/model/model_clipboard.dart create mode 100644 lib/features/recording/model/model_recording.dart create mode 100644 lib/features/recording/recording_channel_names.dart create mode 100644 lib/features/recording/view-model/view_model_recording.dart rename lib/features/webview/test.html => test.html (100%) create mode 100644 test/features/recording/model_clipboard_test.dart create mode 100644 test/features/recording/view_model_recording_test.dart diff --git a/README.en.md b/README.en.md index 836bdfd..fea5f08 100644 --- a/README.en.md +++ b/README.en.md @@ -13,22 +13,22 @@ A production-ready Flutter quick-start template extracted from real-world projec ## Tech Stack -| Category | Package | Purpose | -|---|---|---| -| State Management | flutter_riverpod | Compile-safe, testable state management | -| Networking | dio | HTTP client with interceptor chain | -| Local Cache | shared_preferences | Key-value persistence | -| Network Monitor | connectivity_plus | Real-time connectivity tracking | -| Permissions | permission_handler | Runtime permission requests | -| Screen Adaptation | flutter_screenutil | Design-dimension-based layout | -| Image Loading | cached_network_image | Network image caching | -| SVG | flutter_svg | SVG rendering | -| Pull to Refresh | pull_to_refresh | Refresh and load-more | -| Loading HUD | flutter_easyloading | Toast and loading indicator | -| Device Info | device_info_plus | Device metadata | -| Package Info | package_info_plus | App version info | -| URL Launcher | url_launcher | Open external URLs | -| Linting | flutter_lints | Recommended Dart lint rules | +| Category | Package | Purpose | +| ----------------- | -------------------- | --------------------------------------- | +| State Management | flutter_riverpod | Compile-safe, testable state management | +| Networking | dio | HTTP client with interceptor chain | +| Local Cache | shared_preferences | Key-value persistence | +| Network Monitor | connectivity_plus | Real-time connectivity tracking | +| Permissions | permission_handler | Runtime permission requests | +| Screen Adaptation | flutter_screenutil | Design-dimension-based layout | +| Image Loading | cached_network_image | Network image caching | +| SVG | flutter_svg | SVG rendering | +| Pull to Refresh | pull_to_refresh | Refresh and load-more | +| Loading HUD | flutter_easyloading | Toast and loading indicator | +| Device Info | device_info_plus | Device metadata | +| Package Info | package_info_plus | App version info | +| URL Launcher | url_launcher | Open external URLs | +| Linting | flutter_lints | Recommended Dart lint rules | ## Directory Structure @@ -72,7 +72,7 @@ lib/ ## Getting Started ```bash -cd flutter-template +cd record-tool flutter pub get flutter analyze flutter test diff --git a/README.md b/README.md index 79a0644..6f5f702 100644 --- a/README.md +++ b/README.md @@ -13,22 +13,22 @@ ## 技术栈 -| 类别 | 依赖 | 用途 | -|---|---|---| -| 状态管理 | flutter_riverpod | 编译安全、可测试的状态管理 | -| 网络请求 | dio | HTTP 客户端,支持拦截器链 | -| 本地缓存 | shared_preferences | KV 持久化存储 | -| 网络监听 | connectivity_plus | 实时网络状态监测 | -| 权限申请 | permission_handler | 运行时权限请求 | -| 屏幕适配 | flutter_screenutil | 设计稿尺寸适配 | -| 图片加载 | cached_network_image | 网络图片缓存 | -| SVG | flutter_svg | SVG 渲染 | -| 下拉刷新 | pull_to_refresh | 下拉刷新 / 上拉加载 | -| 加载提示 | flutter_easyloading | Toast 和 loading | -| 设备信息 | device_info_plus | 设备元数据 | -| 应用信息 | package_info_plus | 版本号等应用信息 | -| 链接跳转 | url_launcher | 外部 URL 打开 | -| 代码规范 | flutter_lints | Dart 推荐 lint 规则 | +| 类别 | 依赖 | 用途 | +| -------- | -------------------- | -------------------------- | +| 状态管理 | flutter_riverpod | 编译安全、可测试的状态管理 | +| 网络请求 | dio | HTTP 客户端,支持拦截器链 | +| 本地缓存 | shared_preferences | KV 持久化存储 | +| 网络监听 | connectivity_plus | 实时网络状态监测 | +| 权限申请 | permission_handler | 运行时权限请求 | +| 屏幕适配 | flutter_screenutil | 设计稿尺寸适配 | +| 图片加载 | cached_network_image | 网络图片缓存 | +| SVG | flutter_svg | SVG 渲染 | +| 下拉刷新 | pull_to_refresh | 下拉刷新 / 上拉加载 | +| 加载提示 | flutter_easyloading | Toast 和 loading | +| 设备信息 | device_info_plus | 设备元数据 | +| 应用信息 | package_info_plus | 版本号等应用信息 | +| 链接跳转 | url_launcher | 外部 URL 打开 | +| 代码规范 | flutter_lints | Dart 推荐 lint 规则 | ## 目录结构 @@ -71,7 +71,7 @@ lib/ ## 快速开始 ```bash -cd flutter-template +cd record-tool flutter pub get flutter analyze flutter test diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index d1f9811..883955a 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -5,8 +5,10 @@ plugins { id("dev.flutter.flutter-gradle-plugin") } +val appPackageName = "com.gdfw.fxjk" + android { - namespace = "com.example.flutter_template" + namespace = appPackageName compileSdk = flutter.compileSdkVersion ndkVersion = flutter.ndkVersion @@ -20,8 +22,7 @@ android { } defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.flutter_template" + applicationId = appPackageName // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. minSdk = flutter.minSdkVersion diff --git a/android/app/src/main/kotlin/com/gdfw/fxjk/AppConstants.kt b/android/app/src/main/kotlin/com/gdfw/fxjk/AppConstants.kt new file mode 100644 index 0000000..0bce95b --- /dev/null +++ b/android/app/src/main/kotlin/com/gdfw/fxjk/AppConstants.kt @@ -0,0 +1,9 @@ +package com.gdfw.fxjk + +object AppConstants { + const val PACKAGE_NAME = "com.gdfw.fxjk" + const val RECORDING_METHOD_CHANNEL = "$PACKAGE_NAME/recording" + const val RECORDING_EVENT_CHANNEL = "$PACKAGE_NAME/recording_events" + const val RECORDING_ACTION_START = "$PACKAGE_NAME.recording.START" + const val RECORDING_ACTION_STOP = "$PACKAGE_NAME.recording.STOP" +} diff --git a/android/app/src/main/kotlin/com/example/flutter_template/MainActivity.kt b/android/app/src/main/kotlin/com/gdfw/fxjk/MainActivity.kt similarity index 87% rename from android/app/src/main/kotlin/com/example/flutter_template/MainActivity.kt rename to android/app/src/main/kotlin/com/gdfw/fxjk/MainActivity.kt index c0bb582..af058ba 100644 --- a/android/app/src/main/kotlin/com/example/flutter_template/MainActivity.kt +++ b/android/app/src/main/kotlin/com/gdfw/fxjk/MainActivity.kt @@ -1,8 +1,8 @@ -package com.example.flutter_template +package com.gdfw.fxjk import androidx.camera.view.PreviewView -import com.example.flutter_template.recording.RecordingPlatformHandler -import com.example.flutter_template.recording.RecordingPreviewFactory +import com.gdfw.fxjk.recording.RecordingPlatformHandler +import com.gdfw.fxjk.recording.RecordingPreviewFactory import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine diff --git a/android/app/src/main/kotlin/com/example/flutter_template/recording/BatteryOptimizationHelper.kt b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/BatteryOptimizationHelper.kt similarity index 96% rename from android/app/src/main/kotlin/com/example/flutter_template/recording/BatteryOptimizationHelper.kt rename to android/app/src/main/kotlin/com/gdfw/fxjk/recording/BatteryOptimizationHelper.kt index 7ee8ec0..7f65f28 100644 --- a/android/app/src/main/kotlin/com/example/flutter_template/recording/BatteryOptimizationHelper.kt +++ b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/BatteryOptimizationHelper.kt @@ -1,4 +1,4 @@ -package com.example.flutter_template.recording +package com.gdfw.fxjk.recording import android.content.Context import android.content.Intent diff --git a/android/app/src/main/kotlin/com/example/flutter_template/recording/DoNotDisturbHelper.kt b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/DoNotDisturbHelper.kt similarity index 97% rename from android/app/src/main/kotlin/com/example/flutter_template/recording/DoNotDisturbHelper.kt rename to android/app/src/main/kotlin/com/gdfw/fxjk/recording/DoNotDisturbHelper.kt index d151cfb..ec00e90 100644 --- a/android/app/src/main/kotlin/com/example/flutter_template/recording/DoNotDisturbHelper.kt +++ b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/DoNotDisturbHelper.kt @@ -1,4 +1,4 @@ -package com.example.flutter_template.recording +package com.gdfw.fxjk.recording import android.app.NotificationManager import android.content.Context diff --git a/android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingCameraController.kt b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingCameraController.kt similarity index 99% rename from android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingCameraController.kt rename to android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingCameraController.kt index 3ae7c01..13f1b67 100644 --- a/android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingCameraController.kt +++ b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingCameraController.kt @@ -1,4 +1,4 @@ -package com.example.flutter_template.recording +package com.gdfw.fxjk.recording import android.content.Context import android.util.Log diff --git a/android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingForegroundService.kt b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingForegroundService.kt similarity index 93% rename from android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingForegroundService.kt rename to android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingForegroundService.kt index 39c7adf..6de5d12 100644 --- a/android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingForegroundService.kt +++ b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingForegroundService.kt @@ -1,4 +1,4 @@ -package com.example.flutter_template.recording +package com.gdfw.fxjk.recording import android.app.Notification import android.app.NotificationChannel @@ -15,7 +15,8 @@ import android.os.IBinder import android.os.PowerManager import androidx.core.app.NotificationCompat import androidx.lifecycle.LifecycleService -import com.example.flutter_template.MainActivity +import com.gdfw.fxjk.AppConstants +import com.gdfw.fxjk.MainActivity class RecordingForegroundService : LifecycleService() { private var wakeLock: PowerManager.WakeLock? = null @@ -29,7 +30,7 @@ class RecordingForegroundService : LifecycleService() { override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { super.onStartCommand(intent, flags, startId) when (intent?.action) { - ACTION_START -> { + AppConstants.RECORDING_ACTION_START -> { acquireWakeLock() val notification = buildNotification("正在录制") if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { @@ -43,7 +44,7 @@ class RecordingForegroundService : LifecycleService() { } isRunning = true } - ACTION_STOP -> { + AppConstants.RECORDING_ACTION_STOP -> { releaseWakeLock() stopForeground(STOP_FOREGROUND_REMOVE) isRunning = false @@ -143,8 +144,6 @@ class RecordingForegroundService : LifecycleService() { companion object { const val CHANNEL_ID = "recording_foreground" const val NOTIFICATION_ID = 1001 - const val ACTION_START = "com.example.flutter_template.recording.START" - const val ACTION_STOP = "com.example.flutter_template.recording.STOP" private const val WAKE_LOCK_TAG = "record_tool:recording_wake_lock" @Volatile @@ -156,7 +155,7 @@ class RecordingForegroundService : LifecycleService() { fun start(context: Context) { val intent = Intent(context, RecordingForegroundService::class.java).apply { - action = ACTION_START + action = AppConstants.RECORDING_ACTION_START } ContextCompatStart.startForegroundService(context, intent) } @@ -164,7 +163,7 @@ class RecordingForegroundService : LifecycleService() { fun stop(context: Context) { val intent = Intent(context, RecordingForegroundService::class.java).apply { - action = ACTION_STOP + action = AppConstants.RECORDING_ACTION_STOP } context.startService(intent) } diff --git a/android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingPlatformHandler.kt b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingPlatformHandler.kt similarity index 96% rename from android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingPlatformHandler.kt rename to android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingPlatformHandler.kt index ab48d84..69756cb 100644 --- a/android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingPlatformHandler.kt +++ b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingPlatformHandler.kt @@ -1,4 +1,4 @@ -package com.example.flutter_template.recording +package com.gdfw.fxjk.recording import android.app.Activity import android.os.Build @@ -7,7 +7,8 @@ import android.os.Looper import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat -import com.example.flutter_template.MainActivity +import com.gdfw.fxjk.AppConstants +import com.gdfw.fxjk.MainActivity import io.flutter.plugin.common.BinaryMessenger import io.flutter.plugin.common.EventChannel import io.flutter.plugin.common.MethodCall @@ -18,9 +19,9 @@ class RecordingPlatformHandler( messenger: BinaryMessenger, ) : MethodChannel.MethodCallHandler, EventChannel.StreamHandler { private val methodChannel = - MethodChannel(messenger, "com.example.flutter_template/recording") + MethodChannel(messenger, AppConstants.RECORDING_METHOD_CHANNEL) private val eventChannel = - EventChannel(messenger, "com.example.flutter_template/recording_events") + EventChannel(messenger, AppConstants.RECORDING_EVENT_CHANNEL) private val mainHandler = Handler(Looper.getMainLooper()) private var eventSink: EventChannel.EventSink? = null diff --git a/android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingPreviewFactory.kt b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingPreviewFactory.kt similarity index 91% rename from android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingPreviewFactory.kt rename to android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingPreviewFactory.kt index c24b176..efbc8fa 100644 --- a/android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingPreviewFactory.kt +++ b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingPreviewFactory.kt @@ -1,9 +1,9 @@ -package com.example.flutter_template.recording +package com.gdfw.fxjk.recording import android.content.Context import android.view.View import androidx.camera.view.PreviewView -import com.example.flutter_template.MainActivity +import com.gdfw.fxjk.MainActivity import io.flutter.plugin.common.StandardMessageCodec import io.flutter.plugin.platform.PlatformView import io.flutter.plugin.platform.PlatformViewFactory diff --git a/android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingSession.kt b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingSession.kt similarity index 94% rename from android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingSession.kt rename to android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingSession.kt index 54229bb..ccd3189 100644 --- a/android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingSession.kt +++ b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingSession.kt @@ -1,4 +1,4 @@ -package com.example.flutter_template.recording +package com.gdfw.fxjk.recording import android.content.Context import androidx.lifecycle.LifecycleService diff --git a/android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingState.kt b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingState.kt similarity index 91% rename from android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingState.kt rename to android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingState.kt index ed400a2..fa6aef4 100644 --- a/android/app/src/main/kotlin/com/example/flutter_template/recording/RecordingState.kt +++ b/android/app/src/main/kotlin/com/gdfw/fxjk/recording/RecordingState.kt @@ -1,4 +1,4 @@ -package com.example.flutter_template.recording +package com.gdfw.fxjk.recording enum class RecordingState { IDLE, diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4b7b0906d62b1847e87f15cdcacf6a4f29..2a87b89db9dacb4296b8a544ad17e7e648466d0b 100644 GIT binary patch literal 2492 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 AQ2+n{ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b79bb8a35cc66c3c1fd44f5a5526c1b78be..01e0bacab84f8a9b93c092e5e301cb8296a6152d 100644 GIT binary patch delta 1612 zcmV-S2DACP1JVqT8Gix*007uvZqNV#1{q02K~#9!?O08SWLFtI-*jEO%No6s6hnLRnSN_S&0g|FfJq;H6VyC6jv@?7y{zPg@Is1(McvF zjSaOmo?yBmUku3W1ae1$J+$jAFOp$;KNJ801w;-ANbZu`lQ2SMW@HlpRfd;V&?_ObA5Q`ZpkUMEWE;yJ zS)AJ@SQT>nfCvb%Uf{&{(OUyN_C!>#Fj$8Ths6dzeiENPE1!Ev?`aD#VCxP5>K6Fe zk8$+|#AED-j(=1@Ne4L6kxH;)S&|j+JAyBNLZAI)XappK(>vj1$xw~6WMCoBt{nJ@yGFc)TEAb$htNtAXpLoh!7vyE5ZD4oLW zHsTP0n|-8BAPhxKf~Y_c0(#OBTimEo6I&h&k&bl6Kx)NIDV{(0MfXGBoIica?W6Gt zZl4UVTtdIXmgCkQE~JdUf+>I1?3Ihv%B3_Pkt&;YH%R>_*>B)w2V=X=X#nzKgw9KG-AVAZ&#;vjw!OErd?VohZ zo;4i2G0-wnD;{a$yWczBnp1KNNs~qGbUzarV-QpcXYO;)f2HXXBQ2w4WH7coyVtAp zf9!3C(pdo+ciZSfDq~Cl?~oE6J`Zd!%|dMCD*T4 z^@e5EBV$D?X@nR}Xr)=&R$khy|omQ1*#h^1u$#q zK>!Kh$zTi$M+PvGZpe@kH_9=hu7-$f54!$#kqZNDaAXD*v^x%f+~WFEF%-x^I5O6N z$Xbtc9*^I%8&EHy6Sn2Cv2IsZdaX=+VhzX{VlE3yaZ6+~YKV+={2&7mIXE&SPJiY2 z)x-M~qY%Y~->q-HSIxIYQ(ZFwg&jE+=I;$-W249Zeh>JO;wAu*=0-$4R+=JUf;znS zZt>Tb*V;{SsV-C)6lFgxojW2%H_uu?eucmD{TQCODCHln7V}CA(BVF2V z1QaYc?cCRv8XdnEJ=1B3jK-jYBMZi;j5z`ki9iIxQv%`ZXTTc=q9GjU1WFb+(u2<| zE%s~IjZnG67goT8R(xl|9^}87DEWUeba*X%2j8)W literal 442 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 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d34e7a88e3f88bea192c3a370d44689c3c..63ed1bbccf9633cedc6008dc4bd8a720470d966e 100644 GIT binary patch literal 5183 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 U1^4x^e=rD8Q`S{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372eebdb28e45604e46eeda8dd24651419bc0..3c6652a8f59a9790e89f298e5e9c6b991e92b1d2 100644 GIT binary patch literal 7256 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 literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` diff --git a/android/build/reports/problems/problems-report.html b/android/build/reports/problems/problems-report.html new file mode 100644 index 0000000..df50f6e --- /dev/null +++ b/android/build/reports/problems/problems-report.html @@ -0,0 +1,663 @@ + + + + + + + + + + + + + Gradle Configuration Cache + + + +
+ +
+ Loading... +
+ + + + + + diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png index dc9ada4725e9b0ddb1deab583e5b5102493aa332..9aa3aee654b9ab15d22f28f152e2b9661d3a657b 100644 GIT binary patch literal 46216 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 HwZHxY(u|t9 literal 10932 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 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..f0f1911a4ace668a8add3d18e47d17b11058c65b 100644 GIT binary patch delta 1265 zcmV{SoJABpx1Rm=OlP_?$>bqM z^O(elV3J+LS0s-`BE&^@;wFOm1Bwe>3hopHMHEpG7ve@yL=cP&k`NTZB#4iU2${s7 zftl%f^`q`_@%6;+bf;$$L$XOx-89tK->Gxz+*|hwN!*TMaDSV|9pGCwT%R?zK1&P& zN(f*CBFhDqo9pVN%Z2aFn1l$9eu^^_upX($eqlfZc(5EXx)QtZ!DE}v$^igSg)uk8 zI0t_4P5g8Yh`j{Q|3w1ufx7 z2Rbr@cJL)+h5t%OiUW*W%p|c+V!R z%V7Otv=FxSEta|9VinUf{Np0$XLLA&r+TFa*AC$QkAG)J*V`TU`<~c0C!EGF=|{&K zpN-X4cm&WZ3sBbd?p5ZMmnty|aCMCJ1J-M-kR3KR0wVzM#fkcBAI_B=JsFfm!-dJ_ zGf$WH?jPtT-OpV48@s19aBVY3Z6+Mt9iBZD8#7u23sm3KA&(!voozPREp@*$zKXFd z%Jp|0lYb4^Md=bT98hsciX;28A5Se@I^W1VylV8EI$xg{uivvZQX%Gs7>l$5`qgvT zHHJMW@#qOWaS}Vm@b;e&K~h+YeGf-d(+nDw1=7}Z;+NW$l(Vdq`TXa4<^orEIN`!P z_idNw9(S!

yW%%n5DZ7Rr&n$v{TXfm0LpmVaW)l={Rtzxz$gk)Ev1aBa~@n^0Hs zifKCw0Ohi&6eU$tGzcWY=5*?IbwA*8;BbK}13g%5az*I8F?;>a4=97yl~EW#Qf;sB z=m%_+Hqk0A>5^JC?O?o;&^mW8KchOEGGR~#p(=}+w3cOg=JI49gEEkjbZz!9i?dy7 zDt`c6{Jo~tR50|)K)R&mH4a_w>c`lTK{XHoRMi|fDPG)+V;efd$pe5B066Oj+AX_XzhFS|Z- zc`{O?B7ju2Bnc3z9fp!TojE!8{oL4l|9=cdxTKEs2F=-Y?|~sdV5k&xU5u5H3?P*S zLlIcpEf}>p8YA zV@o!tn^WiO&FM5)6i?Vh2YQRzOxksHT{i5lN|wuJtZ=H)aPD$CdqE=^s3BK^>VL^7 z%p8h?ViTRx37w#Jxw-XlW#itVZjqM;&Z8(Y4-Aclg$#iV3Qq*WQv%@>PSrK(0B2zu ztXI?Mla-xE*HF8U=ifeb8R8cfyXN@mxwHCql=zt?q$q_16=XiCOlpY&W)-*ok@B{~mBDp^T%xS+2fTHI9iSidu&M!c zq$eD6bG7O{3&tp=)qZ$O9C@HvsJJ|ZiMh2c3>El4Elhj2u&l0)gg`{Z+@_}OPGf!t b_`mTlw>#HV<-57N00000NkvXXu0mjfcOg#Q delta 390 zcmV;10eSxV36=wp8Gi!+006rnNM8T|0E$pdR7L;)|5U~J0au$Tw)XJ){%+3s=lA~6 z@BMVp`S<<*VaoaP`~U3u{%g(ou*=|m)B4`@{`33)?ezIj#Q6OF|6IuUF}e2O>+>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<$g81Xtvj6}9 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..af81e95d93d5f22366a7bf0c4e73f7ced349fa5f 100644 GIT binary patch delta 2013 zcmV<32O{{w1KU2d7CyK~#9!?V4SPTxS`_|IhQj?>T3_HrdT* zw^1<`k`S8;Z8f%jAQF@+=!G|05%EGVieOvyLPWd}EnZbbQBhGZdg+CTO4SI3fR^yJ>LNw5Jo_bh9CrVKxR0T;qWx>K7><8=>BbNU>a^7sMVf48~+q?xK9a1wVP z1N!9mwt!wE29+>?k_I${0WIJ_Avzs)+B|vy55M1j=q?+7OqKtKcUJLAsY*#efdq<;Y{se$mUS?sUjmw)Vh`q9?h ze}n26+&Y#mH(aJijAFOtZb=J9;s&AEl3I%+By1DZr2IJnBY zkU$9#Qp;TfmDB(WrplzWccgcuCDG-cDlT5~U-|CJa+5vb*&b*CjDa;U<+28eGF7CC zRGBDJWq&G2m6QVbREF?>33^5p{paqltn9(5T2GpQ+w?n`t+hDr^azkm|Xs zB2S-bEiZZ1VcgqXPkU~<2pB~Oa8|zbsoI`8&N7reqTSw|I=5elt zY!KQAmb&=pt+)dq5G#!=lefMldHh$+w0|yA^b|jN zm#P8>`luU(C1Y&}Py;t-9xD*Zva~O1&OjPY-dT6rWIH5f`B7wb0Rxgm`nu}tfsQ3S z3aeO1N!E6o_@m18TiTLZhWUojOI<8>H&BnI zF1j3WHUVBb+s4)45|z@-hA;$$QwQ9TnrU=s_Mk0kNCyPc62dhf{on!2x8VjYt%6pL z*|cxqq#*I{C!3jr2~^Os=zrBS%Vhd>2{xy;W29&@YHDAY!Bw|@@4ST3LY zOY7ou?OIjT7mi^FBV>oW4!Oqcwpf~Qq%B%kTF?SyaD##9ISe;;QzGcLdFHXj)D+f@ z#0pwLw;g6rRMiMQ#R#^;r(+LGOFDpr&mv@|UwaU#Q~iKX7nJ=Z?-*yWf1vD&Ds^jx`bk_N@GkIZZ?(34oY(2W@B z76fQKU!Kn^nZ!0$*0;9-t1DsQeCIz;w=Vp(CEd`dtN0M7CB2cKHGk+V<+t58z2``U zfiiSVHclWS=G(sFM%ZccYmdCrKZuDPl)>7lfStgr!3nAru|~v)GXBaLn$oX^U9V4X z|M*@KvQ;%Rc5>+}$9l?5U7LdyD7}vgI0IW(L&ot<`M?@6yEKWu?ZH`BGYng|Q)56E z9T5i_4Ohq?9SR+^!hf>#p_Ov37vfZM&54WMNa&EjJztpJeK=(p7Jm~4VxNHrp|81L z2CMC#N=BiG>IN7ZBGcjyC+!|&T&+wY2sPjAe7 zL=e&qG1Er55K>V{hmz%+fTABO&VYi}NLDkoJ;}@))BPuE`){whs>ZA?I>|e(k*B6@ z&dueq=n+5&0aiu&5(?4xk-hsWu&E{ulhm}Y2q8o!ZZ2=?)ReLF6S>Z}pJPCWVGZ&Y v0U;B9^HpGJ?ELG*4)hN64)hN6xYz#x^>C3X2UcEf00000NkvXXu0mjfi|pVG delta 435 zcmV;k0Zjhj55fbG8Gi!+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&JOovdH8X78Gix*007zX@K^u<19(Y9K~#9!-ImR3T~!pt*WTxTzxSG#moy2c zQBX?M1_~WiL?=4XAShZ;M1;;A=pSIAV?`&91aU0r$ca`EtB9q84s2=_qcj$A5Ti6{ z-sipd?ByV@)d^XBo1IG4rUw_H-FeYMPMIqwpLZ3vL9Fe zwZ9~YJ?Y!@dV^D(U%{Dka4~FTM*$oef~^?GXRtUgC+-yi%%FNFy`>>gd~^k`d++rRH|_{r1vwsk+Uyojwo{ zV6BUvRw25z3;|{M0wLEnc0SY2fy!S9#5nfzOez?$ybISq_R*Ti&^11n#HZ(BUAw(75uJG*Vb~s_D z%V&=1YfrfAU3~E;S}}5uT7aBT!Q_N{aL)byV^PoG2Y&sJd~QA_A-nZ%op@~%=dapK zjW;*^(SN1`T%>457!Q#{P)Go|VLgWm zazpNhkrIKm%Ni{4V#YYW)4fn4@)ml=rG=&dW)nO$g|Pr75i24A4c(5duM7?ah`mAC zoDKoVt)NwMnVKbp(Gt=OPfuWRYQ!!NQGEZ|hJXLNXw*e>t2cGxfp|2(6*+TYYD~>C zZ>drhvOON+aP{lWrBBz#QbeS7%KJ{%qPnBqs#>L9M`Y$xk3g(_!~gPY0b?LgQViYo z^4i7D^^5IVh*+ot%f{UN3oUR&?H*iaX0b;j-;+&-x074Jy&b(8SSKS`s+L7eh{PBhVJ&D5wgHPXyVh9RaFvV~UqVZqE6)=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)b&HssI20 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..89555f857ccf9bf6384f04cde9cac4753129ca32 100644 GIT binary patch delta 1906 zcmV-&2aWj71NIJ(8Gix*003^;-G2Z82R%tdK~#9!?U`MOT~`@~-|t&%?ejaC=}aeo z$DYHUrK z#I`m~VpC1hOp?iD&dgrl>&4ppoHLo6nKNgSXkj*s%{qrOn}27&>-~P#8X<`f&ZYQ3 zU2C{&xNEp;xQj2}=kFphaDo;<1R{`CPFV!bB#3g4(Sp=>Si9 zz>%Kxq#7mCk+;`S_ju;_bKm&c%$fI16=t^zR}v!8rhn|*$;9eFPxyix66uYbhH&Jc z@tZ%r^7a{1E#mKn;W~lWYe!II!c37VGGRqg>D)V$3~g41a>ATrHC(u0Pd+t$=A5bY zMcl7g&mn4DLF@~xNtuH=;`Sne|IPgLO^77 zWrBnVet&Zu$Id`Pr?yENq?B_l=L!lT0FD2d;*pc~`a3bs^R_C~*mkoAJy}&;zGx5c ztv>#h#lgdC*r<8%s+oU%h(Ss)9hKkZ=sb#(U9g(%X~c&qJqoj?Qx1bFseI5C5Y zqJR5`1Qd9D8%6^l01>==ac}MEXD(#{-7%LbT2t}l@zz~?>M0%FT<`wk6b_z8!!Jnq z3HRZR7!7Dcd}?RqxiM*7jzPOBh=6AAz1g~JPkpuh?yq0tUrw``0fdrH;D8wU?8 z;p{9wy+gN-N_wSss4d1_U=M>hY~SJ!zr+A&r#{0gS{Gt3C#=8>BNf(~SYIOzj!0|Q z@~pUlQZXgX`0~%$m*9Wo1ANhD!r-A`%9WAR&-^@C|2BWTan+E1!|BUFMzQU;9Sp#_KRC;(7_D=OWbSnt}RMrvd9eY zzdN6yqpl-7$jEwA#a-VCD^j-$7e!}iq;##^)I845Vb-n_YI)Z;s)&*A{i9X$@Wuic z@Iap1@VIZcfvZs$i*c`!;IS?E%zqdvdaa)Y7|V(*mimEHM_W@TTlJch{UjXd1vHNB zsC4qtYSayB>r&zd5N4@_r3Zg?%kn89y~&@SyXea}b7e2D5!I?}n5?09;_VwZB`*S{ zD?EsW-i-u%7exVL4(Dha; zq3&I4%-}puADw++-?>IrU8EzmkQQDsH)kKde@GOJ6t_Bcm8su@q$nmm2$05TprNO* z0!`<64sX12<-pI+Ib(2X7nBZ7=mczWcw^Z9z&a4p`=q2_+@h66m%2hRHtXVa`9AdQ zJ9CGAcj@@S%N37q)^y(E1%GohapG&^q2Xw}0k~~5XxDDmD_(eU_Kn+B2q#pg^O558 zNdZL8OvSTrx6Z!RvYFVZi(|37bm=#QcgUyXhI<-29vr4EC2e20vM|&->XP2^z#nHc zGSECx-WMJzfE9;oCZVAk%@K;W4d9fVV>aYI`K^uOWZ8<|e`a9l!hdZuHERffrv%bd zQ|b3iuLn;(6IYEo0^*ft!F|Q&XCkSlY6K@J<(IDb*u@Gug%EZ%=7ufz4SnM4>uY0v+3*?!Hvm;- zRYZjz2!IE?v=uEHRwv~VSX%KS13)7&&%9;oF*Z?~_`>MsUCm-=p*P_;dj6`-PQ_L( z8qLV|AW4Gl3+V%__!>rfg{w$&gCC!)ZM|>Z`n&5z&xMt-_G_2O1ORsL%+`-cErVE@ zgQQfh$hC9=C8V8tK~<^Lr9S4@ZO)pTGZ&<@UDN;je^k)`3<$b1Gng%Enb~7ov#`FD sGZ9%8=>I@nto;jn4R;N94R;OqzZFCgYFgIFbpQYW07*qoM6N<$f;*73lK=n! delta 447 zcmV;w0YLut4$cFR8Gi!+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!kPd8002ovPDHLkV1k*e^mPCL 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..b22470df7499cabc8ffa90cbd4a4707675a36ed1 100644 GIT binary patch literal 2949 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 Zxpx7IC@PekH?;r&002ovPDHLkV1k3!Yb*c& diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 797d452e458972bab9d994556c8305db4c827017..f0f1911a4ace668a8add3d18e47d17b11058c65b 100644 GIT binary patch delta 1265 zcmV{SoJABpx1Rm=OlP_?$>bqM z^O(elV3J+LS0s-`BE&^@;wFOm1Bwe>3hopHMHEpG7ve@yL=cP&k`NTZB#4iU2${s7 zftl%f^`q`_@%6;+bf;$$L$XOx-89tK->Gxz+*|hwN!*TMaDSV|9pGCwT%R?zK1&P& zN(f*CBFhDqo9pVN%Z2aFn1l$9eu^^_upX($eqlfZc(5EXx)QtZ!DE}v$^igSg)uk8 zI0t_4P5g8Yh`j{Q|3w1ufx7 z2Rbr@cJL)+h5t%OiUW*W%p|c+V!R z%V7Otv=FxSEta|9VinUf{Np0$XLLA&r+TFa*AC$QkAG)J*V`TU`<~c0C!EGF=|{&K zpN-X4cm&WZ3sBbd?p5ZMmnty|aCMCJ1J-M-kR3KR0wVzM#fkcBAI_B=JsFfm!-dJ_ zGf$WH?jPtT-OpV48@s19aBVY3Z6+Mt9iBZD8#7u23sm3KA&(!voozPREp@*$zKXFd z%Jp|0lYb4^Md=bT98hsciX;28A5Se@I^W1VylV8EI$xg{uivvZQX%Gs7>l$5`qgvT zHHJMW@#qOWaS}Vm@b;e&K~h+YeGf-d(+nDw1=7}Z;+NW$l(Vdq`TXa4<^orEIN`!P z_idNw9(S!

yW%%n5DZ7Rr&n$v{TXfm0LpmVaW)l={Rtzxz$gk)Ev1aBa~@n^0Hs zifKCw0Ohi&6eU$tGzcWY=5*?IbwA*8;BbK}13g%5az*I8F?;>a4=97yl~EW#Qf;sB z=m%_+Hqk0A>5^JC?O?o;&^mW8KchOEGGR~#p(=}+w3cOg=JI49gEEkjbZz!9i?dy7 zDt`c6{Jo~tR50|)K)R&mH4a_w>c`lTK{XHoRMi|fDPG)+V;efd$pe5B066Oj+AX_XzhFS|Z- zc`{O?B7ju2Bnc3z9fp!TojE!8{oL4l|9=cdxTKEs2F=-Y?|~sdV5k&xU5u5H3?P*S zLlIcpEf}>p8YA zV@o!tn^WiO&FM5)6i?Vh2YQRzOxksHT{i5lN|wuJtZ=H)aPD$CdqE=^s3BK^>VL^7 z%p8h?ViTRx37w#Jxw-XlW#itVZjqM;&Z8(Y4-Aclg$#iV3Qq*WQv%@>PSrK(0B2zu ztXI?Mla-xE*HF8U=ifeb8R8cfyXN@mxwHCql=zt?q$q_16=XiCOlpY&W)-*ok@B{~mBDp^T%xS+2fTHI9iSidu&M!c zq$eD6bG7O{3&tp=)qZ$O9C@HvsJJ|ZiMh2c3>El4Elhj2u&l0)gg`{Z+@_}OPGf!t b_`mTlw>#HV<-57N00000NkvXXu0mjfcOg#Q delta 390 zcmV;10eSxV36=wp8Gi!+006rnNM8T|0E$pdR7L;)|5U~J0au$Tw)XJ){%+3s=lA~6 z@BMVp`S<<*VaoaP`~U3u{%g(ou*=|m)B4`@{`33)?ezIj#Q6OF|6IuUF}e2O>+>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<$g81Xtvj6}9 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..65eaf05db200525f5ef31ec9ecfa8e9933fba7dd 100644 GIT binary patch literal 2665 zcmV-v3YPVWP)B-d7sPweOE~0{q$12&t5~|A@C4*2s{KH0uO8+6BNJk~c z0&c3{l{ekJ_c!l*p!wD*8b##RJ#d~@$e7l|%qhGfP5vvPq&P6*h=+}3JoACE}fEi(?^Ad6kh$9>)tC(AG-~4&~p{Ev&!nySa+%ZM16wfA&YSV$7 zhCs-&!HAEaJlr^Nu%T=Mdpf2 zZQKYAytRDvRUA11@xY}&4gdurU|Mq1^$be;wtej!-<{#BZ@HIFx_3{zs)w3~xH8!# z*lC1&idMtz*kXS0oiX2+RrMt6Xn1)0G@m>gKJv%b@sn<%0>dP{H5ECJ?JMWbxX;~D zx$CplRRwmBz!A~M2bCWT7n->LvF3wMES3xdjdN9-R@)VehLi~3`|iZHi!Ir$$m>X9 z5{^mYefmiF{a-8~VqlW|oEO=W3i^u1th?d*;OqB{cMrUd91jr~1&J`i{yp}G_f#w> z5k1f{?owz8n_g(dkuqL*u5t22OQhR~TXzFmmp9;Wtx|`0{5eTgHVgdML^ZTEaM%Jj_mquf5ppQe=A`v=v|`#If14JzWAu zuy+)`wqx5ljE(56`%91fdagDik|ixrNt;z>$KyvEyRI!?NY~P&WyTRkaBK#*97aVu zJ3<0PMA_ik8*ysZ8F{EcPHyzHNjz%|_bJnLGO}xim=HY*$;uri!gJe94 zBHVtB?wpkTqKboJCE%4pCI;BO%RhFwZUHIwTS=`_wC1Ckf44?An09#d7x-64dEhD9 zDxJ&EcQB+Um|Nhblitor_rfe?^gpCW19(+V zRpA`c=?5AYOhHu<*uIrz023QbwFI!^@ zI2hn;%8jQMmmAiT*;QcJXW*y>wrEl0j75$^8n9Ldsc=dt9sM`X(Jq{ZeXDR;waWvVe1S0Y(`va$=kBm9-n+!}dPzkp_|} zY_pISRX9BlWrZP`s) z6(u+Qb#qoA|J%9o#%_B=_*T9>3)?&Auqjo6aqSm3{v6PSn3ecKyR%j2@J+@LJh*EyYkMBCQv$x4j9;Cc}OQ^DI}_8F}k|#%!M=2Ye(wGo|t|6<$Ad! zK>&%kG)1MfMj6h#sjDm7_m7Z}uKkxaBrU>_DDDZwB9sjO@=W8z8!Zqf-8yUky14@` z3NT{*OmymG>)kh+^V6YcQLU*uCRH~_tLe{C5Dsc(&sV2Jg>Dr#!&=G`Edl1ov?Ol@ z7Ki>&M;Pw_A-`{s-!94LcF!R2P^+ns8gWSgX9oz9BLzkpr^CHp+dOeusrz7Fd(xtT zplB~;7o%mdfT5&dl8zRV8}X7`C6rW0iJYdBNp86o6}Hki6<+qqu`BMFpo6UPh~gTO z77~TCzA`5u)x{D~h)t8qS$EorK%6k~Y#w)G0ZoKv-^a63f_)QDSTqaIFNR@(EGsi|u!aT~Li zQ>Hzdc!|P^_0evy%<`n2TdPa_w|HGFEk6Pk5jxjotLds!-c_I9@WImNo_F(%>qdRUMD~*}h z2^YO^$A=f2te=U>P7r1L)JZ}PJ7wm4Y)7fEQ6@E^0&5Xe&B(T3@~ZMh`)ZTB%4!8j z#vsuPbRs@pKi6F4d8m{F5m#7vMq-aXe*`=|beA2{%U2qKs`zCokK5`dTifDSa$a1D zD*w-aD6eKm4fGe_-8yA{$<(_cnCZM9s&=6hrmPNA@C6Rf8+IE XGl^!fR`L9m00000NkvXXu0mjfzhV~| delta 572 zcmV-C0>l036v_mU8Gi!+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< KMNUMnLSTZJBsF>f 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..e1b5ada34dca99c8127f63c7eff97884ceb1a503 100644 GIT binary patch literal 4191 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 delta 850 zcmV-Y1FihuAl?R$8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;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^R^|8UO$Q diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 0ec303439225b78712f49115768196d8d76f6790..e1b5ada34dca99c8127f63c7eff97884ceb1a503 100644 GIT binary patch literal 4191 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 delta 850 zcmV-Y1FihuAl?R$8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;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^R^|8UO$Q 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..cae174be1ee194b408b97d268a71526c08f49743 100644 GIT binary patch literal 6662 zcmZ{pWl$VmlkN#_3GNPqySq&$xXT0&3=rJi0wK6FxVyW%5AKBEF2RCp(EY!A>)qOW z@9u{_UG#6e#S5uLFk4}mX2M70FUJj)3Pj38Ipu+!i*4M?-c=_C_vAnwaY$NUQ*5~|Q1s6xi34-VD56}34T!maHQ^--sY0Gh^cN_M7ARHkS z59PzZFa8(#zv}<*>i?3z4~%}r^AF0YLbR^bduD!2k%F83je^pKgK3kjCJje>!7w;x z*_(%`^l*c9u^*~lMXg2m3-OYU=2{F6tMsANvoxu;DZ=pmpY+~r`Aq&#`Zk2@BZv$Z zU=>vmTz?AHU`h7}z5vI?b=2OVo{Td!FY3C>GI3kAw}wuwKpN>CHqA?(myskI4l)Qk#PjPrS&MzL(BJ?)G+uqjLEW2r zjKlq>qx|(fr%FXoFQ)UBPKFa2ey#v1c{@K1w~#(2YW%Cy;-d^p2pq#h5Gh8AbO0`S z#(;me)|XbSRqIyg5FaqD{ctyui<6Q8M&4AAximKE+H7Z@J@+O;0WOco8T4Y~ zh5<{raGHOal?PHu(40RSIKHq~sczymBY29b%u+}+D51e3q8hhnoO;1GVQ~SoFF4oU zI7QTf;XK7Q&U>xT%NC-7exb+rH_f(i<>6=78@FD65?Q!TwUxtHj z_wEKY4>!_;(Y<=MFTKuaq9Y~V=(TXG&y%nf6!H>3M-Pw0WSdi1v$pE>6q=GP!fXH_3KDd> z!DEHBN}&aoud8?Tqy+@7k8%O2nO`Bk;2UX{#3N+!o1Yh1R7PUXjZz#e4q!-r2WbFc zJ%)o@n$mnSJUs1zH)m{%GlUaZ%%M)xJb!eQuubJ}b{WsuAGq~HP>_3cmgL9q;Aky| z9|R}>>1WQ0zmS{*Gl-~tSJFCc6TUr*<)Gw1mhg1JONeT1JvO)QNpX+*kgnWSImjOhMGmc(Q^pnebpjpshpY zaytlN=;}2yqX+X}-Uj;1ga^gO9#9-e|Fb`9Ds;n;9FauEAoG0>e{5=8I23lfe$Cx; z3s+=TACV(Q@OnB-q@Pt9GW*@MiE>DRn`0{6sVdW#Xg$%f8LAVXTKl`eQYGB-a8?&u zOO07)9{7RscmnT`{RHOjS^cXc{tR2WTSk^u?3w2d@Whgz8JtQ@?BTZx$A(l%v7tPhuy8N0 zD_vn{gO`U?5rIe*>RViEi7@K1nRjL%L%i6;yZTuT4X(H(Ym8p5j?cTw^6*m)Ma{mO zyUSC00@q*EJQuMB24sV&qtQEwX^m0YxH-gG(m`+~oN%s1J2=TH^FAAG`{k@-WZ|*u zfpjcQMZYxpNhx@4?gGIm9+LRqUbCmfLxBWiX3_byH?}%}>4S`i7D5xYO@+g;~f z`Zn7AGEKilChG_@hzX2t(lNWQ9Um@5S2soQ=M}Y>rJ3o5%-wh}*NyL0KZS;!o0u4N z{SJAY>}huz8vMS?rv}f2RQ%xce17jL;jVwO=fa~MivB)5B8n_$9esIVVQsD3>?H*Dm&EFE3W$PTr8nUozx-b{9Ndk>0%g;H1>AnK9ovP3PTf%}tm=Zg!0>iQE#l~;C zSXTiC+vDCkdtA4Mcb>!1Ns|5_tA65ydCHZj-)JdPy*CoHCAA{D&ZUY=QakJPGconm zK#6gS`3sNwaqR|r_2tF8>L($p7|$G&E%}eZop1Fz+2(Kx$Nb(G-3!~Ht7N%is%v;tW4W!(y0|GR)ckLcr}9vR127XOG7_$V^x$G25xcSSDeg z4L`rGXOv@L?6{7Hv2@ZbOeEG$PiV$KZ}e z!f?lbp^IPmPl7d5Lv=9rdbthWJ|Z@uziekPj7fm3W@99{xrx!~Pa`J}QOD>-E?o~~ z?*$9kf)IvVL!=V>gC%!+?zEfsKV2@@QZt7E)~6Bk=uZLRYj3CfdF@3X$jJ&N?H~7# zukXB0ldmR7P1i@|I&#*g`@_KAOxRlE&r7j-*A3ejYZ?*-8Z;-byh1|d1m5enO|=Nc z_&j_`xgFGI)O0&txD_P9(AZ$jzW9$-+igX@GDX0J7YoN-+CU;h?Kan*O>34|4MLdZ zyvhKQUX4~1Gz?49+uz2MAJbxnukS#_vcj!l2L2()u1MNJiLdtV@k{y3%diM$n6g(~ z(sF(%@*#=822;vmxNLe>bK=-uZ`~c4eD5k{ui-Rg?hDF&_ILB(7rfS8>qMb%Z_6SF@+q|1Z11%6^Ycd%P#OgJ*<_J+0Um?X6nxf7bpnEuZ+?_4A!U(9S zDYs1npgoDR>5d$>(Xsihnj^0gK&G~FNqbM!)hU*sb%-`uw@pT+OQ!Rh=t-mQLpLDNoi>Kf+NQ*YJR)aC{ zeX$}Le-yPj5(g#ARtkWgbP+I$9xOT^d$7ovROjXTwbHvCq#K#aiy6Je1SFU*#M!2U zT^Qjp^R~VDK3Hiw~NHX=!l@^>{w&<$O0b1$KqxQ{1#)w$IQYQlyC!{t@rtLA4?cRaS-z7*-kein6xM4~8T6S6!^_sk6O^GDuJO{(y^wK>P^4Afq~{DHkb_c%SKsWJFmd&@ z=)Q-%%8OGIcB%FD&XvKzRkf_#$Zk;JH_^$CfhK@upoB)C0s1e0V7LZ$a9x67#|sn- zTIw-ZOR7g&bpGwQ8JWRVZ0M?zRE9BE^6^Lvs^gHbrX2s1Xp<}=uufqPK6T?PsdHo- z+mI@beFG_DV75g%XaOh`r4}k_eZDT?i1NENGAi#Ttk~&d<|E*QGaC8xcqRNGqUl4~ zVaz8Fxne*T*8n@cYjSA5uxFvDUENL)MF;vUvgj?iJ~}0lr4;;KBK-7Ll%$P7T&rAq zxY81(KiRe!wrV}}AWcP)SM034B31}i`C@l(*10zI$EJ$;Z?0M^h=yJiWlo`JrNdm z^p{LJ=swafs|u)WA=FZCcmz)!TO6@hib9eO z_{Ttpow3X}duFJ)?6IQNPml_#%@x%1NN5S5=TP}~o;J9;u%-nKmP_VJegXv!HBxa? zukh(EZ;X(U1f=Se^d65P>?Y`=A$a{RIfYUQlly7HvvSuRVx8vUP7lD`{Ts~9<5&2M z?QbSP$g%861W1rfF;X!PHm1MxUogyEc%a~+uexxxp+hSE4Q`z{Ft*3Qwt3p=H#zdy z&+m^^DQ%lm+Qk+^Felj!`wpa-ejy9GCkq&kb@vdM=f(!WzStORg~nQogw_EB64;RCRB5Z^z@w;J-l#n zug2^7fk}nnT%JdA_OLohGa&KELK=@3KFL1=MobWz>T4V4cNtN109{0A&}xZmb=@9$ z;^hKu-VNvZ5b9%CL!k5%0EVs$q6t3zPRrt&cDY2`p4`CgLQ2__IEBRIy`(i&vp>X# z=>(*Odw-}nWfiM35(xM;p2SM4h~D9?D7zhIL?-b_7tPf=1%5+f99WXXS11FDLL6s) zW8@@sTe_Hwn>0v>EqQ!x=R59Y+MN+3%JHk`oi$cpApYAsg3Tq3R9-i*>8)ZeckPEB zS3hm!l=LGCQ32UW&fL|bM|Nie2ETKxA&Tw%Ls=W`h)#_aJ1>J}hCbJ zbPlhdM4u=!Eh)Oy+(q5*2x0hltlL;pHT;MPEkw1QAx;`DG4aHAgS8nmBj|EO^DeXL z&hU@Tru+{@2PsdS_`2NghgZ|#4=v?*Y-6Y)&ZOv8ZV*WX2wL*5Y*xnRO#ME`ezM?8 zVXhhQ*RidZNAgIZSMD`q;Htgw>&-T}N*Wjaz(uRB6eW);7(v#bbxAdol1C=r(**nsp%Xna1iV1(3CDGpWVuYCT3vql^@IJQocUy?|OzqFcl>YbB$B3?zIae{}?Bnv<^GH`UkO6Q2a7c4XXeiiF_~)N#Y%( z^?L4cQ1BePY4$qp1%esXun=7whQ{VIyQ9G!d-{Q)Wg z1^#OtHMstZ^!yUA%;flYNG`AbE2FhZ6*yV}&I3 zWQXX=E2U0o?2)a z%65OvS0cAsY`!GJ{T`d>Tz%mVqLY19?X|j*W<%x_(8=}dra-mxc6rPSk!#`4w`ypr z*$(yaOJlPW-bcjAW#dKj+lq~D3oY)Me2>ok9|4-LAd%wHHbh1*^Xi1Uaw`(y5hoOM^q$|`^jK|hGR-z)n(>Zpu(Dhn2RGuYY0$JcN$#F zvrpl9IdNh+^o_u;Jtc!Hu8F-{Hx6sxOQ5w|m-C zYFi}!Y(^rke-zz9DaMf<9wNQF!-|*CmvF8N3(Du$_})ka>;dvF^8ahoJbl;0#9$HO zL9Z=C0|IsYuEZImc{~k#wMXxz!{j@;GEn1c=}ko0RJ{(mAmi6YO>W-){AVsCC_4BB z4n;QLdIaLKmD&k{Ddtc*!Rn@!J<-Q+HrCthJN+M-N@IfTK2bLRshH?=bl!|)WSnNX zZ#Nu5A`Ett>qzqYfx@*^f2L5g$>(mYdy)_ziCHl{yD7S`-X^QQq7@#5>z;^sp^&vxTc7nL=zu1?k13YTbP+$Fqk)S5Z`v^|c92FKCSIss_11o=XkKI*-B zXm<@8tGH7RD3ExcOI?W3h9g(qa`GB|!hP#$uYqu0vGq|tqbFG#Sb6S;d|o})Zh0)y zt8e>~2tsHd`m9|jdxDy2T*ZEet1pzV{D2XIOFpX;iPJt{L+Ys`>jMc6W`4^ z^S{xI|HCK#KgjXlu*JW4#=qIe|0DkoP-OIR{0)KUqQ56x2*c$cz5^%!Nd;65G!Fa^ DVV}-= delta 1668 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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..653faf8ffd281ab108382556e3b2b8348fc099e2 100644 GIT binary patch literal 5362 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 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..24ef2515e6c7a544e07bc4650109124ad8b9a9da 100644 GIT binary patch literal 6139 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 delta 1410 zcmV-|1%3MaFNzD08Gi!+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=C$6VE_OC diff --git a/ios/Runner/RecordingPlugin.swift b/ios/Runner/RecordingPlugin.swift index 7722915..c5e34db 100644 --- a/ios/Runner/RecordingPlugin.swift +++ b/ios/Runner/RecordingPlugin.swift @@ -410,6 +410,12 @@ private final class RecordingCameraController: NSObject, AVCaptureFileOutputReco } } +private enum RecordingChannelNames { + static let packageName = "com.gdfw.fxjk" + static let method = "\(packageName)/recording" + static let events = "\(packageName)/recording_events" +} + final class RecordingPlugin: NSObject, FlutterPlugin, FlutterStreamHandler { private let controller = RecordingCameraController.shared private var eventSink: FlutterEventSink? @@ -421,13 +427,13 @@ final class RecordingPlugin: NSObject, FlutterPlugin, FlutterStreamHandler { registrar.register(RecordingPreviewFactory(), withId: "recording-camera-preview") let methodChannel = FlutterMethodChannel( - name: "com.example.flutter_template/recording", + name: RecordingChannelNames.method, binaryMessenger: messenger ) registrar.addMethodCallDelegate(plugin, channel: methodChannel) let eventChannel = FlutterEventChannel( - name: "com.example.flutter_template/recording_events", + name: RecordingChannelNames.events, binaryMessenger: messenger ) eventChannel.setStreamHandler(plugin) diff --git a/lib/app/app.dart b/lib/app/app.dart index c6332fb..2cf4249 100644 --- a/lib/app/app.dart +++ b/lib/app/app.dart @@ -1,16 +1,46 @@ import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:flutter_template/app/config/app_config.dart'; -import 'package:flutter_template/app/router/app_navigator.dart'; -import 'package:flutter_template/app/theme/app_theme.dart'; -import 'package:flutter_template/features/recording/recording_page.dart'; +import 'package:recording_tool/app/config/app_config.dart'; +import 'package:recording_tool/app/router/app_navigator.dart'; +import 'package:recording_tool/app/theme/app_theme.dart'; +import 'package:recording_tool/features/recording/recording_page.dart'; +import 'package:recording_tool/features/recording/view-model/view_model_recording.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; -class FlutterTemplateApp extends StatelessWidget { +class FlutterTemplateApp extends ConsumerStatefulWidget { const FlutterTemplateApp({super.key}); + @override + ConsumerState createState() => _FlutterTemplateAppState(); +} + +class _FlutterTemplateAppState extends ConsumerState + with WidgetsBindingObserver { + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addObserver(this); + WidgetsBinding.instance.addPostFrameCallback((_) { + ref.read(recordingViewModelProvider.notifier).getClipboardContent(); + }); + } + + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + if (state == AppLifecycleState.resumed) { + ref.read(recordingViewModelProvider.notifier).getClipboardContent(); + } + } + + @override + void dispose() { + WidgetsBinding.instance.removeObserver(this); + super.dispose(); + } + @override Widget build(BuildContext context) { return ScreenUtilInit( diff --git a/lib/app/bootstrap.dart b/lib/app/bootstrap.dart index 9cce0ef..d67c39d 100644 --- a/lib/app/bootstrap.dart +++ b/lib/app/bootstrap.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_template/app/app.dart'; -import 'package:flutter_template/app/config/app_config.dart'; -import 'package:flutter_template/core/cache/app_storage.dart'; -import 'package:flutter_template/core/logging/app_logger.dart'; +import 'package:recording_tool/app/app.dart'; +import 'package:recording_tool/app/config/app_config.dart'; +import 'package:recording_tool/core/cache/app_storage.dart'; +import 'package:recording_tool/core/logging/app_logger.dart'; import 'package:package_info_plus/package_info_plus.dart'; class AppBootstrapper { diff --git a/lib/core/network/api_client.dart b/lib/core/network/api_client.dart index 0cd1456..3acfdfd 100644 --- a/lib/core/network/api_client.dart +++ b/lib/core/network/api_client.dart @@ -1,9 +1,9 @@ import 'dart:convert'; import 'package:dio/dio.dart'; -import 'package:flutter_template/core/network/api_exception.dart'; -import 'package:flutter_template/core/network/api_response.dart'; -import 'package:flutter_template/core/network/http_method.dart'; +import 'package:recording_tool/core/network/api_exception.dart'; +import 'package:recording_tool/core/network/api_response.dart'; +import 'package:recording_tool/core/network/http_method.dart'; typedef JsonParser = T Function(dynamic json); diff --git a/lib/core/network/header_interceptor.dart b/lib/core/network/header_interceptor.dart index 9dc287a..87f29dc 100644 --- a/lib/core/network/header_interceptor.dart +++ b/lib/core/network/header_interceptor.dart @@ -1,10 +1,10 @@ import 'dart:io'; import 'package:dio/dio.dart'; -import 'package:flutter_template/app/config/app_config.dart'; -import 'package:flutter_template/core/cache/app_storage.dart'; -import 'package:flutter_template/core/cache/storage_keys.dart'; -import 'package:flutter_template/core/utils/device_utils.dart'; +import 'package:recording_tool/app/config/app_config.dart'; +import 'package:recording_tool/core/cache/app_storage.dart'; +import 'package:recording_tool/core/cache/storage_keys.dart'; +import 'package:recording_tool/core/utils/device_utils.dart'; class HeaderInterceptor extends Interceptor { @override diff --git a/lib/core/network/network_monitor.dart b/lib/core/network/network_monitor.dart index a91e858..2d3c425 100644 --- a/lib/core/network/network_monitor.dart +++ b/lib/core/network/network_monitor.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_template/core/network/network_state.dart'; +import 'package:recording_tool/core/network/network_state.dart'; class NetworkMonitor { final _controller = StreamController.broadcast(); diff --git a/lib/core/network/offline_queue/offline_queue_interceptor.dart b/lib/core/network/offline_queue/offline_queue_interceptor.dart index 099e75d..eac7405 100644 --- a/lib/core/network/offline_queue/offline_queue_interceptor.dart +++ b/lib/core/network/offline_queue/offline_queue_interceptor.dart @@ -1,7 +1,7 @@ import 'package:dio/dio.dart'; -import 'package:flutter_template/core/network/network_monitor.dart'; -import 'package:flutter_template/core/network/offline_queue/offline_queue_manager.dart'; -import 'package:flutter_template/core/network/offline_queue/offline_request.dart'; +import 'package:recording_tool/core/network/network_monitor.dart'; +import 'package:recording_tool/core/network/offline_queue/offline_queue_manager.dart'; +import 'package:recording_tool/core/network/offline_queue/offline_request.dart'; import 'package:uuid/uuid.dart'; class OfflineQueueInterceptor extends Interceptor { diff --git a/lib/core/network/offline_queue/offline_queue_manager.dart b/lib/core/network/offline_queue/offline_queue_manager.dart index 8f518a4..f60d09c 100644 --- a/lib/core/network/offline_queue/offline_queue_manager.dart +++ b/lib/core/network/offline_queue/offline_queue_manager.dart @@ -1,11 +1,11 @@ import 'dart:async'; import 'package:dio/dio.dart'; -import 'package:flutter_template/core/logging/app_logger.dart'; -import 'package:flutter_template/core/network/network_monitor.dart'; -import 'package:flutter_template/core/network/offline_queue/offline_queue_state.dart'; -import 'package:flutter_template/core/network/offline_queue/offline_queue_storage.dart'; -import 'package:flutter_template/core/network/offline_queue/offline_request.dart'; +import 'package:recording_tool/core/logging/app_logger.dart'; +import 'package:recording_tool/core/network/network_monitor.dart'; +import 'package:recording_tool/core/network/offline_queue/offline_queue_state.dart'; +import 'package:recording_tool/core/network/offline_queue/offline_queue_storage.dart'; +import 'package:recording_tool/core/network/offline_queue/offline_request.dart'; class OfflineQueueManager { OfflineQueueManager({ diff --git a/lib/core/network/offline_queue/offline_queue_storage.dart b/lib/core/network/offline_queue/offline_queue_storage.dart index c8748d4..0d32cb8 100644 --- a/lib/core/network/offline_queue/offline_queue_storage.dart +++ b/lib/core/network/offline_queue/offline_queue_storage.dart @@ -1,6 +1,6 @@ -import 'package:flutter_template/core/cache/app_storage.dart'; -import 'package:flutter_template/core/cache/storage_keys.dart'; -import 'package:flutter_template/core/network/offline_queue/offline_request.dart'; +import 'package:recording_tool/core/cache/app_storage.dart'; +import 'package:recording_tool/core/cache/storage_keys.dart'; +import 'package:recording_tool/core/network/offline_queue/offline_request.dart'; class OfflineQueueStorage { Future> loadQueue() async { diff --git a/lib/core/network/providers/dio_providers.dart b/lib/core/network/providers/dio_providers.dart index 23bb29c..0672449 100644 --- a/lib/core/network/providers/dio_providers.dart +++ b/lib/core/network/providers/dio_providers.dart @@ -1,11 +1,11 @@ import 'package:dio/dio.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_template/app/config/app_config.dart'; -import 'package:flutter_template/core/network/api_client.dart'; -import 'package:flutter_template/core/network/header_interceptor.dart'; -import 'package:flutter_template/core/network/offline_queue/offline_queue_interceptor.dart'; -import 'package:flutter_template/core/network/providers/network_providers.dart'; -import 'package:flutter_template/core/network/providers/offline_queue_providers.dart'; +import 'package:recording_tool/app/config/app_config.dart'; +import 'package:recording_tool/core/network/api_client.dart'; +import 'package:recording_tool/core/network/header_interceptor.dart'; +import 'package:recording_tool/core/network/offline_queue/offline_queue_interceptor.dart'; +import 'package:recording_tool/core/network/providers/network_providers.dart'; +import 'package:recording_tool/core/network/providers/offline_queue_providers.dart'; final dioProvider = Provider((ref) { final dio = Dio( diff --git a/lib/core/network/providers/network_providers.dart b/lib/core/network/providers/network_providers.dart index 0ca8449..93a092b 100644 --- a/lib/core/network/providers/network_providers.dart +++ b/lib/core/network/providers/network_providers.dart @@ -1,6 +1,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_template/core/network/network_monitor.dart'; -import 'package:flutter_template/core/network/network_state.dart'; +import 'package:recording_tool/core/network/network_monitor.dart'; +import 'package:recording_tool/core/network/network_state.dart'; final networkMonitorProvider = Provider((ref) { final monitor = NetworkMonitor()..start(); diff --git a/lib/core/network/providers/offline_queue_providers.dart b/lib/core/network/providers/offline_queue_providers.dart index c2019e9..5ef7142 100644 --- a/lib/core/network/providers/offline_queue_providers.dart +++ b/lib/core/network/providers/offline_queue_providers.dart @@ -1,8 +1,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_template/core/network/offline_queue/offline_queue_manager.dart'; -import 'package:flutter_template/core/network/offline_queue/offline_queue_state.dart'; -import 'package:flutter_template/core/network/offline_queue/offline_queue_storage.dart'; -import 'package:flutter_template/core/network/providers/network_providers.dart'; +import 'package:recording_tool/core/network/offline_queue/offline_queue_manager.dart'; +import 'package:recording_tool/core/network/offline_queue/offline_queue_state.dart'; +import 'package:recording_tool/core/network/offline_queue/offline_queue_storage.dart'; +import 'package:recording_tool/core/network/providers/network_providers.dart'; import 'package:dio/dio.dart'; final offlineQueueStorageProvider = Provider((ref) { diff --git a/lib/features/recording/model/model_clipboard.dart b/lib/features/recording/model/model_clipboard.dart new file mode 100644 index 0000000..0befd58 --- /dev/null +++ b/lib/features/recording/model/model_clipboard.dart @@ -0,0 +1,44 @@ +/// 剪切板内容数据模型 +class ClipboardRecordingModel { + final String title; + final int startTimestamp; + final int endTimestamp; + final String address; + + ClipboardRecordingModel({ + required this.title, + required this.startTimestamp, + required this.endTimestamp, + required this.address, + }); + + factory ClipboardRecordingModel.fromJson(Map json) { + return ClipboardRecordingModel( + title: _readString(json, 'title'), + startTimestamp: _readInt(json, 'startTimestamp'), + endTimestamp: _readInt(json, 'endTimestamp'), + address: _readString(json, 'address'), + ); + } + + Map toJson() { + return { + 'title': title, + 'startTimestamp': startTimestamp, + 'endTimestamp': endTimestamp, + 'address': address, + }; + } + + static String _readString(Map json, String key) { + final value = json[key]; + if (value is String) return value; + throw FormatException('Clipboard field "$key" must be a String.'); + } + + static int _readInt(Map json, String key) { + final value = json[key]; + if (value is int) return value; + throw FormatException('Clipboard field "$key" must be an int.'); + } +} diff --git a/lib/features/recording/model/model_recording.dart b/lib/features/recording/model/model_recording.dart new file mode 100644 index 0000000..2a7a4ed --- /dev/null +++ b/lib/features/recording/model/model_recording.dart @@ -0,0 +1,26 @@ +import 'package:recording_tool/features/recording/model/model_clipboard.dart'; + +class RecordingModel { + /// 剪切板内容 + final ClipboardRecordingModel clipboardRecordingModel; + + RecordingModel({required this.clipboardRecordingModel}); + + factory RecordingModel.fromJson(Map json) { + return RecordingModel( + clipboardRecordingModel: ClipboardRecordingModel.fromJson( + json['clipboardRecordingModel'], + ), + ); + } + Map toJson() { + return {'clipboardRecordingModel': clipboardRecordingModel.toJson()}; + } + + RecordingModel copyWith({ClipboardRecordingModel? clipboardRecordingModel}) { + return RecordingModel( + clipboardRecordingModel: + clipboardRecordingModel ?? this.clipboardRecordingModel, + ); + } +} diff --git a/lib/features/recording/recording_channel_names.dart b/lib/features/recording/recording_channel_names.dart new file mode 100644 index 0000000..ae2f4e0 --- /dev/null +++ b/lib/features/recording/recording_channel_names.dart @@ -0,0 +1,5 @@ +abstract final class RecordingChannelNames { + static const packageName = 'com.gdfw.fxjk'; + static const method = '$packageName/recording'; + static const events = '$packageName/recording_events'; +} diff --git a/lib/features/recording/recording_page.dart b/lib/features/recording/recording_page.dart index e78b55f..a14ea52 100644 --- a/lib/features/recording/recording_page.dart +++ b/lib/features/recording/recording_page.dart @@ -3,11 +3,12 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_template/features/recording/recording_platform.dart'; -import 'package:flutter_template/features/recording/recording_session_controller.dart'; -import 'package:flutter_template/features/recording/widgets/camera_preview_widget.dart'; -import 'package:flutter_template/features/recording/widgets/recording_touch_lock_overlay.dart'; -import 'package:flutter_template/shared/widgets/widgets.dart'; +import 'package:recording_tool/features/recording/recording_platform.dart'; +import 'package:recording_tool/features/recording/recording_session_controller.dart'; +import 'package:recording_tool/features/recording/view-model/view_model_recording.dart'; +import 'package:recording_tool/features/recording/widgets/camera_preview_widget.dart'; +import 'package:recording_tool/features/recording/widgets/recording_touch_lock_overlay.dart'; +import 'package:recording_tool/shared/widgets/widgets.dart'; import 'package:permission_handler/permission_handler.dart'; class RecordingPage extends ConsumerStatefulWidget { @@ -27,6 +28,7 @@ class _RecordingPageState extends ConsumerState { } Future _bootstrap() async { + await ref.read(recordingViewModelProvider.notifier).getClipboardContent(); await _enterRecordingMode(); // Allow PlatformView to attach before binding CameraX preview. await Future.delayed(const Duration(milliseconds: 400)); diff --git a/lib/features/recording/recording_platform.dart b/lib/features/recording/recording_platform.dart index c43dc8a..593d211 100644 --- a/lib/features/recording/recording_platform.dart +++ b/lib/features/recording/recording_platform.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:io'; import 'package:flutter/services.dart'; +import 'package:recording_tool/features/recording/recording_channel_names.dart'; enum RecordingState { idle, @@ -47,10 +48,10 @@ class RecordingPlatform { RecordingPlatform._(); static const MethodChannel _channel = MethodChannel( - 'com.example.flutter_template/recording', + RecordingChannelNames.method, ); static const EventChannel _events = EventChannel( - 'com.example.flutter_template/recording_events', + RecordingChannelNames.events, ); static bool get isSupported => diff --git a/lib/features/recording/recording_session_controller.dart b/lib/features/recording/recording_session_controller.dart index 440f6a2..70dcd0d 100644 --- a/lib/features/recording/recording_session_controller.dart +++ b/lib/features/recording/recording_session_controller.dart @@ -3,8 +3,8 @@ import 'dart:io'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_template/core/permission/permission_service.dart'; -import 'package:flutter_template/features/recording/recording_platform.dart'; +import 'package:recording_tool/core/permission/permission_service.dart'; +import 'package:recording_tool/features/recording/recording_platform.dart'; import 'package:permission_handler/permission_handler.dart'; class RecordingSessionState { @@ -74,8 +74,8 @@ class RecordingSessionState { final recordingSessionControllerProvider = NotifierProvider( - RecordingSessionController.new, -); + RecordingSessionController.new, + ); class RecordingSessionController extends Notifier { StreamSubscription? _statusSubscription; @@ -161,9 +161,7 @@ class RecordingSessionController extends Notifier { if (!shouldRetry) { rethrow; } - await Future.delayed( - Duration(milliseconds: 150 * (attempt + 1)), - ); + await Future.delayed(Duration(milliseconds: 150 * (attempt + 1))); } } throw StateError('initializePreview retry exhausted'); diff --git a/lib/features/recording/view-model/view_model_recording.dart b/lib/features/recording/view-model/view_model_recording.dart new file mode 100644 index 0000000..7fc59c0 --- /dev/null +++ b/lib/features/recording/view-model/view_model_recording.dart @@ -0,0 +1,56 @@ +import 'dart:convert'; + +import 'package:flutter/services.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/legacy.dart'; +import 'package:recording_tool/core/logging/app_logger.dart'; +import 'package:recording_tool/features/recording/model/model_clipboard.dart'; +import 'package:recording_tool/features/recording/model/model_recording.dart'; + +final recordingViewModelProvider = + StateNotifierProvider((ref) { + return RecordingViewModel(ref); + }); + +class RecordingViewModel extends StateNotifier { + RecordingViewModel(this.ref) + : super( + RecordingModel( + clipboardRecordingModel: ClipboardRecordingModel( + title: '', + startTimestamp: 0, + endTimestamp: 0, + address: '', + ), + ), + ); + final Ref ref; + + /// 从剪切板获取内容 + Future getClipboardContent() async { + try { + final clipboardData = await Clipboard.getData(Clipboard.kTextPlain); + final text = clipboardData?.text; + AppLogger.debug('读取剪切板内容:$text'); + + if (text == null || text.trim().isEmpty) { + AppLogger.info('剪切板内容为空,跳过录制信息解析'); + return; + } + + final decoded = jsonDecode(text); + if (decoded is! Map) { + AppLogger.warning('剪切板内容不是 JSON 对象,跳过录制信息解析'); + return; + } + + final clipboardRecordingModel = ClipboardRecordingModel.fromJson(decoded); + state = state.copyWith(clipboardRecordingModel: clipboardRecordingModel); + AppLogger.info('剪切板录制信息解析成功:${clipboardRecordingModel.toJson()}'); + } on FormatException catch (error) { + AppLogger.warning('剪切板录制信息格式错误:$error'); + } catch (error, stackTrace) { + AppLogger.debug('读取剪切板录制信息失败', error: error, stackTrace: stackTrace); + } + } +} diff --git a/lib/main.dart b/lib/main.dart index a0077f4..cfad6fc 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,3 +1,3 @@ -import 'package:flutter_template/app/bootstrap.dart'; +import 'package:recording_tool/app/bootstrap.dart'; Future main() => AppBootstrapper.bootstrap(); diff --git a/lib/shared/widgets/app_avatar.dart b/lib/shared/widgets/app_avatar.dart index bcd50e2..8725e21 100644 --- a/lib/shared/widgets/app_avatar.dart +++ b/lib/shared/widgets/app_avatar.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_template/shared/widgets/app_network_image.dart'; +import 'package:recording_tool/shared/widgets/app_network_image.dart'; class AppAvatar extends StatelessWidget { const AppAvatar({super.key, this.imageUrl, this.initials, this.size = 40}); diff --git a/lib/shared/widgets/app_card.dart b/lib/shared/widgets/app_card.dart index d7989e6..d1464b6 100644 --- a/lib/shared/widgets/app_card.dart +++ b/lib/shared/widgets/app_card.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_template/app/theme/app_theme.dart'; +import 'package:recording_tool/app/theme/app_theme.dart'; class AppCard extends StatelessWidget { const AppCard({ diff --git a/lib/shared/widgets/app_error_view.dart b/lib/shared/widgets/app_error_view.dart index d1f0f02..21c0e78 100644 --- a/lib/shared/widgets/app_error_view.dart +++ b/lib/shared/widgets/app_error_view.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_template/shared/widgets/app_button.dart'; +import 'package:recording_tool/shared/widgets/app_button.dart'; class AppErrorView extends StatelessWidget { const AppErrorView({ diff --git a/lib/shared/widgets/app_search_bar.dart b/lib/shared/widgets/app_search_bar.dart index eb9cfea..52bbbc3 100644 --- a/lib/shared/widgets/app_search_bar.dart +++ b/lib/shared/widgets/app_search_bar.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_template/core/utils/rate_limiter.dart'; +import 'package:recording_tool/core/utils/rate_limiter.dart'; class AppSearchBar extends StatefulWidget { const AppSearchBar({ diff --git a/lib/shared/widgets/app_status_view.dart b/lib/shared/widgets/app_status_view.dart index 73f8430..9e09e2e 100644 --- a/lib/shared/widgets/app_status_view.dart +++ b/lib/shared/widgets/app_status_view.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:flutter_template/shared/widgets/app_empty_view.dart'; -import 'package:flutter_template/shared/widgets/app_error_view.dart'; -import 'package:flutter_template/shared/widgets/app_loading_view.dart'; +import 'package:recording_tool/shared/widgets/app_empty_view.dart'; +import 'package:recording_tool/shared/widgets/app_error_view.dart'; +import 'package:recording_tool/shared/widgets/app_loading_view.dart'; enum AppViewStatus { loading, empty, error, content } diff --git a/lib/shared/widgets/app_toast.dart b/lib/shared/widgets/app_toast.dart index 9d4d309..e08be24 100644 --- a/lib/shared/widgets/app_toast.dart +++ b/lib/shared/widgets/app_toast.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:flutter_template/app/router/app_navigator.dart'; +import 'package:recording_tool/app/router/app_navigator.dart'; class AppToast { AppToast._(); diff --git a/pubspec.yaml b/pubspec.yaml index ebbd40a..4c45bb0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,8 +1,8 @@ -name: flutter_template -description: "A reusable Flutter quick-start template for Android and iOS." +name: recording_tool +description: "A recording tool for Android and iOS." # 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 +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 @@ -66,7 +66,6 @@ dev_dependencies: # The following section is specific to Flutter packages. flutter: - # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. diff --git a/lib/features/webview/test.html b/test.html similarity index 100% rename from lib/features/webview/test.html rename to test.html diff --git a/test/core/permission/permission_service_test.dart b/test/core/permission/permission_service_test.dart index ac5b39c..74e94bd 100644 --- a/test/core/permission/permission_service_test.dart +++ b/test/core/permission/permission_service_test.dart @@ -1,10 +1,10 @@ import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; -import 'package:permission_handler/permission_handler.dart'; +// ignore: depend_on_referenced_packages import 'package:permission_handler_platform_interface/permission_handler_platform_interface.dart'; -import 'package:flutter_template/core/permission/permission_service.dart'; +import 'package:recording_tool/core/permission/permission_service.dart'; void main() { group('PermissionService.requestMissing', () { @@ -42,37 +42,42 @@ void main() { expect(result[Permission.microphone], PermissionStatus.granted); }); - test('preserves permanently denied permissions without requesting them', - () async { - final platform = FakePermissionHandlerPlatform( - statuses: { - Permission.camera: PermissionStatus.permanentlyDenied, - Permission.microphone: PermissionStatus.denied, - }, - requestResults: { - Permission.microphone: PermissionStatus.granted, - }, - ); - PermissionHandlerPlatform.instance = platform; + test( + 'preserves permanently denied permissions without requesting them', + () async { + final platform = FakePermissionHandlerPlatform( + statuses: { + Permission.camera: PermissionStatus.permanentlyDenied, + Permission.microphone: PermissionStatus.denied, + }, + requestResults: { + Permission.microphone: PermissionStatus.granted, + }, + ); + PermissionHandlerPlatform.instance = platform; - final result = await PermissionService.requestMissing([ - Permission.camera, - Permission.microphone, - ]); + final result = await PermissionService.requestMissing([ + Permission.camera, + Permission.microphone, + ]); - expect(platform.requestCalls, >[ - [Permission.microphone], - ]); - expect(result[Permission.camera], PermissionStatus.permanentlyDenied); - expect(result[Permission.microphone], PermissionStatus.granted); - }); + expect(platform.requestCalls, >[ + [Permission.microphone], + ]); + expect(result[Permission.camera], PermissionStatus.permanentlyDenied); + expect(result[Permission.microphone], PermissionStatus.granted); + }, + ); }); group('iOS permission configuration', () { test('Podfile enables camera and microphone permission macros', () { final podfile = File('ios/Podfile').readAsStringSync(); - expect(podfile, contains("flutter_additional_ios_build_settings(target)")); + expect( + podfile, + contains('flutter_additional_ios_build_settings(target)'), + ); expect(podfile, contains("'PERMISSION_CAMERA=1'")); expect(podfile, contains("'PERMISSION_MICROPHONE=1'")); }); diff --git a/test/features/recording/model_clipboard_test.dart b/test/features/recording/model_clipboard_test.dart new file mode 100644 index 0000000..762e0b0 --- /dev/null +++ b/test/features/recording/model_clipboard_test.dart @@ -0,0 +1,41 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:recording_tool/features/recording/model/model_clipboard.dart'; + +void main() { + group('ClipboardRecordingModel', () { + const clipboardJson = { + 'title': '王东方 丨李想 空中格斗赛', + 'startTimestamp': 1717334400, + 'endTimestamp': 1717334400, + 'address': '广州市番禺区·粤港澳大湾区青年人才双创小镇', + }; + + test('parses mini program clipboard JSON', () { + final model = ClipboardRecordingModel.fromJson(clipboardJson); + + expect(model.title, '王东方 丨李想 空中格斗赛'); + expect(model.startTimestamp, 1717334400); + expect(model.endTimestamp, 1717334400); + expect(model.address, '广州市番禺区·粤港澳大湾区青年人才双创小镇'); + expect(model.toJson(), clipboardJson); + }); + + test('throws FormatException when required field is missing', () { + final json = Map.from(clipboardJson)..remove('title'); + + expect( + () => ClipboardRecordingModel.fromJson(json), + throwsA(isA()), + ); + }); + + test('throws FormatException when required field has wrong type', () { + final json = {...clipboardJson, 'startTimestamp': '1717334400'}; + + expect( + () => ClipboardRecordingModel.fromJson(json), + throwsA(isA()), + ); + }); + }); +} diff --git a/test/features/recording/recording_platform_test.dart b/test/features/recording/recording_platform_test.dart index 8b02c1b..558e479 100644 --- a/test/features/recording/recording_platform_test.dart +++ b/test/features/recording/recording_platform_test.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_template/features/recording/recording_platform.dart'; +import 'package:recording_tool/features/recording/recording_platform.dart'; void main() { group('RecordingPlatform support', () { diff --git a/test/features/recording/view_model_recording_test.dart b/test/features/recording/view_model_recording_test.dart new file mode 100644 index 0000000..20ebcc9 --- /dev/null +++ b/test/features/recording/view_model_recording_test.dart @@ -0,0 +1,148 @@ +import 'package:flutter/services.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:recording_tool/features/recording/view-model/view_model_recording.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + const defaultClipboardTitle = ''; + const validClipboardText = + '{"title":"王东方 丨李想 空中格斗赛","startTimestamp":1717334400,"endTimestamp":1717334400,"address":"广州市番禺区·粤港澳大湾区青年人才双创小镇"}'; + + Future setClipboardText(String? text) async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(SystemChannels.platform, (call) async { + if (call.method == 'Clipboard.getData') { + return text == null ? null : {'text': text}; + } + return null; + }); + } + + tearDown(() { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(SystemChannels.platform, null); + }); + + group('RecordingViewModel.getClipboardContent', () { + test( + 'updates state when clipboard contains valid mini program JSON', + () async { + await setClipboardText(validClipboardText); + final container = ProviderContainer(); + addTearDown(container.dispose); + + await container + .read(recordingViewModelProvider.notifier) + .getClipboardContent(); + + final clipboardModel = container + .read(recordingViewModelProvider) + .clipboardRecordingModel; + expect(clipboardModel.title, '王东方 丨李想 空中格斗赛'); + expect(clipboardModel.startTimestamp, 1717334400); + expect(clipboardModel.endTimestamp, 1717334400); + expect(clipboardModel.address, '广州市番禺区·粤港澳大湾区青年人才双创小镇'); + }, + ); + + test('keeps default state when clipboard is empty', () async { + await setClipboardText(''); + final container = ProviderContainer(); + addTearDown(container.dispose); + + await container + .read(recordingViewModelProvider.notifier) + .getClipboardContent(); + + expect( + container + .read(recordingViewModelProvider) + .clipboardRecordingModel + .title, + defaultClipboardTitle, + ); + }); + + test('keeps default state when clipboard is not JSON', () async { + await setClipboardText('hello'); + final container = ProviderContainer(); + addTearDown(container.dispose); + + await container + .read(recordingViewModelProvider.notifier) + .getClipboardContent(); + + expect( + container + .read(recordingViewModelProvider) + .clipboardRecordingModel + .title, + defaultClipboardTitle, + ); + }); + + test('keeps default state when clipboard JSON is not an object', () async { + await setClipboardText('[1,2,3]'); + final container = ProviderContainer(); + addTearDown(container.dispose); + + await container + .read(recordingViewModelProvider.notifier) + .getClipboardContent(); + + expect( + container + .read(recordingViewModelProvider) + .clipboardRecordingModel + .title, + defaultClipboardTitle, + ); + }); + + test( + 'keeps default state when clipboard JSON misses required fields', + () async { + await setClipboardText('{"title":"王东方 丨李想 空中格斗赛"}'); + final container = ProviderContainer(); + addTearDown(container.dispose); + + await container + .read(recordingViewModelProvider.notifier) + .getClipboardContent(); + + expect( + container + .read(recordingViewModelProvider) + .clipboardRecordingModel + .title, + defaultClipboardTitle, + ); + }, + ); + + test( + 'keeps default state when clipboard JSON has wrong field type', + () async { + await setClipboardText( + '{"title":"王东方 丨李想 空中格斗赛","startTimestamp":"1717334400","endTimestamp":1717334400,"address":"广州市番禺区·粤港澳大湾区青年人才双创小镇"}', + ); + final container = ProviderContainer(); + addTearDown(container.dispose); + + await container + .read(recordingViewModelProvider.notifier) + .getClipboardContent(); + + expect( + container + .read(recordingViewModelProvider) + .clipboardRecordingModel + .title, + defaultClipboardTitle, + ); + }, + ); + }); +} diff --git a/test/widget_test.dart b/test/widget_test.dart index 6708152..3218049 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -1,14 +1,13 @@ +import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_template/app/app.dart'; +import 'package:recording_tool/app/app.dart'; void main() { - testWidgets('template app renders demo page', (tester) async { + testWidgets('recording app renders recording page', (tester) async { await tester.pumpWidget(const ProviderScope(child: FlutterTemplateApp())); await tester.pumpAndSettle(); - expect(find.text('Flutter Template'), findsOneWidget); - expect(find.text('通用 Flutter 快速开发模板'), findsOneWidget); - expect(find.text('增加计数'), findsOneWidget); + expect(find.byIcon(Icons.fiber_manual_record), findsOneWidget); }); }