diff --git a/assets/fonts/Nunito-Regular.ttf b/assets/fonts/Nunito-Regular.ttf new file mode 100644 index 0000000..ab7452c Binary files /dev/null and b/assets/fonts/Nunito-Regular.ttf differ diff --git a/assets/images/logoEduca.png b/assets/images/logoEduca.png new file mode 100644 index 0000000..3720ff0 Binary files /dev/null and b/assets/images/logoEduca.png differ diff --git a/assets/images/logoRKM.PNG b/assets/images/logoRKM.PNG new file mode 100644 index 0000000..3d8667c Binary files /dev/null and b/assets/images/logoRKM.PNG differ diff --git a/lib/main.dart b/lib/main.dart index e016029..ac422e1 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,115 +1,18 @@ import 'package:flutter/material.dart'; +import 'package:rkm_educa_app/screens/login_screen.dart'; void main() { - runApp(const MyApp()); + runApp(MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); - // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - // This is the theme of your application. - // - // Try running your application with "flutter run". You'll see the - // application has a blue toolbar. Then, without quitting the app, try - // changing the primarySwatch below to Colors.green and then invoke - // "hot reload" (press "r" in the console where you ran "flutter run", - // or simply save your changes to "hot reload" in a Flutter IDE). - // Notice that the counter didn't reset back to zero; the application - // is not restarted. - primarySwatch: Colors.blue, - ), - home: const MyHomePage(title: 'Flutter Demo Home Page'), - ); - } -} - -class MyHomePage extends StatefulWidget { - const MyHomePage({super.key, required this.title}); - - // This widget is the home page of your application. It is stateful, meaning - // that it has a State object (defined below) that contains fields that affect - // how it looks. - - // This class is the configuration for the state. It holds the values (in this - // case the title) provided by the parent (in this case the App widget) and - // used by the build method of the State. Fields in a Widget subclass are - // always marked "final". - - final String title; - - @override - State createState() => _MyHomePageState(); -} - -class _MyHomePageState extends State { - int _counter = 0; - - void _incrementCounter() { - setState(() { - // This call to setState tells the Flutter framework that something has - // changed in this State, which causes it to rerun the build method below - // so that the display can reflect the updated values. If we changed - // _counter without calling setState(), then the build method would not be - // called again, and so nothing would appear to happen. - _counter++; - }); - } - - @override - Widget build(BuildContext context) { - // This method is rerun every time setState is called, for instance as done - // by the _incrementCounter method above. - // - // The Flutter framework has been optimized to make rerunning build methods - // fast, so that you can just rebuild anything that needs updating rather - // than having to individually change instances of widgets. - return Scaffold( - appBar: AppBar( - // Here we take the value from the MyHomePage object that was created by - // the App.build method, and use it to set our appbar title. - title: Text(widget.title), - ), - body: Center( - // Center is a layout widget. It takes a single child and positions it - // in the middle of the parent. - child: Column( - // Column is also a layout widget. It takes a list of children and - // arranges them vertically. By default, it sizes itself to fit its - // children horizontally, and tries to be as tall as its parent. - // - // Invoke "debug painting" (press "p" in the console, choose the - // "Toggle Debug Paint" action from the Flutter Inspector in Android - // Studio, or the "Toggle Debug Paint" command in Visual Studio Code) - // to see the wireframe for each widget. - // - // Column has various properties to control how it sizes itself and - // how it positions its children. Here we use mainAxisAlignment to - // center the children vertically; the main axis here is the vertical - // axis because Columns are vertical (the cross axis would be - // horizontal). - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Text( - 'You have pushed the button this many times:', - ), - Text( - '$_counter', - style: Theme.of(context).textTheme.headline4, - ), - ], - ), - ), - floatingActionButton: FloatingActionButton( - onPressed: _incrementCounter, - tooltip: 'Increment', - child: const Icon(Icons.add), - ), // This trailing comma makes auto-formatting nicer for build methods. + debugShowCheckedModeBanner: false, + home: LoginScreen(), ); } } diff --git a/lib/screens/login_screen.dart b/lib/screens/login_screen.dart new file mode 100644 index 0000000..e2f8eaf --- /dev/null +++ b/lib/screens/login_screen.dart @@ -0,0 +1,96 @@ +import 'package:flutter/material.dart'; + +import '../utils/colors.dart'; +import '../widgets/buttom_custom.dart'; +import '../widgets/input_text.dart'; +import '../widgets/snackBars.dart'; + +class LoginScreen extends StatefulWidget { + const LoginScreen({Key? key}) : super(key: key); + + @override + State createState() => _LoginScreenState(); +} + +class _LoginScreenState extends State { + + final inputLogin = TextEditingController(text: 'teste'); + final inputSenha = TextEditingController(text: 'senha123'); + + verificacao(){ + if(inputLogin.text.isNotEmpty){ + if(inputSenha.text.isNotEmpty){ + if(inputLogin.text == 'teste'){ + if(inputSenha.text == 'senha123'){ + showSnackBar(context, 'Acesso validado', Colors.green); + // Navigator.pushReplacement( + // context, + // MaterialPageRoute(builder: (context) => HomeScreen()), + // ); + }else{ + showSnackBar(context, 'E-mail não cadastrado e/ou senha incorreta', Colors.red); + } + }else{ + showSnackBar(context, 'E-mail não cadastrado e/ou senha incorreta', Colors.red); + } + }else{ + showSnackBar(context, 'Preencha sua senha', Colors.red); + } + }else{ + showSnackBar(context, 'Preencha seu e-mail', Colors.red); + } + } + + @override + Widget build(BuildContext context) { + + double height = MediaQuery.of(context).size.height; + double width = MediaQuery.of(context).size.width; + + return Scaffold( + backgroundColor: PaletteColors.white, + body: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + child: Image.asset("assets/images/logoEduca.png",width:width * 0.4,height: height * 0.12) + ), + Container( + width: width>900? width * 0.18:width*0.7, + child: InputText( + inputFormatters: [], + controller: inputLogin, + title: 'Login', + width: width>900? width * 0.18:width*0.7, + colorBorder: PaletteColors.white, + ), + ), + Container( + width: width>900? width * 0.18:width*0.7, + child: InputText( + inputFormatters: [], + controller: inputSenha, + title: 'Senha', + obscure: true, + width: width>900? width * 0.18:width*0.7, + colorBorder: PaletteColors.white, + ), + ), + SizedBox(height: height * 0.02), + ButtonCustom( + widthCustom: 0.7, + heightCustom: 0.07, + text: "Entrar", + size: 14.0, + colorText: PaletteColors.white, + colorButton: PaletteColors.primaryColor, + colorBorder: PaletteColors.primaryColor, + onPressed: ()=>verificacao(), + ), + ], + ), + ) + ); + } +} diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart new file mode 100644 index 0000000..e8936d4 --- /dev/null +++ b/lib/utils/colors.dart @@ -0,0 +1,14 @@ +import 'package:flutter/material.dart'; + +class PaletteColors{ + static const Color white = Colors.white; + static const Color primaryColor = Color(0xffBB0202); + static const Color secundColor = Color(0xffFF9E75); + static const Color bgColor = Color(0xff3A3A3A); + static const Color grey = Color (0xff757575); + static const Color greyInput = Color (0xffE1E1E1); + static const Color lightGrey = Color(0xffD0D0D0); + static const Color midGrey = Color(0xffC4C4C4); + static const Color backGrey = Color(0xffE9E9E9); + static const Color green = Color(0xff06790c); +} \ No newline at end of file diff --git a/lib/widgets/buttom_custom.dart b/lib/widgets/buttom_custom.dart new file mode 100644 index 0000000..6bc22a6 --- /dev/null +++ b/lib/widgets/buttom_custom.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; + +class ButtonCustom extends StatelessWidget{ + final VoidCallback onPressed; + final String text; + final double size; + final Color colorButton; + final Color colorText; + final Color colorBorder; + final widthCustom; + final heightCustom; + +ButtonCustom({ + required this.onPressed, + required this.text, + required this.size, + required this.colorButton, + required this.colorText, + required this.colorBorder, + this.widthCustom = 1.0, + this.heightCustom = 1.0 +}); + @override + Widget build (BuildContext context) { + double width =MediaQuery.of(context).size.width; + double height =MediaQuery.of(context).size.height; + + return ElevatedButton( + style: ElevatedButton.styleFrom( + primary: colorButton, + minimumSize: Size(width*widthCustom! , height*heightCustom!), + side: BorderSide(width: 2,color : colorBorder,), + ), + onPressed: onPressed, + child: Text(text, + style: TextStyle( + color: colorText, + fontSize: size, + fontWeight: FontWeight.bold + ), + ) , + ); + } + +} \ No newline at end of file diff --git a/lib/widgets/input_text.dart b/lib/widgets/input_text.dart new file mode 100644 index 0000000..0e07d74 --- /dev/null +++ b/lib/widgets/input_text.dart @@ -0,0 +1,84 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +import '../utils/colors.dart'; + +class InputText extends StatelessWidget { + bool obscure; + var controller; + double fontSize; + String title; + double width; + TextInputType textInputType; + int maxLines; + Color colorBorder; + var onChanged; + bool enable; + List inputFormatters; + + InputText({ + required this.controller, + required this.width, + this.obscure = false, + this.fontSize = 15.0, + this.title = '', + this.textInputType = TextInputType.text, + this.maxLines = 1, + this.colorBorder = PaletteColors.grey, + this.onChanged = null, + this.enable = true, + required this.inputFormatters + }); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Container( + width: width, + child: Text(title,style: TextStyle(fontWeight: FontWeight.bold,fontFamily: 'Nunito'),) + ), + Container( + color:PaletteColors.greyInput, + width: width, + margin: EdgeInsets.only(bottom: 5), + child: TextFormField( + inputFormatters: inputFormatters, + keyboardType: textInputType, + maxLines: maxLines, + onChanged: onChanged, + obscureText: this.obscure, + controller: this.controller, + enabled: enable, + style: TextStyle( + color: Colors.black, + fontSize: this.fontSize, + fontFamily: 'Nunito' + ), + decoration: InputDecoration( + border: OutlineInputBorder( + borderSide: BorderSide(width: 1,color: colorBorder) + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(width: 1, color: colorBorder), + borderRadius: BorderRadius.circular(3), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(width: 1, color: colorBorder), + borderRadius: BorderRadius.circular(3), + ), + disabledBorder: OutlineInputBorder( + borderSide: BorderSide(width: 1, color: colorBorder), + borderRadius: BorderRadius.circular(3), + ), + hintStyle: TextStyle( + color: Colors.black, + fontSize: this.fontSize, + ) + ) + ), + ), + ], + ); + } +} diff --git a/lib/widgets/snackBars.dart b/lib/widgets/snackBars.dart new file mode 100644 index 0000000..6ae625c --- /dev/null +++ b/lib/widgets/snackBars.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; + +void showSnackBar(BuildContext context, String text,Color colors){ + + final snackbar = SnackBar( + backgroundColor: colors, + content: Row( + children: [ + Icon(Icons.info_outline,color: Colors.white), + SizedBox(width: 20), + Expanded( + child: Text(text, + style: TextStyle(fontSize: 16),), + ), + ], + ), + ); + + ScaffoldMessenger.of(context).showSnackBar(snackbar); +} \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml index a23e49e..a3b2e78 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,91 +1,31 @@ name: rkm_educa_app description: RKM Educa App - -# The following line prevents the package from being accidentally published to -# pub.dev using `flutter pub publish`. This is preferred for private packages. -publish_to: 'none' # Remove this line if you wish to publish to pub.dev - -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -# In Windows, build-name is used as the major, minor, and patch parts -# of the product and file versions while build-number is used as the build suffix. +publish_to: 'none' version: 1.0.0+1 environment: sdk: '>=2.18.6 <3.0.0' -# Dependencies specify other packages that your package needs in order to work. -# To automatically upgrade your package dependencies to the latest versions -# consider running `flutter pub upgrade --major-versions`. Alternatively, -# dependencies can be manually updated by changing the version numbers below to -# the latest version available on pub.dev. To see which dependencies have newer -# versions available, run `flutter pub outdated`. dependencies: flutter: sdk: flutter - - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 dev_dependencies: flutter_test: sdk: flutter - # The "flutter_lints" package below contains a set of recommended lints to - # encourage good coding practices. The lint set provided by the package is - # activated in the `analysis_options.yaml` file located at the root of your - # package. See that file for information about deactivating specific lint - # rules and activating additional ones. flutter_lints: ^2.0.0 -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter packages. flutter: - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. uses-material-design: true - # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg + assets: + - assets/images/ - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages + fonts: + - family: Nunito + fonts: + - asset: assets/fonts/Nunito-Regular.ttf \ No newline at end of file