使用setState()方法从本机方法调用更新Flutter UI

时间:2019-08-14 13:55:16

标签: android asynchronous flutter dart

我正在使用这样的平台渠道从Android本机代码中调用一种方法:

2019.2

在我的Flutter类中,我通过使用回调处理相应的方法调用 MethodChannel(flutterView, CHANNEL).invokeMethod(METHOD_NAME, null)

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

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

1 个答案:

答案 0 :(得分:1)

您可以将任何方法注册为方法调用回调,然后从那里调用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));
  }
}