Loading android/app/src/main/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.stamped"> <uses-permission android:name="android.permission.INTERNET"/> <application android:label="stamped" android:name="${applicationName}" Loading lib/common/widget/cached_image_builder.dart 0 → 100644 +26 −0 Original line number Diff line number Diff line import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; class CachedImageBuilder extends StatelessWidget { final String _url; final BoxFit? fit; final ProgressIndicator? progressIndicator; const CachedImageBuilder({super.key, required url, this.fit, this.progressIndicator}) : _url = url; @override Widget build(BuildContext context) { return CachedNetworkImage( imageUrl: _url, placeholder: (context, url) => Center( child: SizedBox( width: 50, // adjust width height: 50, // adjust height child: progressIndicator ?? CircularProgressIndicator(), ), ), errorWidget: (context, url, error) => Icon(Icons.error), fit: fit ?? BoxFit.cover, ); } } lib/pages/collections/postcard_detail.dart +6 −3 Original line number Diff line number Diff line import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:stamped/common/widget/page_template.dart'; import 'package:stamped/data/models/postcard.dart'; Loading @@ -20,7 +21,7 @@ class PostcardDetail extends StatelessWidget { child: Container( decoration: BoxDecoration( image: DecorationImage( image: NetworkImage(postcard.imagePath), image: CachedNetworkImageProvider(postcard.imagePath), fit: BoxFit.cover, ), ), Loading @@ -31,12 +32,14 @@ class PostcardDetail extends StatelessWidget { Route _createRoute() { return PageRouteBuilder( pageBuilder: (context, animation, secondaryAnimation) => PostcardDetailBack(postcard: postcard), pageBuilder: (context, animation, secondaryAnimation) => PostcardDetailBack(postcard: postcard), transitionsBuilder: (context, animation, secondaryAnimation, child) { const begin = Offset(1.0, 0); const end = Offset.zero; var curve = Curves.easeInOutCubic; var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve)); var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve)); final offsetAnimation = animation.drive(tween); return SlideTransition( position: offsetAnimation, Loading lib/pages/collections/postcard_tile.dart +3 −7 Original line number Diff line number Diff line import 'package:flutter/material.dart'; import 'package:stamped/common/service/ioc_container.dart'; import 'package:stamped/common/widget/cached_image_builder.dart'; import 'package:stamped/common/widget/future_builder_handler.dart'; import 'package:stamped/data/models/postcard.dart'; import 'package:stamped/pages/collections/postcard_detail.dart'; Loading Loading @@ -52,13 +53,8 @@ class PostcardTile extends StatelessWidget { Expanded _imageBuilder() { return Expanded( child: Container( decoration: BoxDecoration( image: DecorationImage( image: NetworkImage(postcard.imagePath), fit: BoxFit.cover, ), ), child: CachedImageBuilder( url: postcard.imagePath, ), ); } Loading lib/pages/collections/stamp_tile.dart +2 −1 Original line number Diff line number Diff line import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:stamped/pages/collections/stamp_detail.dart'; Loading Loading @@ -30,7 +31,7 @@ class StampTile extends StatelessWidget { width: width ?? MediaQuery.of(context).size.width / 2 - 40, decoration: BoxDecoration( image: DecorationImage( image: NetworkImage(url), image: CachedNetworkImageProvider(url), fit: BoxFit.contain, ), ), Loading Loading
android/app/src/main/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.stamped"> <uses-permission android:name="android.permission.INTERNET"/> <application android:label="stamped" android:name="${applicationName}" Loading
lib/common/widget/cached_image_builder.dart 0 → 100644 +26 −0 Original line number Diff line number Diff line import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; class CachedImageBuilder extends StatelessWidget { final String _url; final BoxFit? fit; final ProgressIndicator? progressIndicator; const CachedImageBuilder({super.key, required url, this.fit, this.progressIndicator}) : _url = url; @override Widget build(BuildContext context) { return CachedNetworkImage( imageUrl: _url, placeholder: (context, url) => Center( child: SizedBox( width: 50, // adjust width height: 50, // adjust height child: progressIndicator ?? CircularProgressIndicator(), ), ), errorWidget: (context, url, error) => Icon(Icons.error), fit: fit ?? BoxFit.cover, ); } }
lib/pages/collections/postcard_detail.dart +6 −3 Original line number Diff line number Diff line import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:stamped/common/widget/page_template.dart'; import 'package:stamped/data/models/postcard.dart'; Loading @@ -20,7 +21,7 @@ class PostcardDetail extends StatelessWidget { child: Container( decoration: BoxDecoration( image: DecorationImage( image: NetworkImage(postcard.imagePath), image: CachedNetworkImageProvider(postcard.imagePath), fit: BoxFit.cover, ), ), Loading @@ -31,12 +32,14 @@ class PostcardDetail extends StatelessWidget { Route _createRoute() { return PageRouteBuilder( pageBuilder: (context, animation, secondaryAnimation) => PostcardDetailBack(postcard: postcard), pageBuilder: (context, animation, secondaryAnimation) => PostcardDetailBack(postcard: postcard), transitionsBuilder: (context, animation, secondaryAnimation, child) { const begin = Offset(1.0, 0); const end = Offset.zero; var curve = Curves.easeInOutCubic; var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve)); var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve)); final offsetAnimation = animation.drive(tween); return SlideTransition( position: offsetAnimation, Loading
lib/pages/collections/postcard_tile.dart +3 −7 Original line number Diff line number Diff line import 'package:flutter/material.dart'; import 'package:stamped/common/service/ioc_container.dart'; import 'package:stamped/common/widget/cached_image_builder.dart'; import 'package:stamped/common/widget/future_builder_handler.dart'; import 'package:stamped/data/models/postcard.dart'; import 'package:stamped/pages/collections/postcard_detail.dart'; Loading Loading @@ -52,13 +53,8 @@ class PostcardTile extends StatelessWidget { Expanded _imageBuilder() { return Expanded( child: Container( decoration: BoxDecoration( image: DecorationImage( image: NetworkImage(postcard.imagePath), fit: BoxFit.cover, ), ), child: CachedImageBuilder( url: postcard.imagePath, ), ); } Loading
lib/pages/collections/stamp_tile.dart +2 −1 Original line number Diff line number Diff line import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:stamped/pages/collections/stamp_detail.dart'; Loading Loading @@ -30,7 +31,7 @@ class StampTile extends StatelessWidget { width: width ?? MediaQuery.of(context).size.width / 2 - 40, decoration: BoxDecoration( image: DecorationImage( image: NetworkImage(url), image: CachedNetworkImageProvider(url), fit: BoxFit.contain, ), ), Loading