【问题标题】:Flutter force to release foreground颤振力释放前景
【发布时间】:2019-06-06 04:08:26
【问题描述】:

Flutter (Dart) 中如何释放前台到前一个应用程序?我的意思是,如何强制调用onPauseviewWillDisappear让我的应用消失,让之前的应用回到前台。

有没有我可以调用的方法?

编辑:我不想关闭我的应用,只是“最小化”它。

【问题讨论】:

  • 我不想关闭我的应用程序。我只是想“最小化”它。我的意思是,让以前的应用程序在不关闭我的情况下回到前台。

标签: android ios dart flutter


【解决方案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}');
   }
 }
}

安卓:

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

【讨论】:

  • ios 呢?
【解决方案2】:

您正在为 Flutter 的架构与 Android 的架构不匹配而苦苦挣扎。在your previous question 中,您需要一种将 Flutter 应用程序带到前台的方法,答案是全屏意图通知。问题在于,在原生 Android 中,您可能会使用 NEW_TASK 标志来启动新任务。由于 Flutter 只有一个 Activity,所以需要使用 USE_CURRENT 代替。

使用NEW_TASK,您将使用Activity.finish() 关闭它,只关闭新活动。如果你用 Flutter 这样做,那可能会关闭整个应用程序(因为使用了USE_CURRENT)。

可能有一个原生 Android 应用程序(允许您更直接地控制 Activity 的启动)并使用 Add2App 添加 Flutter 屏幕。如果你让它工作,我想知道。

【讨论】:

  • 再次感谢您的准确回答。但正如它在 GitHub 中所说:Add2App “API 和工具不稳定”,在不可靠的技术中采取一种方式让我感到不舒服。是否有另一种带有颤振的跨平台解决方案来正确“最小化”我的应用程序而不关闭它?我想尽可能避免在两个平台中重复方法。我对 IOS 的了解甚至比对 Android 的了解还要少。但似乎两个平台都有释放前景的事件。我很确定我们可以强迫它。 非常感谢您的帮助,Richard
  • 您应该阅读有关活动的整个部分,尤其是tasks 上的部分。要弹出您的活动,您需要调用完成,但如果这是您的 only 活动,那么您将退出 - 这是 Flutter 和 NEW_TASK 之间的根本冲突。我相信解决方案将位于 Add2App 区域的某个地方,但我还没有找到它。 (我也需要它;-))查看其他框架,例如 React Native,它们的行为可能不同并且更适合您的用例。
猜你喜欢
  • 2023-03-22
  • 2019-05-31
  • 1970-01-01
  • 2021-03-10
  • 2020-10-01
  • 2021-12-19
  • 2021-07-03
  • 2021-06-05
  • 1970-01-01
相关资源
最近更新 更多