67 lines
1.6 KiB
Dart
67 lines
1.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
/// Confirmation dialog widget
|
|
///
|
|
/// Displays a confirmation dialog with customizable title, content, and buttons
|
|
class ConfirmDialog extends StatelessWidget {
|
|
final String title;
|
|
final String content;
|
|
final String confirmText;
|
|
final String cancelText;
|
|
final bool isDangerous;
|
|
|
|
const ConfirmDialog({
|
|
super.key,
|
|
required this.title,
|
|
required this.content,
|
|
this.confirmText = '确认',
|
|
this.cancelText = '取消',
|
|
this.isDangerous = false,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return AlertDialog(
|
|
title: Text(title),
|
|
content: Text(content),
|
|
actions: [
|
|
TextButton(
|
|
onPressed: () => Navigator.of(context).pop(false),
|
|
child: Text(cancelText),
|
|
),
|
|
TextButton(
|
|
onPressed: () => Navigator.of(context).pop(true),
|
|
style: isDangerous
|
|
? TextButton.styleFrom(
|
|
foregroundColor: Theme.of(context).colorScheme.error,
|
|
)
|
|
: null,
|
|
child: Text(confirmText),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
|
|
/// Show confirmation dialog
|
|
static Future<bool> show(
|
|
BuildContext context, {
|
|
required String title,
|
|
required String content,
|
|
String confirmText = '确认',
|
|
String cancelText = '取消',
|
|
bool isDangerous = false,
|
|
}) async {
|
|
final result = await showDialog<bool>(
|
|
context: context,
|
|
builder: (context) => ConfirmDialog(
|
|
title: title,
|
|
content: content,
|
|
confirmText: confirmText,
|
|
cancelText: cancelText,
|
|
isDangerous: isDangerous,
|
|
),
|
|
);
|
|
return result ?? false;
|
|
}
|
|
}
|