dart 发送您的应用程序到后台时,返回按钮按下Flutter

a11xaf1n  于 2023-07-31  发布在  Flutter
关注(0)|答案(4)|浏览(166)

当按下后退按钮时,将应用程序发送到后台的抖动代码。我想最小化的应用程序的背景,当我点击返回按钮一样,主页按钮的应用程序,现在当我点击返回按钮,它杀死了应用程序。我正在使用willPopScope让它工作,但没有帮助

rta7y2nd

rta7y2nd1#

我在pub.dev上找到了这个软件包,它对我来说很好用,而且很容易使用
https://pub.dev/packages/move_to_background

2w3kk1z5

2w3kk1z52#

03.2020更新

正如@user1717750所写的-dart代码保持不变,所以它是:

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

字符串
MainActivity()中的代码应该如下所示:

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)
            }
        }
    }
}
}

t1rydlwq

t1rydlwq3#

从这里:https://medium.com/stuart-engineering/%EF%B8%8F-the-tricky-task-of-keeping-flutter-running-on-android-2d51bbc60882
模板代码:

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)
                }
            }
        }
    }
}

字符串
您的 dart 代码:

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


作者:Sergi Castellsagué Millán

hmtdttj4

hmtdttj44#

07.2023更新

@Muscler回答:
平台代码(Kotlin)再次更改:

import androidx.annotation.NonNull
    import io.flutter.embedding.android.FlutterActivity
    import io.flutter.embedding.engine.FlutterEngine
    import io.flutter.plugin.common.MethodChannel

    class MainActivity: FlutterActivity() {
        override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
            super.configureFlutterEngine(flutterEngine)

            MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "android_app_retain").apply {
                setMethodCallHandler { method, result ->
                    if (method.method == "sendToBackground") {
                        moveTaskToBack(true)
                    }
                }
            }
        }
   }

字符串
如果它再次改变,你应该看看flutter文档:https://docs.flutter.dev/platform-integration/platform-channels?tab=android-channel-kotlin-tab
dart代码还是一样的,所以是:

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

相关问题