todos-contra-el-fuego-mobile/lib/widgets/rounded_btn.dart
vjrj 2bf42ce262 refactor: remove comunes-flutter dependency and inline components
Remove the external comunes-flutter library dependency and replace all its
components with local implementations:

- Utility functions: Created lib/utils/widget_utils.dart with compactWidgets()
  and ellipse() functions, replacing the comunes-flutter helpers with modern
  Dart null-safety patterns (whereType instead of where(notNull))
- Secret loader: Inlined as lib/utils/secret_loader.dart for loading JSON config
- Layout widgets: Replaced CenteredRow/CenteredColumn with standard Row/Column
  with MainAxisAlignment.center
- Intro screens: Copied AppIntroPage and MaterialAppWithIntro locally in
  lib/widgets/ with cleaned-up deprecated code patterns
- Button widget: Created lib/widgets/rounded_btn.dart for the RoundedBtn used
  in activeFires.dart

Changes span 20 files:
- 5 new utility/widget files created
- Updated imports in 15 files
- Removed path dependency from pubspec.yaml
- All functionality preserved, build verified with flutter pub get

Impact:
- Removes external dependency, simplifying project structure
- Modern Dart patterns (proper null-safety)
- Better code clarity with explicit widget properties
- Easier onboarding (no 'what is comunes-flutter?' questions)
2026-03-07 18:19:33 +01:00

70 lines
1.8 KiB
Dart

import 'package:flutter/material.dart';
/// Rounded button widget with icon and text.
/// Used primarily in the active fires page.
class RoundedBtn extends StatelessWidget {
static const btnRadius = Radius.circular(90.0);
final IconData icon;
final String text;
final Color backColor;
final Color fontColor;
final TextStyle textStyle;
final VoidCallback onPressed;
const RoundedBtn({
required this.icon,
required this.text,
required this.onPressed,
required this.backColor,
this.textStyle = const TextStyle(fontSize: 20.0, color: Colors.white),
this.fontColor = Colors.white,
});
factory RoundedBtn.nav({
required IconData icon,
required String text,
required BuildContext context,
required String route,
required Color backColor,
TextStyle textStyle = const TextStyle(fontSize: 20.0, color: Colors.white),
Color fontColor = Colors.white,
}) {
return RoundedBtn(
icon: icon,
text: text,
onPressed: () {
Navigator.pushNamed(context, route);
},
backColor: backColor,
textStyle: textStyle,
fontColor: fontColor,
);
}
@override
Widget build(BuildContext context) {
return SizedBox(
child: ElevatedButton(
onPressed: onPressed,
style: ElevatedButton.styleFrom(
backgroundColor: backColor,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(btnRadius),
),
),
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Icon(icon, size: 32.0, color: fontColor),
const SizedBox(width: 10.0),
Text(text, style: textStyle),
],
),
),
),
);
}
}