Files
MWClash/lib/widgets/app_state_container.dart
chen08209 a134c32493 Update kernel
Add import profile via QR code image
2024-05-15 20:21:02 +08:00

61 lines
1.6 KiB
Dart

import 'package:fl_clash/common/common.dart';
import 'package:fl_clash/models/models.dart';
import 'package:fl_clash/state.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class AppStateContainer extends StatelessWidget {
final Widget child;
const AppStateContainer({
super.key,
required this.child,
});
_autoLaunchContainer(Widget child) {
return Selector<Config, bool>(
selector: (_, config) => config.autoLaunch,
builder: (_, isAutoLaunch, child) {
autoLaunch?.updateStatus(isAutoLaunch);
return child!;
},
child: child,
);
}
_updateNavigationsContainer(Widget child) {
return Selector2<AppState, Config, UpdateNavigationsSelector>(
selector: (_, appState, config) {
final group = appState.currentGroups;
final hasProfile = config.profiles.isNotEmpty;
return UpdateNavigationsSelector(
openLogs: config.openLogs,
hasProxies: group.isNotEmpty && hasProfile,
);
},
builder: (context, state, child) {
WidgetsBinding.instance.addPostFrameCallback(
(_) {
globalState.appController.appState.navigationItems =
navigation.getItems(
openLogs: state.openLogs,
hasProxies: state.hasProxies,
);
},
);
return child!;
},
child: child,
);
}
@override
Widget build(BuildContext context) {
return _autoLaunchContainer(
_updateNavigationsContainer(
child,
),
);
}
}