簡體   English   中英

使用setState()方法從本機方法調用更新Flutter UI

[英]Flutter update UI from native method call by using setState() method

我正在使用類似這樣的平台通道從本地Android代碼中調用一種方法:

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

在我的Flutter類中,我通過使用回調platform.setMethodCallHandler(_handleNativeMethodCall)來處理相應的方法調用platform.setMethodCallHandler(_handleNativeMethodCall)

setMethodCallHandler()需要回調以返回Future 但是問題來了,我想在本機代碼調用回調時更新我的​​UI,所以我想使用setState()方法。 現在的問題是, setState()不允許在異步函數中調用,例如,一個返回Future的函數,因此不能在本機方法調用的回調中調用。

你們中有人遇到這個問題並且可能對此有解決方案嗎? 如果無法通過此回調更新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));
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM