Flutter 如何在SearchDelegate中使用setState

Flutter 如何在SearchDelegate中使用setState,flutter,Flutter,我想通过添加带有一些单选按钮和其他小部件的表单,在搜索结果上添加更多过滤器。文档声明,Radio不保持状态,应该调用父级的setStateonChange方法来重建小部件。调用showModalBottomSheet后将显示表单。 查看search.dart似乎只有在查询更改时才在内部调用setState 我所做的 假设没有这样的方法,setState,我重新显示对话,调用Navigation.pop(context),然后调用showModalBottomSheet。单选按钮现在可以更新更改后

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

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


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

您需要使用的是
StatefulBuilder
,由
showModalBottomSheet
的生成器返回

StatefulBuilder
提供了
setState
方法来重建自己的子树

e、 g

int选中;
showModalBottomSheet(上下文:上下文,生成器:()=>
StatefulBuilder(生成器:(modalContext,modalSetState)=>
栏(儿童:[
文本(“选择单选按钮”),
放射科医师(
价值:1,
groupValue:已选择,
一旦更改:(val)=>modalSetState(()=>selected=val),
标题:文本(“一”)
),
放射科医师(
价值:2,
groupValue:已选择,
一旦更改:(val)=>modalSetState(()=>selected=val),
标题:文本(“二”)
),
])
)
).完成时(){
打印(“选定:$Selected”);
});

在我的示例中,模态内容的
setState
声明为
modalSetState
builder参数。

@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;
                        });
                    },
            );
    });
  }
}
类数据搜索扩展了SearchDelegate{
bool _isItemSelected=true;
//…其余的@override方法
@凌驾
小部件构建建议(构建上下文){
返回状态生成器(
生成器:(BuildContext上下文,StateSetter setState){
返回CheckboxListTile(
标题:常量文本(“项”),
值:\ isItemSelected,
一旦更改:(bool newValue){
设置状态(){
_isItemSelected=newValue;
});
},
);
});
}
}

Wow我错过了这个
StatefulBuilder
widget,谢谢@George!!我在Scaffold中用FAB-on-buildResults包装ListView。在FAB上单击i
showModalBottomSheet
,其中包含单选按钮。问题是,我无法立即看到所选单选按钮中的更改。ThanksI在searchDelegate中查找setState,只是意识到它与此无关。请把我与StatefulBuilder的对话结束,我很好,很抱歉给你带来了困惑