【发布时间】:2019-07-26 17:59:45
【问题描述】:
当用户 5 分钟未与应用交互时,我想显示一些屏幕保护程序类型的屏幕。那么有谁知道如何在颤振中实现这种功能。
import 'dart:async';
import 'package:flutter/material.dart';
const timeout = const Duration(seconds: 10);
const ms = const Duration(milliseconds: 1);
Timer timer;
void main() =>
runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
var home = MyHomePage(title: 'Flutter Demo Home Page');
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: home,
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _goToSecondScreen() {
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => SecondPage()),
);
}
@override
Widget build(BuildContext context) {
return GestureDetector(child: Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Container(),
floatingActionButton: FloatingActionButton(
onPressed: _goToSecondScreen,
tooltip: 'Increment',
child: Icon(Icons.add),
),
), behavior:
HitTestBehavior.translucent, onTapDown: (tapdown) {
print("down");
if (timer != null) {
timer.cancel();
}
timer = startTimeout();
},);
}
startTimeout([int milliseconds]) {
var duration = milliseconds == null ? timeout : ms * milliseconds;
return new Timer(duration, handleTimeout);
}
void handleTimeout() {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ScreenSaver()),
);
}
}
class SecondPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Container();
}
}
class ScreenSaver extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new GestureDetector(child:Container(color: Colors.yellow,),
onTap: (){
Navigator.pop(context);
},
);
}
}
这是我试图实现该功能的示例代码。当屏幕在第二个屏幕中处于活动状态时,它不工作并且GestureDetector 停止收听。
【问题讨论】:
-
只需在每次用户交互时更新一个时间,并经常检查时间是否在一定时间后没有更新。
-
在哪里监听触摸事件?应用中有多个屏幕。
-
@GünterZöchbauer 请检查代码,我不知道如何处理上下文问题。
-
我看到了你的更新,只是还没来得及仔细看。
-
没问题,有时间请查看。