71 lines
1.9 KiB
Dart
71 lines
1.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:photo_gallery/photo_gallery.dart';
|
|
import 'package:transparent_image/transparent_image.dart';
|
|
import '/trash/viewer_page.dart';
|
|
|
|
class AlbumPage extends StatefulWidget {
|
|
final Album album;
|
|
|
|
AlbumPage(Album album) : album = album;
|
|
|
|
@override
|
|
State<StatefulWidget> createState() => AlbumPageState();
|
|
}
|
|
|
|
class AlbumPageState extends State<AlbumPage> {
|
|
List<Medium>? _media;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
initAsync();
|
|
}
|
|
|
|
void initAsync() async {
|
|
MediaPage mediaPage = await widget.album.listMedia();
|
|
setState(() {
|
|
_media = mediaPage.items;
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(
|
|
home: Scaffold(
|
|
appBar: AppBar(
|
|
leading: IconButton(
|
|
icon: const Icon(Icons.arrow_back_ios),
|
|
onPressed: () => Navigator.of(context).pop(),
|
|
),
|
|
title: Text(widget.album.name ?? "Unnamed Album"),
|
|
),
|
|
body: GridView.count(
|
|
crossAxisCount: 4,
|
|
mainAxisSpacing: 1.0,
|
|
crossAxisSpacing: 1.0,
|
|
children: <Widget>[
|
|
...?_media?.map(
|
|
(medium) => GestureDetector(
|
|
onTap: () => Navigator.of(context).push(MaterialPageRoute(
|
|
builder: (context) => ViewerPage(medium))),
|
|
child: Container(
|
|
color: Colors.grey[300],
|
|
child: FadeInImage(
|
|
fit: BoxFit.cover,
|
|
placeholder: MemoryImage(kTransparentImage),
|
|
image: ThumbnailProvider(
|
|
mediumId: medium.id,
|
|
mediumType: medium.mediumType,
|
|
highQuality: true,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|