我使用 Java 为 Android 开发了我的应用程序,现在想迁移到Flutter。
为了检测用户不活动,我在 Activity: 中覆盖此方法onUserInteraction
并重置 a Timer
,如果没有用户交互,我会显示像动画这样的屏幕保护程序。
Flutter 中是否有任何干净的方法可以做到这一点?我不想使用平台频道。我想要它纯粹的 Dart 和颤振。我知道我可以设置计时器并在用户触摸时重置它,但就像在 Android 中一样,我希望系统通知我有关用户交互的信息。
您可以使用 wrap your MaterialApp
in 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',
),
);
}
}
您需要做的就是访问应用程序的生命周期。一个很好的方法是在应用程序的 LandingPage 上使用 mixin WidgetsBindingObserver。
mixin 为您提供了一个枚举 AppLifecycleState,它可以有 4 个值,分离的、非活动的、暂停的和恢复的,它描述了应用程序的当前状态。
您可以通过此创建一个函数,例如 didAppLifecycleChange 获取应用程序的状态。即didAppLifecycleChange(AppLifecycleState state)。然后,您可以使用这些状态在应用程序上执行操作。