Hey brainstrust,
I'm looking for help in getting a custom chart set up in FF, and have been able to get it to preview but can't get it live and operational.
Does anyone here have the ability or service to help with this?
Here's the code snippet as is:
// Automatic FlutterFlow imports
import '/actions/actions.dart' as action_blocks;
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/widgets/index.dart'; // Imports other custom widgets
import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart';
// Begin custom widget code
// DO NOT REMOVE OR MODIFY THE CODE ABOVE!
import 'dart:math';
import 'package:fl_chart/fl_chart.dart';
class MyStackedBarChart extends StatelessWidget {
final List<String> month = [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"
];
final double? width;
final double? height;
final List<double> income;
final List<double> essentials;
final List<double>? lifestyle;
MyStackedBarChart({
Key? key,
this.width,
this.height,
required this.income,
required this.essentials,
required this.lifestyle,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Stack(
children: [
BarChart(
BarChartData(
barGroups: getExpenseBarGroups(),
gridData: const FlGridData(show: false),
borderData: FlBorderData(show: false),
titlesData: FlTitlesData(
show: true,
leftTitles:
const AxisTitles(sideTitles: SideTitles(showTitles: false)),
rightTitles:
const AxisTitles(sideTitles: SideTitles(showTitles: false)),
topTitles:
const AxisTitles(sideTitles: SideTitles(showTitles: false)),
bottomTitles: AxisTitles(
sideTitles: SideTitles(
showTitles: true,
getTitlesWidget: (value, meta) =>
getBottomTitles(value, meta),
),
),
),
),
),
BarChart(
BarChartData(
barGroups: getIncomeBarGroups(),
gridData: const FlGridData(show: false),
borderData: FlBorderData(show: false),
titlesData: FlTitlesData(
show: true,
leftTitles:
const AxisTitles(sideTitles: SideTitles(showTitles: false)),
rightTitles:
const AxisTitles(sideTitles: SideTitles(showTitles: false)),
topTitles:
const AxisTitles(sideTitles: SideTitles(showTitles: false)),
bottomTitles: AxisTitles(
sideTitles: SideTitles(
showTitles: true,
getTitlesWidget: (value, meta) =>
getBottomTitles(value, meta),
),
),
),
),
),
],
);
}
List<BarChartGroupData> getExpenseBarGroups() {
List<BarChartGroupData> barGroups = [];
for (int i = 0; i < month.length; i++) {
double totalExpense = essentials[i] + lifestyle[i];
double barHeight = max(income[i], totalExpense);
barGroups.add(
BarChartGroupData(
x: i,
barRods: [
BarChartRodData(
toY: barHeight,
color: Colors.transparent,
width: 14,
rodStackItems: [
BarChartRodStackItem(0, essentials[i], Colors.pink.shade500),
BarChartRodStackItem(essentials[i],
essentials[i] + lifestyle[i], Colors.orange.shade400),
],
),
],
),
);
}
return barGroups;
}
List<BarChartGroupData> getIncomeBarGroups() {
List<BarChartGroupData> barGroups = [];
for (int i = 0; i < month.length; i++) {
barGroups.add(
BarChartGroupData(
x: i,
barRods: [
BarChartRodData(
toY: income[i],
width: 14,
color: Colors.transparent,
borderSide: BorderSide(color: Colors.grey.shade500, width: 2),
),
],
),
);
}
return barGroups;
}
Widget getBottomTitles(double value, TitleMeta meta) {
const style = TextStyle(
color: Colors.grey,
fontWeight: FontWeight.bold,
);
Widget text;
switch (value.toInt()) {
case 0:
text = const Text('J', style: style);
break;
case 1:
text = const Text('F', style: style);
break;
case 2:
text = const Text('M', style: style);
break;
case 3:
text = const Text('A', style: style);
break;
case 4:
text = const Text('M', style: style);
break;
case 5:
text = const Text('J', style: style);
break;
case 6:
text = const Text('J', style: style);
break;
case 7:
text = const Text('A', style: style);
break;
case 8:
text = const Text('S', style: style);
break;
case 9:
text = const Text('O', style: style);
break;
case 10:
text = const Text('N', style: style);
break;
case 11:
text = const Text('D', style: style);
break;
default:
text = const Text('', style: style);
}
return SideTitleWidget(axisSide: meta.axisSide, child: text);
}
}