170 lines
5.2 KiB
Dart
170 lines
5.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:scence_map/controllers/controller.dart';
|
|
import '../setting_controller.dart';
|
|
import 'model.dart';
|
|
|
|
final SettingController sc = Get.find<SettingController>();
|
|
|
|
class ProjectView extends GetView<SettingController> {
|
|
const ProjectView({super.key});
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: const Text("项目设置"),
|
|
),
|
|
body: SingleChildScrollView(
|
|
padding: const EdgeInsets.symmetric(horizontal: 5),
|
|
child: Column(
|
|
children: [
|
|
Row(
|
|
children: [
|
|
const Text("项目名称:"),
|
|
Expanded(
|
|
child: DropdownProject(
|
|
controller: controller,
|
|
),
|
|
)
|
|
],
|
|
),
|
|
const Divider(),
|
|
Row(
|
|
children: [
|
|
const Text("设备列表:"),
|
|
Expanded(
|
|
child: DropdownDevice(
|
|
controller: controller,
|
|
),
|
|
)
|
|
],
|
|
),
|
|
],
|
|
)),
|
|
);
|
|
}
|
|
}
|
|
|
|
class DropdownProject extends StatefulWidget {
|
|
final SettingController controller;
|
|
const DropdownProject({super.key, required this.controller});
|
|
|
|
@override
|
|
DropdownProjectState createState() => DropdownProjectState();
|
|
}
|
|
|
|
class DropdownProjectState extends State<DropdownProject> {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
SettingController controller = widget.controller;
|
|
return Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
PopupMenuButton<String>(
|
|
offset: const Offset(0, 40),
|
|
onSelected: (String selectedValue) {
|
|
setState(() {
|
|
for (var value in controller.projectList) {
|
|
if (value.projCode == selectedValue) {
|
|
// controller.currentProject.update((p) {
|
|
// controller.currentProject.value = value;
|
|
controller.updateProject(value);
|
|
// });
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
},
|
|
itemBuilder: (BuildContext context) {
|
|
return controller.projectList
|
|
.map<PopupMenuEntry<String>>((ProjectModel value) {
|
|
return PopupMenuItem<String>(
|
|
value: value.projCode,
|
|
child: Text(value.name),
|
|
);
|
|
}).toList();
|
|
},
|
|
child: Container(
|
|
padding: const EdgeInsets.symmetric(
|
|
vertical: 5.0, horizontal: 10.0), // 设置按钮的内边距
|
|
decoration: BoxDecoration(
|
|
border: Border.all(color: Colors.grey),
|
|
borderRadius: BorderRadius.circular(5.0),
|
|
),
|
|
child: Obx(() {
|
|
String text = controller.currentProject.value?.name ?? '请选择一个项目';
|
|
return Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Text(text),
|
|
const Icon(Icons.arrow_drop_down),
|
|
],
|
|
);
|
|
}),
|
|
),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|
|
|
|
class DropdownDevice extends StatefulWidget {
|
|
final SettingController controller;
|
|
const DropdownDevice({super.key, required this.controller});
|
|
|
|
@override
|
|
DropdownDeviceState createState() => DropdownDeviceState();
|
|
}
|
|
|
|
class DropdownDeviceState extends State<DropdownDevice> {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
SettingController controller = widget.controller;
|
|
return Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
PopupMenuButton<String>(
|
|
offset: const Offset(0, 40),
|
|
onSelected: (String selectedValue) {
|
|
setState(() {
|
|
for (var value in controller.deviceList) {
|
|
if (value.tid == int.parse(selectedValue)) {
|
|
controller.currentDevice.value = value;
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
},
|
|
itemBuilder: (BuildContext context) {
|
|
return controller.deviceList
|
|
.map<PopupMenuEntry<String>>((DeviceItem value) {
|
|
return PopupMenuItem<String>(
|
|
value: value.tid.toString(),
|
|
child: Text(value.name),
|
|
);
|
|
}).toList();
|
|
},
|
|
child: Container(
|
|
padding: const EdgeInsets.symmetric(
|
|
vertical: 5.0, horizontal: 10.0), // 设置按钮的内边距
|
|
decoration: BoxDecoration(
|
|
border: Border.all(color: Colors.grey),
|
|
borderRadius: BorderRadius.circular(5.0),
|
|
),
|
|
child: Obx(() {
|
|
String text = controller.currentDevice.value?.name ?? '请选择一个设备';
|
|
return Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Text(text),
|
|
const Icon(Icons.arrow_drop_down),
|
|
],
|
|
);
|
|
}),
|
|
),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|