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

Mne*_*oee 4 android screensaver dart flutter flutter-channel

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

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

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

Vin*_*eet 7

您可以使用将您的包裹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',
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)