Select file on tap

This commit is contained in:
vishnukvmd 2021-09-15 23:58:10 +05:30
parent a76fd13d0f
commit 06efe724d9

View file

@ -8,11 +8,43 @@ import 'package:photos/models/file.dart';
import 'package:photos/ui/thumbnail_widget.dart'; import 'package:photos/ui/thumbnail_widget.dart';
import 'package:photos/utils/data_util.dart'; import 'package:photos/utils/data_util.dart';
class DeduplicatePage extends StatelessWidget { class DeduplicatePage extends StatefulWidget {
final List<DuplicateFiles> duplicates; final List<DuplicateFiles> duplicates;
DeduplicatePage(this.duplicates, {Key key}) : super(key: key); DeduplicatePage(this.duplicates, {Key key}) : super(key: key);
@override
_DeduplicatePageState createState() => _DeduplicatePageState();
}
class _DeduplicatePageState extends State<DeduplicatePage> {
final kDeleteIconOverlay = Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Colors.transparent,
Colors.black.withOpacity(0.6),
],
stops: const [0.75, 1],
),
),
child: Align(
alignment: Alignment.bottomRight,
child: Padding(
padding: const EdgeInsets.only(right: 8, bottom: 4),
child: Icon(
Icons.delete_forever,
size: 18,
color: Colors.red[700],
),
),
),
);
final Set<File> selectedFiles = <File>{};
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@ -70,10 +102,10 @@ class DeduplicatePage extends StatelessWidget {
} }
return Padding( return Padding(
padding: const EdgeInsets.only(top: 8, bottom: 8), padding: const EdgeInsets.only(top: 8, bottom: 8),
child: _getGridView(duplicates[index - 1]), child: _getGridView(widget.duplicates[index - 1]),
); );
}, },
itemCount: duplicates.length, itemCount: widget.duplicates.length,
shrinkWrap: true, shrinkWrap: true,
), ),
), ),
@ -127,7 +159,12 @@ class DeduplicatePage extends StatelessWidget {
Widget _buildFile(BuildContext context, File file, int index) { Widget _buildFile(BuildContext context, File file, int index) {
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
// TODO if (selectedFiles.contains(file)) {
selectedFiles.remove(file);
} else {
selectedFiles.add(file);
}
setState(() {});
}, },
onLongPress: () { onLongPress: () {
HapticFeedback.lightImpact(); HapticFeedback.lightImpact();
@ -135,23 +172,26 @@ class DeduplicatePage extends StatelessWidget {
child: Container( child: Container(
margin: const EdgeInsets.all(2.0), margin: const EdgeInsets.all(2.0),
decoration: BoxDecoration( decoration: BoxDecoration(
border: index == 0 border: selectedFiles.contains(file)
? null ? Border.all(
: Border.all( width: 3,
width: 0, color: Colors.red[700],
color: Colors.red, )
), : null,
), ),
child: Hero( child: Stack(children: [
tag: "deduplicate_" + file.tag(), Hero(
child: ThumbnailWidget( tag: "deduplicate_" + file.tag(),
file, child: ThumbnailWidget(
diskLoadDeferDuration: kThumbnailDiskLoadDeferDuration, file,
serverLoadDeferDuration: kThumbnailServerLoadDeferDuration, diskLoadDeferDuration: kThumbnailDiskLoadDeferDuration,
shouldShowLivePhotoOverlay: true, serverLoadDeferDuration: kThumbnailServerLoadDeferDuration,
key: Key("deduplicate_" + file.tag()), shouldShowLivePhotoOverlay: true,
key: Key("deduplicate_" + file.tag()),
),
), ),
), selectedFiles.contains(file) ? kDeleteIconOverlay : Container(),
]),
), ),
); );
} }