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上单击ishowModalBottomSheet
,其中包含单选按钮。问题是,我无法立即看到所选单选按钮中的更改。ThanksI在searchDelegate中查找setState,只是意识到它与此无关。请把我与StatefulBuilder的对话结束,我很好,很抱歉给你带来了困惑