如何在 Flutter 中检测用户不活动

问题描述

我使用 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',);
  }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...