首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何防止堆栈中的可拖动小部件(使用Matrix4转换创建)在添加另一个可拖动小部件时改变其位置?

在堆栈中添加可拖动小部件时,防止已有的可拖动小部件改变其位置的关键在于正确使用Matrix4转换。下面是一种可能的解决方案:

  1. 创建一个Draggable组件,并通过Matrix4转换将其位置设置为初始位置。
  2. 在堆栈中添加这个可拖动小部件,并使用GestureDetector来捕获手势事件。
  3. 当手势事件开始时,记录可拖动小部件的初始位置。
  4. 在手势事件进行过程中,计算位移量,并根据位移量更新可拖动小部件的位置。
  5. 当手势事件结束时,将可拖动小部件的位置保存,并清除初始位置信息。

以下是一个示例代码:

代码语言:txt
复制
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:vector_math/vector_math_64.dart' show Vector3;

class DraggableWidget extends StatefulWidget {
  @override
  _DraggableWidgetState createState() => _DraggableWidgetState();
}

class _DraggableWidgetState extends State<DraggableWidget> {
  Matrix4 _transform = Matrix4.identity();
  Offset _startPosition;

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onPanStart: (details) {
        _startPosition = details.globalPosition;
      },
      onPanUpdate: (details) {
        final currentPosition = details.globalPosition;
        final delta = currentPosition - _startPosition;
        setState(() {
          _transform = Matrix4.translationValues(delta.dx, delta.dy, 0);
        });
      },
      onPanEnd: (_) {
        _startPosition = null;
        // You can save the final position here if needed.
      },
      child: Transform(
        transform: _transform,
        child: Container(
          width: 100,
          height: 100,
          color: Colors.blue,
        ),
      ),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Draggable Widget'),
      ),
      body: Stack(
        children: [
          Positioned(
            top: 100,
            left: 100,
            child: DraggableWidget(),
          ),
          // Add more draggable widgets here.
        ],
      ),
    );
  }
}

void main() {
  runApp(MaterialApp(home: MyHomePage()));
}

在这个示例中,我们创建了一个DraggableWidget小部件,并使用Matrix4转换来设置其初始位置。通过捕获手势事件,我们可以计算出位移量,并根据位移量更新小部件的位置。当手势结束时,我们可以保存最终位置,以备将来使用。

请注意,这只是一种解决方案,具体取决于您的实际需求和代码结构。有关更多详细信息和示例,请参阅Flutter官方文档和相关教程。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券