flutter - 提前振颤

标签 flutter dart texteditingcontroller flutter-typeahead

使用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"
    }]
    
    我也确定这部分信息是相关的。当前,当我调试并点击“预输入”文本字段时,在调试控制台中得到以下信息:
    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以禁用onTap上显示建议列表。
    关于第二个问题,您不会得到建议,我认为问题出在json中,
    您正在使用json.decode,它将解码[]中要列出的任何json,如果是{}则将其解码到map中,因此我认为您应该做的是:

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

    关于flutter - 提前振颤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64583784/

    相关文章:

    使用 TextEditingController 设置初始值后,Flutter 在 TextField 中编辑值

    json - flutter 文本编辑 Controller listview.builder

    android - flutter build apk --release 构建 apk 文件但在 Android 上安装后出现错误

    dart - 如何在flutter中重用同一小部件​​的内容?

    list - 如何处理列表列表?

    dart #import dart 编辑器中的怪异

    flutter - 类型 'TextEditingController' 不是类型转换中类型 'int' 的子类型

    ios - 启动应用程序时如何克服此错误?

    flutter - 我想要第 5 个中的 4 个文本字段的总和,以改变 flutter 中以上 4 个字段的值

    sqlite - 如何从数据库初始化列表(sqflite)