Флаттер масштабируемый виджет - PullRequest
0 голосов
/ 03 июня 2019

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

Жесты, которые я хочу охватить,

  1. Pinch To Zoom
  2. Дважды нажмите, чтобы увеличить
  3. Нажмите, чтобы получить локальное положение виджета

Вот мой план виджета:

ZoomableWidget(
   child: // My custom Widget which should be zoomable.
)

Вот мойтекущий прогресс:

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:vector_math/vector_math_64.dart';

class ZoomableWidget extends StatefulWidget {
  final Widget child;

  const ZoomableWidget({Key key, this.child}) : super(key: key);
  @override
  _ZoomableWidgetState createState() => _ZoomableWidgetState();
}

class _ZoomableWidgetState extends State<ZoomableWidget> {
  double _scale = 1.0;
  double _previousScale;
  @override
  Widget build(BuildContext context) {
    return ClipRect(
      child: GestureDetector(
        onScaleStart: (ScaleStartDetails details) {
          _previousScale = _scale;
        },
        onScaleUpdate: (ScaleUpdateDetails details) {
          setState(() {
            _scale = _previousScale * details.scale;
          });
        },
        onScaleEnd: (ScaleEndDetails details) {
          _previousScale = null;
        },
        child: Transform(
          transform: Matrix4.diagonal3(Vector3(_scale.clamp(1.0, 5.0),
              _scale.clamp(1.0, 5.0), _scale.clamp(1.0, 5.0))),
          alignment: FractionalOffset.center,
          child: widget.child,
        ),
      ),
    );
  }
}

Проблема, с которой я столкнулся, заключается в том, что я не могу изменить центр щепотки, поэтому изображение увеличивается только на (0,0) даже после увеличения угла.Кроме того, я не могу получить доступ к горизонтальному и вертикальному перетаскиванию, чтобы прокрутить виджет.

Заранее спасибо.

...