Select file on tap
This commit is contained in:
parent
a76fd13d0f
commit
06efe724d9
|
@ -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(),
|
||||||
|
]),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue