как создать класс Searchp расширяет StatelessWidget реализует SearchDelegate с нуля - PullRequest
0 голосов
/ 01 мая 2020

Я новичок ie во флаттере, и теперь я пытаюсь реализовать панель делегирования поиска в соответствии с тем, что мне нужно для завершения sh приложения ресторана. Поисковый делегат по умолчанию из Служба поддержки поиска Flutter (The Boring Flutter Development Show, Ep. 10) недостаточно гибок, потому что моя «корзина покупок» представляет собой прокручиваемый BottomSheet, и когда я нажимаю на значок поиска, мой делегат поиска получает лидерство я добавил свою корзину на страницу, ожидая, что нижняя таблица прокрутки займет весь экран при прокрутке, но лист не может прокрутить панель приложения делегата поиска. Застряв в этом 4 дня, я думал реализовать делегат поиска дыр для доступа к сборке (контекст BuildContext), чтобы поместить туда стек, но я не знаю, как реализовать его с нуля (знаю только поиск флаттера из Поисковая поддержка Flutter (The Boring Flutter Development Show, Ep. 10) ). Если у вас есть другой способ решить мою проблему, спасибо. Это изображения: панель поиска и лист в начальной позиции начальная позиция

поиск застрял Делегат поиска панели приложения не позволяет листу прокручиваться

что мне нужно лист

это код, который у меня сейчас есть для поиска:

    @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;

    }

1 Ответ

0 голосов
/ 03 мая 2020

наконец, расширение от StatelessWidget не понадобилось. переопределить класс _SearchPageState из src / material / search.dart решил мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...