Browse Source

fixed: 0014804: 【俄语】【分时诊断】俄语150%分辨率下打开AI图像;1、AI描述和编辑AI图像按键显示重叠;2、保存、注释、分享按键一列上方显示不完整

loki.wu 1 year ago
parent
commit
cc5aa5f99d

+ 13 - 6
lib/view/measure/measure_images_bar.dart

@@ -52,6 +52,8 @@ class _MeasureImagesBarState extends State<MeasureImagesBar>
   /// 滑动区域的key值
   final GlobalKey globalKey = GlobalKey();
 
+  double get devicePixelRatio => MediaQuery.of(context).devicePixelRatio;
+
   ///当前分辨率下ListView里面的item个数
   int _itemsPerPage = 0;
 
@@ -82,9 +84,13 @@ class _MeasureImagesBarState extends State<MeasureImagesBar>
     return LayoutBuilder(
       builder: (BuildContext context, BoxConstraints constraints) {
         return FContainer(
-          height: 120,
-          margin: const EdgeInsets.symmetric(
-            vertical: 15,
+          height: 120 / devicePixelRatio,
+          margin: EdgeInsets.symmetric(
+            vertical: devicePixelRatio > 1.25
+                ? 5
+                : devicePixelRatio > 1
+                    ? 10
+                    : 15,
           ),
           child: FRow(
             children: [
@@ -195,11 +201,11 @@ class _MeasureImagesBarState extends State<MeasureImagesBar>
     return FInkWell(
       onTap: () => onIconTap.call(),
       child: FContainer(
-        width: 100,
+        width: 100 / devicePixelRatio,
         child: FIcon(
           iconsData,
           color: isCanClick ? Colors.grey : Colors.white,
-          size: 30,
+          size: 30 / devicePixelRatio,
         ),
       ),
     );
@@ -230,6 +236,7 @@ class ScrollableImageList extends StatefulWidget implements FWidget {
 class _ScrollableImageListState extends State<ScrollableImageList> {
   /// 当前测量的图片
   // final measureCurrentImage = Get.put(MeasureGetCurrentImage());
+  double get devicePixelRatio => MediaQuery.of(context).devicePixelRatio;
 
   /// 测量AI数据
   final measureData = Get.find<MeasureDataController>();
@@ -425,7 +432,7 @@ class _ScrollableImageListState extends State<ScrollableImageList> {
           bool isCurrentSelect = index == currentIndex;
           return FContainer(
             key: ValueKey(measureData.itemCurrentImage),
-            width: 160,
+            width: 160 / devicePixelRatio,
             alignment: Alignment.center,
             decoration: BoxDecoration(
               border: Border.all(

+ 5 - 1
lib/view/measure/measure_panel_head.dart

@@ -49,8 +49,12 @@ class _LeftSiderHoldState extends State<LeftSiderHold> {
 
   @override
   FWidget build(BuildContext context) {
+    final mediaQuery = MediaQuery.of(context);
+
+    ///屏幕缩放比例
+    final devicePixelRatio = mediaQuery.devicePixelRatio;
     return FContainer(
-      width: 300,
+      width: 300 / devicePixelRatio,
       padding: const EdgeInsets.symmetric(
         horizontal: 10,
         vertical: 15,

+ 12 - 4
lib/view/measure/measure_tool_panel.dart

@@ -57,6 +57,9 @@ class MeasureToolPanelState extends State<MeasureToolPanel> {
   bool isDragging = false;
 
   bool isMeasureTool = true;
+
+  double _width = 300;
+
   bool get isArrowMeasureAnnotationType =>
       measureHandler.changedAnnotationType == AnnotationType.arrow;
   MeasureOperateType currOperateType = MeasureOperateType.measure;
@@ -97,6 +100,7 @@ class MeasureToolPanelState extends State<MeasureToolPanel> {
     measureData.curItemMetaListChanged.addListener(_onCurItemMetaListChanged);
     measureHandler.onChangeImageLoaded.addListener(_onChangeImage);
     measureHandler.onDragStateChanged.addListener(_onDragStateChanged);
+
     super.initState();
   }
 
@@ -146,7 +150,11 @@ class MeasureToolPanelState extends State<MeasureToolPanel> {
   @override
   FWidget build(BuildContext context) {
     final newPlayerController = Get.find<IPlayerController>();
+    final mediaQuery = MediaQuery.of(context);
 
+    ///屏幕缩放比例
+    final devicePixelRatio = mediaQuery.devicePixelRatio;
+    _width = 300 / devicePixelRatio;
     return FColumn(
       mainAxisSize: MainAxisSize.max,
       crossAxisAlignment: CrossAxisAlignment.start,
@@ -159,7 +167,7 @@ class MeasureToolPanelState extends State<MeasureToolPanel> {
         FOffstage(
           offstage: hideMeasureItems || hideCommentTab,
           child: FContainer(
-            width: 300,
+            width: _width,
             key: UniqueKey(),
             child: const LeftSelectInput(),
           ),
@@ -175,7 +183,7 @@ class MeasureToolPanelState extends State<MeasureToolPanel> {
               FOffstage(
                 offstage: hideMeasureItems || hideMeasureTab,
                 child: FContainer(
-                  width: 300,
+                  width: _width,
                   child: showCarotid2DSelectMeasure
                       ? const CarotidLeftSiderSelectMeasure()
                       : FContainer(
@@ -186,7 +194,7 @@ class MeasureToolPanelState extends State<MeasureToolPanel> {
               FOffstage(
                 offstage: hideMeasureItems || hideCommentTab,
                 child: FContainer(
-                  width: 300,
+                  width: _width,
                   key: UniqueKey(),
                   child: const MeasureLeftAnnotation(),
                 ),
@@ -204,7 +212,7 @@ class MeasureToolPanelState extends State<MeasureToolPanel> {
         FOffstage(
           offstage: !hideMeasureItems,
           child: FContainer(
-            width: 300,
+            width: _width,
             child: FCenter(
               child: FElevatedButton(
                 name: "backToVidMode",

+ 10 - 2
lib/view/measure/measure_tools_title.dart

@@ -71,14 +71,22 @@ class _LeftMeasureToolsState extends State<LeftMeasureTools> {
 
   @override
   FWidget build(BuildContext context) {
+    final mediaQuery = MediaQuery.of(context);
+
+    //屏幕缩放比例
+    final devicePixelRatio = mediaQuery.devicePixelRatio;
     return FContainer(
-      width: 300,
+      width: 300 / devicePixelRatio,
       height: 50,
       alignment: Alignment.topCenter,
       padding: const EdgeInsets.symmetric(horizontal: 15),
       child: FGridView.count(
         shrinkWrap: true,
-        crossAxisCount: 4,
+        crossAxisCount: devicePixelRatio > 1.25
+            ? 2
+            : devicePixelRatio > 1
+                ? 3
+                : 4,
         crossAxisSpacing: 10,
         mainAxisSpacing: 10,
         childAspectRatio: 1 / 0.5,

+ 24 - 20
lib/view/measure/measure_view.dart

@@ -69,6 +69,7 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
 
   /// 测量项控制器
   final measureMetaController = Get.put(MeasureMetaController());
+  double get devicePixelRatio => MediaQuery.of(context).devicePixelRatio;
 
   /// 隐藏全屏loadding
   bool _hideFullScreenLoading = false;
@@ -243,27 +244,30 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
         ),
         FOffstage(
             child: FRow(children: [
-              FColumn(children: [
-                const OperateBar(),
-                _curNeedRouterBack ?? false
-                    ? FContainer(
-                        width: 300,
-                        padding: const EdgeInsets.only(bottom: 20),
-                        child: FIconButton(
-                          businessParent: widget,
-                          name: "back",
-                          onPressed: () {
-                            Get.back();
-                          },
-                          icon: const FIcon(
-                            Icons.arrow_back,
-                            color: Colors.white,
-                            size: 36,
+              FColumn(
+                children: [
+                  const OperateBar(),
+                  _curNeedRouterBack ?? false
+                      ? FContainer(
+                          width: 300 / devicePixelRatio,
+                          padding:
+                              EdgeInsets.only(bottom: 20 / devicePixelRatio),
+                          child: FIconButton(
+                            businessParent: widget,
+                            name: "back",
+                            onPressed: () {
+                              Get.back();
+                            },
+                            icon: const FIcon(
+                              Icons.arrow_back,
+                              color: Colors.white,
+                              size: 36,
+                            ),
                           ),
-                        ),
-                      )
-                    : const FSizedBox()
-              ]),
+                        )
+                      : const FSizedBox()
+                ],
+              ),
               const FExpanded(child: MeasureImagesBar())
             ]),
             offstage: measureHandler.fullScreenState),

+ 31 - 24
lib/view/menu_button_group/menu_button_group.dart

@@ -42,19 +42,20 @@ class FMenuButtonGroup extends FStatefulWidget {
 }
 
 class _FMenuButtonGroupState extends FState<FMenuButtonGroup> {
+  double get devicePixelRatio => MediaQuery.of(context).devicePixelRatio;
   // 单个按钮高度
-  static const double buttonHeight = 30;
+  double get buttonHeight => 30 / devicePixelRatio;
   // 按钮外边距
-  static const double buttonMargin = 10;
+  double get buttonMargin => 10 / devicePixelRatio;
   // 单个按钮总高度 = Content(42)+Margin(10)
   // static const double singleButtonHeight = buttonHeight + buttonMargin;
   // 按钮组宽度
-  static const double buttonGroupWidth = 60;
+  double get buttonGroupWidth => 60 / devicePixelRatio;
   // 按钮组容器底部内边距 30 + 30
-  static const double groupContainerPadding = buttonGroupWidth / 2;
+  double get groupContainerPadding => buttonGroupWidth / 2;
 
   /// 获取当前组件最大高度
-  get maxGroupHeight => Get.height - 200;
+  double maxGroupHeight = Get.height - 190;
   final application = Get.find<IApplication>();
 
   /// 数据
@@ -226,15 +227,15 @@ class _FMenuButtonGroupState extends FState<FMenuButtonGroup> {
           children: [
             QuickFWidget(
               Transform.translate(
-                  offset: const Offset(0, -buttonGroupWidth / 2),
+                  offset: Offset(0, -buttonGroupWidth / 2),
                   child: FAnimatedContainer(
                       duration: const Duration(milliseconds: 300),
-                      padding: const EdgeInsets.only(
-                        top: groupContainerPadding,
+                      padding: EdgeInsets.only(
+                        top: groupContainerPadding / 2,
                         bottom: groupContainerPadding / 2,
                       ),
                       decoration: BoxDecoration(
-                        borderRadius: const BorderRadius.only(
+                        borderRadius: BorderRadius.only(
                           bottomLeft: Radius.circular(buttonGroupWidth / 2),
                           bottomRight: Radius.circular(buttonGroupWidth / 2),
                         ),
@@ -242,9 +243,11 @@ class _FMenuButtonGroupState extends FState<FMenuButtonGroup> {
                       ),
                       clipBehavior: Clip.antiAlias,
                       width: buttonGroupWidth,
-                      // height: groupHeight,
+                      height: groupHeight == groupContainerPadding
+                          ? groupHeight
+                          : null,
                       constraints: BoxConstraints(
-                        maxHeight: groupHeight,
+                        maxHeight: Get.height - (190 / devicePixelRatio),
                       ),
                       child: FListView(
                         shrinkWrap: true,
@@ -252,7 +255,7 @@ class _FMenuButtonGroupState extends FState<FMenuButtonGroup> {
                       ))),
             ),
             _buildDropDownButton(),
-            const FSizedBox(height: 10),
+            //   const FSizedBox(height: 10),
           ],
         )
       ],
@@ -263,7 +266,7 @@ class _FMenuButtonGroupState extends FState<FMenuButtonGroup> {
     return FTextTooltip(
       position: DisplayPosition.left,
       textStyle: const TextStyle(fontSize: 16, color: Colors.white),
-      height: 36,
+      height: 36 / devicePixelRatio,
       message: title,
       margin: const EdgeInsets.all(0),
       decoration: BoxDecoration(
@@ -272,7 +275,7 @@ class _FMenuButtonGroupState extends FState<FMenuButtonGroup> {
       ),
       child: FContainer(
         height: buttonHeight,
-        margin: const EdgeInsets.only(
+        margin: EdgeInsets.only(
           top: buttonMargin,
         ),
         child: FInkWell(
@@ -310,27 +313,31 @@ class _FMenuButtonGroupState extends FState<FMenuButtonGroup> {
           }
         },
         child: FContainer(
-          decoration: const BoxDecoration(
+          decoration: BoxDecoration(
             borderRadius:
                 BorderRadius.all(Radius.circular(buttonGroupWidth / 2)),
             color: Colors.white,
           ),
-          padding: const EdgeInsets.only(top: 15),
           height: buttonGroupWidth,
           width: buttonGroupWidth,
           child: FColumn(
+            mainAxisAlignment: MainAxisAlignment.center,
             children: [
               if (isExpanded) ...[
-                FText(
-                  i18nBook.measure.collapseGroup.t,
-                  style: const TextStyle(fontSize: 12),
-                ),
+                // if (i18nBook.isCurrentChinese) ...[
+                //   FText(
+                //     i18nBook.measure.collapseGroup.t,
+                //     style: const TextStyle(fontSize: 12),
+                //   ),
+                // ],
                 const FIcon(Icons.arrow_drop_up)
               ] else ...[
-                FText(
-                  i18nBook.measure.expandGroup.t,
-                  style: const TextStyle(fontSize: 12),
-                ),
+                // if (i18nBook.isCurrentChinese) ...[
+                //   FText(
+                //     i18nBook.measure.expandGroup.t,
+                //     style: const TextStyle(fontSize: 12),
+                //   ),
+                // ],
                 const FIcon(Icons.arrow_drop_down)
               ]
             ],

+ 1 - 2
lib/view/paint/parts/ai_resul_info.dart

@@ -107,7 +107,6 @@ class _ResultInfoState extends State<ResultInfo> {
         borderRadius: BorderRadius.circular(4),
         color: Colors.transparent,
       ),
-      padding: const EdgeInsets.only(bottom: 10),
       child: Column(
         children: [
           Row(
@@ -124,7 +123,7 @@ class _ResultInfoState extends State<ResultInfo> {
                   ),
                   padding: const EdgeInsets.only(
                     top: 4,
-                    bottom: 10,
+                    bottom: 4,
                     left: 8,
                     right: 8,
                   ),

+ 16 - 8
lib/view/paint/parts/ai_result.dart

@@ -39,8 +39,16 @@ class _AIResultPanelState extends State<AIResultPanel> {
   int get currFrameIndex => playerController.currentFrameIndex;
   VidUsImage get currFrame => playerController.currentFrame!;
 
+  ///屏幕缩放比例
+  double get devicePixelRatio => MediaQuery.of(context).devicePixelRatio;
   @override
   Widget build(BuildContext context) {
+    double verticalSpacing = 10;
+    if (devicePixelRatio > 1.25) {
+      verticalSpacing = 2;
+    } else if (devicePixelRatio > 1) {
+      verticalSpacing = 5;
+    }
     return Row(
       mainAxisAlignment: MainAxisAlignment.spaceBetween,
       children: [
@@ -73,8 +81,8 @@ class _AIResultPanelState extends State<AIResultPanel> {
                                     ? const Color.fromRGBO(54, 169, 206, 1)
                                     : Colors.grey,
                               ),
-                              width: 38,
-                              height: 35,
+                              width: 38 / devicePixelRatio,
+                              height: 35 / devicePixelRatio,
                               child: Center(
                                 child: Text(
                                   '${index + 1}',
@@ -91,8 +99,8 @@ class _AIResultPanelState extends State<AIResultPanel> {
                   ),
                   color: Colors.transparent,
                 ),
-              const SizedBox(
-                height: 10,
+              SizedBox(
+                height: verticalSpacing,
               ),
               Obx(() {
                 try {
@@ -104,16 +112,16 @@ class _AIResultPanelState extends State<AIResultPanel> {
                         ResultInfo(
                           widget.aiDetectedObject,
                         ),
-                        const SizedBox(
-                          height: 10,
+                        SizedBox(
+                          height: verticalSpacing,
                         ),
                         aiDetectedObjectItem.descriptions?.isNotEmpty ?? false
                             ? FeatureAnalysis(
                                 aiDetectedObjectItem.descriptions,
                               )
                             : const SizedBox(),
-                        const SizedBox(
-                          height: 10,
+                        SizedBox(
+                          height: verticalSpacing,
                         ),
                         if (_canEditAI())
                           InkWell(

+ 2 - 2
lib/view/pause/pause_panel.dart

@@ -18,7 +18,7 @@ class MeasurePausePanel extends StatefulWidget {
 class _MeasurePausePanelState extends State<MeasurePausePanel> {
   final application = Get.find<IApplication>();
   late final playerController = Get.find<IPlayerController>();
-
+  double get devicePixelRatio => MediaQuery.of(context).devicePixelRatio;
   @override
   void initState() {
     super.initState();
@@ -37,7 +37,7 @@ class _MeasurePausePanelState extends State<MeasurePausePanel> {
   Widget _buildVidPlayerBoard() {
     if ((playerController as VidPlayerController).totalFramesCount > 1) {
       return SizedBox(
-        height: 100,
+        height: 90 / devicePixelRatio,
         child: VidPlayerControlBoard(
           playerController as VidPlayerController,
         ),

+ 1 - 1
lib/view/player/control_board/control_board.dart

@@ -62,7 +62,7 @@ class _VidPlayerControlBoardState extends State<VidPlayerControlBoard> {
     return _SharedWidget(
       controller: widget.controller,
       child: Container(
-        padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
+        //  padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
         child: Column(
           mainAxisAlignment: MainAxisAlignment.center,
           children: [

+ 10 - 12
lib/view/player/control_board/operate_bar.dart

@@ -24,6 +24,7 @@ class OperateBar extends StatefulWidget implements FWidget {
 class _VidPlayerControlBoardState extends State<OperateBar> {
   final measure3DViewController = Get.find<Measure3DViewController>();
   bool enableCarotidBar = false;
+  double get devicePixelRatio => MediaQuery.of(context).devicePixelRatio;
   @override
   void initState() {
     measure3DViewController.updatePlayerMode.addListener(_onModeChanged);
@@ -59,11 +60,8 @@ class _VidPlayerControlBoardState extends State<OperateBar> {
 
   @override
   Widget build(BuildContext context) {
-    return Container(
-      width: 300,
-      padding: const EdgeInsets.symmetric(
-        vertical: 10,
-      ),
+    return SizedBox(
+      width: 300 / devicePixelRatio,
       child: Center(
         child:
             enableCarotidBar ? _buildCarotidOperateBar() : _buildOperateBar(),
@@ -76,12 +74,12 @@ class _VidPlayerControlBoardState extends State<OperateBar> {
       mainAxisAlignment: MainAxisAlignment.center,
       children: [
         _BrightnessToneBar(),
-        const SizedBox(height: 10),
+        SizedBox(height: 10 / devicePixelRatio),
         _ContrastToneBar(),
         if (widget.ifShowResetBtn) ...[
-          const SizedBox(height: 10),
+          SizedBox(height: 10 / devicePixelRatio),
           _ResetToneButton(),
-          const SizedBox(height: 10),
+          SizedBox(height: 10 / devicePixelRatio),
         ]
       ],
     );
@@ -92,13 +90,13 @@ class _VidPlayerControlBoardState extends State<OperateBar> {
       mainAxisAlignment: MainAxisAlignment.center,
       children: [
         _SharpnessCarotidToneBar(),
-        const SizedBox(height: 10),
+        SizedBox(height: 10 / devicePixelRatio),
         _BrightnessCarotidToneBar(),
-        const SizedBox(height: 10),
+        SizedBox(height: 10 / devicePixelRatio),
         _ContrastCarotidToneBar(),
-        const SizedBox(height: 10),
+        SizedBox(height: 10 / devicePixelRatio),
         _ResetCarotidToneButton(),
-        const SizedBox(height: 10),
+        SizedBox(height: 10 / devicePixelRatio),
       ],
     );
   }

+ 53 - 34
lib/view/player/control_board/tone_bar.dart

@@ -9,6 +9,9 @@ class _ContrastToneBarState extends State<_ContrastToneBar> {
   late final measureController = Get.find<MeasureController>();
   VidPlayerController playerController =
       Get.find<IPlayerController>() as VidPlayerController;
+
+  ///屏幕缩放比例
+  double get devicePixelRatio => MediaQuery.of(context).devicePixelRatio;
   double curValue = 0;
   @override
   void initState() {
@@ -34,9 +37,10 @@ class _ContrastToneBarState extends State<_ContrastToneBar> {
       max: 100,
       min: -100,
       value: curValue,
-      icon: const Icon(
+      icon: Icon(
         Icons.contrast,
         color: Colors.white,
+        size: 24 / devicePixelRatio,
       ),
       onChange: (v) {
         playerController.setContrast(v.toInt());
@@ -73,6 +77,9 @@ class _BrightnessToneBarState extends State<_BrightnessToneBar> {
   late final measureController = Get.find<MeasureController>();
   VidPlayerController playerController =
       Get.find<IPlayerController>() as VidPlayerController;
+
+  ///屏幕缩放比例
+  double get devicePixelRatio => MediaQuery.of(context).devicePixelRatio;
   double curValue = 0;
   @override
   void initState() {
@@ -98,9 +105,10 @@ class _BrightnessToneBarState extends State<_BrightnessToneBar> {
       max: 100,
       min: -100,
       value: curValue,
-      icon: const Icon(
+      icon: Icon(
         Icons.wb_sunny_sharp,
         color: Colors.white,
+        size: 24 / devicePixelRatio,
       ),
       onChange: (v) {
         playerController.setBrightness(v.toInt());
@@ -150,9 +158,9 @@ class _ToneBar extends StatefulWidget {
 }
 
 class _ToneBarState extends State<_ToneBar> {
-  static const _kIconSize = 20.0;
-  static const splashRadius = _kIconSize / 2 + 3;
-
+  double get _kIconSize => 20.0 / devicePixelRatio;
+  double get splashRadius => _kIconSize / 2 + 3;
+  double get devicePixelRatio => MediaQuery.of(context).devicePixelRatio;
   late double _value;
 
   @override
@@ -183,7 +191,7 @@ class _ToneBarState extends State<_ToneBar> {
         buildIncreaseIcon(),
         const SizedBox(width: 8),
         SizedBox(
-            width: 30,
+            width: 30 / devicePixelRatio,
             child: Text(
               '${_value.toInt()}',
               style: TextStyle(color: widget.themeColor),
@@ -195,7 +203,7 @@ class _ToneBarState extends State<_ToneBar> {
   Widget buildReduceIcon() {
     return IconButton(
       color: widget.themeColor,
-      constraints: const BoxConstraints(
+      constraints: BoxConstraints(
         minHeight: _kIconSize,
         minWidth: _kIconSize,
       ),
@@ -204,14 +212,14 @@ class _ToneBarState extends State<_ToneBar> {
       onPressed: () {
         updateValue(_value - 1);
       },
-      icon: const Icon(Icons.remove_circle_outline, size: _kIconSize),
+      icon: Icon(Icons.remove_circle_outline, size: _kIconSize),
     );
   }
 
   Widget buildIncreaseIcon() {
     return IconButton(
       color: widget.themeColor,
-      constraints: const BoxConstraints(
+      constraints: BoxConstraints(
         minHeight: _kIconSize,
         minWidth: _kIconSize,
       ),
@@ -220,37 +228,40 @@ class _ToneBarState extends State<_ToneBar> {
       onPressed: () {
         updateValue(_value + 1);
       },
-      icon: const Icon(Icons.add_circle_outline, size: _kIconSize),
+      icon: Icon(Icons.add_circle_outline, size: _kIconSize),
     );
   }
 
   Widget buildSlider(BuildContext context) {
     final trackColor = Theme.of(context).primaryColor;
-    return SliderTheme(
-      data: SliderThemeData(
-        trackHeight: 4,
-        activeTrackColor: trackColor,
-        inactiveTrackColor: trackColor,
-        thumbColor: Colors.grey[300],
-        thumbShape: const RoundSliderThumbShape(
-          enabledThumbRadius: 6,
-          elevation: 3.0,
+    return Expanded(
+      child: SliderTheme(
+        data: SliderThemeData(
+          trackHeight: 4,
+          activeTrackColor: trackColor,
+          inactiveTrackColor: trackColor,
+          thumbColor: Colors.grey[300],
+          thumbShape: const RoundSliderThumbShape(
+            enabledThumbRadius: 6,
+            elevation: 3.0,
+          ),
+          overlayShape: SliderComponentShape.noOverlay,
+          trackShape: _FullWidthRectangularSliderTrackShape(
+            padding: const EdgeInsets.symmetric(horizontal: 4),
+            devicePixelRatio: devicePixelRatio,
+          ),
         ),
-        overlayShape: SliderComponentShape.noOverlay,
-        trackShape: const _FullWidthRectangularSliderTrackShape(
-          padding: EdgeInsets.symmetric(horizontal: 4),
+        child: Slider(
+          max: widget.max,
+          min: widget.min,
+          value: _value,
+          label: _value.toInt().toString(),
+          divisions: (widget.max - widget.min).toInt(),
+          onChanged: (v) {
+            updateValue(v);
+          },
         ),
       ),
-      child: Slider(
-        max: widget.max,
-        min: widget.min,
-        value: _value,
-        label: _value.toInt().toString(),
-        divisions: (widget.max - widget.min).toInt(),
-        onChanged: (v) {
-          updateValue(v);
-        },
-      ),
     );
   }
 
@@ -267,10 +278,15 @@ class _ToneBarState extends State<_ToneBar> {
 
 class _FullWidthRectangularSliderTrackShape
     extends RectangularSliderTrackShape {
-  const _FullWidthRectangularSliderTrackShape({this.padding});
+  const _FullWidthRectangularSliderTrackShape({
+    this.padding,
+    this.devicePixelRatio = 1,
+  });
 
   final EdgeInsets? padding;
 
+  final double devicePixelRatio;
+
   @override
   Rect getPreferredRect({
     required RenderBox parentBox,
@@ -307,7 +323,10 @@ class _ResetToneButton extends StatelessWidget {
       },
       child: Text(
         i18nBook.measure.resetTone4Btn.t,
-        style: const TextStyle(color: Colors.white),
+        style: const TextStyle(
+          color: Colors.white,
+          fontSize: 16,
+        ),
       ),
     );
   }

+ 2 - 2
pubspec.lock

@@ -174,8 +174,8 @@ packages:
     dependency: "direct main"
     description:
       path: "."
-      ref: "3a008fb"
-      resolved-ref: "3a008fb97c07fbd501ae112be3d6f6776691ceab"
+      ref: dfeb9de
+      resolved-ref: dfeb9debc8b38dfdf6a2b14f78d15a3ea4714ae3
       url: "http://git.ius.plus:88/Project-Wing/fis_lib_i18n.git"
     source: git
     version: "0.0.1"