android - Flutter 使用 setState() 方法从 native 方法调用更新 UI

标签 android asynchronous flutter dart

我正在使用平台 channel 从 native Android 代码调用一个方法,如下所示:

MethodChannel(flutterView, CHANNEL).invokeMethod(METHOD_NAME, null)

在我的 Flutter 类中,我使用回调处理相应的方法调用 platform.setMethodCallHandler(_handleNativeMethodCall)

setMethodCallHandler() 要求回调返回一个Future。但是问题来了,我想在 native 代码调用回调时更新我的​​ UI,所以我想使用 setState() 方法。现在的问题是,setState() 不允许在异步函数中调用,例如返回 Future 的函数,因此不在 native 方法调用的回调中。

你们中有人遇到过这个问题并且可能找到解决方案吗?如果无法从此回调更新 UI,那将是荒谬的。

最佳答案

您可以将任何方法注册为方法调用回调并从那里调用setState


class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _MyAppState();
  }
}

class _MyAppState extends State<MyApp> {
  String myVariable;

  @override
  initState() {
    super.initState();
    myVariable = 'LOADING';
    platform.setMethodCallHandler(_handleNativeMethodCall);
  }

  Future<dynamic> _handleNativeMethodCall(MethodCall methodCall) async {
    // do some processing
    setState(() {
      myVariable = methodCall.method;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(child: Text(myVariable));
  }
}

关于android - Flutter 使用 setState() 方法从 native 方法调用更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57496161/

相关文章:

android - 如何包含谷歌地图的交通图层?

c++ - 我对C++ boost::asio和std::async有疑问

dart - 单击父选项卡后,我想创建动态子选项卡和子 TabBarViews

flutter - Dart 中 getter 和常规方法的区别

android - 如何在android studio中设置编译库。 Lombok

android - Fedora 14 上使用 Eclipse 时的 Android SDK 问题

c++ - 如何在 C++ 中异步处理 native 套接字上的 https 请求响应

javascript - 将 JavaScript 计时器函数转换为使用异步调用

flutter - SVG 在容器中失去曲率

Android:如何将对象传递给新的启动 Activity