import 'dart:async'; import 'package:flutter/material.dart'; import 'package:photos/core/event_bus.dart'; import 'package:photos/events/local_photos_updated_event.dart'; import 'package:photos/models/device_folder.dart'; import 'package:photos/models/photo.dart'; import 'package:photos/photo_repository.dart'; import 'package:photos/ui/gallery.dart'; import 'package:photos/ui/gallery_app_bar_widget.dart'; import 'package:logging/logging.dart'; class DeviceFolderPage extends StatefulWidget { final DeviceFolder folder; const DeviceFolderPage(this.folder, {Key key}) : super(key: key); @override _DeviceFolderPageState createState() => _DeviceFolderPageState(); } class _DeviceFolderPageState extends State { final logger = Logger("DeviceFolderPageState"); Set _selectedPhotos = Set(); StreamSubscription _subscription; @override void initState() { _subscription = Bus.instance.on().listen((event) { setState(() {}); }); super.initState(); } @override Widget build(Object context) { return Scaffold( appBar: GalleryAppBarWidget( GalleryAppBarType.folder, widget.folder.name, widget.folder.thumbnailPhoto.deviceFolder, _selectedPhotos, onSelectionClear: () { setState(() { _selectedPhotos.clear(); }); }, ), body: Gallery( _getFilteredPhotos(PhotoRepository.instance.photos), _selectedPhotos, photoSelectionChangeCallback: (Set selectedPhotos) { setState(() { _selectedPhotos = selectedPhotos; }); }, ), ); } List _getFilteredPhotos(List unfilteredPhotos) { final List filteredPhotos = List(); for (Photo photo in unfilteredPhotos) { if (widget.folder.filter.shouldInclude(photo)) { filteredPhotos.add(photo); } } return filteredPhotos; } @override void dispose() { _subscription.cancel(); super.dispose(); } }