我是扑朔迷离的新手,现在我正在尝试根据我需要完成的餐厅应用来实现搜索委托栏。 Flutter's Search Support (The Boring Flutter Development Show, Ep. 10)中的默认搜索代表不够灵活,因为我的“购物车”是可滚动的BottomSheet,当我点击搜索图标时,我的搜索代表率先将我的购物车添加到了页面上,期望scrollabe底部表单可以滚动时整个屏幕,但工作表无法在搜索委托appBar上滚动。自4天以来一直对此感到困惑,我想实现空位搜索委托以访问build(BuildContext上下文)以将Stack放在那儿,但是我不怎么从头开始实现它(只知道{{3 }}。如果您还有其他方法可以解决我的问题,谢谢。这些是图像: 搜索栏和工作表在其初始位置Flutter's Search Support (The Boring Flutter Development Show, Ep. 10)
搜索卡在initial position
我需要appbar search delegate don't allow the sheet to sroll over
这是我现在对搜索滞后性有严格的要求的代码:
@override
List<Widget> buildActions(BuildContext context) {
// TODO: implement buildActions
return [
IconButton(
icon: Icon(Icons.clear),
onPressed:(){
query = "";
}
)
];
}
@override
Widget buildLeading(BuildContext context) {
// TODO: implement buildLeading
return IconButton(icon: AnimatedIcon(
icon:AnimatedIcons.menu_arrow,
progress: transitionAnimation,
),
onPressed:(){
close(context,null);
}
);
}
@override
Widget buildResults(BuildContext context) {
// TODO: implement buildResults
final suggestionList =query.isEmpty?food_recent:data.where((p)=> p.toString().contains(query)).toList();
return StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return Stack(
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
// SizedBox(height: 8),
AspectRatio(
aspectRatio: 0.8,
child: Opacity(
opacity: 1,
child:ListView.builder(
//padding: EdgeInsets.only(right: 32, top: 128),
//controller: scrollController,
itemCount: suggestionList?.length ?? 0, //20,
itemBuilder: (context, index) {
//Event event = events[index % 3];
Produit event = suggestionList[index];
return MyEventItemProduct(
event: event,
percentageCompleted:0.15,
);
},
),
),
)
//Tabs(),
//SizedBox(height: 8),
//SlidingCardsView(),
],
),
ScrollableExhibitionSheet(),//use this or ScrollableExhibitionSheet
],
);
});
}
@override
Widget buildSuggestions(BuildContext context) {
// TODO: implement buildSuggestions
//new Text(suggestionList[index]["colis"]["libelle_coli"]),
final suggestionList =query.isEmpty?food_recent:data.where((p)=> p.toString().contains(query)).toList();
return StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return Stack(
overflow: Overflow.clip,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
// SizedBox(height: 8),
AspectRatio(
aspectRatio: 0.8,
child: Opacity(
opacity: 1,
child:ListView.builder(
//padding: EdgeInsets.only(right: 32, top: 128),
//controller: scrollController,
itemCount: suggestionList?.length ?? 0, //20,
itemBuilder: (context, index) {
//Event event = events[index % 3];
Produit event = suggestionList[index];
return MyEventItemProduct(
event: event,
percentageCompleted:0.15,
);
},
),
),
)
//Tabs(),
//SizedBox(height: 8),
//SlidingCardsView(),
],
),
ScrollableExhibitionSheet(),//use this or ScrollableExhibitionSheet
],
);
});
}
和严格性,因为我不知道如何解决我的问题,我决定从srcatch实现它,以拥有构建方法小部件。这是我要尝试执行的操作,但是我不知道如何实现其他10种要求使其像默认appbar一样起作用的方法。
class Searchp extends StatelessWidget implements SearchDelegate <Produit>{
@override
String query;
@override
ThemeData appBarTheme(BuildContext context) {
// TODO: implement appBarTheme
return null;
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return null;
}
@override
List<Widget> buildActions(BuildContext context) {
// TODO: implement buildActions
return null;
}
@override
Widget buildLeading(BuildContext context) {
// TODO: implement buildLeading
return null;
}
@override
Widget buildResults(BuildContext context) {
// TODO: implement buildResults
return null;
}
@override
Widget buildSuggestions(BuildContext context) {
// TODO: implement buildSuggestions
return null;
}
@override
void close(BuildContext context, Produit result) {
// TODO: implement close
}
@override
// TODO: implement keyboardType
TextInputType get keyboardType => null;
@override
// TODO: implement searchFieldLabel
String get searchFieldLabel => null;
@override
void showResults(BuildContext context) {
// TODO: implement showResults
}
@override
void showSuggestions(BuildContext context) {
// TODO: implement showSuggestions
}
@override
// TODO: implement textInputAction
TextInputAction get textInputAction => null;
@override
// TODO: implement transitionAnimation
Animation<double> get transitionAnimation => null;
}