Charts 格式及;本地化图表中的日期标签\u颤振时间序列图表

Charts 格式及;本地化图表中的日期标签\u颤振时间序列图表,charts,dart,flutter,Charts,Dart,Flutter,我有以下时间序列: 我想使用localizeDateTime格式,例如DateFormat.yMMMd(Localizations.localeOf(context.languageCode)。format(date) 我如何才能做到这一点?您可以尝试以下方法: tickFormatterSpec:新图表。AutoDateTimeTickFormatterSpec( 月份:新图表。TimeFormatterSpec( 格式:'MMM', 转换格式:“MMM-yy”, ), 年份:新图表。Time

我有以下时间序列:

我想使用localize
DateTime
格式,例如
DateFormat.yMMMd(Localizations.localeOf(context.languageCode)。format(date)

我如何才能做到这一点?

您可以尝试以下方法:

tickFormatterSpec:新图表。AutoDateTimeTickFormatterSpec( 月份:新图表。TimeFormatterSpec( 格式:'MMM', 转换格式:“MMM-yy”, ), 年份:新图表。TimeFormatterSpec( 格式:“YYYY”, 转换格式:“MMM-yy”,
)),

来自Shruti Gupta的溶液不完整。您必须使用自定义的
dateTimeFactory
来真正本地化日期

因此,创建自己的
DateTimeFactory

import 'package:charts_common/common.dart' as common show DateTimeFactory;

/// A class to localize the date
class LocalizedTimeFactory implements common.DateTimeFactory {
  final Locale locale;

  const LocalizedTimeFactory(this.locale);

  DateTime createDateTimeFromMilliSecondsSinceEpoch(
      int millisecondsSinceEpoch) {
    return DateTime.fromMillisecondsSinceEpoch(millisecondsSinceEpoch);
  }

  DateTime createDateTime(int year,
      [int month = 1,
        int day = 1,
        int hour = 0,
        int minute = 0,
        int second = 0,
        int millisecond = 0,
        int microsecond = 0]) {
    return DateTime(
        year, month, day, hour, minute, second, millisecond, microsecond);
  }

  /// Returns a [DateFormat].
  DateFormat createDateFormat(String pattern) {
    return DateFormat(pattern, locale.languageCode);
  }
}
然后,您需要添加一个
tickFormatterSpec
,以便考虑您的自定义dateTimeFactory,并填写
dateTimeFactory
字段:

charts.TimeSeriesChart(data.seriesPressure(context),
     defaultRenderer: charts.LineRendererConfig(includeArea: true, strokeWidthPx: 1),
     animate: false,
     domainAxis: new charts.DateTimeAxisSpec(
        tickFormatterSpec: charts.AutoDateTimeTickFormatterSpec(
            hour: new charts.TimeFormatterSpec(format: "Hm", transitionFormat: "Hm"),
        ),
     ),
     dateTimeFactory: LocalizedTimeFactory(Localizations.localeOf(context)),
     primaryMeasureAxis: charts.NumericAxisSpec(
         tickProviderSpec: charts.BasicNumericTickProviderSpec(zeroBound: false))
     ),
剩下的任务是更好地配置
tickFormatterSpec
。播放日期、小时和分钟字段,以及格式和转换格式,直到达到您想要的。 不幸的是,当没有tickFormatterSpec时,我无法复制显示

import 'package:charts_common/common.dart' as common show DateTimeFactory;

/// A class to localize the date
class LocalizedTimeFactory implements common.DateTimeFactory {
  final Locale locale;

  const LocalizedTimeFactory(this.locale);

  DateTime createDateTimeFromMilliSecondsSinceEpoch(
      int millisecondsSinceEpoch) {
    return DateTime.fromMillisecondsSinceEpoch(millisecondsSinceEpoch);
  }

  DateTime createDateTime(int year,
      [int month = 1,
        int day = 1,
        int hour = 0,
        int minute = 0,
        int second = 0,
        int millisecond = 0,
        int microsecond = 0]) {
    return DateTime(
        year, month, day, hour, minute, second, millisecond, microsecond);
  }

  /// Returns a [DateFormat].
  DateFormat createDateFormat(String pattern) {
    return DateFormat(pattern, locale.languageCode);
  }
}
charts.TimeSeriesChart(data.seriesPressure(context),
     defaultRenderer: charts.LineRendererConfig(includeArea: true, strokeWidthPx: 1),
     animate: false,
     domainAxis: new charts.DateTimeAxisSpec(
        tickFormatterSpec: charts.AutoDateTimeTickFormatterSpec(
            hour: new charts.TimeFormatterSpec(format: "Hm", transitionFormat: "Hm"),
        ),
     ),
     dateTimeFactory: LocalizedTimeFactory(Localizations.localeOf(context)),
     primaryMeasureAxis: charts.NumericAxisSpec(
         tickProviderSpec: charts.BasicNumericTickProviderSpec(zeroBound: false))
     ),