【问题标题】:Exiting native Android activity on Flutter requires two back presses在 Flutter 上退出原生 Android 活动需要两次后按
【发布时间】:2020-09-24 19:53:58
【问题描述】:

我已经设法在 Flutter 上实现了原生 Android Activity。代码如下所示:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class Communication extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return MyCommunication();
  }
}

class MyCommunication extends State<Communication> {
  static const platform = const MethodChannel("test_activity");
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
      body: FutureBuilder<Widget>(
          future: getNewActivity(),
          builder: (BuildContext context, AsyncSnapshot<Widget> snapshot) {
            if (snapshot.hasData)
              return snapshot.data;
            else
              return Container(child: CircularProgressIndicator());
          }),
    ));
  }

  Future<Widget> getNewActivity() async {
    try {
      return await platform.invokeMethod('startNewActivity');
    } on PlatformException catch (e) {
      print(e.message);
    }
  }
}

问题是,当我从本机活动中点击后退按钮以转到显示它的屏幕时,应用程序会显示容器,并在 snapshot.hasData 为 false 时返回一个圆形进度指示器。

我必须再次点击返回以关闭此屏幕并进入预期的演示视图。显然,我在代码中做的不对。我该如何解决这个问题?

【问题讨论】:

  • 连接状态有变化吗? connectionState → ConnectionState
  • connectionState 始终处于“等待”状态
  • 好的,您尝试以下答案了吗?
  • 是的,尝试覆盖 onBackPressed() 并在内部调用 finish() 但容器视图仍然出现在堆栈上:(

标签: android flutter dart native flutter-method-channel


【解决方案1】:

因为当您打开startNewActivity 时,现在堆栈中有2 个屏幕,所以onBackPressed 只删除了它的顶部,最后一个仍然存在 你应该使用finish() in startNewActivity in Native end 关闭FlutterPage

【讨论】:

  • 尝试覆盖 onBackPressed() 并在内部调用 finish() 但容器视图仍然出现在堆栈上:(
  • 不,不是在backpress上,当你打开新的Activity时用CLEAR_STACK调用finish,所以如果你在调用startNewActivity后不想要flutterscreen,它会关闭flutter页面
猜你喜欢
  • 2012-01-15
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
相关资源
最近更新 更多