Skip to content

Commit

Permalink
Intermediate firebase load
Browse files Browse the repository at this point in the history
  • Loading branch information
mayank99 committed Feb 3, 2019
1 parent ac0d122 commit 89ccd53
Show file tree
Hide file tree
Showing 3 changed files with 187 additions and 155 deletions.
220 changes: 110 additions & 110 deletions instarip/lib/gallery.dart
@@ -1,126 +1,126 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:photo_view/photo_view.dart';
import 'package:instarip/homepage.dart';
import 'package:instarip/authentication.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
// import 'package:firebase_auth/firebase_auth.dart';
// import 'package:firebase_storage/firebase_storage.dart';
// import 'package:flutter/material.dart';
// import 'package:photo_view/photo_view.dart';
// import 'package:instarip/homepage.dart';
// import 'package:instarip/authentication.dart';
// import 'package:cloud_firestore/cloud_firestore.dart';

class GalleryPage extends StatefulWidget {
final String title;
final Folder folder;
// class GalleryPage extends StatefulWidget {
// final String title;
// final Folder folder;

GalleryPage({Key key, this.title, this.folder}) : super(key: key);
// GalleryPage({Key key, this.title, this.folder}) : super(key: key);

@override
_GalleryPageState createState() => _GalleryPageState();
}
// @override
// _GalleryPageState createState() => _GalleryPageState();
// }

class _GalleryPageState extends State<GalleryPage> {
// class _GalleryPageState extends State<GalleryPage> {

var _photos = [];
// var _photos = [];

// gets file names for all photos under the folder
getPhotos() async {
var photos = [];
var photoDocs = await Firestore.instance
.collection('users/${widget.folder.uid}/folders/${widget.folder.name}/photos')
.getDocuments();
photoDocs.documents.forEach((snapshot) async {
var url = await FirebaseStorage.instance
.ref()
.child(widget.folder.uid)
.child(snapshot.documentID)
.getDownloadURL();
photos.add(url.toString());
setState(() {
_photos = photos;
});
});
}
// // gets file names for all photos under the folder
// getPhotos() async {
// var photos = [];
// var photoDocs = await Firestore.instance
// .collection('users/${widget.folder.uid}/folders/${widget.folder.name}/photos')
// .getDocuments();
// photoDocs.documents.forEach((snapshot) async {
// var url = await FirebaseStorage.instance
// .ref()
// .child(widget.folder.uid)
// .child(snapshot.documentID)
// .getDownloadURL();
// photos.add(url.toString());
// setState(() {
// _photos = photos;
// });
// });
// }

@override
void initState() {
super.initState();
getPhotos();
}
// @override
// void initState() {
// super.initState();
// getPhotos();
// }

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: ImageGrid(_photos),
);
}
}
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// appBar: AppBar(
// title: Text(widget.title),
// ),
// body: ImageGrid(_photos),
// );
// }
// }

List<Widget> _tiles = const <Widget>[
const _ImageTile('https://picsum.photos/200/300/?random'),
const _ImageTile('https://picsum.photos/201/300/?random'),
const _ImageTile('https://picsum.photos/202/300/?random'),
const _ImageTile('https://picsum.photos/203/300/?random'),
const _ImageTile('https://picsum.photos/204/300/?random'),
const _ImageTile('https://picsum.photos/205/300/?random'),
const _ImageTile('https://picsum.photos/206/300/?random'),
const _ImageTile('https://picsum.photos/207/300/?random'),
const _ImageTile('https://picsum.photos/208/300/?random'),
const _ImageTile('https://picsum.photos/209/300/?random'),
];
// List<Widget> _tiles = const <Widget>[
// const _ImageTile('https://picsum.photos/200/300/?random'),
// const _ImageTile('https://picsum.photos/201/300/?random'),
// const _ImageTile('https://picsum.photos/202/300/?random'),
// const _ImageTile('https://picsum.photos/203/300/?random'),
// const _ImageTile('https://picsum.photos/204/300/?random'),
// const _ImageTile('https://picsum.photos/205/300/?random'),
// const _ImageTile('https://picsum.photos/206/300/?random'),
// const _ImageTile('https://picsum.photos/207/300/?random'),
// const _ImageTile('https://picsum.photos/208/300/?random'),
// const _ImageTile('https://picsum.photos/209/300/?random'),
// ];

class ImageGrid extends StatelessWidget {
final photos;
// class ImageGrid extends StatelessWidget {
// final photos;

const ImageGrid(this.photos);
// const ImageGrid(this.photos);

@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(top: 12.0),
child: GridView.count(crossAxisCount: 2, children: _tiles//photos.map((photo) => _ImageTile(photo))
)
);
}
}
// @override
// Widget build(BuildContext context) {
// return Padding(
// padding: const EdgeInsets.only(top: 12.0),
// child: GridView.count(crossAxisCount: 2, children: _tiles//photos.map((photo) => _ImageTile(photo))
// )
// );
// }
// }

class _ImageTile extends StatelessWidget {
const _ImageTile(this.gridImage);
// class _ImageTile extends StatelessWidget {
// const _ImageTile(this.gridImage);

final gridImage;
// final gridImage;

void showPhoto(BuildContext context) {
Navigator.push(context,
MaterialPageRoute<void>(builder: (BuildContext context) {
return Container(
child: PhotoView(
imageProvider: NetworkImage(this.gridImage),
));
}));
}
// void showPhoto(BuildContext context) {
// Navigator.push(context,
// MaterialPageRoute<void>(builder: (BuildContext context) {
// return Container(
// child: PhotoView(
// imageProvider: NetworkImage(this.gridImage),
// ));
// }));
// }

@override
Widget build(BuildContext context) {
return new Card(
color: const Color(0x00000000),
elevation: 3.0,
child: new GestureDetector(
onTap: () {
showPhoto(context);
},
child: Hero(
key: Key(gridImage),
tag: gridImage,
child: new Container(
decoration: new BoxDecoration(
image: new DecorationImage(
image: new NetworkImage(gridImage),
fit: BoxFit.cover,
),
borderRadius: new BorderRadius.all(const Radius.circular(10.0)),
)),
),
),
);
}
}
// @override
// Widget build(BuildContext context) {
// return new Card(
// color: const Color(0x00000000),
// elevation: 3.0,
// child: new GestureDetector(
// onTap: () {
// showPhoto(context);
// },
// child: Hero(
// key: Key(gridImage),
// tag: gridImage,
// child: new Container(
// decoration: new BoxDecoration(
// image: new DecorationImage(
// image: new NetworkImage(gridImage),
// fit: BoxFit.cover,
// ),
// borderRadius: new BorderRadius.all(const Radius.circular(10.0)),
// )),
// ),
// ),
// );
// }
// }
72 changes: 27 additions & 45 deletions instarip/lib/homepage.dart
Expand Up @@ -3,6 +3,7 @@ import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:instarip/gallery.dart';
import 'package:instarip/authentication.dart';
import 'package:instarip/imageservice.dart';

class GridList extends StatefulWidget {
final String uid;
Expand All @@ -15,31 +16,14 @@ class GridList extends StatefulWidget {
}

class GridListState extends State<GridList> {
var _folders = [];
// var _folders = [];
var _loading = false;

@override
void initState() {
super.initState();
getFolders();
}

// gets all the folder data asynchronously
Future<List> getFolders() async {
var folders = [];
var folderDocs = await Firestore.instance
.collection('users/${widget.uid}/folders')
.getDocuments();
folderDocs.documents.forEach((snapshot) async {
var photos = await snapshot.reference.collection('photos').getDocuments();

var preview = photos.documents[0].documentID;

folders.add(Folder(uid: this.widget.uid, name: snapshot.documentID, preview: preview));
});
setState(() {
_folders = folders;
});
return folders;
// imageService.getFolders();
imageService.loading.listen((state) => setState(() => _loading = state));
}

@override
Expand All @@ -58,17 +42,22 @@ class GridListState extends State<GridList> {
child: SafeArea(
top: false,
bottom: false,
child: FutureBuilder<List>(
future: getFolders(),
child: FutureBuilder(
future: imageService.getFolders(),
builder: (context, snapshot) {
return GridView.count(
crossAxisCount: 2,
mainAxisSpacing: 4.0,
crossAxisSpacing: 4.0,
padding: const EdgeInsets.all(4.0),
children: snapshot.data
.map((folder) => GridPhotoItem(folder: folder))
.toList());
if (snapshot.hasData) {
print(snapshot.data);
List<GridPhotoItem> grid = List.from(snapshot.data.map((folder) => GridPhotoItem(folder: folder)));
return GridView.count(
crossAxisCount: 2,
mainAxisSpacing: 4.0,
crossAxisSpacing: 4.0,
padding: const EdgeInsets.all(4.0),
children: grid
);
} else {
return Center(child: CircularProgressIndicator());
}
}
)))
]));
Expand Down Expand Up @@ -99,7 +88,7 @@ class GridPhotoItemState extends State<GridPhotoItem> {
var url = await FirebaseStorage.instance
.ref()
.child(this.widget.folder.uid)
.child(this.widget.folder.preview)
.child(this.widget.folder.photos.last)
.getDownloadURL();
print(url);
setState(() {
Expand All @@ -113,14 +102,14 @@ class GridPhotoItemState extends State<GridPhotoItem> {
final Widget image = GestureDetector(
onTap: () {
// showPhoto(context);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => GalleryPage(title: 'InstaRip', folder: this.widget.folder)));
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => GalleryPage(title: 'InstaRip', folder: this.widget.folder)));
},
child: Hero(
key: Key(widget.folder.preview),
tag: widget.folder.preview,
key: Key(widget.folder.name),
tag: widget.folder.name,
child: Image.network(
this.imageUrl,
fit: BoxFit.cover,
Expand Down Expand Up @@ -155,10 +144,3 @@ class _GridTitleText extends StatelessWidget {
);
}
}

class Folder {
Folder({this.uid, this.preview, this.name});
final String uid;
final String preview;
final String name;
}

0 comments on commit 89ccd53

Please sign in to comment.