[英]how to create class Searchp extends StatelessWidget implements SearchDelegate <an_object> from scratch
I am a newbie at flutter and now I am trying to implement a search delegate bar according to what I need to finish a restaurant app.我是 flutter 的新手,现在我正在尝试根据完成餐厅应用程序所需的内容来实现搜索委托栏。 The default search delegate from Flutter's Search Support (The Boring Flutter Development Show, Ep. 10) is not flexible enough because my "shopping cart" is a Scrollable BottomSheet and when I tap on search icon my search delegate take the lead I added my cart on the page expecting the scrollabe Bottomsheet take the entire screen when scrolling that but the sheet can't scroll over the search delegate appBar. Flutter 的搜索支持(The Boring Flutter Development Show,Ep. 10)的默认搜索代理不够灵活,因为我的“购物车”是一个可滚动的 BottomSheet,当我点击搜索图标时,我的搜索代理带头我添加了我的购物车在期望滚动底部表的页面上滚动时占据整个屏幕,但工作表无法滚动搜索委托 appBar。 Stucked on this since 4 days, I thinking to implement the hole search delegate to access the build(BuildContext context) to put a Stack over there but I don't how to implement it from scratch (only know the flutter search from Flutter's Search Support (The Boring Flutter Development Show, Ep. 10) ).自 4 天以来一直坚持这一点,我想实现孔搜索委托以访问构建(BuildContext 上下文)以将堆栈放在那里,但我不知道如何从头开始实现它(只知道来自Flutter 的搜索支持的 flutter 搜索(无聊的 Flutter 开发展,第 10 集) )。 If you have other way to solve my issue thanks.如果您有其他方法可以解决我的问题,谢谢。 These are images: search bar and the sheet at its initial position initial position这些是图像:搜索栏和工作表初始 position初始 position
search stucked appbar search delegate don't allow the sheet to sroll over搜索卡住的应用程序栏搜索委托不允许工作表滚动
this is the code I have rigth now for the search delagate:这是我现在用于搜索代理的代码:
@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
],
);
});
}
and rigth because I don't know how to solve my problem I decide to implement it from srcatch to have the build method widget.因为我不知道如何解决我的问题,所以我决定从 srcatch 实现它以拥有构建方法小部件。 this is what I am trying to do but I don't know how to implement the 10 other methods asked to made it work like the default appbar.这就是我想要做的,但我不知道如何实现要求使其像默认应用栏一样工作的 10 种其他方法。
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;
}
finally extends from StatelessWidget was not needed. finally 不需要从 StatelessWidget 扩展。 override the _SearchPageState class from src/material/search.dart solved my problem.从src/material/search.dart覆盖 _SearchPageState class 解决了我的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.