diff --git a/assets/images/female.png b/assets/images/female.png new file mode 100644 index 0000000..8793274 Binary files /dev/null and b/assets/images/female.png differ diff --git a/assets/images/male.png b/assets/images/male.png new file mode 100644 index 0000000..73b9064 Binary files /dev/null and b/assets/images/male.png differ diff --git a/lib/login_screen.dart b/lib/login_screen.dart deleted file mode 100644 index b702262..0000000 --- a/lib/login_screen.dart +++ /dev/null @@ -1,112 +0,0 @@ -import 'package:flutter/material.dart'; - -class LoginScreen extends StatelessWidget { - var emailController = TextEditingController(); - var passwordController = TextEditingController(); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(), - body: Padding( - padding: const EdgeInsets.all(20.0), - child: Center( - child: SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'Login', - style: TextStyle( - fontSize: 40.0, - fontWeight: FontWeight.bold, - ), - ), - SizedBox( - height: 40.0, - ), - TextFormField( - controller: emailController, - keyboardType: TextInputType.emailAddress, - onFieldSubmitted: (String value) { - print(value); - }, - onChanged: (String value) { - print(value); - }, - decoration: InputDecoration( - labelText: 'Email Address', - prefixIcon: Icon( - Icons.email, - ), - border: OutlineInputBorder(), - ), - ), - SizedBox( - height: 15.0, - ), - TextFormField( - controller: passwordController, - keyboardType: TextInputType.visiblePassword, - obscureText: true, - onFieldSubmitted: (String value) { - print(value); - }, - onChanged: (String value) { - print(value); - }, - decoration: InputDecoration( - labelText: 'Password', - prefixIcon: Icon( - Icons.lock, - ), - suffixIcon: Icon( - Icons.remove_red_eye, - ), - border: OutlineInputBorder(), - ), - ), - SizedBox( - height: 20.0, - ), - Container( - width: double.infinity, - color: Colors.blue, - child: MaterialButton( - onPressed: () { - print(emailController.text); - print(passwordController.text); - }, - child: Text( - 'LOGIN', - style: TextStyle( - color: Colors.white, - ), - ), - ), - ), - SizedBox( - height: 10.0, - ), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'Don\'t have an account?', - ), - TextButton( - onPressed: () {}, - child: Text( - 'Register Now', - ), - ), - ], - ), - ], - ), - ), - ), - ), - ); - } -} diff --git a/lib/main.dart b/lib/main.dart index a35c77d..3f227e9 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:udemy_flutter/login_screen.dart'; +import 'package:udemy_flutter/modules/bmi/bmi_screen.dart'; +import 'package:udemy_flutter/modules/counter/counter_screen.dart'; +import 'package:udemy_flutter/modules/login/login_screen.dart'; +import 'package:udemy_flutter/modules/messenger/messenger_screen.dart'; +import 'package:udemy_flutter/modules/users/users_screen.dart'; void main() { diff --git a/lib/models/user/user_model.dart b/lib/models/user/user_model.dart new file mode 100644 index 0000000..4db7798 --- /dev/null +++ b/lib/models/user/user_model.dart @@ -0,0 +1,13 @@ +import 'package:flutter/material.dart'; + +class UserModel { + final int id; + final String name; + final String phone; + + UserModel({ + @required this.id, + @required this.phone, + @required this.name, + }); +} \ No newline at end of file diff --git a/lib/modules/bmi/bmi_screen.dart b/lib/modules/bmi/bmi_screen.dart new file mode 100644 index 0000000..e61cd49 --- /dev/null +++ b/lib/modules/bmi/bmi_screen.dart @@ -0,0 +1,340 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:udemy_flutter/modules/bmi_result/bmi_result_screen.dart'; + +class BmiScreen extends StatefulWidget { + @override + _BmiScreenState createState() => _BmiScreenState(); +} + +class _BmiScreenState extends State { + bool isMale = true; + double height = 120.0; + + int weight = 40; + int age = 20; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text( + 'BMI Calculator', + ), + ), + body: Column( + children: + [ + Expanded( + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Row( + children: [ + Expanded( + child: GestureDetector( + onTap: () { + setState(() { + isMale = true; + }); + }, + child: Container( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image( + image: AssetImage('assets/images/male.png'), + height: 90.0, + width: 90.0, + ), + SizedBox( + height: 15.0, + ), + Text( + 'MALE', + style: TextStyle( + fontSize: 25.0, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular( + 10.0, + ), + color: isMale ? Colors.blue : Colors.grey[400], + ), + ), + ), + ), + SizedBox( + width: 20.0, + ), + Expanded( + child: GestureDetector( + onTap: () { + setState(() { + isMale = false; + }); + }, + child: Container( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image( + image: AssetImage('assets/images/female.png'), + height: 90.0, + width: 90.0, + ), + SizedBox( + height: 15.0, + ), + Text( + 'FEMALE', + style: TextStyle( + fontSize: 25.0, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular( + 10.0, + ), + color: isMale ? Colors.grey[400] : Colors.blue, + ), + ), + ), + ), + ], + ), + ), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 20.0, + ), + child: Container( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'HEIGHT', + style: TextStyle( + fontSize: 25.0, + fontWeight: FontWeight.bold, + ), + ), + Row( + crossAxisAlignment: CrossAxisAlignment.baseline, + mainAxisAlignment: MainAxisAlignment.center, + textBaseline: TextBaseline.alphabetic, + children: [ + Text( + '${height.round()}', + style: TextStyle( + fontSize: 40.0, + fontWeight: FontWeight.w900, + ), + ), + SizedBox( + width: 5.0, + ), + Text( + 'CM', + style: TextStyle( + fontSize: 20.0, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + Slider( + value: height, + max: 220.0, + min: 80.0, + onChanged: (value) { + setState(() { + height = value; + }); + }, + ), + ], + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular( + 10.0, + ), + color: Colors.grey[400], + ), + ), + ), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Row( + children: + [ + Expanded( + child: Container( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'WEIGHT', + style: TextStyle( + fontSize: 25.0, + fontWeight: FontWeight.bold, + ), + ), + Text( + '$weight', + style: TextStyle( + fontSize: 40.0, + fontWeight: FontWeight.w900, + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + FloatingActionButton( + onPressed: () { + setState(() { + weight--; + }); + }, + heroTag: 'weight-', + mini: true, + child: Icon( + Icons.remove, + ), + ), + FloatingActionButton( + onPressed: () { + setState(() { + weight++; + }); + }, + heroTag: 'weight+', + mini: true, + child: Icon( + Icons.add, + ), + ), + ], + ), + ], + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular( + 10.0, + ), + color: Colors.grey[400], + ), + ), + ), + SizedBox( + width: 20.0, + ), + Expanded( + child: Container( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'AGE', + style: TextStyle( + fontSize: 25.0, + fontWeight: FontWeight.bold, + ), + ), + Text( + '$age', + style: TextStyle( + fontSize: 40.0, + fontWeight: FontWeight.w900, + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + FloatingActionButton( + onPressed: () { + setState(() { + age--; + }); + }, + heroTag: 'age-', + mini: true, + child: Icon( + Icons.remove, + ), + ), + FloatingActionButton( + onPressed: () { + setState(() { + age++; + }); + }, + heroTag: 'age+', + mini: true, + child: Icon( + Icons.add, + ), + ), + ], + ), + ], + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular( + 10.0, + ), + color: Colors.grey[400], + ), + ), + ), + ], + ), + ), + ), + Container( + width: double.infinity, + color: Colors.blue, + child: MaterialButton( + onPressed: () { + double result = weight / pow(height / 100, 2); + print(result.round()); + + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => BMIResultScreen( + age: age, + isMale: isMale, + result: result.round(), + ), + ), + ); + }, + height: 50.0, + child: Text( + 'CALCULATE', + style: TextStyle( + color: Colors.white, + ), + ), + ), + ), + ], + ), + ); + } + +// var result = weight / pow(height / 100, 2); +// print(result.round()); +} \ No newline at end of file diff --git a/lib/modules/bmi_result/bmi_result_screen.dart b/lib/modules/bmi_result/bmi_result_screen.dart new file mode 100644 index 0000000..2760678 --- /dev/null +++ b/lib/modules/bmi_result/bmi_result_screen.dart @@ -0,0 +1,62 @@ +import 'package:flutter/material.dart'; + +class BMIResultScreen extends StatelessWidget +{ + final int result; + final bool isMale; + final int age; + + BMIResultScreen({ + @required this.result, + @required this.age, + @required this.isMale, + }); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + leading: IconButton( + onPressed: () + { + Navigator.pop(context); + }, + icon: Icon( + Icons.keyboard_arrow_left, + ), + ), + title: Text( + 'BMI Result', + ), + ), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Gender : ${isMale ? 'Male' : 'Female'}', + style: TextStyle( + fontSize: 25.0, + fontWeight: FontWeight.bold, + ), + ), + Text( + 'Result : $result', + style: TextStyle( + fontSize: 25.0, + fontWeight: FontWeight.bold, + ), + ), + Text( + 'Age : $age', + style: TextStyle( + fontSize: 25.0, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/modules/counter/counter_screen.dart b/lib/modules/counter/counter_screen.dart new file mode 100644 index 0000000..b5a4851 --- /dev/null +++ b/lib/modules/counter/counter_screen.dart @@ -0,0 +1,84 @@ +import 'package:flutter/material.dart'; + +// state less contain one class provide widget + +// state ful contain classes + +// 1. first class provide widget +// 2. second class provide state from this widget + +class CounterScreen extends StatefulWidget +{ + @override + _CounterScreenState createState() => _CounterScreenState(); +} + +class _CounterScreenState extends State +{ + int counter = 1; + + // 1. constructor + // 2. init state + // 3. build + + @override + void initState() + { + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text( + 'Counter', + ), + ), + body: Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + TextButton( + onPressed: () + { + setState(() + { + counter--; + print(counter); + }); + }, + child: Text( + 'MINUS', + ), + ), + Padding( + padding: const EdgeInsets.symmetric( + horizontal: 20.0, + ), + child: Text( + '$counter', + style: TextStyle( + fontSize: 50.0, + fontWeight: FontWeight.w900, + ), + ), + ), + TextButton( + onPressed: () + { + setState(() { + counter++; + print(counter); + }); + }, + child: Text( + 'PLUS', + ), + ), + ], + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/home_screen.dart b/lib/modules/home/home_screen.dart similarity index 100% rename from lib/home_screen.dart rename to lib/modules/home/home_screen.dart diff --git a/lib/modules/login/login_screen.dart b/lib/modules/login/login_screen.dart new file mode 100644 index 0000000..f79809c --- /dev/null +++ b/lib/modules/login/login_screen.dart @@ -0,0 +1,127 @@ +import 'package:flutter/material.dart'; +import 'package:udemy_flutter/shared/components/components.dart'; + +// reusable components + +// 1. timing +// 2. refactor +// 3. quality +// 4. clean code + +class LoginScreen extends StatelessWidget +{ + var emailController = TextEditingController(); + var passwordController = TextEditingController(); + var formKey = GlobalKey(); + + @override + Widget build(BuildContext context) + { + return Scaffold( + appBar: AppBar(), + body: Padding( + padding: const EdgeInsets.all(20.0), + child: Center( + child: SingleChildScrollView( + child: Form( + key: formKey, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: + [ + Text( + 'Login', + style: TextStyle( + fontSize: 40.0, + fontWeight: FontWeight.bold, + ), + ), + SizedBox( + height: 40.0, + ), + defaultFormField( + controller: emailController, + label: 'Email', + prefix: Icons.email, + type: TextInputType.emailAddress, + validate: (String value) + { + if(value.isEmpty) + { + return 'email must not be empty'; + } + + return null; + }, + ), + SizedBox( + height: 15.0, + ), + defaultFormField( + controller: passwordController, + label: 'Password', + prefix: Icons.lock, + suffix: Icons.remove_red_eye, + isPassword: true, + type: TextInputType.visiblePassword, + validate: (String value) + { + if(value.isEmpty) + { + return 'password is too short'; + } + + return null; + }, + ), + SizedBox( + height: 20.0, + ), + defaultButton( + text: 'login', + function: () + { + if(formKey.currentState.validate()) + { + print(emailController.text); + print(passwordController.text); + } + }, + ), + SizedBox( + height: 20.0, + ), + defaultButton( + text: 'ReGIster', + function: () + { + print(emailController.text); + print(passwordController.text); + }, + ), + SizedBox( + height: 10.0, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Don\'t have an account?', + ), + TextButton( + onPressed: () {}, + child: Text( + 'Register Now', + ), + ), + ], + ), + ], + ), + ), + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/modules/messenger/messenger_screen.dart b/lib/modules/messenger/messenger_screen.dart new file mode 100644 index 0000000..e731e43 --- /dev/null +++ b/lib/modules/messenger/messenger_screen.dart @@ -0,0 +1,242 @@ +import 'dart:ui'; + +import 'package:flutter/material.dart'; + +class MessengerScreen extends StatelessWidget +{ + @override + Widget build(BuildContext context) + { + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBar( + backgroundColor: Colors.white, + elevation: 0.0, + titleSpacing: 20.0, + title: Row( + children: [ + CircleAvatar( + radius: 20.0, + backgroundImage: NetworkImage( + 'https://avatars.githubusercontent.com/u/34492145?v=4'), + ), + SizedBox( + width: 15.0, + ), + Text( + 'Chats', + style: TextStyle( + color: Colors.black, + ), + ), + ], + ), + actions: [ + IconButton( + icon: CircleAvatar( + radius: 15.0, + backgroundColor: Colors.blue, + child: Icon( + Icons.camera_alt, + size: 16.0, + color: Colors.white, + ), + ), + onPressed: () {}, + ), + IconButton( + icon: CircleAvatar( + radius: 15.0, + backgroundColor: Colors.blue, + child: Icon( + Icons.edit, + size: 16.0, + color: Colors.white, + ), + ), + onPressed: () {}, + ), + ], + ), + body: Padding( + padding: const EdgeInsets.all(20.0), + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular( + 5.0, + ), + color: Colors.grey[300], + ), + padding: EdgeInsets.all( + 5.0, + ), + child: Row( + children: [ + Icon( + Icons.search, + ), + SizedBox( + width: 15.0, + ), + Text( + 'Search', + ), + ], + ), + ), + SizedBox( + height: 20.0, + ), + Container( + height: 100.0, + child: ListView.separated( + scrollDirection: Axis.horizontal, + itemBuilder: (context, index) => buildStoryItem(), + separatorBuilder: (context, index) => SizedBox( + width: 20.0, + ), + itemCount: 5, + ), + ), + SizedBox( + height: 20.0, + ), + ListView.separated( + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (context, index) => buildChatItem(), + separatorBuilder: (context, index) => SizedBox( + height: 20.0, + ), + itemCount: 15, + ), + ], + ), + ), + ), + ); + } + + // 1. build item + // 2. build list + // 3. add item to list + + + // arrow function + Widget buildChatItem() => + Row( + children: [ + Stack( + alignment: AlignmentDirectional.bottomEnd, + children: [ + CircleAvatar( + radius: 30.0, + backgroundImage: NetworkImage( + 'https://avatars.githubusercontent.com/u/34492145?v=4'), + ), + Padding( + padding: const EdgeInsetsDirectional.only( + bottom: 3.0, + end: 3.0, + ), + child: CircleAvatar( + radius: 7.0, + backgroundColor: Colors.red, + ), + ), + ], + ), + SizedBox( + width: 20.0, + ), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Abdullah Ahmed Abdullah Ahmed Abdullah Ahmed Abdullah Ahmed', + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.bold, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + SizedBox( + height: 5.0, + ), + Row( + children: + [ + Expanded( + child: Text( + 'hello my name is abdullah ahmed hello my name is abdullah ahmed', + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + Padding( + padding: const EdgeInsets.symmetric( + horizontal: 10.0, + ), + child: Container( + width: 7.0, + height: 7.0, + decoration: BoxDecoration( + color: Colors.blue, + shape: BoxShape.circle, + ), + ), + ), + Text( + '02:00 pm', + ), + ], + ), + ], + ), + ), + ], + ); + + Widget buildStoryItem() => + Container( + width: 60.0, + child: Column( + children: [ + Stack( + alignment: AlignmentDirectional.bottomEnd, + children: [ + CircleAvatar( + radius: 30.0, + backgroundImage: NetworkImage( + 'https://avatars.githubusercontent.com/u/34492145?v=4'), + ), + Padding( + padding: const EdgeInsetsDirectional.only( + bottom: 3.0, + end: 3.0, + ), + child: CircleAvatar( + radius: 7.0, + backgroundColor: Colors.red, + ), + ), + ], + ), + SizedBox( + height: 6.0, + ), + Text( + 'Abdullah Mansour Ali Mansour', + maxLines: 2, + overflow: TextOverflow.ellipsis, + ), + ], + ), + ); +} \ No newline at end of file diff --git a/lib/modules/users/users_screen.dart b/lib/modules/users/users_screen.dart new file mode 100644 index 0000000..ec7ee9d --- /dev/null +++ b/lib/modules/users/users_screen.dart @@ -0,0 +1,136 @@ +import 'package:flutter/material.dart'; +import 'package:udemy_flutter/models/user/user_model.dart'; + +class UsersScreen extends StatelessWidget { + List users = [ + UserModel( + id: 1, + name: 'Abdullah Mansour', + phone: '+201115342559', + ), + UserModel( + id: 2, + name: 'Osama Mansour', + phone: '+201117842559', + ), + UserModel( + id: 3, + name: 'Ahmed Ali', + phone: '+2087856136', + ), + UserModel( + id: 1, + name: 'Abdullah Mansour', + phone: '+201115342559', + ), + UserModel( + id: 2, + name: 'Osama Mansour', + phone: '+201117842559', + ), + UserModel( + id: 3, + name: 'Ahmed Ali', + phone: '+2087856136', + ), + UserModel( + id: 1, + name: 'Abdullah Mansour', + phone: '+201115342559', + ), + UserModel( + id: 2, + name: 'Osama Mansour', + phone: '+201117842559', + ), + UserModel( + id: 3, + name: 'Ahmed Ali', + phone: '+2087856136', + ), + UserModel( + id: 1, + name: 'Abdullah Mansour', + phone: '+201115342559', + ), + UserModel( + id: 2, + name: 'Osama Mansour', + phone: '+201117842559', + ), + UserModel( + id: 3, + name: 'Ahmed Ali', + phone: '+2087856136', + ), + ]; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text( + 'Users', + ), + ), + body: ListView.separated( + itemBuilder: (context, index) => buildUserItem(users[index]), + separatorBuilder: (context, index) => Padding( + padding: const EdgeInsetsDirectional.only( + start: 20.0, + ), + child: Container( + width: double.infinity, + height: 1.0, + color: Colors.grey[300], + ), + ), + itemCount: users.length, + ), + ); + } + + Widget buildUserItem(UserModel user) => Padding( + padding: const EdgeInsets.all(20.0), + child: Row( + children: [ + CircleAvatar( + radius: 25.0, + child: Text( + '${user.id}', + style: TextStyle( + fontSize: 25.0, + fontWeight: FontWeight.bold, + ), + ), + ), + SizedBox( + width: 20.0, + ), + Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + '${user.name}', + style: TextStyle( + fontSize: 25.0, + fontWeight: FontWeight.bold, + ), + ), + Text( + '${user.phone}', + style: TextStyle( + color: Colors.grey, + ), + ), + ], + ), + ], + ), + ); + +// 1. build item +// 2. build list +// 3. add item to list +} \ No newline at end of file diff --git a/lib/shared/components/components.dart b/lib/shared/components/components.dart new file mode 100644 index 0000000..e486971 --- /dev/null +++ b/lib/shared/components/components.dart @@ -0,0 +1,58 @@ +import 'package:flutter/material.dart'; + +Widget defaultButton({ + double width = double.infinity, + Color background = Colors.blue, + bool isUpperCase = true, + double radius = 3.0, + required VoidCallback function, + required String text, +}) => + Container( + width: width, + height: 50.0, + child: MaterialButton( + onPressed: function, + child: Text( + isUpperCase ? text.toUpperCase() : text, + style: TextStyle( + color: Colors.white, + ), + ), + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular( + radius, + ), + color: background, + ), + ); + +Widget defaultFormField({ + @required TextEditingController controller, + @required TextInputType type, + Function onSubmit, + Function onChange, + bool isPassword = false, + @required Function validate, + @required String label, + @required IconData prefix, + IconData suffix, +}) => TextFormField( + controller: controller, + keyboardType: type, + obscureText: isPassword, + onFieldSubmitted: onSubmit, + onChanged: onChange, + validator: validate, + decoration: InputDecoration( + labelText: label, + prefixIcon: Icon( + prefix, + ), + suffixIcon: suffix != null ? Icon( + suffix, + ) : null, + border: OutlineInputBorder(), + ), +); diff --git a/lib/shared/components/constants.dart b/lib/shared/components/constants.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/shared/styles/colors.dart b/lib/shared/styles/colors.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/shared/styles/styles.dart b/lib/shared/styles/styles.dart new file mode 100644 index 0000000..e69de29 diff --git a/pubspec.yaml b/pubspec.yaml index fb3f231..b856804 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -44,10 +44,11 @@ flutter: # the material Icons class. uses-material-design: true + assets: + - assets/images/ + # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg + # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware.