简体   繁体   English

如何创建 class Searchp 扩展 StatelessWidget 实现 SearchDelegate<an_object> 从头开始</an_object>

[英]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搜索卡住的应用程序栏搜索委托不允许工作表滚动

what I need the sheet我需要什么

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM