Flutter中对ListView加载的API数据实现字母排序的技术求助
解决Flutter ListView中API数据的字母排序问题
嘿,我来帮你搞定这个字母排序的需求!其实操作很简单,咱们只需要在获取到API返回的数据后,对列表执行排序逻辑就行,而且要注意处理大小写的问题,避免出现大写单词排在小写前面的情况。
方法一:在获取数据的方法中直接排序(推荐)
这个方法最清晰,让数据在获取完成后就已经是排序好的状态,后续直接使用即可。修改你的getWord()方法,在返回列表前添加排序代码:
Future<List<Word>> getWord() async { var response = await http.get(Uri.parse('myAPIURL')); var _words = List<Word>(); _words = (json.decode(utf8.decode(response.bodyBytes)) as List) .map((singleWordMap) => Word.fromJson(singleWordMap)) .toList(); // 按单词的字母顺序排序,toLowerCase()确保不区分大小写 _words.sort((a, b) => a.word.toLowerCase().compareTo(b.word.toLowerCase())); return _words; }
方法二:在初始化状态时排序
如果你不想修改数据获取的方法,也可以在initState中拿到数据后再排序:
void initState() { super.initState(); data = getWord(); data.then( (value) { setState( () { _words.addAll(value); // 对获取到的单词列表进行排序 _words.sort((a, b) => a.word.toLowerCase().compareTo(b.word.toLowerCase())); _wordsForDisplay = _words; }, ); }, ); }
为什么要用toLowerCase()?
因为默认的字符串比较是基于ASCII码的,大写字母的ASCII值比小写字母小,比如"Banana"会排在"apple"前面。转成小写后再比较,就能保证完全按照字母表顺序排序,不管单词的原始大小写。
这样修改之后,你的ListView就会展示按字母顺序排列的单词啦!
内容的提问来源于stack exchange,提问作者OneMore
相关产品推荐
相关产品推荐

