Files
MWClash/lib/widgets/sheet.dart
chen08209 4e679f776e Optimize performance
Update core

Optimize core stability

Fix linux tun authority check error

Fix some issues
2025-03-05 10:21:51 +08:00

101 lines
2.5 KiB
Dart

import 'package:fl_clash/common/common.dart';
import 'package:fl_clash/enum/enum.dart';
import 'package:fl_clash/models/models.dart';
import 'package:fl_clash/state.dart';
import 'package:fl_clash/widgets/scaffold.dart';
import 'package:flutter/material.dart';
import 'side_sheet.dart';
showExtendPage(
BuildContext context, {
required Widget body,
required String title,
double? extendPageWidth,
bool isScaffold = false,
bool isBlur = true,
Widget? action,
}) {
final NavigatorState navigator = Navigator.of(context);
final globalKey = GlobalKey();
final uniqueBody = Container(
key: globalKey,
child: body,
);
final isMobile = globalState.appState.viewMode == ViewMode.mobile;
if (isMobile) {
BaseNavigator.push(
context,
CommonScaffold(
title: title,
body: uniqueBody,
),
);
return;
}
final isNotSide = isMobile || isScaffold;
navigator.push(
ModalSideSheetRoute(
modalBarrierColor: Colors.black38,
builder: (context) {
final commonScaffold = CommonScaffold(
automaticallyImplyLeading: isNotSide,
actions: isNotSide
? null
: [
const SizedBox(
height: kToolbarHeight,
width: kToolbarHeight,
child: CloseButton(),
),
],
title: title,
body: uniqueBody,
);
return SizedBox(
width: isMobile ? context.viewWidth : extendPageWidth ?? 300,
child: commonScaffold,
);
},
constraints: const BoxConstraints(),
filter: isBlur ? filter : null,
),
);
}
Future<T?> showSheet<T>({
required BuildContext context,
required Widget body,
required String title,
bool isScrollControlled = true,
double width = 320,
}) {
final isMobile = globalState.appState.viewMode == ViewMode.mobile;
if (isMobile) {
return showModalBottomSheet<T>(
context: context,
isScrollControlled: isScrollControlled,
builder: (context) {
return SafeArea(
child: body,
);
},
showDragHandle: true,
useSafeArea: true,
);
} else {
return showModalSideSheet<T>(
useSafeArea: true,
isScrollControlled: isScrollControlled,
context: context,
constraints: BoxConstraints(
maxWidth: width,
),
body: SafeArea(
child: body,
),
title: title,
);
}
}