Flutter将列表内容赋值给Text Widget时出现List类型不匹配报错
报错原因
Column组件的children参数要求接收List<Widget>类型的参数,你的代码中[quotesList.map((e) => Text(e))].toList()写法存在逻辑错误:quotesList.map((e) => Text(e))本身返回的是Iterable<Text>类型,你额外用方括号将其包裹后,调用toList()得到的是仅包含1个Iterable元素的List,完全不匹配children的类型要求,因此触发报错。
修复方案
方案1:直接将
map返回值转为List,删除外层多余的方括号
仅修改Column的children赋值逻辑即可:body: Column( children: quotesList.map((e) => Text(e)).toList(), ),方案2:如果需要在名言列表前后插入其他组件,使用扩展操作符
...展开Iterable
当你需要在列表前加标题、内边距等其他Widget时,用扩展操作符把map返回的元素直接展开到children的List中即可:body: Column( children: [ const SizedBox(height: 16), const Text("精选名言", style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)), const SizedBox(height: 16), ...quotesList.map((e) => Padding( padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), child: Text(e), )), ], ),
修改后完整代码
import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } // Flutter官方规范类名使用大驼峰命名 class MyApp extends StatefulWidget { const MyApp({super.key}); @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { final List<String> quotesList = [ "成功的秘诀就是开始行动", "只有偏执狂才能生存", "你永远赢不了一个永不放弃的人", "我从不需要运气加持" ]; @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold( appBar: AppBar( centerTitle: true, backgroundColor: Colors.black38, title: const Text("名言集"), ), body: Column( children: quotesList.map((e) => Padding( padding: const EdgeInsets.all(8.0), child: Text(e), )).toList(), ), ), ); } }
内容的提问来源于stack exchange,提问作者Anas Hafidi
相关产品推荐
相关产品推荐

