flutter 我想在InitState()中使用Provider,但遇到异常:对空值使用了空检查运算符

p3rjfoxz  于 2023-01-27  发布在  Flutter
关注(0)|答案(1)|浏览(158)

嗨我是新来的。
我正在使用Provider,并希望使用从中获得的数据作为textfield的初始值,因此我决定将控制器定义为一个可空值,并将文本放入initState()中。
下面是代码。

...
TextEditingController? _lastNameController;
TextEditingController? _firstNameController;

@override
void initState() {
  super.initState();
   WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
    MyProvider myProvider = Provider.of(context, listen : false);
    _lastNameController  = TextEditingController(text : myProvider.lastName);
    _firstNameController = TextEditingController(text : myProvider.firstName);
  });
}

@override
Widget build(BuildContext context) {
  return Row(
    children : [
      // this is an extension of TextField
      MyTextField(controller : _lastNameController!,  hintText : 'Last Name'),
      const Spacer(),
      MyTextField(controller : _firstNameController!, hintText : 'First Name')
...

我得到了一个异常Null check operator used on a null value
如果你有什么解决办法,请告诉我。
谢谢你,

yjghlzjz

yjghlzjz1#

WidgetsBinding.instance.addPostFrameCallback将在构建第一帧后调用。因此,最初MyTextField_lastNameController_firstNameController获取空值。
你能做到

MyTextField(controller : _lastNameController??TextEditingController(),

if(_lastNameController!=null) MyTextField(controller : _lastNameController,

相关问题