import 'package:flutter/material.dart'; import 'package:lightmeter/generated/l10n.dart'; import 'package:lightmeter/navigation/routes.dart'; import 'package:lightmeter/platform_config.dart'; import 'package:lightmeter/providers/logbook_photos_provider.dart'; import 'package:lightmeter/res/dimens.dart'; import 'package:lightmeter/screens/logbook/components/grid_tile/widget_grid_tile_logbook_photo.dart'; import 'package:lightmeter/screens/shared/sliver_screen/screen_sliver.dart'; import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart'; class LogbookScreen extends StatefulWidget { const LogbookScreen({super.key}); @override State createState() => _LogbookScreenState(); } class _LogbookScreenState extends State with SingleTickerProviderStateMixin { @override Widget build(BuildContext context) { return SliverScreen( title: Text(S.of(context).logbook), slivers: [ _PicturesGridBuilder( values: LogbookPhotos.of(context, listen: true), onEdit: _editProfile, ), SliverToBoxAdapter( child: SizedBox(height: MediaQuery.paddingOf(context).bottom), ), ], ); } void _editProfile(LogbookPhoto photo) { Navigator.of(context).pushNamed( NavigationRoutes.logbookPhotoEditScreen.name, arguments: photo, ); } } class _PicturesGridBuilder extends StatelessWidget { final List values; final void Function(LogbookPhoto photo) onEdit; static const int _crossAxisCount = 3; const _PicturesGridBuilder({ required this.values, required this.onEdit, }); @override Widget build(BuildContext context) { return SliverPadding( padding: const EdgeInsets.symmetric(horizontal: Dimens.paddingM), sliver: SliverGrid( gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( maxCrossAxisExtent: (MediaQuery.sizeOf(context).width - Dimens.paddingS * (_crossAxisCount - 1) - Dimens.paddingM * 2) / _crossAxisCount, mainAxisSpacing: Dimens.paddingS, crossAxisSpacing: Dimens.paddingS, childAspectRatio: PlatformConfig.cameraPreviewAspectRatio, ), delegate: SliverChildBuilderDelegate( (_, int index) => LogbookPhotoGridTile( photo: values[index], onTap: () => onEdit(values[index]), ), childCount: values.length, ), ), ); } }