如何创建类Searchp扩展StatelessWidget从零开始实现SearchDelegate <an_object>

时间:2020-05-01 10:45:38

标签: android flutter dart

我是扑朔迷离的新手,现在我正在尝试根据我需要完成的餐厅应用来实现搜索委托栏。 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;

    }

1 个答案:

答案 0 :(得分:0)

最终不需要StatelessWidget的扩展。 覆盖src/material/search.dart中的_SearchPageState类解决了我的问题。