首页 > 解决方案 > 元素类型'Future' 无法分配给列表类型 'Widget'。解决此错误的给定解决方案均不适合我

问题描述

我尝试了几个给定的解决方案,但对我没有任何效果
//这基本上是布局屏幕的结构 @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(), body: Container( alignment: Alignment.center, padding :const EdgeInsets.only(顶部:30,底部:60,),子:列(子:[ buildTitle(),SizedBox(高度:50,),buildForm(),Spacer(),buildBottom(),],) , ), ); }

//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'),
                  ),
                ],
              ),
            );

标签: flutterwidgetfuture

解决方案


尝试使用FutureBuilder<T>

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...*/);
      }
    }
  )
}

推荐阅读