tool_chest_title.dart 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. import 'package:fis_i18n/i18n.dart';
  2. import 'package:fis_measure/interfaces/process/player/play_controller.dart';
  3. import 'package:fis_measure/interfaces/process/workspace/application.dart';
  4. import 'package:fis_measure/interfaces/process/workspace/exam_info.dart';
  5. import 'package:fis_measure/process/workspace/measure_controller.dart';
  6. import 'package:fis_measure/process/workspace/measure_data_controller.dart';
  7. import 'package:fis_measure/process/workspace/measure_handler.dart';
  8. import 'package:fis_measure/view/measure/measure_config/measure_configuation_page.dart';
  9. import 'package:fis_measure/view/measure/measure_config/widgets/measure_configuration_style.dart';
  10. import 'package:fis_measure/view/player/controller.dart';
  11. import 'package:fis_theme/theme.dart';
  12. import 'package:fis_ui/index.dart';
  13. import 'package:flutter/material.dart';
  14. import 'package:get/get.dart';
  15. /// 下拉选择的类
  16. class MeasureSelectModel {
  17. MeasureSelectModel({required this.name, required this.code});
  18. final String name;
  19. final String code;
  20. }
  21. enum TagEnum {
  22. MeasureTool,
  23. NodesTool,
  24. }
  25. /// 工具箱 样式配置之类
  26. class LeftSiderHold extends StatelessWidget implements FWidget {
  27. const LeftSiderHold({Key? key, this.ifHideConfig = false}) : super(key: key);
  28. final bool ifHideConfig; // 是否隐藏测量项配置入口
  29. @override
  30. FWidget build(BuildContext context) {
  31. return FContainer(
  32. width: 300,
  33. padding: const EdgeInsets.symmetric(
  34. horizontal: 10,
  35. vertical: 15,
  36. ),
  37. child: FColumn(
  38. // key: UniqueKey(),
  39. mainAxisSize: MainAxisSize.max,
  40. crossAxisAlignment: CrossAxisAlignment.start,
  41. children: [
  42. FRow(
  43. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  44. children: [
  45. // 工具箱文案
  46. FText(
  47. i18nBook.measure.toolbox.t,
  48. style: const TextStyle(
  49. color: Colors.white,
  50. ),
  51. ),
  52. LeftSiderHoldAllStyleConfig(ifHideConfig: ifHideConfig),
  53. ],
  54. ),
  55. const _LeftSiderTabBar(),
  56. // _LeftSelectInput(),
  57. // _LeftPulldown(),
  58. ],
  59. ),
  60. );
  61. }
  62. }
  63. /// 测量样式 和配置
  64. class LeftSiderHoldAllStyleConfig extends StatelessWidget implements FWidget {
  65. const LeftSiderHoldAllStyleConfig({Key? key, this.ifHideConfig = false})
  66. : super(key: key);
  67. final bool ifHideConfig; // 是否隐藏测量项配置入口
  68. @override
  69. FWidget build(BuildContext context) {
  70. return FRow(
  71. children: [
  72. FTextButton(
  73. onPressed: () {
  74. Get.dialog(
  75. PatternDialog(),
  76. );
  77. },
  78. child: FText(
  79. i18nBook.measure.style.t,
  80. style: TextStyle(
  81. color: FTheme.ins.colorScheme.primary,
  82. ),
  83. ),
  84. ),
  85. if (!ifHideConfig) ...[
  86. FTextButton(
  87. onPressed: () {
  88. Get.dialog(
  89. const MeasureConfigurationPage(),
  90. );
  91. },
  92. child: FText(
  93. i18nBook.measure.config.t,
  94. style: TextStyle(
  95. color: FTheme.ins.colorScheme.primary,
  96. ),
  97. ),
  98. )
  99. ]
  100. ],
  101. );
  102. }
  103. }
  104. /// 测量工具 注释工具Tab
  105. class _LeftSiderTabBar extends StatefulWidget implements FWidget {
  106. const _LeftSiderTabBar();
  107. @override
  108. State<_LeftSiderTabBar> createState() => _LeftSiderTabBarState();
  109. }
  110. class _LeftSiderTabBarState extends State<_LeftSiderTabBar>
  111. with TickerProviderStateMixin {
  112. late final measureHandler = Get.find<MeasureHandler>();
  113. late TabController tabController;
  114. late IApplication application = Get.find<IApplication>();
  115. List<Center> tabs = [];
  116. late final measureData = Get.find<MeasureDataController>();
  117. /// 全部图片list
  118. final measureController = Get.find<MeasureController>();
  119. final playerController = Get.find<IPlayerController>() as VidPlayerController;
  120. @override
  121. void initState() {
  122. super.initState();
  123. initTab();
  124. measureController.imageLoaded.addListener(onImageLoaded);
  125. }
  126. @override
  127. void dispose() {
  128. super.dispose();
  129. measureController.imageLoaded.removeListener(onImageLoaded);
  130. tabController.dispose();
  131. }
  132. void initTab() {
  133. Future.delayed(const Duration(milliseconds: 500), () {
  134. application = Get.find<IApplication>();
  135. if (application.isSingleFrame) {
  136. if (application.visuals.length > 1) {
  137. tabs = [i18nBook.measure.annotationTool.t]
  138. .map((e) => Center(child: Tab(text: e)))
  139. .toList();
  140. measureHandler.changedTab = TagEnum.NodesTool;
  141. } else {
  142. tabs = [
  143. i18nBook.measure.measureTool.t,
  144. i18nBook.measure.annotationTool.t
  145. ].map((e) => Center(child: Tab(text: e))).toList();
  146. measureHandler.changedTab = TagEnum.MeasureTool;
  147. }
  148. } else {
  149. tabs = [
  150. i18nBook.measure.measureTool.t,
  151. i18nBook.measure.annotationTool.t
  152. ].map((e) => Center(child: Tab(text: e))).toList();
  153. measureHandler.changedTab = TagEnum.MeasureTool;
  154. }
  155. setState(() {});
  156. });
  157. }
  158. void onImageLoaded(Object sender, ExamImageInfo? e) {
  159. if (!mounted) return;
  160. initTab();
  161. }
  162. void getItemMetaListChanged(sender, e) {
  163. Future.delayed(const Duration(milliseconds: 300), () {
  164. application = Get.find<IApplication>();
  165. if (application.canMeasure) {
  166. if (application.visuals.length > 1) {
  167. tabs = [i18nBook.measure.annotationTool.t]
  168. .map((e) => Center(child: Tab(text: e)))
  169. .toList();
  170. measureHandler.changedTab = TagEnum.NodesTool;
  171. } else {
  172. tabs = [
  173. i18nBook.measure.measureTool.t,
  174. i18nBook.measure.annotationTool.t
  175. ].map((e) => Center(child: Tab(text: e))).toList();
  176. measureHandler.changedTab = TagEnum.MeasureTool;
  177. }
  178. } else {
  179. tabs = [
  180. i18nBook.measure.measureTool.t,
  181. i18nBook.measure.annotationTool.t
  182. ].map((e) => Center(child: Tab(text: e))).toList();
  183. measureHandler.changedTab = TagEnum.MeasureTool;
  184. }
  185. setState(() {});
  186. });
  187. }
  188. @override
  189. void didUpdateWidget(covariant _LeftSiderTabBar oldWidget) {
  190. super.didUpdateWidget(oldWidget);
  191. }
  192. @override
  193. FWidget build(BuildContext context) {
  194. tabController = TabController(
  195. vsync: this,
  196. length: tabs.length,
  197. initialIndex: 0,
  198. );
  199. final _colorScheme = FTheme.ins.colorScheme;
  200. return FTabBar(
  201. indicatorWeight: 2,
  202. indicatorColor: _colorScheme.primary,
  203. labelColor: _colorScheme.primary,
  204. indicatorSize: TabBarIndicatorSize.label,
  205. unselectedLabelColor: Colors.white,
  206. onTap: (int index) {
  207. try {
  208. measureHandler.changedTab = TagEnum.values[index];
  209. } catch (e) {}
  210. },
  211. tabs: tabs,
  212. controller: tabController,
  213. );
  214. }
  215. }
  216. class _LeftPulldown extends StatelessWidget implements FWidget {
  217. @override
  218. FWidget build(BuildContext context) {
  219. return FContainer(
  220. margin: const EdgeInsets.symmetric(vertical: 4),
  221. child: FSelect<MeasureSelectModel, String>(
  222. source: [
  223. MeasureSelectModel(
  224. name: 'General',
  225. code: 'General',
  226. )
  227. ],
  228. hintText: i18nBook.measure.selectMeasureItem.t,
  229. value: 'General',
  230. clearable: false,
  231. height: 36,
  232. width: 400,
  233. optionLabelExtractor: (data) => data.name,
  234. optionValueExtractor: (data) => data.code,
  235. onSelectChanged: (value, index) {},
  236. ),
  237. );
  238. }
  239. }