【问题标题】:The await expression can only be used in an async function in flutterawait 表达式只能在flutter中的异步函数中使用
【发布时间】:2021-10-04 08:00:49
【问题描述】:

我通过网络套接字传递数据,然后将此数据写入变量“weightSO”。一切正常。但我想添加一个解密功能。也就是说,数据来了,我解密它们,然后显示。但是“weightRT = await FlutterAesEcbPkcs5.decryptString (weightSO, key);”这行有问题。问题“await 表达式只能在异步函数中使用。尝试使用 'async' 或 'async *' 标记主体函数。” (加密后我已经显示了变量 weightRT 的数据)。而且我不能用这个错误解决这个问题,我会很感激你的帮助。

     socketData() async {
        Socket socket = await Socket.connect('192.168.0.1', 4005);
        print('connected');


        // send 0
        socket.add(utf8.encode('0'));
        socket.listen((List<int> event)  {

          setState(()  {
            weightSO = utf8.decode(event);
            
            // data decryption
            var key = '11111';
            weightRT = await  FlutterAesEcbPkcs5.decryptString(weightSO, key);

     });

          print(utf8.decode(event));
        });
        weightRT = await FlutterAesEcbPkcs5.decryptString(utf8.decode(event), key);
        socket.add(utf8.encode('0'));
        await Future.delayed(Duration(seconds: 300));
        socket.close();
      }

    }

我的小部件:

 @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            SizedBox(height: 35.0),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceAround,
              children: <Widget>[
                FlatButton(
                  disabledColor: Colors.pink,
                  textColor: Colors.blueGrey,
                  color: Colors.transparent,
                  child: Text('Weight', textScaleFactor: 2),
                  onPressed:
                  getWeight,
                  padding: EdgeInsets.fromLTRB(30.0, 10.0, 30, 10.0),
                ),
              ],
            ),

            Container(
              child: Text(('$weightSO' ), style: TextStyle(fontSize: 45.0, color: Colors.blueGrey)),
              padding: EdgeInsets.fromLTRB(0, 0.0, 0, 20.0),
            ),
           
          ]),

    );
  }

【问题讨论】:

  • 你也可以让你的监听异步,并可以把它放在等待,这样它就可以轻松地等待
  • @MuhammadArbazZafar 究竟如何??我只是一个初学者,不太明白我们的意思。我试过了,但没有帮助。 "setState() 异步 {"
  • 并删除你的setstate,你不需要放置setstate
  • @MuhammadArbazZafar 如果我删除它,我在小部件中显示的变量“weightSO”中的数据将不会更新
  • @MuhammadArbazZafar 我改变了我的问题,添加了一个显示数据的小部件

标签: flutter dart


【解决方案1】:

我不确定我是否理解你想要做什么,但如果你只是想更新你的 UI 以在你得到它时使用 weightSO 值并稍后在你的代码中的某个地方使用 weightRT 然后移动FlutterAesEcbPkcs5.decryptString() 外部的 seState 函数

【讨论】:

  • 我希望通过 Web 套接字接收的数据能够解密并在可变 weightRT 中实时显示(即在一个小部件中,我将只显示可变 weightRT)。在此之前,我只是简单地展示了实时加密的数据(在变量“weightSO”中)
  • 要在计算出 weightRT 的值后更新 UI 以使用 weightRT,只需在设置状态 weightSO = utf8.decode(event); // data decryption var key = '11111'; weightRT = await FlutterAesEcbPkcs5.decryptString(weightSO, key); setState(() { }); 之前执行此操作
  • 谢谢,但是“await”的错误我仍然有。在“weightRT = await FlutterAesEcbPkcs5.decryptString (weightSO, key);”这一行。问题“await 表达式只能在异步函数中使用。尝试使用 'async' 或 'async *' 标记主体函数。”
  • 我不确定我们是否可以做到这一点,但请尝试使监听函数异步socket.listen((List&lt;int&gt; event) async { ...
猜你喜欢
  • 2020-05-26
  • 2018-05-22
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 2020-11-30
  • 2014-11-04
相关资源
最近更新 更多