Flutter,Mobx和Sqlite的可搜索下拉列表

时间:2020-06-22 00:14:06

标签: flutter

我正在尝试实现Searchable Dropdown包:

https://github.com/salim-lachdhaf/searchable_dropdown

我正在使用mobx和Sqlite

请参阅小部件代码:

DropdownSearch<TarefaModel>(
                            
                            label: 'BUSCAR TAREFAS',
                            onFind: (String filter) =>
                                controller.filtrarTarefas(filter),
                            onChanged: (TarefaModel data) {
                              print(data);
                            },
                            dropdownBuilder: _customDropDownExample,

                          ),

我的Mobx动作:

控制器动作:


  @observable
  ObservableList<TarefaModel> tarefas = new ObservableList<TarefaModel>();

  @action
  filtrarTarefas(termo) async {

    final repository = new TarefaRepository();
    tarefas = new ObservableList<TarefaModel>();
    var data = await repository.search(termo);
    tarefas.addAll(data);
    return tarefas;
  }


自定义下拉列表:

Widget _customDropDownExample(
      BuildContext context, TarefaModel item, String itemDesignation) {
    return Container(
      child: Observer(
          builder: (_) => ListView.builder(
              itemCount: controller.tarefas.length,
              itemBuilder: (context, i) {
                return ListTile(
                  title: Text(item.descricao),
                  subtitle: Text(item.label),
                );
              })),
    );
  }

我的模特:

class TarefaModel{

  int id;
  String descricao;
  TarefaModel({this.id, this.descricao});
 
  Map<String, dynamic> toMap() {
    return {'id': id,'descricao': descricao};

  }

}

但是这个错误显示了:

enter image description here

有什么主意吗?谢谢

1 个答案:

答案 0 :(得分:0)

我的存储库:

Future<List<TarefaModel>> search(String term) async {

    try {

      final Database db = await _getDatabase();
      
      final List<Map<String, dynamic>> maps = await db.query(
        TAREFAS_TABLE,
        where: "descricao LIKE ?",
        whereArgs: [
          '%$term%',
        ],
      );

      return List.generate(
        maps.length,
        (i) {
          return TarefaModel(
            id: maps[i]['id'],
            descricao: maps[i]['descricao'],
         
          );
        },
      );
    } catch (ex) {
      print(ex);
      return new List<TarefaModel>();
    }
  }