如何在Flutter(Dart)中释放对先前应用程序的前景?我的意思是,如何强制调用onPause
或viewWillDisappear
以使我的应用消失,并使之前的应用回到前台。
有没有可以调用的方法?
编辑:我不想关闭我的应用,只是“最小化”它。
答案 0 :(得分:1)
您正在为Flutter的架构与Android的架构不匹配而苦苦挣扎。在your previous question中,您需要一种将Flutter应用程序置于前台的方法,答案是全屏意图通知。问题在于,在本机Android中,您可能已经使用NEW_TASK
标志来启动新任务。由于Flutter只有一项活动,因此有必要改为使用USE_CURRENT
。
使用NEW_TASK
,您将使用Activity.finish()
关闭它,仅关闭新活动。如果您使用Flutter这样做,则可能会关闭整个应用程序(因为使用了USE_CURRENT
)。
可能有一个本地Android应用程序(允许您直接控制活动的启动),并可以使用Add2App添加Flutter屏幕。如果您能正常使用,我想知道。
答案 1 :(得分:1)
我终于找到了解决方案!我还没有找到IOS方面的解决方案:我正在努力。
我使用MethodChannel
向本机方面要求最小化。对于Android,请使用 this.moveTaskToBack(true);
!如果您有Objectif-C替代产品,那将是完美的!
飞镖:
class _MyHomePageState extends State<MyHomePage> {
static const MethodChannel actionChannel = MethodChannel('method.channel');
Future<void> _minimize() async{
try{
await actionChannel.invokeMethod('minimize');
} on PlatformException catch(e) {
print('${e.message}');
}
}
}
Android:
public class MainActivity extends FlutterActivity {
private static final String ACTION_CHANNEL = "method.channel";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Action-post-alert method
new MethodChannel(getFlutterView(), ACTION_CHANNEL).setMethodCallHandler(
new MethodCallHandler() {
@Override
public void onMethodCall(MethodCall call, Result result) {
if (call.method.equals("minimize")) {
this.moveTaskToBack(true);
result.success(true);
} else {
result.notImplemented();
}
}
}
);
}
}