【Flutter&Dart】 拖动边界线改变列宽类似 vscode 那种拖动改变编辑框窗口大小(11 /100)

【Flutter&Dart】 拖动改变 widget 的窗口尺寸大小GestureDetector~简单实现(10 /100)
【Flutter&Dart】 拖动边界线改变列宽并且有边界高亮和鼠标效果(12 /100)

上效果:

这个在知乎里找到的效果,感觉很不错就给抄过来实现一下。

上代码:

dart 复制代码
import 'package:flutter/material.dart';

class MyDraggableViewDemo2 extends StatelessWidget {
  const MyDraggableViewDemo2({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('MyDraggableViewDemo2'),
        ),
        body: DraggableDemo(),
      ),
    );
  }
}

class DraggableDemo extends StatefulWidget {
  const DraggableDemo({super.key});

  @override
  State<StatefulWidget> createState() {
    return _DraggableDemoState();
  }
}

class _DraggableDemoState extends State<DraggableDemo> {
  double leftWidth = 100.0;
  double height = 200.0;
  bool isResizing = false;

  @override
  Widget build(BuildContext context) {
    return Row(children: [
      // 使用 SizedBox 组件来指定左边的组件的宽度
      SizedBox(
        width: leftWidth,
        child: Container(
          color: Colors.blue,
          child: Center(child: Text('左侧菜单')),
        ),
      ),

// 使用 GestureDetector 组件来包裹分割线
      GestureDetector(
        // 监听水平方向的拖拽操作
        onHorizontalDragUpdate: (details) {
          // 获取拖拽的距离
          double delta = details.delta.dx;
          // 更新左边的组件的宽度
          leftWidth += delta;
          // 限制左边的组件的宽度在 0 到屏幕宽度之间
          leftWidth = leftWidth.clamp(0.0, MediaQuery.of(context).size.width);
          // 重绘组件
          setState(() {});
        },
        child: VerticalDivider(
          width: 16,
          thickness: 4,
          color: Colors.black,
        ),
      ),
      // 使用 Expanded 组件来包裹右边的组件
      Expanded(
        child: Container(
          color: Colors.red,
          child: Center(child: Text('右侧工作区')),
        ),
      ),
    ]);
  }
}

功能上符合要求了,但是交互效果上还是需要在进行细微调整的

比如鼠标停留后的高亮分割线,感觉是停留超过两秒才出现的,滑过不会出现

还有左右可拖动的鼠标剪头等等

===========END

相关推荐
plainGeekDev10 小时前
工厂模式 → Hilt
android·java·kotlin
雨白10 小时前
深入理解 Kotlin 协程 (十):引而不发,探秘 Flow 冷流机制与异常透明性
android·kotlin
plainGeekDev10 小时前
Application 单例 → Hilt Singleton
android·java·kotlin
sanzk11 小时前
esp32s3 +arduino ide
ide
程序员码歌11 小时前
我全程用 AI开发了一款微信小游戏,上线了
android·前端·游戏开发
1001101_QIA11 小时前
flutter打包流程
flutter
黄林晴12 小时前
你敢信吗?同样是跨端,KMP 跟 RN 居然差这么多!
android·前端
zbmwa13 小时前
jetpack compose 副作用 produceState
android
hunterandroid14 小时前
Android 后台任务可靠性排查:从 WorkManager 观测到失败重试闭环
android·前端
GitLqr16 小时前
Flutter FocusNode 实战指南:玩转键盘焦点与用户输入体验
android·flutter·ios