Flutter验证器字符串需要Null感知,但编译器警告不需要



我有一个TextFormField:

TextFormField(
textAlign:
TextAlign.center,
autovalidateMode:
AutovalidateMode
.onUserInteraction,
onChanged: (value) {},
controller:
firstNameTextInputController,
validator: (input) =>                         //////////////////////////// HERE
(input!.length <
51 &&
input!.length >
1)
? null
: "Invalid First Name",                                    ////// End
style: TextStyle(
color: HexColor
.fromHex(
"#000000"),
),
decoration:
InputDecoration(
border: InputBorder
.none,
filled: true,
hintStyle: Theme.of(
context)
.textTheme
.subtitle1!
.merge(TextStyle(
color: HexColor
.fromHex(
"#707070"))),
hintText:
"*Enter First Name",
fillColor: HexColor
.fromHex(
"#ffffff"),
focusedBorder:
OutlineInputBorder(
borderSide: BorderSide(
color: HexColor
.fromHex(
"#707070"),
width: 5),
borderRadius:
BorderRadius
.circular(
5),
),
),
))),

这会发出警告:

警告:"!"不会有任何效果,因为接收器不能无效的(在[aathelite]上不必要的non_null_assertionlib\Pages\PlayerEditPageDefaultState.dart:427(

所以我去掉了感叹号,然后它变成了一个错误:

错误:无法无条件访问属性"length",因为接收器可以为"null"。(在[aathelite]lib\Pages\PlayerEditPageDefaultState.dart:425处取消选中use_of_nullable_value(

没有什么能取悦编译器的!使用Flutter 2.0进行此操作的正确方法是什么?

第一个警告在本文档中列出

!运算符的操作数不能为null时,分析器会生成此诊断。

这是因为您在同一&&运算符的两侧使用运算符!

...
(input!.length < 51 && input!.length > 1)
...

如果满足第一个条件,则第二个条件将对操作数input的非空值进行操作,从而产生上述警告。

要关闭它,只需移除右侧的!

(input!.length < 51 && input.length > 1)

相关内容

  • 没有找到相关文章

最新更新