您的位置:首页 > 娱乐 > 明星 > 深圳网站建设公_网页制作背景图代码_如何免费找精准客户_搜索引擎优化作业

深圳网站建设公_网页制作背景图代码_如何免费找精准客户_搜索引擎优化作业

2025/1/10 5:03:45 来源:https://blog.csdn.net/lichong951/article/details/144950260  浏览:    关键词:深圳网站建设公_网页制作背景图代码_如何免费找精准客户_搜索引擎优化作业
深圳网站建设公_网页制作背景图代码_如何免费找精准客户_搜索引擎优化作业

【Flutter&Dart】 拖动改变 widget 的窗口尺寸大小GestureDetector~简单实现(10 /100)
【Flutter&Dart】 拖动边界线改变列宽类似 vscode 那种拖动改变编辑框窗口大小(11 /100)

上效果

在这里插入图片描述
对比一下vscode的效果:
在这里插入图片描述
基本达到交互效果了,就是丝滑度好像差一点点。这个有可能是相关参数没有调试好。后期看看能否改进改进

上代码

import 'dart:async';import 'package:flutter/material.dart';
import 'package:logging/logging.dart';const String tag = 'MyDraggableViewDemo2';class MyDraggableViewDemo2 extends StatelessWidget {const MyDraggableViewDemo2({super.key});Widget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: Text('MyDraggableViewDemo2'),),body: DraggableDemo(),),);}
}class DraggableDemo extends StatefulWidget {const DraggableDemo({super.key});State<StatefulWidget> createState() {return _DraggableDemoState();}
}class _DraggableDemoState extends State<DraggableDemo> {double leftWidth = 100.0;double height = 200.0;bool isResizing = false;Timer? _timer;bool _isHovered = false;void _startTimer() {Logger(tag).info('_startTimer called!');_timer?.cancel();_timer = Timer(const Duration(seconds: 1), () {setState(() {_isHovered = true;Logger(tag).info('Mouse hovered for 2 second!');});});}void _cancelTimer() {Logger(tag).info('_cancelTimer called!');if (isResizing) {return;}_timer?.cancel();setState(() {_isHovered = false;});}Widget build(BuildContext context) {return Row(children: [// 使用 SizedBox 组件来指定左边的组件的宽度SizedBox(width: leftWidth,child: Container(color: Colors.blue,child: Center(child: Text('左侧菜单')),),),// 检测鼠标进入和离开事件MouseRegion(cursor: SystemMouseCursors.resizeLeftRight, // 设置鼠标形状为剪头onEnter: (event) {Logger(tag).info('onEnter called!');_startTimer();},onExit: (event) {Logger(tag).info('onExit called!');_cancelTimer();},child: // 使用 GestureDetector 组件来包裹分割线GestureDetector(onHorizontalDragStart: (details) => {setState(() {isResizing = true;})},// 监听水平方向的拖拽操作onHorizontalDragUpdate: (details) {// 获取拖拽的距离double delta = details.delta.dx;// 更新左边的组件的宽度leftWidth += delta;// 限制左边的组件的宽度在 0 到屏幕宽度之间leftWidth = leftWidth.clamp(0.0, MediaQuery.of(context).size.width);// 重绘组件setState(() {});},onHorizontalDragCancel: () => {setState(() {isResizing = false;})},onHorizontalDragEnd: (details) => {Logger(tag).info('onHorizontalDragEnd called!'),setState(() {isResizing = false;})},child: VerticalDivider(width: _isHovered ? 3 : 2,thickness: _isHovered ? 3 : 2,color: Colors.grey[_isHovered ? 100 : 700],),),),
// 使用 Expanded 组件来包裹右边的组件Expanded(child: Container(color: Colors.red,child: Center(child: Text('右侧工作区')),),),]);}
}

效果已经完成,也没啥好说的了,晚安
=========END

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com