我正在使用平台 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/