2 Commits

13 changed files with 1054 additions and 393 deletions

View File

@@ -45,8 +45,8 @@ GoRouter createRouter(AuthCubit authCubit) {
// 注册登录注册 路由
GoRoute(
path: RoutePaths.machineDetails,
builder: (context, state) => const LoginPage(), // 替换为实际页面
path: RoutePaths.login,
builder: (context, state) => const LoginPage(),
),
// 1. 外部路由(无底部导航栏)

View File

@@ -0,0 +1,32 @@
class JsonSafe {
static String asString(dynamic value, [String fallback = '']) {
if (value is String) return value;
return fallback;
}
static String? asStringOrNull(dynamic value) {
if (value is String) return value;
return null;
}
static int asInt(dynamic value, [int fallback = 0]) {
if (value is int) return value;
if (value is num) return value.toInt();
if (value is String) return int.tryParse(value) ?? fallback;
return fallback;
}
static double asDouble(dynamic value, [double fallback = 0.0]) {
if (value is double) return value;
if (value is num) return value.toDouble();
if (value is String) return double.tryParse(value) ?? fallback;
return fallback;
}
static bool asBool(dynamic value, [bool fallback = false]) {
if (value is bool) return value;
if (value is int) return value != 0;
if (value is String) return value.toLowerCase() == 'true';
return fallback;
}
}

View File

@@ -1,3 +1,5 @@
import 'package:maibu_satabot_v2/core/utils/json_safe.dart';
class Session {
final String sessId;
final String title;
@@ -6,8 +8,8 @@ class Session {
factory Session.fromJson(Map<String, dynamic> json) {
return Session(
sessId: json['sessId'],
title: json['title'],
sessId: JsonSafe.asString(json['sessId']),
title: JsonSafe.asString(json['title']),
);
}
}

View File

@@ -1,4 +1,5 @@
import 'package:maibu_satabot_v2/core/data/base_model.dart';
import 'package:maibu_satabot_v2/core/utils/json_safe.dart';
import '../../../../core/domain/entities/user_entity.dart';
@@ -14,15 +15,14 @@ class UserModel extends UserEntity implements BaseModel {
});
factory UserModel.fromJson(Map<String, dynamic> json) {
print(json);
return UserModel(
userId: json['userId'],
username: json['username'],
nickname: json['nickName'],
token: json['token'],
avatar: json['avatar'],
email: json['email'],
phone: json['phone'],
userId: JsonSafe.asString(json['userId']),
username: JsonSafe.asString(json['username']),
nickname: JsonSafe.asString(json['nickName']),
token: JsonSafe.asString(json['token']),
avatar: JsonSafe.asStringOrNull(json['avatar']),
email: JsonSafe.asStringOrNull(json['email']),
phone: JsonSafe.asStringOrNull(json['phone']),
);
}

View File

@@ -68,12 +68,25 @@ class AuthCubit extends Cubit<AuthState> {
/// 当 HTTP 登录/注册成功后调用
Future<void> loginSuccess(UserEntity user) async {
await storage.saveUser(user);
await tcp.connect(host: TCPConsts.TCP_IP, port: TCPConsts.TCP_PORT);
// await _authTcpDatasource.sendAuthPacket(); //包括发送认证包和获取列表和切换函数
//tcp.startHeartbeat(interval: const Duration(seconds: 4)); //启动心跳
// 🔥 关键修复:先立即更新状态,触发 GoRouter redirect
appCubit.setAuth(user);
emit(AuthAuthenticated(user));
// 然后异步执行其他操作(使用 unawaited 避免阻塞)
_performPostLoginTasks(user);
}
/// 登录后后台任务(不阻塞主流程)
Future<void> _performPostLoginTasks(UserEntity user) async {
try {
await storage.saveUser(user);
await tcp.connect(host: TCPConsts.TCP_IP, port: TCPConsts.TCP_PORT);
// await _authTcpDatasource.sendAuthPacket();
// tcp.startHeartbeat(interval: const Duration(seconds: 4));
} catch (e) {
_logger.logWithLevel('[AUTH] 登录后任务失败: $e', level: 'ERROR');
// 不影响已登录状态,只是记录错误
}
}
/// 退出登录 (主动或被动)

View File

@@ -39,7 +39,9 @@ class _LoginPageState extends State<LoginPage> {
body: BlocListener<LoginCubit, LoginState>(
listener: (context, state) {
if (state is LoginSuccess) {
context.go(RoutePaths.home);
// 登录成功后,AuthCubit 状态已更新
// GoRouter 的 redirect 会自动检测到已登录状态并跳转到首页
// 不需要手动调用 context.go
} else if (state is LoginFailure) {
// 可以在这里弹出简洁的黑白提示框
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('登录失败,${state.message}')));

View File

@@ -84,8 +84,20 @@ class DeviceHttpDatasourceImpl implements DeviceHttpDatasource {
if (responseData['total'] == 0) {
return [];
} else {
final rows = responseData['rows'];
debugPrint('🔧 [DeviceAPI] 原始 rows 数量: ${rows.length}');
if (rows.isNotEmpty) {
debugPrint('🔧 [DeviceAPI] 第一个元素类型: ${rows.first.runtimeType}');
debugPrint('🔧 [DeviceAPI] 第一个元素内容: ${rows.first}');
if (rows.first is Map) {
debugPrint('🔧 [DeviceAPI] 第一个元素的 keys: ${rows.first.keys}');
rows.first.forEach((k, v) {
debugPrint('🔧 [DeviceAPI] $k: ${v.runtimeType} = $v');
});
}
}
List<DeviceEntity> devices = [];
for (var item in responseData['rows']) {
for (var item in rows) {
devices.add(DeviceEntity.fromJson(item));
}
return devices;

View File

@@ -1,4 +1,5 @@
import 'package:maibu_satabot_v2/core/data/base_model.dart';
import 'package:maibu_satabot_v2/core/utils/json_safe.dart';
import 'package:maibu_satabot_v2/features/devices/domain/entities/device_entity.dart';
class DeviceModel extends DeviceEntity implements BaseModel {
@@ -17,16 +18,16 @@ class DeviceModel extends DeviceEntity implements BaseModel {
factory DeviceModel.fromJson(Map<String, dynamic> json) {
return DeviceModel(
deviceName: json['deviceName'],
productId: json['productId'],
productName: json['productName'],
tenantId: json['tenantId'],
tenantName: json['tenantName'],
status: json['status'],
activeTime: json['activeTime'],
deviceAlias: json['deviceAlias'],
isBind: json['isBind'],
onlineStatus: json['onlineStatus'],
deviceName: JsonSafe.asString(json['deviceName']),
productId: JsonSafe.asInt(json['productId'], -1),
productName: JsonSafe.asString(json['productName'], "割草机产品MC700"),
tenantId: JsonSafe.asInt(json['tenantId']),
tenantName: JsonSafe.asString(json['tenantName']),
status: JsonSafe.asInt(json['status']),
activeTime: JsonSafe.asStringOrNull(json['activeTime']),
deviceAlias: JsonSafe.asStringOrNull(json['deviceAlias']),
isBind: JsonSafe.asInt(json['isBind']),
onlineStatus: JsonSafe.asInt(json['onlineStatus']),
);
}

View File

@@ -1,4 +1,5 @@
import 'package:equatable/equatable.dart';
import '../../../../core/utils/json_safe.dart';
class DeviceEntity extends Equatable {
final String deviceName;
@@ -25,26 +26,24 @@ class DeviceEntity extends Equatable {
this.onlineStatus = 0,
});
// 方便从后端 JSON 转换
factory DeviceEntity.fromJson(Map<String, dynamic> json) {
return DeviceEntity(
deviceName: json['deviceName'],
productId: json['productId'] ?? -1,
productName: json['productName'] ?? "割草机产品MC700",
tenantId: json['tenantId'],
tenantName: json['tenantName'],
status: json['status'] ?? 0,
activeTime: json['activeTime'],
deviceAlias: json['deviceAlias'],
isBind: json['isBind'] ?? 0,
onlineStatus: json['onlineStatus'] ?? 0,
deviceName: JsonSafe.asString(json['deviceName']),
productId: JsonSafe.asInt(json['productId'], -1),
productName: JsonSafe.asString(json['productName'], "割草机产品MC700"),
tenantId: JsonSafe.asInt(json['tenantId']),
tenantName: JsonSafe.asString(json['tenantName']),
status: JsonSafe.asInt(json['status']),
activeTime: JsonSafe.asStringOrNull(json['activeTime']),
deviceAlias: JsonSafe.asStringOrNull(json['deviceAlias']),
isBind: JsonSafe.asInt(json['isBind']),
onlineStatus: JsonSafe.asInt(json['onlineStatus']),
);
}
// 获取显示的名称(优先别名,没有则用设备名)
String get displayName => (deviceAlias != null && deviceAlias!.isNotEmpty)
? deviceAlias!
: (deviceName ?? "未知设备");
: (deviceName.isNotEmpty ? deviceName : "未知设备");
// 辅助方法:判断是否在线
bool get isOnline => onlineStatus == 1;

View File

@@ -1,11 +1,12 @@
import 'package:equatable/equatable.dart';
import '../../../../core/utils/json_safe.dart';
class DeviceRunStatisticsEntity extends Equatable {
final String startTime; // 开始时间
final String endTime; // 结束时间
final double workArea; // 工作面积
final double? distance; // 工作距离(可为空)
final int time; // 花费时间
final String startTime;
final String endTime;
final double workArea;
final double? distance;
final int time;
const DeviceRunStatisticsEntity({
required this.startTime,
@@ -17,11 +18,11 @@ class DeviceRunStatisticsEntity extends Equatable {
factory DeviceRunStatisticsEntity.fromJson(Map<String, dynamic> json) {
return DeviceRunStatisticsEntity(
startTime: json['startTime'] as String,
endTime: json['endTime'] as String,
workArea: (json['workArea'] as num).toDouble(),
distance: json['distance'] != null ? (json['distance'] as num).toDouble() : null,
time: json['time'] as int,
startTime: JsonSafe.asString(json['startTime']),
endTime: JsonSafe.asString(json['endTime']),
workArea: JsonSafe.asDouble(json['workArea']),
distance: json['distance'] != null ? JsonSafe.asDouble(json['distance']) : null,
time: JsonSafe.asInt(json['time']),
);
}

File diff suppressed because it is too large Load Diff

View File

@@ -21,10 +21,10 @@ packages:
dependency: transitive
description:
name: archive
sha256: a96e8b390886ee8abb49b7bd3ac8df6f451c621619f52a26e815fdcf568959ff
sha256: "6c5bcd986e06b94e3c40244af471750840a3d2341d1f9763a1100a14add517b4"
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.0.9"
version: "4.3.0"
args:
dependency: transitive
description:
@@ -45,10 +45,10 @@ packages:
dependency: "direct main"
description:
name: bloc
sha256: a48653a82055a900b88cd35f92429f068c5a8057ae9b136d197b3d56c57efb81
sha256: e03b235924e4f509c27b5d6b2f949200e0a91149a9818b4f65eeb56662b75413
url: "https://pub.flutter-io.cn"
source: hosted
version: "9.2.0"
version: "9.2.1"
boolean_selector:
dependency: transitive
description:
@@ -61,34 +61,34 @@ packages:
dependency: transitive
description:
name: build
sha256: aadd943f4f8cc946882c954c187e6115a84c98c81ad1d9c6cbf0895a8c85da9c
sha256: "45d14a0fb23e018d8287c32fc98d726ce466b231928ed9b9200f29bd3ccd39ae"
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.0.5"
version: "4.0.7"
build_config:
dependency: transitive
description:
name: build_config
sha256: "4070d2a59f8eec34c97c86ceb44403834899075f66e8a9d59706f8e7834f6f71"
sha256: d466ed2dc9c6cd1d169948879b84ee061eb5e22c64a7c6089879c6296d272a8d
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.0"
version: "1.3.3"
build_daemon:
dependency: transitive
description:
name: build_daemon
sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957
sha256: fd754058c342243718d5171a95f352cfc9fcf0cba8cfa26df67cb13a5836db78
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.1.1"
version: "4.1.2"
build_runner:
dependency: "direct dev"
description:
name: build_runner
sha256: "521daf8d189deb79ba474e43a696b41c49fb3987818dbacf3308f1e03673a75e"
sha256: "5367e521935b102bdf1e735d2aab461e36b2edca6517662d088dd04cc39f8d16"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.13.1"
version: "2.15.1"
built_collection:
dependency: transitive
description:
@@ -101,10 +101,10 @@ packages:
dependency: transitive
description:
name: built_value
sha256: "0730c18c770d05636a8f945c32a4d7d81cb6e0f0148c8db4ad12e7748f7e49af"
sha256: f87ea98192116f7093cb214551ce1929caae0681fdba282b3d8b4462adee7bb7
url: "https://pub.flutter-io.cn"
source: hosted
version: "8.12.5"
version: "8.13.0"
cc_ui_kit:
dependency: "direct main"
description:
@@ -148,18 +148,10 @@ packages:
dependency: transitive
description:
name: code_assets
sha256: "83ccdaa064c980b5596c35dd64a8d3ecc68620174ab9b90b6343b753aa721687"
sha256: bf394f466ba9205f1812a0433b392d6af280f155f56651eda7c18cc32ed493b8
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.0"
code_builder:
dependency: transitive
description:
name: code_builder
sha256: "6a6cab2ba4680d6423f34a9b972a4c9a94ebe1b62ecec4e1a1f2cba91fd1319d"
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.11.1"
version: "1.2.1"
collection:
dependency: transitive
description:
@@ -196,10 +188,10 @@ packages:
dependency: transitive
description:
name: cross_file
sha256: "28bb3ae56f117b5aec029d702a90f57d285cd975c3c5c281eaca38dbc47c5937"
sha256: f141ea4f277af142a0356955707f6556f37b03947d39d55585981a06ca437bd6
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.3.5+2"
version: "0.3.5+5"
crypto:
dependency: transitive
description:
@@ -236,10 +228,10 @@ packages:
dependency: transitive
description:
name: dart_webrtc
sha256: f6d615bddea5e458ce180a914f3055c234ffb52fb7397a51b3491e76d6d7edb2
sha256: "078e3c431500147e5cc52b3c6ea41ed538f30c7720cc2467d2186c9251e62716"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.8.1"
version: "1.8.2"
dartx:
dependency: transitive
description:
@@ -252,10 +244,10 @@ packages:
dependency: transitive
description:
name: dbus
sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270
sha256: a48d5da28e89bd02196e80d81ed8d7954923d00a0f4a68cc20b575038f023383
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.7.12"
version: "0.7.15"
device_info_plus:
dependency: "direct main"
description:
@@ -276,26 +268,26 @@ packages:
dependency: "direct main"
description:
name: dio
sha256: aff32c08f92787a557dd5c0145ac91536481831a01b4648136373cddb0e64f8c
sha256: "852ec3b48cc431ac04fff978413c541502b67ffc3e26921e74e3d994694192c1"
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.9.2"
version: "5.11.1"
dio_web_adapter:
dependency: transitive
description:
name: dio_web_adapter
sha256: "2f9e64323a7c3c7ef69567d5c800424a11f8337b8b228bad02524c9fb3c1f340"
sha256: "3a1b2cd7be71086f38504956e3ebcd2837288d231ff454bafa78021244102bfc"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.2"
version: "2.2.2"
equatable:
dependency: "direct main"
description:
name: equatable
sha256: "3e0141505477fd8ad55d6eb4e7776d3fe8430be8e497ccb1521370c3f21a3e2b"
sha256: "3bce007a596ff8b3119c45d68aaef631272537c03d30e5d4534dd24bf4c5eaa2"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.8"
version: "2.1.0"
fake_async:
dependency: transitive
description:
@@ -324,18 +316,18 @@ packages:
dependency: transitive
description:
name: file_selector_linux
sha256: "2567f398e06ac72dcf2e98a0c95df2a9edd03c2c2e0cacd4780f20cdf56263a0"
sha256: da76400e7872ce7637ffdce12749ec24169c25f6195c28372208e65a24bcd2ab
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.9.4"
version: "0.9.4+1"
file_selector_macos:
dependency: transitive
description:
name: file_selector_macos
sha256: "5e0bbe9c312416f1787a68259ea1505b52f258c587f12920422671807c4d618a"
sha256: d57c62362766b5e7ae739448650b66c6aab7a68ba7ecc65e04018652645ae0f4
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.9.5"
version: "0.9.5+1"
file_selector_platform_interface:
dependency: transitive
description:
@@ -348,10 +340,10 @@ packages:
dependency: transitive
description:
name: file_selector_windows
sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd"
sha256: fbefc5fb92c6d3cbe8d284a2cd971b593bb07d2cd6da8557b81a862250b4acec
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.9.3+5"
version: "0.9.3+6"
fixnum:
dependency: transitive
description:
@@ -430,18 +422,18 @@ packages:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: "38d1c268de9097ff59cf0e844ac38759fc78f76836d37edad06fa21e182055a0"
sha256: "3854fe5e3bff0b113c658f260b90c95dea17c92db0f2addeac2e343dd9969785"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.34"
version: "2.0.35"
flutter_svg:
dependency: "direct main"
description:
name: flutter_svg
sha256: "1ded017b39c8e15c8948ea855070a5ff8ff8b3d5e83f3446e02d6bb12add7ad9"
sha256: "35882981abcbfb8c15b286f0cd690ff25bac12d95eff3e25ee207f37d4c42e7f"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.2.4"
version: "2.3.0"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -456,10 +448,10 @@ packages:
dependency: "direct main"
description:
name: flutter_webrtc
sha256: c7b0a67ca2c878575fc5c146d801cd874f58f5f1ef5fa6e8eb0c93d413beb948
sha256: "381e05c120caf2f1ee1accd806baad22b33802f36c74d8ea5e43a5800ce6380c"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.4.1"
version: "1.6.2+hotfix.1"
fpdart:
dependency: "direct main"
description:
@@ -488,26 +480,26 @@ packages:
dependency: transitive
description:
name: geolocator_apple
sha256: dbdd8789d5aaf14cf69f74d4925ad1336b4433a6efdf2fce91e8955dc921bf22
sha256: "853803d6bb1713c094e935b4a5ae5f19c0308acf81da13fa9ff84fb4c70c0b73"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.3.13"
version: "2.3.14"
geolocator_platform_interface:
dependency: transitive
description:
name: geolocator_platform_interface
sha256: "30cb64f0b9adcc0fb36f628b4ebf4f731a2961a0ebd849f4b56200205056fe67"
sha256: "94db8255dc183d268765df682580440617ca35877fc82cacb5420ad03b86198d"
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.2.6"
version: "4.3.0"
geolocator_web:
dependency: transitive
description:
name: geolocator_web
sha256: b1ae9bdfd90f861fde8fd4f209c37b953d65e92823cb73c7dee1fa021b06f172
sha256: "19e485a0f8d6a88abcf9c53cba3a4105e14b7435ed8ac1c108c067b938fe8429"
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.1.3"
version: "4.1.4"
geolocator_windows:
dependency: transitive
description:
@@ -528,26 +520,26 @@ packages:
dependency: transitive
description:
name: glob
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
sha256: "218aeb56050c714f62a3182775320dfa04602b55074873e24e31bbd39bda96fb"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.3"
version: "2.2.0"
go_router:
dependency: "direct main"
description:
name: go_router
sha256: "7974313e217a7771557add6ff2238acb63f635317c35fa590d348fb238f00896"
sha256: d7a3576cb312649eaa51f2356450aed686085fb58fcdebda5b359aa951eef7ea
url: "https://pub.flutter-io.cn"
source: hosted
version: "17.1.0"
version: "17.5.0"
google_fonts:
dependency: "direct main"
description:
name: google_fonts
sha256: db9df7a5898d894eeda4c78143f35c30a243558be439518972366880b80bf88e
sha256: e3cb3ee6b47fd2472c23de6da5744796a4da195137759ddb3fbcc9467b7b3c7d
url: "https://pub.flutter-io.cn"
source: hosted
version: "8.0.2"
version: "8.2.1"
google_nav_bar:
dependency: "direct main"
description:
@@ -576,10 +568,10 @@ packages:
dependency: transitive
description:
name: hooks
sha256: e79ed1e8e1929bc6ecb6ec85f0cb519c887aa5b423705ded0d0f2d9226def388
sha256: "9a62a50b50b769a737bc0a8ff381f333529df3ab746b2f6b02e83760231455ba"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.2"
version: "2.0.2"
http:
dependency: "direct main"
description:
@@ -608,26 +600,26 @@ packages:
dependency: "direct main"
description:
name: image
sha256: f9881ff4998044947ec38d098bc7c8316ae1186fa786eddffdb867b9bc94dfce
sha256: a1e7f4951e538a568e14b856702afc9ae1d2f4b202daced8d22c1b9cd211ce89
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.8.0"
version: "4.10.1"
image_picker:
dependency: "direct main"
description:
name: image_picker
sha256: "784210112be18ea55f69d7076e2c656a4e24949fa9e76429fe53af0c0f4fa320"
sha256: d8402284df184bc05f4a2210c6c23983b0720f4cd87cbd05c5390a78af602667
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.1"
version: "1.2.3"
image_picker_android:
dependency: transitive
description:
name: image_picker_android
sha256: "9eae0cbd672549dacc18df855c2a23782afe4854ada5190b7d63b30ee0b0d3fd"
sha256: d5b3e1774af29c9ab00103afb0d4614070f924d2e0057ac867ec98800114793f
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.8.13+15"
version: "0.8.13+17"
image_picker_for_web:
dependency: transitive
description:
@@ -640,10 +632,10 @@ packages:
dependency: transitive
description:
name: image_picker_ios
sha256: b9c4a438a9ff4f60808c9cf0039b93a42bb6c2211ef6ebb647394b2b3fa84588
sha256: ee3885b6fcd71958fbc79770dd194c63371439d536d69c47b279171a486482ae
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.8.13+6"
version: "0.8.13+7"
image_picker_linux:
dependency: transitive
description:
@@ -688,10 +680,10 @@ packages:
dependency: transitive
description:
name: io
sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b
sha256: "2635216ca6a737e60de577ffa1a48a0bec76ca8a62917cfc1bb88c14c570646f"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.5"
version: "1.1.0"
isar_community:
dependency: "direct main"
description:
@@ -736,10 +728,10 @@ packages:
dependency: transitive
description:
name: json_annotation
sha256: cb09e7dac6210041fad964ed7fbee004f14258b4eca4040f72d1234062ace4c8
sha256: "2a743920d81b7910627f68ee2c9ac1fc0bfee32b9fc3403587d7c6791ca12f80"
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.11.0"
version: "4.12.0"
latlong2:
dependency: "direct main"
description:
@@ -792,10 +784,10 @@ packages:
dependency: "direct main"
description:
name: logger
sha256: "25aee487596a6257655a1e091ec2ae66bc30e7af663592cc3a27e6591e05035c"
sha256: "2a0dc097e7b01d942475bdd552356db2d0f768b05540bd4b2b53f1840f2239a7"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.7.0"
version: "2.8.0"
logging:
dependency: transitive
description:
@@ -856,10 +848,10 @@ packages:
dependency: transitive
description:
name: mime
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
sha256: bd47de35f07e27267e69c8c8b22edf9473bfee170a60d60fcc93730c5144b7f6
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.0"
version: "2.1.0"
mobile_scanner:
dependency: "direct dev"
description:
@@ -868,14 +860,6 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.5.7"
native_toolchain_c:
dependency: transitive
description:
name: native_toolchain_c
sha256: "6ba77bb18063eebe9de401f5e6437e95e1438af0a87a3a39084fbd37c90df572"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.17.6"
nested:
dependency: transitive
description:
@@ -896,10 +880,10 @@ packages:
dependency: transitive
description:
name: objective_c
sha256: "100a1c87616ab6ed41ec263b083c0ef3261ee6cd1dc3b0f35f8ddfa4f996fe52"
sha256: b7fb95a6d9a4f009edd63dc5ac69f07420b23a16161c6dd8660290b59c602e8e
url: "https://pub.flutter-io.cn"
source: hosted
version: "9.3.0"
version: "9.5.0"
package_config:
dependency: transitive
description:
@@ -944,10 +928,10 @@ packages:
dependency: "direct main"
description:
name: path_provider
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
sha256: a7f4874f987173da295a61c181b8ee71dab59b332a486b391babf26a1b884825
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.5"
version: "2.1.6"
path_provider_android:
dependency: transitive
description:
@@ -968,18 +952,18 @@ packages:
dependency: transitive
description:
name: path_provider_linux
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
sha256: "58c2005f147315b11e9b4a7bc889cd5203e250cba8e3f012dae259b4972b5c16"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.2.1"
version: "2.2.2"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
sha256: "484838772624c3a4b94f1e44a3e19897fee738f2d5c4ce448443b0417f7c9dda"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.2"
version: "2.1.3"
path_provider_windows:
dependency: transitive
description:
@@ -992,10 +976,10 @@ packages:
dependency: "direct main"
description:
name: permission_handler
sha256: bc917da36261b00137bbc8896bf1482169cd76f866282368948f032c8c1caae1
sha256: fe54465bcc62a4564c6e4db337bbaded6c0c0fa6e10487414436d163114784f6
url: "https://pub.flutter-io.cn"
source: hosted
version: "12.0.1"
version: "12.0.3"
permission_handler_android:
dependency: transitive
description:
@@ -1008,34 +992,34 @@ packages:
dependency: transitive
description:
name: permission_handler_apple
sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023
sha256: f49cb15a064ea9d974fc7fbb302099353b7b170d07284e86e264561579e5bcf8
url: "https://pub.flutter-io.cn"
source: hosted
version: "9.4.7"
version: "9.6.1"
permission_handler_html:
dependency: transitive
description:
name: permission_handler_html
sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24"
sha256: "6ea98b3f17f60d3b527f2647ed2ab4dc0f6bfe25b22cb1c363f5d8f62252f6ac"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.1.3+5"
version: "0.1.4+1"
permission_handler_platform_interface:
dependency: transitive
description:
name: permission_handler_platform_interface
sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878
sha256: ed86a61c190258fdd65de395ea0632822e3415c1faec38eae0c31b479c28a531
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.3.0"
version: "4.4.1"
permission_handler_windows:
dependency: transitive
description:
name: permission_handler_windows
sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
sha256: caeae01858a0a7d2df67a445ac98e1ad95e55a0e77c73044f4e9b1c8c2289cbd
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.2.1"
version: "0.2.2"
petitparser:
dependency: transitive
description:
@@ -1072,18 +1056,18 @@ packages:
dependency: transitive
description:
name: pool
sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d"
sha256: "4177f68c237ea2128d1bee66ac17b2ce05ba3dbaafcbdd54c5d40a39d0b6b11c"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.5.2"
version: "1.5.3"
posix:
dependency: transitive
description:
name: posix
sha256: "185ef7606574f789b40f289c233efa52e96dead518aed988e040a10737febb07"
sha256: bc1bad54ad2b735816e31f8d4600cfde6c7839975085ddfbca48b6c9f7c4044e
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.5.0"
version: "6.5.2"
proj4dart:
dependency: transitive
description:
@@ -1104,18 +1088,26 @@ packages:
dependency: transitive
description:
name: pub_semver
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
sha256: "261236774e8b1d69cfc6b9eabbc96c40f25e7a2d6b171f3385d4f65d5734fb24"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.2.0"
version: "2.2.1"
pubspec_parse:
dependency: transitive
description:
name: pubspec_parse
sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
sha256: c38b81cbf34450b67e0265d73433569d12e34782e30ed769c9cc99c9d5f2e796
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.5.0"
version: "1.6.0"
record_use:
dependency: transitive
description:
name: record_use
sha256: "2551bd8eecfe95d14ae75f6021ad0248be5c27f138c2ec12fcb52b500b3ba1ed"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.6.0"
scroll_to_index:
dependency: transitive
description:
@@ -1128,18 +1120,18 @@ packages:
dependency: transitive
description:
name: sentry
sha256: "288aee3d35f252ac0dc3a4b0accbbe7212fa2867604027f2cc5bc65334afd743"
sha256: f04095a25ff02b202a914174c73ec309570aa93d61098cb4a0a9e715b4aaa465
url: "https://pub.flutter-io.cn"
source: hosted
version: "9.16.0"
version: "9.20.0"
sentry_flutter:
dependency: "direct main"
description:
name: sentry_flutter
sha256: f9e87d5895cc437902aa2b081727ee7e46524fe7cc2e1910f535480a3eeb8bed
sha256: "4f0a914d8c37e5015d7b86dd42b92dd265948fd31875b43e62ddfc2e7bea0e41"
url: "https://pub.flutter-io.cn"
source: hosted
version: "9.16.0"
version: "9.20.0"
shared_preferences:
dependency: "direct main"
description:
@@ -1160,10 +1152,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_foundation
sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f"
sha256: "2ec3934efa51e46117f23031cc141b8fc878e8525b94ec1ea4f7f586cf1b47ea"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.5.6"
version: "2.5.7"
shared_preferences_linux:
dependency: transitive
description:
@@ -1221,10 +1213,10 @@ packages:
dependency: transitive
description:
name: source_gen
sha256: "732792cfd197d2161a65bb029606a46e0a18ff30ef9e141a7a82172b05ea8ecd"
sha256: a603f1fb984a7391ae5978d1b92bfaaa08b350dca5c825256f925818f7943bf5
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.2.2"
version: "4.2.4"
source_span:
dependency: transitive
description:
@@ -1253,10 +1245,10 @@ packages:
dependency: transitive
description:
name: stream_transform
sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871
sha256: a00e5f18bffc764f923e7dec1038527f7fe7a1791361a7117f0358193f13d53a
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.1"
version: "2.1.2"
string_scanner:
dependency: transitive
description:
@@ -1341,34 +1333,34 @@ packages:
dependency: transitive
description:
name: url_launcher_android
sha256: "3bb000251e55d4a209aa0e2e563309dc9bb2befea2295fd0cec1f51760aac572"
sha256: "17bc677f0b301615530dd1d67e0a9828cafa2d0b6b6eae4cd3679b7eac4a273c"
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.3.29"
version: "6.3.30"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0"
sha256: "8faa1aab294f1ab4040b43660c887b0418d5fa4f0cffef76a484e6aa1092eb4a"
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.4.1"
version: "6.4.2"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a
sha256: "10f86fef4c2c43563fa6c211ff9cf757adf4d3ab762c56bd430664a947d70cd0"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.2.2"
version: "3.2.3"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18"
sha256: "5e835a3b869c2d70325349c81c5a45c28e20791265b67b2669da6b08c5cd5201"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.2.5"
version: "3.2.6"
url_launcher_platform_interface:
dependency: transitive
description:
@@ -1381,34 +1373,34 @@ packages:
dependency: transitive
description:
name: url_launcher_web
sha256: d0412fcf4c6b31ecfdb7762359b7206ffba3bbffd396c6d9f9c4616ece476c1f
sha256: "85c81589622fbc87c1c683aaea164d3604a7777495a79d91e39ffcdec39ddb34"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.4.2"
version: "2.4.3"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f"
sha256: "6c5ad3f22cd4c38e089b81963b3cd7bb83b111b2df5dce008bb066162f42e429"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.5"
version: "3.1.6"
uuid:
dependency: transitive
description:
name: uuid
sha256: "1fef9e8e11e2991bb773070d4656b7bd5d850967a2456cfc83cf47925ba79489"
sha256: "9b129329f58692f6e6578329498a8fe9fbe98f090beb764ffbb8ee2eadd01dcd"
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.5.3"
version: "4.6.0"
vector_graphics:
dependency: transitive
description:
name: vector_graphics
sha256: "81da85e9ca8885ade47f9685b953cb098970d11be4821ac765580a6607ea4373"
sha256: "9d0e3b9cb16542ad660daee871e726a10d13a93b7b5391677c3160e8f5e83935"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.21"
version: "1.2.3"
vector_graphics_codec:
dependency: transitive
description:
@@ -1421,10 +1413,10 @@ packages:
dependency: transitive
description:
name: vector_graphics_compiler
sha256: "5a88dd14c0954a5398af544651c7fb51b457a2a556949bfb25369b210ef73a74"
sha256: "4dca4feb77dc3ec7f6e27e49c53241eb8217f55e4f9b12599a27f8903bca5682"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
version: "1.3.0"
vector_math:
dependency: transitive
description:
@@ -1445,10 +1437,10 @@ packages:
dependency: transitive
description:
name: vibration_platform_interface
sha256: "4134fbfcd427b59a7a91f8733292e4e9b29a7f1e8224ff0d80f5745fbf0743c6"
sha256: "258c273268f8aa40c88d29741137c536874a738779b92ddb8aa32ed093721ec5"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.1.1"
version: "0.1.2"
visibility_detector:
dependency: transitive
description:
@@ -1461,10 +1453,10 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60"
sha256: "5f37239c4851efcef929cea7824e76df7f2f0970aef85d66bbc430afa40e72f0"
url: "https://pub.flutter-io.cn"
source: hosted
version: "15.0.2"
version: "15.3.0"
watcher:
dependency: transitive
description:
@@ -1509,18 +1501,18 @@ packages:
dependency: "direct main"
description:
name: webview_flutter
sha256: a3da219916aba44947d3a5478b1927876a09781174b5a2b67fa5be0555154bf9
sha256: d53e1ccf5516f25017e3c9d44c39034db352d20fa34fe200674270242c2c5111
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.13.1"
version: "4.14.1"
webview_flutter_android:
dependency: transitive
description:
name: webview_flutter_android
sha256: "0f7fcd2c86bf36bdcf94881f7941ce0cbc4f8d104b9fdcd5fcbef90e2199db76"
sha256: ad5182eff9a550925330cb9f0cb038eddfdd5712aba8b77aa0f0400e50f6e688
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.10.15"
version: "4.12.0"
webview_flutter_platform_interface:
dependency: transitive
description:
@@ -1533,10 +1525,10 @@ packages:
dependency: transitive
description:
name: webview_flutter_wkwebview
sha256: d7219cfabc6f5fc2032e0fa980ec36d71f308a35a823395af1abc34d9a2ede83
sha256: "82648217f537573e1ca9ae9952d3eacedca6ab5aee69dc84445fc763766dcea2"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.24.2"
version: "3.25.1"
win32:
dependency: transitive
description:
@@ -1589,10 +1581,10 @@ packages:
dependency: transitive
description:
name: yaml
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
sha256: f67cdd8e07d3c6329146aaef1ba043542b3134c12489f553ca9a7435d1068aea
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.3"
version: "3.1.4"
sdks:
dart: ">=3.10.3 <4.0.0"
flutter: ">=3.38.4"

View File

@@ -100,7 +100,7 @@ dependencies:
flutter_webrtc: ^1.2.1
# ===== 日志存储 =====
sentry_flutter: ^9.10.0
sentry_flutter: 9.20.0
# ===== 设备信息 =====
device_info_plus: ^12.3.0