seong
Flutter - Android 뒤로가기 버튼 클릭을 홈버튼과 동일한 효과 내기 본문
Android에서 뒤로가기 버튼 클릭시 앱을 종료 하는게 아니라, 백그라운드에서 계속 실행 해둬야 하는 경우가 생길 수 있다.
이때 Android에서 moveTaskToBack이라는 함수가 있어서, 메서드 채널로 구현할 수 있다.
1. PopScope로 뒤로가기를 감지 하고, 함수에서 더블 클릭 시 메서드 채널로 요청
PopScope(
canPop: false,
onPopInvoked: (bool didPop) {
onWillPop();
},
child:Scaffold();
);
Future<bool> onWillPop() async {
DateTime now = DateTime.now();
if (backPressTime == null ||
now.difference(backPressTime!) > const Duration(seconds: 2)) {
backPressTime = now;
// Fluttertoast.showToast(msg: MyApp.localization..exitButton);
return false;
}
await AndroidMethodChannel().moveTaskToBack();
return Future.value(true);
}
2. Android메서드 채널
class AndroidMethodChannel {
static final AndroidMethodChannel _singleton = AndroidMethodChannel._();
factory AndroidMethodChannel() {
return _singleton;
}
AndroidMethodChannel._();
var methodChannel = const MethodChannel("android");
Future<void> moveTaskToBack() async {
await methodChannel.invokeMethod("moveTaskToBack");
}
}
3. 메서드 채널로 요청 받아 moveTaskToBack 함수를 실행
class MainActivity : FlutterActivity(), NotificationHandlerListener {
lateinit var methodChannel: MethodChannel
private val TAG = "MainActivity"
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
methodChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "android")
methodChannel.setMethodCallHandler { call, result ->
when (call.method) {
"moveTaskToBack" -> {
moveTaskToBack(true)
}
}
}
}
}
'Flutter > Flutter' 카테고리의 다른 글
Flutter - flutter_callkit_incoming 라이브러리 사용 ( Fake_call ) (0) | 2024.09.25 |
---|---|
Flutter -권한 요청 iOS PermissionHandler (0) | 2024.09.19 |
Flutter - BottomNav 더블 탭시 화면의 스크롤 가장 위로 보내기 (0) | 2024.08.09 |
Flutter - 사용자 설정 폰트 크기 무시하기 (0) | 2024.07.08 |
Flutter - Flutter with Python (2) 파이썬 결과 값 View로 보여주기 (5) | 2024.05.17 |