加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

dart – Flutter – 是否可以在不使用FutureBuilder的情况下从Fu

发布时间:2020-12-14 14:49:07 所属栏目:百科 来源:网络整理
导读:我正在从TextField读取用户提供的输入(在本例中为邮政编码),我需要检查数据库的有效性.但是,我需要在提交按钮(在本例中为RaisedButton)onPressed :(){} lambda函数内部进行异步数据库查询.在大多数编程语言中,这是一项相当简单和简单的任务.然而,我在Flutter
我正在从TextField读取用户提供的输入(在本例中为邮政编码),我需要检查数据库的有效性.但是,我需要在提交按钮(在本例中为RaisedButton)onPressed :(){} lambda函数内部进行异步数据库查询.在大多数编程语言中,这是一项相当简单和简单的任务.然而,我在Flutter中遇到的问题是,从异步数据库查询返回的Future对象只能由FutureBuilder对象使用,而FutureBuilder对象又只返回Widget对象.我只需要返回一个String,然后我可以使用它通过MaterialPageRoute对象传递给新路径,或者在不更改路径的情况下向用户显示错误. Flutter有没有办法做到这一点?返回Widget对我来说没用,因为我不想创建一个新的Widget来显示.我正在使用Flutter 0.3.2和Dart 2.0.0

作为我需要调用数据库查询的简化示例:

@override
Widget build(Buildcontext context) {
    return new Column(
        mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
            new Container(
                padding: const EdgeInsets.all(16.0),child: new TextField(
                    keyboardType: TextInputType.number,controller: _controller,decoration: new InputDecoration(
                    hintText: 'Zip Code',),onSubmitted: (string) {
                  return string;
                },new RaisedButton(
                onPressed: () {
                        // use regex to test against user input
                        if (_controller.text != null && _controller.text.isNotEmpty) {
                            RegExp zipCodeRegExp = new RegExp(r"^(d{5})$");

                            // if the user input validates...
                            if (zipCodeRegExp.hasMatch(_controller.text)) {
                            zipCode = _controller.text;

                           // need to perform database query here and return a string,not a Widget

                            } else {
                               // an else condition here
                            }
                        } else {
                           // an else condition here
                        }
                    }
                }
            ),],);
}

也许我不是在跟随Flutter的“口头禅”?我感谢您对此的考虑和意见.

解决方法

FutureBuilder只是一个方便的助手,可以在Future完成时重建widget树.

您可以使用

funcThatReturnsFuture().then((result) {
  print(result);
  setState(() {
    someVal = result;
  })
})

要么

Future funcThatMakesAsyncCall() async {
  var result = funcThatReturnsFuture();
  print(result);  
  setState(() {
    someVal = result;
  })
}

主要限制是,如果没有Future,则无法将值直接返回给调用者,因为无法从异步执行返回到同步执行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读