flutter_login_widget/lib/buttons.dart

165 lines
4.1 KiB
Dart
Raw Normal View History

2022-09-20 16:32:46 +02:00
import 'package:flutter/material.dart';
import 'package:flutter_login/flutter_login_view.dart';
import 'default_theme.dart';
abstract class AppButtons {
const AppButtons();
Widget primaryButton({
required BuildContext context,
required Widget child,
required VoidCallback onPressed,
bool isDisabled = false,
bool isLoading = false,
});
Widget primaryDisabledButton({
required BuildContext context,
required Widget child,
required VoidCallback onPressed,
});
Widget secondaryButton({
required BuildContext context,
required Widget child,
required VoidCallback onPressed,
bool isDisabled = false,
bool isLoading = false,
});
Widget tertiaryButton({
required BuildContext context,
required Widget child,
required VoidCallback onPressed,
bool isDisabled = false,
bool isLoading = false,
});
Widget iconButton({
required BuildContext context,
required VoidCallback onPressed,
required Widget icon,
Color? color,
double? iconSize,
});
Widget backButton({
required BuildContext context,
VoidCallback? onPressed,
});
}
class AppShellDefaultButtons implements AppButtons {
const AppShellDefaultButtons();
@override
Widget primaryButton({
required BuildContext context,
required Widget child,
required VoidCallback onPressed,
bool isDisabled = false,
bool isLoading = false,
}) =>
InkWell(
onTap: () {
if (!isDisabled) {
onPressed.call();
}
},
borderRadius: BorderRadius.circular(1000),
child: Container(
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 30),
decoration: BoxDecoration(
color: !isDisabled
? Theme.of(context).buttonTheme.colorScheme?.primary
: Theme.of(context).disabledColor,
borderRadius: BorderRadius.circular(5),
),
child: isLoading
? Text('. . .', style: Theme.of(context).textTheme.button)
: child,
),
);
@override
Widget primaryDisabledButton({
required BuildContext context,
required Widget child,
required VoidCallback onPressed,
}) =>
MaterialButton(
elevation: 0,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
color: Theme.of(context).disabledColor,
onPressed: onPressed,
child: child,
);
@override
Widget secondaryButton({
required BuildContext context,
required Widget child,
required VoidCallback onPressed,
bool isDisabled = false,
bool isLoading = false,
}) =>
OutlinedButton(
style: OutlinedButton.styleFrom(
foregroundColor: Theme.of(context).backgroundColor,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
side: BorderSide(
color: Theme.of(context).buttonTheme.colorScheme?.primary ??
defaultTheme.colorScheme.primary,
),
),
onPressed: onPressed,
child: child,
);
@override
Widget tertiaryButton({
required BuildContext context,
required Widget child,
required VoidCallback onPressed,
bool isDisabled = false,
bool isLoading = false,
}) =>
TextButton(
style: TextButton.styleFrom(
foregroundColor: Theme.of(context).backgroundColor,
),
onPressed: onPressed,
child: child,
);
@override
Widget iconButton({
required BuildContext context,
required VoidCallback onPressed,
required Widget icon,
Color? color,
double? iconSize,
}) =>
IconButton(
onPressed: onPressed,
icon: icon,
color: color,
iconSize: iconSize ?? 24.0,
);
@override
Widget backButton({
required BuildContext context,
VoidCallback? onPressed,
}) =>
IconButton(
onPressed: onPressed ?? () => Navigator.pop(context),
icon: Icon(
2022-09-21 10:03:08 +02:00
context.login().config.appTheme.icons.backButton,
2022-09-20 16:32:46 +02:00
size: 24,
),
);
}