You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter报错:期望Widget类型却得到Null的问题求助

问题解决:Flutter运行报错Expected a value of type 'Widget', but got one of type 'Null'

核心原因

你的Textinput类中renderTextInput方法返回类型是void,方法内部创建了Container组件但没有返回它,导致调用该方法时实际拿到的是null,而Flutter的Widget树要求必须传入有效的Widget,因此触发报错。

解决方案

1. 修复renderTextInput方法的返回值

修改方法返回类型为Widget,并返回创建好的Container:

class Textinput {
  Widget renderTextInput(TextInputData textInputData) {
    return Container(
      child: TextFormField(
        decoration: InputDecoration(labelText: textInputData.getText()),
        keyboardType: textInputData.getType(),
        style: textInputData.getStyle(),
      ),
      width: 400.0,
    );
  }
}

2. (可选)优化TextInputData的写法(符合Dart规范)

Dart内置了getter/setter语法,比手动写getXxx()/setXxx()更简洁规范:

class TextInputData {
  String? _text;
  TextInputType? _type;
  TextStyle? _style;

  // 简化构造函数写法
  TextInputData(this._text, this._type, this._style);

  // Dart风格的getter和setter
  String? get text => _text;
  set text(String? value) => _text = value;

  TextInputType? get type => _type;
  set type(TextInputType? value) => _type = value;

  TextStyle? get style => _style;
  set style(TextStyle? value) => _style = value;
}

修改后,组件内的调用也可以更简洁:

TextFormField(
  decoration: InputDecoration(labelText: textInputData.text),
  keyboardType: textInputData.type,
  style: textInputData.style,
)

3. 确保调用位置正确

在AuthorizationScreen的build方法中正确使用该组件,确保它被纳入Widget树:

class AuthorizationScreen extends StatelessWidget {
  final Textinput textInput = Textinput();
  // 确保_sizeTextBlack已正确定义
  final TextStyle _sizeTextBlack = TextStyle(color: Colors.black, fontSize: 16);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('授权')),
      body: Center(
        child: textInput.renderTextInput(
          TextInputData("почта", TextInputType.emailAddress, _sizeTextBlack)
        ),
      ),
    );
  }
}

内容的提问来源于stack exchange,提问作者user20855656

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:50:32