Flutter 错误:错误:字段'_prenom&x27;应初始化,因为其类型为';字符串';不';不允许空值

Flutter 错误:错误:字段'_prenom&x27;应初始化,因为其类型为';字符串';不';不允许空值,flutter,dart,Flutter,Dart,我有一个问题,我正在创建一个带有字符串的应用程序,当我想要声明一个变量并在之后初始化它时,我遇到了一个错误“error:Field'\u prenom'应该初始化,因为它的类型'String'不允许null”。我测试了很多东西,但任何东西都可以 import 'package:flutter/material.dart'; class LoginController extends StatefulWidget { LoginControllerState createState() =>

我有一个问题,我正在创建一个带有字符串的应用程序,当我想要声明一个变量并在之后初始化它时,我遇到了一个错误“error:Field'\u prenom'应该初始化,因为它的类型'String'不允许null”。我测试了很多东西,但任何东西都可以

import 'package:flutter/material.dart';

class LoginController extends StatefulWidget {
LoginControllerState createState() => new LoginControllerState();
}

class LoginControllerState extends State<LoginController> {

bool _log = true;
String _mail;
String _password;
String _prenom;
String _nom;

@override
Widget build(BuildContext context) {
// TODO: implement build
return new Scaffold(
  appBar: new AppBar(title: new Text("Authentification"),),
  body: new SingleChildScrollView(
    child: new Column(
      children: <Widget>[
        new Container(
          margin: EdgeInsets.all(20.0),
          width: MediaQuery.of(context).size.width - 40,
          height: MediaQuery.of(context).size.height / 2,
          child: new Card(
            elevation: 8.5,
            child: new Column(
              children: cardElements(),
            ),
          ),
        )
      ],
    ),
  ),
);
}

List<Widget> cardElements(){
List<Widget> widgets = [];

widgets.add(
  new TextField(
    decoration: new InputDecoration(hintText: "Entrez votre adresse mail"),
    onChanged: (string) {
      setState(() {
        _mail = string;
      });
    },
  )
);
widgets.add(
    new TextField(
      decoration: new InputDecoration(hintText: "Entrez votre mot de passe"),
      onChanged: (string) {
        setState(() {
          _password = string;
        });
      },
    )
);

if(_log == false ) {
  widgets.add(
      new TextField(
        decoration: new InputDecoration(hintText: "Entrez votre prenom"),
        onChanged: (string) {
          setState(() {
            _prenom = string;
          });
        },
      )
  );
  widgets.add(
      new TextField(
        decoration: new InputDecoration(hintText: "Entrez votre nom"),
        onChanged: (string) {
          setState(() {
            _nom = string;
          });
        },
      )
  );
}

widgets.add(
  new TextButton(
      onPressed: () {
        setState(() {
          _log = !_log;
        });
      },
      child: new Text(
          (_log == true)
              ? "Pour créer un compte, appuyez ici"
              : "Vous avez déjà un compte ? Appuyez ici"
      )
  )
);
return widgets;
}

}
导入“包装:颤振/材料.省道”;
类LoginController扩展StatefulWidget{
LoginControllerState createState()=>新建LoginControllerState();
}
类LoginControllerState扩展状态{
bool _log=true;
字符串-邮件;
字符串\u密码;
字符串前缀;
字符串名称;
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
归还新脚手架(
appBar:new appBar(标题:新文本(“身份验证”),),
正文:新的SingleChildScrollView(
子:新列(
儿童:[
新容器(
裕度:所有边缘集(20.0),
宽度:MediaQuery.of(context).size.width-40,
高度:MediaQuery.of(context).size.height/2,
孩子:新卡(
标高:8.5,
子:新列(
子项:cardElements(),
),
),
)
],
),
),
);
}
列表元素(){
列表小部件=[];
widgets.add(
新文本字段(
装饰:新的输入装饰(hintText:“Entrez votre地址邮件”),
onChanged:(字符串){
设置状态(){
_邮件=字符串;
});
},
)
);
widgets.add(
新文本字段(
装饰:新的输入装饰(hintText:“Entrez votre mot de passe”),
onChanged:(字符串){
设置状态(){
_密码=字符串;
});
},
)
);
如果(_log==false){
widgets.add(
新文本字段(
装饰:新输入装饰(hintText:“Entrez votre prenom”),
onChanged:(字符串){
设置状态(){
_prenom=字符串;
});
},
)
);
widgets.add(
新文本字段(
装饰:新的输入装饰(hintText:“Entrez votre nom”),
onChanged:(字符串){
设置状态(){
_nom=字符串;
});
},
)
);
}
widgets.add(
新文本按钮(
已按下:(){
设置状态(){
_log=!\u log;
});
},
儿童:新文本(
(_log==true)
?“将混凝土浇筑到混凝土中,并在混凝土中浇筑”
:“你有什么事吗?”
)
)
);
返回窗口小部件;
}
}
谢谢你的回答…

Dart是。必须始终指定一个值,或使用
将其显式标记为可为空

String _prenom = "Something";


谢谢,使用
可以吗?
但我不知道为什么,但它会标记字段“\u prenom”的值没有使用。但这不是一个问题,我想你会的!
String? _prenom;