首页 > 解决方案 > Null-Safety:根据闭包上下文的要求,返回类型“Null”不是“Widget”

问题描述

迁移到 Flutter null-safety 后,我遇到了一些问题。我有一个数据类型bool _isLoading = false;

在我的代码中迁移到 null 安全后出现错误: 返回类型“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(),
              ),
            );
          },

标签: flutterdartflutter-dependenciesdart-null-safetyflutter-typeahead

解决方案


loadingBuilderWidget如果您希望此行if (!_isLoading) return null;返回空格,则应返回 a只需执行以下操作if (!_isLoading) return SizedBox();


推荐阅读