forked from eatvio/eatvio_app
54 lines
1.9 KiB
Dart
54 lines
1.9 KiB
Dart
import 'package:eatvio_app/features/insights/models/insights_payload_model.dart';
|
|
import 'package:eatvio_app/features/insights/presentation/charts/insights_chart_common.dart';
|
|
import 'package:eatvio_app/features/insights/presentation/widgets/insights_colors.dart';
|
|
import 'package:eatvio_app/generated/l10n.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:syncfusion_flutter_charts/charts.dart';
|
|
|
|
class WeightChart extends StatelessWidget {
|
|
const WeightChart({super.key, required this.model, required this.emptyText});
|
|
|
|
final WeightChartModel model;
|
|
|
|
/// Текст при отсутствии точек («Добавьте Ваш вес»).
|
|
final String emptyText;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final points = buildPoints(model.labels, model.values);
|
|
if (points.isEmpty) {
|
|
return InsightsChartPlaceholder(text: emptyText);
|
|
}
|
|
final s = S.of(context);
|
|
final range = paddedRange(points.map((e) => e.value));
|
|
|
|
return SizedBox(
|
|
height: insightsChartHeight,
|
|
child: SfCartesianChart(
|
|
key: const Key('insights_weight_chart'),
|
|
margin: EdgeInsets.zero,
|
|
plotAreaBorderWidth: 0,
|
|
primaryXAxis: buildInsightsCategoryAxis(),
|
|
primaryYAxis: buildInsightsValueAxis(
|
|
unit: s.insights_unit_kg,
|
|
min: range.min,
|
|
max: range.max,
|
|
),
|
|
trackballBehavior: buildInsightsTrackball(),
|
|
series: <CartesianSeries<InsightsPoint, String>>[
|
|
SplineAreaSeries<InsightsPoint, String>(
|
|
name: s.insights_tab_weight,
|
|
dataSource: points,
|
|
xValueMapper: (point, _) => point.label,
|
|
yValueMapper: (point, _) => point.value,
|
|
borderColor: InsightsColors.blue,
|
|
borderWidth: 3,
|
|
gradient: buildInsightsAreaGradient(InsightsColors.blue),
|
|
markerSettings: buildInsightsMarker(InsightsColors.blue),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|