Flutter中如何将数据库数字状态转换为文本显示在ListView中
实现数字状态转文本的几种方法
方法1:在状态类中添加转换函数
直接在_view_problemState里写一个转换函数,把数字状态映射成对应的文本:
String getStatusText(int status) { switch(status) { case 0: return "未授权"; case 1: return "已允许"; case 2: return "初始状态"; default: return "未知状态"; // 处理意外的数字值 } }
然后修改ListView里的subtitle部分,调用这个函数替换原有的数字显示:
subtitle: Text( getStatusText(problem.status), style: TextStyle( fontWeight: FontWeight.bold, fontSize: 17), ),
方法2:在Model类中添加Getter(更推荐)
如果你的problemModel类中status是int类型,给它加一个Getter属性,这样在任何使用model的地方都能直接拿到文本状态,更符合面向对象的写法:
打开problemModel类,添加如下代码:
class problemModel { // 假设原有的属性和构造函数 int status; String image; // ...其他属性 // 添加状态文本Getter String get statusText { switch(status) { case 0: return "未授权"; case 1: return "已允许"; case 2: return "初始状态"; default: return "未知状态"; } } }
之后在ListView里直接使用这个Getter即可:
subtitle: Text( problem.statusText, style: TextStyle( fontWeight: FontWeight.bold, fontSize: 17), ),
方法3:使用Map映射快速转换
用Map做键值对映射,写法更简洁:
在State类里定义映射表:
final Map<int, String> statusMap = { 0: "未授权", 1: "已允许", 2: "初始状态" };
然后在Text组件中调用:
subtitle: Text( statusMap[problem.status] ?? "未知状态", // 用??处理未定义的数字 style: TextStyle( fontWeight: FontWeight.bold, fontSize: 17), ),
修改后的完整代码示例(以方法1为例)
class _view_problemState extends State<view_problem> { List<problemModel> problemlist = []; List<problemModel> originalList = []; StreamController _streamController = StreamController(); // 状态转换函数 String getStatusText(int status) { switch(status) { case 0: return "未授权"; case 1: return "已允许"; case 2: return "初始状态"; default: return "未知状态"; } } Future getAllProblem() async { problemlist = await problemcontrollers().getProblem(); originalList = problemlist; _streamController.sink.add(problemlist); } @override void initState() { getAllProblem(); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Color.fromARGB(255, 14, 12, 134), title: const Text('show information'), ), body: Container( child: Column( children: <Widget>[ Padding( padding: const EdgeInsets.all(8.0), ), Expanded( child: StreamBuilder( stream: _streamController.stream, builder: (context, snapshots) { if (snapshots.hasData) { return ListView.builder( itemCount: problemlist.length, itemBuilder: ((context, index) { problemModel problem = problemlist[index]; return Card( margin: EdgeInsets.all(10), child: ListTile( leading: CircleAvatar( backgroundImage: NetworkImage( 'http://192.168.1.5/skc/Problem_image/${problem.image}', ), ), subtitle: Text( getStatusText(problem.status), style: TextStyle( fontWeight: FontWeight.bold, fontSize: 17), ), ), ); })); } return Center( child: CircularProgressIndicator(), ); }, ), ) ], ), ), ); } }
注意:如果你的problem.status是字符串类型(比如数据库返回的是字符串形式的数字),需要先转成int类型再传入转换逻辑:int.parse(problem.status)
内容的提问来源于stack exchange,提问作者gamedev dover
相关产品推荐
相关产品推荐

