Compare commits

..

2 Commits

Author SHA1 Message Date
Frédérik Benoist c307ed88b6 refonte homepage from wishlist 2023-02-26 17:29:42 +01:00
Frédérik Benoist af9a6507f5 Ajout log + sign_in 2023-02-26 15:15:02 +01:00
11 changed files with 758 additions and 1160 deletions

BIN
assets/images/logo_dark.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -10,11 +10,13 @@ class WishlistModel {
late int sale; late int sale;
late int stock; late int stock;
late String location; late String location;
late int photo;
WishlistModel( WishlistModel(
{required this.id, {required this.id,
required this.name, required this.name,
required this.price, required this.price,
required this.photo,
required this.image, required this.image,
required this.rating, required this.rating,
required this.review, required this.review,
@ -26,28 +28,21 @@ class WishlistModel {
List<WishlistModel> wishlistData = [ List<WishlistModel> wishlistData = [
WishlistModel( WishlistModel(
id: 1, id: 1,
name: 'IWO 8 Smart Watch Apple iWatch Mirror For Android iPhone', name: "Villeneuve d'asc ONE-STEP",
price: 62, price: 62,
image: GLOBAL_URL + '/apps/ecommerce/product/46.jpg', photo: 1,
image:
'https://mp4.ikksgroup.com/photos/1/0/1/8/4/4/101844-thumbnail.JPG',
rating: 5, rating: 5,
review: 42, review: 42,
sale: 69, sale: 4,
stock: 5, stock: 5,
location: 'Brooklyn'), location: "Villeneuve d'asc"),
WishlistModel( WishlistModel(
id: 2, id: 2,
name: 'Asus Rog Phone 3 Rogphone III Ram 12Gb 512Gb Snapdragon 865+ Plus',
price: 1152,
image: GLOBAL_URL + '/apps/ecommerce/product/48.jpg',
rating: 5,
review: 1,
sale: 2,
stock: 22,
location: 'Brooklyn'),
WishlistModel(
id: 3,
name: 'BARDI Smart PLUG WiFi Wireless Colokan - IoT Smart Home', name: 'BARDI Smart PLUG WiFi Wireless Colokan - IoT Smart Home',
price: 11.46, price: 11.46,
photo: 2,
image: GLOBAL_URL + '/apps/ecommerce/product/69.jpg', image: GLOBAL_URL + '/apps/ecommerce/product/69.jpg',
rating: 5, rating: 5,
review: 1062, review: 1062,
@ -55,45 +50,14 @@ List<WishlistModel> wishlistData = [
stock: 0, stock: 0,
location: 'Brooklyn'), location: 'Brooklyn'),
WishlistModel( WishlistModel(
id: 4, id: 3,
name: 'ipad Pro 2020 11-inch 128GB Wi-Fi Only - Silver', name: 'ipad Pro 2020 11-inch 128GB Wi-Fi Only - Silver',
price: 866, price: 866,
photo: 3,
image: GLOBAL_URL + '/apps/ecommerce/product/49.jpg', image: GLOBAL_URL + '/apps/ecommerce/product/49.jpg',
rating: 5, rating: 5,
review: 22, review: 22,
sale: 468, sale: 468,
stock: 25, stock: 25,
location: 'Brooklyn'), location: 'Brooklyn'),
WishlistModel(
id: 5,
name: 'Fimi X8 SE Black',
price: 567,
image: GLOBAL_URL + '/apps/ecommerce/product/26.jpg',
rating: 5,
review: 63,
sale: 115,
stock: 0,
location: 'Brooklyn',
),
WishlistModel(
id: 6,
name:
'Xiaomi Air Purifier 3 Mijia OLED Touch Sterilization Air Ionizer - 3',
price: 139,
image: GLOBAL_URL + '/apps/ecommerce/product/33.jpg',
rating: 5,
review: 275,
sale: 1055,
stock: 4,
location: 'Brooklyn'),
WishlistModel(
id: 7,
name: 'Delta Boots Import 8 Inch',
price: 18.3,
image: GLOBAL_URL + '/apps/ecommerce/product/25.jpg',
rating: 5,
review: 212,
sale: 735,
stock: 55,
location: 'Brooklyn')
]; ];

View File

@ -1,10 +1,8 @@
import 'package:mobdr/config/global_style.dart'; import 'package:universal_io/io.dart';
import 'package:mobdr/ui/authentication/forgot_password.dart';
import 'package:mobdr/ui/home.dart'; import 'package:mobdr/ui/home.dart';
import 'package:mobdr/ui/authentication/signup.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:mobdr/config/constant.dart';
class SigninPage extends StatefulWidget { class SigninPage extends StatefulWidget {
@override @override
@ -12,10 +10,14 @@ class SigninPage extends StatefulWidget {
} }
class _SigninPageState extends State<SigninPage> { class _SigninPageState extends State<SigninPage> {
TextEditingController _etEmail = TextEditingController();
bool _obscureText = true; bool _obscureText = true;
IconData _iconVisible = Icons.visibility_off; IconData _iconVisible = Icons.visibility_off;
Color _gradientTop = Color(0xFF039be6);
Color _gradientBottom = Color(0xFF0299e2);
Color _mainColor = Color(0xFF0181cc);
Color _underlineColor = Color(0xFFCCCCCC);
void _toggleObscureText() { void _toggleObscureText() {
setState(() { setState(() {
_obscureText = !_obscureText; _obscureText = !_obscureText;
@ -34,54 +36,97 @@ class _SigninPageState extends State<SigninPage> {
@override @override
void dispose() { void dispose() {
_etEmail.dispose();
super.dispose(); super.dispose();
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
body: ListView( backgroundColor: Colors.white,
padding: EdgeInsets.fromLTRB(30, 120, 30, 30), body: AnnotatedRegion<SystemUiOverlayStyle>(
value: Platform.isIOS
? SystemUiOverlayStyle.light
: SystemUiOverlayStyle(statusBarIconBrightness: Brightness.light),
child: Stack(
children: <Widget>[
// top blue background gradient
Container(
height: MediaQuery.of(context).size.height / 3.5,
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [_gradientTop, _gradientBottom],
begin: Alignment.topCenter,
end: Alignment.bottomCenter)),
),
// set your logo here
Container(
margin: EdgeInsets.fromLTRB(
0, MediaQuery.of(context).size.height / 20, 0, 0),
alignment: Alignment.topCenter,
child:
Image.asset('assets/images/logo_dark.png', height: 120)),
ListView(
children: <Widget>[
// create form login
Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
elevation: 5,
margin: EdgeInsets.fromLTRB(32,
MediaQuery.of(context).size.height / 3.5 - 72, 32, 0),
color: Colors.white,
child: Container(
margin: EdgeInsets.fromLTRB(24, 0, 24, 20),
child: Column(
children: <Widget>[ children: <Widget>[
Center(child: Image.asset('assets/images/logo.png', height: 32)),
SizedBox( SizedBox(
height: 80, height: 40,
), ),
Text('Sign In', style: GlobalStyle.authTitle), Center(
TextFormField( child: Text(
keyboardType: TextInputType.emailAddress, 'SIGN IN',
controller: _etEmail, style: TextStyle(
style: TextStyle(color: CHARCOAL), color: _mainColor,
onChanged: (textValue) { fontSize: 18,
setState(() {}); fontWeight: FontWeight.w900),
},
decoration: InputDecoration(
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: PRIMARY_COLOR, width: 2.0)),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC)),
),
labelText: 'Email',
labelStyle: TextStyle(color: BLACK_GREY),
), ),
), ),
SizedBox( SizedBox(
height: 20, height: 20,
), ),
TextField( TextField(
obscureText: _obscureText, keyboardType: TextInputType.emailAddress,
style: TextStyle(color: CHARCOAL),
decoration: InputDecoration( decoration: InputDecoration(
focusedBorder: UnderlineInputBorder( focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: PRIMARY_COLOR, width: 2.0)), borderSide:
BorderSide(color: Colors.grey[600]!)),
enabledBorder: UnderlineInputBorder( enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC)), borderSide:
BorderSide(color: _underlineColor),
),
labelText: 'Email',
labelStyle:
TextStyle(color: Colors.grey[700])),
),
SizedBox(
height: 20,
),
TextField(
obscureText: _obscureText,
decoration: InputDecoration(
focusedBorder: UnderlineInputBorder(
borderSide:
BorderSide(color: Colors.grey[600]!)),
enabledBorder: UnderlineInputBorder(
borderSide:
BorderSide(color: _underlineColor),
), ),
labelText: 'Password', labelText: 'Password',
labelStyle: TextStyle(color: BLACK_GREY), labelStyle: TextStyle(color: Colors.grey[700]),
suffixIcon: IconButton( suffixIcon: IconButton(
icon: Icon(_iconVisible, color: Colors.grey[400], size: 20), icon: Icon(_iconVisible,
color: Colors.grey[700], size: 20),
onPressed: () { onPressed: () {
_toggleObscureText(); _toggleObscureText();
}), }),
@ -92,159 +137,87 @@ class _SigninPageState extends State<SigninPage> {
), ),
Align( Align(
alignment: Alignment.centerRight, alignment: Alignment.centerRight,
child: Container(
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {
Navigator.push( Fluttertoast.showToast(
context, msg: 'Click forgot password',
MaterialPageRoute( toastLength: Toast.LENGTH_SHORT);
builder: (context) => ForgotPasswordPage()));
FocusScope.of(context).unfocus();
}, },
child: Text( child: Text(
'Forgot Password?', 'Forgot Password?',
style: TextStyle(color: PRIMARY_COLOR, fontSize: 13), style: TextStyle(fontSize: 13),
),
), ),
), ),
)),
SizedBox( SizedBox(
height: 40, height: 40,
), ),
Container( SizedBox(
width: double.maxFinite,
child: TextButton( child: TextButton(
style: ButtonStyle( style: ButtonStyle(
backgroundColor: MaterialStateProperty.resolveWith<Color>( backgroundColor: MaterialStateProperty
(Set<MaterialState> states) => PRIMARY_COLOR, .resolveWith<Color>(
(Set<MaterialState> states) => _mainColor,
), ),
overlayColor: MaterialStateProperty.all(Colors.transparent), overlayColor: MaterialStateProperty.all(
shape: MaterialStateProperty.all(RoundedRectangleBorder( Colors.transparent),
borderRadius: BorderRadius.circular(3.0), shape: MaterialStateProperty.all(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
)), )),
), ),
onPressed: () { onPressed: () {
//Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => HomePage()), (Route<dynamic> route) => false); //Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => HomePage()), (Route<dynamic> route) => false);
Navigator.pushReplacement(context, Navigator.pushReplacement(
MaterialPageRoute(builder: (context) => HomePage())); context,
MaterialPageRoute(
builder: (context) => HomePage()));
}, },
child: Padding( child: Padding(
padding: const EdgeInsets.symmetric(vertical: 5.0), padding:
const EdgeInsets.symmetric(vertical: 5),
child: Text( child: Text(
'Login', 'LOGIN',
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 16, color: Colors.white),
fontWeight: FontWeight.bold,
color: Colors.white),
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
)), )),
), ),
SizedBox(
height: 40,
),
Center(
child: Text(
'Or sign in with',
style: GlobalStyle.authSignWith,
),
),
SizedBox(
height: 20,
),
Container(
margin: EdgeInsets.fromLTRB(20, 0, 20, 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
GestureDetector(
onTap: () {
//Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => HomePage()), (Route<dynamic> route) => false);
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => HomePage()));
Fluttertoast.showToast(
msg: 'Sign in with Google',
toastLength: Toast.LENGTH_LONG);
},
child: Image(
image: AssetImage("assets/images/google.png"),
width: 40,
),
),
GestureDetector(
onTap: () {
//Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => HomePage()), (Route<dynamic> route) => false);
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => HomePage()));
Fluttertoast.showToast(
msg: 'Sign in with Facebook',
toastLength: Toast.LENGTH_LONG);
},
child: Image(
image: AssetImage("assets/images/facebook.png"),
width: 40,
),
),
GestureDetector(
onTap: () {
//Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => HomePage()), (Route<dynamic> route) => false);
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => HomePage()));
Fluttertoast.showToast(
msg: 'Sign in with Twitter',
toastLength: Toast.LENGTH_LONG);
},
child: Image(
image: AssetImage("assets/images/twitter.png"),
width: 40,
),
)
], ],
), )),
), ),
SizedBox( SizedBox(
height: 20, height: 50,
), ),
// create sign up link
Center( Center(
child: GestureDetector(
onTap: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => SignupPage()));
FocusScope.of(context).unfocus();
},
child: Wrap( child: Wrap(
children: [ children: <Widget>[
Text( Text('New User? '),
'No account yet? ', GestureDetector(
style: GlobalStyle.authBottom1, onTap: () {
Fluttertoast.showToast(
msg: 'Click signup',
toastLength: Toast.LENGTH_SHORT);
},
child: Text(
'Sign Up',
style: TextStyle(
color: _mainColor, fontWeight: FontWeight.w700),
), ),
Text(
'Create one',
style: GlobalStyle.authBottom2,
) )
], ],
), ),
), ),
),
SizedBox( SizedBox(
height: 30, height: 20,
), ),
Center( ],
child: GestureDetector(
onTap: () {
Navigator.pop(context);
},
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
GlobalStyle.iconBack,
Text(
' Back',
style: GlobalStyle.back,
) )
], ],
), ),
),
),
],
)); ));
} }
} }

View File

@ -0,0 +1,250 @@
import 'package:mobdr/config/global_style.dart';
import 'package:mobdr/ui/authentication/forgot_password.dart';
import 'package:mobdr/ui/home.dart';
import 'package:mobdr/ui/authentication/signup.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:mobdr/config/constant.dart';
class SigninPage extends StatefulWidget {
@override
_SigninPageState createState() => _SigninPageState();
}
class _SigninPageState extends State<SigninPage> {
TextEditingController _etEmail = TextEditingController();
bool _obscureText = true;
IconData _iconVisible = Icons.visibility_off;
void _toggleObscureText() {
setState(() {
_obscureText = !_obscureText;
if (_obscureText == true) {
_iconVisible = Icons.visibility_off;
} else {
_iconVisible = Icons.visibility;
}
});
}
@override
void initState() {
super.initState();
}
@override
void dispose() {
_etEmail.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: ListView(
padding: EdgeInsets.fromLTRB(30, 120, 30, 30),
children: <Widget>[
Center(child: Image.asset('assets/images/logo.png', height: 32)),
SizedBox(
height: 80,
),
Text('Sign In', style: GlobalStyle.authTitle),
TextFormField(
keyboardType: TextInputType.emailAddress,
controller: _etEmail,
style: TextStyle(color: CHARCOAL),
onChanged: (textValue) {
setState(() {});
},
decoration: InputDecoration(
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: PRIMARY_COLOR, width: 2.0)),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC)),
),
labelText: 'Email',
labelStyle: TextStyle(color: BLACK_GREY),
),
),
SizedBox(
height: 20,
),
TextField(
obscureText: _obscureText,
style: TextStyle(color: CHARCOAL),
decoration: InputDecoration(
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: PRIMARY_COLOR, width: 2.0)),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC)),
),
labelText: 'Password',
labelStyle: TextStyle(color: BLACK_GREY),
suffixIcon: IconButton(
icon: Icon(_iconVisible, color: Colors.grey[400], size: 20),
onPressed: () {
_toggleObscureText();
}),
),
),
SizedBox(
height: 20,
),
Align(
alignment: Alignment.centerRight,
child: Container(
child: GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ForgotPasswordPage()));
FocusScope.of(context).unfocus();
},
child: Text(
'Forgot Password?',
style: TextStyle(color: PRIMARY_COLOR, fontSize: 13),
),
),
)),
SizedBox(
height: 40,
),
Container(
child: TextButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.resolveWith<Color>(
(Set<MaterialState> states) => PRIMARY_COLOR,
),
overlayColor: MaterialStateProperty.all(Colors.transparent),
shape: MaterialStateProperty.all(RoundedRectangleBorder(
borderRadius: BorderRadius.circular(3.0),
)),
),
onPressed: () {
//Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => HomePage()), (Route<dynamic> route) => false);
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => HomePage()));
},
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 5.0),
child: Text(
'Login',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: Colors.white),
textAlign: TextAlign.center,
),
)),
),
SizedBox(
height: 40,
),
Center(
child: Text(
'Or sign in with',
style: GlobalStyle.authSignWith,
),
),
SizedBox(
height: 20,
),
Container(
margin: EdgeInsets.fromLTRB(20, 0, 20, 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
GestureDetector(
onTap: () {
//Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => HomePage()), (Route<dynamic> route) => false);
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => HomePage()));
Fluttertoast.showToast(
msg: 'Sign in with Google',
toastLength: Toast.LENGTH_LONG);
},
child: Image(
image: AssetImage("assets/images/google.png"),
width: 40,
),
),
GestureDetector(
onTap: () {
//Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => HomePage()), (Route<dynamic> route) => false);
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => HomePage()));
Fluttertoast.showToast(
msg: 'Sign in with Facebook',
toastLength: Toast.LENGTH_LONG);
},
child: Image(
image: AssetImage("assets/images/facebook.png"),
width: 40,
),
),
GestureDetector(
onTap: () {
//Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => HomePage()), (Route<dynamic> route) => false);
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => HomePage()));
Fluttertoast.showToast(
msg: 'Sign in with Twitter',
toastLength: Toast.LENGTH_LONG);
},
child: Image(
image: AssetImage("assets/images/twitter.png"),
width: 40,
),
)
],
),
),
SizedBox(
height: 20,
),
Center(
child: GestureDetector(
onTap: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => SignupPage()));
FocusScope.of(context).unfocus();
},
child: Wrap(
children: [
Text(
'No account yet? ',
style: GlobalStyle.authBottom1,
),
Text(
'Create one',
style: GlobalStyle.authBottom2,
)
],
),
),
),
SizedBox(
height: 30,
),
Center(
child: GestureDetector(
onTap: () {
Navigator.pop(context);
},
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
GlobalStyle.iconBack,
Text(
' Back',
style: GlobalStyle.back,
)
],
),
),
),
],
));
}
}

View File

@ -21,6 +21,7 @@ class ProductDetailPage extends StatefulWidget {
final String name; final String name;
final String image; final String image;
final double price; final double price;
final int photo;
final double rating; final double rating;
final int review; final int review;
final int sale; final int sale;
@ -30,6 +31,7 @@ class ProductDetailPage extends StatefulWidget {
this.name = '', this.name = '',
this.image = '', this.image = '',
this.price = 24, this.price = 24,
this.photo = 1,
this.rating = 4, this.rating = 4,
this.review = 45, this.review = 45,
this.sale = 63}) this.sale = 63})

File diff suppressed because it is too large Load Diff

44
macos/Podfile.lock Normal file
View File

@ -0,0 +1,44 @@
PODS:
- FlutterMacOS (1.0.0)
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- package_info_plus (0.0.1):
- FlutterMacOS
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- sqflite (0.0.2):
- FlutterMacOS
- FMDB (>= 2.7.5)
DEPENDENCIES:
- FlutterMacOS (from `Flutter/ephemeral`)
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/macos`)
- sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`)
SPEC REPOS:
trunk:
- FMDB
EXTERNAL SOURCES:
FlutterMacOS:
:path: Flutter/ephemeral
package_info_plus:
:path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos
path_provider_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/macos
sqflite:
:path: Flutter/ephemeral/.symlinks/plugins/sqflite/macos
SPEC CHECKSUMS:
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
package_info_plus: 02d7a575e80f194102bef286361c6c326e4c29ce
path_provider_foundation: c68054786f1b4f3343858c1e1d0caaded73f0be9
sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea
PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7
COCOAPODS: 1.11.3

View File

@ -26,6 +26,7 @@
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
460D48F4120F6A092FBB8C86 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49B016110A69499EADAA5A41 /* Pods_Runner.framework */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
@ -52,9 +53,10 @@
/* End PBXCopyFilesBuildPhase section */ /* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
1DBA8B4418C28009A2604251 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
33CC10ED2044A3C60003C045 /* mobdr.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "mobdr.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10ED2044A3C60003C045 /* mobdr.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = mobdr.app; sourceTree = BUILT_PRODUCTS_DIR; };
33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
@ -66,6 +68,9 @@
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; };
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; };
49B016110A69499EADAA5A41 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
624F5C0614E44326DC9ABFA2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
6B0F9B49233C66D9CA23712E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
@ -75,12 +80,24 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
460D48F4120F6A092FBB8C86 /* Pods_Runner.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
/* End PBXFrameworksBuildPhase section */ /* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */ /* Begin PBXGroup section */
02999232413A4620F94D542F /* Pods */ = {
isa = PBXGroup;
children = (
6B0F9B49233C66D9CA23712E /* Pods-Runner.debug.xcconfig */,
1DBA8B4418C28009A2604251 /* Pods-Runner.release.xcconfig */,
624F5C0614E44326DC9ABFA2 /* Pods-Runner.profile.xcconfig */,
);
name = Pods;
path = Pods;
sourceTree = "<group>";
};
33BA886A226E78AF003329D5 /* Configs */ = { 33BA886A226E78AF003329D5 /* Configs */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -99,6 +116,7 @@
33CEB47122A05771004F2AC0 /* Flutter */, 33CEB47122A05771004F2AC0 /* Flutter */,
33CC10EE2044A3C60003C045 /* Products */, 33CC10EE2044A3C60003C045 /* Products */,
D73912EC22F37F3D000D13A0 /* Frameworks */, D73912EC22F37F3D000D13A0 /* Frameworks */,
02999232413A4620F94D542F /* Pods */,
); );
sourceTree = "<group>"; sourceTree = "<group>";
}; };
@ -148,6 +166,7 @@
D73912EC22F37F3D000D13A0 /* Frameworks */ = { D73912EC22F37F3D000D13A0 /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
49B016110A69499EADAA5A41 /* Pods_Runner.framework */,
); );
name = Frameworks; name = Frameworks;
sourceTree = "<group>"; sourceTree = "<group>";
@ -159,11 +178,13 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = ( buildPhases = (
F86FCF2D201694F3D0280F28 /* [CP] Check Pods Manifest.lock */,
33CC10E92044A3C60003C045 /* Sources */, 33CC10E92044A3C60003C045 /* Sources */,
33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EA2044A3C60003C045 /* Frameworks */,
33CC10EB2044A3C60003C045 /* Resources */, 33CC10EB2044A3C60003C045 /* Resources */,
33CC110E2044A8840003C045 /* Bundle Framework */, 33CC110E2044A8840003C045 /* Bundle Framework */,
3399D490228B24CF009A79C7 /* ShellScript */, 3399D490228B24CF009A79C7 /* ShellScript */,
263F3D5435F1A33D2FF5C6C5 /* [CP] Embed Pods Frameworks */,
); );
buildRules = ( buildRules = (
); );
@ -233,6 +254,23 @@
/* End PBXResourcesBuildPhase section */ /* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */
263F3D5435F1A33D2FF5C6C5 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
3399D490228B24CF009A79C7 /* ShellScript */ = { 3399D490228B24CF009A79C7 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1; alwaysOutOfDate = 1;
@ -271,6 +309,28 @@
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
}; };
F86FCF2D201694F3D0280F28 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */ /* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */

View File

@ -4,4 +4,7 @@
<FileRef <FileRef
location = "group:Runner.xcodeproj"> location = "group:Runner.xcodeproj">
</FileRef> </FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace> </Workspace>

View File

@ -445,6 +445,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.1" version: "1.3.1"
universal_io:
dependency: "direct main"
description:
name: universal_io
sha256: "06866290206d196064fd61df4c7aea1ffe9a4e7c4ccaa8fcded42dd41948005d"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
uuid: uuid:
dependency: transitive dependency: transitive
description: description:

View File

@ -41,6 +41,7 @@ dependencies:
intl: 0.17.0 intl: 0.17.0
carousel_slider: 4.2.1 carousel_slider: 4.2.1
cached_network_image: 3.2.3 cached_network_image: 3.2.3
universal_io: 2.2.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
@ -105,4 +106,5 @@ flutter:
- assets/images/visa.png - assets/images/visa.png
- assets/images/mastercard.png - assets/images/mastercard.png
- assets/images/logo.png - assets/images/logo.png
- assets/images/logo_dark.png
- assets/images/onboarding/search_product.gif - assets/images/onboarding/search_product.gif