From 02c1c87b46dad95888e06d51f01ed7eb6d40f9d2 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 13:55:33 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E5=8D=87=E7=BA=A7=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E7=89=88=E6=9C=AC=202.=20=E8=A7=A3=E5=86=B3=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=AD=A6=E5=91=8A=E6=97=A5=E5=BF=97=E9=97=AE?= =?UTF-8?q?=E9=A2=98=203.=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle.kts | 13 +- .../main/kotlin/com/gdfw/fxjk/AppConstants.kt | 1 + .../main/kotlin/com/gdfw/fxjk/MainActivity.kt | 73 +++++++ ios/Runner/AppDelegate.swift | 3 + ios/Runner/PlatformInfoPlugin.swift | 71 +++++++ lib/app/bootstrap.dart | 4 +- lib/app/config/app_config.dart | 6 +- lib/app/router/app_navigator.dart | 4 +- lib/core/platform/app_platform_info.dart | 78 ++++++++ lib/core/utils/device_utils.dart | 33 +--- .../recording/recording_platform.dart | 14 +- lib/shared/widgets/app_network_image.dart | 4 +- lib/shared/widgets/app_refresh_list.dart | 2 +- pubspec.lock | 184 +++++++++--------- pubspec.yaml | 6 +- 15 files changed, 351 insertions(+), 145 deletions(-) create mode 100644 ios/Runner/PlatformInfoPlugin.swift create mode 100644 lib/core/platform/app_platform_info.dart diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 883955a..0162c54 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -1,7 +1,6 @@ plugins { id("com.android.application") - id("kotlin-android") - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + // The Flutter Gradle Plugin must be applied after the Android Gradle plugin. id("dev.flutter.flutter-gradle-plugin") } @@ -17,10 +16,6 @@ android { targetCompatibility = JavaVersion.VERSION_11 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() - } - defaultConfig { applicationId = appPackageName // You can update the following values to match your application needs. @@ -40,6 +35,12 @@ android { } } +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11 + } +} + dependencies { val cameraxVersion = "1.4.1" implementation("androidx.camera:camera-core:$cameraxVersion") diff --git a/android/app/src/main/kotlin/com/gdfw/fxjk/AppConstants.kt b/android/app/src/main/kotlin/com/gdfw/fxjk/AppConstants.kt index 0bce95b..4e17c50 100644 --- a/android/app/src/main/kotlin/com/gdfw/fxjk/AppConstants.kt +++ b/android/app/src/main/kotlin/com/gdfw/fxjk/AppConstants.kt @@ -2,6 +2,7 @@ package com.gdfw.fxjk object AppConstants { const val PACKAGE_NAME = "com.gdfw.fxjk" + const val PLATFORM_INFO_CHANNEL = "$PACKAGE_NAME/platform_info" 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" diff --git a/android/app/src/main/kotlin/com/gdfw/fxjk/MainActivity.kt b/android/app/src/main/kotlin/com/gdfw/fxjk/MainActivity.kt index af058ba..302579d 100644 --- a/android/app/src/main/kotlin/com/gdfw/fxjk/MainActivity.kt +++ b/android/app/src/main/kotlin/com/gdfw/fxjk/MainActivity.kt @@ -1,13 +1,17 @@ package com.gdfw.fxjk +import android.content.pm.ApplicationInfo +import android.os.Build import androidx.camera.view.PreviewView import com.gdfw.fxjk.recording.RecordingPlatformHandler import com.gdfw.fxjk.recording.RecordingPreviewFactory import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine +import io.flutter.plugin.common.MethodChannel class MainActivity : FlutterActivity() { private var platformHandler: RecordingPlatformHandler? = null + private var platformInfoChannel: MethodChannel? = null var recordingPreviewView: PreviewView? = null private set @@ -22,6 +26,20 @@ class MainActivity : FlutterActivity() { RecordingPreviewFactory(this), ) + platformInfoChannel = + MethodChannel( + flutterEngine.dartExecutor.binaryMessenger, + AppConstants.PLATFORM_INFO_CHANNEL, + ).also { channel -> + channel.setMethodCallHandler { call, result -> + when (call.method) { + "packageInfo" -> result.success(packageInfoMap()) + "deviceInfo" -> result.success(deviceInfoMap()) + else -> result.notImplemented() + } + } + } + platformHandler = RecordingPlatformHandler( this, @@ -40,8 +58,63 @@ class MainActivity : FlutterActivity() { } override fun onDestroy() { + platformInfoChannel?.setMethodCallHandler(null) + platformInfoChannel = null platformHandler?.dispose() platformHandler = null super.onDestroy() } + + private fun packageInfoMap(): Map { + val packageInfo = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + packageManager.getPackageInfo( + packageName, + android.content.pm.PackageManager.PackageInfoFlags.of(0), + ) + } else { + @Suppress("DEPRECATION") + packageManager.getPackageInfo(packageName, 0) + } + + val appName = + applicationInfo.loadLabel(packageManager)?.toString().orEmpty() + val versionCode = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + packageInfo.longVersionCode.toString() + } else { + @Suppress("DEPRECATION") + packageInfo.versionCode.toString() + } + + return mapOf( + "appName" to appName, + "packageName" to packageName, + "version" to packageInfo.versionName.orEmpty(), + "buildNumber" to versionCode, + ) + } + + private fun deviceInfoMap(): Map { + val flags = applicationInfo.flags + val isEmulator = + Build.FINGERPRINT.startsWith("generic") || + Build.FINGERPRINT.startsWith("unknown") || + Build.MODEL.contains("google_sdk") || + Build.MODEL.contains("Emulator") || + Build.MODEL.contains("Android SDK built for x86") || + Build.MANUFACTURER.contains("Genymotion") || + Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic") || + Build.PRODUCT == "google_sdk" || + flags and ApplicationInfo.FLAG_DEBUGGABLE != 0 && + Build.HARDWARE.contains("ranchu") + + return mapOf( + "platform" to "android", + "brand" to Build.BRAND, + "model" to Build.MODEL, + "systemVersion" to Build.VERSION.RELEASE, + "isPhysicalDevice" to !isEmulator, + ) + } } diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index ef10c4d..288f3bd 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -15,5 +15,8 @@ import UIKit if let registrar = engineBridge.pluginRegistry.registrar(forPlugin: "RecordingPlugin") { RecordingPlugin.register(with: registrar) } + if let registrar = engineBridge.pluginRegistry.registrar(forPlugin: "PlatformInfoPlugin") { + PlatformInfoPlugin.register(with: registrar) + } } } diff --git a/ios/Runner/PlatformInfoPlugin.swift b/ios/Runner/PlatformInfoPlugin.swift new file mode 100644 index 0000000..ee64159 --- /dev/null +++ b/ios/Runner/PlatformInfoPlugin.swift @@ -0,0 +1,71 @@ +import Flutter +import UIKit + +final class PlatformInfoPlugin: NSObject, FlutterPlugin { + static func register(with registrar: FlutterPluginRegistrar) { + let channel = FlutterMethodChannel( + name: "com.gdfw.fxjk/platform_info", + binaryMessenger: registrar.messenger() + ) + let plugin = PlatformInfoPlugin() + registrar.addMethodCallDelegate(plugin, channel: channel) + } + + func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { + switch call.method { + case "packageInfo": + result(packageInfoMap()) + case "deviceInfo": + result(deviceInfoMap()) + default: + result(FlutterMethodNotImplemented) + } + } + + private func packageInfoMap() -> [String: String] { + let bundle = Bundle.main + return [ + "appName": displayName(bundle: bundle), + "packageName": bundle.bundleIdentifier ?? "", + "version": bundle.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "", + "buildNumber": bundle.object(forInfoDictionaryKey: "CFBundleVersion") as? String ?? "", + ] + } + + private func deviceInfoMap() -> [String: Any] { + let device = UIDevice.current + return [ + "platform": "ios", + "brand": device.systemName, + "model": machineIdentifier(), + "systemVersion": device.systemVersion, + "isPhysicalDevice": !isSimulator(), + ] + } + + private func displayName(bundle: Bundle) -> String { + if let displayName = bundle.object(forInfoDictionaryKey: "CFBundleDisplayName") as? String { + return displayName + } + return bundle.object(forInfoDictionaryKey: "CFBundleName") as? String ?? "" + } + + private func isSimulator() -> Bool { + #if targetEnvironment(simulator) + return true + #else + return false + #endif + } + + private func machineIdentifier() -> String { + var systemInfo = utsname() + uname(&systemInfo) + let mirror = Mirror(reflecting: systemInfo.machine) + let identifier = mirror.children.reduce(into: "") { value, element in + guard let byte = element.value as? Int8, byte != 0 else { return } + value.append(String(UnicodeScalar(UInt8(byte)))) + } + return identifier + } +} diff --git a/lib/app/bootstrap.dart b/lib/app/bootstrap.dart index d67c39d..84b6589 100644 --- a/lib/app/bootstrap.dart +++ b/lib/app/bootstrap.dart @@ -5,7 +5,7 @@ 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'; +import 'package:recording_tool/core/platform/app_platform_info.dart'; class AppBootstrapper { AppBootstrapper._(); @@ -18,7 +18,7 @@ class AppBootstrapper { await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); await AppStorage.init(); - final packageInfo = await PackageInfo.fromPlatform(); + final packageInfo = await AppPlatformInfo.packageInfo(); AppConfig.configure(environment: environment, packageInfo: packageInfo); diff --git a/lib/app/config/app_config.dart b/lib/app/config/app_config.dart index ba258e0..1141816 100644 --- a/lib/app/config/app_config.dart +++ b/lib/app/config/app_config.dart @@ -1,4 +1,4 @@ -import 'package:package_info_plus/package_info_plus.dart'; +import 'package:recording_tool/core/platform/app_platform_info.dart'; enum AppEnvironment { dev, staging, prod } @@ -18,13 +18,13 @@ class AppConfig { AppConfig._(); static late EnvironmentValues current; - static PackageInfo? packageInfo; + static AppPackageInfo? packageInfo; static const appName = '飞行极控'; static void configure({ required AppEnvironment environment, - PackageInfo? packageInfo, + AppPackageInfo? packageInfo, }) { AppConfig.packageInfo = packageInfo; current = switch (environment) { diff --git a/lib/app/router/app_navigator.dart b/lib/app/router/app_navigator.dart index 59bfdcc..63d5e98 100644 --- a/lib/app/router/app_navigator.dart +++ b/lib/app/router/app_navigator.dart @@ -94,8 +94,8 @@ class AppNavigator { barrierDismissible: dismissible, transitionDuration: duration, reverseTransitionDuration: duration, - pageBuilder: (_, __, ___) => page, - transitionsBuilder: (_, animation, __, child) { + pageBuilder: (_, _, _) => page, + transitionsBuilder: (_, animation, _, child) { return FadeTransition(opacity: animation, child: child); }, ), diff --git a/lib/core/platform/app_platform_info.dart b/lib/core/platform/app_platform_info.dart new file mode 100644 index 0000000..3aba846 --- /dev/null +++ b/lib/core/platform/app_platform_info.dart @@ -0,0 +1,78 @@ +import 'dart:io'; + +import 'package:flutter/services.dart'; + +class AppPackageInfo { + const AppPackageInfo({ + required this.appName, + required this.packageName, + required this.version, + required this.buildNumber, + }); + + factory AppPackageInfo.fromMap(Map map) { + return AppPackageInfo( + appName: map['appName'] as String? ?? '', + packageName: map['packageName'] as String? ?? '', + version: map['version'] as String? ?? '', + buildNumber: map['buildNumber'] as String? ?? '', + ); + } + + final String appName; + final String packageName; + final String version; + final String buildNumber; +} + +class AppDeviceInfo { + const AppDeviceInfo({ + required this.platform, + required this.isPhysicalDevice, + required this.values, + }); + + factory AppDeviceInfo.fromMap(Map map) { + final values = {}; + for (final entry in map.entries) { + final key = entry.key; + final value = entry.value; + if (key is String && value != null) { + values[key] = value.toString(); + } + } + + final isPhysicalDevice = map['isPhysicalDevice']; + return AppDeviceInfo( + platform: map['platform'] as String? ?? Platform.operatingSystem, + isPhysicalDevice: isPhysicalDevice is bool ? isPhysicalDevice : true, + values: values, + ); + } + + final String platform; + final bool isPhysicalDevice; + final Map values; +} + +class AppPlatformInfo { + AppPlatformInfo._(); + + static const MethodChannel _channel = MethodChannel( + 'com.gdfw.fxjk/platform_info', + ); + + static Future packageInfo() async { + final result = await _channel.invokeMapMethod( + 'packageInfo', + ); + return AppPackageInfo.fromMap(result ?? const {}); + } + + static Future deviceInfo() async { + final result = await _channel.invokeMapMethod( + 'deviceInfo', + ); + return AppDeviceInfo.fromMap(result ?? const {}); + } +} diff --git a/lib/core/utils/device_utils.dart b/lib/core/utils/device_utils.dart index cb3fa0b..73a8f4f 100644 --- a/lib/core/utils/device_utils.dart +++ b/lib/core/utils/device_utils.dart @@ -1,7 +1,7 @@ import 'dart:io'; -import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/material.dart'; +import 'package:recording_tool/core/platform/app_platform_info.dart'; class DeviceUtils { DeviceUtils._(); @@ -19,36 +19,13 @@ class DeviceUtils { MediaQuery.paddingOf(context).bottom; static Future isPhysicalDevice() async { - final plugin = DeviceInfoPlugin(); - if (Platform.isAndroid) { - return (await plugin.androidInfo).isPhysicalDevice; - } - if (Platform.isIOS) { - return (await plugin.iosInfo).isPhysicalDevice; - } - return true; + return (await AppPlatformInfo.deviceInfo()).isPhysicalDevice; } static Future> deviceInfo() async { - final plugin = DeviceInfoPlugin(); - if (Platform.isAndroid) { - final info = await plugin.androidInfo; - return { - 'platform': 'android', - 'brand': info.brand, - 'model': info.model, - 'systemVersion': info.version.release, - }; + if (!Platform.isAndroid && !Platform.isIOS) { + return {'platform': Platform.operatingSystem}; } - if (Platform.isIOS) { - final info = await plugin.iosInfo; - return { - 'platform': 'ios', - 'brand': info.systemName, - 'model': info.utsname.machine, - 'systemVersion': info.systemVersion, - }; - } - return {'platform': Platform.operatingSystem}; + return (await AppPlatformInfo.deviceInfo()).values; } } diff --git a/lib/features/recording/recording_platform.dart b/lib/features/recording/recording_platform.dart index 5cb55c0..a7936a2 100644 --- a/lib/features/recording/recording_platform.dart +++ b/lib/features/recording/recording_platform.dart @@ -86,13 +86,17 @@ class RecordingPlatform { bool enableDoNotDisturb = true, String? displayName, }) async { + final args = { + 'withAudio': withAudio, + 'enableDoNotDisturb': enableDoNotDisturb, + }; + if (displayName != null) { + args['displayName'] = displayName; + } + final result = await _channel.invokeMapMethod( 'startRecording', - { - 'withAudio': withAudio, - 'enableDoNotDisturb': enableDoNotDisturb, - if (displayName != null) 'displayName': displayName, - }, + args, ); return RecordingStartResult( outputPath: result?['outputPath'] as String?, diff --git a/lib/shared/widgets/app_network_image.dart b/lib/shared/widgets/app_network_image.dart index 8e19545..3926ce4 100644 --- a/lib/shared/widgets/app_network_image.dart +++ b/lib/shared/widgets/app_network_image.dart @@ -24,7 +24,7 @@ class AppNetworkImage extends StatelessWidget { width: width, height: height, fit: fit, - placeholder: (_, __) => ColoredBox( + placeholder: (_, _) => ColoredBox( color: Theme.of(context).colorScheme.surfaceContainerHighest, child: const Center( child: SizedBox.square( @@ -33,7 +33,7 @@ class AppNetworkImage extends StatelessWidget { ), ), ), - errorWidget: (_, __, ___) => ColoredBox( + errorWidget: (_, _, _) => ColoredBox( color: Theme.of(context).colorScheme.surfaceContainerHighest, child: Icon( Icons.image_not_supported_outlined, diff --git a/lib/shared/widgets/app_refresh_list.dart b/lib/shared/widgets/app_refresh_list.dart index 72c2333..a5c8578 100644 --- a/lib/shared/widgets/app_refresh_list.dart +++ b/lib/shared/widgets/app_refresh_list.dart @@ -61,7 +61,7 @@ class _AppRefreshListState extends State> { : ListView.separated( padding: widget.padding, itemCount: widget.items.length, - separatorBuilder: (_, __) => + separatorBuilder: (_, _) => widget.separator ?? const SizedBox(height: 8), itemBuilder: (context, index) { return widget.itemBuilder(context, widget.items[index], index); diff --git a/pubspec.lock b/pubspec.lock index 46ac430..fe4314f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -89,6 +89,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.2" + code_assets: + dependency: transitive + description: + name: code_assets + sha256: bf394f466ba9205f1812a0433b392d6af280f155f56651eda7c18cc32ed493b8 + url: "https://pub.dev" + source: hosted + version: "1.2.1" collection: dependency: transitive description: @@ -149,26 +157,10 @@ packages: dependency: transitive description: name: dbus - sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270 + sha256: "792974a4007974fbc5c1b5433eb2330a9db3e368c3f906253af4c007d0f49a91" url: "https://pub.dev" source: hosted - version: "0.7.12" - device_info_plus: - dependency: "direct main" - description: - name: device_info_plus - sha256: b4fed1b2835da9d670d7bed7db79ae2a94b0f5ad6312268158a9b5479abbacdd - url: "https://pub.dev" - source: hosted - version: "12.4.0" - device_info_plus_platform_interface: - dependency: transitive - description: - name: device_info_plus_platform_interface - sha256: e1ea89119e34903dca74b883d0dd78eb762814f97fb6c76f35e9ff74d261a18f - url: "https://pub.dev" - source: hosted - version: "7.0.3" + version: "0.7.13" dio: dependency: "direct main" description: @@ -242,10 +234,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "6.0.0" flutter_localizations: dependency: "direct main" description: flutter @@ -279,10 +271,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: "1ded017b39c8e15c8948ea855070a5ff8ff8b3d5e83f3446e02d6bb12add7ad9" + sha256: "35882981abcbfb8c15b286f0cd690ff25bac12d95eff3e25ee207f37d4c42e7f" url: "https://pub.dev" source: hosted - version: "2.2.4" + version: "2.3.0" flutter_test: dependency: "direct dev" description: flutter @@ -309,6 +301,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.3" + hooks: + dependency: transitive + description: + name: hooks + sha256: "9a62a50b50b769a737bc0a8ff381f333529df3ab746b2f6b02e83760231455ba" + url: "https://pub.dev" + source: hosted + version: "2.0.2" http: dependency: transitive description: @@ -349,6 +349,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.5" + jni: + dependency: transitive + description: + name: jni + sha256: c2230682d5bc2362c1c9e8d3c7f406d9cbba23ab3f2e203a025dd47e0fb2e68f + url: "https://pub.dev" + source: hosted + version: "1.0.0" + jni_flutter: + dependency: transitive + description: + name: jni_flutter + sha256: "8b59e590786050b1cd866677dddaf76b1ade5e7bc751abe04b86e84d379d3ba6" + url: "https://pub.dev" + source: hosted + version: "1.0.1" leak_tracker: dependency: transitive description: @@ -377,10 +393,10 @@ packages: dependency: transitive description: name: lints - sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 + sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df" url: "https://pub.dev" source: hosted - version: "5.1.1" + version: "6.1.0" logging: dependency: transitive description: @@ -437,6 +453,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.2" + objective_c: + dependency: transitive + description: + name: objective_c + sha256: "6cb691c686fa2838c6deb34980d426145c2a5d537491cb83d463c33cdbc726ed" + url: "https://pub.dev" + source: hosted + version: "9.4.1" octo_image: dependency: transitive description: @@ -453,22 +477,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.0" - package_info_plus: - dependency: "direct main" - description: - name: package_info_plus - sha256: "468c26b4254ab01979fa5e4a98cb343ea3631b9acee6f21028997419a80e1a20" - url: "https://pub.dev" - source: hosted - version: "9.0.1" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086" - url: "https://pub.dev" - source: hosted - version: "3.2.1" path: dependency: transitive description: @@ -497,18 +505,18 @@ packages: dependency: transitive description: name: path_provider_android - sha256: "149441ca6e4f38193b2e004c0ca6376a3d11f51fa5a77552d8bd4d2b0c0912ba" + sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd" url: "https://pub.dev" source: hosted - version: "2.2.23" + version: "2.3.1" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "6d13aece7b3f5c5a9731eaf553ff9dcbc2eff41087fd2df587fd0fed9a3eb0c4" + sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699" url: "https://pub.dev" source: hosted - version: "2.5.1" + version: "2.6.0" path_provider_linux: dependency: transitive description: @@ -537,10 +545,10 @@ packages: dependency: "direct main" description: name: permission_handler - sha256: bc917da36261b00137bbc8896bf1482169cd76f866282368948f032c8c1caae1 + sha256: fe54465bcc62a4564c6e4db337bbaded6c0c0fa6e10487414436d163114784f6 url: "https://pub.dev" source: hosted - version: "12.0.1" + version: "12.0.3" permission_handler_android: dependency: transitive description: @@ -553,10 +561,10 @@ packages: dependency: transitive description: name: permission_handler_apple - sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023 + sha256: e20daf680eef1ca62ffe8c8c526b778cc386d50137c77ac71c8ec9c88c13fb9d url: "https://pub.dev" source: hosted - version: "9.4.7" + version: "9.4.9" permission_handler_html: dependency: transitive description: @@ -629,6 +637,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.0" + record_use: + dependency: transitive + description: + name: record_use + sha256: "2551bd8eecfe95d14ae75f6021ad0248be5c27f138c2ec12fcb52b500b3ba1ed" + url: "https://pub.dev" + source: hosted + version: "0.6.0" riverpod: dependency: transitive description: @@ -657,10 +673,10 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: e8d4762b1e2e8578fc4d0fd548cebf24afd24f49719c08974df92834565e2c53 + sha256: a2c49fc1fed7140cadd892d765bd47edbe4ac0b9c7e7e3c493dcb58126f99cf0 url: "https://pub.dev" source: hosted - version: "2.4.23" + version: "2.4.25" shared_preferences_foundation: dependency: transitive description: @@ -766,42 +782,42 @@ packages: dependency: transitive description: name: sqflite - sha256: e2297b1da52f127bc7a3da11439985d9b536f75070f3325e62ada69a5c585d03 + sha256: "58a799e6ac17dd32fbab93813d39ed835a75ccc0f8f85b8955fe318c6712b082" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.4.3" sqflite_android: dependency: transitive description: name: sqflite_android - sha256: ecd684501ebc2ae9a83536e8b15731642b9570dc8623e0073d227d0ee2bfea88 + sha256: d0548f9d7422a2dae99ec6f8b0a3074463b132d216fa5ba0d230eeefc901983b url: "https://pub.dev" source: hosted - version: "2.4.2+2" + version: "2.4.3" sqflite_common: dependency: transitive description: name: sqflite_common - sha256: "6ef422a4525ecc601db6c0a2233ff448c731307906e92cabc9ba292afaae16a6" + sha256: cce558075afe2a83f3fd7fc123acd6b090683e4f23910d44fbb31ecd7800b014 url: "https://pub.dev" source: hosted - version: "2.5.6" + version: "2.5.9" sqflite_darwin: dependency: transitive description: name: sqflite_darwin - sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3" + sha256: "164a5d73ab87a134566057219988bafde837029a64264e61f1f04376ef3cfcd2" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.4.3" sqflite_platform_interface: dependency: transitive description: name: sqflite_platform_interface - sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920" + sha256: f84939f84350d92d04416f8bc4dc52d3896aec7716cc9e80cf0146342139dc50 url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" stack_trace: dependency: transitive description: @@ -838,10 +854,10 @@ packages: dependency: transitive description: name: synchronized - sha256: c254ade258ec8282947a0acbbc90b9575b4f19673533ee46f2f6e9b3aeefd7c0 + sha256: "93b153dcb6a26dcddee6ca087dd634b53e38c10b5aa163e8e49501a776456153" url: "https://pub.dev" source: hosted - version: "3.4.0" + version: "3.4.1" term_glyph: dependency: transitive description: @@ -894,18 +910,18 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "3bb000251e55d4a209aa0e2e563309dc9bb2befea2295fd0cec1f51760aac572" + sha256: b413d49b73867ac08dd2f9890efd3cc11f2a0e577618d50843440a1fb3776c32 url: "https://pub.dev" source: hosted - version: "6.3.29" + version: "6.3.32" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: cfde38aa257dae62ffe79c87fab20165dfdf6988c1d31b58ebf59b9106062aad + sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0" url: "https://pub.dev" source: hosted - version: "6.3.6" + version: "6.4.1" url_launcher_linux: dependency: transitive description: @@ -934,10 +950,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" + sha256: "85c81589622fbc87c1c683aaea164d3604a7777495a79d91e39ffcdec39ddb34" url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.3" url_launcher_windows: dependency: transitive description: @@ -958,10 +974,10 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "6409a25046024f0f8c5d8a59fec314081e81f9d436b66ca4015a8b49772bf445" + sha256: "2306c03da2ba81724afeb589c351ebbc0aa7d86005925be8f8735856dbe5e42d" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" vector_graphics_codec: dependency: transitive description: @@ -974,10 +990,10 @@ packages: dependency: transitive description: name: vector_graphics_compiler - sha256: "5a88dd14c0954a5398af544651c7fb51b457a2a556949bfb25369b210ef73a74" + sha256: "7ee12e6dffe0fc8e755179d6d91b3b34f5924223fc104d85572ef9180d73d172" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.5" vector_math: dependency: transitive description: @@ -1034,22 +1050,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.1" - win32: - dependency: transitive - description: - name: win32 - sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e - url: "https://pub.dev" - source: hosted - version: "5.15.0" - win32_registry: - dependency: transitive - description: - name: win32_registry - sha256: "6f1b564492d0147b330dd794fee8f512cec4977957f310f9951b5f9d83618dae" - url: "https://pub.dev" - source: hosted - version: "2.1.0" xdg_directories: dependency: transitive description: @@ -1062,10 +1062,10 @@ packages: dependency: transitive description: name: xml - sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" + sha256: "67f0aff7be013d107995e9b75bf4e7f2c3ef2dfdb2c8e68024bba0a7fd5756a4" url: "https://pub.dev" source: hosted - version: "6.6.1" + version: "7.0.1" yaml: dependency: transitive description: @@ -1075,5 +1075,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.10.0-0 <4.0.0" - flutter: ">=3.35.0" + dart: ">=3.12.0 <4.0.0" + flutter: ">=3.44.0" diff --git a/pubspec.yaml b/pubspec.yaml index 4c45bb0..b2ea6ec 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: 1.0.0+1 +version: 1.0.0+2002 environment: sdk: ^3.9.0 @@ -36,14 +36,12 @@ dependencies: cached_network_image: ^3.4.1 connectivity_plus: ^7.1.1 cupertino_icons: ^1.0.8 - device_info_plus: ^12.4.0 dio: ^5.9.2 flutter_easyloading: ^3.0.5 flutter_riverpod: ^3.3.1 flutter_screenutil: ^5.9.3 flutter_svg: ^2.2.4 intl: ^0.20.2 - package_info_plus: ^9.0.1 permission_handler: ^12.0.1 pull_to_refresh: ^2.0.0 shared_preferences: ^2.5.5 @@ -59,7 +57,7 @@ dev_dependencies: # 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_lints: ^6.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec