0

我使用 Java 为 Android 开发了我的应用程序,现在想迁移到Flutter

为了检测用户不活动,我在 Activity: 中覆盖此方法onUserInteraction并重置 a Timer,如果没有用户交互,我会显示像动画这样的屏幕保护程序。

Flutter 中是否有任何干净的方法可以做到这一点?我不想使用平台频道。我想要它纯粹的 Dart 和颤振。我知道我可以设置计时器并在用户触摸时重置它,但就像在 Android 中一样,我希望系统通知我有关用户交互的信息。

4

2 回答 2

2

您可以使用 wrap your MaterialAppin 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',
      ),
    );
  }
}
于 2021-02-06T06:45:50.547 回答
0

您需要做的就是访问应用程序的生命周期。一个很好的方法是在应用程序的 LandingPage 上使用 mixin WidgetsBindingObserver。

mixin 为您提供了一个枚举 AppLifecycleState,它可以有 4 个值,分离的、非活动的、暂停的和恢复的,它描述了应用程序的当前状态。

您可以通过此创建一个函数,例如 didAppLifecycleChange 获取应用程序的状态。即didAppLifecycleChange(AppLifecycleState state)。然后,您可以使用这些状态在应用程序上执行操作。

于 2022-01-06T01:26:58.870 回答