Code de scintillement pour envoyer l'application en arrière-plan lorsque le bouton de retour est enfoncé. Je veux réduire l'application en arrière-plan lorsque je clique sur le bouton de retour comme le bouton d'accueil le fait pour les applications et maintenant, lorsque je clique sur le bouton de retour, cela tue l'application. J'utilise willPopScope pour le faire fonctionner mais aucune aide
4 Réponses :
Essayez d'utiliser
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
Consultez la documentation ici: https://docs.flutter.io/flutter/services/SystemNavigator/pop.html
J'ai essayé cela, mais cela tue également l'application ... je veux quelque chose qui minimise en arrière-plan plutôt que de pop
Google a publié des documents expliquant comment exécuter une application Flutter en arrière-plan. Il nécessite l'utilisation de threads Isolate . J'ai eu mes mains giflées une ou deux fois ici en créant un lien direct vers le document, vous devrez donc rechercher vous-même sur Google "Flutter background app". :(
CODE DE FORMULAIRE DE PLATEAU:
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () {
if (Platform.isAndroid) {
if (Navigator.of(context).canPop()) {
return Future.value(true);
} else {
_androidAppRetain.invokeMethod("sendToBackground");
return Future.value(false);
}
} else {
return Future.value(true);
}
},
child: Scaffold(
drawer: MainDrawer(),
body: Stack(
children: <Widget>[
GoogleMap(),
],
),
),
);
}
VOTRE CODE DART:
class MainActivity : FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
GeneratedPluginRegistrant.registerWith(this)
MethodChannel(flutterView, "android_app_retain").apply {
setMethodCallHandler { method, result ->
if (method.method == "sendToBackground") {
moveTaskToBack(true)
}
}
}
}
}
CRÉDIT À: Sergi Castellsaguà © Millán
J'ai trouvé ce package sur pub.dev et il a bien fonctionné pour moi et il est facile à utiliser
MISE À JOUR 03.2020
Comme @ user1717750 l'a écrit - Le code de fléchettes reste le même, donc c'est:
class MainActivity: FlutterActivity() {
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "android_app_retain").apply {
setMethodCallHandler { method, result ->
if (method.method == "sendToBackground") {
moveTaskToBack(true)
}
}
}
}
}
Le code dans MainActivity () devrait ressembler à ceci:
var _androidAppRetain = MethodChannel("android_app_retain");
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () {
if (Platform.isAndroid) {
if (Navigator.of(context).canPop()) {
return Future.value(true);
} else {
_androidAppRetain.invokeMethod("sendToBackground");
return Future.value(false);
}
} else {
return Future.value(true);
}
},
child: Scaffold(
...
),
);
}
Je crois que vous ne pouvez pas le faire dans Flutter pour le moment. Vous pouvez essayer
MethodChannelet le faire nativement des deux côtés. Voulez-vous que je mette une solution pour Android?