Null 安全:返回类型“Null”不是“Widget”,这是闭包上下文所要求的

问题描述 投票:0回答:2

迁移到 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(),
              ),
            );
          },
flutter dart flutter-dependencies dart-null-safety flutter-typeahead
2个回答
2
投票
如果您希望此行

loadingBuilder

 返回空格,
Widget
应该返回
if (!_isLoading) return null;
,只需执行类似以下操作
if (!_isLoading) return SizedBox();


0
投票

我遇到了类似的问题,并且设法解决了它,但是,返回 SizedBox() 使用 StreamBuilder 从 firestore 获取数据,当从 firestore 选择要显示的几个项目时,它总是显示小部件应该在的空白空间。尝试过 SizedBox.shrink()、Container() 等,但没有成功,当我应用时返回 null;我收到错误消息,指出返回类型“Null”不是“Widget”,这是闭包上下文所要求的。我该怎么办?

© www.soinside.com 2019 - 2024. All rights reserved.