微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

提前振颤

如何解决提前振颤

使用typeahead软件包时,我没有得到期望的结果。

当前不良行为:

  • 当我点击文本字段时,我什至在开始输入之前都会立即看到所有建议的列表(超过26,000条)

  • 当我开始输入内容时,建议列表不会调整(例如,如果我输入“ a”,则会显示建议的完整列表,并且列表不会过滤为仅显示以“ a”开头的建议

所需结果:

  • 我只是希望该功能根据输入的内容向我显示建议-我确信我的代码实现有误,并且会非常感谢您的帮助!

我的相关代码

import 'package:Flutter/material.dart';
import 'package:Flutter_typeahead/Flutter_typeahead.dart';

import '../providers/analysis_route_provider.dart';

class AutoCompleteTextfieldTwo extends StatefulWidget {
  @override
  _AutoCompleteTextfieldTwoState createState() =>
      _AutoCompleteTextfieldTwoState();
}

class _AutoCompleteTextfieldTwoState extends State<AutoCompleteTextfieldTwo> {
  final TextEditingController _controller = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return TypeAheadField(
      hideOnEmpty: true,textFieldConfiguration: TextFieldConfiguration(
        style: TextStyle(
          color: Colors.white,),autofocus: false,controller: this._controller,keyboardType: TextInputType.text,enabled: true,focusNode: FocusNode(),decoration: Inputdecoration(
          border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(20),borderSide: BorderSide(
              width: 2,color: Colors.blue,hintText: 'Type in company name or ticker symbol',hintStyle: TextStyle(
            color: Colors.grey,getImmediateSuggestions: true,hideOnError: true,suggestionsCallback: (pattern) async {
        return await AnalysisRouteProvider.getCompaniesForTextfield2(pattern);
      },itemBuilder: (context,itemData) {
        return ListTile(
          title: Text(itemData['name'].toString()),subtitle: Text(itemData['symbol'].toString()),);
      },onSuggestionSelected: (suggestion) {
        print('selected');

        FocusNode().unfocus();
        this._controller.text = suggestion['name'].toString();
        _controller.clear();
      },);
  }
}

Http请求:

 static Future getCompaniesForTextfield2(String query) async {
    var url = *url with api key here*;
    http.Response response = await http.get(url,headers: {
      'Content-Type': 'application/json',});
    var jsonData = json.decode(response.body);

    return jsonData;
  }

JSON代码段(从API实际返回的对象超过26,000个):

[ {
  "symbol" : "SPY","name" : "SPDR S&P 500","price" : 326.7,"exchange" : "NYSE Arca"
},{
  "symbol" : "CMCSA","name" : "Comcast Corp","price" : 41.98,"exchange" : "Nasdaq Global Select"
},{
  "symbol" : "KMI","name" : "Kinder Morgan Inc","price" : 11.83,"exchange" : "New York Stock Exchange"
}]

我也确定这部分信息是相关的。当前,当我调试并点击typeahead文本字段时,我在调试控制台中得到以下信息:

W/IInputConnectionWrapper(13704): beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(13704): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper(13704): getTextAfterCursor on inactive InputConnection
W/IInputConnectionWrapper(13704): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper(13704): endBatchEdit on inactive InputConnection

解决方法

我认为您应该在getImadiateSugetions上设置false,以禁止在Tap上显示建议列表。

关于第二个问题,您没有得到建议,我认为问题出在json中, 您使用的是json.decode,它将对[]中的所有json进行解码以列出列表,如果在{}中的map中对其进行解码,那么我想您应该做的是:

suggestionsCallback: (pattern) async {
        var list = await AnalysisRouteProvider.getCompaniesForTextfield2(pattern);
        return list[0];
      },

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。