Flutter拖拽小部件

缺乏、安全感 2022-10-31 04:18 72阅读 0赞

编写初衷

因为项目需要浮动按钮所以我这里开发了一个拖动小部件

这里直接上代码

  1. import 'dart:math';
  2. import 'package:flutter/gestures.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter_screenutil/flutter_screenutil.dart';
  5. // ignore: must_be_immutable
  6. class TouchMove extends StatefulWidget {
  7. TouchMove({ Key key,this.child}) : super(key: key);
  8. Widget child;
  9. @override
  10. _TouchMoveState createState() => _TouchMoveState();
  11. }
  12. class _TouchMoveState extends State<TouchMove> {
  13. //静止状态下的offset
  14. Offset idleOffset=Offset(ScreenUtil().setWidth(600), ScreenUtil().setHeight(1100));
  15. // //本次移动的offset
  16. // Offset moveOffset=Offset(0, 0);
  17. //本次移动的offset
  18. Offset moveOffset=Offset(ScreenUtil().setWidth(600), ScreenUtil().setHeight(1100));
  19. //最后一次down事件的offset
  20. Offset lastStartOffset=Offset(ScreenUtil().setWidth(600), ScreenUtil().setHeight(1100));
  21. @override
  22. void initState() {
  23. super.initState();
  24. }
  25. @override
  26. Widget build(BuildContext context) {
  27. return GestureDetector(
  28. behavior: HitTestBehavior.deferToChild,
  29. onPanStart: (detail) {
  30. setState(() {
  31. lastStartOffset=detail.globalPosition;
  32. });
  33. },
  34. onPanUpdate: (detail){
  35. setState(() {
  36. moveOffset=detail.globalPosition-lastStartOffset+idleOffset;
  37. moveOffset=Offset(moveOffset.dx, moveOffset.dy);
  38. });
  39. },
  40. onPanEnd: (detail) {
  41. setState(() {
  42. idleOffset=moveOffset*1;
  43. });
  44. },
  45. child:Transform.translate(
  46. offset: moveOffset,
  47. child: Container(
  48. child:widget.child,
  49. ))
  50. // widget.child,
  51. );
  52. }
  53. }

发表评论

表情:
评论列表 (有 0 条评论,72人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JS

    实现后效果 ![70][] 实现原理: 1. 在允许拖拽的节点元素上,监听mousedown(按下鼠标按钮)事件,鼠标按下后,事件触发 2. 监听mousemov