ente/lib/ui/detail_page.dart

87 lines
2.5 KiB
Dart
Raw Normal View History

2020-03-24 19:59:36 +00:00
import 'dart:io';
import 'package:flutter/material.dart';
2020-03-28 18:18:27 +00:00
import 'package:myapp/core/lru_map.dart';
2020-03-30 14:28:46 +00:00
import 'package:myapp/models/photo.dart';
2020-04-14 16:49:33 +00:00
import 'package:photo_view/photo_view.dart';
2020-03-30 14:28:46 +00:00
import 'package:share_extend/share_extend.dart';
2020-04-17 08:17:37 +00:00
import 'extents_page_view.dart';
2020-03-24 19:59:36 +00:00
2020-04-17 08:17:37 +00:00
class DetailPage extends StatefulWidget {
final List<Photo> photos;
final int selectedIndex;
2020-03-24 19:59:36 +00:00
2020-04-17 08:17:37 +00:00
DetailPage(this.photos, this.selectedIndex, {Key key}) : super(key: key);
@override
_DetailPageState createState() => _DetailPageState();
}
class _DetailPageState extends State<DetailPage> {
bool _shouldDisableScroll = false;
int _selectedIndex = 0;
2020-03-24 19:59:36 +00:00
@override
Widget build(BuildContext context) {
_selectedIndex = widget.selectedIndex;
var pageController = PageController(initialPage: _selectedIndex);
2020-03-24 19:59:36 +00:00
return Scaffold(
2020-03-30 14:28:46 +00:00
appBar: AppBar(
actions: <Widget>[
IconButton(
icon: Icon(Icons.share),
onPressed: () {
2020-04-17 08:17:37 +00:00
ShareExtend.share(
widget.photos[_selectedIndex].localPath, "image");
2020-03-30 14:28:46 +00:00
},
)
],
),
2020-03-24 19:59:36 +00:00
body: Center(
child: Container(
2020-04-17 08:17:37 +00:00
child: ExtentsPageView.extents(
itemBuilder: (context, index) {
return _buildItem(context, widget.photos[index]);
},
onPageChanged: (int index) {
_selectedIndex = index;
2020-04-17 08:17:37 +00:00
},
physics: _shouldDisableScroll
? NeverScrollableScrollPhysics()
: PageScrollPhysics(),
2020-04-17 10:11:18 +00:00
controller: pageController,
itemCount: widget.photos.length,
2020-04-17 08:17:37 +00:00
),
2020-03-24 19:59:36 +00:00
),
),
);
}
2020-04-17 08:17:37 +00:00
Widget _buildItem(BuildContext context, Photo photo) {
2020-04-14 16:49:33 +00:00
var image = ImageLruCache.getData(photo.localPath) == null
? Image.file(
File(photo.localPath),
filterQuality: FilterQuality.low,
)
: ImageLruCache.getData(photo.localPath);
2020-04-17 08:17:37 +00:00
ValueChanged<PhotoViewScaleState> scaleStateChangedCallback = (value) {
var shouldDisableScroll;
if (value == PhotoViewScaleState.initial) {
shouldDisableScroll = false;
} else {
shouldDisableScroll = true;
}
if (shouldDisableScroll != _shouldDisableScroll) {
setState(() {
_shouldDisableScroll = shouldDisableScroll;
});
}
};
return PhotoView(
imageProvider: image.image,
scaleStateChangedCallback: scaleStateChangedCallback,
2020-04-17 20:44:13 +00:00
minScale: PhotoViewComputedScale.contained,
2020-04-17 08:17:37 +00:00
);
2020-03-24 19:59:36 +00:00
}
}