You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:51:09