如何识别谷歌眼镜向上滑动手势与Flutter?



我是一个初学者,我正试图从谷歌眼镜企业版2中获得手势。我发现,手势检测器不能检测到谷歌眼镜的滑动/点击动作,它们被检测为按键。所以我使用KeyboardListener找到的键是shift left对于,向左滑动, "对于,向右滑动,选择"对于,点击和&;go back&;对于向下滑动(有点奇怪,但没关系)。

然而,我不能让向上滑动键工作,它直接退出应用程序。我尝试了很多东西(AbsorbPointer, Listener on touch event, mousereregion, WillPopScope…),但当我向上滑动时似乎没有事件被触发。

然而,我有一个使用Android Studio开发的应用程序,它有一个功能,当我向上滑动时,它会打开底部屏幕,而不会退出该应用程序。所以,如果Android Studio可以实现这一点,我认为Flutter也可以实现向上滑动手势并执行操作,而不是退出应用程序。

下面是我用来读取按下的键的代码:
class HomePage extends StatefulWidget {
const HomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
double _startX = 0.0;
double _startY = 0.0;
double _endX = 0.0;
double _endY = 0.0;
final FocusNode _focusNode = FocusNode();
// The message to display.
String? _message;
// Focus nodes need to be disposed.
@override
void dispose() {
_focusNode.dispose();
super.dispose();
}
// Called by onPanStart, works only on smartphone
void _startSwipe(DragStartDetails details) {
setState(() {
_startX = details.globalPosition.dx;
_startY = details.globalPosition.dy;
});
}
// Called by onPanUpdate, works only on smartphone
void _updateSwipe(DragUpdateDetails details) {
setState(() {
_endX = details.globalPosition.dx;
_endY = details.globalPosition.dy;
});
}
// Called by onPanEnd, works only on smartphone
void _endSwipe(DragEndDetails details) {
// Get screen height and width
double height = MediaQuery.of(context).size.height;
double width = MediaQuery.of(context).size.width;
double xRatio = (_endX - _startX).abs() / width;
double yRatio = (_endY - _startY).abs() / height;
setState(() {
// if horizontal move is greater than vertical move,
// it's an horizontal swipe
if (xRatio > yRatio) {
if (_endX < _startX) {
_message = 'Swipe left';
} else {
_message = 'Swipe right';
}
} else {
// vertical move
_message = 'Swipe bottom';
}
});
}
// Called by onKey, works only on Google glass
void _tap() {
setState(() {
_message = 'Tap';
});
}
// Called by onPanUpdate, works only on smartphone
void _handleKeyEvent(RawKeyEvent event) {
if (event is RawKeyUpEvent && !event.isShiftPressed) {
setState(() {
if (event.logicalKey == LogicalKeyboardKey.goBack) {
_message = 'Swipe down';
// } else if (event.logicalKey == ???) {
//   _message = 'Swipe up';
} else if (event.logicalKey == LogicalKeyboardKey.shiftLeft) {
_message = 'Swipe left';
} else if (event.logicalKey == LogicalKeyboardKey.tab) {
_message = 'Swipe right';
} else if (event.logicalKey == LogicalKeyboardKey.select) {
_message = 'Tap';
} else {
if (kReleaseMode) {
_message =
'Pressed : 0x${event.logicalKey.keyId.toRadixString(16)}';
} else {
_message = 'Pressed : ${event.logicalKey.debugName}';
}
}
});
}
}
@override
Widget build(BuildContext context) {
return GestureDetector(
// Smartphone events
onPanStart: _startSwipe,
onPanUpdate: _updateSwipe,
onPanEnd: _endSwipe,
onTap: _tap,
child: Scaffold(
backgroundColor: Colors.black,
body: Center(
child: RawKeyboardListener(
focusNode: _focusNode,
// Google glass event
onKey: _handleKeyEvent,
child: Text(
_message ?? 'Swipe',
style: const TextStyle(
fontSize: 20,
color: Colors.white,
),
),
),
),
),
);
}
}

我有一个关于点击,拖动和其他手势的Flutter文档,但它只适用于我的智能手机。我也有一个关于手势的谷歌眼镜文档,但它适用于Android Studio,而不是Flutter。

没有关于用Flutter开发谷歌眼镜应用程序的真正文档,我已经没有解决方案了。有谁已经设法得到谷歌眼镜与Flutter的滑动手势,可以帮助我吗?

使用谷歌眼镜企业版2,我的Flutter谷歌眼镜应用程序没有收到触摸板事件,直到我在我的AndroidManifest.xml的application部分添加了以下内容:

<meta-data
android:name="com.google.android.glass.TouchEnabledApplication"
android:value="true" />

此时GestureDetector工作正常

最新更新