Fix some issues

This commit is contained in:
Vishnu Mohandas 2020-04-05 20:15:04 +05:30
parent 7f3ab5894b
commit 80655c61d9
7 changed files with 55 additions and 36 deletions

View file

@ -95,12 +95,14 @@ class DatabaseHelper {
.update(table, row, where: '$columnHash = ?', whereArgs: [hash]); .update(table, row, where: '$columnHash = ?', whereArgs: [hash]);
} }
Future<bool> containsPath(String path) async { Future<Photo> getPhotoByUrl(String url) async {
Database db = await instance.database; Database db = await instance.database;
return (await db var rows = await db.query(table, where: '$columnUrl =?', whereArgs: [url]);
.query(table, where: '$columnLocalPath =?', whereArgs: [path])) if (rows.length > 0) {
.length > return Photo.fromRow(rows[0]);
0; } else {
throw ("No cached photo");
}
} }
Future<bool> containsPhotoHash(String hash) async { Future<bool> containsPhotoHash(String hash) async {

View file

@ -20,10 +20,13 @@ void main() async {
runApp(MyApp()); runApp(MyApp());
await provider.refreshGalleryList(); await provider.refreshGalleryList();
provider.list[0].assetList.then((assets) { if (provider.list.length > 0) {
var photoSyncManager = PhotoSyncManager(assets); provider.list[0].assetList.then((assets) {
photoSyncManager.init(); init(assets);
}); });
} else {
init(List<AssetEntity>());
}
} }
Future<void> init(List<AssetEntity> assets) async { Future<void> init(List<AssetEntity> assets) async {

View file

@ -34,10 +34,10 @@ class Photo {
var file = (await asset.originFile); var file = (await asset.originFile);
photo.localPath = file.path; photo.localPath = file.path;
photo.hash = getHash(file); photo.hash = getHash(file);
return setThumbnail(photo).then((value) => photo); return setThumbnail(photo);
} }
static Future<void> setThumbnail(Photo photo) async { static Future<Photo> setThumbnail(Photo photo) async {
var externalPath = (await getApplicationDocumentsDirectory()).path; var externalPath = (await getApplicationDocumentsDirectory()).path;
var thumbnailPath = var thumbnailPath =
externalPath + "/photos/thumbnails/" + photo.hash + ".thumbnail"; externalPath + "/photos/thumbnails/" + photo.hash + ".thumbnail";

View file

@ -115,7 +115,7 @@ class PhotoSyncManager {
.download(Constants.ENDPOINT + photo.url, localPath) .download(Constants.ENDPOINT + photo.url, localPath)
.catchError(_onError); .catchError(_onError);
photo.localPath = localPath; photo.localPath = localPath;
Photo.setThumbnail(photo); await Photo.setThumbnail(photo);
await DatabaseHelper.instance.insertPhoto(photo); await DatabaseHelper.instance.insertPhoto(photo);
PhotoLoader.instance.reloadPhotos(); PhotoLoader.instance.reloadPhotos();
} }

View file

@ -5,17 +5,11 @@ import 'package:myapp/core/lru_map.dart';
import 'package:myapp/models/photo.dart'; import 'package:myapp/models/photo.dart';
import 'package:share_extend/share_extend.dart'; import 'package:share_extend/share_extend.dart';
class DetailPage extends StatefulWidget { class DetailPage extends StatelessWidget {
final Photo photo; final Photo photo;
final String url;
const DetailPage({Key key, this.photo, this.url}) : super(key: key); const DetailPage(this.photo, {Key key}) : super(key: key);
@override
_DetailPageState createState() => _DetailPageState();
}
class _DetailPageState extends State<DetailPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@ -25,7 +19,7 @@ class _DetailPageState extends State<DetailPage> {
IconButton( IconButton(
icon: Icon(Icons.share), icon: Icon(Icons.share),
onPressed: () { onPressed: () {
ShareExtend.share(widget.photo.localPath, "image"); ShareExtend.share(photo.localPath, "image");
}, },
) )
], ],
@ -43,12 +37,12 @@ class _DetailPageState extends State<DetailPage> {
onVerticalDragUpdate: (details) { onVerticalDragUpdate: (details) {
Navigator.pop(context); Navigator.pop(context);
}, },
child: ImageLruCache.getData(widget.photo.localPath) == null child: ImageLruCache.getData(photo.localPath) == null
? Image.file( ? Image.file(
File(widget.photo.localPath), File(photo.localPath),
filterQuality: FilterQuality.low, filterQuality: FilterQuality.low,
) )
: ImageLruCache.getData(widget.photo.localPath), : ImageLruCache.getData(photo.localPath),
); );
} }
} }

View file

@ -2,9 +2,11 @@ import 'package:flutter/material.dart';
import 'package:myapp/db/db_helper.dart'; import 'package:myapp/db/db_helper.dart';
import 'package:myapp/face_search_manager.dart'; import 'package:myapp/face_search_manager.dart';
import 'package:myapp/models/face.dart'; import 'package:myapp/models/face.dart';
import 'package:myapp/models/photo.dart';
import 'package:myapp/models/search_result.dart'; import 'package:myapp/models/search_result.dart';
import 'package:myapp/ui/circular_network_image_widget.dart'; import 'package:myapp/ui/circular_network_image_widget.dart';
import 'package:myapp/core/constants.dart' as Constants; import 'package:myapp/core/constants.dart' as Constants;
import 'package:myapp/ui/image_widget.dart';
import 'package:myapp/ui/network_image_detail_page.dart'; import 'package:myapp/ui/network_image_detail_page.dart';
import 'detail_page.dart'; import 'detail_page.dart';
@ -42,8 +44,8 @@ class FaceSearchResultsPage extends StatelessWidget {
builder: (context, snapshot) { builder: (context, snapshot) {
if (snapshot.hasData) { if (snapshot.hasData) {
return GridView.builder( return GridView.builder(
itemBuilder: (_, index) => _buildItem( itemBuilder: (_, index) =>
context, Constants.ENDPOINT + snapshot.data[index].url), _buildItem(context, snapshot.data[index].url),
itemCount: snapshot.data.length, itemCount: snapshot.data.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 4, crossAxisCount: 4,
@ -57,18 +59,38 @@ class FaceSearchResultsPage extends StatelessWidget {
Widget _buildItem(BuildContext context, String url) { Widget _buildItem(BuildContext context, String url) {
return GestureDetector( return GestureDetector(
onTap: () { onTap: () async {
_routeToDetailPage(url, context); _routeToDetailPage(url, context);
}, },
child: Container( child: _getImage(url),
margin: EdgeInsets.all(2),
child: Image.network(url, height: 124, width: 124, fit: BoxFit.cover),
),
); );
} }
void _routeToDetailPage(String url, BuildContext context) { Widget _getImage(String url) {
final page = NetworkImageDetailPage(url); return FutureBuilder<Photo>(
future: DatabaseHelper.instance.getPhotoByUrl(url),
builder: (_, snapshot) {
if (snapshot.hasData) {
return ImageWidget(path: snapshot.data.thumbnailPath);
} else if (snapshot.hasError) {
return Container(
margin: EdgeInsets.all(2),
child: Image.network(Constants.ENDPOINT + url,
height: 124, width: 124, fit: BoxFit.cover),
);
} else {
return Text("Loading...");
}
},
);
}
void _routeToDetailPage(String url, BuildContext context) async {
Widget page = NetworkImageDetailPage(url);
var photo = await DatabaseHelper.instance.getPhotoByUrl(url);
if (photo != null) {
page = DetailPage(photo);
}
Navigator.of(context).push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (BuildContext context) { builder: (BuildContext context) {

View file

@ -74,9 +74,7 @@ class _GalleryState extends State<Gallery> {
} }
void routeToDetailPage(Photo photo, BuildContext context) { void routeToDetailPage(Photo photo, BuildContext context) {
final page = DetailPage( final page = DetailPage(photo);
photo: photo,
);
Navigator.of(context).push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (BuildContext context) { builder: (BuildContext context) {