我正在使用这样的平台渠道从Android本机代码中调用一种方法:
2019.2
在我的Flutter类中,我通过使用回调处理相应的方法调用
MethodChannel(flutterView, CHANNEL).invokeMethod(METHOD_NAME, null)
platform.setMethodCallHandler(_handleNativeMethodCall)
要求回调函数返回setMethodCallHandler()
。但是问题来了,我想在本机代码调用回调时更新我的UI,所以我想使用Future
方法。现在的问题是setState()
不允许在异步函数中调用,例如返回setState()
的函数,因此不在本机方法调用的回调中。
你们中的任何人都遇到过这个问题,并且可能对此有解决方案吗?如果无法通过此回调更新UI,那将是荒谬的。
答案 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));
}
}