Flutter 颤振显示搜索键盘搜索

Flutter 颤振显示搜索键盘搜索,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,我对Flitter和Dart非常陌生,所以我尝试构建一个简单的搜索应用程序,根据在Flitters showSearch搜索栏中键入的单词进行查询。我了解为向用户显示建议而构建的listtile,点击该建议将激活buildresults小部件。但是,我想启用键盘上的搜索按钮,只搜索输入的单词,而不是点击有限的建议列表。 正常单击按钮时,键盘关闭,buildresults未激活。到目前为止,您必须实际单击建议的listtile选项。有没有办法启用键盘的搜索按钮来搜索输入的文本?或者用户是否仅限于

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

正常单击按钮时,键盘关闭,buildresults未激活。到目前为止,您必须实际单击建议的listtile选项。有没有办法启用键盘的搜索按钮来搜索输入的文本?或者用户是否仅限于建议的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]),
      ),
    );
  }
class StockDelegate扩展了SearchDelegate{
最终库存=[
“IBM”,
“克洛夫”,
“DKNGZ”,
“DRD”,
“PRTS”,
“TSLA”,
“柯克”,
“VBIV”
];
最终建议=[“IBM”、“TSLA”、“BNTX”];
@凌驾
//TODO:实现textInputAction
//TODO:实现textInputAction
TextInputAction获取TextInputAction=>super.TextInputAction;
@凌驾
列出buildActions(BuildContext上下文){
//应用程序栏的操作
StockProvider\u StockProvider=
Provider.of(上下文,listen:true);
返回[
图标按钮(
图标:图标(图标。清除),
已按下:(){
查询=“”;
}),
];
}
@凌驾
小部件buildLeading(BuildContext上下文){
//应用程序栏左侧的前导图标
返回图标按钮(
图标:动画指令(
图标:animateDictions.menu\u箭头,
进展:过渡化,
),
已按下:(){
关闭(上下文,空);
});
}
@凌驾
小部件构建结果(构建上下文){
//生成结果代码
}
@凌驾
小部件构建建议(构建上下文){
//当某人搜索某物时显示
insert(0,query.toString());
final suggestionList=query.isEmpty
?建议
:stocks.where((p)=>p.startsWith(query)).toList();
返回ListView.builder(
itemCount:suggestionList.length,
itemBuilder:(上下文,索引)=>ListTile(
onTap:()异步{
Provider.of(上下文,侦听:false)
.searchBySymbol(建议列表[索引]);
如果(!stocks.contains(suggestionList[索引])
添加(suggestionList[index]);
展示结果(背景);
},
前导:图标(图标。附加钱),
标题:文本(建议列表[索引]),
),
);
}

我不知道你是否知道,这是在
文本字段/Text/TextFormField
中使用的。因为,我在任何地方都看不到你的
TextFormField/Text/TextField
,但我想你一定在某处使用它

因此,这就是
onfildsubmitted
的使用方式,它完成了您想要的工作,也就是说,当用户点击键盘上的放大镜时,它运行您的功能

              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
名称混淆,
onfeldsubmitted
用于
TextFormField/Text/TextField
,它使用
onSubmitted
属性。我希望回答您的问题:)让我知道,这就是您要找的东西。

非常感谢您的回复!不幸的是,我正在使用e showSearch widget,它构建我上面列出的StockDelegate类。showSearch widget位于下面的注释中。我不确定在哪里可以使用showSearch widget
widget build(BuildContext context){StockProvider\u StockProvider=Provider.of(context,listen:false)访问TextFormField;return Scaffold(appBar:appBar(automaticallyImplyLeading:false,title:Text('Stock Search Page'),actions:[IconButton(工具提示:'Search',图标:const icon(Icons.Search)),onPressed:(){showSearch(context:context,delegate:StockDelegate();},)],),
您将看到这是,这仅在应用程序栏中,而“showSearch delegate:StockDelegate()在上面的代码中表示。@Legz4Dayz您找到解决此问题的方法了吗?