Android studio 自动完成小部件不会清除文本

问题描述 投票:0回答:1

我有这个 android studio flutter 自动完成小部件

             Autocomplete<String>(

                optionsBuilder: (TextEditingValue textEditingValue) {

                  if (textEditingValue.text.isEmpty) {
                    return const Iterable<String>.empty();
                  }
                  return animalSuggestions.where((option) {
                    return option.toLowerCase().contains(textEditingValue.text.toLowerCase());
                  });

                },

                onSelected: (String selection) {
                  _animalController.text = selection; // Explicitly set value
                },

                fieldViewBuilder: (BuildContext context, TextEditingController textEditingController, FocusNode focusNode, VoidCallback onFieldSubmitted) {
                  return TextField(
                    controller: textEditingController,  // Use internal controller to manage suggestions
                    focusNode: focusNode,
                    decoration: InputDecoration(
                      labelText: 'Search Animal',
                      border: OutlineInputBorder(),
                    ),
                  );
                },

                optionsViewBuilder: (BuildContext context, AutocompleteOnSelected<String> onSelected, Iterable<String> options) {
                  return Align(
                    alignment: Alignment.topLeft,
                    child: Material(
                      elevation: 4.0,
                      child: SizedBox(
                        height: 200.0, // Set a fixed height for the options list
                        child: ListView.builder(
                          padding: EdgeInsets.all(8.0),
                          itemCount: options.length,
                          itemBuilder: (BuildContext context, int index) {
                            final String option = options.elementAt(index);
                            return ListTile(
                              title: Text(option),
                              onTap: () {
                                onSelected(option);
                              },
                            );
                          },
                        ),
                      ),
                    ),
                  );
                },

              ),

在我的类中,我声明了一个名为 _animalController 的 TextEditingController,我用它来获取从自动完成下拉列表中选择的值

  List<String> animalSuggestions = [];
  TextEditingController _animalController = TextEditingController();

这一切似乎工作正常,直到我尝试使用此代码清除自动完成小部件中的文本

    _animalController.clear();

我可以看到 _animalController 文本被清除,但自动完成小部件中显示的文本仍然存在。我理解这是因为该小部件正在使用内部 textEditingController 来显示文本。我要么需要清除这个(我不知道如何),要么需要将内部 textEditingController 更改为 _animalController(我可以控制)。但是,当我这样做时,我的 optionsBuilder 逻辑(显然控制着我键入时如何过滤下拉列表)停止工作,并且我不再看到任何建议。有什么想法可以解决这个问题吗?

android flutter android-studio autocomplete
1个回答
0
投票

如果您使用外部变量,您可以清除:

TextEditingController textEditingController = TextEditingController();

        ElevatedButton(onPressed:(){
            textEditingController.clear();
            _animalController.clear();
          }, child: Container(height: 20,width: 20,color: Colors.blueAccent,),    
          ),

您需要清理 TextField 以从小部件中删除文本。

© www.soinside.com 2019 - 2024. All rights reserved.