Files
MWClash/lib/common/context.dart
chen08209 3ae248208b Add sqlite store
Optimize android quick action

Optimize backup and restore

Optimize more details
2026-01-27 17:05:12 +08:00

89 lines
2.2 KiB
Dart

import 'package:fl_clash/l10n/l10n.dart';
import 'package:fl_clash/manager/manager.dart';
import 'package:fl_clash/models/state.dart';
import 'package:fl_clash/widgets/scaffold.dart';
import 'package:flutter/material.dart';
extension BuildContextExtension on BuildContext {
CommonScaffoldState? get commonScaffoldState {
return findAncestorStateOfType<CommonScaffoldState>();
}
void showNotifier(String text, {MessageActionState? actionState}) {
return findAncestorStateOfType<StatusManagerState>()?.message(
text,
actionState: actionState,
);
}
void showSnackBar(String message, {SnackBarAction? action}) {
final width = viewWidth;
EdgeInsets margin;
if (width < 600) {
margin = const EdgeInsets.only(bottom: 16, right: 16, left: 16);
} else {
margin = EdgeInsets.only(bottom: 16, left: 16, right: width - 316);
}
ScaffoldMessenger.of(this).showSnackBar(
SnackBar(
action: action,
content: Text(message),
behavior: SnackBarBehavior.floating,
duration: const Duration(milliseconds: 1500),
margin: margin,
),
);
}
Size get appSize {
return MediaQuery.of(this).size;
}
double get viewWidth {
return appSize.width;
}
ColorScheme get colorScheme => Theme.of(this).colorScheme;
TextTheme get textTheme => Theme.of(this).textTheme;
AppLocalizations get appLocalizations => AppLocalizations.of(this);
T? findLastStateOfType<T extends State>() {
T? state;
visitor(Element element) {
if (!element.mounted) {
return;
}
if (element is StatefulElement) {
if (element.state is T) {
state = element.state as T;
}
}
element.visitChildren(visitor);
}
visitor(this as Element);
return state;
}
}
class BackHandleInherited extends InheritedWidget {
final Function handleBack;
const BackHandleInherited({
super.key,
required this.handleBack,
required super.child,
});
static BackHandleInherited? of(BuildContext context) =>
context.dependOnInheritedWidgetOfExactType<BackHandleInherited>();
@override
bool updateShouldNotify(BackHandleInherited oldWidget) {
return handleBack != oldWidget.handleBack;
}
}