2
votes

Envoi de votre application en arrière-plan lorsque le bouton retour est enfoncé en scintillement

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


1 commentaires

Je crois que vous ne pouvez pas le faire dans Flutter pour le moment. Vous pouvez essayer MethodChannel et le faire nativement des deux côtés. Voulez-vous que je mette une solution pour Android?


4 Réponses :


0
votes

Essayez d'utiliser

SystemChannels.platform.invokeMethod('SystemNavigator.pop');

Consultez la documentation ici: https://docs.flutter.io/flutter/services/SystemNavigator/pop.html


2 commentaires

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". :(



0
votes

De là: https://medium.com/stuart-engineering/%EF%B8%8F-the-tricky-task-of-keeping-flutter-running-on-android-2d51bbc60882

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


0 commentaires

5
votes

J'ai trouvé ce package sur pub.dev et il a bien fonctionné pour moi et il est facile à utiliser

https://pub.dev/packages/move_to_background


0 commentaires

3
votes

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(
    ...
  ),
);
}


0 commentaires