mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2025-12-13 10:12:15 -06:00
Initial commit
This commit is contained in:
70
lib/core/widgets/confirm_button.dart
Normal file
70
lib/core/widgets/confirm_button.dart
Normal file
@@ -0,0 +1,70 @@
|
||||
import 'dart:math' as math;
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class ElevatedConfirmationButton extends StatefulWidget {
|
||||
factory ElevatedConfirmationButton.icon(BuildContext context,
|
||||
{required void Function() onPressed, required Icon icon, required Widget label}) {
|
||||
final double scale = MediaQuery.maybeOf(context)?.textScaleFactor ?? 1;
|
||||
final double gap = scale <= 1 ? 8 : lerpDouble(8, 4, math.min(scale - 1, 1))!;
|
||||
return ElevatedConfirmationButton(
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: <Widget>[icon, SizedBox(width: gap), Flexible(child: label)],
|
||||
),
|
||||
onPressed: onPressed,
|
||||
);
|
||||
}
|
||||
|
||||
const ElevatedConfirmationButton({
|
||||
Key? key,
|
||||
this.color,
|
||||
required this.onPressed,
|
||||
required this.child,
|
||||
this.confirmWidget = const Text("Confirm?"),
|
||||
}) : super(key: key);
|
||||
|
||||
final Color? color;
|
||||
final void Function()? onPressed;
|
||||
final Widget child;
|
||||
final Widget confirmWidget;
|
||||
@override
|
||||
State<ElevatedConfirmationButton> createState() => _ElevatedConfirmationButtonState();
|
||||
}
|
||||
|
||||
class _ElevatedConfirmationButtonState extends State<ElevatedConfirmationButton> {
|
||||
bool _clickedOnce = false;
|
||||
double? _originalWidth;
|
||||
final GlobalKey _originalWidgetKey = GlobalKey();
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (!_clickedOnce) {
|
||||
return ElevatedButton(
|
||||
key: _originalWidgetKey,
|
||||
style: ButtonStyle(
|
||||
backgroundColor: MaterialStateProperty.all(widget.color),
|
||||
),
|
||||
onPressed: () {
|
||||
_originalWidth =
|
||||
(_originalWidgetKey.currentContext?.findRenderObject() as RenderBox).size.width;
|
||||
setState(() => _clickedOnce = true);
|
||||
},
|
||||
child: widget.child,
|
||||
);
|
||||
} else {
|
||||
return Builder(builder: (context) {
|
||||
return SizedBox(
|
||||
width: _originalWidth,
|
||||
child: ElevatedButton(
|
||||
style: ButtonStyle(
|
||||
backgroundColor: MaterialStateProperty.all(widget.color),
|
||||
),
|
||||
onPressed: widget.onPressed,
|
||||
child: widget.confirmWidget,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user