import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:intl/intl.dart';
import 'package:linechart/chart_data_methods.dart';
import 'package:linechart/date_range_widget.dart';
import 'package:syncfusion_flutter_charts/charts.dart';
import 'graph_data.dart';
final graphData = Provider((ref) => ChartDataMethods());
class LineChart extends ConsumerWidget {
@override
Widget build(BuildContext context, ScopedReader watch) {
final startDate = watch(dateController).startDate;
final endDate = watch(dateController).endDate;
return Container(
child: SfCartesianChart(
plotAreaBorderWidth: 0,
title: ChartTitle(text: 'Sales'),
plotAreaBackgroundColor: Colors.blue[50].withOpacity(0.5),
primaryXAxis: DateTimeAxis(
autoScrollingDelta: 91,
autoScrollingDeltaType: DateTimeIntervalType.days,
edgeLabelPlacement: EdgeLabelPlacement.shift,
interval: 7,
intervalType: DateTimeIntervalType.days,
dateFormat: DateFormat.MMMd(),
labelRotation: -45,
labelAlignment: LabelAlignment.start,
majorGridLines: MajorGridLines(width: 0),
),
primaryYAxis: NumericAxis(
rangePadding: ChartRangePadding.auto,
numberFormat: NumberFormat.currency(locale: Platform.localeName, symbol: '\$')),
zoomPanBehavior: ZoomPanBehavior(
enablePinching: false,
enableDoubleTapZooming: false,
enableMouseWheelZooming: false,
enableSelectionZooming: false,
enablePanning: true),
tooltipBehavior: TooltipBehavior(
enable: true,
shouldAlwaysShow: true,
activationMode: ActivationMode.singleTap,
header: 'Sales',
canShowMarker: false,
color: Colors.lightBlue[300],
format: r'point.x - $point.y',
),
series: _getDefaultLineSeries(watch, startDate, endDate),
));
}
/// Series
List<AreaSeries<GraphData, DateTime>> _getDefaultLineSeries(
ScopedReader watch, DateTime start, DateTime end) {
final chartData = watch(graphData).dateRangeData(start, end);
return <AreaSeries<GraphData, DateTime>>[
AreaSeries<GraphData, DateTime>(
emptyPointSettings: EmptyPointSettings(mode: EmptyPointMode.zero),
color: Colors.lightBlue,
borderColor: Colors.blue[900],
borderWidth: 2,
dataSource: chartData,
enableTooltip: true,
xValueMapper: (GraphData data, _) => data.xAxis,
yValueMapper: (GraphData data, _) => data.yAxis,
markerSettings: MarkerSettings(
isVisible: true,
color: Colors.white,
borderColor: Colors.blue[900],
borderWidth: 1,
))
];
}
}