Flutter中如何从API提取姓名的前两个词数据
解决方案
你可以通过添加姓名处理的辅助函数,在解析API返回数据时对姓名字段做截断处理,具体修改如下:
1. 编写姓名截断辅助函数
先定义一个函数,用来将超过两个词的姓名截取前两个词,同时处理空值和异常格式:
String truncateName(String? fullName) { if (fullName == null || fullName.isEmpty) return ''; List<String> nameParts = fullName.split(' '); // 过滤姓名中可能存在的空字符串(比如连续空格的情况) nameParts.removeWhere((part) => part.isEmpty); if (nameParts.length > 2) { return nameParts.take(2).join(' '); } return fullName; }
2. 修改API数据解析逻辑
在遍历API返回的元素时,先处理姓名字段,再创建Qari对象:
List<Qari> qarilist = []; Future<List<Qari>> getQariList() async { const url = "https://quranicaudio.com/api/qaris"; final res = await http.get(Uri.parse(url)); jsonDecode(res.body).forEach((element) { if (qarilist.length < 20) { // 处理姓名字段 String processedName = truncateName(element['name']); // 复制原数据并替换处理后的姓名 Map<String, dynamic> modifiedElement = Map.from(element)..['name'] = processedName; qarilist.add(Qari.fromjson(modifiedElement)); } }); qarilist.sort((a, b) => a.name!.compareTo(b.name!)); return qarilist; }
可选优化
如果你的Qari类支持自定义构造函数(而非仅依赖fromJson),也可以直接在创建对象时传入处理后的姓名,示例:
qarilist.add(Qari( name: truncateName(element['name']), // 其他属性根据element对应字段赋值 ));
内容的提问来源于stack exchange,提问作者Sm Huzaifa
相关产品推荐
相关产品推荐

