Флаттер-шоу Поиск с клавиатуры - PullRequest
0 голосов
/ 12 июля 2020

Я новичок во Flutter и Dart, поэтому я пытаюсь создать простое приложение для поиска с запросами на основе слова, введенного в строке поиска Flutters showSearch. Я понимаю список, созданный для отображения предложений пользователю, и нажатие на это предложение активирует виджет buildresults. Однако я хочу включить кнопку поиска на клавиатуре, чтобы просто искать введенное слово, а не нажимать на ограниченный список предложений. Простая android клавиатура

При обычном нажатии кнопки клавиатура закрывается, результаты сборки не активируются. Пока вам нужно щелкнуть предложенный вариант списка. Есть ли способ включить кнопку поиска на клавиатуре для поиска введенного текста? или ограничен ли пользователь предложенными опциями списка? Я перечислю своего делегата showSearch ниже:

class StockDelegate extends SearchDelegate<String> {
  final stocks = [
    "IBM",
    "NKLAW",
    "DKNGZ",
    "DRD",
    "PRTS",
    "TSLA",
    "KIRK",
    "VBIV"
  ];
  final suggested = ["IBM", "TSLA", "BNTX"];

  @override
  // TODO: implement textInputAction

  // TODO: implement textInputAction
  TextInputAction get textInputAction => super.textInputAction;

  @override
  List<Widget> buildActions(BuildContext context) {
    //actions for app bar
    StockProvider _stockProvider =
        Provider.of<StockProvider>(context, listen: true);
    return [
      IconButton(
          icon: Icon(Icons.clear),
          onPressed: () {
            query = '';
          }),
    ];
  }

  @override
  Widget buildLeading(BuildContext context) {
    //Leading icon on the left of the app bar
    return IconButton(
        icon: AnimatedIcon(
          icon: AnimatedIcons.menu_arrow,
          progress: transitionAnimation,
        ),
        onPressed: () {
          close(context, null);
        });
  }

  @override
  Widget buildResults(BuildContext context) {
    //build results code 
   
  }

  @override
  Widget buildSuggestions(BuildContext context) {
    // show when someone search for something
    stocks.insert(0, query.toString());

    final suggestionList = query.isEmpty
        ? suggested
        : stocks.where((p) => p.startsWith(query)).toList();

    return ListView.builder(
      itemCount: suggestionList.length,
      itemBuilder: (context, index) => ListTile(
        onTap: () async {
          Provider.of<StockProvider>(context, listen: false)
              .searchBySymbol(suggestionList[index]);

          if (!stocks.contains(suggestionList[index]))
            suggestionList.add(suggestionList[index]);

          showResults(context);
        },
        leading: Icon(Icons.attach_money),
        title: Text(suggestionList[index]),
      ),
    );
  }

1 Ответ

0 голосов
/ 12 июля 2020

Не знаю, знаете ли вы о свойстве onSubmitted или нет, которое используется в TextField/Text/TextFormField. Так как я нигде не вижу ваш TexFormField/Text/TextField, но я думаю, вы должны его где-то использовать.

Итак, вот как используется onFieldSubmitted, который выполняет ту работу, которую вы хотите, то есть когда пользователь нажимает на лупу на клавиатуре, запускается ваша функция

              TextFormField(
                controller: _yourTextEditingController,
                textInputAction: TextInputAction.search,
                onFieldSubmitted: (){
                     // here you do your operation when you hit the 
                     // keypad magnifying lens
                     // check with print()
                     print('Pressed via keypad');
                }
              )

Не путайте с onSubmitted именем, onFieldSubmitted используется в TextFormField/Text/TextField, который использует свойство onSubmitted. Надеюсь, это ответ на ваш вопрос :) Дайте мне знать, это то, что вы искали.

...