Add some interaction to go back

This commit is contained in:
Vishnu Mohandas 2020-03-28 01:24:24 +05:30
parent e452555632
commit 22d3f2c9ed
5 changed files with 65 additions and 28 deletions

View file

@ -3,6 +3,8 @@ PODS:
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- local_image_provider (0.0.1):
- Flutter
- path_provider (0.0.1):
- Flutter
- path_provider_macos (0.0.1):
@ -21,6 +23,7 @@ PODS:
DEPENDENCIES:
- Flutter (from `Flutter`)
- local_image_provider (from `.symlinks/plugins/local_image_provider/ios`)
- path_provider (from `.symlinks/plugins/path_provider/ios`)
- path_provider_macos (from `.symlinks/plugins/path_provider_macos/ios`)
- photo_manager (from `.symlinks/plugins/photo_manager/ios`)
@ -36,6 +39,8 @@ SPEC REPOS:
EXTERNAL SOURCES:
Flutter:
:path: Flutter
local_image_provider:
:path: ".symlinks/plugins/local_image_provider/ios"
path_provider:
:path: ".symlinks/plugins/path_provider/ios"
path_provider_macos:
@ -54,6 +59,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
local_image_provider: cf979b81bc1cacc81867d3511a1b6b7216411e93
path_provider: fb74bd0465e96b594bb3b5088ee4a4e7bb1f2a9d
path_provider_macos: f760a3c5b04357c380e2fddb6f9db6f3015897e0
photo_manager: f7c619c2cc8c2adb8d85c63363babac477de9c67

View file

@ -7,6 +7,7 @@ import 'package:myapp/photo_loader.dart';
import 'package:myapp/photo_provider.dart';
import 'package:myapp/photo_sync_manager.dart';
import 'package:myapp/ui/detail_page.dart';
import 'package:myapp/ui/loading_widget.dart';
import 'package:provider/provider.dart';
import 'package:myapp/ui/gallery_page.dart';
@ -38,7 +39,7 @@ class MyApp extends StatelessWidget {
}
class MyApp2 extends StatelessWidget {
final PhotoLoader photoLoader = PhotoLoader();
final PhotoLoader photoLoader = PhotoLoader.instance;
@override
Widget build(BuildContext context) {
@ -48,16 +49,18 @@ class MyApp2 extends StatelessWidget {
builder: (context, snapshot) {
Widget body;
if (snapshot.hasData) {
body = GridView.builder(
body = ChangeNotifierProvider<PhotoLoader>.value(
value: photoLoader,
child: GridView.builder(
itemBuilder: _buildItem,
itemCount: snapshot.data.length,
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4),
);
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 4),
));
} else if (snapshot.hasError) {
body = Text("Error!");
} else {
body = Text("Loading");
body = loadWidget;
}
return MaterialApp(
title: title,
@ -72,6 +75,7 @@ class MyApp2 extends StatelessWidget {
}
Widget _buildItem(BuildContext context, int index) {
logger.i("Building item");
var file = File(photoLoader.getPhotos()[index].localPath);
return GestureDetector(
onTap: () async {

View file

@ -1,11 +1,15 @@
import 'package:flutter/material.dart';
import 'package:logger/logger.dart';
import 'package:myapp/db/db_helper.dart';
import 'package:myapp/models/photo.dart';
class PhotoLoader {
class PhotoLoader extends ChangeNotifier {
final logger = Logger();
List<Photo> _photos;
PhotoLoader._privateConstructor();
static final PhotoLoader instance = PhotoLoader._privateConstructor();
List<Photo> getPhotos() {
return _photos;
}
@ -16,4 +20,10 @@ class PhotoLoader {
logger.i("Imported photo size: " + _photos.length.toString());
return _photos;
}
void reloadPhotos() async {
await loadPhotos();
logger.i("Reloading...");
notifyListeners();
}
}

View file

@ -1,5 +1,6 @@
import 'package:logger/logger.dart';
import 'package:myapp/db/db_helper.dart';
import 'package:myapp/photo_loader.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:photo_manager/photo_manager.dart';
@ -10,7 +11,7 @@ import 'package:myapp/models/photo.dart';
class PhotoSyncManager {
final logger = Logger();
final dio = Dio();
final endpoint = "http://192.168.0.106:8080";
final endpoint = "http://172.20.10.6:8080";
final user = "umbu";
static final lastSyncTimestampKey = "last_sync_timestamp_0";
@ -39,15 +40,19 @@ class PhotoSyncManager {
assets.sort((first, second) => second
.modifiedDateTime.millisecondsSinceEpoch
.compareTo(first.modifiedDateTime.millisecondsSinceEpoch));
var uploadedAssetCount = 0;
for (AssetEntity asset in assets) {
DatabaseHelper.instance
.containsPath((await asset.originFile).path)
.then((containsPath) async {
// TODO: Fix me
if (uploadedAssetCount == 100) {
return;
}
var containsPath = await DatabaseHelper.instance
.containsPath((await asset.originFile).path);
if (!containsPath) {
var response = await _uploadFile(asset);
prefs.setInt(lastSyncTimestampKey, response.syncTimestamp);
uploadedAssetCount++;
}
});
}
}
@ -56,7 +61,8 @@ class PhotoSyncManager {
"user": user,
"lastSyncTimestamp": lastSyncTimestamp
});
var externalPath = (await getExternalStorageDirectory()).path;
logger.i(response.toString());
var externalPath = (await getApplicationDocumentsDirectory()).path;
logger.i("External path: " + externalPath);
var path = externalPath + "/photos/";
@ -67,7 +73,7 @@ class PhotoSyncManager {
await dio.download(endpoint + photo.url, path + basename(photo.url));
photo.hash = _getHash(photo);
photo.localPath = path + basename(photo.url);
DatabaseHelper.instance.insertPhoto(photo);
insertPhotoToDB(photo);
prefs.setInt(lastSyncTimestampKey, photo.syncTimestamp);
logger.i("Downloaded " + photo.url + " to " + path);
}
@ -85,7 +91,7 @@ class PhotoSyncManager {
var photo = Photo.fromJson(response.data);
photo.hash = _getHash(photo);
photo.localPath = path;
DatabaseHelper.instance.insertPhoto(photo);
insertPhotoToDB(photo);
return photo;
}
@ -93,4 +99,10 @@ class PhotoSyncManager {
// TODO: Compute hash
return "hash";
}
Future<void> insertPhotoToDB(Photo photo) async {
logger.i("Inserting to DB");
await DatabaseHelper.instance.insertPhoto(photo);
PhotoLoader.instance.reloadPhotos();
}
}

View file

@ -17,19 +17,24 @@ class _DetailPageState extends State<DetailPage> {
return Scaffold(
body: Center(
child: Container(
child: _buildContent(),
child: _buildContent(context),
),
),
);
}
Widget _buildContent() {
return Hero(
Widget _buildContent(BuildContext context) {
return GestureDetector(
onVerticalDragUpdate: (details) {
Navigator.pop(context);
},
child: Hero(
tag: 'photo_' + widget.file.path,
child: Image.file(
widget.file,
filterQuality: FilterQuality.low,
),
),
);
}
}