1. 升级依赖版本

2. 解决运行项目警告日志问题
3. 优化代码
This commit is contained in:
2026-06-04 13:55:33 +08:00
parent 66435302b3
commit 02c1c87b46
15 changed files with 351 additions and 145 deletions

View File

@@ -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")

View File

@@ -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"

View File

@@ -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<String, String> {
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<String, Any> {
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,
)
}
}

View File

@@ -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)
}
}
}

View File

@@ -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
}
}

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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);
},
),

View File

@@ -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<Object?, Object?> 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<Object?, Object?> map) {
final values = <String, String>{};
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<String, String> values;
}
class AppPlatformInfo {
AppPlatformInfo._();
static const MethodChannel _channel = MethodChannel(
'com.gdfw.fxjk/platform_info',
);
static Future<AppPackageInfo> packageInfo() async {
final result = await _channel.invokeMapMethod<Object?, Object?>(
'packageInfo',
);
return AppPackageInfo.fromMap(result ?? const <Object?, Object?>{});
}
static Future<AppDeviceInfo> deviceInfo() async {
final result = await _channel.invokeMapMethod<Object?, Object?>(
'deviceInfo',
);
return AppDeviceInfo.fromMap(result ?? const <Object?, Object?>{});
}
}

View File

@@ -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<bool> 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<Map<String, String>> 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;
}
}

View File

@@ -86,13 +86,17 @@ class RecordingPlatform {
bool enableDoNotDisturb = true,
String? displayName,
}) async {
final args = <String, dynamic>{
'withAudio': withAudio,
'enableDoNotDisturb': enableDoNotDisturb,
};
if (displayName != null) {
args['displayName'] = displayName;
}
final result = await _channel.invokeMapMethod<String, dynamic>(
'startRecording',
<String, dynamic>{
'withAudio': withAudio,
'enableDoNotDisturb': enableDoNotDisturb,
if (displayName != null) 'displayName': displayName,
},
args,
);
return RecordingStartResult(
outputPath: result?['outputPath'] as String?,

View File

@@ -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,

View File

@@ -61,7 +61,7 @@ class _AppRefreshListState<T> extends State<AppRefreshList<T>> {
: 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);

View File

@@ -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"

View File

@@ -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