Files
TelemetryMonitor/lib/ui/chart_grid.dart
2026-04-21 19:38:20 -03:00

55 lines
1.5 KiB
Dart

import 'package:flutter/material.dart';
import 'app_scope.dart';
import 'chart_widget.dart';
class ChartGrid extends StatelessWidget {
const ChartGrid({super.key});
@override
Widget build(BuildContext context) {
final scope = AppScope.of(context);
return ListenableBuilder(
listenable: scope.layout,
builder: (_, __) {
final grid = scope.layout.grid;
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: grid.cols,
mainAxisSpacing: 8,
crossAxisSpacing: 8,
childAspectRatio: 16 / 9,
),
itemCount: grid.cellCount,
itemBuilder: (_, i) {
final cellNumber = i + 1;
final ch = grid.channelForCell(cellNumber);
if (ch == null) return const _EmptyCell();
final cfg = scope.layout.configFor(ch);
if (!cfg.enabled) return const _EmptyCell();
return RepaintBoundary(child: ChartWidget(channel: ch));
},
);
},
);
}
}
class _EmptyCell extends StatelessWidget {
const _EmptyCell();
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
border: Border.all(
color: Theme.of(context).colorScheme.outlineVariant,
style: BorderStyle.solid,
),
borderRadius: BorderRadius.circular(6),
),
child: const Center(
child: Text('empty', style: TextStyle(color: Colors.grey)),
),
);
}
}