고원빈

[frontend] main 화면 login 화면 구성 완료 Dashboard 작업 구역

Showing 77 changed files with 502 additions and 227 deletions
...@@ -9,3 +9,11 @@ ...@@ -9,3 +9,11 @@
9 ## 일정 9 ## 일정
10 + 2021-04-27 : Flutter 앱 생성 및 개발 환경 설정 10 + 2021-04-27 : Flutter 앱 생성 및 개발 환경 설정
11 + 2021-04-27 : 시작화면 router 생성 11 + 2021-04-27 : 시작화면 router 생성
12 +
13 +### 2021-04-28
14 ++ flutter version 변경 작업
15 +
16 +### 2021-04-29
17 ++ Main 화면 작업 완료
18 +
19 ++ 로그인 페이지 작업 완료
......
1 -<?xml version="1.0" encoding="utf-8"?>
2 -<!-- Modify this file to customize your launch splash screen -->
3 -<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
4 - <item android:drawable="?android:colorBackground" />
5 -
6 - <!-- You can insert your own image assets here -->
7 - <!-- <item>
8 - <bitmap
9 - android:gravity="center"
10 - android:src="@mipmap/launch_image" />
11 - </item> -->
12 -</layer-list>
1 -<?xml version="1.0" encoding="utf-8"?>
2 -<resources>
3 - <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
4 - <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
5 - <!-- Show a splash screen on the activity. Automatically removed when
6 - Flutter draws its first frame -->
7 - <item name="android:windowBackground">@drawable/launch_background</item>
8 - </style>
9 - <!-- Theme applied to the Android Window as soon as the process has started.
10 - This theme determines the color of the Android Window while your
11 - Flutter UI initializes, as well as behind your Flutter UI while its
12 - running.
13 -
14 - This Theme is only used starting with V2 of Flutter's Android embedding. -->
15 - <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
16 - <item name="android:windowBackground">?android:colorBackground</item>
17 - </style>
18 -</resources>
1 -import 'package:flutter/material.dart';
2 -
3 -class HomePage extends StatefulWidget {
4 - final String pageTitle;
5 - HomePage({Key key, this.pageTitle}) : super(key: key);
6 -
7 - @override
8 - _HomePageState createState() => _HomePageState();
9 -}
10 -
11 -/// first page class
12 -class _HomePageState extends State<HomePage> {
13 - @override
14 - void initState() {
15 - super.initState();
16 - }
17 -
18 - @override
19 - Widget build(BuildContext context) {
20 - final Size size = MediaQuery.of(context).size;
21 - return Scaffold(
22 - appBar: AppBar(
23 - title: Text('HomePage'),
24 - ),
25 - body: Text('홈페이지 작업 영역'),
26 - );
27 - }
28 -}
1 -<!DOCTYPE html>
2 -<html>
3 -<head>
4 - <!--
5 - If you are serving your web app in a path other than the root, change the
6 - href value below to reflect the base path you are serving from.
7 -
8 - The path provided below has to start and end with a slash "/" in order for
9 - it to work correctly.
10 -
11 - Fore more details:
12 - * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
13 - -->
14 - <base href="/">
15 -
16 - <meta charset="UTF-8">
17 - <meta content="IE=Edge" http-equiv="X-UA-Compatible">
18 - <meta name="description" content="A new Flutter project.">
19 -
20 - <!-- iOS meta tags & icons -->
21 - <meta name="apple-mobile-web-app-capable" content="yes">
22 - <meta name="apple-mobile-web-app-status-bar-style" content="black">
23 - <meta name="apple-mobile-web-app-title" content="app_frontend">
24 - <link rel="apple-touch-icon" href="icons/Icon-192.png">
25 -
26 - <!-- Favicon -->
27 - <link rel="icon" type="image/png" href="favicon.png"/>
28 -
29 - <title>app_frontend</title>
30 - <link rel="manifest" href="manifest.json">
31 -</head>
32 -<body>
33 - <!-- This script installs service_worker.js to provide PWA functionality to
34 - application. For more information, see:
35 - https://developers.google.com/web/fundamentals/primers/service-workers -->
36 - <script>
37 - if ('serviceWorker' in navigator) {
38 - window.addEventListener('flutter-first-frame', function () {
39 - navigator.serviceWorker.register('flutter_service_worker.js');
40 - });
41 - }
42 - </script>
43 - <script src="main.dart.js" type="application/javascript"></script>
44 -</body>
45 -</html>
1 -{
2 - "name": "app_frontend",
3 - "short_name": "app_frontend",
4 - "start_url": ".",
5 - "display": "standalone",
6 - "background_color": "#0175C2",
7 - "theme_color": "#0175C2",
8 - "description": "A new Flutter project.",
9 - "orientation": "portrait-primary",
10 - "prefer_related_applications": false,
11 - "icons": [
12 - {
13 - "src": "icons/Icon-192.png",
14 - "sizes": "192x192",
15 - "type": "image/png"
16 - },
17 - {
18 - "src": "icons/Icon-512.png",
19 - "sizes": "512x512",
20 - "type": "image/png"
21 - }
22 - ]
23 -}
...@@ -39,8 +39,3 @@ app.*.symbols ...@@ -39,8 +39,3 @@ app.*.symbols
39 39
40 # Obfuscation related 40 # Obfuscation related
41 app.*.map.json 41 app.*.map.json
42 -
43 -# Android Studio will place build artifacts here
44 -/android/app/debug
45 -/android/app/profile
46 -/android/app/release
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
4 # This file should be version controlled and should not be manually edited. 4 # This file should be version controlled and should not be manually edited.
5 5
6 version: 6 version:
7 - revision: adc687823a831bbebe28bdccfac1a628ca621513 7 + revision: 9b2d32b605630f28625709ebd9d78ab3016b2bf6
8 channel: stable 8 channel: stable
9 9
10 project_type: app 10 project_type: app
......
1 -# app_frontend 1 +# flutter_application_1
2 2
3 A new Flutter project. 3 A new Flutter project.
4 4
......
...@@ -26,17 +26,21 @@ apply plugin: 'kotlin-android' ...@@ -26,17 +26,21 @@ apply plugin: 'kotlin-android'
26 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 26 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
27 27
28 android { 28 android {
29 - compileSdkVersion 30 29 + compileSdkVersion 29
30 30
31 sourceSets { 31 sourceSets {
32 main.java.srcDirs += 'src/main/kotlin' 32 main.java.srcDirs += 'src/main/kotlin'
33 } 33 }
34 34
35 + lintOptions {
36 + disable 'InvalidPackage'
37 + }
38 +
35 defaultConfig { 39 defaultConfig {
36 // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 40 // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
37 - applicationId "com.example.app_frontend" 41 + applicationId "com.example.flutter_application_1"
38 minSdkVersion 16 42 minSdkVersion 16
39 - targetSdkVersion 30 43 + targetSdkVersion 29
40 versionCode flutterVersionCode.toInteger() 44 versionCode flutterVersionCode.toInteger()
41 versionName flutterVersionName 45 versionName flutterVersionName
42 } 46 }
......
1 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2 - package="com.example.app_frontend"> 2 + package="com.example.flutter_application_1">
3 <!-- Flutter needs it to communicate with the running application 3 <!-- Flutter needs it to communicate with the running application
4 to allow setting breakpoints, to provide hot reload, etc. 4 to allow setting breakpoints, to provide hot reload, etc.
5 --> 5 -->
......
1 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2 - package="com.example.app_frontend"> 2 + package="com.example.flutter_application_1">
3 + <!-- io.flutter.app.FlutterApplication is an android.app.Application that
4 + calls FlutterMain.startInitialization(this); in its onCreate method.
5 + In most cases you can leave this as-is, but you if you want to provide
6 + additional functionality it is fine to subclass or reimplement
7 + FlutterApplication and put your custom class here. -->
3 <application 8 <application
4 - android:label="app_frontend" 9 + android:name="io.flutter.app.FlutterApplication"
10 + android:label="flutter_application_1"
5 android:icon="@mipmap/ic_launcher"> 11 android:icon="@mipmap/ic_launcher">
6 <activity 12 <activity
7 android:name=".MainActivity" 13 android:name=".MainActivity"
......
1 -package com.example.app_frontend 1 +package com.example.flutter_application_1
2 2
3 import io.flutter.embedding.android.FlutterActivity 3 import io.flutter.embedding.android.FlutterActivity
4 4
......
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <resources> 2 <resources>
3 - <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on --> 3 + <!-- Theme applied to the Android Window while the process is starting -->
4 <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar"> 4 <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
5 <!-- Show a splash screen on the activity. Automatically removed when 5 <!-- Show a splash screen on the activity. Automatically removed when
6 Flutter draws its first frame --> 6 Flutter draws its first frame -->
...@@ -13,6 +13,6 @@ ...@@ -13,6 +13,6 @@
13 13
14 This Theme is only used starting with V2 of Flutter's Android embedding. --> 14 This Theme is only used starting with V2 of Flutter's Android embedding. -->
15 <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar"> 15 <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
16 - <item name="android:windowBackground">?android:colorBackground</item> 16 + <item name="android:windowBackground">@android:color/white</item>
17 </style> 17 </style>
18 </resources> 18 </resources>
......
1 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2 - package="com.example.app_frontend"> 2 + package="com.example.flutter_application_1">
3 <!-- Flutter needs it to communicate with the running application 3 <!-- Flutter needs it to communicate with the running application
4 to allow setting breakpoints, to provide hot reload, etc. 4 to allow setting breakpoints, to provide hot reload, etc.
5 --> 5 -->
......
...@@ -6,7 +6,7 @@ buildscript { ...@@ -6,7 +6,7 @@ buildscript {
6 } 6 }
7 7
8 dependencies { 8 dependencies {
9 - classpath 'com.android.tools.build:gradle:4.1.0' 9 + classpath 'com.android.tools.build:gradle:3.5.0'
10 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 10 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 } 11 }
12 } 12 }
......
1 org.gradle.jvmargs=-Xmx1536M 1 org.gradle.jvmargs=-Xmx1536M
2 android.useAndroidX=true 2 android.useAndroidX=true
3 android.enableJetifier=true 3 android.enableJetifier=true
4 +android.enableR8=true
......
...@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME ...@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
3 distributionPath=wrapper/dists 3 distributionPath=wrapper/dists
4 zipStoreBase=GRADLE_USER_HOME 4 zipStoreBase=GRADLE_USER_HOME
5 zipStorePath=wrapper/dists 5 zipStorePath=wrapper/dists
6 -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip 6 +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
3 <plist version="1.0"> 3 <plist version="1.0">
4 <dict> 4 <dict>
5 <key>CFBundleDevelopmentRegion</key> 5 <key>CFBundleDevelopmentRegion</key>
6 - <string>en</string> 6 + <string>$(DEVELOPMENT_LANGUAGE)</string>
7 <key>CFBundleExecutable</key> 7 <key>CFBundleExecutable</key>
8 <string>App</string> 8 <string>App</string>
9 <key>CFBundleIdentifier</key> 9 <key>CFBundleIdentifier</key>
......
...@@ -289,9 +289,17 @@ ...@@ -289,9 +289,17 @@
289 CLANG_ENABLE_MODULES = YES; 289 CLANG_ENABLE_MODULES = YES;
290 CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 290 CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
291 ENABLE_BITCODE = NO; 291 ENABLE_BITCODE = NO;
292 + FRAMEWORK_SEARCH_PATHS = (
293 + "$(inherited)",
294 + "$(PROJECT_DIR)/Flutter",
295 + );
292 INFOPLIST_FILE = Runner/Info.plist; 296 INFOPLIST_FILE = Runner/Info.plist;
293 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 297 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
294 - PRODUCT_BUNDLE_IDENTIFIER = com.example.appFrontend; 298 + LIBRARY_SEARCH_PATHS = (
299 + "$(inherited)",
300 + "$(PROJECT_DIR)/Flutter",
301 + );
302 + PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterApplication1;
295 PRODUCT_NAME = "$(TARGET_NAME)"; 303 PRODUCT_NAME = "$(TARGET_NAME)";
296 SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 304 SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
297 SWIFT_VERSION = 5.0; 305 SWIFT_VERSION = 5.0;
...@@ -413,9 +421,17 @@ ...@@ -413,9 +421,17 @@
413 CLANG_ENABLE_MODULES = YES; 421 CLANG_ENABLE_MODULES = YES;
414 CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 422 CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
415 ENABLE_BITCODE = NO; 423 ENABLE_BITCODE = NO;
424 + FRAMEWORK_SEARCH_PATHS = (
425 + "$(inherited)",
426 + "$(PROJECT_DIR)/Flutter",
427 + );
416 INFOPLIST_FILE = Runner/Info.plist; 428 INFOPLIST_FILE = Runner/Info.plist;
417 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 429 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
418 - PRODUCT_BUNDLE_IDENTIFIER = com.example.appFrontend; 430 + LIBRARY_SEARCH_PATHS = (
431 + "$(inherited)",
432 + "$(PROJECT_DIR)/Flutter",
433 + );
434 + PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterApplication1;
419 PRODUCT_NAME = "$(TARGET_NAME)"; 435 PRODUCT_NAME = "$(TARGET_NAME)";
420 SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 436 SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
421 SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 437 SWIFT_OPTIMIZATION_LEVEL = "-Onone";
...@@ -432,9 +448,17 @@ ...@@ -432,9 +448,17 @@
432 CLANG_ENABLE_MODULES = YES; 448 CLANG_ENABLE_MODULES = YES;
433 CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 449 CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
434 ENABLE_BITCODE = NO; 450 ENABLE_BITCODE = NO;
451 + FRAMEWORK_SEARCH_PATHS = (
452 + "$(inherited)",
453 + "$(PROJECT_DIR)/Flutter",
454 + );
435 INFOPLIST_FILE = Runner/Info.plist; 455 INFOPLIST_FILE = Runner/Info.plist;
436 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 456 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
437 - PRODUCT_BUNDLE_IDENTIFIER = com.example.appFrontend; 457 + LIBRARY_SEARCH_PATHS = (
458 + "$(inherited)",
459 + "$(PROJECT_DIR)/Flutter",
460 + );
461 + PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterApplication1;
438 PRODUCT_NAME = "$(TARGET_NAME)"; 462 PRODUCT_NAME = "$(TARGET_NAME)";
439 SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 463 SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
440 SWIFT_VERSION = 5.0; 464 SWIFT_VERSION = 5.0;
......
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
2 <Workspace 2 <Workspace
3 version = "1.0"> 3 version = "1.0">
4 <FileRef 4 <FileRef
5 - location = "self:"> 5 + location = "group:Runner.xcodeproj">
6 </FileRef> 6 </FileRef>
7 </Workspace> 7 </Workspace>
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
11 <key>CFBundleInfoDictionaryVersion</key> 11 <key>CFBundleInfoDictionaryVersion</key>
12 <string>6.0</string> 12 <string>6.0</string>
13 <key>CFBundleName</key> 13 <key>CFBundleName</key>
14 - <string>app_frontend</string> 14 + <string>flutter_application_1</string>
15 <key>CFBundlePackageType</key> 15 <key>CFBundlePackageType</key>
16 <string>APPL</string> 16 <string>APPL</string>
17 <key>CFBundleShortVersionString</key> 17 <key>CFBundleShortVersionString</key>
......
...@@ -12,15 +12,6 @@ class MyApp extends StatelessWidget { ...@@ -12,15 +12,6 @@ class MyApp extends StatelessWidget {
12 return MaterialApp( 12 return MaterialApp(
13 title: 'Flutter Demo', 13 title: 'Flutter Demo',
14 theme: ThemeData( 14 theme: ThemeData(
15 - // This is the theme of your application.
16 - //
17 - // Try running your application with "flutter run". You'll see the
18 - // application has a blue toolbar. Then, without quitting the app, try
19 - // changing the primarySwatch below to Colors.green and then invoke
20 - // "hot reload" (press "r" in the console where you ran "flutter run",
21 - // or simply save your changes to "hot reload" in a Flutter IDE).
22 - // Notice that the counter didn't reset back to zero; the application
23 - // is not restarted.
24 primarySwatch: Colors.blue, 15 primarySwatch: Colors.blue,
25 ), 16 ),
26 home: HomePage(), 17 home: HomePage(),
......
1 +import 'package:flutter/material.dart';
2 +import 'package:flutter/services.dart';
3 +import '../shared/colors.dart';
4 +import 'package:flutter_screenutil/flutter_screenutil.dart';
5 +
6 +class DashBoard extends StatefulWidget {
7 + @override
8 + _DashBoardState createState() => _DashBoardState();
9 +}
10 +
11 +class _DashBoardState extends State<DashBoard> {
12 + Widget build(BuildContext context) {
13 + return MaterialApp(
14 + title: 'Welcome to Flutter',
15 + home: Scaffold(
16 + appBar: AppBar(
17 + title: Text('Welcome to Flutter'),
18 + ),
19 + body: Center(
20 + child: Text('Hello World'),
21 + ),
22 + ),
23 + );
24 + }
25 +}
1 +import 'package:flutter/material.dart';
2 +import 'package:flutter/services.dart';
3 +import '../shared/colors.dart';
4 +import 'package:flutter_screenutil/flutter_screenutil.dart';
5 +import './SignInPage.dart';
6 +
7 +class HomePage extends StatefulWidget {
8 + final String pageTitle;
9 + int screenCount = 0;
10 + HomePage({Key key, this.pageTitle}) : super(key: key);
11 +
12 + @override
13 + _HomePageState createState() => _HomePageState();
14 +}
15 +
16 +/// first page class
17 +class _HomePageState extends State<HomePage> {
18 + void increaseScreen() {
19 + setState(() {
20 + widget.screenCount++;
21 + });
22 + }
23 +
24 + @override
25 + void initState() {
26 + SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
27 +
28 + super.initState();
29 + }
30 +
31 + @override
32 + Widget build(BuildContext context) {
33 + final Size size = MediaQuery.of(context).size;
34 +
35 + ScreenUtil.instance = ScreenUtil(width: size.width, height: size.height)
36 + ..init(context);
37 +
38 + return Scaffold(
39 + body: GestureDetector(
40 + child: Container(
41 + color: Colors.white,
42 + height: size.height,
43 + child: Center(
44 + child: MediaQuery(
45 + data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
46 + child: Column(
47 + mainAxisAlignment: MainAxisAlignment.center,
48 + crossAxisAlignment: CrossAxisAlignment.center,
49 + children: <Widget>[
50 + Container(
51 + height: size.height * 0.5,
52 + child: Column(
53 + mainAxisAlignment: MainAxisAlignment.end,
54 + children: <Widget>[
55 + Row(
56 + mainAxisAlignment: MainAxisAlignment.center,
57 + children: <Widget>[
58 + Text(
59 + 'SMART MEDICINE BOX',
60 + textScaleFactor: 1.0,
61 + style: TextStyle(
62 + color: Color(0xff004ca2),
63 + fontSize: 20,
64 + fontFamily: 'Noto',
65 + fontWeight: FontWeight.bold),
66 + ),
67 + ],
68 + ),
69 + AnimatedOpacity(
70 + opacity: 1,
71 + duration: Duration(milliseconds: 500),
72 + child: Container(
73 + padding: EdgeInsets.fromLTRB(0, 0, 0, 20),
74 + child: Image.asset('images/main_logo.png',
75 + width: 200, height: 250)),
76 + ),
77 + ],
78 + ),
79 + ),
80 + Container(
81 + height: size.height * 0.3,
82 + child: Column(
83 + mainAxisAlignment: MainAxisAlignment.end,
84 + crossAxisAlignment: CrossAxisAlignment.center,
85 + mainAxisSize: MainAxisSize.max,
86 + children: <Widget>[
87 + GestureDetector(
88 + child: Container(
89 + width: size.width * 0.8,
90 + height: 46,
91 + margin: EdgeInsets.only(bottom: 0),
92 + child: FlatButton(
93 + padding: EdgeInsets.fromLTRB(0, 5, 0, 5),
94 + onPressed: () {
95 + Navigator.push(
96 + context,
97 + MaterialPageRoute(
98 + builder: (BuildContext context) =>
99 + SignInPage(),
100 + ));
101 + },
102 + child: Text(
103 + '로그인 sdf',
104 + textScaleFactor: 1.0,
105 + style: TextStyle(
106 + fontSize: 1,
107 + fontFamily: 'Noto',
108 + fontWeight: FontWeight.bold),
109 + ),
110 + textColor: Colors.black,
111 + color: Color(0xff1674f6),
112 + shape: RoundedRectangleBorder(
113 + borderRadius: BorderRadius.circular(50)),
114 + )),
115 + ),
116 + GestureDetector(
117 + child: Container(
118 + width: size.width * 0.8,
119 + padding: EdgeInsets.all(0),
120 + child: OutlineButton(
121 + padding: EdgeInsets.fromLTRB(0, 25, 0, 15),
122 + onPressed: () {
123 + Navigator.push(
124 + context,
125 + MaterialPageRoute(
126 + builder: (BuildContext context) =>
127 + SignInPage(),
128 + ));
129 + },
130 + child: Text(
131 + '회원 가입',
132 + textScaleFactor: 1.0,
133 + style:
134 + TextStyle(fontSize: 16, fontFamily: 'Noto'),
135 + ),
136 + textColor: Colors.black,
137 + highlightedBorderColor: highlightColor,
138 + borderSide: BorderSide.none,
139 + shape: RoundedRectangleBorder(
140 + borderRadius: BorderRadius.circular(50)),
141 + )),
142 + ),
143 + ],
144 + ),
145 + ),
146 + ],
147 + ),
148 + )),
149 + ),
150 + ),
151 + backgroundColor: bgColor,
152 + );
153 + }
154 +}
1 +import 'package:flutter/material.dart';
2 +import 'package:flutter/services.dart';
3 +
4 +class SignInPage extends StatefulWidget {
5 + @override
6 + _SignInPageState createState() => _SignInPageState();
7 +}
8 +
9 +///
10 +class _SignInPageState extends State<SignInPage> {
11 + bool passwordVisible = false;
12 + bool _validateEmail = false;
13 + bool _validatePassword = false;
14 + final emailController = TextEditingController();
15 + final passwordController = TextEditingController();
16 +
17 + Widget build(BuildContext context) {
18 + final Size size = MediaQuery.of(context).size;
19 + final mqData = MediaQuery.of(context);
20 + final mqDataScale = mqData.copyWith(textScaleFactor: 1.0);
21 +
22 + return WillPopScope(
23 + onWillPop: () {
24 + if (Navigator.canPop(context)) {
25 + //Navigator.pop(context);
26 + Navigator.of(context).pop();
27 + } else {
28 + SystemNavigator.pop();
29 + }
30 + },
31 + child: Scaffold(
32 + // appBar: AppBar(
33 + // elevation: 0,
34 + // backgroundColor: white,
35 + // title: Padding(
36 + // padding: const EdgeInsets.fromLTRB(0, 0, 0, 0),
37 + // child: Text('',
38 + // textScaleFactor: 1.0,
39 + // style: TextStyle(
40 + // color: Colors.grey, fontFamily: 'Noto', fontSize: 16)),
41 + // )),
42 + body: Builder(
43 + builder: (BuildContext context) {
44 + return ListView(
45 + children: <Widget>[
46 + Padding(
47 + padding: EdgeInsets.only(top: 25, left: 18, right: 18),
48 + child: Stack(
49 + children: <Widget>[
50 + Column(
51 + mainAxisAlignment: MainAxisAlignment.start,
52 + crossAxisAlignment: CrossAxisAlignment.start,
53 + children: <Widget>[
54 + Padding(
55 + padding: const EdgeInsets.fromLTRB(20, 0, 0, 0),
56 + child: Text('로그인',
57 + textScaleFactor: 1.0,
58 + style: TextStyle(
59 + fontSize: 34,
60 + fontFamily: 'Noto',
61 + fontWeight: FontWeight.bold)),
62 + ),
63 + Padding(
64 + padding: const EdgeInsets.fromLTRB(20, 0, 20, 0),
65 + child: new Column(
66 + children: <Widget>[
67 + MediaQuery(
68 + data: mqDataScale,
69 + child: TextFormField(
70 + keyboardType: TextInputType.text,
71 + controller: emailController,
72 + decoration: InputDecoration(
73 + labelText: '이메일',
74 + helperText: '이메일 주소를 입력해주세요.',
75 + contentPadding:
76 + EdgeInsets.fromLTRB(0, 5, 0, 5),
77 + errorText: _validateEmail
78 + ? '등록되지 않은 아이디입니다.'
79 + : null,
80 + labelStyle: TextStyle(
81 + fontSize: 14,
82 + color: Color(0xff000000)),
83 + helperStyle: TextStyle(
84 + fontSize: 12,
85 + color: Color(0xffb2b2b2)),
86 + // Here is key idea
87 + ),
88 + ),
89 + )
90 + ],
91 + ),
92 + ),
93 + Padding(
94 + padding: const EdgeInsets.fromLTRB(20, 0, 20, 20),
95 + child: new Column(
96 + children: <Widget>[
97 + MediaQuery(
98 + data: mqDataScale,
99 + child: TextFormField(
100 + keyboardType: TextInputType.text,
101 + controller: passwordController,
102 + obscureText:
103 + !passwordVisible, //This will obscure text dynamically
104 + decoration: InputDecoration(
105 + labelText: '비밀번호',
106 + helperText: '비밀번호를 입력해 주세요.',
107 + errorText: _validatePassword
108 + ? '비밀번호가 일치하지 않습니다.'
109 + : null,
110 + labelStyle: TextStyle(
111 + fontSize: 14,
112 + color: Color(0xff000000)),
113 + helperStyle: TextStyle(
114 + fontSize: 12,
115 + color: Color(0xffb2b2b2)),
116 + // Here is key idea
117 + suffixIcon: IconButton(
118 + icon: Icon(
119 + // Based on passwordVisible state choose the icon
120 + passwordVisible
121 + ? Icons.visibility
122 + : Icons.visibility_off,
123 + color: Color(0xff2c2c2c),
124 + ),
125 + onPressed: () {
126 + // Update the state i.e. toogle the state of passwordVisible variable
127 + setState(() {
128 + passwordVisible = !passwordVisible;
129 + });
130 + },
131 + ),
132 + ),
133 + ),
134 + )
135 + ],
136 + ),
137 + ),
138 + Row(
139 + mainAxisAlignment: MainAxisAlignment.center,
140 + children: <Widget>[
141 + Container(
142 + width: size.width * 0.8,
143 + height: 46,
144 + child: RaisedButton(
145 + color: Color(0xff1674f6),
146 + child: Text("로그인",
147 + textScaleFactor: 1.0,
148 + style: TextStyle(
149 + color: Colors.white,
150 + fontSize: 16,
151 + fontFamily: 'Noto',
152 + fontWeight: FontWeight.bold)),
153 + onPressed: () async {
154 + String saveMessage;
155 + if (emailController.text.isEmpty ||
156 + passwordController.text.isEmpty) {
157 + showDialog(
158 + context: context,
159 + builder: (BuildContext context) {
160 + return AlertDialog(
161 + title: new Text('이메일 & 비밀번호'),
162 + content: new Text(
163 + '이메일과 비밀번호를 입력해주세요.'),
164 + actions: <Widget>[
165 + new FlatButton(
166 + child: new Text('Close'),
167 + onPressed: () {
168 + Navigator.of(context)
169 + .pop();
170 + })
171 + ],
172 + );
173 + });
174 + }
175 + },
176 + shape: RoundedRectangleBorder(
177 + borderRadius: BorderRadius.circular(20)),
178 + ),
179 + ),
180 + ],
181 + ),
182 + ],
183 + ),
184 + ],
185 + ),
186 + ),
187 + ],
188 + );
189 + },
190 + ),
191 + ),
192 + );
193 + }
194 +}
1 +import 'package:flutter/material.dart';
2 +import 'package:flutter/services.dart';
3 +import '../shared/colors.dart';
4 +import 'package:flutter_screenutil/flutter_screenutil.dart';
5 +
6 +class SignUpPage extends StatefulWidget {
7 + @override
8 + _SignUpPageState createState() => _SignUpPageState();
9 +}
10 +
11 +class _SignUpPageState extends State<SignUpPage> {
12 + Widget build(BuildContext context) {
13 + return MaterialApp(
14 + title: 'Welcome to Flutter',
15 + home: Scaffold(
16 + appBar: AppBar(
17 + title: Text('Welcome to Flutter'),
18 + ),
19 + body: Center(
20 + child: Text('Hello World'),
21 + ),
22 + ),
23 + );
24 + }
25 +}
1 +import 'package:flutter/material.dart';
2 +
3 + const Color bgColor = Color(0xffF4F7FA);
4 +// const Color primaryColor = Colors.green;
5 + const Color primaryColor = Color(0xff44c662);
6 + const Color white = Colors.white;
7 + const Color darkText = Colors.black54;
8 + const Color highlightColor = Colors.green;
...@@ -7,61 +7,61 @@ packages: ...@@ -7,61 +7,61 @@ packages:
7 name: async 7 name: async
8 url: "https://pub.dartlang.org" 8 url: "https://pub.dartlang.org"
9 source: hosted 9 source: hosted
10 - version: "2.5.0" 10 + version: "2.5.0-nullsafety.1"
11 boolean_selector: 11 boolean_selector:
12 dependency: transitive 12 dependency: transitive
13 description: 13 description:
14 name: boolean_selector 14 name: boolean_selector
15 url: "https://pub.dartlang.org" 15 url: "https://pub.dartlang.org"
16 source: hosted 16 source: hosted
17 - version: "2.1.0" 17 + version: "2.1.0-nullsafety.1"
18 characters: 18 characters:
19 dependency: transitive 19 dependency: transitive
20 description: 20 description:
21 name: characters 21 name: characters
22 url: "https://pub.dartlang.org" 22 url: "https://pub.dartlang.org"
23 source: hosted 23 source: hosted
24 - version: "1.1.0" 24 + version: "1.1.0-nullsafety.3"
25 charcode: 25 charcode:
26 dependency: transitive 26 dependency: transitive
27 description: 27 description:
28 name: charcode 28 name: charcode
29 url: "https://pub.dartlang.org" 29 url: "https://pub.dartlang.org"
30 source: hosted 30 source: hosted
31 - version: "1.2.0" 31 + version: "1.2.0-nullsafety.1"
32 clock: 32 clock:
33 dependency: transitive 33 dependency: transitive
34 description: 34 description:
35 name: clock 35 name: clock
36 url: "https://pub.dartlang.org" 36 url: "https://pub.dartlang.org"
37 source: hosted 37 source: hosted
38 - version: "1.1.0" 38 + version: "1.1.0-nullsafety.1"
39 collection: 39 collection:
40 dependency: transitive 40 dependency: transitive
41 description: 41 description:
42 name: collection 42 name: collection
43 url: "https://pub.dartlang.org" 43 url: "https://pub.dartlang.org"
44 source: hosted 44 source: hosted
45 - version: "1.15.0" 45 + version: "1.15.0-nullsafety.3"
46 - cupertino_icons:
47 - dependency: "direct main"
48 - description:
49 - name: cupertino_icons
50 - url: "https://pub.dartlang.org"
51 - source: hosted
52 - version: "1.0.2"
53 fake_async: 46 fake_async:
54 dependency: transitive 47 dependency: transitive
55 description: 48 description:
56 name: fake_async 49 name: fake_async
57 url: "https://pub.dartlang.org" 50 url: "https://pub.dartlang.org"
58 source: hosted 51 source: hosted
59 - version: "1.2.0" 52 + version: "1.2.0-nullsafety.1"
60 flutter: 53 flutter:
61 dependency: "direct main" 54 dependency: "direct main"
62 description: flutter 55 description: flutter
63 source: sdk 56 source: sdk
64 version: "0.0.0" 57 version: "0.0.0"
58 + flutter_screenutil:
59 + dependency: "direct main"
60 + description:
61 + name: flutter_screenutil
62 + url: "https://pub.dartlang.org"
63 + source: hosted
64 + version: "0.7.0"
65 flutter_test: 65 flutter_test:
66 dependency: "direct dev" 66 dependency: "direct dev"
67 description: flutter 67 description: flutter
...@@ -73,21 +73,21 @@ packages: ...@@ -73,21 +73,21 @@ packages:
73 name: matcher 73 name: matcher
74 url: "https://pub.dartlang.org" 74 url: "https://pub.dartlang.org"
75 source: hosted 75 source: hosted
76 - version: "0.12.10" 76 + version: "0.12.10-nullsafety.1"
77 meta: 77 meta:
78 dependency: transitive 78 dependency: transitive
79 description: 79 description:
80 name: meta 80 name: meta
81 url: "https://pub.dartlang.org" 81 url: "https://pub.dartlang.org"
82 source: hosted 82 source: hosted
83 - version: "1.3.0" 83 + version: "1.3.0-nullsafety.3"
84 path: 84 path:
85 dependency: transitive 85 dependency: transitive
86 description: 86 description:
87 name: path 87 name: path
88 url: "https://pub.dartlang.org" 88 url: "https://pub.dartlang.org"
89 source: hosted 89 source: hosted
90 - version: "1.8.0" 90 + version: "1.8.0-nullsafety.1"
91 sky_engine: 91 sky_engine:
92 dependency: transitive 92 dependency: transitive
93 description: flutter 93 description: flutter
...@@ -99,55 +99,55 @@ packages: ...@@ -99,55 +99,55 @@ packages:
99 name: source_span 99 name: source_span
100 url: "https://pub.dartlang.org" 100 url: "https://pub.dartlang.org"
101 source: hosted 101 source: hosted
102 - version: "1.8.0" 102 + version: "1.8.0-nullsafety.2"
103 stack_trace: 103 stack_trace:
104 dependency: transitive 104 dependency: transitive
105 description: 105 description:
106 name: stack_trace 106 name: stack_trace
107 url: "https://pub.dartlang.org" 107 url: "https://pub.dartlang.org"
108 source: hosted 108 source: hosted
109 - version: "1.10.0" 109 + version: "1.10.0-nullsafety.1"
110 stream_channel: 110 stream_channel:
111 dependency: transitive 111 dependency: transitive
112 description: 112 description:
113 name: stream_channel 113 name: stream_channel
114 url: "https://pub.dartlang.org" 114 url: "https://pub.dartlang.org"
115 source: hosted 115 source: hosted
116 - version: "2.1.0" 116 + version: "2.1.0-nullsafety.1"
117 string_scanner: 117 string_scanner:
118 dependency: transitive 118 dependency: transitive
119 description: 119 description:
120 name: string_scanner 120 name: string_scanner
121 url: "https://pub.dartlang.org" 121 url: "https://pub.dartlang.org"
122 source: hosted 122 source: hosted
123 - version: "1.1.0" 123 + version: "1.1.0-nullsafety.1"
124 term_glyph: 124 term_glyph:
125 dependency: transitive 125 dependency: transitive
126 description: 126 description:
127 name: term_glyph 127 name: term_glyph
128 url: "https://pub.dartlang.org" 128 url: "https://pub.dartlang.org"
129 source: hosted 129 source: hosted
130 - version: "1.2.0" 130 + version: "1.2.0-nullsafety.1"
131 test_api: 131 test_api:
132 dependency: transitive 132 dependency: transitive
133 description: 133 description:
134 name: test_api 134 name: test_api
135 url: "https://pub.dartlang.org" 135 url: "https://pub.dartlang.org"
136 source: hosted 136 source: hosted
137 - version: "0.2.19" 137 + version: "0.2.19-nullsafety.2"
138 typed_data: 138 typed_data:
139 dependency: transitive 139 dependency: transitive
140 description: 140 description:
141 name: typed_data 141 name: typed_data
142 url: "https://pub.dartlang.org" 142 url: "https://pub.dartlang.org"
143 source: hosted 143 source: hosted
144 - version: "1.3.0" 144 + version: "1.3.0-nullsafety.3"
145 vector_math: 145 vector_math:
146 dependency: transitive 146 dependency: transitive
147 description: 147 description:
148 name: vector_math 148 name: vector_math
149 url: "https://pub.dartlang.org" 149 url: "https://pub.dartlang.org"
150 source: hosted 150 source: hosted
151 - version: "2.1.0" 151 + version: "2.1.0-nullsafety.3"
152 sdks: 152 sdks:
153 - dart: ">=2.12.0-0.0 <3.0.0" 153 + dart: ">=2.10.0-110 <2.11.0"
......
1 -name: app_frontend 1 +name: flutter_application_1
2 description: A new Flutter project. 2 description: A new Flutter project.
3 3
4 # The following line prevents the package from being accidentally published to 4 # The following line prevents the package from being accidentally published to
...@@ -24,53 +24,19 @@ dependencies: ...@@ -24,53 +24,19 @@ dependencies:
24 flutter: 24 flutter:
25 sdk: flutter 25 sdk: flutter
26 26
27 + flutter_screenutil: ^0.7.0
27 28
28 - # The following adds the Cupertino Icons font to your application.
29 - # Use with the CupertinoIcons class for iOS style icons.
30 - cupertino_icons: ^1.0.2
31 29
32 dev_dependencies: 30 dev_dependencies:
33 flutter_test: 31 flutter_test:
34 sdk: flutter 32 sdk: flutter
35 33
36 -# For information on the generic Dart part of this file, see the
37 -# following page: https://dart.dev/tools/pub/pubspec
38 -
39 -# The following section is specific to Flutter.
40 flutter: 34 flutter:
41 35
42 - # The following line ensures that the Material Icons font is
43 - # included with your application, so that you can use the icons in
44 - # the material Icons class.
45 - uses-material-design: true
46 -
47 - # To add assets to your application, add an assets section, like this:
48 - # assets:
49 - # - images/a_dot_burr.jpeg
50 - # - images/a_dot_ham.jpeg
51 36
52 - # An image asset can refer to one or more resolution-specific "variants", see 37 + uses-material-design: true
53 - # https://flutter.dev/assets-and-images/#resolution-aware.
54 38
55 - # For details regarding adding assets from package dependencies, see 39 + assets:
56 - # https://flutter.dev/assets-and-images/#from-packages 40 + - images/
41 + - images/main_logo.png
57 42
58 - # To add custom fonts to your application, add a fonts section here,
59 - # in this "flutter" section. Each entry in this list should have a
60 - # "family" key with the font family name, and a "fonts" key with a
61 - # list giving the asset and other descriptors for the font. For
62 - # example:
63 - # fonts:
64 - # - family: Schyler
65 - # fonts:
66 - # - asset: fonts/Schyler-Regular.ttf
67 - # - asset: fonts/Schyler-Italic.ttf
68 - # style: italic
69 - # - family: Trajan Pro
70 - # fonts:
71 - # - asset: fonts/TrajanPro.ttf
72 - # - asset: fonts/TrajanPro_Bold.ttf
73 - # weight: 700
74 - #
75 - # For details regarding fonts from package dependencies,
76 - # see https://flutter.dev/custom-fonts/#from-packages
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
8 import 'package:flutter/material.dart'; 8 import 'package:flutter/material.dart';
9 import 'package:flutter_test/flutter_test.dart'; 9 import 'package:flutter_test/flutter_test.dart';
10 10
11 -import 'package:app_frontend/main.dart'; 11 +import 'package:flutter_application_1/main.dart';
12 12
13 void main() { 13 void main() {
14 testWidgets('Counter increments smoke test', (WidgetTester tester) async { 14 testWidgets('Counter increments smoke test', (WidgetTester tester) async {
......