迁移到 flutter null-safety 后,我遇到了一些问题。我有一个数据类型
bool _isLoading = false;
在代码中迁移到空安全后,我收到错误: 返回类型“Null”不是“Widget”,这是闭包上下文所要求的
class _PlacesState extends State<_Places> {
bool _isLoading = false;
final TextEditingController _typeAheadController = TextEditingController();
@override
Widget build(BuildContext context) {
return TypeAheadFormField<Map<String, dynamic>>(
key: widget.formFieldKey,
textFieldConfiguration: TextFieldConfiguration(
autofocus: true,
decoration: InputDecoration(
hintText: 'Place',
contentPadding: EdgeInsets.only(left: 8, right: 8),
border: InputBorder.none,
),
controller: _typeAheadController,
),
suggestionsCallback: (String? pattern) async {
final s = pattern?.trim();
if (s == null || s == '' || s.length < 4) return null;
_isLoading = true;
try {
await Future.delayed(Duration(seconds: 1));
final data = await (_request(s) as FutureOr<Map<String, dynamic>>);
final result = data['hits'] as List;
return result.cast<Map<String, dynamic>>();
} finally {
_isLoading = false;
}
} as FutureOr<Iterable<Map<String, dynamic>>> Function(String),
loadingBuilder: (BuildContext context) {
if (!_isLoading) return null;
return Align(
child: Padding(
padding: EdgeInsets.symmetric(vertical: 8),
child: ExtendedProgressIndicator(),
),
);
},
这是我收到错误的地方
if (!_isLoading) return null;
as FutureOr<Iterable<Map<String, dynamic>>> Function(String),
loadingBuilder: (BuildContext context) {
if (!_isLoading) return null;
return Align(
child: Padding(
padding: EdgeInsets.symmetric(vertical: 8),
child: ExtendedProgressIndicator(),
),
);
},
loadingBuilder
返回空格,
Widget
应该返回 if (!_isLoading) return null;
,只需执行类似以下操作 if (!_isLoading) return SizedBox();
我遇到了类似的问题,并且设法解决了它,但是,返回 SizedBox() 使用 StreamBuilder 从 firestore 获取数据,当从 firestore 选择要显示的几个项目时,它总是显示小部件应该在的空白空间。尝试过 SizedBox.shrink()、Container() 等,但没有成功,当我应用时返回 null;我收到错误消息,指出返回类型“Null”不是“Widget”,这是闭包上下文所要求的。我该怎么办?