flutter android 侧滑返回任务栏
方案贴废话就不多说了,上代码:
首先安装Intent插件,这个省去了在原生写插件的时间
dependencies:
flutter:
sdk: flutter
android_intent_plus: ^4.0.3
侧滑退出改为返回任务栏,分两步:
- Home页禁止 物理返回按键或者是屏幕侧滑退出app;
- 创建一个新的flag“标记”将app的主屏幕放进去就行了。
只要实现了这两个目标就可以完美实现侧滑返回任务栏的功能。
禁用物理返回按键
flutter 3.0 以前的写法:
Scaffold(
body: WillPopScope(
onWillPop: () async {
// 禁止返回上一页
return Future.value(false);
}
child: ......
)
flutter 3.0 以后的写法:
Scaffold(
body: PopScope(
canPop: false,
onPopInvoked: (v) async {
if(v){
// 回上一页
} else{
......退出或者是返回任务栏
}
}
child: ......
)
侧滑添加新的任务
先说一下Intent是做什么东东的:
Intent 是一种用于在不同组件之间传递信息的对象。它可以用于启动组件(如活动、服务或广播接收器)以及在组件之间传递数据。
我们这里通过安装好的AndroidIntentPlus插件来实现 Intent的通信功能。
if (GetPlatform.isAndroid) {
AndroidIntent intent = const AndroidIntent(
action: 'android.intent.action.MAIN',
flags: [Flag.FLAG_ACTIVITY_NEW_TASK],
category: "android.intent.category.HOME",
);
await intent.launch().catchError((e) {
debugPrint(e);
});
}
action: 'android.intent.action.MAIN',
See https://developer.android.com/reference/android/content/Intent.html#intent-structure.
指定了 intent 的操作(action),这里是启动主要(main)活动。
如果怕不太确定怎么写,可以去 android/app/src/main AndroidManifest.xml中查看一下:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
flags: [Flag.FLAG_ACTIVITY_NEW_TASK],
FLAG_ACTIVITY_NEW_TASK ,如果目标活动不在任务栈中,则创建一个新的任务栈,并将目标活动放置在新的任务栈顶部category: "android.intent.category.HOME",
HOME 类别,表示这个 intent 用于启动设备的主屏幕(Home)intent.launch()
执行,然后app就丝滑的返回桌面,加入到任务栏中喽。