Я разрабатываю прокручиваемые и масштабируемые изображения. Я создал класс панорамирования для масштабирования. когда я увеличиваю изображение с помощью жеста масштабирования, некоторое время обнаруживается прокрутка. Я использую жест масштабирования для масштабирования изображения и использую два виджета singlechildscrollview для горизонтальной и вертикальной прокрутки. Как решить эту проблему ?. Заранее спасибо.
class Panner extends StatefulWidget {
@override
State<StatefulWidget> createState() => PannerState();
}
class PannerState extends State<Panner> {
String assets ;
Uint8List pageData;
double scrollPosx=0,scrollPosy=0,previousPosx=0,previousPosy=0;
double scale = 1.0, previousScale = 1.0;
double originalImageHeight, imageHeight;
Offset _offset = Offset.zero;
Offset _previousOffset, _startingFocalPoint;
ScrollController _verticalController = ScrollController();
ScrollController _horizontalController = ScrollController();
_findPosition()
{
_previousOffset=Offset(-scrollPosx,-scrollPosy);
previousPosx=-scrollPosx;
previousPosy=-scrollPosy;
}
}
Future _getImage(BuildContext context) async {
if(pageData == null)
{
assets = 'images/squirrel.jpg';
imageHeight = originalImageHeight = MediaQuery.of(context).size.height;
pageData = ((await rootBundle.load(assets)).buffer.asUint8List());
}
}
_onScaleUpdate(ScaleUpdateDetails details) {
scale = details.scale * previousScale;
if(scale!=1.0) {
if (scale < 0.5) {
scale = 0.5;
}
imageHeight = originalImageHeight * scale;
setState(() {});
final Offset normalizedOffset = (_startingFocalPoint -
_previousOffset) / previousScale;
_offset = details.focalPoint - normalizedOffset * scale;
_horizontalController.jumpTo(-_offset.dx);
_verticalController.jumpTo(-_offset.dy);
}
}
_onScaleStart(ScaleStartDetails details) {
_startingFocalPoint = details.focalPoint;
previousScale = scale;
_previousOffset = _offset;
scrollPosx=_horizontalController.position.pixels;
scrollPosy=_verticalController.position.pixels;
if(previousPosx!=scrollPosx || previousPosy!=scrollPosy)
{
_findPosition();
}
setState(() {});
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: _getImage(context),
builder: (context, snapshot) {
if(pageData==null)
{
return CircularProgressIndicator();
}
return GestureDetector(
onScaleStart: _onScaleStart,
onScaleUpdate: _onScaleUpdate,
// onScaleEnd: _onScaleEnd,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
controller: _horizontalController,
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
controller: _verticalController,
child: Align(
alignment: FractionalOffset.center,
child: Image.memory(
pageData,
height: imageHeight,
fit: BoxFit.cover,
width: imageWidth,
),
)
),
)
) ;
});
}
}`
'Я использую жест масштабирования для увеличения изображения и использую два виджета singlechildscrollview для горизонтальной и вертикальной прокрутки'