Compare commits
No commits in common. "CFG" and "main" have entirely different histories.
@ -1,18 +1,17 @@
|
|||||||
# This is a generated file; do not edit or check into version control.
|
# This is a generated file; do not edit or check into version control.
|
||||||
device_info_plus=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\device_info_plus-11.1.1\\
|
flutter_webrtc=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.flutter-io.cn\\flutter_webrtc-0.9.48+hotfix.1\\
|
||||||
flutter_webrtc=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\flutter_webrtc-0.9.48+hotfix.1\\
|
|
||||||
libserialport=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\git\\libserialport-d6d27ef7aaf89e4dfa026db0c50dd3053c546710\\
|
libserialport=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\git\\libserialport-d6d27ef7aaf89e4dfa026db0c50dd3053c546710\\
|
||||||
open_settings=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\open_settings-2.0.2\\
|
open_settings=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.flutter-io.cn\\open_settings-2.0.2\\
|
||||||
path_provider=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider-2.1.5\\
|
path_provider=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.flutter-io.cn\\path_provider-2.1.5\\
|
||||||
path_provider_android=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_android-2.2.12\\
|
path_provider_android=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.flutter-io.cn\\path_provider_android-2.2.12\\
|
||||||
path_provider_foundation=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_foundation-2.4.0\\
|
path_provider_foundation=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.flutter-io.cn\\path_provider_foundation-2.4.0\\
|
||||||
path_provider_linux=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_linux-2.2.1\\
|
path_provider_linux=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.flutter-io.cn\\path_provider_linux-2.2.1\\
|
||||||
path_provider_windows=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_windows-2.3.0\\
|
path_provider_windows=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.flutter-io.cn\\path_provider_windows-2.3.0\\
|
||||||
permission_handler=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\permission_handler-11.3.1\\
|
permission_handler=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.flutter-io.cn\\permission_handler-11.3.1\\
|
||||||
permission_handler_android=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\permission_handler_android-12.0.13\\
|
permission_handler_android=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.flutter-io.cn\\permission_handler_android-12.0.13\\
|
||||||
permission_handler_apple=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\permission_handler_apple-9.4.5\\
|
permission_handler_apple=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.flutter-io.cn\\permission_handler_apple-9.4.5\\
|
||||||
permission_handler_html=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\permission_handler_html-0.1.3+4\\
|
permission_handler_html=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.flutter-io.cn\\permission_handler_html-0.1.3+2\\
|
||||||
permission_handler_windows=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\permission_handler_windows-0.2.1\\
|
permission_handler_windows=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.flutter-io.cn\\permission_handler_windows-0.2.1\\
|
||||||
quick_blue=D:\\pile_nav_new\\plugins\\quick_blue\\
|
quick_blue=D:\\ly\\dart\\A\\new\\pile_nav_new\\plugins\\quick_blue\\
|
||||||
wifi_iot=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\wifi_iot-0.3.19+1\\
|
wifi_iot=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.flutter-io.cn\\wifi_iot-0.3.19+1\\
|
||||||
wifi_scan=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\wifi_scan-0.4.1+1\\
|
wifi_scan=C:\\Users\\Administrator\\AppData\\Local\\Pub\\Cache\\hosted\\pub.flutter-io.cn\\wifi_scan-0.4.1+1\\
|
||||||
|
File diff suppressed because one or more lines are too long
Binary file not shown.
Before Width: | Height: | Size: 15 KiB |
BIN
images/hook.png
BIN
images/hook.png
Binary file not shown.
Before Width: | Height: | Size: 38 KiB |
@ -1,231 +0,0 @@
|
|||||||
import 'dart:math';
|
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:get/get.dart';
|
|
||||||
import '../counter_pointer/sight.dart';
|
|
||||||
import '../draws/data_type.dart';
|
|
||||||
import '../draws/scence_map.dart';
|
|
||||||
import '../getx/polyon.dart';
|
|
||||||
import 'controller.dart';
|
|
||||||
import 'direction.dart';
|
|
||||||
import 'polyon.dart';
|
|
||||||
import 'real_data.dart';
|
|
||||||
import 'real_device.dart';
|
|
||||||
|
|
||||||
class HomeView extends GetView<PlumDataController> {
|
|
||||||
const HomeView({super.key});
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
ScenceMapController scenceMapController = Get.find<ScenceMapController>();
|
|
||||||
PolyonController polyonController = Get.find<PolyonController>();
|
|
||||||
List<Widget> children = [];
|
|
||||||
final size = MediaQuery.of(context).size;
|
|
||||||
return OrientationBuilder(builder: ((context, orientation) {
|
|
||||||
bool isPortrait = Orientation.portrait == orientation ? true : false;
|
|
||||||
double topHeight = isPortrait ? size.height / 6 : 0;
|
|
||||||
if (isPortrait) {
|
|
||||||
children = [const SightGview()];
|
|
||||||
} else {
|
|
||||||
children = [];
|
|
||||||
}
|
|
||||||
// 中间
|
|
||||||
var center = Obx(() {
|
|
||||||
// 桩点生成
|
|
||||||
if (controller.isGenerate.value) {
|
|
||||||
return GestureDetector(
|
|
||||||
onTapDown: (TapDownDetails details) {
|
|
||||||
if (controller.checkValue.value == "checkPile") {
|
|
||||||
controller.centerOffset.value = details.localPosition;
|
|
||||||
double diagonal = scenceMapController.diagonal;
|
|
||||||
double mapWidth = scenceMapController.width;
|
|
||||||
double mapHeight = scenceMapController.height;
|
|
||||||
Offset offset = Offset(
|
|
||||||
mapWidth / 2 - diagonal / 2, mapHeight / 2 - diagonal / 2);
|
|
||||||
Offset sc2xy = scenceMapController
|
|
||||||
.screen2xy0(details.localPosition - offset);
|
|
||||||
controller.centerXY.value = sc2xy;
|
|
||||||
HyRecordItem? checkPoint =
|
|
||||||
scenceMapController.pointInfo(controller.centerXY.value);
|
|
||||||
if (checkPoint != null) {
|
|
||||||
controller.isPileId.value = true;
|
|
||||||
controller.checkName.value = checkPoint.tpId.toString();
|
|
||||||
} else {
|
|
||||||
controller.isPileId.value = false;
|
|
||||||
controller.checkName.value = "未找到";
|
|
||||||
}
|
|
||||||
showDialog(
|
|
||||||
context: context,
|
|
||||||
barrierDismissible: false,
|
|
||||||
builder: (BuildContext context) {
|
|
||||||
return const GenerateDialog();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onScaleStart: (details) {
|
|
||||||
controller.isUp.value = false;
|
|
||||||
if (controller.checkValue.value != "checkPile") {
|
|
||||||
controller.linePoint.value = details.localFocalPoint;
|
|
||||||
}
|
|
||||||
controller.shouldPaint.value = true;
|
|
||||||
},
|
|
||||||
onScaleUpdate: (details) {
|
|
||||||
controller.shouldPaint.value = true;
|
|
||||||
if (controller.checkValue.value != "checkPile") {
|
|
||||||
if (controller.linePoint.value != details.localFocalPoint) {
|
|
||||||
controller.updateLinePoint(details.localFocalPoint);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onScaleEnd: (details) {
|
|
||||||
double deg = (atan2(
|
|
||||||
controller.linePoint.value.dy -
|
|
||||||
controller.centerOffset.value.dy,
|
|
||||||
controller.linePoint.value.dx -
|
|
||||||
controller.centerOffset.value.dx) *
|
|
||||||
180 /
|
|
||||||
pi)
|
|
||||||
.roundToDouble();
|
|
||||||
controller.direction.value = deg + 90;
|
|
||||||
controller.angle.value =
|
|
||||||
((controller.direction.value * pi / 180) * 100).round() / 100;
|
|
||||||
controller.isUp.value = true;
|
|
||||||
controller.shouldPaint.value = false;
|
|
||||||
|
|
||||||
},
|
|
||||||
child: Container(
|
|
||||||
clipBehavior: Clip.hardEdge,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
boxShadow: [
|
|
||||||
BoxShadow(
|
|
||||||
color: Colors.black.withOpacity(0.2),
|
|
||||||
blurRadius: 8,
|
|
||||||
offset: const Offset(0, 4),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
child: Obx(() {
|
|
||||||
////必须写 因为 需要监听 -- 的值发生变化 刷新
|
|
||||||
controller.linePoint.value;
|
|
||||||
List<Widget> scenceMapViewChildren = [];
|
|
||||||
if (controller.isGenerate.value) {
|
|
||||||
scenceMapViewChildren = [];
|
|
||||||
} else {
|
|
||||||
scenceMapViewChildren = [const SightGview()];
|
|
||||||
}
|
|
||||||
return CustomPaint(
|
|
||||||
foregroundPainter: DrawDirection(controller),
|
|
||||||
child: AbsorbPointer(
|
|
||||||
absorbing: true, //设置CenterLayout 内的GestureDetector 不生效
|
|
||||||
child: ScenceMapView(scenceMapViewChildren),
|
|
||||||
));
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
// 多边形
|
|
||||||
} else if (polyonController.isRuler.value) {
|
|
||||||
return const PolyonView( ScenceMapView([]));
|
|
||||||
} else {
|
|
||||||
return ScenceMapView(children);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// 桩点生成时返回按钮
|
|
||||||
var back = Obx(() => Positioned(
|
|
||||||
left: controller.isGenerate.value
|
|
||||||
? controller.centerOffset.value.dx - 25 //宽一半
|
|
||||||
: -50,
|
|
||||||
top: controller.isGenerate.value
|
|
||||||
? controller.centerOffset.value.dy + topHeight - 20 // 20 为高一半
|
|
||||||
: -50,
|
|
||||||
width: 50,
|
|
||||||
height: 40,
|
|
||||||
child: ClipOval(
|
|
||||||
child: ElevatedButton(
|
|
||||||
style: ElevatedButton.styleFrom(
|
|
||||||
padding: EdgeInsets.zero,
|
|
||||||
shape: const CircleBorder(),
|
|
||||||
),
|
|
||||||
child: const Icon(Icons.keyboard_return),
|
|
||||||
onPressed: () {
|
|
||||||
showDialog(
|
|
||||||
context: context,
|
|
||||||
barrierDismissible: false,
|
|
||||||
builder: (BuildContext context) {
|
|
||||||
return const GenerateDialog();
|
|
||||||
});
|
|
||||||
controller.isDirect.value = false;
|
|
||||||
},
|
|
||||||
),
|
|
||||||
)));
|
|
||||||
// 竖屏
|
|
||||||
var portraitWidget = Column(
|
|
||||||
children: [
|
|
||||||
Expanded(flex: 1, child: RealDataVIew()),
|
|
||||||
Expanded(flex: 5, child: center),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
// 横屏
|
|
||||||
var landscapeWidget = Row(
|
|
||||||
children: [
|
|
||||||
Expanded(flex: 2, child: RealDataVIew()),
|
|
||||||
Expanded(flex: 5, child: center),
|
|
||||||
const Expanded(flex: 2, child: RealDeviceView()),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
// 瞄准器
|
|
||||||
var sightWidegt = Positioned(
|
|
||||||
width: size.width / 9 * 2,
|
|
||||||
height: size.width / 9 * 2,
|
|
||||||
bottom: 0,
|
|
||||||
left: 0,
|
|
||||||
child: Container(
|
|
||||||
decoration: const BoxDecoration(color: Colors.transparent),
|
|
||||||
child: const Card(
|
|
||||||
elevation: 5.0,
|
|
||||||
child: SightView(),
|
|
||||||
)));
|
|
||||||
return Stack(
|
|
||||||
children: [
|
|
||||||
if (isPortrait) portraitWidget else landscapeWidget,
|
|
||||||
back,
|
|
||||||
if (!isPortrait) sightWidegt,
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 瞄准器
|
|
||||||
class SightGview extends GetView<SightController> {
|
|
||||||
const SightGview({super.key});
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
final Size size = MediaQuery.of(context).size;
|
|
||||||
return Obx(() => Positioned(
|
|
||||||
left: controller.sightOffset.value.dx,
|
|
||||||
top: controller.sightOffset.value.dy,
|
|
||||||
width: size.width / 5 * 2,
|
|
||||||
height: size.width / 5 * 2,
|
|
||||||
child: GestureDetector(
|
|
||||||
onScaleStart: ((details) {
|
|
||||||
// 17 这个值不知原因?
|
|
||||||
controller.initSight.value =
|
|
||||||
Offset(0, size.width / 5 * 2 - 17) + details.localFocalPoint;
|
|
||||||
controller.sightOffset.value =
|
|
||||||
details.focalPoint - controller.initSight.value;
|
|
||||||
}),
|
|
||||||
onScaleUpdate: (details) {
|
|
||||||
controller.sightOffset.value =
|
|
||||||
details.focalPoint - controller.initSight.value;
|
|
||||||
},
|
|
||||||
child: Container(
|
|
||||||
decoration: const BoxDecoration(color: Colors.transparent),
|
|
||||||
child: const Card(
|
|
||||||
elevation: 5.0,
|
|
||||||
child: SightView(),
|
|
||||||
)),
|
|
||||||
),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
Binary file not shown.
Before Width: | Height: | Size: 144 KiB |
@ -25,9 +25,9 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
const textStyle = TextStyle(fontSize: 20);
|
const textStyle = TextStyle(fontSize: 16);
|
||||||
return AppBar(
|
return AppBar(
|
||||||
toolbarHeight: 50,
|
toolbarHeight: 40,
|
||||||
centerTitle: true, // 标题居中
|
centerTitle: true, // 标题居中
|
||||||
title: Obx(() {
|
title: Obx(() {
|
||||||
// pile_cm
|
// pile_cm
|
||||||
@ -83,7 +83,7 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
|
|||||||
},
|
},
|
||||||
child: Icon(
|
child: Icon(
|
||||||
appcontroller.isDarkMode.value ? Icons.dark_mode : Icons.sunny,
|
appcontroller.isDarkMode.value ? Icons.dark_mode : Icons.sunny,
|
||||||
size: 45,
|
size: 35,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -91,53 +91,20 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
|
|||||||
width: 10,
|
width: 10,
|
||||||
),
|
),
|
||||||
Obx(
|
Obx(
|
||||||
() {
|
() => InkWell(
|
||||||
Color color = appcontroller.isDarkMode.value
|
onTap: () {
|
||||||
? Colors.white70
|
// Navigator.push(context,
|
||||||
: const Color.fromARGB(200, 29, 28, 28);
|
// MaterialPageRoute(builder: (context) => const ScenceMap())),
|
||||||
int status = realcontroller.status.value;
|
},
|
||||||
if (status == 4) {
|
child: Image(
|
||||||
color = Colors.green;
|
image: const AssetImage('images/satellite.png'),
|
||||||
} else if (status == 1) {
|
// width: 40,
|
||||||
color = Colors.red;
|
color: appcontroller.isDarkMode.value
|
||||||
} else {
|
? Colors.white70
|
||||||
if (status != 0) {
|
: const Color.fromARGB(200, 29, 28, 28),
|
||||||
color = Colors.blue;
|
height: 40,
|
||||||
}
|
),
|
||||||
}
|
),
|
||||||
String text = "";
|
|
||||||
text = "${realcontroller.sa.value}/${realcontroller.sv.value}";
|
|
||||||
|
|
||||||
return InkWell(
|
|
||||||
onTap: () {
|
|
||||||
// Navigator.push(context,
|
|
||||||
// MaterialPageRoute(builder: (context) => const ScenceMap())),
|
|
||||||
},
|
|
||||||
child: Stack(
|
|
||||||
children: [
|
|
||||||
const SizedBox(
|
|
||||||
width: 20,
|
|
||||||
),
|
|
||||||
Positioned(
|
|
||||||
left: -20,
|
|
||||||
child: Column(
|
|
||||||
children: [
|
|
||||||
Text(text)
|
|
||||||
// Text("${realcontroller.sa.value}"),
|
|
||||||
// const Text("/"),
|
|
||||||
// Text("${realcontroller.sv.value}"),
|
|
||||||
],
|
|
||||||
)),
|
|
||||||
Image(
|
|
||||||
image: const AssetImage('images/satellite.png'),
|
|
||||||
// width: 40,
|
|
||||||
color: color,
|
|
||||||
height: 50,
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
width: 10,
|
width: 10,
|
||||||
@ -157,7 +124,7 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
|
|||||||
},
|
},
|
||||||
child: Icon(
|
child: Icon(
|
||||||
Icons.my_location_sharp,
|
Icons.my_location_sharp,
|
||||||
size: 45,
|
size: 35,
|
||||||
color: aimcontroller.isCardVisible.value
|
color: aimcontroller.isCardVisible.value
|
||||||
? Colors.blue
|
? Colors.blue
|
||||||
// : const Color.fromARGB(200, 29, 28, 28),
|
// : const Color.fromARGB(200, 29, 28, 28),
|
||||||
@ -178,7 +145,7 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
|
|||||||
},
|
},
|
||||||
child: Icon(
|
child: Icon(
|
||||||
Icons.date_range_rounded,
|
Icons.date_range_rounded,
|
||||||
size: 45,
|
size: 35,
|
||||||
color: isDataVisible.value
|
color: isDataVisible.value
|
||||||
? Colors.blue
|
? Colors.blue
|
||||||
: (appcontroller.isDarkMode.value
|
: (appcontroller.isDarkMode.value
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'dart:math';
|
||||||
import 'dart:developer' as dev;
|
import 'dart:developer' as dev;
|
||||||
import 'package:cpnav/pages/setting/setting_controller.dart';
|
import 'package:cpnav/pages/setting/setting_controller.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@ -29,8 +30,8 @@ class GnssController extends GetxController {
|
|||||||
var offsetangle = 0.0.obs; //主副连线与车身夹角
|
var offsetangle = 0.0.obs; //主副连线与车身夹角
|
||||||
late final CoordTrans coordTrans;
|
late final CoordTrans coordTrans;
|
||||||
RecordEntity? lastPilePoint;
|
RecordEntity? lastPilePoint;
|
||||||
// var _dx = 0.0;
|
var _dx = 0.0;
|
||||||
// var _dy = 0.0;
|
var _dy = 0.0;
|
||||||
Timer? timer;
|
Timer? timer;
|
||||||
checkDistance() {
|
checkDistance() {
|
||||||
if (DateTime.now().millisecondsSinceEpoch -
|
if (DateTime.now().millisecondsSinceEpoch -
|
||||||
@ -83,10 +84,10 @@ class GnssController extends GetxController {
|
|||||||
image: "",
|
image: "",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// if (device.x.value == 0 && device.y.value == 0) {
|
if (device.x.value == 0 && device.y.value == 0) {
|
||||||
// device.x.value = 3790621.123;
|
device.x.value = 3790621.123;
|
||||||
// device.y.value = 577052.547;
|
device.y.value = 577052.547;
|
||||||
// }
|
}
|
||||||
// device = DeviceItem(
|
// device = DeviceItem(
|
||||||
// name: 'GNSS',
|
// name: 'GNSS',
|
||||||
// tid: 1001,
|
// tid: 1001,
|
||||||
@ -107,40 +108,40 @@ class GnssController extends GetxController {
|
|||||||
// pilerCenter = Pos3D(4196544.959, 517639.709, 0.0);
|
// pilerCenter = Pos3D(4196544.959, 517639.709, 0.0);
|
||||||
|
|
||||||
// 插入定时器测试代码
|
// 插入定时器测试代码
|
||||||
// timer = Timer.periodic(const Duration(seconds: 1), (Timer timer) {
|
timer = Timer.periodic(const Duration(seconds: 1), (Timer timer) {
|
||||||
// if (lastPilePoint != aimcontroller.selectedPilePoint) {
|
if (lastPilePoint != aimcontroller.selectedPilePoint) {
|
||||||
// lastPilePoint = aimcontroller.selectedPilePoint;
|
lastPilePoint = aimcontroller.selectedPilePoint;
|
||||||
// if (aimcontroller.selectedPilePoint != null) {
|
if (aimcontroller.selectedPilePoint != null) {
|
||||||
// var dx = device.x.value - aimcontroller.selectedPilePoint!.x;
|
var dx = device.x.value - aimcontroller.selectedPilePoint!.x;
|
||||||
// var dy = device.y.value - aimcontroller.selectedPilePoint!.y;
|
var dy = device.y.value - aimcontroller.selectedPilePoint!.y;
|
||||||
// var distance = sqrt(dx * dx + dy * dy);
|
var distance = sqrt(dx * dx + dy * dy);
|
||||||
// if (distance > 2) {
|
if (distance > 2) {
|
||||||
// dx = (aimcontroller.selectedPilePoint!.x - device.x.value) /
|
dx = (aimcontroller.selectedPilePoint!.x - device.x.value) /
|
||||||
// (distance / 2);
|
(distance / 2);
|
||||||
// dy = (aimcontroller.selectedPilePoint!.y - device.y.value) /
|
dy = (aimcontroller.selectedPilePoint!.y - device.y.value) /
|
||||||
// (distance / 2);
|
(distance / 2);
|
||||||
// device.x.value = aimcontroller.selectedPilePoint!.x + dx;
|
device.x.value = aimcontroller.selectedPilePoint!.x + dx;
|
||||||
// device.y.value = aimcontroller.selectedPilePoint!.y + dy;
|
device.y.value = aimcontroller.selectedPilePoint!.y + dy;
|
||||||
// }
|
}
|
||||||
// _dx = -dx / 10;
|
_dx = -dx / 10;
|
||||||
// _dy = -dy / 10;
|
_dy = -dy / 10;
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
|
||||||
// // if ((aimcontroller.selectedPilePoint!.x - device.x).abs() > _dx.abs()) {
|
// if ((aimcontroller.selectedPilePoint!.x - device.x).abs() > _dx.abs()) {
|
||||||
// device.x.value += _dx;
|
device.x.value += _dx;
|
||||||
// device.y.value += _dy;
|
device.y.value += _dy;
|
||||||
// // } else {
|
// } else {
|
||||||
// // device.x = aimcontroller.selectedPilePoint!.x;
|
// device.x = aimcontroller.selectedPilePoint!.x;
|
||||||
// // device.y = aimcontroller.selectedPilePoint!.y;
|
// device.y = aimcontroller.selectedPilePoint!.y;
|
||||||
// // }
|
// }
|
||||||
|
|
||||||
// // device.x += 0.05;
|
// device.x += 0.05;
|
||||||
// // device.y += 0.05;
|
// device.y += 0.05;
|
||||||
// device.rotation.value += pi / 180; // 确保旋转角度在0-360度之间
|
device.rotation.value += pi / 180; // 确保旋转角度在0-360度之间
|
||||||
// device.update.value++;
|
device.update.value++;
|
||||||
// checkDistance();
|
checkDistance();
|
||||||
// });
|
});
|
||||||
|
|
||||||
gnss = Gnss(port: "/dev/ttysWK2", baudrate: 115200);
|
gnss = Gnss(port: "/dev/ttysWK2", baudrate: 115200);
|
||||||
// gnss = Gnss(port: "COM1", baudrate: 115200);
|
// gnss = Gnss(port: "COM1", baudrate: 115200);
|
||||||
@ -149,7 +150,7 @@ class GnssController extends GetxController {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
scaffoldMessengerKey.currentState?.showSnackBar(
|
scaffoldMessengerKey.currentState?.showSnackBar(
|
||||||
SnackBar(
|
SnackBar(
|
||||||
content: Text('发生错误gnss: ${e.toString()}'),
|
content: Text('发生错误: ${e.toString()}'),
|
||||||
duration: const Duration(seconds: 25),
|
duration: const Duration(seconds: 25),
|
||||||
backgroundColor: Colors.red,
|
backgroundColor: Colors.red,
|
||||||
),
|
),
|
||||||
|
@ -13,13 +13,13 @@ import 'pages/history/history_record.dart';
|
|||||||
import 'pages/login/login_page.dart';
|
import 'pages/login/login_page.dart';
|
||||||
import 'pages/login/my_routes.dart';
|
import 'pages/login/my_routes.dart';
|
||||||
import 'pages/pass_track/view.dart';
|
import 'pages/pass_track/view.dart';
|
||||||
|
import 'pages/real/index.dart';
|
||||||
|
|
||||||
import 'pages/real/real_controller.dart';
|
import 'pages/real/real_controller.dart';
|
||||||
import 'pages/dataAndDevice/controller.dart';
|
|
||||||
import 'pages/setting/child_pages/antenna/antenna_setting.dart';
|
import 'pages/setting/child_pages/antenna/antenna_setting.dart';
|
||||||
import 'pages/setting/child_pages/connect/config/socket_setting.dart';
|
|
||||||
import 'pages/setting/setting_controller.dart';
|
import 'pages/setting/setting_controller.dart';
|
||||||
import 'pages/setting/setting_page.dart';
|
import 'pages/setting/setting_page.dart';
|
||||||
|
import 'pages/setting/child_pages/XyChange/connect.dart';
|
||||||
import 'pages/task/taskcontroller.dart';
|
import 'pages/task/taskcontroller.dart';
|
||||||
import 'service/user/loginprefs.dart';
|
import 'service/user/loginprefs.dart';
|
||||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||||
@ -31,8 +31,8 @@ import '../../controllers/gnss_controller.dart';
|
|||||||
final AppController appcontroller = Get.put(AppController());
|
final AppController appcontroller = Get.put(AppController());
|
||||||
final GlobalKey<ScaffoldMessengerState> scaffoldMessengerKey =
|
final GlobalKey<ScaffoldMessengerState> scaffoldMessengerKey =
|
||||||
GlobalKey<ScaffoldMessengerState>();
|
GlobalKey<ScaffoldMessengerState>();
|
||||||
// Connect connect = Connect();
|
Connect connect = Connect();
|
||||||
SocketSetting socket = SocketSetting();
|
|
||||||
void main() async {
|
void main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []); //设置全屏
|
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []); //设置全屏
|
||||||
@ -42,14 +42,11 @@ void main() async {
|
|||||||
Get.put(PhoneLoginController());
|
Get.put(PhoneLoginController());
|
||||||
Get.put(ScenceMapController());
|
Get.put(ScenceMapController());
|
||||||
Get.put(AimPointerController());
|
Get.put(AimPointerController());
|
||||||
Get.put(RealController());
|
|
||||||
Get.put(RealDataController());
|
|
||||||
Get.put(PlumRealDataController());
|
|
||||||
LoginPrefs loginPrefs = LoginPrefs();
|
LoginPrefs loginPrefs = LoginPrefs();
|
||||||
String value =
|
String value =
|
||||||
await loginPrefs.init(); // await 关键字必须用在异步方法中 await等待异步方法执行完毕 异步方法必须用变量接收
|
await loginPrefs.init(); // await 关键字必须用在异步方法中 await等待异步方法执行完毕 异步方法必须用变量接收
|
||||||
if ('ok' == value) {
|
if ('ok' == value) {
|
||||||
socket.connect();
|
// connect.init();
|
||||||
// loginPrefs.removeToken(); //注释掉即能实现短时间二次登录不需要再重新登录
|
// loginPrefs.removeToken(); //注释掉即能实现短时间二次登录不需要再重新登录
|
||||||
runApp(const MyApp());
|
runApp(const MyApp());
|
||||||
}
|
}
|
||||||
@ -95,7 +92,7 @@ class MyHomePage extends StatefulWidget {
|
|||||||
|
|
||||||
class _MyHomePageState extends State<MyHomePage> {
|
class _MyHomePageState extends State<MyHomePage> {
|
||||||
late bool isPortrait;
|
late bool isPortrait;
|
||||||
late double appBarHeight = 44.0;
|
late double appBarHeight = 34.0;
|
||||||
bool isInitialized = false;
|
bool isInitialized = false;
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@ -103,13 +100,13 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
SettingController settingController = Get.put(SettingController());
|
SettingController settingController = Get.put(SettingController());
|
||||||
|
|
||||||
SchedulerBinding.instance.addPostFrameCallback((_) async {
|
SchedulerBinding.instance.addPostFrameCallback((_) async {
|
||||||
settingController.getDeviceId(context);
|
|
||||||
await loadData(settingController);
|
await loadData(settingController);
|
||||||
setState(() {
|
setState(() {
|
||||||
isInitialized = settingController.isInitialized;
|
isInitialized = settingController.isInitialized;
|
||||||
Get.put(PlumDataController());
|
Get.put(PlumDataController());
|
||||||
Get.put(AntennaController());
|
Get.put(AntennaController());
|
||||||
Get.put(TaskController());
|
Get.put(TaskController());
|
||||||
|
Get.put(RealController());
|
||||||
Get.put(GnssController());
|
Get.put(GnssController());
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -126,7 +123,7 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
}
|
}
|
||||||
final List<Widget> pages = [
|
final List<Widget> pages = [
|
||||||
// const Real(),
|
// const Real(),
|
||||||
PassTackAndDevice(),
|
PassTrack(),
|
||||||
const TaskManagePage(),
|
const TaskManagePage(),
|
||||||
const HistoryRecord(),
|
const HistoryRecord(),
|
||||||
const SettingPortrait()
|
const SettingPortrait()
|
||||||
@ -137,15 +134,16 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
appBar: PreferredSize(
|
appBar: PreferredSize(
|
||||||
preferredSize: Size.fromHeight(appBarHeight),
|
preferredSize: Size.fromHeight(appBarHeight),
|
||||||
child: CustomAppBar(
|
child: CustomAppBar(
|
||||||
appBarHeight: 66,
|
appBarHeight: 56,
|
||||||
currentIndex: appcontroller.currentIndex,
|
currentIndex: appcontroller.currentIndex,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
body: OrientationBuilder(
|
body: OrientationBuilder(
|
||||||
builder: (context, orientation) {
|
builder: (context, orientation) {
|
||||||
// final size = MediaQuery.of(context).size;
|
// final size = MediaQuery.of(context).size;
|
||||||
appBarHeight = Orientation.portrait == orientation ? 66.0 : 44.0;
|
appBarHeight = Orientation.portrait == orientation ? 56.0 : 34.0;
|
||||||
isPortrait = Orientation.portrait == orientation ? true : false;
|
isPortrait = Orientation.portrait == orientation ? true : false;
|
||||||
|
appBarHeight = Orientation.portrait == orientation ? 56.0 : 34.0;
|
||||||
return Obx(() {
|
return Obx(() {
|
||||||
appcontroller.currentIndex.value;
|
appcontroller.currentIndex.value;
|
||||||
if (!isPortrait) {
|
if (!isPortrait) {
|
||||||
|
@ -15,10 +15,11 @@ final GnssController gnsscontroller = Get.find<GnssController>();
|
|||||||
// ignore: must_be_immutable
|
// ignore: must_be_immutable
|
||||||
class AimPointer extends GetView<AimPointerController> {
|
class AimPointer extends GetView<AimPointerController> {
|
||||||
String gradienter = "0";
|
String gradienter = "0";
|
||||||
final Size size;
|
|
||||||
AimPointer({super.key, required this.size}); //水平仪
|
AimPointer({super.key}); //水平仪
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final Size size = MediaQuery.of(context).size;
|
||||||
final mediaQueryData = MediaQueryData.fromView(View.of(context)); //获取当前屏幕信息
|
final mediaQueryData = MediaQueryData.fromView(View.of(context)); //获取当前屏幕信息
|
||||||
final orientation = mediaQueryData.orientation; //获得设备方向
|
final orientation = mediaQueryData.orientation; //获得设备方向
|
||||||
bool isPortrait = Orientation.portrait == orientation ? true : false;
|
bool isPortrait = Orientation.portrait == orientation ? true : false;
|
||||||
@ -26,17 +27,17 @@ class AimPointer extends GetView<AimPointerController> {
|
|||||||
|
|
||||||
final deviceType = getDeviceType(context);
|
final deviceType = getDeviceType(context);
|
||||||
|
|
||||||
// if (orientation == Orientation.landscape) {
|
if (orientation == Orientation.landscape) {
|
||||||
// rectWidth = size.width / 2 - 60;
|
rectWidth = size.width / 2 - 60;
|
||||||
// if (deviceType == DeviceType.mobile) {
|
if (deviceType == DeviceType.mobile) {
|
||||||
// rectWidth = size.height - 60;
|
rectWidth = size.height - 130;
|
||||||
// }
|
}
|
||||||
// } else {
|
} else {
|
||||||
// rectWidth = size.height / 2;
|
rectWidth = size.height / 2;
|
||||||
// if (deviceType == DeviceType.mobile) {
|
if (deviceType == DeviceType.mobile) {
|
||||||
// rectWidth = size.width - 5;
|
rectWidth = size.width - 5;
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
bool isDarkMode = Theme.of(context).brightness == Brightness.dark;
|
bool isDarkMode = Theme.of(context).brightness == Brightness.dark;
|
||||||
List<Widget> children = [
|
List<Widget> children = [
|
||||||
SizedBox(
|
SizedBox(
|
||||||
@ -49,7 +50,6 @@ class AimPointer extends GetView<AimPointerController> {
|
|||||||
|
|
||||||
borderRadius: BorderRadius.circular(4.0), // 可以根据需要调整圆角半径
|
borderRadius: BorderRadius.circular(4.0), // 可以根据需要调整圆角半径
|
||||||
),
|
),
|
||||||
|
|
||||||
child: Container(
|
child: Container(
|
||||||
width: rectWidth,
|
width: rectWidth,
|
||||||
height: rectWidth,
|
height: rectWidth,
|
||||||
@ -85,17 +85,29 @@ class AimPointer extends GetView<AimPointerController> {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
})),
|
})),
|
||||||
|
Positioned(
|
||||||
// Positioned(
|
right: 0,
|
||||||
// top: 30,
|
top: 0,
|
||||||
// right: 10,
|
child: IconButton(
|
||||||
// child: TextButton(
|
icon: const Icon(Icons.close),
|
||||||
// child: Text(
|
onPressed: () {
|
||||||
// "垂直度:$gradienter°",
|
// 关闭按钮的回调函数
|
||||||
// style: const TextStyle(fontSize: 20),
|
aimcontroller.isCardVisible.value = false;
|
||||||
// ),
|
aimcontroller.lastCloseTapTime =
|
||||||
// onPressed: () {},
|
DateTime.now().millisecondsSinceEpoch;
|
||||||
// )),
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
top: 30,
|
||||||
|
right: 10,
|
||||||
|
child: TextButton(
|
||||||
|
child: Text(
|
||||||
|
"垂直度:$gradienter°",
|
||||||
|
style: const TextStyle(fontSize: 20),
|
||||||
|
),
|
||||||
|
onPressed: () {},
|
||||||
|
)),
|
||||||
Obx(() {
|
Obx(() {
|
||||||
var pixel2MeterRatio =
|
var pixel2MeterRatio =
|
||||||
aimcontroller.plot.value * 2 / rectWidth;
|
aimcontroller.plot.value * 2 / rectWidth;
|
||||||
@ -136,10 +148,9 @@ class AimPointer extends GetView<AimPointerController> {
|
|||||||
aimcontroller.x.value / pixel2MeterRatio,
|
aimcontroller.x.value / pixel2MeterRatio,
|
||||||
child: Transform(
|
child: Transform(
|
||||||
transform: Matrix4.identity()
|
transform: Matrix4.identity()
|
||||||
..rotateZ(
|
..rotateZ(gnsscontroller.device.rotation.value +
|
||||||
gnsscontroller.device.rotation.value +
|
pi / 2 +
|
||||||
pi / 2 +
|
mapcontroller.rotation.value),
|
||||||
mapcontroller.rotation.value),
|
|
||||||
alignment: FractionalOffset.center,
|
alignment: FractionalOffset.center,
|
||||||
child: Stack(
|
child: Stack(
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
@ -320,12 +331,11 @@ class DrawAxis extends CustomPainter {
|
|||||||
|
|
||||||
// 瞄准器卡片
|
// 瞄准器卡片
|
||||||
class SightGview extends StatelessWidget {
|
class SightGview extends StatelessWidget {
|
||||||
const SightGview({super.key, required this.size});
|
const SightGview({super.key});
|
||||||
|
|
||||||
final Size size;
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final Size size = MediaQuery.of(context).size;
|
||||||
final mediaQueryData = MediaQueryData.fromView(View.of(context)); //获取当前屏幕信息
|
final mediaQueryData = MediaQueryData.fromView(View.of(context)); //获取当前屏幕信息
|
||||||
final orientation = mediaQueryData.orientation; //获得设备方向
|
final orientation = mediaQueryData.orientation; //获得设备方向
|
||||||
double rectWidth = size.width;
|
double rectWidth = size.width;
|
||||||
@ -344,9 +354,7 @@ class SightGview extends StatelessWidget {
|
|||||||
|
|
||||||
return Obx(() => Visibility(
|
return Obx(() => Visibility(
|
||||||
visible: aimcontroller.isCardVisible.value,
|
visible: aimcontroller.isCardVisible.value,
|
||||||
child:
|
child: Positioned(
|
||||||
Stack(children: [
|
|
||||||
Positioned(
|
|
||||||
left: aimcontroller.sightOffset.value.dx,
|
left: aimcontroller.sightOffset.value.dx,
|
||||||
top: aimcontroller.sightOffset.value.dy,
|
top: aimcontroller.sightOffset.value.dy,
|
||||||
width: rectWidth + 15,
|
width: rectWidth + 15,
|
||||||
@ -370,24 +378,9 @@ class SightGview extends StatelessWidget {
|
|||||||
Card(
|
Card(
|
||||||
color: Colors.transparent,
|
color: Colors.transparent,
|
||||||
elevation: 5.0,
|
elevation: 5.0,
|
||||||
child: AimPointer(size: Size(rectWidth, rectWidth)),
|
child: AimPointer(),
|
||||||
),
|
),
|
||||||
])),
|
]))
|
||||||
|
])))));
|
||||||
Positioned(
|
|
||||||
right: 10,
|
|
||||||
top: 5,
|
|
||||||
child: IconButton(
|
|
||||||
icon: const Icon(Icons.close),
|
|
||||||
onPressed: () {
|
|
||||||
// 关闭按钮的回调函数
|
|
||||||
aimcontroller.isCardVisible.value = false;
|
|
||||||
aimcontroller.lastCloseTapTime =
|
|
||||||
DateTime.now().millisecondsSinceEpoch;
|
|
||||||
},
|
|
||||||
),
|
|
||||||
)
|
|
||||||
]))),])
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,150 +0,0 @@
|
|||||||
import 'dart:async';
|
|
||||||
import 'dart:core';
|
|
||||||
import 'dart:math';
|
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:get/get.dart';
|
|
||||||
import 'package:roslibdart/roslibdart.dart';
|
|
||||||
import '../../service/base.dart';
|
|
||||||
|
|
||||||
class PlumRealDataController extends GetxController {
|
|
||||||
var isGenerate = false.obs; //是否生成
|
|
||||||
var angle = 0.0.obs; //方向弧度
|
|
||||||
var isDirect = false.obs; //是否为方向设置
|
|
||||||
var checkValue = "".obs; //checkPile -桩点坐标,checkDirection-方向设置
|
|
||||||
var checkName = "".obs;
|
|
||||||
var centerXY = Offset.zero.obs; //中心点
|
|
||||||
var space = 5.0.obs; //间距 m
|
|
||||||
var genLenth = 0.obs; //半径
|
|
||||||
var isPileId = false.obs;
|
|
||||||
var direction = 0.0.obs; //角度
|
|
||||||
var centerOffset = Offset.zero.obs;
|
|
||||||
var linePoint = Offset.zero.obs;
|
|
||||||
var isUp = false.obs;
|
|
||||||
var plumList = [].obs;
|
|
||||||
var shouldPaint = true.obs;
|
|
||||||
late Service service;
|
|
||||||
late Ros ros;
|
|
||||||
@override
|
|
||||||
void onInit() async {
|
|
||||||
super.onInit();
|
|
||||||
ros = BaseService().getRos();
|
|
||||||
// ros.connect();
|
|
||||||
// service = Service(
|
|
||||||
// name: '/smash_point_list_service',
|
|
||||||
// ros: ros,
|
|
||||||
// type: "nav2_smash_behavior/srv/SmashPointList");
|
|
||||||
// var json = {'data': []};
|
|
||||||
// service.call(json).then((value) {
|
|
||||||
// print('ros$value');
|
|
||||||
// });
|
|
||||||
}
|
|
||||||
|
|
||||||
updateLinePoint(Offset offset) {
|
|
||||||
linePoint.value = offset;
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 监听 plumList 变量的变化
|
|
||||||
void listenToPlumList() {
|
|
||||||
plumList.listen((list) {
|
|
||||||
var points = [];
|
|
||||||
for (var i = 0; i < list.length; i++) {
|
|
||||||
Offset item = list[i];
|
|
||||||
points.add({"x": item.dx, "y": item.dy, "z": 0});
|
|
||||||
}
|
|
||||||
service
|
|
||||||
.call({"points": points})
|
|
||||||
.then((value) => {print("----$value")})
|
|
||||||
.catchError((e) => {print(e)});
|
|
||||||
}, onError: (err) {
|
|
||||||
// 错误处理
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class RealDataController extends GetxController {
|
|
||||||
final time = DateTime.now().obs;
|
|
||||||
final tid = 100.obs;
|
|
||||||
final name = '桩点名称'.obs;
|
|
||||||
final sid = '10.222'.obs;
|
|
||||||
final times = 10.obs;
|
|
||||||
final isClicked = false.obs;
|
|
||||||
|
|
||||||
late final lineDis = 110.0.obs;
|
|
||||||
late final distance = 460.0.obs;
|
|
||||||
var isHooked = false.obs;
|
|
||||||
late Topic topic;
|
|
||||||
late Ros ros;
|
|
||||||
|
|
||||||
double g = 9.8; // 重力加速度
|
|
||||||
double t = 0; // 时间
|
|
||||||
@override
|
|
||||||
void onInit() async {
|
|
||||||
super.onInit();
|
|
||||||
ros = BaseService().getRos();
|
|
||||||
// ros.connect();
|
|
||||||
// topic = Topic(
|
|
||||||
// ros: ros,
|
|
||||||
// name: '/your_topic',
|
|
||||||
// type: 'std_msgs/String',
|
|
||||||
// );
|
|
||||||
// // 订阅者来接收 ROS 主题的消息
|
|
||||||
// topic.subscribe((message) async {
|
|
||||||
// print('Received message: $message');
|
|
||||||
// });
|
|
||||||
|
|
||||||
// ActionClient action = ActionClient(
|
|
||||||
// ros: ros,
|
|
||||||
// actionName: '/virtual_odom',
|
|
||||||
// serverName: 'virtual_odom_publisher_behavior/action/PublishVirtualOdom',
|
|
||||||
// goalName: "/target_pose",
|
|
||||||
// goalType: 'geometry_msgs/PoseStamped');
|
|
||||||
// await action.init();
|
|
||||||
// action.feedbacker.subscription!.listen((message) {
|
|
||||||
// String g = message['status']['goal_id']['id'];
|
|
||||||
// action.goals[g]!.stream.listen((data) {
|
|
||||||
// // 在这里处理 status 的变化
|
|
||||||
// print('Status changed: ${data['status']}');
|
|
||||||
// });
|
|
||||||
// });
|
|
||||||
// Map message = {
|
|
||||||
// 'target_pose': {
|
|
||||||
// 'header': {'frame_id': 'map'},
|
|
||||||
// 'pose': {
|
|
||||||
// 'position': {'x': 10.0, 'y': 10.0, 'z': 0.0},
|
|
||||||
// 'orientation': {'x': 0.0, 'y': 0.0, 'z': 0.0, 'w': 1.0}
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
|
|
||||||
// action.send(message);
|
|
||||||
|
|
||||||
// 定时器每秒更新时间
|
|
||||||
Timer.periodic(const Duration(milliseconds: 100), (_) {
|
|
||||||
time.value = DateTime.now();
|
|
||||||
if (!isHooked.value && lineDis < 560 && distance >= 460) {
|
|
||||||
lineDis.value += 10; // 每秒增加10
|
|
||||||
} else if (lineDis > 110 && distance <= 460) {
|
|
||||||
isHooked.value = true;
|
|
||||||
distance.value -= 10;
|
|
||||||
lineDis.value -= 10;
|
|
||||||
} else if (distance.value < 460) {
|
|
||||||
isHooked.value = false;
|
|
||||||
t += 1; // 每秒增加1秒
|
|
||||||
distance.value = 0.5 * g * t * t;
|
|
||||||
if (distance.value >= 460) {
|
|
||||||
distance.value = 460;
|
|
||||||
t = 0;
|
|
||||||
}
|
|
||||||
lineDis.value = 110;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void dispose() async {
|
|
||||||
super.dispose();
|
|
||||||
await ros.close();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,163 +0,0 @@
|
|||||||
import 'dart:math';
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:get/get.dart';
|
|
||||||
import 'package:intl/intl.dart';
|
|
||||||
|
|
||||||
import '../../service/pile/device_type.dart';
|
|
||||||
import '../../service/pile/input.dart';
|
|
||||||
import '../../service/pile/public_widget.dart';
|
|
||||||
import '../aim_point/aimpoint_page.dart';
|
|
||||||
import 'controller.dart';
|
|
||||||
|
|
||||||
class RealDataContainer extends StatelessWidget {
|
|
||||||
final RealDataController controller = Get.find<RealDataController>();
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
final size = MediaQuery.of(context).size;
|
|
||||||
double rectWidth = size.width;
|
|
||||||
return Container(
|
|
||||||
child: Stack(
|
|
||||||
children: [
|
|
||||||
RealDataVIew(),
|
|
||||||
Positioned(
|
|
||||||
bottom: 120, // 根据需要调整位置
|
|
||||||
left: 5, // 根据需要调整位置
|
|
||||||
child: Container(
|
|
||||||
decoration: const BoxDecoration(color: Colors.transparent),
|
|
||||||
child: Stack(children: [
|
|
||||||
Card(
|
|
||||||
color: Colors.transparent,
|
|
||||||
elevation: 0,
|
|
||||||
child: AimPointer(size: Size(250, 250)),
|
|
||||||
),
|
|
||||||
]))),
|
|
||||||
Positioned(
|
|
||||||
bottom: 30,
|
|
||||||
left: 35,
|
|
||||||
child: Obx(() => ElevatedButton(
|
|
||||||
style: ButtonStyle(
|
|
||||||
fixedSize: MaterialStateProperty.all(Size(200, 70)),
|
|
||||||
backgroundColor: MaterialStateProperty.all(
|
|
||||||
const Color.fromARGB(255, 226, 220, 220),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
child: Text(
|
|
||||||
controller.isClicked.value ? ' 暂停 ' : ' 开始 ',
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 28,
|
|
||||||
color: controller.isClicked.value
|
|
||||||
? Colors.red
|
|
||||||
: Colors.green,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
onPressed: () {
|
|
||||||
controller.isClicked.value = !controller.isClicked.value;
|
|
||||||
},
|
|
||||||
)),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class RealDataVIew extends GetView<RealDataController> {
|
|
||||||
RealDataVIew({super.key});
|
|
||||||
final PlumRealDataController plumDataController =
|
|
||||||
Get.find<PlumRealDataController>();
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
double fontSize = 16;
|
|
||||||
DeviceType deviceType = getDeviceType(context);
|
|
||||||
if (deviceType == DeviceType.mobile) {
|
|
||||||
fontSize = 16;
|
|
||||||
} else {
|
|
||||||
fontSize = 20;
|
|
||||||
}
|
|
||||||
return Container(
|
|
||||||
clipBehavior: Clip.hardEdge,
|
|
||||||
alignment: Alignment.centerLeft,
|
|
||||||
// height: 130,
|
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 5),
|
|
||||||
decoration:
|
|
||||||
BoxDecoration(border: Border.all(color: Colors.black, width: 1)),
|
|
||||||
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
|
||||||
// Stack(children: [
|
|
||||||
// Positioned(
|
|
||||||
// width: 20,
|
|
||||||
// height: 20,
|
|
||||||
// child: Card(
|
|
||||||
// color: Colors.transparent,
|
|
||||||
// elevation: 5.0,
|
|
||||||
// child:
|
|
||||||
|
|
||||||
// ),
|
|
||||||
// )
|
|
||||||
// ]),
|
|
||||||
const SizedBox(
|
|
||||||
height: 20,
|
|
||||||
),
|
|
||||||
Wrap(
|
|
||||||
children: [
|
|
||||||
Obx(() => Text(
|
|
||||||
DateFormat('yy-MM-dd HH:mm:ss').format(controller.time.value),
|
|
||||||
style: const TextStyle(fontSize: 20, height: 2),
|
|
||||||
)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
SingleChildScrollView(
|
|
||||||
child: Theme(
|
|
||||||
data: ThemeData(
|
|
||||||
textTheme: TextTheme(
|
|
||||||
titleLarge: TextStyle(
|
|
||||||
fontSize: fontSize,
|
|
||||||
fontWeight: FontWeight.normal,
|
|
||||||
),
|
|
||||||
)),
|
|
||||||
child: Obx(() => Wrap(
|
|
||||||
children: [
|
|
||||||
// Text(
|
|
||||||
// '工作区域:$txt ',
|
|
||||||
// style: textStyle,
|
|
||||||
// ),
|
|
||||||
// Text(
|
|
||||||
// '工作层级:$txt ',
|
|
||||||
// style: textStyle,
|
|
||||||
// ),
|
|
||||||
Text(
|
|
||||||
'设备编号:${controller.tid.value} ',
|
|
||||||
style: Theme.of(context).textTheme.titleLarge,
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
// '桩点名称:${controller.name.value} ',
|
|
||||||
'桩点名称:${controller.name.value} ',
|
|
||||||
style: Theme.of(context).textTheme.titleLarge,
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
// '夯沉量:${controller.sid.value} ',
|
|
||||||
'桩深:${controller.sid.value} ',
|
|
||||||
style: Theme.of(context).textTheme.titleLarge,
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
// '次:${controller.times.value} ',
|
|
||||||
'垂直度:${controller.times.value} ',
|
|
||||||
style: Theme.of(context).textTheme.titleLarge,
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
// '次:${controller.times.value} ',
|
|
||||||
'电流:${controller.times.value} ',
|
|
||||||
style: Theme.of(context).textTheme.titleLarge,
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
// '次:${controller.times.value} ',
|
|
||||||
'灌注量:${controller.times.value} ',
|
|
||||||
style: Theme.of(context).textTheme.titleLarge,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
))),
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,98 +0,0 @@
|
|||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:get/get.dart';
|
|
||||||
|
|
||||||
import '../../service/pile/device_type.dart';
|
|
||||||
import 'controller.dart';
|
|
||||||
|
|
||||||
class RealDeviceView extends GetView<RealDataController> {
|
|
||||||
const RealDeviceView({super.key});
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
DeviceType deviceType = getDeviceType(context);
|
|
||||||
final size = MediaQuery.of(context).size;
|
|
||||||
double imageW = size.width / 4 - 20;
|
|
||||||
double imageH = size.height - 40;
|
|
||||||
double rad = 0.10625;
|
|
||||||
// double distance = 0;
|
|
||||||
double hammerDis = 50; //
|
|
||||||
|
|
||||||
double hookDis = 30;
|
|
||||||
|
|
||||||
bool isMobile = deviceType != DeviceType.mobile ? false : true;
|
|
||||||
double lineTop = deviceType != DeviceType.mobile
|
|
||||||
? (rad * size.height).floorToDouble() - 45
|
|
||||||
: (rad / 2 * size.height).floorToDouble() - 45;
|
|
||||||
return Obx(() {
|
|
||||||
return Container(
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
border: Border.all(color: Colors.black, width: 1),
|
|
||||||
),
|
|
||||||
child: Stack(
|
|
||||||
children: [
|
|
||||||
// 车
|
|
||||||
Positioned(
|
|
||||||
bottom: 45,
|
|
||||||
left: 0,
|
|
||||||
width: imageW,
|
|
||||||
height: imageH,
|
|
||||||
child: const Image(
|
|
||||||
image: AssetImage(
|
|
||||||
'images/mechinacs.png',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
// 线
|
|
||||||
Positioned(
|
|
||||||
top: lineTop,
|
|
||||||
left: isMobile ? 35 : 32,
|
|
||||||
width: 3,
|
|
||||||
height: controller.lineDis.value,
|
|
||||||
child: CustomPaint(
|
|
||||||
painter: LinePainter(),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// 锤
|
|
||||||
Positioned(
|
|
||||||
left: isMobile ? 10 : 8,
|
|
||||||
top: lineTop + 110 + controller.distance.value,
|
|
||||||
width: 50,
|
|
||||||
height: hammerDis,
|
|
||||||
child: const Image(image: AssetImage('images/hammer.png')),
|
|
||||||
),
|
|
||||||
// 钩
|
|
||||||
Positioned(
|
|
||||||
top: lineTop + controller.lineDis.value,
|
|
||||||
left: isMobile ? 20 : 18,
|
|
||||||
width: 30,
|
|
||||||
height: hookDis,
|
|
||||||
child: const Image(
|
|
||||||
image: AssetImage('images/hook.png'),
|
|
||||||
fit: BoxFit.contain,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class LinePainter extends CustomPainter {
|
|
||||||
@override
|
|
||||||
void paint(Canvas canvas, Size size) {
|
|
||||||
final paint = Paint()
|
|
||||||
..color = Colors.black
|
|
||||||
..strokeWidth = 3;
|
|
||||||
|
|
||||||
// 绘制一条从顶部到底部的直线
|
|
||||||
canvas.drawLine(Offset(0, 0), Offset(0, size.height), paint);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
bool shouldRepaint(covariant CustomPainter oldDelegate) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
|
import '../real/component/chart.dart';
|
||||||
|
|
||||||
class MyLineChart extends StatefulWidget {
|
class MyLineChart extends StatefulWidget {
|
||||||
final int pileId;
|
final int pileId;
|
||||||
@ -31,10 +32,9 @@ class _MyLineChartState extends State<MyLineChart> {
|
|||||||
),
|
),
|
||||||
body: SizedBox(
|
body: SizedBox(
|
||||||
height: size.height - 30,
|
height: size.height - 30,
|
||||||
// child: ProcessChart(
|
child: ProcessChart(
|
||||||
// pileId: widget.pileId,
|
pileId: widget.pileId,
|
||||||
// )
|
)),
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import 'package:intl/intl.dart';
|
|||||||
import 'package:scence_map/record_entity.dart';
|
import 'package:scence_map/record_entity.dart';
|
||||||
import '../../service/base.dart';
|
import '../../service/base.dart';
|
||||||
import '../setting/project/model.dart';
|
import '../setting/project/model.dart';
|
||||||
|
import 'line_chart.dart';
|
||||||
|
|
||||||
class RecordDataSourceAsync extends AsyncDataTableSource {
|
class RecordDataSourceAsync extends AsyncDataTableSource {
|
||||||
bool _empty = false;
|
bool _empty = false;
|
||||||
|
@ -20,8 +20,6 @@ class PassTrackController extends GetxController {
|
|||||||
var updateCount = 0.obs;
|
var updateCount = 0.obs;
|
||||||
var date = "2023-11-1".obs;
|
var date = "2023-11-1".obs;
|
||||||
RecordEntity? currentPoint;
|
RecordEntity? currentPoint;
|
||||||
|
|
||||||
var isDeviceShow = false.obs;
|
|
||||||
PassTrackController();
|
PassTrackController();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -53,7 +51,7 @@ class PassTrackController extends GetxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loadCoorTrans() async {}
|
||||||
|
|
||||||
loadSideLine() async {
|
loadSideLine() async {
|
||||||
mapController.sideLinListeMap.clear();
|
mapController.sideLinListeMap.clear();
|
||||||
@ -138,14 +136,14 @@ class PassTrackController extends GetxController {
|
|||||||
String now = DateFormat('yyyy-MM-dd').format(DateTime.now());
|
String now = DateFormat('yyyy-MM-dd').format(DateTime.now());
|
||||||
if ((currentPoint == null && date.value == now) ||
|
if ((currentPoint == null && date.value == now) ||
|
||||||
(DateFormat('yyyy-MM-dd').format(currentPoint!.startTime) == now)) {
|
(DateFormat('yyyy-MM-dd').format(currentPoint!.startTime) == now)) {
|
||||||
|
log("${currentPoint?.startTime},now:$now");
|
||||||
// scaffoldMessengerKey.currentState?.showSnackBar(
|
scaffoldMessengerKey.currentState?.showSnackBar(
|
||||||
// SnackBar(
|
SnackBar(
|
||||||
// content: Text('提示: ${date.value}暂无施工数据'),
|
content: Text('提示: ${date.value}暂无施工数据'),
|
||||||
// duration: const Duration(seconds: 5),
|
duration: const Duration(seconds: 5),
|
||||||
// backgroundColor: const Color.fromARGB(255, 230, 162, 60),
|
backgroundColor: const Color.fromARGB(255, 230, 162, 60),
|
||||||
// ),
|
),
|
||||||
// );
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mapController.updateCount++;
|
mapController.updateCount++;
|
||||||
|
@ -10,50 +10,21 @@ import 'package:intl/intl.dart';
|
|||||||
import 'package:scence_map/controllers/controller.dart';
|
import 'package:scence_map/controllers/controller.dart';
|
||||||
import 'package:scence_map/record_entity.dart';
|
import 'package:scence_map/record_entity.dart';
|
||||||
import 'package:scence_map/scence_map.dart';
|
import 'package:scence_map/scence_map.dart';
|
||||||
import '../../service/pile/device_type.dart';
|
|
||||||
import '../aim_point/aimpoint_controller.dart';
|
import '../aim_point/aimpoint_controller.dart';
|
||||||
import '../dataAndDevice/real_data.dart';
|
|
||||||
import '../dataAndDevice/real_device.dart';
|
|
||||||
import '../real/real_data_card.dart';
|
import '../real/real_data_card.dart';
|
||||||
|
|
||||||
import "controller.dart";
|
import "controller.dart";
|
||||||
|
|
||||||
ScenceMapController mapcontroller = Get.put(ScenceMapController());
|
ScenceMapController mapcontroller = Get.put(ScenceMapController());
|
||||||
|
|
||||||
class PassTackAndDevice extends StatelessWidget {
|
// class PassTrack extends StatefulWidget {
|
||||||
final RecordEntity? currentPoint;
|
// final String date;
|
||||||
PassTackAndDevice({this.currentPoint});
|
// final controller;
|
||||||
final controller = Get.put(PassTrackController());
|
|
||||||
|
|
||||||
@override
|
// const PassTrack({super.key, required this.date, this.controller});
|
||||||
Widget build(BuildContext context) {
|
|
||||||
if (controller.isDeviceShow.value) {
|
// @override
|
||||||
return Row(
|
// State<PassTrack> createState() => _PasstrackState();
|
||||||
children: [
|
// }
|
||||||
Expanded(
|
|
||||||
flex: 2,
|
|
||||||
child: RealDeviceView(),
|
|
||||||
),
|
|
||||||
Expanded(
|
|
||||||
flex: 5,
|
|
||||||
child: PassTrack(currentPoint: currentPoint),
|
|
||||||
),
|
|
||||||
Expanded(flex: 2, child: RealDataContainer()),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
return Row(
|
|
||||||
children: [
|
|
||||||
Expanded(
|
|
||||||
flex: 7,
|
|
||||||
child: PassTrack(currentPoint: currentPoint),
|
|
||||||
),
|
|
||||||
Expanded(flex: 2, child: RealDataContainer()),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ignore: must_be_immutable
|
// ignore: must_be_immutable
|
||||||
class PassTrack extends GetView<PassTrackController> {
|
class PassTrack extends GetView<PassTrackController> {
|
||||||
@ -62,7 +33,7 @@ class PassTrack extends GetView<PassTrackController> {
|
|||||||
RecordEntity? currentPoint;
|
RecordEntity? currentPoint;
|
||||||
@override
|
@override
|
||||||
final controller = Get.put(PassTrackController());
|
final controller = Get.put(PassTrackController());
|
||||||
|
final aimcontroller = Get.find<AimPointerController>();
|
||||||
// String str = "播放";
|
// String str = "播放";
|
||||||
// int sWidth = 0;
|
// int sWidth = 0;
|
||||||
// int bits = -1;
|
// int bits = -1;
|
||||||
@ -91,10 +62,7 @@ class PassTrack extends GetView<PassTrackController> {
|
|||||||
controller,
|
controller,
|
||||||
)
|
)
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
return OrientationBuilder(builder: (context, orientation) {
|
return OrientationBuilder(builder: (context, orientation) {
|
||||||
final size = MediaQuery.of(context).size;
|
|
||||||
|
|
||||||
return Stack(
|
return Stack(
|
||||||
children: [
|
children: [
|
||||||
ScenceMapView(
|
ScenceMapView(
|
||||||
@ -111,7 +79,7 @@ class PassTrack extends GetView<PassTrackController> {
|
|||||||
},
|
},
|
||||||
children: const [],
|
children: const [],
|
||||||
),
|
),
|
||||||
SightGview(size: size),
|
const SightGview(),
|
||||||
const RealDataShow(),
|
const RealDataShow(),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
@ -1,368 +1,368 @@
|
|||||||
// import 'dart:math';
|
import 'dart:math';
|
||||||
// import 'dart:developer' as dev;
|
import 'dart:developer' as dev;
|
||||||
// import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
// import 'package:flutter/scheduler.dart';
|
import 'package:flutter/scheduler.dart';
|
||||||
// import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
// import 'package:fl_chart/fl_chart.dart';
|
import 'package:fl_chart/fl_chart.dart';
|
||||||
// import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
// import '../../../service/base.dart';
|
import '../../../service/base.dart';
|
||||||
// import '../../setting/project/model.dart';
|
import '../../setting/project/model.dart';
|
||||||
// import '../process.dart';
|
import '../process.dart';
|
||||||
|
|
||||||
// class ProcessChart extends StatefulWidget {
|
class ProcessChart extends StatefulWidget {
|
||||||
// final int pileId;
|
final int pileId;
|
||||||
// const ProcessChart({super.key, required this.pileId});
|
const ProcessChart({super.key, required this.pileId});
|
||||||
|
|
||||||
// @override
|
@override
|
||||||
// State<ProcessChart> createState() => _ProcessChartState();
|
State<ProcessChart> createState() => _ProcessChartState();
|
||||||
// }
|
}
|
||||||
|
|
||||||
// class _ProcessChartState extends State<ProcessChart> {
|
class _ProcessChartState extends State<ProcessChart> {
|
||||||
// List<ProcessEntity> processList = [];
|
List<ProcessEntity> processList = [];
|
||||||
// List<Widget> chartTitleWidget = [];
|
List<Widget> chartTitleWidget = [];
|
||||||
|
|
||||||
// @override
|
@override
|
||||||
// void initState() {
|
void initState() {
|
||||||
// super.initState();
|
super.initState();
|
||||||
// fetchData();
|
fetchData();
|
||||||
// }
|
}
|
||||||
|
|
||||||
// int maxX = 5;
|
int maxX = 5;
|
||||||
// int maxYL = 14; //深度
|
int maxYL = 14; //深度
|
||||||
// int maxYR = 0; //10cm
|
int maxYR = 0; //10cm
|
||||||
// ChartData chartData = ChartData([]);
|
ChartData chartData = ChartData([]);
|
||||||
// void fetchData() async {
|
void fetchData() async {
|
||||||
// try {
|
try {
|
||||||
// SchedulerBinding.instance.addPostFrameCallback((_) async {
|
SchedulerBinding.instance.addPostFrameCallback((_) async {
|
||||||
// ProjectModel project = settingController.currentProject.value!;
|
ProjectModel project = settingController.currentProject.value!;
|
||||||
// String projType = settingController.projType;
|
String projType = settingController.projType;
|
||||||
// //获取点的数据
|
//获取点的数据
|
||||||
// List detailCdate = await services.getProcessData(
|
List detailCdate = await services.getProcessData(
|
||||||
// widget.pileId,
|
widget.pileId,
|
||||||
// project.projCode,
|
project.projCode,
|
||||||
// projType,
|
projType,
|
||||||
// );
|
);
|
||||||
|
|
||||||
// setState(() {
|
setState(() {
|
||||||
// double ten1Max = 0;
|
double ten1Max = 0;
|
||||||
// double ten2Max = 0;
|
double ten2Max = 0;
|
||||||
// for (var i = 0; i < detailCdate.length; i++) {
|
for (var i = 0; i < detailCdate.length; i++) {
|
||||||
// ProcessEntity process = ProcessEntity.fromJson(detailCdate[i]);
|
ProcessEntity process = ProcessEntity.fromJson(detailCdate[i]);
|
||||||
// processList.add(process);
|
processList.add(process);
|
||||||
// // 左(深度)右(10cm流量)标题栏最大值计算
|
// 左(深度)右(10cm流量)标题栏最大值计算
|
||||||
// maxYL = max(maxYL, process.depth.ceil());
|
maxYL = max(maxYL, process.depth.ceil());
|
||||||
// ten1Max = max(ten1Max, process.subtotalFlow1);
|
ten1Max = max(ten1Max, process.subtotalFlow1);
|
||||||
// ten2Max = max(ten2Max, process.subtotalFlow2);
|
ten2Max = max(ten2Max, process.subtotalFlow2);
|
||||||
// maxYR = max(ten2Max.ceil(), ten1Max.ceil());
|
maxYR = max(ten2Max.ceil(), ten1Max.ceil());
|
||||||
// }
|
}
|
||||||
// int radtio = (maxYR / maxYL).ceil();
|
int radtio = (maxYR / maxYL).ceil();
|
||||||
// chartData = ChartData(processList, maxX, maxYL, maxYR, radtio);
|
chartData = ChartData(processList, maxX, maxYL, maxYR, radtio);
|
||||||
// chartTitleWidget = chartData.chartTitleWeidget();
|
chartTitleWidget = chartData.chartTitleWeidget();
|
||||||
// });
|
});
|
||||||
// });
|
});
|
||||||
// } catch (e) {
|
} catch (e) {
|
||||||
// dev.log("错误");
|
dev.log("错误");
|
||||||
// setState(() {
|
setState(() {
|
||||||
// processList = [];
|
processList = [];
|
||||||
// });
|
});
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
|
||||||
// @override
|
@override
|
||||||
// void dispose() {
|
void dispose() {
|
||||||
// super.dispose();
|
super.dispose();
|
||||||
// SystemChrome.setPreferredOrientations([]);
|
SystemChrome.setPreferredOrientations([]);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// @override
|
@override
|
||||||
// Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
// return Stack(
|
return Stack(
|
||||||
// children: [
|
children: [
|
||||||
// Positioned(
|
Positioned(
|
||||||
// child: Row(
|
child: Row(
|
||||||
// mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
// children: chartTitleWidget)),
|
children: chartTitleWidget)),
|
||||||
// LineChart(chartData.lineChart)
|
LineChart(chartData.lineChart)
|
||||||
// ],
|
],
|
||||||
// );
|
);
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
|
||||||
// class ChartTileModel {
|
class ChartTileModel {
|
||||||
// String title;
|
String title;
|
||||||
// Color colors;
|
Color colors;
|
||||||
// ChartTileModel(
|
ChartTileModel(
|
||||||
// this.title,
|
this.title,
|
||||||
// this.colors,
|
this.colors,
|
||||||
// );
|
);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// class ChartData {
|
class ChartData {
|
||||||
// List<ProcessEntity> processList;
|
List<ProcessEntity> processList;
|
||||||
// int maxX;
|
int maxX;
|
||||||
// // 这3个值变化
|
// 这3个值变化
|
||||||
// int maxYL;
|
int maxYL;
|
||||||
// int maxYR;
|
int maxYR;
|
||||||
// int radtio;
|
int radtio;
|
||||||
// List<ChartTileModel> chartTitle = [
|
List<ChartTileModel> chartTitle = [
|
||||||
// ChartTileModel("深度:", Colors.green),
|
ChartTileModel("深度:", Colors.green),
|
||||||
// ChartTileModel("10cm流量1:", Colors.pink),
|
ChartTileModel("10cm流量1:", Colors.pink),
|
||||||
// ChartTileModel("10cm流量2:", Colors.cyan),
|
ChartTileModel("10cm流量2:", Colors.cyan),
|
||||||
// ];
|
];
|
||||||
// ChartData(this.processList,
|
ChartData(this.processList,
|
||||||
// [this.maxX = 5, this.maxYL = 14, this.maxYR = 100, this.radtio = 8]);
|
[this.maxX = 5, this.maxYL = 14, this.maxYR = 100, this.radtio = 8]);
|
||||||
|
|
||||||
// List<Widget> chartTitleWeidget() {
|
List<Widget> chartTitleWeidget() {
|
||||||
// List<Widget> chartTitleWidget = [];
|
List<Widget> chartTitleWidget = [];
|
||||||
// for (var i = 0; i < chartTitle.length; i++) {
|
for (var i = 0; i < chartTitle.length; i++) {
|
||||||
// ChartTileModel tileModel = chartTitle[i];
|
ChartTileModel tileModel = chartTitle[i];
|
||||||
// List<Widget> item = [
|
List<Widget> item = [
|
||||||
// Text(tileModel.title),
|
Text(tileModel.title),
|
||||||
// Container(
|
Container(
|
||||||
// width: 13,
|
width: 13,
|
||||||
// height: 8,
|
height: 8,
|
||||||
// margin: const EdgeInsets.only(right: 5),
|
margin: const EdgeInsets.only(right: 5),
|
||||||
// decoration: BoxDecoration(color: tileModel.colors),
|
decoration: BoxDecoration(color: tileModel.colors),
|
||||||
// ),
|
),
|
||||||
// const SizedBox(
|
const SizedBox(
|
||||||
// width: 10,
|
width: 10,
|
||||||
// height: 10,
|
height: 10,
|
||||||
// ),
|
),
|
||||||
// ];
|
];
|
||||||
// chartTitleWidget.addAll(item);
|
chartTitleWidget.addAll(item);
|
||||||
// }
|
}
|
||||||
// return chartTitleWidget;
|
return chartTitleWidget;
|
||||||
// }
|
}
|
||||||
|
|
||||||
// LineChartData get lineChart => LineChartData(
|
LineChartData get lineChart => LineChartData(
|
||||||
// lineTouchData: lineTouchData,
|
lineTouchData: lineTouchData,
|
||||||
// gridData: gridData,
|
gridData: gridData,
|
||||||
// titlesData: titlesData,
|
titlesData: titlesData,
|
||||||
// borderData: borderData,
|
borderData: borderData,
|
||||||
// lineBarsData: lineBarsData,
|
lineBarsData: lineBarsData,
|
||||||
// minX: 0,
|
minX: 0,
|
||||||
// maxX: maxX.toDouble(),
|
maxX: maxX.toDouble(),
|
||||||
// maxY: maxYR.toDouble(),
|
maxY: maxYR.toDouble(),
|
||||||
// minY: 0,
|
minY: 0,
|
||||||
// );
|
);
|
||||||
|
|
||||||
// LineTouchData get lineTouchData => LineTouchData(
|
LineTouchData get lineTouchData => LineTouchData(
|
||||||
// handleBuiltInTouches: true,
|
handleBuiltInTouches: true,
|
||||||
// touchTooltipData: LineTouchTooltipData(
|
touchTooltipData: LineTouchTooltipData(
|
||||||
// fitInsideHorizontally: true,
|
fitInsideHorizontally: true,
|
||||||
// fitInsideVertically: true,
|
fitInsideVertically: true,
|
||||||
// // tooltipBgColor: Colors.black38.withOpacity(0.8),
|
// tooltipBgColor: Colors.black38.withOpacity(0.8),
|
||||||
// getTooltipItems: (List<LineBarSpot> touchedSpots) {
|
getTooltipItems: (List<LineBarSpot> touchedSpots) {
|
||||||
// // 自定义提示框内容
|
// 自定义提示框内容
|
||||||
// return touchedSpots.map((LineBarSpot touchedSpot) {
|
return touchedSpots.map((LineBarSpot touchedSpot) {
|
||||||
// // 找到对应的数据点的索引
|
// 找到对应的数据点的索引
|
||||||
// final x = touchedSpot.x;
|
final x = touchedSpot.x;
|
||||||
// int index = (x / maxX * processList.length).round();
|
int index = (x / maxX * processList.length).round();
|
||||||
// ProcessEntity process = processList[index];
|
ProcessEntity process = processList[index];
|
||||||
// String lineToolValue = "";
|
String lineToolValue = "";
|
||||||
// TextStyle lineToolStyle = const TextStyle(
|
TextStyle lineToolStyle = const TextStyle(
|
||||||
// color: Colors.green,
|
color: Colors.green,
|
||||||
// );
|
);
|
||||||
|
|
||||||
// if (touchedSpot.barIndex == 0) {
|
if (touchedSpot.barIndex == 0) {
|
||||||
// lineToolValue =
|
lineToolValue =
|
||||||
// "时间:${DateFormat('HH:mm:ss').format(DateTime.parse(process.recvTime)).toString()}\n深度:${process.depth}\n累计流量:${process.toatalFlow1}";
|
"时间:${DateFormat('HH:mm:ss').format(DateTime.parse(process.recvTime)).toString()}\n深度:${process.depth}\n累计流量:${process.toatalFlow1}";
|
||||||
// lineToolStyle = const TextStyle(color: Colors.green);
|
lineToolStyle = const TextStyle(color: Colors.green);
|
||||||
// } else if (touchedSpot.barIndex == 1) {
|
} else if (touchedSpot.barIndex == 1) {
|
||||||
// lineToolValue = "10cm流量1:${process.subtotalFlow1}";
|
lineToolValue = "10cm流量1:${process.subtotalFlow1}";
|
||||||
// lineToolStyle = const TextStyle(color: Colors.pink);
|
lineToolStyle = const TextStyle(color: Colors.pink);
|
||||||
// } else if (touchedSpot.barIndex == 2) {
|
} else if (touchedSpot.barIndex == 2) {
|
||||||
// lineToolValue = "10cm流量2:${process.subtotalFlow2}";
|
lineToolValue = "10cm流量2:${process.subtotalFlow2}";
|
||||||
// lineToolStyle = const TextStyle(color: Colors.cyan);
|
lineToolStyle = const TextStyle(color: Colors.cyan);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// return LineTooltipItem(lineToolValue, lineToolStyle,
|
return LineTooltipItem(lineToolValue, lineToolStyle,
|
||||||
// textAlign: TextAlign.left);
|
textAlign: TextAlign.left);
|
||||||
// }).toList();
|
}).toList();
|
||||||
// },
|
},
|
||||||
// ),
|
),
|
||||||
// );
|
);
|
||||||
// // FlGridData get gridData => const FlGridData(show: false);
|
// FlGridData get gridData => const FlGridData(show: false);
|
||||||
// //网格
|
//网格
|
||||||
// FlGridData get gridData => const FlGridData(drawHorizontalLine: true);
|
FlGridData get gridData => const FlGridData(drawHorizontalLine: true);
|
||||||
// //设置标题
|
//设置标题
|
||||||
// FlTitlesData get titlesData => FlTitlesData(
|
FlTitlesData get titlesData => FlTitlesData(
|
||||||
// bottomTitles: AxisTitles(
|
bottomTitles: AxisTitles(
|
||||||
// sideTitles: bottomTitles,
|
sideTitles: bottomTitles,
|
||||||
// ),
|
),
|
||||||
// rightTitles: AxisTitles(
|
rightTitles: AxisTitles(
|
||||||
// sideTitles: rightTitles(),
|
sideTitles: rightTitles(),
|
||||||
// ),
|
),
|
||||||
// topTitles: const AxisTitles(
|
topTitles: const AxisTitles(
|
||||||
// sideTitles: SideTitles(showTitles: false),
|
sideTitles: SideTitles(showTitles: false),
|
||||||
// ),
|
),
|
||||||
// leftTitles: AxisTitles(
|
leftTitles: AxisTitles(
|
||||||
// sideTitles: leftTitles(),
|
sideTitles: leftTitles(),
|
||||||
// ),
|
),
|
||||||
// );
|
);
|
||||||
|
|
||||||
// SideTitles get bottomTitles => SideTitles(
|
SideTitles get bottomTitles => SideTitles(
|
||||||
// showTitles: true,
|
showTitles: true,
|
||||||
// reservedSize: 32,
|
reservedSize: 32,
|
||||||
// interval: 1,
|
interval: 1,
|
||||||
// getTitlesWidget: bottomTitleWidgets,
|
getTitlesWidget: bottomTitleWidgets,
|
||||||
// );
|
);
|
||||||
// SideTitles leftTitles() => SideTitles(
|
SideTitles leftTitles() => SideTitles(
|
||||||
// getTitlesWidget: leftTitleWidgets,
|
getTitlesWidget: leftTitleWidgets,
|
||||||
// showTitles: true,
|
showTitles: true,
|
||||||
// interval: 1,
|
interval: 1,
|
||||||
// reservedSize: 40,
|
reservedSize: 40,
|
||||||
// );
|
);
|
||||||
// SideTitles rightTitles() => SideTitles(
|
SideTitles rightTitles() => SideTitles(
|
||||||
// getTitlesWidget: rightTitleWidgets,
|
getTitlesWidget: rightTitleWidgets,
|
||||||
// showTitles: true,
|
showTitles: true,
|
||||||
// interval: 1,
|
interval: 1,
|
||||||
// reservedSize: 40,
|
reservedSize: 40,
|
||||||
// );
|
);
|
||||||
|
|
||||||
// //x轴
|
//x轴
|
||||||
// Widget bottomTitleWidgets(double value, TitleMeta meta) {
|
Widget bottomTitleWidgets(double value, TitleMeta meta) {
|
||||||
// const style = TextStyle(
|
const style = TextStyle(
|
||||||
// fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
// fontSize: 14,
|
fontSize: 14,
|
||||||
// );
|
);
|
||||||
|
|
||||||
// String getTimeFromIndex(int index) {
|
String getTimeFromIndex(int index) {
|
||||||
// if (processList.isEmpty || index < 0 || index >= processList.length) {
|
if (processList.isEmpty || index < 0 || index >= processList.length) {
|
||||||
// return '';
|
return '';
|
||||||
// }
|
}
|
||||||
// return processList[index].recvTime.toString().split(" ")[1];
|
return processList[index].recvTime.toString().split(" ")[1];
|
||||||
// }
|
}
|
||||||
|
|
||||||
// int index;
|
int index;
|
||||||
|
|
||||||
// switch (value.toInt()) {
|
switch (value.toInt()) {
|
||||||
// case 0:
|
case 0:
|
||||||
// index = 0;
|
index = 0;
|
||||||
// break;
|
break;
|
||||||
// case 1:
|
case 1:
|
||||||
// index = (processList.length / 5).round();
|
index = (processList.length / 5).round();
|
||||||
// break;
|
break;
|
||||||
// case 2:
|
case 2:
|
||||||
// index = (processList.length * 2 / 5).round();
|
index = (processList.length * 2 / 5).round();
|
||||||
// break;
|
break;
|
||||||
// case 3:
|
case 3:
|
||||||
// index = (processList.length * 3 / 5).round();
|
index = (processList.length * 3 / 5).round();
|
||||||
// break;
|
break;
|
||||||
// case 4:
|
case 4:
|
||||||
// index = (processList.length * 4 / 5).round();
|
index = (processList.length * 4 / 5).round();
|
||||||
// break;
|
break;
|
||||||
// case 5:
|
case 5:
|
||||||
// index = processList.length - 1;
|
index = processList.length - 1;
|
||||||
// break;
|
break;
|
||||||
// default:
|
default:
|
||||||
// return SideTitleWidget(
|
return SideTitleWidget(
|
||||||
// axisSide: meta.axisSide,
|
axisSide: meta.axisSide,
|
||||||
// space: 10,
|
space: 10,
|
||||||
// child: const Text(''),
|
child: const Text(''),
|
||||||
// );
|
);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// return SideTitleWidget(
|
return SideTitleWidget(
|
||||||
// axisSide: meta.axisSide,
|
axisSide: meta.axisSide,
|
||||||
// space: 10,
|
space: 10,
|
||||||
// child: Text(
|
child: Text(
|
||||||
// getTimeFromIndex(index),
|
getTimeFromIndex(index),
|
||||||
// style: style,
|
style: style,
|
||||||
// ),
|
),
|
||||||
// );
|
);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// final style = const TextStyle(
|
final style = const TextStyle(
|
||||||
// fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
// fontSize: 14,
|
fontSize: 14,
|
||||||
// );
|
);
|
||||||
// //左y轴
|
//左y轴
|
||||||
// Widget leftTitleWidgets(double value, TitleMeta meta) {
|
Widget leftTitleWidgets(double value, TitleMeta meta) {
|
||||||
// String text;
|
String text;
|
||||||
// int intValue = (value).ceil();
|
int intValue = (value).ceil();
|
||||||
// if (intValue % (2 * radtio) == 0 && intValue <= maxYR) {
|
if (intValue % (2 * radtio) == 0 && intValue <= maxYR) {
|
||||||
// text = (intValue / radtio).floor().toString();
|
text = (intValue / radtio).floor().toString();
|
||||||
// if (maxYR - intValue < 2 * radtio) {
|
if (maxYR - intValue < 2 * radtio) {
|
||||||
// text = "深度(m)";
|
text = "深度(m)";
|
||||||
// }
|
}
|
||||||
// } else {
|
} else {
|
||||||
// return const Text("");
|
return const Text("");
|
||||||
// }
|
}
|
||||||
|
|
||||||
// return Text(text, style: style, textAlign: TextAlign.center);
|
return Text(text, style: style, textAlign: TextAlign.center);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// //右y轴
|
//右y轴
|
||||||
// Widget rightTitleWidgets(double value, TitleMeta meta) {
|
Widget rightTitleWidgets(double value, TitleMeta meta) {
|
||||||
// String text;
|
String text;
|
||||||
// int intValue = value.toInt();
|
int intValue = value.toInt();
|
||||||
|
|
||||||
// if (intValue >= 0 && intValue % (2 * radtio) == 0 && intValue <= maxYR) {
|
if (intValue >= 0 && intValue % (2 * radtio) == 0 && intValue <= maxYR) {
|
||||||
// text = (intValue.ceil()).toString();
|
text = (intValue.ceil()).toString();
|
||||||
// if (maxYR - intValue < 2 * radtio) {
|
if (maxYR - intValue < 2 * radtio) {
|
||||||
// text = "流量(L)";
|
text = "流量(L)";
|
||||||
// }
|
}
|
||||||
// } else {
|
} else {
|
||||||
// return Container();
|
return Container();
|
||||||
// }
|
}
|
||||||
|
|
||||||
// return Text(text, style: style, textAlign: TextAlign.center);
|
return Text(text, style: style, textAlign: TextAlign.center);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// //边界数据
|
//边界数据
|
||||||
// FlBorderData get borderData => FlBorderData(
|
FlBorderData get borderData => FlBorderData(
|
||||||
// show: true,
|
show: true,
|
||||||
// border: const Border(
|
border: const Border(
|
||||||
// bottom: BorderSide(color: Colors.grey, width: 4),
|
bottom: BorderSide(color: Colors.grey, width: 4),
|
||||||
// left: BorderSide(color: Colors.transparent),
|
left: BorderSide(color: Colors.transparent),
|
||||||
// right: BorderSide(color: Colors.transparent),
|
right: BorderSide(color: Colors.transparent),
|
||||||
// top: BorderSide(color: Colors.transparent),
|
top: BorderSide(color: Colors.transparent),
|
||||||
// ),
|
),
|
||||||
// );
|
);
|
||||||
// //数据
|
//数据
|
||||||
// List<LineChartBarData> get lineBarsData => [
|
List<LineChartBarData> get lineBarsData => [
|
||||||
// lineChartBarDataTen1,
|
lineChartBarDataTen1,
|
||||||
// lineChartBarDataTen2,
|
lineChartBarDataTen2,
|
||||||
// lineChartBarDataDepth,
|
lineChartBarDataDepth,
|
||||||
// ];
|
];
|
||||||
// LineChartBarData get lineChartBarDataDepth => LineChartBarData(
|
LineChartBarData get lineChartBarDataDepth => LineChartBarData(
|
||||||
// isCurved: false,
|
isCurved: false,
|
||||||
// color: Colors.green,
|
color: Colors.green,
|
||||||
// barWidth: 3,
|
barWidth: 3,
|
||||||
// isStrokeCapRound: true,
|
isStrokeCapRound: true,
|
||||||
// dotData: const FlDotData(show: false),
|
dotData: const FlDotData(show: false),
|
||||||
// belowBarData: BarAreaData(show: false),
|
belowBarData: BarAreaData(show: false),
|
||||||
// spots: processList.map((item) {
|
spots: processList.map((item) {
|
||||||
// int index = processList.indexOf(item);
|
int index = processList.indexOf(item);
|
||||||
// return FlSpot(
|
return FlSpot(
|
||||||
// (maxX / processList.length) * index, (item.depth * radtio));
|
(maxX / processList.length) * index, (item.depth * radtio));
|
||||||
// }).toList());
|
}).toList());
|
||||||
|
|
||||||
// LineChartBarData get lineChartBarDataTen1 => LineChartBarData(
|
LineChartBarData get lineChartBarDataTen1 => LineChartBarData(
|
||||||
// isCurved: false,
|
isCurved: false,
|
||||||
// color: Colors.pink,
|
color: Colors.pink,
|
||||||
// barWidth: 3,
|
barWidth: 3,
|
||||||
// isStrokeCapRound: true,
|
isStrokeCapRound: true,
|
||||||
// dotData: const FlDotData(show: false),
|
dotData: const FlDotData(show: false),
|
||||||
// belowBarData: BarAreaData(
|
belowBarData: BarAreaData(
|
||||||
// show: false,
|
show: false,
|
||||||
// color: Colors.pink,
|
color: Colors.pink,
|
||||||
// ),
|
),
|
||||||
// spots: processList.map((item) {
|
spots: processList.map((item) {
|
||||||
// int index = processList.indexOf(item);
|
int index = processList.indexOf(item);
|
||||||
// return FlSpot((maxX / processList.length) * index, item.subtotalFlow1);
|
return FlSpot((maxX / processList.length) * index, item.subtotalFlow1);
|
||||||
// }).toList());
|
}).toList());
|
||||||
|
|
||||||
// LineChartBarData get lineChartBarDataTen2 => LineChartBarData(
|
LineChartBarData get lineChartBarDataTen2 => LineChartBarData(
|
||||||
// isCurved: false,
|
isCurved: false,
|
||||||
// color: Colors.cyan,
|
color: Colors.cyan,
|
||||||
// barWidth: 3,
|
barWidth: 3,
|
||||||
// isStrokeCapRound: true,
|
isStrokeCapRound: true,
|
||||||
// dotData: const FlDotData(show: false),
|
dotData: const FlDotData(show: false),
|
||||||
// belowBarData: BarAreaData(show: false),
|
belowBarData: BarAreaData(show: false),
|
||||||
// spots: processList.map((item) {
|
spots: processList.map((item) {
|
||||||
// int index = processList.indexOf(item);
|
int index = processList.indexOf(item);
|
||||||
// return FlSpot((maxX / processList.length) * index, item.subtotalFlow2);
|
return FlSpot((maxX / processList.length) * index, item.subtotalFlow2);
|
||||||
// }).toList());
|
}).toList());
|
||||||
// }
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
|
import 'line_chart.dart';
|
||||||
import 'real_controller.dart';
|
import 'real_controller.dart';
|
||||||
import 'real_data.dart';
|
import 'real_data.dart';
|
||||||
|
|
||||||
@ -29,21 +30,21 @@ class Real extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
space,
|
space,
|
||||||
// lineChart
|
// lineChart
|
||||||
// Expanded(
|
Expanded(
|
||||||
// flex: 1,
|
flex: 1,
|
||||||
// child: Column(
|
child: Column(
|
||||||
// children: [
|
children: [
|
||||||
// Expanded(child: RealChart()),
|
Expanded(child: RealChart()),
|
||||||
// Obx(() => Slider(
|
Obx(() => Slider(
|
||||||
// value: realController.startIndex.toDouble(),
|
value: realController.startIndex.toDouble(),
|
||||||
// onChanged: (newvalue) =>
|
onChanged: (newvalue) =>
|
||||||
// realController.updateSlider(newvalue),
|
realController.updateSlider(newvalue),
|
||||||
// min: 0,
|
min: 0,
|
||||||
// max: realController.processList.length.toDouble(),
|
max: realController.processList.length.toDouble(),
|
||||||
// )),
|
)),
|
||||||
// ],
|
],
|
||||||
// ),
|
),
|
||||||
// )
|
)
|
||||||
];
|
];
|
||||||
if (isPortrait) {
|
if (isPortrait) {
|
||||||
return Container(
|
return Container(
|
||||||
|
@ -1,113 +1,113 @@
|
|||||||
// // ignore_for_file: must_be_immutable
|
// ignore_for_file: must_be_immutable
|
||||||
|
|
||||||
// import 'package:fl_chart/fl_chart.dart';
|
import 'package:fl_chart/fl_chart.dart';
|
||||||
// import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
// import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
// import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
// import 'component/chart.dart';
|
import 'component/chart.dart';
|
||||||
// import 'process.dart';
|
import 'process.dart';
|
||||||
// import 'real_controller.dart';
|
import 'real_controller.dart';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// // 深度
|
// 深度
|
||||||
// class RealChart extends StatelessWidget {
|
class RealChart extends StatelessWidget {
|
||||||
// RealChart({super.key});
|
RealChart({super.key});
|
||||||
// ChartData chartData = ChartData(
|
ChartData chartData = ChartData(
|
||||||
// [],
|
[],
|
||||||
// );
|
);
|
||||||
// final RealController realController = Get.put(RealController());
|
final RealController realController = Get.put(RealController());
|
||||||
// List<ProcessEntity> processList = [];
|
List<ProcessEntity> processList = [];
|
||||||
// format(double value, [int fix = 2]) {
|
format(double value, [int fix = 2]) {
|
||||||
// return double.parse(value.toStringAsFixed(fix));
|
return double.parse(value.toStringAsFixed(fix));
|
||||||
// }
|
}
|
||||||
|
|
||||||
// List<ProcessEntity> cache = [];
|
List<ProcessEntity> cache = [];
|
||||||
// @override
|
@override
|
||||||
// Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
// // 显示长度
|
// 显示长度
|
||||||
// int showlength = 30;
|
int showlength = 30;
|
||||||
// ever(realController.depth, (newValue) {
|
ever(realController.depth, (newValue) {
|
||||||
// ProcessEntity process = ProcessEntity(
|
ProcessEntity process = ProcessEntity(
|
||||||
// recvTime: DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now()),
|
recvTime: DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now()),
|
||||||
// pileId: realController.pileId.value,
|
pileId: realController.pileId.value,
|
||||||
// utc: 0,
|
utc: 0,
|
||||||
// tid: 100,
|
tid: 100,
|
||||||
// toatalFlow1: format(realController.totalFlow1.value),
|
toatalFlow1: format(realController.totalFlow1.value),
|
||||||
// toatalFlow2: format(realController.totalFlow2.value),
|
toatalFlow2: format(realController.totalFlow2.value),
|
||||||
// subtotalFlow1: format(realController.subtotalFlow1.value),
|
subtotalFlow1: format(realController.subtotalFlow1.value),
|
||||||
// subtotalFlow2: format(realController.subtotalFlow2.value),
|
subtotalFlow2: format(realController.subtotalFlow2.value),
|
||||||
// depth: format(realController.depth.value),
|
depth: format(realController.depth.value),
|
||||||
// );
|
);
|
||||||
|
|
||||||
// processList.add(process);
|
processList.add(process);
|
||||||
|
|
||||||
// if (realController.sliderTime != null) {
|
if (realController.sliderTime != null) {
|
||||||
// if (DateTime.now().difference(realController.sliderTime!).inSeconds >
|
if (DateTime.now().difference(realController.sliderTime!).inSeconds >
|
||||||
// 10) {
|
10) {
|
||||||
// realController.updateProcessList(processList);
|
realController.updateProcessList(processList);
|
||||||
// realController.updateSlider(processList.length.toDouble(), false);
|
realController.updateSlider(processList.length.toDouble(), false);
|
||||||
// } else {
|
} else {
|
||||||
// return;
|
return;
|
||||||
// }
|
}
|
||||||
// } else {
|
} else {
|
||||||
// realController.updateProcessList(processList);
|
realController.updateProcessList(processList);
|
||||||
// if (realController.startIndex.value != processList.length) {
|
if (realController.startIndex.value != processList.length) {
|
||||||
// realController.updateSlider(processList.length.toDouble(), false);
|
realController.updateSlider(processList.length.toDouble(), false);
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// });
|
});
|
||||||
// ever(realController.pileId, (newValue) {
|
ever(realController.pileId, (newValue) {
|
||||||
// ProcessEntity process = ProcessEntity(
|
ProcessEntity process = ProcessEntity(
|
||||||
// recvTime: DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now()),
|
recvTime: DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now()),
|
||||||
// pileId: realController.pileId.value,
|
pileId: realController.pileId.value,
|
||||||
// utc: 0,
|
utc: 0,
|
||||||
// tid: 100,
|
tid: 100,
|
||||||
// toatalFlow1: format(realController.totalFlow1.value),
|
toatalFlow1: format(realController.totalFlow1.value),
|
||||||
// toatalFlow2: format(realController.totalFlow2.value),
|
toatalFlow2: format(realController.totalFlow2.value),
|
||||||
// subtotalFlow1: format(realController.subtotalFlow1.value),
|
subtotalFlow1: format(realController.subtotalFlow1.value),
|
||||||
// subtotalFlow2: format(realController.subtotalFlow2.value),
|
subtotalFlow2: format(realController.subtotalFlow2.value),
|
||||||
// depth: format(realController.depth.value),
|
depth: format(realController.depth.value),
|
||||||
// );
|
);
|
||||||
// processList.length = 0;
|
processList.length = 0;
|
||||||
// processList.add(process);
|
processList.add(process);
|
||||||
// realController.updateProcessList(processList.toList());
|
realController.updateProcessList(processList.toList());
|
||||||
// realController.startIndex.value = 0;
|
realController.startIndex.value = 0;
|
||||||
// });
|
});
|
||||||
|
|
||||||
// List<Widget> chartTitleWidget = chartData.chartTitleWeidget();
|
List<Widget> chartTitleWidget = chartData.chartTitleWeidget();
|
||||||
// Widget chartWidget(List<ProcessEntity> processList) {
|
Widget chartWidget(List<ProcessEntity> processList) {
|
||||||
// int startIndex = 0;
|
int startIndex = 0;
|
||||||
|
|
||||||
// if ((realController.startIndex.value + showlength) < processList.length &&
|
if ((realController.startIndex.value + showlength) < processList.length &&
|
||||||
// realController.startIndex.value != 0) {
|
realController.startIndex.value != 0) {
|
||||||
// startIndex = realController.startIndex.value;
|
startIndex = realController.startIndex.value;
|
||||||
// } else {
|
} else {
|
||||||
// startIndex = ((processList.length - showlength < 0)
|
startIndex = ((processList.length - showlength < 0)
|
||||||
// ? 0
|
? 0
|
||||||
// : (processList.length - showlength));
|
: (processList.length - showlength));
|
||||||
// }
|
}
|
||||||
// int endIndex = startIndex + showlength > processList.length
|
int endIndex = startIndex + showlength > processList.length
|
||||||
// ? processList.length
|
? processList.length
|
||||||
// : startIndex + showlength;
|
: startIndex + showlength;
|
||||||
// ChartData chartData = ChartData(
|
ChartData chartData = ChartData(
|
||||||
// processList.sublist(startIndex, endIndex),
|
processList.sublist(startIndex, endIndex),
|
||||||
// );
|
);
|
||||||
// return LineChart(chartData.lineChart);
|
return LineChart(chartData.lineChart);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// return Column(
|
return Column(
|
||||||
// children: [
|
children: [
|
||||||
// Row(
|
Row(
|
||||||
// mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
// children: chartTitleWidget,
|
children: chartTitleWidget,
|
||||||
// ),
|
),
|
||||||
// Expanded(
|
Expanded(
|
||||||
// flex: 1,
|
flex: 1,
|
||||||
// child: Obx(
|
child: Obx(
|
||||||
// () => SizedBox(child: chartWidget(realController.processList))))
|
() => SizedBox(child: chartWidget(realController.processList))))
|
||||||
// ],
|
],
|
||||||
// );
|
);
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
@ -1,134 +1,107 @@
|
|||||||
import 'dart:core';
|
import 'dart:core';
|
||||||
|
|
||||||
|
class ProcessEntity {
|
||||||
|
double speed;
|
||||||
|
double depth;
|
||||||
|
double tiltX;
|
||||||
|
double tiltY;
|
||||||
|
double current1;
|
||||||
|
double current2;
|
||||||
|
double toatalFlow2;
|
||||||
|
double toatalFlow1;
|
||||||
|
double subtotalFlow2;
|
||||||
|
double subtotalFlow1;
|
||||||
|
String recvTime;
|
||||||
|
// double? azimuth;
|
||||||
|
double alt = 0;
|
||||||
|
double lng = 0;
|
||||||
|
double lat = 0;
|
||||||
|
String pileId;
|
||||||
|
int utc;
|
||||||
|
int tid;
|
||||||
|
int? id;
|
||||||
|
ProcessEntity(
|
||||||
|
{this.speed = 0,
|
||||||
|
this.depth = 0,
|
||||||
|
this.tiltX = 0,
|
||||||
|
this.tiltY = 0,
|
||||||
|
this.current1 = 0,
|
||||||
|
this.current2 = 0,
|
||||||
|
this.toatalFlow2 = 0,
|
||||||
|
this.toatalFlow1 = 0,
|
||||||
|
this.subtotalFlow2 = 0,
|
||||||
|
this.subtotalFlow1 = 0,
|
||||||
|
required this.recvTime,
|
||||||
|
// this.azimuth,
|
||||||
|
this.alt = 0,
|
||||||
|
this.lng = 0,
|
||||||
|
this.lat = 0,
|
||||||
|
required this.pileId,
|
||||||
|
required this.utc,
|
||||||
|
required this.tid,
|
||||||
|
this.id});
|
||||||
|
factory ProcessEntity.fromJson(Map<String, dynamic> json) {
|
||||||
|
return ProcessEntity(
|
||||||
|
speed: (json["speed"] ?? "0").toDouble(),
|
||||||
|
depth: (json["depth"] ?? "0").toDouble(),
|
||||||
|
tiltX: (json["tilt_x"] ?? "0").toDouble(),
|
||||||
|
tiltY: (json["tilt_y"] ?? "0").toDouble(),
|
||||||
|
current1: (json["current1"] ?? "0").toDouble(),
|
||||||
|
current2: (json["current2"] ?? "0").toDouble(),
|
||||||
|
toatalFlow2: (json["toatal_flow2"] ?? "0").toDouble(),
|
||||||
|
toatalFlow1: (json["toatal_flow1"] ?? "0").toDouble(),
|
||||||
|
subtotalFlow2: (json["subtotal_flow2"] ?? "0").toDouble(),
|
||||||
|
subtotalFlow1: (json["subtotal_flow1"] ?? "0").toDouble(),
|
||||||
|
recvTime: json["recv_time"] ?? DateTime.now(),
|
||||||
|
// azimuth: (json["azimuth"] ?? "0").toDouble(),
|
||||||
|
alt: (json["ALT"] ?? "0").toDouble(),
|
||||||
|
lng: (json["LNG"] ?? "0").toDouble(),
|
||||||
|
lat: (json["LAT"] ?? "0").toDouble(),
|
||||||
|
pileId: json["pile_id"].toString(),
|
||||||
|
utc: json["UTC"],
|
||||||
|
tid: json['tid'],
|
||||||
|
id: json["id"],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// class ProcessEntity {
|
// class ProcessEntity {
|
||||||
// double speed;
|
// // String recvTime;
|
||||||
// double depth;
|
// double? azimuth;
|
||||||
// double tiltX;
|
|
||||||
// double tiltY;
|
|
||||||
// double current1;
|
|
||||||
// double current2;
|
|
||||||
// double toatalFlow2;
|
|
||||||
// double toatalFlow1;
|
|
||||||
// double subtotalFlow2;
|
|
||||||
// double subtotalFlow1;
|
|
||||||
// String recvTime;
|
|
||||||
// // double? azimuth;
|
|
||||||
// double alt = 0;
|
// double alt = 0;
|
||||||
// double lng = 0;
|
// double lng = 0;
|
||||||
// double lat = 0;
|
// double lat = 0;
|
||||||
// String pileId;
|
// int tp_id;
|
||||||
// int utc;
|
// int utc;
|
||||||
// int tid;
|
// int tid;
|
||||||
// int? id;
|
// int? id;
|
||||||
|
// int times;
|
||||||
|
// // impact_force
|
||||||
|
// // distance;
|
||||||
|
// // pith
|
||||||
// ProcessEntity(
|
// ProcessEntity(
|
||||||
// {this.speed = 0,
|
// {this.times = 0,
|
||||||
// this.depth = 0,
|
|
||||||
// this.tiltX = 0,
|
// // required this.recvTime,
|
||||||
// this.tiltY = 0,
|
// this.azimuth,
|
||||||
// this.current1 = 0,
|
|
||||||
// this.current2 = 0,
|
|
||||||
// this.toatalFlow2 = 0,
|
|
||||||
// this.toatalFlow1 = 0,
|
|
||||||
// this.subtotalFlow2 = 0,
|
|
||||||
// this.subtotalFlow1 = 0,
|
|
||||||
// required this.recvTime,
|
|
||||||
// // this.azimuth,
|
|
||||||
// this.alt = 0,
|
// this.alt = 0,
|
||||||
// this.lng = 0,
|
// this.lng = 0,
|
||||||
// this.lat = 0,
|
// this.lat = 0,
|
||||||
// required this.pileId,
|
// required this.tp_id,
|
||||||
// required this.utc,
|
// required this.utc,
|
||||||
// required this.tid,
|
// required this.tid,
|
||||||
// this.id});
|
// this.id});
|
||||||
// factory ProcessEntity.fromJson(Map<String, dynamic> json) {
|
// factory ProcessEntity.fromJson(Map<String, dynamic> json) {
|
||||||
// return ProcessEntity(
|
// return ProcessEntity(
|
||||||
// speed: (json["speed"] ?? "0").toDouble(),
|
// // recvTime: json["recv_time"] ?? DateTime.now(),
|
||||||
// depth: (json["depth"] ?? "0").toDouble(),
|
|
||||||
// tiltX: (json["tilt_x"] ?? "0").toDouble(),
|
|
||||||
// tiltY: (json["tilt_y"] ?? "0").toDouble(),
|
|
||||||
// current1: (json["current1"] ?? "0").toDouble(),
|
|
||||||
// current2: (json["current2"] ?? "0").toDouble(),
|
|
||||||
// toatalFlow2: (json["toatal_flow2"] ?? "0").toDouble(),
|
|
||||||
// toatalFlow1: (json["toatal_flow1"] ?? "0").toDouble(),
|
|
||||||
// subtotalFlow2: (json["subtotal_flow2"] ?? "0").toDouble(),
|
|
||||||
// subtotalFlow1: (json["subtotal_flow1"] ?? "0").toDouble(),
|
|
||||||
// recvTime: json["recv_time"] ?? DateTime.now(),
|
|
||||||
// // azimuth: (json["azimuth"] ?? "0").toDouble(),
|
// // azimuth: (json["azimuth"] ?? "0").toDouble(),
|
||||||
// alt: (json["ALT"] ?? "0").toDouble(),
|
// alt: (json["ALT"] ?? "0").toDouble(),
|
||||||
// lng: (json["LNG"] ?? "0").toDouble(),
|
// lng: (json["LNG"] ?? "0").toDouble(),
|
||||||
// lat: (json["LAT"] ?? "0").toDouble(),
|
// lat: (json["LAT"] ?? "0").toDouble(),
|
||||||
// pileId: json["pile_id"].toString(),
|
// tp_id: json["tp_id"],
|
||||||
// utc: json["UTC"],
|
// utc: json["UTC"],
|
||||||
// tid: json['tid'],
|
// tid: json['tid'],
|
||||||
// id: json["id"],
|
// id: json["id"],
|
||||||
// );
|
// );
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
class ProcessEntity {
|
|
||||||
// String recvTime;
|
|
||||||
double? azimuth;
|
|
||||||
double alt = 0;
|
|
||||||
double lng = 0;
|
|
||||||
double lat = 0;
|
|
||||||
int tp_id;
|
|
||||||
int utc;
|
|
||||||
int tid;
|
|
||||||
int? id;
|
|
||||||
int times;
|
|
||||||
double height;
|
|
||||||
double speed;
|
|
||||||
// double impact_force;
|
|
||||||
List<double> impact_force;
|
|
||||||
// distance;
|
|
||||||
// pith
|
|
||||||
ProcessEntity(
|
|
||||||
{this.times = 0,
|
|
||||||
|
|
||||||
// required this.recvTime,
|
|
||||||
this.azimuth,
|
|
||||||
this.alt = 0,
|
|
||||||
this.lng = 0,
|
|
||||||
this.lat = 0,
|
|
||||||
this.height = 0,
|
|
||||||
this.speed = 0,
|
|
||||||
required this.impact_force,
|
|
||||||
required this.tp_id,
|
|
||||||
required this.utc,
|
|
||||||
required this.tid,
|
|
||||||
this.id});
|
|
||||||
factory ProcessEntity.fromJson(Map<String, dynamic> json) {
|
|
||||||
return ProcessEntity(
|
|
||||||
// recvTime: json["recv_time"] ?? DateTime.now(),
|
|
||||||
// azimuth: (json["azimuth"] ?? "0").toDouble(),
|
|
||||||
alt: (json["ALT"] ?? "0").toDouble(),
|
|
||||||
lng: (json["LNG"] ?? "0").toDouble(),
|
|
||||||
lat: (json["LAT"] ?? "0").toDouble(),
|
|
||||||
tp_id: json["tp_id"],
|
|
||||||
utc: json["UTC"],
|
|
||||||
tid: json['tid'],
|
|
||||||
id: json["id"],
|
|
||||||
times: json["times"],
|
|
||||||
impact_force: json["impact_force"].cast<double>(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
factory ProcessEntity.fromList(List<String> list) {
|
|
||||||
|
|
||||||
return ProcessEntity(
|
|
||||||
utc:int.parse( list[2]),
|
|
||||||
lat: double.parse(list[3]),
|
|
||||||
lng: double.parse(list[4]),
|
|
||||||
height: double.parse(list[5]),
|
|
||||||
speed: double.parse(list[6]),
|
|
||||||
tp_id: 0, tid: 0,
|
|
||||||
impact_force: []
|
|
||||||
|
|
||||||
// impact_force: double.parse(list[7]),
|
|
||||||
|
|
||||||
// recvTime: json["recv_time"] ?? DateTime.now(),
|
|
||||||
// tp_id: ,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -1,189 +1,15 @@
|
|||||||
import 'dart:math';
|
|
||||||
import 'dart:developer' as developer;
|
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
import 'package:cpnav/pages/setting/child_pages/XyChange/xy_change.dart';
|
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:scence_map/controllers/controller.dart';
|
|
||||||
import 'package:scence_map/record_entity.dart';
|
|
||||||
// import 'package:flutter_webrtc/flutter_webrtc.dart';
|
// import 'package:flutter_webrtc/flutter_webrtc.dart';
|
||||||
|
|
||||||
import '../../models/pilePoint/coord_trans.dart';
|
|
||||||
import '../setting/child_pages/XyChange/coor_trans.dart';
|
|
||||||
import '../setting/setting_controller.dart';
|
|
||||||
import 'process.dart';
|
import 'process.dart';
|
||||||
// pile_cm
|
|
||||||
// class RealController extends GetxController {
|
|
||||||
// var sightOffset1 = const Offset(3, 3).obs;
|
|
||||||
// var sightOffsetInit1 = const Offset(0, 0).obs;
|
|
||||||
// var sightInit1 = const Offset(0, 0).obs;
|
|
||||||
// var initDx = 0.0.obs;
|
|
||||||
// reset() {
|
|
||||||
// sightOffset1.value = const Offset(3, 3);
|
|
||||||
// sightOffsetInit1.value = const Offset(0, 0);
|
|
||||||
// sightInit1.value = const Offset(0, 0);
|
|
||||||
|
|
||||||
// initDx.value = 0.0;
|
|
||||||
// update();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // RTCPeerConnection? peerConnection;
|
|
||||||
// // RTCDataChannel? dataChannel;
|
|
||||||
// final speed = 0.0.obs;
|
|
||||||
// final depth = 0.0.obs;
|
|
||||||
// final tiltX = 0.0.obs;
|
|
||||||
// final tiltY = 0.0.obs;
|
|
||||||
// final centerX = 0.0.obs;
|
|
||||||
// final centerY = 0.0.obs;
|
|
||||||
// final current1 = 0.0.obs;
|
|
||||||
// final current2 = 0.0.obs;
|
|
||||||
// final totalFlow2 = 0.0.obs;
|
|
||||||
// final totalFlow1 = 0.0.obs;
|
|
||||||
// final flow10cm1 = 0.0.obs;
|
|
||||||
// final flow10cm2 = 0.0.obs;
|
|
||||||
// final subtotalFlow2 = 0.0.obs;
|
|
||||||
// final subtotalFlow1 = 0.0.obs;
|
|
||||||
// final recvTime = ''.obs;
|
|
||||||
// final alt = 0.0.obs;
|
|
||||||
// final lng = 0.0.obs;
|
|
||||||
// final lat = 0.0.obs;
|
|
||||||
// final pileId = ''.obs;
|
|
||||||
// final time = "0".obs;
|
|
||||||
// final startIndex = 0.obs;
|
|
||||||
// // 折线数组
|
|
||||||
|
|
||||||
// final processList = <ProcessEntity>[].obs;
|
|
||||||
// var isDataVisible = false.obs;
|
|
||||||
|
|
||||||
// void updateProcessList(List<ProcessEntity> newList) {
|
|
||||||
// processList.assignAll(newList); // 使用 assignAll 方法更新 RxList
|
|
||||||
// }
|
|
||||||
|
|
||||||
// DateTime? sliderTime;
|
|
||||||
// updateSlider(double newValue, [isHand = true]) {
|
|
||||||
// if (isHand) {
|
|
||||||
// sliderTime = DateTime.now();
|
|
||||||
// }
|
|
||||||
// startIndex.value = newValue.toInt();
|
|
||||||
// update();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// @override
|
|
||||||
// void onInit() {
|
|
||||||
// super.onInit();
|
|
||||||
// // 定时器每秒更新时间
|
|
||||||
// // Timer.periodic(const Duration(milliseconds: 1000), (_) {
|
|
||||||
// // time.value = DateTime.now();
|
|
||||||
// // });
|
|
||||||
// initializePeerConnection();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// void initializePeerConnection() async {
|
|
||||||
// // final configuration = <String, dynamic>{
|
|
||||||
// // 'iceServers': [
|
|
||||||
// // {'url': 'stun:stun.l.google.com:19302'},
|
|
||||||
// // ],
|
|
||||||
// // };
|
|
||||||
// // peerConnection = await createPeerConnection(configuration);
|
|
||||||
// // initializeDataChannel();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // void initializeDataChannel() async {
|
|
||||||
// // // 创建数据通道
|
|
||||||
// // dataChannel = await peerConnection!
|
|
||||||
// // .createDataChannel('dataChannel', RTCDataChannelInit()..id = 1);
|
|
||||||
|
|
||||||
// // // 监听数据通道的消息事件
|
|
||||||
// // dataChannel!.onMessage = (RTCDataChannelMessage message) {
|
|
||||||
// // // 处理接收到的消息
|
|
||||||
// // if (message.isBinary) {
|
|
||||||
// // onBleData(message.binary);
|
|
||||||
// // }
|
|
||||||
// // };
|
|
||||||
// // }
|
|
||||||
|
|
||||||
// onBleData(Uint8List data) {
|
|
||||||
// ByteData byteData = data.buffer.asByteData();
|
|
||||||
// int tag = byteData.getUint8(0);
|
|
||||||
// // int length = byteData.getUint8(1);
|
|
||||||
// if (tag == 161) {
|
|
||||||
// speed.value = byteData.getInt16(2, Endian.little) * 0.1;
|
|
||||||
// int timeInt = byteData.getUint16(4, Endian.little);
|
|
||||||
// // log(timeInt);
|
|
||||||
// time.value = convertSecondsToMinSec(timeInt);
|
|
||||||
// depth.value = byteData.getInt16(6, Endian.little) * 0.001;
|
|
||||||
// pileId.value = byteData.getUint16(8, Endian.little).toString();
|
|
||||||
// subtotalFlow1.value = byteData.getInt16(10, Endian.little) * 0.01;
|
|
||||||
// flow10cm1.value = byteData.getUint16(12, Endian.little) * 0.01;
|
|
||||||
// totalFlow1.value = byteData.getInt32(14, Endian.little) * 0.01;
|
|
||||||
// subtotalFlow2.value = byteData.getInt16(18, Endian.little) * 0.01;
|
|
||||||
// flow10cm2.value = byteData.getUint16(20, Endian.little) * 0.01;
|
|
||||||
// totalFlow2.value = byteData.getInt32(22, Endian.little) * 0.01;
|
|
||||||
// current1.value = byteData.getUint16(26, Endian.little) * 0.01;
|
|
||||||
// current2.value = byteData.getUint16(28, Endian.little) * 0.01;
|
|
||||||
// // current3.value = byteData.getUint16(30, Endian.little) * 0.01;
|
|
||||||
// int tag1 = byteData.getUint8(34);
|
|
||||||
// // int length = byteData.getUint8(35);
|
|
||||||
// if (tag1 == 162) {
|
|
||||||
// // var gpsStatus = byteData.getUint8(36);
|
|
||||||
// // var gpsView = byteData.getUint8(37);
|
|
||||||
|
|
||||||
// // var gpsUse = byteData.getUint8(38);
|
|
||||||
// // var reg = byteData.getUint8(39);
|
|
||||||
// // var utc = byteData.getUint32(40, Endian.little);
|
|
||||||
// // 中心坐标
|
|
||||||
// centerX.value = byteData.getFloat64(44, Endian.little);
|
|
||||||
// centerY.value = byteData.getFloat64(52, Endian.little);
|
|
||||||
// // log("中心---$centerX,$centerY");
|
|
||||||
// // tiltX.value = byteData.getFloat64(44, Endian.little);
|
|
||||||
// // tiltY.value = byteData.getFloat64(52, Endian.little);
|
|
||||||
// // var direction = byteData.getFloat64(60, Endian.little);
|
|
||||||
// // var pitch = byteData.getFloat64(68, Endian.little);
|
|
||||||
// // log("$gpsUse,$gpsView,$utc,$direction,$pitch");
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// String convertSecondsToMinSec(int totalSeconds) {
|
|
||||||
// int minutes = totalSeconds ~/ 60;
|
|
||||||
// int seconds = totalSeconds % 60;
|
|
||||||
|
|
||||||
// String formattedTime = '$minutes:${seconds.toString().padLeft(2, '0')}';
|
|
||||||
|
|
||||||
// return formattedTime;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// @override
|
|
||||||
// void dispose() {
|
|
||||||
// // dataChannel?.close(); // 关闭数据通道
|
|
||||||
// // peerConnection?.close(); // 关闭对等连接
|
|
||||||
// super.dispose();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
final ScenceMapController mapController = Get.find<ScenceMapController>();
|
|
||||||
SettingController settingController = Get.find<SettingController>();
|
|
||||||
XYChangeController xyChangeController = Get.put(XYChangeController());
|
|
||||||
|
|
||||||
class RealController extends GetxController {
|
class RealController extends GetxController {
|
||||||
var sightOffset1 = const Offset(3, 3).obs;
|
var sightOffset1 = const Offset(3, 3).obs;
|
||||||
var sightOffsetInit1 = const Offset(0, 0).obs;
|
var sightOffsetInit1 = const Offset(0, 0).obs;
|
||||||
var sightInit1 = const Offset(0, 0).obs;
|
var sightInit1 = const Offset(0, 0).obs;
|
||||||
var initDx = 0.0.obs;
|
var initDx = 0.0.obs;
|
||||||
var processdata = ProcessEntity(
|
|
||||||
tid: 0,
|
|
||||||
speed: 0,
|
|
||||||
alt: 0,
|
|
||||||
lng: 0,
|
|
||||||
lat: 0,
|
|
||||||
tp_id: 0,
|
|
||||||
utc: DateTime.now().millisecond,
|
|
||||||
impact_force: []).obs;
|
|
||||||
var dataCount = 0.obs;
|
|
||||||
CoordTrans? coordTrans;
|
|
||||||
var status = 0.obs;
|
|
||||||
var sa = 0.obs;
|
|
||||||
var sv = 0.obs;
|
|
||||||
reset() {
|
reset() {
|
||||||
sightOffset1.value = const Offset(3, 3);
|
sightOffset1.value = const Offset(3, 3);
|
||||||
sightOffsetInit1.value = const Offset(0, 0);
|
sightOffsetInit1.value = const Offset(0, 0);
|
||||||
@ -193,87 +19,136 @@ class RealController extends GetxController {
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RTCPeerConnection? peerConnection;
|
||||||
|
// RTCDataChannel? dataChannel;
|
||||||
|
final speed = 0.0.obs;
|
||||||
|
final depth = 0.0.obs;
|
||||||
|
final tiltX = 0.0.obs;
|
||||||
|
final tiltY = 0.0.obs;
|
||||||
|
final centerX = 0.0.obs;
|
||||||
|
final centerY = 0.0.obs;
|
||||||
|
final current1 = 0.0.obs;
|
||||||
|
final current2 = 0.0.obs;
|
||||||
|
final totalFlow2 = 0.0.obs;
|
||||||
|
final totalFlow1 = 0.0.obs;
|
||||||
|
final flow10cm1 = 0.0.obs;
|
||||||
|
final flow10cm2 = 0.0.obs;
|
||||||
|
final subtotalFlow2 = 0.0.obs;
|
||||||
|
final subtotalFlow1 = 0.0.obs;
|
||||||
|
final recvTime = ''.obs;
|
||||||
|
final alt = 0.0.obs;
|
||||||
|
final lng = 0.0.obs;
|
||||||
|
final lat = 0.0.obs;
|
||||||
|
final pileId = ''.obs;
|
||||||
|
final time = "0".obs;
|
||||||
|
final startIndex = 0.obs;
|
||||||
|
// 折线数组
|
||||||
|
|
||||||
|
final processList = <ProcessEntity>[].obs;
|
||||||
var isDataVisible = false.obs;
|
var isDataVisible = false.obs;
|
||||||
onBleData(Uint8List data) {
|
|
||||||
String str = String.fromCharCodes(data);
|
void updateProcessList(List<ProcessEntity> newList) {
|
||||||
String first = str.split("#POSA")[1];
|
processList.assignAll(newList); // 使用 assignAll 方法更新 RxList
|
||||||
List<String> list = first.split(",");
|
}
|
||||||
double baseLine = double.parse(list[7]);
|
|
||||||
double heading = double.parse(list[8]);
|
DateTime? sliderTime;
|
||||||
double pitch = double.parse(list[9]);
|
updateSlider(double newValue, [isHand = true]) {
|
||||||
status.value = int.parse(list[1]);
|
if (isHand) {
|
||||||
sa.value = int.parse(list[10]);
|
sliderTime = DateTime.now();
|
||||||
List<String> svStr = list[11].trim().split(" ");
|
|
||||||
sv.value = int.parse(svStr[0]);
|
|
||||||
ProcessEntity process = ProcessEntity.fromList(list);
|
|
||||||
processdata.update((value) {
|
|
||||||
// value.speed = process.speed;
|
|
||||||
value?.lat = process.lat;
|
|
||||||
value?.lng = process.lng;
|
|
||||||
value?.alt = process.height;
|
|
||||||
value?.utc = process.utc;
|
|
||||||
});
|
|
||||||
dataCount.value++;
|
|
||||||
CoorTransModel trans = xyChangeController.coorTrans.value;
|
|
||||||
coordTrans ??= CoordTrans(TransOptions(
|
|
||||||
L0: trans.L0,
|
|
||||||
// dstEllipsoid: trans.dstEllipsoid,
|
|
||||||
// srcEllipsoid: trans.srcEllipsoid,
|
|
||||||
dx: trans.dx,
|
|
||||||
dy: trans.dy,
|
|
||||||
type: trans.type));
|
|
||||||
var xyh = coordTrans!
|
|
||||||
.d2p(CoordBLH(B: process.lat, L: process.lng, H: process.alt));
|
|
||||||
Offset offset = Offset(xyh.X, xyh.Y);
|
|
||||||
if ((mapController.centerXY - offset).distance > 40) {
|
|
||||||
mapController.centerXY = offset;
|
|
||||||
}
|
}
|
||||||
RecordEntity record = RecordEntity(
|
startIndex.value = newValue.toInt();
|
||||||
tid: 0,
|
update();
|
||||||
tpId: -1,
|
}
|
||||||
id: 0,
|
|
||||||
startTime: DateTime.now(),
|
@override
|
||||||
endTime: DateTime.now(),
|
void onInit() {
|
||||||
lat: process.lat,
|
super.onInit();
|
||||||
lng: process.lng,
|
// 定时器每秒更新时间
|
||||||
name: "实时",
|
// Timer.periodic(const Duration(milliseconds: 1000), (_) {
|
||||||
times: 1,
|
// time.value = DateTime.now();
|
||||||
x: xyh.X,
|
// });
|
||||||
y: xyh.Y,
|
initializePeerConnection();
|
||||||
strongDrop: 0,
|
}
|
||||||
);
|
|
||||||
if (mapController.recordList.isEmpty) {
|
void initializePeerConnection() async {
|
||||||
mapController.recordList.add(record);
|
// final configuration = <String, dynamic>{
|
||||||
} else {
|
// 'iceServers': [
|
||||||
int index = mapController.recordList
|
// {'url': 'stun:stun.l.google.com:19302'},
|
||||||
.lastIndexWhere((element) => element.tpId == -1);
|
// ],
|
||||||
if (index == -1) {
|
// };
|
||||||
mapController.recordList.add(record);
|
// peerConnection = await createPeerConnection(configuration);
|
||||||
} else {
|
// initializeDataChannel();
|
||||||
mapController.recordList[index] = record;
|
}
|
||||||
|
|
||||||
|
// void initializeDataChannel() async {
|
||||||
|
// // 创建数据通道
|
||||||
|
// dataChannel = await peerConnection!
|
||||||
|
// .createDataChannel('dataChannel', RTCDataChannelInit()..id = 1);
|
||||||
|
|
||||||
|
// // 监听数据通道的消息事件
|
||||||
|
// dataChannel!.onMessage = (RTCDataChannelMessage message) {
|
||||||
|
// // 处理接收到的消息
|
||||||
|
// if (message.isBinary) {
|
||||||
|
// onBleData(message.binary);
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
// }
|
||||||
|
|
||||||
|
onBleData(Uint8List data) {
|
||||||
|
ByteData byteData = data.buffer.asByteData();
|
||||||
|
int tag = byteData.getUint8(0);
|
||||||
|
// int length = byteData.getUint8(1);
|
||||||
|
if (tag == 161) {
|
||||||
|
speed.value = byteData.getInt16(2, Endian.little) * 0.1;
|
||||||
|
int timeInt = byteData.getUint16(4, Endian.little);
|
||||||
|
// log(timeInt);
|
||||||
|
time.value = convertSecondsToMinSec(timeInt);
|
||||||
|
depth.value = byteData.getInt16(6, Endian.little) * 0.001;
|
||||||
|
pileId.value = byteData.getUint16(8, Endian.little).toString();
|
||||||
|
subtotalFlow1.value = byteData.getInt16(10, Endian.little) * 0.01;
|
||||||
|
flow10cm1.value = byteData.getUint16(12, Endian.little) * 0.01;
|
||||||
|
totalFlow1.value = byteData.getInt32(14, Endian.little) * 0.01;
|
||||||
|
subtotalFlow2.value = byteData.getInt16(18, Endian.little) * 0.01;
|
||||||
|
flow10cm2.value = byteData.getUint16(20, Endian.little) * 0.01;
|
||||||
|
totalFlow2.value = byteData.getInt32(22, Endian.little) * 0.01;
|
||||||
|
current1.value = byteData.getUint16(26, Endian.little) * 0.01;
|
||||||
|
current2.value = byteData.getUint16(28, Endian.little) * 0.01;
|
||||||
|
// current3.value = byteData.getUint16(30, Endian.little) * 0.01;
|
||||||
|
int tag1 = byteData.getUint8(34);
|
||||||
|
// int length = byteData.getUint8(35);
|
||||||
|
if (tag1 == 162) {
|
||||||
|
// var gpsStatus = byteData.getUint8(36);
|
||||||
|
// var gpsView = byteData.getUint8(37);
|
||||||
|
|
||||||
|
// var gpsUse = byteData.getUint8(38);
|
||||||
|
// var reg = byteData.getUint8(39);
|
||||||
|
// var utc = byteData.getUint32(40, Endian.little);
|
||||||
|
// 中心坐标
|
||||||
|
centerX.value = byteData.getFloat64(44, Endian.little);
|
||||||
|
centerY.value = byteData.getFloat64(52, Endian.little);
|
||||||
|
// log("中心---$centerX,$centerY");
|
||||||
|
// tiltX.value = byteData.getFloat64(44, Endian.little);
|
||||||
|
// tiltY.value = byteData.getFloat64(52, Endian.little);
|
||||||
|
// var direction = byteData.getFloat64(60, Endian.little);
|
||||||
|
// var pitch = byteData.getFloat64(68, Endian.little);
|
||||||
|
// log("$gpsUse,$gpsView,$utc,$direction,$pitch");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mapController.updateCount++;
|
String convertSecondsToMinSec(int totalSeconds) {
|
||||||
var centerDev =
|
int minutes = totalSeconds ~/ 60;
|
||||||
mapController.deviceList[settingController.currentDevice.value?.tid];
|
int seconds = totalSeconds % 60;
|
||||||
if (centerDev != null) {
|
|
||||||
// log("center${xyh.X},${xyh.Y}");
|
|
||||||
|
|
||||||
centerDev.update.value++;
|
String formattedTime = '$minutes:${seconds.toString().padLeft(2, '0')}';
|
||||||
double pitchRad = pitch * pi / 180;
|
|
||||||
double headingRad = (heading) * pi / 180; //(270-)
|
|
||||||
centerDev.rotation.value = (heading + 90) * pi / 180;
|
|
||||||
// 计算水平投影距离
|
|
||||||
double dXY = baseLine * cos(pitchRad);
|
|
||||||
|
|
||||||
// 计算副天线的坐标
|
return formattedTime;
|
||||||
double carX = xyh.X + dXY * cos(headingRad);
|
}
|
||||||
double carY = xyh.Y + dXY * sin(headingRad);
|
|
||||||
|
|
||||||
centerDev.x.value = carX;
|
@override
|
||||||
centerDev.y.value = carY;
|
void dispose() {
|
||||||
developer.log("carX:$carX,carY:$carY");
|
// dataChannel?.close(); // 关闭数据通道
|
||||||
}
|
// peerConnection?.close(); // 关闭对等连接
|
||||||
|
super.dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,98 +22,97 @@ class RealData extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
// 设备获取
|
// 设备获取
|
||||||
// late TextStyle titleFontstyle;
|
late TextStyle titleFontstyle;
|
||||||
// late TextStyle valueFontstyle;
|
late TextStyle valueFontstyle;
|
||||||
// final deviceType = getDeviceType(context);
|
final deviceType = getDeviceType(context);
|
||||||
// if (deviceType == DeviceType.mobile) {
|
if (deviceType == DeviceType.mobile) {
|
||||||
// titleFontstyle = const TextStyle(fontSize: 15);
|
titleFontstyle = const TextStyle(fontSize: 15);
|
||||||
// valueFontstyle = const TextStyle(fontSize: 36);
|
valueFontstyle = const TextStyle(fontSize: 36);
|
||||||
// } else {
|
} else {
|
||||||
// titleFontstyle = const TextStyle(fontSize: 22);
|
titleFontstyle = const TextStyle(fontSize: 22);
|
||||||
// valueFontstyle = const TextStyle(fontSize: 45);
|
valueFontstyle = const TextStyle(fontSize: 45);
|
||||||
// }
|
}
|
||||||
// Widget space = const SizedBox(
|
Widget space = const SizedBox(
|
||||||
// height: 5,
|
height: 5,
|
||||||
// width: 5,
|
width: 5,
|
||||||
// );
|
);
|
||||||
return const Expanded(
|
return Expanded(
|
||||||
flex: 1,
|
flex: 1,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
// RealItem(children: [
|
RealItem(children: [
|
||||||
// RealItemChild(
|
RealItemChild(
|
||||||
// // flex: 2,
|
// flex: 2,
|
||||||
// title: "速度(m/min)",
|
title: "速度(m/min)",
|
||||||
// titleFontstyle: titleFontstyle,
|
titleFontstyle: titleFontstyle,
|
||||||
// child: Obx(() {
|
child: Obx(() {
|
||||||
// return Text(
|
return Text(
|
||||||
// realController.speed.abs() >= 100
|
realController.speed.abs() >= 100
|
||||||
// ? realController.speed.toStringAsFixed(1)
|
? realController.speed.toStringAsFixed(1)
|
||||||
// : realController.speed.toStringAsFixed(2),
|
: realController.speed.toStringAsFixed(2),
|
||||||
// style: valueFontstyle,
|
style: valueFontstyle,
|
||||||
// );
|
);
|
||||||
// }),
|
}),
|
||||||
// ),
|
),
|
||||||
// space,
|
space,
|
||||||
// RealItemChild(
|
RealItemChild(
|
||||||
// // flex: 3,
|
// flex: 3,
|
||||||
// title: "时间(min:s)",
|
title: "时间(min:s)",
|
||||||
// titleFontstyle: titleFontstyle,
|
titleFontstyle: titleFontstyle,
|
||||||
// child: Obx(() => Text(
|
child: Obx(() => Text(
|
||||||
// realController.time.value,
|
realController.time.value,
|
||||||
// style: valueFontstyle,
|
style: valueFontstyle,
|
||||||
// ))),
|
))),
|
||||||
// space,
|
space,
|
||||||
// RealItemChild(
|
RealItemChild(
|
||||||
// // flex: 2,
|
// flex: 2,
|
||||||
// title: "深度(m)",
|
title: "深度(m)",
|
||||||
// titleFontstyle: titleFontstyle,
|
titleFontstyle: titleFontstyle,
|
||||||
// child: Obx(() => Text(
|
child: Obx(() => Text(
|
||||||
// realController.depth.toStringAsFixed(2),
|
realController.depth.toStringAsFixed(2),
|
||||||
// style: valueFontstyle,
|
style: valueFontstyle,
|
||||||
// ))),
|
))),
|
||||||
// ]),
|
]),
|
||||||
// space,
|
space,
|
||||||
// RealItem(children: [
|
RealItem(children: [
|
||||||
// RealItemChild(
|
RealItemChild(
|
||||||
// // flex: 1,
|
// flex: 1,
|
||||||
// title: "1#瞬时流量(L/min)",
|
title: "1#瞬时流量(L/min)",
|
||||||
// titleFontstyle: titleFontstyle,
|
titleFontstyle: titleFontstyle,
|
||||||
// child: Obx(() => Text(
|
child: Obx(() => Text(
|
||||||
// realController.subtotalFlow1.toStringAsFixed(2),
|
realController.subtotalFlow1.toStringAsFixed(2),
|
||||||
// style: valueFontstyle,
|
style: valueFontstyle,
|
||||||
// ))),
|
))),
|
||||||
// space,
|
space,
|
||||||
// RealItemChild(
|
RealItemChild(
|
||||||
// // flex: 1,
|
// flex: 1,
|
||||||
// title: "2#瞬时流量(L/min)",
|
title: "2#瞬时流量(L/min)",
|
||||||
// titleFontstyle: titleFontstyle,
|
titleFontstyle: titleFontstyle,
|
||||||
// child: Obx(() => Text(
|
child: Obx(() => Text(
|
||||||
// realController.subtotalFlow2.toStringAsFixed(2),
|
realController.subtotalFlow2.toStringAsFixed(2),
|
||||||
// style: valueFontstyle,
|
style: valueFontstyle,
|
||||||
// ))),
|
))),
|
||||||
// ]),
|
]),
|
||||||
// space,
|
space,
|
||||||
// RealItem(children: [
|
RealItem(children: [
|
||||||
// RealItemChild(
|
RealItemChild(
|
||||||
// // flex: 1,
|
// flex: 1,
|
||||||
// title: "1#累计流量(L)",
|
title: "1#累计流量(L)",
|
||||||
// titleFontstyle: titleFontstyle,
|
titleFontstyle: titleFontstyle,
|
||||||
// child: Obx(() => Text(
|
child: Obx(() => Text(
|
||||||
// realController.totalFlow1.toStringAsFixed(2),
|
realController.totalFlow1.toStringAsFixed(2),
|
||||||
// style: valueFontstyle,
|
style: valueFontstyle,
|
||||||
// ))),
|
))),
|
||||||
// space,
|
space,
|
||||||
// RealItemChild(
|
RealItemChild(
|
||||||
// // flex: 1,
|
// flex: 1,
|
||||||
// title: "2#累计流量(L)",
|
title: "2#累计流量(L)",
|
||||||
// titleFontstyle: titleFontstyle,
|
titleFontstyle: titleFontstyle,
|
||||||
// child: Obx(() => Text(
|
child: Obx(() => Text(
|
||||||
// realController.totalFlow2.toStringAsFixed(2),
|
realController.totalFlow2.toStringAsFixed(2),
|
||||||
// style: valueFontstyle,
|
style: valueFontstyle,
|
||||||
// ))),
|
))),
|
||||||
// ])
|
])
|
||||||
|
|
||||||
],
|
],
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
//实时数据卡片
|
//实时数据卡片
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:intl/intl.dart';
|
|
||||||
|
|
||||||
import 'real_controller.dart';
|
import 'real_controller.dart';
|
||||||
|
|
||||||
@ -75,12 +74,7 @@ class RealDataShow extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
Obx(() {
|
..._buildRealTimeDataList(context),
|
||||||
controller1.dataCount;
|
|
||||||
return Column(children: [
|
|
||||||
..._buildRealTimeDataList(context, controller1)
|
|
||||||
]);
|
|
||||||
})
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -120,8 +114,9 @@ class RealDataShow extends StatelessWidget {
|
|||||||
// );
|
// );
|
||||||
// }
|
// }
|
||||||
|
|
||||||
List<Widget> _buildRealTimeDataList(
|
List<Widget> _buildRealTimeDataList(BuildContext context) {
|
||||||
BuildContext context, RealController controller) {
|
// 获取实时控制器
|
||||||
|
final RealController realController = Get.find();
|
||||||
bool isDarkMode = Theme.of(context).brightness == Brightness.dark;
|
bool isDarkMode = Theme.of(context).brightness == Brightness.dark;
|
||||||
|
|
||||||
// final orientation = MediaQuery.of(context).orientation;
|
// final orientation = MediaQuery.of(context).orientation;
|
||||||
@ -147,11 +142,7 @@ class RealDataShow extends StatelessWidget {
|
|||||||
// ];
|
// ];
|
||||||
// hydraulic_tamping
|
// hydraulic_tamping
|
||||||
List<DataItem> dataItems = [
|
List<DataItem> dataItems = [
|
||||||
DataItem(
|
DataItem("时间(min:s):", () => realController.time.value),
|
||||||
"时间(min:s):",
|
|
||||||
() => DateFormat('HH:mm:ss').format(
|
|
||||||
DateTime.fromMillisecondsSinceEpoch(
|
|
||||||
controller.processdata.value.utc * 1000))),
|
|
||||||
// DataItem("夯击次数:", () => realController.times.value)
|
// DataItem("夯击次数:", () => realController.times.value)
|
||||||
];
|
];
|
||||||
// 返回数据项的列表
|
// 返回数据项的列表
|
||||||
@ -166,11 +157,11 @@ class RealDataShow extends StatelessWidget {
|
|||||||
fontSize: 13,
|
fontSize: 13,
|
||||||
color: isDarkMode ? Colors.white : Colors.black,
|
color: isDarkMode ? Colors.white : Colors.black,
|
||||||
)),
|
)),
|
||||||
Text(item.value(),
|
Obx(() => Text(item.value(),
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 18,
|
fontSize: 18,
|
||||||
color: isDarkMode ? Colors.white : Colors.black,
|
color: isDarkMode ? Colors.white : Colors.black,
|
||||||
)),
|
))),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -511,8 +511,8 @@ class XYChangeController extends GetxController {
|
|||||||
project.projCode,
|
project.projCode,
|
||||||
);
|
);
|
||||||
if (coordTransmap.isNotEmpty) {
|
if (coordTransmap.isNotEmpty) {
|
||||||
var mianBelt = coordTransmap.firstWhere(
|
var mianBelt =
|
||||||
(element) => element['belt'] == 'main' || element["name"] == "主带");
|
coordTransmap.firstWhere((element) => element['belt'] == 'main');
|
||||||
coorTrans.value = CoorTransModel.fromJson(mianBelt);
|
coorTrans.value = CoorTransModel.fromJson(mianBelt);
|
||||||
} else {
|
} else {
|
||||||
log("当前项目没有设置中央子午线");
|
log("当前项目没有设置中央子午线");
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
import 'dart:async';
|
|
||||||
import 'dart:developer';
|
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
@ -7,83 +5,74 @@ import '../../../../real/index.dart';
|
|||||||
import '../bluetooth_page.dart';
|
import '../bluetooth_page.dart';
|
||||||
|
|
||||||
class SocketSetting {
|
class SocketSetting {
|
||||||
int port = 6060;
|
int port = 6000;
|
||||||
String ip = "192.168.1.183";
|
String ip = "192.168.4.1";
|
||||||
bool isConnected = false;
|
bool isConnected = false;
|
||||||
int times = 0;
|
int times = 0;
|
||||||
Socket? socket;
|
RawDatagramSocket? socket;
|
||||||
int reconnectCount = 0;
|
|
||||||
Duration _reconnectDelay = const Duration(seconds: 5);
|
|
||||||
connect() async {
|
connect() async {
|
||||||
// tcp连接
|
// tcp连接
|
||||||
try {
|
// try {
|
||||||
socket = await Socket.connect(ip, port);
|
// socket = await Socket.connect(ip, port);
|
||||||
// 订阅
|
// // 订阅
|
||||||
// socket!.add([0xf2]);
|
// socket!.add([0xf2]);
|
||||||
|
|
||||||
// 监听服务器回复
|
// // 监听服务器回复
|
||||||
socket!.listen(
|
// socket!.listen(
|
||||||
(Uint8List data) {
|
// (Uint8List data) {
|
||||||
realController.onBleData(data);
|
// realController.onBleData(data);
|
||||||
if (isConnected == false) {
|
// // log('收到服务器回复:$data');
|
||||||
isConnected = true;
|
// },
|
||||||
reconnectCount = 0;
|
// onError: (error) async {
|
||||||
_reconnectDelay = const Duration(seconds: 5);
|
// disConnect();
|
||||||
}
|
|
||||||
// log('收到服务器回复:$data');
|
|
||||||
},
|
|
||||||
onError: (error) async {
|
|
||||||
disConnect();
|
|
||||||
reconnect();
|
|
||||||
log('与服务器的连接发生错误:$error');
|
|
||||||
socket = await Socket.connect(ip, port);
|
|
||||||
return;
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
// 监听服务器断开连接
|
// log('与服务器的连接发生错误:$error');
|
||||||
socket!.done.then((_) {
|
// socket = await Socket.connect(ip, port);
|
||||||
log('与服务器的连接已断开');
|
// return;
|
||||||
|
// },
|
||||||
|
// );
|
||||||
|
|
||||||
disConnect();
|
// // 监听服务器断开连接
|
||||||
reconnect();
|
// socket!.done.then((_) {
|
||||||
});
|
// log('与服务器的连接已断开');
|
||||||
} catch (e) {
|
|
||||||
log("----------$e");
|
// disConnect();
|
||||||
disConnect();
|
// });
|
||||||
reconnect();
|
// } catch (e) {
|
||||||
}
|
// log("----------$e");
|
||||||
|
// disConnect();
|
||||||
|
// }
|
||||||
|
|
||||||
// udp连接
|
// udp连接
|
||||||
|
|
||||||
// socket = await RawDatagramSocket.bind(
|
socket = await RawDatagramSocket.bind(
|
||||||
// InternetAddress.anyIPv4, 6000); //InternetAddress(ip)
|
InternetAddress.anyIPv4, 6000); //InternetAddress(ip)
|
||||||
|
|
||||||
// // 订阅
|
// // 订阅
|
||||||
// socket!.send([0xf2], InternetAddress(ip), 6000);
|
socket!.send([0xf2], InternetAddress(ip), 6000);
|
||||||
|
|
||||||
// socket!.listen((RawSocketEvent e) {
|
socket!.listen((RawSocketEvent e) {
|
||||||
// times++;
|
times++;
|
||||||
// if (times == 20) {
|
if (times == 20) {
|
||||||
// times = 0;
|
times = 0;
|
||||||
// socket!.send([0xf2], InternetAddress(ip), 6000);
|
socket!.send([0xf2], InternetAddress(ip), 6000);
|
||||||
// }
|
}
|
||||||
// Datagram? dg = socket!.receive();
|
Datagram? dg = socket!.receive();
|
||||||
// if (dg != null) {
|
if (dg != null) {
|
||||||
// realController.onBleData(dg.data);
|
realController.onBleData(dg.data);
|
||||||
// // log('从 ${dg.address.address}:${dg.port} 接收:');
|
// log('从 ${dg.address.address}:${dg.port} 接收:');
|
||||||
// // 发送响应给客户端
|
// 发送响应给客户端
|
||||||
// // socket.send("已收到".codeUnits, dg.address, dg.port);
|
// socket.send("已收到".codeUnits, dg.address, dg.port);
|
||||||
// }
|
}
|
||||||
// });
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
write(Uint8List data) async {
|
write(Uint8List data) async {
|
||||||
try {
|
try {
|
||||||
// socket ??= await Socket.connect(ip, port);
|
// socket ??= await Socket.connect(ip, port);
|
||||||
// Datagram? dg = socket!.receive();
|
Datagram? dg = socket!.receive();
|
||||||
// socket!.send(data, dg!.address, dg.port);
|
socket!.send(data, dg!.address, dg.port);
|
||||||
socket!.add(data);
|
// socket!.add(data);
|
||||||
// ignore: empty_catches
|
// ignore: empty_catches
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
}
|
}
|
||||||
@ -97,21 +86,4 @@ class SocketSetting {
|
|||||||
//
|
//
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void reconnect() {
|
|
||||||
if (socket != null) {
|
|
||||||
socket!.close();
|
|
||||||
socket = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
log('Reconnecting in ${_reconnectDelay.inSeconds} seconds...');
|
|
||||||
Timer(_reconnectDelay, () {
|
|
||||||
reconnectCount++;
|
|
||||||
if (reconnectCount > 20) {
|
|
||||||
_reconnectDelay = const Duration(seconds: 60);
|
|
||||||
}
|
|
||||||
isConnected = false;
|
|
||||||
connect();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
import 'package:cpnav/pages/pass_track/controller.dart';
|
import 'package:cpnav/pages/pass_track/controller.dart';
|
||||||
import 'package:cpnav/pages/setting/project/model.dart';
|
import 'package:cpnav/pages/setting/project/model.dart';
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:get_storage/get_storage.dart';
|
import 'package:get_storage/get_storage.dart';
|
||||||
import 'package:scence_map/controllers/controller.dart';
|
import 'package:scence_map/controllers/controller.dart';
|
||||||
import 'package:device_info_plus/device_info_plus.dart';
|
|
||||||
import '../../models/user.dart';
|
import '../../models/user.dart';
|
||||||
import '../../service/base.dart';
|
import '../../service/base.dart';
|
||||||
import '../../service/user/loginprefs.dart';
|
import '../../service/user/loginprefs.dart';
|
||||||
@ -27,28 +26,9 @@ class SettingController extends GetxController {
|
|||||||
// @override
|
// @override
|
||||||
// void onInit() async {
|
// void onInit() async {
|
||||||
// super.onInit();
|
// super.onInit();
|
||||||
|
|
||||||
// }
|
// }
|
||||||
|
|
||||||
Future<void> getDeviceId(context) async {
|
|
||||||
final DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
|
|
||||||
|
|
||||||
String id;
|
|
||||||
|
|
||||||
// 根据不同平台获取设备信息
|
|
||||||
if (Theme.of(context).platform == TargetPlatform.android) {
|
|
||||||
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
|
|
||||||
|
|
||||||
id = androidInfo.brand; // 仔细确认你需要的设备编号
|
|
||||||
}
|
|
||||||
// else if (Theme.of(context).platform == TargetPlatform.iOS) {
|
|
||||||
// IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
|
|
||||||
// // id = iosInfo.identifierForVendor; // iOS设备编号
|
|
||||||
// }
|
|
||||||
else {
|
|
||||||
id = 'Unknown platform';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
init() async {
|
init() async {
|
||||||
isInitialized = false;
|
isInitialized = false;
|
||||||
UserModel? getUser = UserController().getUser();
|
UserModel? getUser = UserController().getUser();
|
||||||
@ -75,8 +55,9 @@ class SettingController extends GetxController {
|
|||||||
currentProject.value = projectList[0];
|
currentProject.value = projectList[0];
|
||||||
setProject(currentProject.value!.toJson());
|
setProject(currentProject.value!.toJson());
|
||||||
// services.projCode = currentProject.value!.projCode;
|
// services.projCode = currentProject.value!.projCode;
|
||||||
|
await getBindService(services);
|
||||||
}
|
}
|
||||||
await getBindService(services);
|
|
||||||
isInitialized = true;
|
isInitialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,9 +197,6 @@ class DrawDirection extends CustomPainter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getRect(List<Offset> list) {
|
getRect(List<Offset> list) {
|
||||||
if (list.isEmpty) {
|
|
||||||
return [Offset.zero, Offset.zero, Offset.zero, Offset.zero];
|
|
||||||
}
|
|
||||||
List<Offset> rect = [];
|
List<Offset> rect = [];
|
||||||
double minx = double.infinity;
|
double minx = double.infinity;
|
||||||
double maxx = double.negativeInfinity;
|
double maxx = double.negativeInfinity;
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import 'dart:async';
|
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:developer';
|
import 'dart:developer';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
@ -7,7 +6,6 @@ import 'package:cpnav/pages/setting/setting_controller.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
import 'package:roslibdart/roslibdart.dart';
|
|
||||||
|
|
||||||
import '../main.dart';
|
import '../main.dart';
|
||||||
import 'user/loginprefs.dart';
|
import 'user/loginprefs.dart';
|
||||||
@ -43,11 +41,12 @@ class BaseService {
|
|||||||
loginPrefs.clearLogin();
|
loginPrefs.clearLogin();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int code = res['code'];
|
if (res['code'] == 1000) {
|
||||||
if (code != 1000) {
|
return res;
|
||||||
// log(res);
|
} else {
|
||||||
|
log(res);
|
||||||
String msg = res['message'].toString();
|
String msg = res['message'].toString();
|
||||||
if (code == 404) {
|
if (res['code'] == 404) {
|
||||||
msg = "当前接口不存在:$msg";
|
msg = "当前接口不存在:$msg";
|
||||||
}
|
}
|
||||||
scaffoldMessengerKey.currentState?.showSnackBar(
|
scaffoldMessengerKey.currentState?.showSnackBar(
|
||||||
@ -57,14 +56,9 @@ class BaseService {
|
|||||||
backgroundColor: Colors.red,
|
backgroundColor: Colors.red,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
return res;
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
} catch (e) {
|
|
||||||
log(" catch error: ${e.toString()}");
|
|
||||||
if (e is TimeoutException) {
|
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
} catch (e) {
|
||||||
scaffoldMessengerKey.currentState?.showSnackBar(
|
scaffoldMessengerKey.currentState?.showSnackBar(
|
||||||
SnackBar(
|
SnackBar(
|
||||||
content: Text('发生错误: ${e.toString()}'),
|
content: Text('发生错误: ${e.toString()}'),
|
||||||
@ -72,7 +66,7 @@ class BaseService {
|
|||||||
backgroundColor: Colors.red,
|
backgroundColor: Colors.red,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
log(e.toString());
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -108,9 +102,9 @@ class BaseService {
|
|||||||
|
|
||||||
checkExpire() {
|
checkExpire() {
|
||||||
int old = loginPrefs.getRefreshExpire();
|
int old = loginPrefs.getRefreshExpire();
|
||||||
int now = DateTime.now().millisecondsSinceEpoch;
|
int now = DateTime.now().millisecond;
|
||||||
|
|
||||||
if (old - now <= 2000) {
|
if (now - old <= 2000) {
|
||||||
//2s
|
//2s
|
||||||
refreshToken();
|
refreshToken();
|
||||||
}
|
}
|
||||||
@ -123,26 +117,22 @@ class BaseService {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
Uri fullUrl = Uri.parse(
|
Uri fullUrl = Uri.parse(
|
||||||
"$baseUrl/admin/base/open/refreshToken?refreshToken=$refreshToken");
|
"$baseUrl/admin/base/open/refreshToken?refreshToken=$refreshToken");
|
||||||
http.Response response = await _client.get(fullUrl).timeout(timeout);
|
http.Response response = await _client.get(fullUrl).timeout(timeout);
|
||||||
var res = json.decode(response.body);
|
var res = json.decode(response.body);
|
||||||
|
|
||||||
if (res['code'] == 1000 && res["data"] != null) {
|
if (res['code'] == 1000 && res["data"] != null) {
|
||||||
token = res["data"]["token"];
|
token = res["data"]["token"];
|
||||||
loginPrefs.saveExpire(res["data"]["expire"]);
|
loginPrefs.saveExpire(res["data"]["expire"]);
|
||||||
loginPrefs.saveToken(token);
|
loginPrefs.saveToken(token);
|
||||||
loginPrefs.saveRefreshToken(res["data"]["refreshToken"]);
|
loginPrefs.saveRefreshToken(res["data"]["refreshToken"]);
|
||||||
loginPrefs.saveRefreshExpire(res["data"]["refreshExpire"]);
|
loginPrefs.saveRefreshExpire(res["data"]["refreshExpire"]);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log("refreshToken error: $e");
|
log("refreshToken error: $e");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
String rosUrl ="ws://192.168.1.90:9090";
|
|
||||||
getRos(){
|
|
||||||
Ros ros = Ros(url: rosUrl);
|
|
||||||
return ros;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -324,7 +314,7 @@ class GetServices {
|
|||||||
dateEnd ??= date;
|
dateEnd ??= date;
|
||||||
Map? res = await service.getClient(
|
Map? res = await service.getClient(
|
||||||
"/api/$projType/record/list?org_code=$org_code&proj_code=$projCode&date=$date&dateEnd=$dateEnd"); //&tid=1000
|
"/api/$projType/record/list?org_code=$org_code&proj_code=$projCode&date=$date&dateEnd=$dateEnd"); //&tid=1000
|
||||||
if (res != null && res.isNotEmpty && res['data'] != null) {
|
if (res != null && res['data'] != null) {
|
||||||
return res['data'];
|
return res['data'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: args
|
name: args
|
||||||
sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
|
sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.6.0"
|
version: "2.6.0"
|
||||||
async:
|
async:
|
||||||
@ -14,7 +14,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: async
|
name: async
|
||||||
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
|
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.11.0"
|
version: "2.11.0"
|
||||||
bluez:
|
bluez:
|
||||||
@ -22,7 +22,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: bluez
|
name: bluez
|
||||||
sha256: "203a1924e818a9dd74af2b2c7a8f375ab8e5edf0e486bba8f90a0d8a17ed9fce"
|
sha256: "203a1924e818a9dd74af2b2c7a8f375ab8e5edf0e486bba8f90a0d8a17ed9fce"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.8.2"
|
version: "0.8.2"
|
||||||
boolean_selector:
|
boolean_selector:
|
||||||
@ -30,7 +30,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: boolean_selector
|
name: boolean_selector
|
||||||
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
|
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.1.1"
|
||||||
characters:
|
characters:
|
||||||
@ -38,7 +38,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: characters
|
name: characters
|
||||||
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
|
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.0"
|
version: "1.3.0"
|
||||||
clock:
|
clock:
|
||||||
@ -46,7 +46,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: clock
|
name: clock
|
||||||
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
|
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.1"
|
version: "1.1.1"
|
||||||
collection:
|
collection:
|
||||||
@ -54,7 +54,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: collection
|
name: collection
|
||||||
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
|
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.18.0"
|
version: "1.18.0"
|
||||||
convert:
|
convert:
|
||||||
@ -62,7 +62,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: convert
|
name: convert
|
||||||
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
|
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.2"
|
version: "3.1.2"
|
||||||
cupertino_icons:
|
cupertino_icons:
|
||||||
@ -70,7 +70,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: cupertino_icons
|
name: cupertino_icons
|
||||||
sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
|
sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.8"
|
version: "1.0.8"
|
||||||
dbus:
|
dbus:
|
||||||
@ -78,7 +78,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: dbus
|
name: dbus
|
||||||
sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac"
|
sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.10"
|
version: "0.7.10"
|
||||||
fake_async:
|
fake_async:
|
||||||
@ -86,7 +86,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: fake_async
|
name: fake_async
|
||||||
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
|
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.1"
|
version: "1.3.1"
|
||||||
ffi:
|
ffi:
|
||||||
@ -94,7 +94,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: ffi
|
name: ffi
|
||||||
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
|
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.3"
|
version: "2.1.3"
|
||||||
flutter:
|
flutter:
|
||||||
@ -107,7 +107,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: flutter_lints
|
name: flutter_lints
|
||||||
sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04
|
sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.3"
|
version: "2.0.3"
|
||||||
flutter_test:
|
flutter_test:
|
||||||
@ -120,7 +120,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: leak_tracker
|
name: leak_tracker
|
||||||
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
|
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.0.5"
|
version: "10.0.5"
|
||||||
leak_tracker_flutter_testing:
|
leak_tracker_flutter_testing:
|
||||||
@ -128,7 +128,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: leak_tracker_flutter_testing
|
name: leak_tracker_flutter_testing
|
||||||
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
|
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.5"
|
version: "3.0.5"
|
||||||
leak_tracker_testing:
|
leak_tracker_testing:
|
||||||
@ -136,7 +136,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: leak_tracker_testing
|
name: leak_tracker_testing
|
||||||
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
|
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.1"
|
version: "3.0.1"
|
||||||
lints:
|
lints:
|
||||||
@ -144,7 +144,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: lints
|
name: lints
|
||||||
sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
|
sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.1.1"
|
||||||
logging:
|
logging:
|
||||||
@ -152,7 +152,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: logging
|
name: logging
|
||||||
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
|
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.0"
|
version: "1.3.0"
|
||||||
matcher:
|
matcher:
|
||||||
@ -160,7 +160,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: matcher
|
name: matcher
|
||||||
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
|
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.12.16+1"
|
version: "0.12.16+1"
|
||||||
material_color_utilities:
|
material_color_utilities:
|
||||||
@ -168,7 +168,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: material_color_utilities
|
name: material_color_utilities
|
||||||
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
|
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.11.1"
|
version: "0.11.1"
|
||||||
meta:
|
meta:
|
||||||
@ -176,7 +176,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: meta
|
name: meta
|
||||||
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
|
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.15.0"
|
version: "1.15.0"
|
||||||
path:
|
path:
|
||||||
@ -184,7 +184,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: path
|
name: path
|
||||||
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
|
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.0"
|
version: "1.9.0"
|
||||||
petitparser:
|
petitparser:
|
||||||
@ -192,7 +192,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: petitparser
|
name: petitparser
|
||||||
sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
|
sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.2"
|
version: "6.0.2"
|
||||||
plugin_platform_interface:
|
plugin_platform_interface:
|
||||||
@ -200,7 +200,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: plugin_platform_interface
|
name: plugin_platform_interface
|
||||||
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
|
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.8"
|
version: "2.1.8"
|
||||||
quick_blue:
|
quick_blue:
|
||||||
@ -220,7 +220,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: source_span
|
name: source_span
|
||||||
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
|
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.10.0"
|
version: "1.10.0"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
@ -228,7 +228,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: stack_trace
|
name: stack_trace
|
||||||
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
|
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.11.1"
|
version: "1.11.1"
|
||||||
stream_channel:
|
stream_channel:
|
||||||
@ -236,7 +236,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: stream_channel
|
name: stream_channel
|
||||||
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
|
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.2"
|
version: "2.1.2"
|
||||||
string_scanner:
|
string_scanner:
|
||||||
@ -244,7 +244,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: string_scanner
|
name: string_scanner
|
||||||
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
|
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0"
|
version: "1.2.0"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
@ -252,7 +252,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: term_glyph
|
name: term_glyph
|
||||||
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
|
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.1"
|
version: "1.2.1"
|
||||||
test_api:
|
test_api:
|
||||||
@ -260,7 +260,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: test_api
|
name: test_api
|
||||||
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
|
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.2"
|
version: "0.7.2"
|
||||||
typed_data:
|
typed_data:
|
||||||
@ -268,7 +268,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: typed_data
|
name: typed_data
|
||||||
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
|
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.4.0"
|
version: "1.4.0"
|
||||||
vector_math:
|
vector_math:
|
||||||
@ -276,23 +276,23 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: vector_math
|
name: vector_math
|
||||||
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
|
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.4"
|
version: "2.1.4"
|
||||||
vm_service:
|
vm_service:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vm_service
|
name: vm_service
|
||||||
sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc
|
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "14.2.4"
|
version: "14.2.5"
|
||||||
xml:
|
xml:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: xml
|
name: xml
|
||||||
sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
|
sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.5.0"
|
version: "6.5.0"
|
||||||
sdks:
|
sdks:
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 9b1ec3ea2d0ee1e10f6ad2ee32482092972f5cfd
|
Subproject commit cc9ee2fe1abf30613fe191794e841cf0399f8d58
|
228
pubspec.lock
228
pubspec.lock
@ -6,7 +6,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: args
|
name: args
|
||||||
sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
|
sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.6.0"
|
version: "2.6.0"
|
||||||
async:
|
async:
|
||||||
@ -14,7 +14,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: async
|
name: async
|
||||||
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
|
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.11.0"
|
version: "2.11.0"
|
||||||
bluez:
|
bluez:
|
||||||
@ -22,7 +22,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: bluez
|
name: bluez
|
||||||
sha256: "203a1924e818a9dd74af2b2c7a8f375ab8e5edf0e486bba8f90a0d8a17ed9fce"
|
sha256: "203a1924e818a9dd74af2b2c7a8f375ab8e5edf0e486bba8f90a0d8a17ed9fce"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.8.2"
|
version: "0.8.2"
|
||||||
boolean_selector:
|
boolean_selector:
|
||||||
@ -30,23 +30,23 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: boolean_selector
|
name: boolean_selector
|
||||||
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
|
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.1.1"
|
||||||
bottom_picker:
|
bottom_picker:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: bottom_picker
|
name: bottom_picker
|
||||||
sha256: "5d52cf94cfe41e3cc448101552f9b2e9faa810e3609e18432280431fb7dd676a"
|
sha256: "7c690407c6c489bc7c556858c3f1b804aac73c3a128559f328cc829ba12983ad"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.9.0"
|
version: "2.8.0"
|
||||||
calendar_date_picker2:
|
calendar_date_picker2:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: calendar_date_picker2
|
name: calendar_date_picker2
|
||||||
sha256: "986955aea43081c8cf70fe01735ccdfe9a7041218b2be53ed92d5d4e639e8a1a"
|
sha256: "986955aea43081c8cf70fe01735ccdfe9a7041218b2be53ed92d5d4e639e8a1a"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.7"
|
version: "1.1.7"
|
||||||
characters:
|
characters:
|
||||||
@ -54,7 +54,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: characters
|
name: characters
|
||||||
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
|
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.0"
|
version: "1.3.0"
|
||||||
clock:
|
clock:
|
||||||
@ -62,7 +62,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: clock
|
name: clock
|
||||||
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
|
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.1"
|
version: "1.1.1"
|
||||||
collection:
|
collection:
|
||||||
@ -70,7 +70,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: collection
|
name: collection
|
||||||
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
|
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.18.0"
|
version: "1.18.0"
|
||||||
convert:
|
convert:
|
||||||
@ -78,7 +78,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: convert
|
name: convert
|
||||||
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
|
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.2"
|
version: "3.1.2"
|
||||||
crypto:
|
crypto:
|
||||||
@ -86,7 +86,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: crypto
|
name: crypto
|
||||||
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
|
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.6"
|
version: "3.0.6"
|
||||||
cupertino_icons:
|
cupertino_icons:
|
||||||
@ -94,7 +94,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: cupertino_icons
|
name: cupertino_icons
|
||||||
sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
|
sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.8"
|
version: "1.0.8"
|
||||||
dart_webrtc:
|
dart_webrtc:
|
||||||
@ -102,7 +102,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: dart_webrtc
|
name: dart_webrtc
|
||||||
sha256: c664ad88d5646735753add421ee2118486c100febef5e92b7f59cdbabf6a51f6
|
sha256: c664ad88d5646735753add421ee2118486c100febef5e92b7f59cdbabf6a51f6
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.4.9"
|
version: "1.4.9"
|
||||||
data_table_2:
|
data_table_2:
|
||||||
@ -110,7 +110,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: data_table_2
|
name: data_table_2
|
||||||
sha256: f02ec9b24f44420816a87370ff4f4e533e15b274f6267e4c9a88a585ad1a0473
|
sha256: f02ec9b24f44420816a87370ff4f4e533e15b274f6267e4c9a88a585ad1a0473
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.5.15"
|
version: "2.5.15"
|
||||||
dbus:
|
dbus:
|
||||||
@ -118,31 +118,15 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: dbus
|
name: dbus
|
||||||
sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac"
|
sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.10"
|
version: "0.7.10"
|
||||||
device_info_plus:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: device_info_plus
|
|
||||||
sha256: f545ffbadee826f26f2e1a0f0cbd667ae9a6011cc0f77c0f8f00a969655e6e95
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "11.1.1"
|
|
||||||
device_info_plus_platform_interface:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: device_info_plus_platform_interface
|
|
||||||
sha256: "282d3cf731045a2feb66abfe61bbc40870ae50a3ed10a4d3d217556c35c8c2ba"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "7.0.1"
|
|
||||||
dylib:
|
dylib:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: dylib
|
name: dylib
|
||||||
sha256: bf609b3eb6492a3309b3d1dbe8f83a4031de5535dd7686be33487051cc760bb0
|
sha256: bf609b3eb6492a3309b3d1dbe8f83a4031de5535dd7686be33487051cc760bb0
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.3.3"
|
version: "0.3.3"
|
||||||
equatable:
|
equatable:
|
||||||
@ -150,7 +134,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: equatable
|
name: equatable
|
||||||
sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2
|
sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.5"
|
version: "2.0.5"
|
||||||
fake_async:
|
fake_async:
|
||||||
@ -158,7 +142,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: fake_async
|
name: fake_async
|
||||||
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
|
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.1"
|
version: "1.3.1"
|
||||||
ffi:
|
ffi:
|
||||||
@ -166,23 +150,15 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: ffi
|
name: ffi
|
||||||
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
|
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.3"
|
version: "2.1.3"
|
||||||
file:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: file
|
|
||||||
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "7.0.1"
|
|
||||||
fl_chart:
|
fl_chart:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: fl_chart
|
name: fl_chart
|
||||||
sha256: "94307bef3a324a0d329d3ab77b2f0c6e5ed739185ffc029ed28c0f9b019ea7ef"
|
sha256: "94307bef3a324a0d329d3ab77b2f0c6e5ed739185ffc029ed28c0f9b019ea7ef"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.69.0"
|
version: "0.69.0"
|
||||||
flutter:
|
flutter:
|
||||||
@ -195,7 +171,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: flutter_lints
|
name: flutter_lints
|
||||||
sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1"
|
sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.2"
|
version: "3.0.2"
|
||||||
flutter_localizations:
|
flutter_localizations:
|
||||||
@ -207,10 +183,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_svg
|
name: flutter_svg
|
||||||
sha256: "578bd8c508144fdaffd4f77b8ef2d8c523602275cd697cc3db284dbd762ef4ce"
|
sha256: de82e6bf958cec7190fbc1c5298282c851228e35ae2b14e2b103e7f777818c64
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.14"
|
version: "2.0.13"
|
||||||
flutter_test:
|
flutter_test:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -226,7 +202,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: flutter_webrtc
|
name: flutter_webrtc
|
||||||
sha256: "2f17fb96e0c9c6ff75f6b1c36d94755461fc7f36a5c28386f5ee5a18b98688c8"
|
sha256: "2f17fb96e0c9c6ff75f6b1c36d94755461fc7f36a5c28386f5ee5a18b98688c8"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.9.48+hotfix.1"
|
version: "0.9.48+hotfix.1"
|
||||||
get:
|
get:
|
||||||
@ -234,7 +210,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: get
|
name: get
|
||||||
sha256: e4e7335ede17452b391ed3b2ede016545706c01a02292a6c97619705e7d2a85e
|
sha256: e4e7335ede17452b391ed3b2ede016545706c01a02292a6c97619705e7d2a85e
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.6.6"
|
version: "4.6.6"
|
||||||
get_storage:
|
get_storage:
|
||||||
@ -242,7 +218,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: get_storage
|
name: get_storage
|
||||||
sha256: "39db1fffe779d0c22b3a744376e86febe4ade43bf65e06eab5af707dc84185a2"
|
sha256: "39db1fffe779d0c22b3a744376e86febe4ade43bf65e06eab5af707dc84185a2"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.1.1"
|
||||||
gnss:
|
gnss:
|
||||||
@ -259,7 +235,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: google_fonts
|
name: google_fonts
|
||||||
sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82
|
sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.2.1"
|
version: "6.2.1"
|
||||||
http:
|
http:
|
||||||
@ -267,7 +243,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: http
|
name: http
|
||||||
sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
|
sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.2"
|
version: "1.2.2"
|
||||||
http_parser:
|
http_parser:
|
||||||
@ -275,7 +251,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: http_parser
|
name: http_parser
|
||||||
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
|
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.2"
|
version: "4.0.2"
|
||||||
intl:
|
intl:
|
||||||
@ -283,7 +259,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: intl
|
name: intl
|
||||||
sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
|
sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.19.0"
|
version: "0.19.0"
|
||||||
js:
|
js:
|
||||||
@ -291,7 +267,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: js
|
name: js
|
||||||
sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
|
sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.1"
|
version: "0.7.1"
|
||||||
leak_tracker:
|
leak_tracker:
|
||||||
@ -299,7 +275,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: leak_tracker
|
name: leak_tracker
|
||||||
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
|
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.0.5"
|
version: "10.0.5"
|
||||||
leak_tracker_flutter_testing:
|
leak_tracker_flutter_testing:
|
||||||
@ -307,7 +283,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: leak_tracker_flutter_testing
|
name: leak_tracker_flutter_testing
|
||||||
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
|
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.5"
|
version: "3.0.5"
|
||||||
leak_tracker_testing:
|
leak_tracker_testing:
|
||||||
@ -315,7 +291,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: leak_tracker_testing
|
name: leak_tracker_testing
|
||||||
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
|
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.1"
|
version: "3.0.1"
|
||||||
libserialport:
|
libserialport:
|
||||||
@ -332,7 +308,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: lints
|
name: lints
|
||||||
sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290
|
sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.0"
|
version: "3.0.0"
|
||||||
logging:
|
logging:
|
||||||
@ -340,7 +316,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: logging
|
name: logging
|
||||||
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
|
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.0"
|
version: "1.3.0"
|
||||||
matcher:
|
matcher:
|
||||||
@ -348,7 +324,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: matcher
|
name: matcher
|
||||||
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
|
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.12.16+1"
|
version: "0.12.16+1"
|
||||||
material_color_utilities:
|
material_color_utilities:
|
||||||
@ -356,7 +332,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: material_color_utilities
|
name: material_color_utilities
|
||||||
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
|
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.11.1"
|
version: "0.11.1"
|
||||||
meta:
|
meta:
|
||||||
@ -364,7 +340,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: meta
|
name: meta
|
||||||
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
|
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.15.0"
|
version: "1.15.0"
|
||||||
open_settings:
|
open_settings:
|
||||||
@ -372,7 +348,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: open_settings
|
name: open_settings
|
||||||
sha256: ceb716dc476352aecb939805b6fa6a593168a5ed1abfe3caa022b6b1715e94ae
|
sha256: ceb716dc476352aecb939805b6fa6a593168a5ed1abfe3caa022b6b1715e94ae
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.2"
|
version: "2.0.2"
|
||||||
path:
|
path:
|
||||||
@ -380,7 +356,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: path
|
name: path
|
||||||
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
|
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.0"
|
version: "1.9.0"
|
||||||
path_parsing:
|
path_parsing:
|
||||||
@ -388,7 +364,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: path_parsing
|
name: path_parsing
|
||||||
sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca"
|
sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.1.0"
|
||||||
path_provider:
|
path_provider:
|
||||||
@ -396,7 +372,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: path_provider
|
name: path_provider
|
||||||
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
|
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.5"
|
version: "2.1.5"
|
||||||
path_provider_android:
|
path_provider_android:
|
||||||
@ -404,7 +380,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: path_provider_android
|
name: path_provider_android
|
||||||
sha256: c464428172cb986b758c6d1724c603097febb8fb855aa265aeecc9280c294d4a
|
sha256: c464428172cb986b758c6d1724c603097febb8fb855aa265aeecc9280c294d4a
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.12"
|
version: "2.2.12"
|
||||||
path_provider_foundation:
|
path_provider_foundation:
|
||||||
@ -412,7 +388,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: path_provider_foundation
|
name: path_provider_foundation
|
||||||
sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
|
sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.4.0"
|
version: "2.4.0"
|
||||||
path_provider_linux:
|
path_provider_linux:
|
||||||
@ -420,7 +396,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: path_provider_linux
|
name: path_provider_linux
|
||||||
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
|
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.1"
|
version: "2.2.1"
|
||||||
path_provider_platform_interface:
|
path_provider_platform_interface:
|
||||||
@ -428,7 +404,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: path_provider_platform_interface
|
name: path_provider_platform_interface
|
||||||
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
|
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.2"
|
version: "2.1.2"
|
||||||
path_provider_windows:
|
path_provider_windows:
|
||||||
@ -436,7 +412,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: path_provider_windows
|
name: path_provider_windows
|
||||||
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
|
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.3.0"
|
version: "2.3.0"
|
||||||
permission_handler:
|
permission_handler:
|
||||||
@ -444,7 +420,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: permission_handler
|
name: permission_handler
|
||||||
sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb"
|
sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "11.3.1"
|
version: "11.3.1"
|
||||||
permission_handler_android:
|
permission_handler_android:
|
||||||
@ -452,7 +428,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: permission_handler_android
|
name: permission_handler_android
|
||||||
sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1"
|
sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "12.0.13"
|
version: "12.0.13"
|
||||||
permission_handler_apple:
|
permission_handler_apple:
|
||||||
@ -460,23 +436,23 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: permission_handler_apple
|
name: permission_handler_apple
|
||||||
sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0
|
sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "9.4.5"
|
version: "9.4.5"
|
||||||
permission_handler_html:
|
permission_handler_html:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_html
|
name: permission_handler_html
|
||||||
sha256: "6b9cb54b7135073841a35513fba39e598b421702d5f4d92319992fd6eb5532a9"
|
sha256: af26edbbb1f2674af65a8f4b56e1a6f526156bc273d0e65dd8075fab51c78851
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.1.3+4"
|
version: "0.1.3+2"
|
||||||
permission_handler_platform_interface:
|
permission_handler_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_platform_interface
|
name: permission_handler_platform_interface
|
||||||
sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9
|
sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.2.3"
|
version: "4.2.3"
|
||||||
permission_handler_windows:
|
permission_handler_windows:
|
||||||
@ -484,7 +460,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: permission_handler_windows
|
name: permission_handler_windows
|
||||||
sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
|
sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.2.1"
|
version: "0.2.1"
|
||||||
petitparser:
|
petitparser:
|
||||||
@ -492,7 +468,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: petitparser
|
name: petitparser
|
||||||
sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
|
sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.2"
|
version: "6.0.2"
|
||||||
platform:
|
platform:
|
||||||
@ -500,7 +476,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: platform
|
name: platform
|
||||||
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
|
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.6"
|
version: "3.1.6"
|
||||||
platform_detect:
|
platform_detect:
|
||||||
@ -508,7 +484,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: platform_detect
|
name: platform_detect
|
||||||
sha256: a62f99417fc4fa2d099ce0ccdbb1bd3977920f2a64292c326271f049d4bc3a4f
|
sha256: a62f99417fc4fa2d099ce0ccdbb1bd3977920f2a64292c326271f049d4bc3a4f
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.1.0"
|
||||||
plugin_platform_interface:
|
plugin_platform_interface:
|
||||||
@ -516,7 +492,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: plugin_platform_interface
|
name: plugin_platform_interface
|
||||||
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
|
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.8"
|
version: "2.1.8"
|
||||||
pub_semver:
|
pub_semver:
|
||||||
@ -524,7 +500,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: pub_semver
|
name: pub_semver
|
||||||
sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
|
sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.4"
|
version: "2.1.4"
|
||||||
quick_blue:
|
quick_blue:
|
||||||
@ -539,7 +515,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: roslibdart
|
name: roslibdart
|
||||||
sha256: "7473a39947f3f5ee32b032f8bab5285a465449e5cd234ae486e5ea11bd6c9e3b"
|
sha256: "7473a39947f3f5ee32b032f8bab5285a465449e5cd234ae486e5ea11bd6c9e3b"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.0.1-dev+4"
|
version: "0.0.1-dev+4"
|
||||||
scence_map:
|
scence_map:
|
||||||
@ -553,10 +529,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: searchfield
|
name: searchfield
|
||||||
sha256: "6b657ee0cf943fc53bdf3cc68459231bdaba9b25ebac52a335f35079a68f2a7c"
|
sha256: "837721576ca1de1ce40c9841760e40cd7452d3068ea2a22a7b25d06133a7d989"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.8"
|
version: "1.1.7"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -567,7 +543,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: source_span
|
name: source_span
|
||||||
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
|
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.10.0"
|
version: "1.10.0"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
@ -575,7 +551,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: stack_trace
|
name: stack_trace
|
||||||
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
|
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.11.1"
|
version: "1.11.1"
|
||||||
stream_channel:
|
stream_channel:
|
||||||
@ -583,7 +559,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: stream_channel
|
name: stream_channel
|
||||||
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
|
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.2"
|
version: "2.1.2"
|
||||||
string_scanner:
|
string_scanner:
|
||||||
@ -591,7 +567,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: string_scanner
|
name: string_scanner
|
||||||
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
|
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0"
|
version: "1.2.0"
|
||||||
syncfusion_flutter_core:
|
syncfusion_flutter_core:
|
||||||
@ -599,7 +575,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: syncfusion_flutter_core
|
name: syncfusion_flutter_core
|
||||||
sha256: "6e67726b85812afc7105725a23620b876ab7f6b04b8410e211330ffb8c2cdbe8"
|
sha256: "6e67726b85812afc7105725a23620b876ab7f6b04b8410e211330ffb8c2cdbe8"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "26.2.14"
|
version: "26.2.14"
|
||||||
syncfusion_flutter_sliders:
|
syncfusion_flutter_sliders:
|
||||||
@ -607,7 +583,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: syncfusion_flutter_sliders
|
name: syncfusion_flutter_sliders
|
||||||
sha256: dca62b54b6b4f99efa1c34abfc54ce83854d7628e78118a1941a2f30d33ea4d5
|
sha256: dca62b54b6b4f99efa1c34abfc54ce83854d7628e78118a1941a2f30d33ea4d5
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "26.2.14"
|
version: "26.2.14"
|
||||||
synchronized:
|
synchronized:
|
||||||
@ -615,7 +591,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: synchronized
|
name: synchronized
|
||||||
sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225"
|
sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.3.0+3"
|
version: "3.3.0+3"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
@ -623,7 +599,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: term_glyph
|
name: term_glyph
|
||||||
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
|
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.1"
|
version: "1.2.1"
|
||||||
test_api:
|
test_api:
|
||||||
@ -631,7 +607,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: test_api
|
name: test_api
|
||||||
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
|
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.2"
|
version: "0.7.2"
|
||||||
typed_data:
|
typed_data:
|
||||||
@ -639,7 +615,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: typed_data
|
name: typed_data
|
||||||
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
|
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.4.0"
|
version: "1.4.0"
|
||||||
vector_graphics:
|
vector_graphics:
|
||||||
@ -647,7 +623,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: vector_graphics
|
name: vector_graphics
|
||||||
sha256: "773c9522d66d523e1c7b25dfb95cc91c26a1e17b107039cfe147285e92de7878"
|
sha256: "773c9522d66d523e1c7b25dfb95cc91c26a1e17b107039cfe147285e92de7878"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.14"
|
version: "1.1.14"
|
||||||
vector_graphics_codec:
|
vector_graphics_codec:
|
||||||
@ -655,39 +631,39 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: vector_graphics_codec
|
name: vector_graphics_codec
|
||||||
sha256: "2430b973a4ca3c4dbc9999b62b8c719a160100dcbae5c819bae0cacce32c9cdb"
|
sha256: "2430b973a4ca3c4dbc9999b62b8c719a160100dcbae5c819bae0cacce32c9cdb"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.12"
|
version: "1.1.12"
|
||||||
vector_graphics_compiler:
|
vector_graphics_compiler:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vector_graphics_compiler
|
name: vector_graphics_compiler
|
||||||
sha256: ab9ff38fc771e9ee1139320adbe3d18a60327370c218c60752068ebee4b49ab1
|
sha256: "26d520739b7c6b5d2a2b3274427874a8390831fd4cd5bb8cfbd7d913477d3a2e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.15"
|
version: "1.1.14"
|
||||||
vector_math:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vector_math
|
name: vector_math
|
||||||
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
|
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.4"
|
version: "2.1.4"
|
||||||
vm_service:
|
vm_service:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vm_service
|
name: vm_service
|
||||||
sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc
|
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "14.2.4"
|
version: "14.2.5"
|
||||||
web:
|
web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: web
|
name: web
|
||||||
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
|
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.1.0"
|
||||||
web_socket_channel:
|
web_socket_channel:
|
||||||
@ -695,7 +671,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: web_socket_channel
|
name: web_socket_channel
|
||||||
sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b
|
sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.4.0"
|
version: "2.4.0"
|
||||||
webrtc_interface:
|
webrtc_interface:
|
||||||
@ -703,7 +679,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: webrtc_interface
|
name: webrtc_interface
|
||||||
sha256: abec3ab7956bd5ac539cf34a42fa0c82ea26675847c0966bb85160400eea9388
|
sha256: abec3ab7956bd5ac539cf34a42fa0c82ea26675847c0966bb85160400eea9388
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0"
|
version: "1.2.0"
|
||||||
wifi_iot:
|
wifi_iot:
|
||||||
@ -711,7 +687,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: wifi_iot
|
name: wifi_iot
|
||||||
sha256: "4a3301f71663a908bb50ffe6d9dc9e8b8383fab48368accf978409bde96e9aca"
|
sha256: "4a3301f71663a908bb50ffe6d9dc9e8b8383fab48368accf978409bde96e9aca"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.3.19+1"
|
version: "0.3.19+1"
|
||||||
wifi_scan:
|
wifi_scan:
|
||||||
@ -719,31 +695,15 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: wifi_scan
|
name: wifi_scan
|
||||||
sha256: "9a9df688d3e71c39edcd861e6d50beb63815d5505d3884867d75f93e49d66363"
|
sha256: "9a9df688d3e71c39edcd861e6d50beb63815d5505d3884867d75f93e49d66363"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.1+1"
|
version: "0.4.1+1"
|
||||||
win32:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: win32
|
|
||||||
sha256: "84ba388638ed7a8cb3445a320c8273136ab2631cd5f2c57888335504ddab1bc2"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "5.8.0"
|
|
||||||
win32_registry:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: win32_registry
|
|
||||||
sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.1.5"
|
|
||||||
xdg_directories:
|
xdg_directories:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: xdg_directories
|
name: xdg_directories
|
||||||
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
|
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.1.0"
|
||||||
xml:
|
xml:
|
||||||
@ -751,7 +711,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
name: xml
|
name: xml
|
||||||
sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
|
sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
|
||||||
url: "https://pub.dev"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.5.0"
|
version: "6.5.0"
|
||||||
sdks:
|
sdks:
|
||||||
|
@ -63,7 +63,6 @@ dependencies:
|
|||||||
flutter_localizations:
|
flutter_localizations:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
searchfield: ^1.1.7
|
searchfield: ^1.1.7
|
||||||
device_info_plus: ^11.1.1
|
|
||||||
|
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
@ -94,9 +93,6 @@ flutter:
|
|||||||
- images/navi_pointer.png
|
- images/navi_pointer.png
|
||||||
- images/satellite.png
|
- images/satellite.png
|
||||||
- images/pilerCar.png
|
- images/pilerCar.png
|
||||||
- images/hammer.png
|
|
||||||
- images/hook.png
|
|
||||||
- images/mechinacs.png
|
|
||||||
|
|
||||||
# An image asset can refer to one or more resolution-specific "variants", see
|
# An image asset can refer to one or more resolution-specific "variants", see
|
||||||
# https://flutter.dev/assets-and-images/#resolution-aware
|
# https://flutter.dev/assets-and-images/#resolution-aware
|
||||||
|
Loading…
Reference in New Issue
Block a user