当前位置: 首页 > 知识库问答 >
问题:

元素类型“future”不能分配给列表类型“widget”。解决此错误的给定解决方案对我都不起作用

董阳平
2023-03-14

我尝试了给出的几个解决方案,但对我都不起作用
//这个bausic laysout screen@override小部件的结构build(BuildContext context){return Scaffold(AppBar:AppBar(),body:Container(对齐:alignment.center,padding:const edgeinsets.only(top:30,bottom:60,),child:Column(children:[buildTitle(),SizedBox(height:50,),buildForm(),

//problem is with buildForm
Future<Widget> buildForm() async {
    final valid = await usernameCheck(this.username);

     return Container(
      width: 330,
      decoration: BoxDecoration(
    color: Colors.white,
    borderRadius: BorderRadius.circular(8),
      ),
      child: Form(
    key: _userNameformKey,
    child: TextFormField(
      textAlign: TextAlign.center,
      onChanged: (value) {
        _userNameformKey.currentState.validate();
      },
      validator: (value) {
        if (value.isEmpty ) {
          setState(() {
            onNextButtonClick = null;

          });
        }
        else if(!valid){
          setState(() {
            //user.user.username=value;

            onNextButtonClick = null;
            showDialog(
              context: context,
              builder: (context) =>
              new AlertDialog(
                title: new Text('Status'),
                content: Text(
                    'Username already taken'),
                actions: <Widget>[
                  new ElevatedButton(
                    onPressed: () {
                      Navigator.of(context, rootNavigator: true)
                          .pop(); // dismisses only the dialog and returns nothing
                    },
                    child: new Text('OK'),
                  ),
                ],
              ),
            );

共有1个答案

壤驷阳波
2023-03-14

尝试使用FutureBuilder

dart prettyprint-override">Widget build(_) {
  return FutureBuilder<bool>(
    future: usernameCheck(this.username),
    builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
      if(!snapshot.hasData) { // not loaded
        return const CircularProgressIndicator();
      } else if(snapshot.hasError) { // some error
        return const ErrorWidget(); // create this class
      } else { // loaded
        bool valid = snapshot.data;
        return Container(/*...details omitted for conciseness...*/);
      }
    }
  )
}
 类似资料:
  • 我尝试了几种解决方案,但都不管用

  • 我有一个FirebaseActions类,它为我做注册和登录工作。我在其中添加了一个getCurrentUser方法。我从我的主屏幕小部件调用这个函数。我需要将返回值(type= FirebaseUser)放入主屏幕的一个变量中,以访问loggedInUser.email。我的问题;有什么方法可以将FirebaseUser类型数据转换成Future类型变量?当我在HomeScreen而不是Fire

  • 我试图制作一个简单的饼图,但在工厂构造函数中使用未来的数据时遇到了问题。错误信息显示: 预期有2个位置参数,但找到1个。 参数类型“未来” 以下是代码: 编辑:我能够使用Future Builder修复此问题。我的代码更改:

  • 我有一个打字错误: 类型“(element:Conversation)=>void”的参数不可赋给类型“(value:Conversations,index:number,obj:Conversation[])=>boolean”的参数。不能将“void”类型赋给“boolean”类型。 这个错误是什么意思?提前谢谢你。

  • 这是我的水果 现在我正在导入另一个typescript文件中的fruit.ts。这是我的 当我做的时候 我得到一个错误: 类型“string”不能分配给类型“orange”“apple”“banana”“ 如何将字符串赋给自定义类型fruit的变量?

  • 将以下代码转换为typescript时出错。 错误TS2339:属性样式在元素类型上不存在。 当我为如下相同的值分配所需值时 那么误差在元素上,那就是 错误TS2322:类型“Element | null”不可分配给类型“{style:any;}”。类型“null”不可分配给类型“{style:any;}”。