import 'package:flutter/material.dart'; import 'package:okane/screen.dart'; import 'package:okane/ui/widgets/piechart.dart'; class ResponsiveCard extends StatelessWidget { final String titleText; final String? subtitleText; final Widget child; const ResponsiveCard({ super.key, required this.titleText, required this.child, this.subtitleText, }); @override Widget build(BuildContext context) { final screenSize = getScreenSize(context); final card = Card( child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ Padding( padding: EdgeInsets.only(top: 8, left: 8, right: 8), child: Text( titleText, style: Theme.of( context, ).textTheme.titleLarge!.copyWith(fontWeight: FontWeight.bold), ), ), child, if (subtitleText != null) Padding(padding: EdgeInsets.all(8), child: Text(subtitleText!)), ], ), ); return switch (screenSize) { ScreenSize.small => Row(children: [Expanded(child: card)]), ScreenSize.normal => Container( constraints: BoxConstraints(maxWidth: ScreenSize.normal.size), child: card, ), }; } } class PieChartCard extends StatelessWidget { final String titleText; // Text to display when items is empty. final String fallbackText; final OkanePieChartValueConverter valueConverter; final List items; const PieChartCard({ super.key, this.valueConverter = numToString, required this.items, required this.fallbackText, required this.titleText, }); @override Widget build(BuildContext context) { final child = items.isEmpty ? SizedBox( width: 150, height: 150, child: Center(child: Text(fallbackText)), ) : OkanePieChart(valueConverter: valueConverter, items: items); return ResponsiveCard(titleText: titleText, child: child); } }