### 監聽手機返回鍵(雙擊退出)
```
import 'package:fluttertoast/fluttertoast.dart'; //提示插件
class WillPopScopeTestRoute extends StatefulWidget {
@override
WillPopScopeTestRouteState createState() {
return new WillPopScopeTestRouteState();
}
}
class WillPopScopeTestRouteState extends State<WillPopScopeTestRoute> {
DateTime _lastPressedAt; //上次點擊時間
var status = false;
@override
Widget build(BuildContext context) {
return GestureDetector(
onDoubleTap: (){return status=true;},
child: WillPopScope(
onWillPop: () async {
if (_lastPressedAt == null) {
Fluttertoast.showToast(
msg: "雙擊退出程序...",
gravity: ToastGravity.BOTTOM,
timeInSecForIos: 1,
backgroundColor: Colors.grey[400],
textColor: Colors.white,
fontSize: ScreenUtil().setWidth(12),
);
}
if (_lastPressedAt == null ||
DateTime.now().difference(_lastPressedAt) >
Duration(seconds: 1)) {
//兩次點擊間隔超過1秒則重新計時
_lastPressedAt = DateTime.now();
return false;
}
return true;
},
child: Pages(),
),
);
}
}
main-MyApp中使用
home: WillPopScopeTestRoute(),
```
### 監聽手機返回鍵(單擊返回桌面不退出app)
```
// MainActivity
import android.os.Bundle;
import android.view.KeyEvent;
import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;
//通訊名稱,回到手機桌面
private final String CHANNEL = "android/back/desktop";
// onCreate方法下
new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
//通過methodCall可以獲取參數和方法名 執行對應的平台業務邏輯即可
if (methodCall.method.equals("backDeskTop")) {//設置 當前flutter頁返回到手機桌面
result.success(true);
moveTaskToBack(false); // 調用返回事件
}
}
}
);
// android_back_top文件
import 'package:flutter/services.dart';
import 'package:flutter/material.dart';
class AndroidBackTop {
//初始化通信管道-設置退出到手機桌面
static const String CHANNEL = "android/back/desktop";
//設置回退到手機桌面
static Future<bool> backDeskTop() async {
final platform = MethodChannel(CHANNEL);
//通知安卓返回,到手機桌面
try {
final bool out = await platform.invokeMethod('backDeskTop');
if (out) {
debugPrint('設置成功');
}
} on PlatformException catch (e) {
debugPrint("通信失敗(設置回退到安卓手機桌面:設置失敗)");
print(e.toString());
}
return Future.value(false);
}
}
// main文件下使用
home: WillPopScope(
onWillPop: () async {
AndroidBackTop.backDeskTop();
return false;
},
child: Pages(),
),
```