123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- import 'package:fis_jsonrpc/rpc.dart';
- import 'package:fis_measure/interfaces/process/workspace/exam_info.dart';
- import 'package:fis_measure/process/workspace/measure_controller.dart';
- import 'package:fis_measure/process/workspace/measure_data_controller.dart';
- import 'package:fis_measure/process/workspace/measure_handler.dart';
- import 'package:fis_measure/view/measure/measure_images_bar.dart';
- export 'package:fis_lib_business_components/index.dart';
- import 'package:fis_ui/index.dart';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- class MeasureImagesBar extends StatefulWidget implements FWidget {
- const MeasureImagesBar({Key? key}) : super(key: key);
- @override
- State<MeasureImagesBar> createState() => _MeasureImagesBarState();
- }
- class _MeasureImagesBarState extends State<MeasureImagesBar> {
- /// 图片滑动控制器
- ScrollController scrollController = ScrollController();
- /// 数据
- final measureData = Get.find<MeasureDataController>();
- /// 当前可滑动的范围宽度
- late double width = 0;
- /// 是否滑到最后
- bool _isEnd = false;
- /// 计算下标
- int _currentIndex = 0;
- /// 左边能否滑动
- bool get isLeftCanScroll => _currentIndex <= 0;
- /// 右边能否滑动
- bool get isRightCanScroll => _isEnd;
- /// 滑动区域的key值
- final GlobalKey globalKey = GlobalKey();
- /// 图片左划事件
- void onLeftMoveImage() async {
- if (_currentIndex > 0) {
- _currentIndex--;
- await scrollController.animateTo(
- (160 * _currentIndex).toDouble(),
- duration: const Duration(milliseconds: 300),
- curve: Curves.linear,
- );
- }
- }
- /// 图片右划事件
- void onRightMoveImage() async {
- if (!isRightCanScroll) {
- _currentIndex++;
- await scrollController.animateTo(
- (160 * _currentIndex).toDouble(),
- duration: const Duration(milliseconds: 300),
- curve: Curves.linear,
- );
- }
- }
- @override
- Widget build(BuildContext context) {
- return FContainer(
- height: 120,
- margin: const EdgeInsets.symmetric(
- vertical: 15,
- ),
- child: FRow(
- children: [
- _buildImageListIcon(
- FIcons.fis_left_arrow,
- isLeftCanScroll,
- onLeftMoveImage,
- ),
- FExpanded(
- child: LeftSiderImageList(
- scrollController: scrollController,
- globalKey: globalKey,
- remedicalList: measureData.remedicalList,
- ),
- ),
- _buildImageListIcon(
- FIcons.fis_right_arrow,
- isRightCanScroll,
- onRightMoveImage,
- ),
- ],
- ),
- );
- }
- @override
- void initState() {
- scrollController.addListener(
- () async {
- // 如果滑动到最右边
- if (scrollController.position.pixels ==
- scrollController.position.maxScrollExtent) {
- setState(() {
- _isEnd = true;
- });
- } else {
- setState(
- () {
- _isEnd = false;
- },
- );
- }
- },
- );
- super.initState();
- }
- @override
- void didChangeDependencies() {
- super.didChangeDependencies();
- WidgetsBinding.instance?.addPostFrameCallback(
- (mag) {
- width = globalKey.currentContext!.size!.width;
- setState(
- () {
- _isEnd = width >= measureData.remedicalList.length * 160;
- },
- );
- },
- );
- }
- @override
- void dispose() {
- super.dispose();
- }
- FWidget _buildImageListIcon(
- IconData iconsData, bool isCanClick, Function onIconTap) {
- return FInkWell(
- onTap: () => onIconTap.call(),
- child: FContainer(
- width: 100,
- child: FIcon(
- iconsData,
- color: isCanClick ? Colors.grey : Colors.white,
- size: 30,
- ),
- ),
- );
- }
- }
- /// 当前测量组的所有图片
- class LeftSiderImageList extends StatefulWidget implements FWidget {
- LeftSiderImageList({
- required this.scrollController,
- required this.globalKey,
- required this.remedicalList,
- });
- /// 图片滑动控制器
- late ScrollController scrollController;
- late GlobalKey globalKey;
- final List<RemedicalInfoDTO> remedicalList;
- @override
- State<LeftSiderImageList> createState() => _LeftSiderImageListState();
- }
- class _LeftSiderImageListState extends State<LeftSiderImageList> {
- /// 当前测量的图片
- // final measureCurrentImage = Get.put(MeasureGetCurrentImage());
- /// 测量AI数据
- final measureData = Get.find<MeasureDataController>();
- late final measureController = Get.find<MeasureController>();
- late final measureHandler = Get.put(MeasureHandler());
- int selectedImageIndex = -1;
- /// 获取图片地址
- void onChangeImage(
- String imageUrl,
- String remedicalCode,
- ) async {
- measureHandler.changeImageLoaded = true;
- measureHandler.imageChanged = ChangeImageInfo(
- imageUrl,
- remedicalCode,
- );
- ExamImageInfo selectedImage = measureController.examInfo.images.firstWhere(
- (element) => element.url == imageUrl,
- );
- selectedImageIndex =
- measureController.examInfo.images.indexOf(selectedImage);
- measureData.itemCurrentImage = imageUrl;
- measureController.examInfo.selectedImageIndex = selectedImageIndex;
- setState(() {});
- }
- @override
- void initState() {
- super.initState();
- }
- @override
- void dispose() {
- super.dispose();
- }
- @override
- FWidget build(BuildContext context) {
- return FContainer(
- key: ValueKey(measureData.itemCurrentImage),
- alignment: Alignment.topCenter,
- child: _buildImageList(widget.remedicalList),
- );
- }
- FWidget _buildImageList(List<RemedicalInfoDTO> remedicalItemList) {
- return FContainer(
- key: widget.globalKey,
- child: FListView.builder(
- scrollDirection: Axis.horizontal,
- shrinkWrap: true,
- controller: widget.scrollController,
- itemCount: remedicalItemList.toList().length,
- itemBuilder: (BuildContext context, int index) {
- final FWidget image = ContentImage(
- remedicalInfo: remedicalItemList[index],
- fileDataType: remedicalItemList[index].fileDataType,
- terminalImage: TerminalImage(
- previewUrl: remedicalItemList[index].terminalImages!.previewUrl,
- ),
- isMeasure: true,
- onTap: () => onChangeImage(
- remedicalItemList[index].terminalImages!.imageUrl!,
- remedicalItemList[index].remedicalCode!,
- ),
- );
- return FContainer(
- key: ValueKey(measureData.itemCurrentImage),
- width: 160,
- alignment: Alignment.center,
- decoration: BoxDecoration(
- border: Border.all(
- width: 3,
- color: remedicalItemList[index].terminalImages!.imageUrl! !=
- measureData.itemCurrentImage
- ? Colors.grey
- : Colors.blue,
- ),
- ),
- child: image,
- );
- },
- ),
- );
- }
- }
|