flutter - 在 Flutter 中如何在 SearchDelegate buildResults 中显示对话框
问题描述
我正在尝试使用 Flutter SearchDelegate。我能够buildResults
在容器中显示。我试图在 Dialog 或 BottomSheet 中显示结果。的返回类型buildResults
是 Widget 和showDialog
或showBottomSheet
具有返回类型Future<dynamic>
.
是否可以在 Dialog 或 BottomSheet 中显示 buildResults,我该怎么做?
编辑
为了清楚起见,我添加了代码。
class ProductSearch extends SearchDelegate<String> {
Product product;
List<Product> productsList = ProductData.productList;
List<Product> recentProducts =
ProductData.productList; //Find a way to keep recently searched
@override
List<Widget> buildActions(BuildContext context) {
return [
IconButton(
icon: Icon(Icons.clear),
onPressed: () {
query = "";
})
];
}
@override
Widget buildLeading(BuildContext context) {
return IconButton(
icon: AnimatedIcon(
icon: AnimatedIcons.menu_arrow, progress: transitionAnimation),
onPressed: () {
close(context, null);
});
}
@override
Widget buildResults(BuildContext context) {
return Container(
child: Text(product.productName),
);
/*
* I would like to return a showDialog or showBottomSheet
*/
}
@override
Widget buildSuggestions(BuildContext context) {
final suggestionList = query.isEmpty
? recentProducts
: productsList
.where((element) =>
element.productName.toUpperCase().contains(query.toUpperCase()))
.toList();
return ListView.builder(
itemBuilder: (context, index) => Container(
child: Card(
elevation: 8.0,
margin: EdgeInsets.symmetric(horizontal: 10.0, vertical: 6.0),
child: Container(
decoration: BoxDecoration(color: Colors.grey.shade100),
child: ListTile(
contentPadding:
EdgeInsets.symmetric(horizontal: 20.0, vertical: 10.0),
onTap: () {
product = suggestionList[index];
showResults(context);
},
title: Text(
suggestionList[index].productName,
style: TextStyle(fontWeight: FontWeight.w500),
),
leading: Container(
padding: EdgeInsets.only(right: 5.0),
child: Icon(
Icons.shopping_basket,
),
),
subtitle: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Align(
alignment: Alignment.topLeft,
child: Text(
"US\$ " + suggestionList[index].price.toString(),
style: TextStyle(
color: Constants.primaryColor,
fontSize: 12,
),
),
),
Align(
alignment: Alignment.topRight,
child: Text(
suggestionList[index].stockLevel.toString() +
" Items in Stock",
style: TextStyle(
color: Constants.accentColor,
fontSize: 12,
),
),
),
],
),
],
),
),
),
),
),
itemCount: suggestionList.length,
);
}
}
解决方案
推荐阅读
- visual-studio-code - VSCode 文件夹不按字母顺序排序
- java - 如何使用 REST Assured 发送带有格式错误的查询参数或 URL 中的路径的请求?
- javascript - HTML表格一分为二,并排显示在同一页面上
- google-cloud-platform - fbprophet 未能在谷歌云功能中构建轮子
- javascript - 将“粘贴”功能模拟到输入文本中
- c# - 你如何与.net中的另一个项目链接
- docker - 使用 WSL 2 进行 GPU 加速
- python - 在 Python 中使用 shuffle 函数后列表索引超出范围
- angular - 带有数字和字符串连接的 Angular *ngIf 表达式
- android - 如何一键设置不同时间的闹钟?