mirror of
https://github.com/immich-app/immich.git
synced 2025-11-10 08:36:52 -05:00
39 lines
1.2 KiB
Dart
39 lines
1.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
import 'package:immich_mobile/models/server_info/server_features.model.dart';
|
|
import 'package:immich_mobile/providers/server_info.provider.dart';
|
|
|
|
/// A utility widget that conditionally renders its child based on a server feature flag.
|
|
///
|
|
/// Example usage:
|
|
/// ```dart
|
|
/// FeatureCheck(
|
|
/// feature: (features) => features.ocr,
|
|
/// child: Text('OCR is enabled'),
|
|
/// fallback: Text('OCR is not available'),
|
|
/// )
|
|
/// ```
|
|
class FeatureCheck extends ConsumerWidget {
|
|
/// A function that extracts the specific feature flag from ServerFeatures
|
|
final bool Function(ServerFeatures) feature;
|
|
|
|
/// The widget to display when the feature is enabled
|
|
final Widget child;
|
|
|
|
/// Optional widget to display when the feature is disabled
|
|
final Widget? fallback;
|
|
|
|
const FeatureCheck({super.key, required this.feature, required this.child, this.fallback});
|
|
|
|
@override
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
final serverFeatures = ref.watch(serverInfoProvider.select((s) => s.serverFeatures));
|
|
final isFeatureEnabled = feature(serverFeatures);
|
|
if (isFeatureEnabled) {
|
|
return child;
|
|
}
|
|
|
|
return fallback ?? const SizedBox.shrink();
|
|
}
|
|
}
|