繁体   English   中英

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

[英]how to create class Searchp extends StatelessWidget implements SearchDelegate <an_object> from scratch

我是 flutter 的新手,现在我正在尝试根据完成餐厅应用程序所需的内容来实现搜索委托栏。 Flutter 的搜索支持(The Boring Flutter Development Show,Ep. 10)的默认搜索代理不够灵活,因为我的“购物车”是一个可滚动的 BottomSheet,当我点击搜索图标时,我的搜索代理带头我添加了我的购物车在期望滚动底部表的页面上滚动时占据整个屏幕,但工作表无法滚动搜索委托 appBar。 自 4 天以来一直坚持这一点,我想实现孔搜索委托以访问构建(BuildContext 上下文)以将堆栈放在那里,但我不知道如何从头开始实现它(只知道来自Flutter 的搜索支持的 flutter 搜索(无聊的 Flutter 开发展,第 10 集) )。 如果您有其他方法可以解决我的问题,谢谢。 这些是图像:搜索栏和工作表初始 position初始 position

搜索卡住的应用程序栏搜索委托不允许工作表滚动

我需要什么

这是我现在用于搜索代理的代码:

    @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 种其他方法。

    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 不需要从 StatelessWidget 扩展。 src/material/search.dart覆盖 _SearchPageState class 解决了我的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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