优化交互体验增加动画效果
This commit is contained in:
@@ -8,6 +8,8 @@ import 'package:recording_tool/gen/assets.gen.dart';
|
||||
class RecordDialog extends StatelessWidget {
|
||||
const RecordDialog({super.key, required this.title, required this.actions});
|
||||
|
||||
static const _transitionDuration = Duration(milliseconds: 280);
|
||||
|
||||
final String title;
|
||||
final List<RecordDialogAction> actions;
|
||||
|
||||
@@ -18,8 +20,8 @@ class RecordDialog extends StatelessWidget {
|
||||
VoidCallback? onPressed,
|
||||
bool barrierDismissible = true,
|
||||
}) {
|
||||
return showDialog<void>(
|
||||
context: context,
|
||||
return _present(
|
||||
context,
|
||||
barrierDismissible: barrierDismissible,
|
||||
builder: (dialogContext) {
|
||||
return RecordDialog(
|
||||
@@ -47,8 +49,8 @@ class RecordDialog extends StatelessWidget {
|
||||
VoidCallback? onRightPressed,
|
||||
bool barrierDismissible = false,
|
||||
}) {
|
||||
return showDialog<void>(
|
||||
context: context,
|
||||
return _present(
|
||||
context,
|
||||
barrierDismissible: barrierDismissible,
|
||||
builder: (dialogContext) {
|
||||
return RecordDialog(
|
||||
@@ -74,6 +76,51 @@ class RecordDialog extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
static Future<void> _present(
|
||||
BuildContext context, {
|
||||
required Widget Function(BuildContext dialogContext) builder,
|
||||
required bool barrierDismissible,
|
||||
}) {
|
||||
return showGeneralDialog<void>(
|
||||
context: context,
|
||||
barrierDismissible: barrierDismissible,
|
||||
barrierLabel: MaterialLocalizations.of(context).modalBarrierDismissLabel,
|
||||
barrierColor: Colors.black54,
|
||||
transitionDuration: _transitionDuration,
|
||||
pageBuilder: (dialogContext, animation, secondaryAnimation) {
|
||||
return builder(dialogContext);
|
||||
},
|
||||
transitionBuilder: _buildTransition,
|
||||
);
|
||||
}
|
||||
|
||||
static Widget _buildTransition(
|
||||
BuildContext context,
|
||||
Animation<double> animation,
|
||||
Animation<double> secondaryAnimation,
|
||||
Widget child,
|
||||
) {
|
||||
final curved = CurvedAnimation(
|
||||
parent: animation,
|
||||
curve: Curves.easeOutCubic,
|
||||
reverseCurve: Curves.easeInCubic,
|
||||
);
|
||||
|
||||
return FadeTransition(
|
||||
opacity: curved,
|
||||
child: SlideTransition(
|
||||
position: Tween<Offset>(
|
||||
begin: const Offset(0, 0.08),
|
||||
end: Offset.zero,
|
||||
).animate(curved),
|
||||
child: ScaleTransition(
|
||||
scale: Tween<double>(begin: 0.92, end: 1).animate(curved),
|
||||
child: child,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final actionWidgets = actions
|
||||
|
||||
Reference in New Issue
Block a user