问题描述
我使用 Java 开发了适用于 Android 的应用,现在想迁移到 Flutter。
对于 detecting user inactivity,我在我的 Activity: onUserInteraction
中重写此方法并重置 Timer
,如果没有用户交互,我会显示类似动画的屏幕保护程序。
Flutter 有什么干净的方法可以做到这一点吗?我不想使用 platform channels。我想要纯粹的 Dart 和 Flutter。我知道我可以设置计时器并在用户触摸时重置它,但就像在 Android 中一样,我希望系统通知我有关用户交互的信息。
解决方法
您可以使用将 MaterialApp
包裹在 Listener
中。并在交互时重置计时器。类似于您在 android 中所做的。
它仅侦听轻击、拖动、然后释放或取消等手势。然而,它不会监听鼠标事件,例如在不按下任何按钮的情况下悬停区域。对于此类事件,请使用 MouseRegion。
示例代码:
import 'package:flutter/material.dart';
final Color darkBlue = Color.fromARGB(255,18,32,47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Listener(
onPointerDown: (_) => print('down'),// best place to reset timer imo
onPointerMove: (_) => print('move'),onPointerUp: (_) => print('up'),child: MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),debugShowCheckedModeBanner: false,home: Scaffold(
body: Center(
child: MyWidget(),),);
}
}
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return TextFormField(
maxLength: 10,maxLengthEnforced: true,decoration: InputDecoration(
border: OutlineInputBorder(),labelText: 'Details',);
}
}