modern file manager delete dialog
This commit is contained in:
parent
c18c6d72bd
commit
828c201fe0
@ -202,9 +202,43 @@ class MyTheme {
|
|||||||
splashFactory: isDesktop ? NoSplash.splashFactory : null,
|
splashFactory: isDesktop ? NoSplash.splashFactory : null,
|
||||||
textButtonTheme: isDesktop
|
textButtonTheme: isDesktop
|
||||||
? TextButtonThemeData(
|
? TextButtonThemeData(
|
||||||
style: ButtonStyle(splashFactory: NoSplash.splashFactory),
|
style: ButtonStyle(
|
||||||
|
splashFactory: NoSplash.splashFactory,
|
||||||
|
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
|
||||||
|
RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(18.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
: null,
|
: null,
|
||||||
|
elevatedButtonTheme: ElevatedButtonThemeData(
|
||||||
|
style: ButtonStyle(
|
||||||
|
backgroundColor: MaterialStateProperty.all(
|
||||||
|
MyTheme.accent,
|
||||||
|
),
|
||||||
|
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
|
||||||
|
RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(18.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
checkboxTheme: const CheckboxThemeData(
|
||||||
|
splashRadius: 0,
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.all(
|
||||||
|
Radius.circular(5),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
listTileTheme: ListTileThemeData(
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.all(
|
||||||
|
Radius.circular(5),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
colorScheme: ColorScheme.fromSwatch(
|
colorScheme: ColorScheme.fromSwatch(
|
||||||
primarySwatch: Colors.blue,
|
primarySwatch: Colors.blue,
|
||||||
).copyWith(
|
).copyWith(
|
||||||
@ -257,11 +291,44 @@ class MyTheme {
|
|||||||
OutlinedButton.styleFrom(side: BorderSide(color: Colors.white38))),
|
OutlinedButton.styleFrom(side: BorderSide(color: Colors.white38))),
|
||||||
textButtonTheme: isDesktop
|
textButtonTheme: isDesktop
|
||||||
? TextButtonThemeData(
|
? TextButtonThemeData(
|
||||||
style: ButtonStyle(splashFactory: NoSplash.splashFactory),
|
style: ButtonStyle(
|
||||||
|
splashFactory: NoSplash.splashFactory,
|
||||||
|
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
|
||||||
|
RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(18.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
: null,
|
: null,
|
||||||
checkboxTheme:
|
elevatedButtonTheme: ElevatedButtonThemeData(
|
||||||
const CheckboxThemeData(checkColor: MaterialStatePropertyAll(dark)),
|
style: ButtonStyle(
|
||||||
|
backgroundColor: MaterialStateProperty.all(
|
||||||
|
MyTheme.accent,
|
||||||
|
),
|
||||||
|
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
|
||||||
|
RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(18.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
checkboxTheme: const CheckboxThemeData(
|
||||||
|
checkColor: MaterialStatePropertyAll(dark),
|
||||||
|
splashRadius: 0,
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.all(
|
||||||
|
Radius.circular(5),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
listTileTheme: ListTileThemeData(
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.all(
|
||||||
|
Radius.circular(5),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
colorScheme: ColorScheme.fromSwatch(
|
colorScheme: ColorScheme.fromSwatch(
|
||||||
primarySwatch: Colors.blue,
|
primarySwatch: Colors.blue,
|
||||||
).copyWith(
|
).copyWith(
|
||||||
@ -684,7 +751,7 @@ class CustomAlertDialog extends StatelessWidget {
|
|||||||
Future.delayed(Duration.zero, () {
|
Future.delayed(Duration.zero, () {
|
||||||
if (!scopeNode.hasFocus) scopeNode.requestFocus();
|
if (!scopeNode.hasFocus) scopeNode.requestFocus();
|
||||||
});
|
});
|
||||||
const double padding = 16;
|
const double padding = 30;
|
||||||
bool tabTapped = false;
|
bool tabTapped = false;
|
||||||
return FocusScope(
|
return FocusScope(
|
||||||
node: scopeNode,
|
node: scopeNode,
|
||||||
|
@ -1010,25 +1010,11 @@ class _FileManagerPageState extends State<FileManagerPage>
|
|||||||
MainAxisAlignment.spaceBetween,
|
MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
ElevatedButton.icon(
|
ElevatedButton.icon(
|
||||||
style: ButtonStyle(
|
|
||||||
backgroundColor:
|
|
||||||
MaterialStateProperty.all(
|
|
||||||
MyTheme.accent,
|
|
||||||
),
|
|
||||||
shape: buttonShape,
|
|
||||||
),
|
|
||||||
icon: Icon(Icons.close_rounded),
|
icon: Icon(Icons.close_rounded),
|
||||||
label: Text(translate("Cancel")),
|
label: Text(translate("Cancel")),
|
||||||
onPressed: cancel,
|
onPressed: cancel,
|
||||||
),
|
),
|
||||||
ElevatedButton.icon(
|
ElevatedButton.icon(
|
||||||
style: ButtonStyle(
|
|
||||||
backgroundColor:
|
|
||||||
MaterialStateProperty.all(
|
|
||||||
MyTheme.accent,
|
|
||||||
),
|
|
||||||
shape: buttonShape,
|
|
||||||
),
|
|
||||||
icon: Icon(Icons.done_rounded),
|
icon: Icon(Icons.done_rounded),
|
||||||
label: Text(translate("Ok")),
|
label: Text(translate("Ok")),
|
||||||
onPressed: submit,
|
onPressed: submit,
|
||||||
|
@ -593,9 +593,11 @@ class FileModel extends ChangeNotifier {
|
|||||||
? "${translate("Are you sure you want to delete the file of this directory?")}\n"
|
? "${translate("Are you sure you want to delete the file of this directory?")}\n"
|
||||||
: "";
|
: "";
|
||||||
final count = entries.length > 1 ? "${i + 1}/${entries.length}" : "";
|
final count = entries.length > 1 ? "${i + 1}/${entries.length}" : "";
|
||||||
content = "$dirShow$count \n${entries[i].path}";
|
content = "$dirShow\n\n${entries[i].path}".trim();
|
||||||
final confirm =
|
final confirm = await showRemoveDialog(
|
||||||
await showRemoveDialog(title, content, item.isDirectory);
|
count.isEmpty ? title : "$title ($count)",
|
||||||
|
content,
|
||||||
|
item.isDirectory);
|
||||||
try {
|
try {
|
||||||
if (confirm == true) {
|
if (confirm == true) {
|
||||||
sendRemoveFile(entries[i].path, i, items.isLocal!);
|
sendRemoveFile(entries[i].path, i, items.isLocal!);
|
||||||
@ -636,22 +638,27 @@ class FileModel extends ChangeNotifier {
|
|||||||
submit() => close(true);
|
submit() => close(true);
|
||||||
return CustomAlertDialog(
|
return CustomAlertDialog(
|
||||||
title: Row(
|
title: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
const Icon(Icons.warning, color: Colors.red),
|
const Icon(Icons.warning_rounded, color: Colors.red),
|
||||||
const SizedBox(width: 20),
|
Text(title).paddingOnly(
|
||||||
Text(title)
|
left: 10,
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
contentBoxConstraints:
|
contentBoxConstraints:
|
||||||
BoxConstraints(minHeight: 100, minWidth: 400, maxWidth: 400),
|
BoxConstraints(minHeight: 80, minWidth: 400, maxWidth: 400),
|
||||||
content: Column(
|
content: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: [
|
children: [
|
||||||
Text(content),
|
Text(content),
|
||||||
const SizedBox(height: 5),
|
Text(
|
||||||
Text(translate("This is irreversible!"),
|
translate("This is irreversible!"),
|
||||||
style: const TextStyle(fontWeight: FontWeight.bold)),
|
style: const TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Colors.red,
|
||||||
|
),
|
||||||
|
).paddingOnly(top: 20),
|
||||||
showCheckbox
|
showCheckbox
|
||||||
? CheckboxListTile(
|
? CheckboxListTile(
|
||||||
contentPadding: const EdgeInsets.all(0),
|
contentPadding: const EdgeInsets.all(0),
|
||||||
@ -666,12 +673,24 @@ class FileModel extends ChangeNotifier {
|
|||||||
setState(() => removeCheckboxRemember = v);
|
setState(() => removeCheckboxRemember = v);
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
: const SizedBox.shrink()
|
: const SizedBox.shrink(),
|
||||||
]),
|
Row(
|
||||||
actions: [
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
dialogButton("Cancel", onPressed: cancel, isOutline: true),
|
children: [
|
||||||
dialogButton("OK", onPressed: submit),
|
ElevatedButton.icon(
|
||||||
|
icon: Icon(Icons.close_rounded),
|
||||||
|
label: Text(translate("Cancel")),
|
||||||
|
onPressed: cancel,
|
||||||
|
),
|
||||||
|
ElevatedButton.icon(
|
||||||
|
icon: Icon(Icons.done_rounded),
|
||||||
|
label: Text(translate("Ok")),
|
||||||
|
onPressed: submit,
|
||||||
|
),
|
||||||
],
|
],
|
||||||
|
).paddingOnly(top: 20)
|
||||||
|
],
|
||||||
|
),
|
||||||
onSubmit: submit,
|
onSubmit: submit,
|
||||||
onCancel: cancel,
|
onCancel: cancel,
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user