首页 > 解决方案 > 如何在 SearchDelegate 中使用 setState

问题描述

我想通过添加带有一些单选按钮和其他小部件的表单来在搜索结果中添加更多过滤器。文档状态Radio不保持状态,应该调用父级的setState onChange方法来重建小部件。调用后会显示表单showModalBottomSheet。看起来search.dart只有在查询更改时才会在内部调用 setState

假设没有这样的方法,我做了什么setState,我重新显示对话,Navigation.pop(context)然后调用showModalBottomSheet。单选按钮现在可以更新 onChanged 的​​值,但重新显示对话的过渡看起来很难看(每次值更改时都会滑动动画)。

是否可以在 searchDelegate 中使用 setState 以及如何使用?

标签: flutter

解决方案


@George 已经提供了解决方案,但这是使用 SearchDelegate 时的完整示例:

class DataSearch extends SearchDelegate<String> {
    bool _isItemSelected = true;

    //...rest of the @override methods

    @override
    Widget buildSuggestions(BuildContext context) {
        return StatefulBuilder(
            builder: (BuildContext context, StateSetter setState) {
                return CheckboxListTile(
                    title: const Text('Item'),
                    value: _isItemSelected,
                    onChanged: (bool newValue) {
                        setState(() {
                            _isItemSelected = newValue;
                        });
                    },
            );
    });
  }
}

推荐阅读