没有为类型“Data”定义运算符“[]”,请尝试定义运算符“[]",flutter

rm5edbpk  于 2023-01-14  发布在  Flutter
关注(0)|答案(1)|浏览(142)

你好我有一个问题在这里,我想使一个搜索功能在一个列表中,我试图按照导师在互联网上,我改变了数据列表检索API中的API,但发生了如下错误。

final List<Data> allData = [];
  // final List<Map<String, dynamic>> _allUsers = [];

  // List<Map<String, dynamic>> _foundUsers = [];
  List<Data> _foundData = [];

  @override
  initState() {
    _foundData = allData;
    super.initState();
  }

  void _runFilter(String enteredKeyword) {
    List<Data> results = [];
    if (enteredKeyword.isEmpty) {
      results = allData;
    } else {
      results = allData
          .where((user) =>
              user['name'].toLowerCase().contains(enteredKeyword.toLowerCase()))
          .toList();
    }

    setState(() {
      _foundData = results;
    });
  }

TextField(
              onChanged: (value) => _runFilter(value),
              decoration: const InputDecoration(
                  labelText: 'Search', suffixIcon: Icon(Icons.search)),
            ),
ars1skjm

ars1skjm1#

results = allData
      .where((user) =>
          user['name'].toLowerCase().contains(enteredKeyword.toLowerCase()))
      .toList();

上面你实际上做的是找到Map〈String,dynamic〉.这不是你想要的.你的变量是“user”,所以我推断你的数据结构可能是一个UID-Map〈String,dynamic〉.所以,如果我是对的,数据实际上是一个List〈String〈Map〈String,dynamic〉〉,那么你必须更深一层.
为了给予您了解其结构,下面是您可以使用的代码片段:

List<Map<String, Map<String, dynamic>>> test = [{'123':{'name': 'Joe'}}];
  print(test[0]['123']!['name']);
  
  var something = test.where((map) {
    return map.values.any((innerMap) =>
      innerMap['name'].toLowerCase().contains('joe')
    );                                                  
  }).toList();
  print(something[0]['123']!['name']);

如果这样做没有帮助,请为您的数据添加数据结构,以便能够获得更具体的信息。

相关问题