You need to enable JavaScript to run this app. Dart中如何访问Posts类内部的int timestamp字段进行时间格式化
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 17:36:03