目前,我正在構建一個 Pinterest 克隆應用程式,我真的需要你的幫助。實際上,我花了將近一個小時來尋找答案,但給出的解決方案都沒有奏效。所以我需要的只是確定用戶通過手勢檢測器按下位置的 x 和 y 軸。任何人都可以幫助我,請...
uj5u.com熱心網友回復:
你的問題不清楚。你是什??么意思determine the x and y axes of the Gesture detector
如果您只需要知道用戶是否向右、向左或向下滑動,這里是一個示例
GestureDetector(
onVerticalDragUpdate: (details) {
int sensitivity = 8;
if (details.delta.dy > sensitivity) {
// Down Swipe
} else if (details.delta.dy < -sensitivity) {
// Up Swipe
}
},
onHorizontalDragUpdate: (details) {
// Note: Sensitivity is integer used when you don't want to mess up vertical drag
int sensitivity = 8;
if (details.delta.dx > sensitivity) {
// Right Swipe
} else if (details.delta.dx < -sensitivity) {
//Left Swipe
}
},
uj5u.com熱心網友回復:
您可以根據需要使用rect_getter。并執行如下:
var globalKey = RectGetter.createGlobalKey();
Offset _tapPosition;
var dx; //for x-axis
var dy; //for y-axis
RectGetter(
key: globalKey,
child: new Expanded(
child: new InkWell(
onTap: _handleTapDown,
onTapDown: _handleTapDown,
child: Center(
child: Container(
child: Utility.imageFromBase64String(imagename),
// backgroundColor: const Color(0xFF20283e),
),
),
),
),
),
_handleTapDown 函式
void _handleTapDown(TapDownDetails details) {
final RenderBox referenceBox = context.findRenderObject();
setState(() {
_tapPosition = referenceBox.globalToLocal(details.globalPosition);
dx = double.parse(_tapPosition.dx.toStringAsFixed(2));
dy = double.parse(_tapPosition.dy.toStringAsFixed(2));
print(_tapPosition);
});
}
uj5u.com熱心網友回復:
我相信您不應該在GestureDetector這里使用,而是使用Listener小部件。作為偵聽器,您可以為您提供用戶按下位置的全域位置,或者與按下的小部件開始位置的相對位置。
這是一些示例代碼:
import 'package:flutter/material.dart';
class GetPositionExample extends StatelessWidget {
const GetPositionExample({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Listener(
// This will report a PointerDownEvent whenever the user presses the screen.
// If you want updates as the user moves their finger across the screen,
// use onPointerMove instead.
onPointerDown: (PointerDownEvent event) {
// Global screen position.
print("Global position x:${event.position.dx}, y:${event.position.dy}");
// Position relative to where this widget starts.
print("Relative position: x:${event.localPosition.dx}, y:${event.localPosition.dy}");
},
// You should also be aware of these Listener methods,
// if any of them is more suited for your use-case:
// onPointerMove: (PointerMoveEvent event) {},
// onPointerUp: (PointerUpEvent event) {},
// onPointerCancel: (PointerCancelEvent event) {},
// onPointerHover: (PointerHoverEvent event) {},
// onPointerSignal: (PointerSignalEvent event) {},
child: Container(
color: Colors.blue,
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height/2,
),
);
}
}
// Some code to run the above example
class App extends StatelessWidget {
const App({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(home: Scaffold(body: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: const [
GetPositionExample(),
],
)));
}
}
void main() => runApp(const App());
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/433748.html
上一篇:如何在ListView構建器中創建與顫動中它們旁邊的標簽一致的按鈕串列?
下一篇:如何在顫動中更改文本字母的顏色
