mirror of
https://github.com/immich-app/immich.git
synced 2026-03-22 11:09:21 +03:00
Consolidate video state into a single asset-scoped provider, and reduce dependency on global state generally. Overall this should fix a few timing issues and race conditions with videos specifically, and make future changes in this area easier.
46 lines
2.1 KiB
Dart
46 lines
2.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
|
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_details/appears_in_details.widget.dart';
|
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_details/date_time_details.widget.dart';
|
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_details/drag_handle.widget.dart';
|
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_details/location_details.widget.dart';
|
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_details/people_details.widget.dart';
|
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_details/rating_details.widget.dart';
|
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_details/technical_details.widget.dart';
|
|
import 'package:immich_mobile/providers/infrastructure/asset_viewer/asset.provider.dart';
|
|
|
|
class AssetDetails extends ConsumerWidget {
|
|
final BaseAsset asset;
|
|
final double minHeight;
|
|
|
|
const AssetDetails({super.key, required this.asset, required this.minHeight});
|
|
|
|
@override
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
final exifInfo = ref.watch(assetExifProvider(asset)).valueOrNull;
|
|
|
|
return Container(
|
|
constraints: BoxConstraints(minHeight: minHeight),
|
|
decoration: BoxDecoration(
|
|
color: context.colorScheme.surface,
|
|
borderRadius: const BorderRadius.vertical(top: Radius.circular(20)),
|
|
),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const DragHandle(),
|
|
DateTimeDetails(asset: asset, exifInfo: exifInfo),
|
|
PeopleDetails(asset: asset),
|
|
LocationDetails(asset: asset, exifInfo: exifInfo),
|
|
TechnicalDetails(asset: asset, exifInfo: exifInfo),
|
|
RatingDetails(exifInfo: exifInfo),
|
|
AppearsInDetails(asset: asset),
|
|
SizedBox(height: context.padding.bottom + 48),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|