【问题标题】:Flutter update UI from native method call by using setState() methodFlutter 使用 setState() 方法从本地方法调用更新 UI
【发布时间】:2019-12-21 02:20:29
【问题描述】:

我正在使用这样的平台通道从原生 Android 代码调用方法:

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

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

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

你们中是否有人遇到过这个问题并且可能有解决方案?如果无法通过此回调更新 UI,那就太荒谬了。

【问题讨论】:

    标签: android asynchronous flutter dart


    【解决方案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));
      }
    }
    
    

    【讨论】:

      猜你喜欢
      • 2020-12-17
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多