Fix some issues
This commit is contained in:
parent
7f3ab5894b
commit
80655c61d9
|
@ -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 {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue