как добиться пинч-зума, перемещаемого внутри стека и. вращение любого виджета в flutter

#android #android-studio #flutter #dart

#Android #android-studio #flutter #dart

Вопрос:

Привет разработчику Super seniors. Я пытаюсь создать приложение для создания сообщений, например, 1SStory в flutter, я хочу добавить изображение или текст или значок в стек, а затем хочу сделать его подвижным, уменьшить масштаб, используя 2 пальца и повернуть. Мне нужно то же самое, что и в приведенном видео-примере

Вы можете проверить здесь, я перепробовал много решений из stackoverflow, эти случаи приведены ниже

Пример 1 Я попробовал приведенный ниже код, но он работает только для того, чтобы сделать виджет подвижным, я не могу ущипнуть и повернуть его.

 class MoveableStackItem extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _MoveableStackItemState();
  }
}
class _MoveableStackItemState extends State<MoveableStackItem> {
  double xPosition = 0;
  double yPosition = 0;
  Color color;
  double height = 150, width = 150;
  @override
  void initState() {
    color = RandomColor().randomColor();
    super.initState();
  }
  @override
  Widget build(BuildContext context) {
    return Positioned(
      top: yPosition,
      left: xPosition,
      child: GestureDetector(
        onPanUpdate: (tapInfo) {
          setState(() {
            xPosition  = tapInfo.delta.dx;
            yPosition  = tapInfo.delta.dy;
          print(xPosition);
          });},
        child: Container(
          width: xPosition==0 ? width: xPosition,
          height: yPosition ==0? height :yPosition,
          color: color,),),);}}
 

Случай2
Я попробовал приведенный ниже код matrix_gesture_detector с использованием стека, который я могу поворачивать, зажимать и перемещать, но это делается в стеке, поэтому, когда я выполняю любую операцию, например, перемещение, масштабирование, все виджеты перемещаются и масштабируются одновременно, что является проблемой, если у вас есть какое-либо решение, пожалуйста, направьте меня.

 Stack(
        children: [
          MatrixGestureDetector(
            onMatrixUpdate: (m, tm, sm, rm) {
              notifier.value = m;},
            child: AnimatedBuilder(
              animation: notifier,
              builder: (ctx, child) {
                return Transform(
                  transform: notifier.value,
                  child: Stack(
                    children: <Widget>[
                      Positioned.fill(
                        child: Container(
                          height: 150,
                          width: 150,
                          transform: notifier.value,
                          child: Container(height: 150,width: 150,color: Colors.yellow,),
                        ),),],),);},),),],),
 

Я застрял в последние 5 дней, все еще проводя эксперименты, но все напрасно, пожалуйста, направьте меня, я буду вам очень благодарен.

Комментарии:

1. Вы пробовали это ? Это позволяет выполнять панорамирование и масштабирование

2. Я пробовал это, но он перемещается только между boundaryMargin: EdgeInsets.all(100.0),

3. Я хочу 3 в 1, например, подвижный. ущипните, чтобы увеличить, уменьшить и повернуть.