Flutter showSearch 键盘搜索

标签 flutter dart flutter-layout

我对 Flutter 和 Dart 非常陌生,所以我正在尝试构建一个简单的搜索应用程序,其中基于在 Flutters showSearch 搜索栏中输入的单词进行查询。我理解 listtile 是为了向用户显示建议而构建的,点击该建议将激活 buildresults 小部件。但是,我想启用键盘上的搜索按钮来简单地搜索输入的单词,而不是点击有限的建议列表。 Simple android keyboard

正常点击按钮时,键盘关闭,构建结果不激活。到目前为止,您必须实际单击建议的列表选项。有没有办法让键盘的搜索按钮搜索输入的文本?或者用户是否仅限于建议的列表选项?我将在下面列出我的 showSearch 委托(delegate):

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]),
      ),
    );
  }

最佳答案

不知道你是否了解onSubmitted property或不,这用于 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属性(property)。我希望这能回答您的问题:) 让我知道,这就是您正在寻找的东西。

关于Flutter showSearch 键盘搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62862591/

相关文章:

flutter - 这个以Classname为前缀的class-const-Syntax在Dart中是什么意思?

android - 将flutter项目发布到Play商店后Firebase Auth登录不起作用

flutter - 警报对话框中的值不会从外部更新

firebase - 上传用户个人资料图片 Firebase - Flutter

android - 如何在检测到登录时更新所有 WebView 选项卡?

flutter - 如何修复 'List<dynamic>'类型不是 'String'类型的子类型

flutter-layout - 如何在 Flutter 中的圆环图孔中添加饼图,我尝试使用 Stack 小部件,但它仅适用于文本

azure - 使用 azure devops 进行 flutter 构建管道

flutter 驱动: How to check device orientation?

dart - StreamBuilder 抛出 Dirty State 说 Invalid Arguments