add close confirmation dialog

Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
21pages 2022-09-01 12:07:05 +08:00
parent 06541be459
commit 39a1545e94
2 changed files with 67 additions and 26 deletions

View File

@ -48,22 +48,25 @@ class _DesktopServerPageState extends State<DesktopServerPage>
],
child: Consumer<ServerModel>(
builder: (context, serverModel, child) => Container(
decoration: BoxDecoration(
border:
Border.all(color: MyTheme.color(context).border!)),
child: Scaffold(
backgroundColor: MyTheme.color(context).bg,
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(child: ConnectionManager()),
SizedBox.fromSize(size: Size(0, 15.0)),
],
),
),
),
)));
decoration: BoxDecoration(
border: Border.all(color: MyTheme.color(context).border!)),
child: Scaffold(
backgroundColor: MyTheme.color(context).bg,
body: Overlay(initialEntries: [
OverlayEntry(builder: (context) {
gFFI.dialogManager.setOverlayState(Overlay.of(context));
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(child: ConnectionManager()),
SizedBox.fromSize(size: Size(0, 15.0)),
],
),
);
})
]),
))));
}
@override
@ -109,7 +112,8 @@ class ConnectionManagerState extends State<ConnectionManager> {
theme: isDarkTheme() ? TarBarTheme.dark() : TarBarTheme.light(),
showTitle: false,
showMaximize: false,
showMinimize: false,
showMinimize: true,
showClose: true,
controller: serverModel.tabController,
tabType: DesktopTabType.cm,
pageViewBuilder: (pageView) => Row(children: [

View File

@ -314,6 +314,8 @@ class DesktopTab extends StatelessWidget {
Offstage(offstage: tail == null, child: tail),
WindowActionPanel(
mainTab: isMainWindow,
tabType: tabType,
state: state,
theme: theme,
showMinimize: showMinimize,
showMaximize: showMaximize,
@ -327,6 +329,8 @@ class DesktopTab extends StatelessWidget {
class WindowActionPanel extends StatelessWidget {
final bool mainTab;
final DesktopTabType tabType;
final Rx<DesktopTabState> state;
final TarBarTheme theme;
final bool showMinimize;
@ -337,6 +341,8 @@ class WindowActionPanel extends StatelessWidget {
const WindowActionPanel(
{Key? key,
required this.mainTab,
required this.tabType,
required this.state,
required this.theme,
this.showMinimize = true,
this.showMaximize = true,
@ -411,22 +417,53 @@ class WindowActionPanel extends StatelessWidget {
message: 'Close',
icon: IconFont.close,
theme: theme,
onTap: () {
if (mainTab) {
windowManager.close();
} else {
// only hide for multi window, not close
Future.delayed(Duration.zero, () {
WindowController.fromWindowId(windowId!).hide();
});
onTap: () async {
action() {
if (mainTab) {
windowManager.close();
} else {
// only hide for multi window, not close
Future.delayed(Duration.zero, () {
WindowController.fromWindowId(windowId!).hide();
});
}
onClose?.call();
}
if (tabType != DesktopTabType.main &&
state.value.tabs.length > 1) {
closeConfirmDialog(action);
} else {
action();
}
onClose?.call();
},
is_close: true,
)),
],
);
}
closeConfirmDialog(Function() callback) async {
final res = await gFFI.dialogManager
.show<bool>((setState, close) => CustomAlertDialog(
title: Row(children: [
Icon(Icons.warning_amber_sharp,
color: Colors.redAccent, size: 28),
SizedBox(width: 10),
Text(translate("Warning")),
]),
content: Text(translate("Disconnect all devices?")),
actions: [
TextButton(
onPressed: () => close(), child: Text(translate("Cancel"))),
ElevatedButton(
onPressed: () => close(true), child: Text(translate("OK"))),
],
));
if (res == true) {
callback();
}
}
}
// ignore: must_be_immutable