【问题标题】:Flutter showSearch keyboard searchFlutter showSearch 键盘搜索
【发布时间】:2020-11-01 20:47:02
【问题描述】:

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

正常点击按钮时,键盘关闭,构建结果未激活。到目前为止,您必须实际单击建议的 listtile 选项。有没有办法让键盘的搜索按钮搜索输入的文本?或者用户是否仅限于建议的列表选项?我将在下面列出我的 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]),
      ),
    );
  }

【问题讨论】:

    标签: flutter dart flutter-layout


    【解决方案1】:

    不知道你知不知道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 属性。我希望能回答你的问题 :) 告诉我,这就是你要找的东西。

    【讨论】:

    • 非常感谢您的回复!不幸的是,我正在使用构建上面列出的 StockDelegate 类的 showSearch 小部件。 showSearch 小部件位于下面的以下评论中。我不确定在哪里可以使用 showSearch 小部件访问 TextFormField
    • Widget build(BuildContext context) { StockProvider _stockProvider = Provider.of&lt;StockProvider&gt;(context, listen: false); return Scaffold( appBar: AppBar( automaticallyImplyLeading: false, title: Text('Stock Search Page'), actions: &lt;Widget&gt;[ IconButton( tooltip: 'Search', icon: const Icon(Icons.search), onPressed: () { showSearch(context: context, delegate: StockDelegate()); }, ) ], ),
    • 您会看到这是仅在 AppBar 内,并且 'showSearch delegate: StockDelegate() 表示在上面的代码中。
    • @Legz4Dayz 你找到解决这个问题的方法了吗?
    【解决方案2】:

    覆盖类似于buildSuggestions()showResults() 方法。

    覆盖showResults方法如下:

      @override
      void showResults(BuildContext context) {
        super.showResults(context);
        showSuggestions(context);
        FocusScope.of(context).unfocus();
      }
    

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 2021-12-12
    • 2023-04-03
    • 1970-01-01
    • 2011-03-08
    • 2021-05-28
    相关资源
    最近更新 更多