Skip to content
This repository has been archived by the owner on Feb 19, 2024. It is now read-only.

Commit

Permalink
Merge pull request #102 from theTaoTeam/curruserjars
Browse files Browse the repository at this point in the history
fix(home page jar, jar scoped model, add jar): rewrite home page jar …
  • Loading branch information
Scott Clampet authored Apr 26, 2019
2 parents 87aa1b5 + 75021d9 commit 83f4eb6
Show file tree
Hide file tree
Showing 7 changed files with 234 additions and 279 deletions.
113 changes: 41 additions & 72 deletions fude_app/lib/pages/home/home.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,26 +20,18 @@ class HomePage extends StatefulWidget {
}

class _HomePageState extends State<HomePage> {
PageController controller;
@override
initState() {
print('home init state. CurrUserEmail: ${widget.model.currUserEmail}');
widget.model.fetchAllUserJars(widget.model.currUserEmail);
super.initState();
controller = PageController(
keepPage: false,
viewportFraction: .85,
);
}

@override
dispose() {
controller.dispose();
super.dispose();
}

@override
Widget build(BuildContext context) {
final double width = MediaQuery.of(context).size.width;
final double height = MediaQuery.of(context).size.height;
// print('LIST in BUILD ${widget.model.usersJars[0].runtimeType}');

return Scaffold(
appBar: AppBar(
Expand Down Expand Up @@ -93,69 +85,46 @@ class _HomePageState extends State<HomePage> {
child: Column(
mainAxisSize: MainAxisSize.max,
children: <Widget>[
StreamBuilder(
stream: Firestore.instance
.collection('jars')
.where('owners', arrayContains: widget.model.currUserEmail)
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
print('no jars');
return Center(
child: CircularProgressIndicator(),
);
} else {
return Container(
margin: EdgeInsets.fromLTRB(0, height * 0.1, 0, 0),
width: width,
height: height * 0.55,
child: PageTransformer(
pageViewBuilder: (context, visibilityResolver) {
return PageView.builder(
reverse: true,
pageSnapping: true,
controller: PageController(
viewportFraction: 0.88,
initialPage: snapshot.data.documents.length),
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
final PageVisibility pageVisibility =
visibilityResolver
.resolvePageVisibility(index);

return snapshot.data.documents[index]['title'] !=
'Add Jar'
? GestureDetector(
onTap: () {
widget.model.getJarBySelectedId(snapshot
.data.documents[index].documentID);
Navigator.pushReplacement(
context,
PageTransition(
curve: Curves.linear,
type: PageTransitionType.fade,
child: JarPage(model: widget.model),
),
);
},
child: HomePageJar(
model: widget.model,
jar: snapshot.data.documents[index],
pageVisibility: pageVisibility,
widget.model.usersJars.length == 0
? Center(
child: CircularProgressIndicator(),
)
: Container(
margin: EdgeInsets.fromLTRB(0, height * 0.1, 0, 0),
width: width,
height: height * 0.55,
child: PageView.builder(
reverse: false,
pageSnapping: true,
controller: PageController(
keepPage: false,
viewportFraction: 0.88,
initialPage: 0),
itemCount: widget.model.usersJars.length,
itemBuilder: (context, index) {
return index == 0
? HomePageJar(
model: widget.model, title: 'Add Jar')
: GestureDetector(
onTap: () {
widget.model.getJarBySelectedId(widget
.model.usersJars[index].documentID);
Navigator.push(
context,
PageTransition(
curve: Curves.linear,
type: PageTransitionType.downToUp,
child: JarPage(model: widget.model),
),
)
: HomePageJar(
model: widget.model,
jar: snapshot.data.documents[index],
pageVisibility: pageVisibility,
);
},
);
},
),
);
}
}),
},
child: HomePageJar(
model: widget.model,
jar: widget.model.usersJars[index],
title: null),
);
}),
)
],
),
),
Expand Down
63 changes: 27 additions & 36 deletions fude_app/lib/pages/home/home_page_jar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,24 @@ import 'package:fude/pages/jars/jar_edit.dart';
import 'package:fude/pages/jars/jar_add.dart';

class HomePageJar extends StatelessWidget {
HomePageJar({
@required this.model,
@required this.jar,
@required this.pageVisibility,
});

final DocumentSnapshot jar;
final MainModel model;
final PageVisibility pageVisibility;
final String title;

HomePageJar(
{@required this.model, this.jar, this.pageVisibility, this.title});

Widget _applyTextEffects({
@required double translationFactor,
@required Widget child,
}) {
final double xTranslation = pageVisibility.pagePosition * translationFactor;

return Opacity(
opacity: pageVisibility.visibleFraction,
opacity: 1,
child: Transform(
alignment: FractionalOffset.topLeft,
transform: Matrix4.translationValues(
xTranslation,
0.0,
0.0,
0.0,
),
Expand All @@ -45,7 +41,7 @@ class HomePageJar extends StatelessWidget {
child: Padding(
padding: EdgeInsets.only(top: 16.0),
child: Text(
jar['title'].toUpperCase(),
title == null ? jar['title'].toUpperCase() : 'ADD JAR',
overflow: TextOverflow.ellipsis,
style: Theme.of(context).textTheme.subhead,
textAlign: TextAlign.left,
Expand All @@ -58,7 +54,7 @@ class HomePageJar extends StatelessWidget {
bottom: 56.0,
left: 28.0,
right: 28.0,
child: jar['title'] != 'Add Jar'
child: title == null
? Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Expand All @@ -79,8 +75,8 @@ class HomePageJar extends StatelessWidget {
iconSize: 26,
color: Theme.of(context).textTheme.subhead.color,
onPressed: () {
print('jar pressed, ${jar.documentID}');
model.getJarBySelectedId(jar.documentID);
print('jar pressed, ${jar['id']}');
model.getJarBySelectedId(jar['id']);
Navigator.push(
context,
PageTransition(
Expand Down Expand Up @@ -114,7 +110,7 @@ class HomePageJar extends StatelessWidget {
),
),
Text(
jar['title'].toUpperCase(),
title == null ? jar['title'].toUpperCase() : 'ADD JAR',
style: TextStyle(
color: model.darkTheme
? Color.fromRGBO(40, 40, 40, 1)
Expand All @@ -130,7 +126,7 @@ class HomePageJar extends StatelessWidget {

@override
Widget build(BuildContext context) {
var image = jar['title'] != 'Add Jar'
var image = title == null
? ClipRRect(
borderRadius: BorderRadius.circular(30.0),
child: Image.network(
Expand All @@ -139,7 +135,7 @@ class HomePageJar extends StatelessWidget {
: 'https://firebasestorage.googleapis.com/v0/b/fude-app.appspot.com/o/Scoot-01.png?alt=media&token=53fc26de-7c61-4076-a0cb-f75487779604',
fit: BoxFit.cover,
alignment: FractionalOffset(
0.5 + (pageVisibility.pagePosition / 3),
0.5,
0.5,
),
),
Expand All @@ -148,14 +144,12 @@ class HomePageJar extends StatelessWidget {

var imageOverlayGradient = DecoratedBox(
decoration: BoxDecoration(
color: jar['title'] == 'Add Jar'
? Theme.of(context).secondaryHeaderColor
: null,
gradient: jar['title'] != 'Add Jar'
color: title != null ? Theme.of(context).secondaryHeaderColor : null,
gradient: title == null
? LinearGradient(
begin: FractionalOffset.topCenter,
end: FractionalOffset.bottomCenter,
colors: jar['title'] != 'Add Jar'
colors: title == null
? !model.darkTheme
? [
Color.fromRGBO(242, 242, 242, 0),
Expand All @@ -176,20 +170,17 @@ class HomePageJar extends StatelessWidget {
vertical: 26.0,
horizontal: 10.0,
),
child: Hero(
tag: jar['title'],
child: Material(
elevation: model.darkTheme ? 4.0 : 8,
shadowColor: Theme.of(context).secondaryHeaderColor,
borderRadius: BorderRadius.all(Radius.circular(30)),
child: Stack(
fit: StackFit.expand,
children: [
image,
imageOverlayGradient,
_buildTextContainer(context),
],
),
child: Material(
elevation: model.darkTheme ? 4.0 : 8,
shadowColor: Theme.of(context).secondaryHeaderColor,
borderRadius: BorderRadius.all(Radius.circular(30)),
child: Stack(
fit: StackFit.expand,
children: [
image,
imageOverlayGradient,
_buildTextContainer(context),
],
),
),
);
Expand Down
7 changes: 2 additions & 5 deletions fude_app/lib/pages/jars/category_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,23 @@ class CategoryCard extends StatelessWidget {
@required this.model,
@required this.category,
@required this.index,
@required this.pageVisibility,
});

final String category;
final int index;
final MainModel model;
final PageVisibility pageVisibility;

Widget _applyTextEffects({
@required double translationFactor,
@required Widget child,
}) {
final double xTranslation = pageVisibility.pagePosition * translationFactor;

return Opacity(
opacity: pageVisibility.visibleFraction,
opacity: 1,
child: Transform(
alignment: FractionalOffset.topLeft,
transform: Matrix4.translationValues(
xTranslation,
0.0,
0.0,
0.0,
),
Expand Down
Loading

0 comments on commit 83f4eb6

Please sign in to comment.