Dart中如何访问Posts类内部的int timestamp字段进行时间格式化
问题核心原因
- 你编写的时间转换逻辑位于全局作用域,代码执行时还没拿到接口返回的JSON数据,自然无法读取到对应帖子的timestamp值
- 全局定义的格式化时间是固定静态值,不会匹配每条帖子的独立时间戳,最终展示的时间会完全不符合预期
- 你之前感知到“无法访问Posts类内部timestamp字段”,本质是没有在具体的Posts实例上下文里读取值——类里的
timestamp本身是公开可访问的,不存在访问权限限制
修正后可直接运行的实现
把时间格式化逻辑嵌入JSON解析流程,直接从当前解析的JSON对象里读取时间戳完成转换,不需要跨作用域取值:
import 'package:intl/intl.dart'; class Posts { final String? result; final int? timestamp; final String? time; Posts({ required this.timestamp, required this.result, required this.time, }); factory Posts.fromJson(Map<String, dynamic> json) { // 解析时直接读取当前数据的原始时间戳 final rawTimestamp = json['timestamp'] as int?; String displayTime = ''; // 非空兜底,避免时间戳缺失导致运行崩溃 if (rawTimestamp != null) { final targetDate = DateTime.fromMillisecondsSinceEpoch(rawTimestamp); displayTime = DateFormat('HH:mm - dd.MM.yyyy').format(targetDate); } return Posts( result: json['result'], timestamp: rawTimestamp, time: displayTime, ); } }
补充:如果后续需要在UI层基于某个Posts实例动态格式化时间,直接通过实例访问公开的
timestamp字段即可,比如final time = DateFormat().format(DateTime.fromMillisecondsSinceEpoch(postsItem.timestamp!)),没有任何访问限制。
内容的提问来源于stack exchange,提问作者Ali newbie
相关产品推荐
相关产品推荐

