【问题标题】:searchable_dropdown dont work with class listsearchable_dropdown 不适用于班级列表
【发布时间】:2020-02-02 11:29:22
【问题描述】:

我使用 searchable_dropdown 1.1.0 包实现了一个颤振下拉菜单,, 我用我的班级列表进行了测试,我发现搜索 TextField 框不适用于我的班级列表。 当我在列表中的两个字符串/整数中搜索值时,我希望我的下拉搜索框工作。

例如:我希望当我输入数字 1 或键 1 时,它应该显示我搜索的项目

我想知道如何解决这个问题? 感谢帮助

这是我的代码。

import 'package:flutter/material.dart';
import 'package:searchable_dropdown/searchable_dropdown.dart';

get_list(){
  List<KeyValueModel> datas = [
    KeyValueModel(key: "Key 1", value: "Value 1"),
    KeyValueModel(key: "Key 2", value: "Value 2"),
    KeyValueModel(key: "Key 3", value: "Value 3"),
    KeyValueModel(key: "Key 4", value: "Value 4"),
    KeyValueModel(key: "Key 5", value: "Value 5"),
  ];
  return datas;
}
//Create a Model class to hold key-value pair data
class KeyValueModel {
  String key;
  String value;

  KeyValueModel({this.key, this.value});
}


class Test extends StatefulWidget {
  @override
  TestState createState() {
    return new TestState();
  }
}
class TestState extends State<Test> {

  List listan = get_list();

  KeyValueModel _selectedValue = KeyValueModel(key: "0", value: "value");

  @override
  Widget build(BuildContext context) {


    return Scaffold(
      appBar: AppBar(
        title: Text('Key value Pair - DropdownButton'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          mainAxisSize: MainAxisSize.max,
          children: <Widget>[
            SearchableDropdown<KeyValueModel>(
        isCaseSensitiveSearch: true,
              items: listan
                  .map((data) => DropdownMenuItem<KeyValueModel>(
                child: Text(data.key),
                value: data,
              )).toList(),
              onChanged: (KeyValueModel value) {
                setState(() => _selectedValue = value);
              },
              hint: Text('Select Key'),
            ),
            SizedBox(
              height: 25.0,
            ),
            Text(_selectedValue.value),
          ],
        ),
      ),
    );
  }
}


【问题讨论】:

    标签: flutter dropdown searchable


    【解决方案1】:

    这是包中的一些代码。

    ...
    
    if(widget.isCaseSensitiveSearch){
       isContains = item.value.toString().contains(keyword);
    }
    else{
       isContains = item.value.toString().toLowerCase().contains(keyword.toLowerCase());
    }
    
    ...
    

    它在value 上调用toString()。在您的情况下,valueKeyValueModel 的类型,并且没有覆盖 toString() 方法。所以它返回Instance of KeyValueModel 而不是Key 1 等。

    这是在调用toString() 方法时返回key 的类。

    class KeyValueModel {
      String key;
      String value;
    
      KeyValueModel({this.key, this.value});
    
      @override
      String toString() {
        return key;
      }
    }
    

    【讨论】:

    • 成功了,谢谢。但是大写字母有问题,Key以K大写字母开头..当我用小k字母搜索时不起作用。如何使搜索也可以使用小写字母?
    • 您可以通过声明 isCaseSensitiveSearch: true 在您的小部件树上自行设置它。让它为假。
    • @mike 有没有办法在打开下拉菜单时自动取消选择项目,而不是单击此插件中的清除按钮?
    • @BLB 你到底是什么意思?
    • @mike 没关系。这解决了一切。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 2013-10-16
    • 1970-01-01
    相关资源
    最近更新 更多