Flutter中TypeAheadField的suggestionsCallback参数类型不匹配报错
解决TypeAheadField中suggestionsCallback参数类型不匹配错误
错误原因
报错信息明确指出:suggestionsCallback参数要求的类型是FutureOr<Iterable> Function(String),即一个接收字符串输入、返回可迭代对象未来值的函数,但你传入的LoginController.users()是无参的Future<List> Function(),两者类型不兼容。
解决方案
根据你的API是否支持搜索过滤,分两种处理方式:
方案1:后端支持关键词过滤(推荐)
修改users函数,添加字符串参数用于传递搜索关键词,将关键词拼接到API请求中:
static Future<List<UserLogin>> users(String query) async { final response = await http .get(Uri.parse('http://3.108.194.111:8080/AtdochubJ-3/user/?search=$query')); if (response.statusCode == 200) { final parsed = json.decode(response.body).cast<Map<String, dynamic>>(); return parsed.map<UserLogin>((json) => UserLogin.fromJson(json)).toList(); } else { throw Exception('Failed to load users'); } }
然后直接将函数传入suggestionsCallback:
suggestionsCallback: LoginController.users,
方案2:前端本地过滤(后端无搜索接口时使用)
如果后端不支持根据关键词过滤用户,就在suggestionsCallback中先获取全部用户,再根据输入的关键词本地筛选:
suggestionsCallback: (String query) async { // 先获取全部用户列表 final allUsers = await LoginController.users(); // 根据用户名过滤,忽略大小写 return allUsers.where((user) => user.userName.toLowerCase().contains(query.toLowerCase()) ); },
此方案无需修改原有的无参users函数,但注意如果用户列表数据量较大,本地过滤会影响性能,优先推荐方案1。
内容的提问来源于stack exchange,提问作者Minal Suryawanshi
相关产品推荐
相关产品推荐

