Skip to content
Snippets Groups Projects

Resolve "Improve StyledButton widget"

5 files
+ 286
28
Compare changes
  • Side-by-side
  • Inline

Files

 
import 'package:auto_size_text/auto_size_text.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:random/utils/color_extensions.dart';
import 'package:random/utils/color_extensions.dart';
@@ -5,14 +6,105 @@ import 'package:random/utils/color_extensions.dart';
@@ -5,14 +6,105 @@ import 'package:random/utils/color_extensions.dart';
class StyledButton extends StatelessWidget {
class StyledButton extends StatelessWidget {
const StyledButton({
const StyledButton({
super.key,
super.key,
required this.caption,
required this.color,
required this.color,
required this.onPressed,
required this.onPressed,
 
this.onLongPress,
 
required this.child,
});
});
final String caption;
final Color color;
final Color color;
final VoidCallback? onPressed;
final VoidCallback? onPressed;
 
final VoidCallback? onLongPress;
 
final Widget child;
 
 
factory StyledButton.text({
 
Key? key,
 
required VoidCallback? onPressed,
 
VoidCallback? onLongPress,
 
required String caption,
 
required Color color,
 
}) {
 
final Widget captionWidget = AutoSizeText(
 
caption,
 
maxLines: 1,
 
style: TextStyle(
 
inherit: true,
 
fontWeight: FontWeight.w900,
 
color: color.darken(60),
 
shadows: [
 
Shadow(
 
blurRadius: 5.0,
 
color: color.lighten(60),
 
offset: const Offset(2, 2),
 
),
 
Shadow(
 
blurRadius: 5.0,
 
color: color.lighten(60),
 
offset: const Offset(2, -2),
 
),
 
Shadow(
 
blurRadius: 5.0,
 
color: color.lighten(60),
 
offset: const Offset(-2, 2),
 
),
 
Shadow(
 
blurRadius: 5.0,
 
color: color.lighten(60),
 
offset: const Offset(-2, -2),
 
),
 
],
 
),
 
);
 
 
return StyledButton(
 
color: color,
 
onPressed: onPressed,
 
onLongPress: onLongPress,
 
child: captionWidget,
 
);
 
}
 
 
factory StyledButton.icon({
 
Key? key,
 
required VoidCallback? onPressed,
 
VoidCallback? onLongPress,
 
required IconData icon,
 
required Color color,
 
required double iconSize,
 
}) {
 
return StyledButton(
 
color: color,
 
onPressed: onPressed,
 
onLongPress: onLongPress,
 
child: Icon(
 
icon,
 
color: color.darken(60),
 
size: iconSize,
 
shadows: [
 
Shadow(
 
blurRadius: 5.0,
 
color: color.lighten(60),
 
offset: const Offset(2, 2),
 
),
 
Shadow(
 
blurRadius: 5.0,
 
color: color.lighten(60),
 
offset: const Offset(2, -2),
 
),
 
Shadow(
 
blurRadius: 5.0,
 
color: color.lighten(60),
 
offset: const Offset(-2, 2),
 
),
 
Shadow(
 
blurRadius: 5.0,
 
color: color.lighten(60),
 
offset: const Offset(-2, -2),
 
),
 
],
 
),
 
);
 
}
@override
@override
Widget build(BuildContext context) {
Widget build(BuildContext context) {
@@ -20,56 +112,28 @@ class StyledButton extends StatelessWidget {
@@ -20,56 +112,28 @@ class StyledButton extends StatelessWidget {
final Color borderColor = color.darken(40);
final Color borderColor = color.darken(40);
const double borderRadius = 10;
const double borderRadius = 10;
return GestureDetector(
return Container(
onTap: onPressed,
margin: EdgeInsets.all(2),
child: Container(
padding: EdgeInsets.all(2),
width: 60,
decoration: BoxDecoration(
height: 60,
color: color,
decoration: BoxDecoration(
border: Border.all(
color: color,
color: borderColor,
border: Border.all(
width: borderWidth,
color: borderColor,
width: borderWidth,
),
borderRadius: BorderRadius.circular(borderRadius),
),
),
child: CustomPaint(
borderRadius: BorderRadius.circular(borderRadius),
painter: StyledButtonPainter(
),
baseColor: color,
child: CustomPaint(
),
painter: StyledButtonPainter(
child: Center(
baseColor: color,
child: Text(
),
caption,
child: MaterialButton(
style: TextStyle(
onPressed: onPressed,
inherit: true,
onLongPress: onLongPress,
fontSize: 30,
padding: EdgeInsets.all(8),
fontWeight: FontWeight.w900,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
color: color.darken(60),
minWidth: 40,
shadows: [
child: child,
Shadow(
blurRadius: 5.0,
color: color.lighten(60),
offset: const Offset(2, 2),
),
Shadow(
blurRadius: 5.0,
color: color.lighten(60),
offset: const Offset(2, -2),
),
Shadow(
blurRadius: 5.0,
color: color.lighten(60),
offset: const Offset(-2, 2),
),
Shadow(
blurRadius: 5.0,
color: color.lighten(60),
offset: const Offset(-2, -2),
),
],
),
),
),
),
),
),
),
);
);
Loading