Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
feelver
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
2F-ART
feelver
Commits
c2e95add
Commit
c2e95add
authored
Jul 17, 2020
by
art
Browse files
Options
Browse Files
Download
Plain Diff
update
parents
a73af0d6
4f2a7a1b
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
650 additions
and
197 deletions
+650
-197
lib/model/Login/login_model.dart
+104
-18
lib/model/register/register_model.dart
+15
-0
lib/service/api.dart
+22
-0
lib/ui/login/login.dart
+12
-9
lib/ui/register/register_email.dart
+167
-170
lib/ui/register/register_presenter.dart
+330
-0
No files found.
lib/model/Login/login_model.dart
View file @
c2e95add
...
...
@@ -3,10 +3,7 @@ class LoginModel {
int
expires
;
User
user
;
LoginModel
({
this
.
token
,
this
.
expires
,
this
.
user
});
LoginModel
({
this
.
token
,
this
.
expires
,
this
.
user
});
LoginModel
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
token
=
json
[
'token'
];
...
...
@@ -27,17 +24,17 @@ class LoginModel {
class
User
{
int
id
;
String
roleId
;
Null
roleId
;
String
name
;
String
email
;
String
avatar
;
String
emailVerifiedAt
;
Null
emailVerifiedAt
;
int
status
;
int
fvRoleId
;
String
settings
;
String
createdAt
;
String
updatedAt
;
String
customerInfo
;
Null
settings
;
Null
createdAt
;
Null
updatedAt
;
CustomerInfo
customerInfo
;
User
(
{
this
.
id
,
...
...
@@ -65,23 +62,112 @@ class User {
settings
=
json
[
'settings'
];
createdAt
=
json
[
'created_at'
];
updatedAt
=
json
[
'updated_at'
];
customerInfo
=
json
[
'customer_info'
];
customerInfo
=
json
[
'customer_info'
]
!=
null
?
new
CustomerInfo
.
fromJson
(
json
[
'customer_info'
])
:
null
;
}
Map
<
String
,
dynamic
>
toJson
()
{
final
Map
<
String
,
dynamic
>
data
=
new
Map
<
String
,
dynamic
>();
data
[
'id'
]=
this
.
id
;
data
[
'role_id'
]
==
null
?[]:
data
[
'role_id'
]
=
this
.
roleId
;
data
[
'id'
]
=
this
.
id
;
data
[
'role_id'
]
=
this
.
roleId
;
data
[
'name'
]
=
this
.
name
;
data
[
'email'
]
=
this
.
email
;
data
[
'avatar'
]
=
this
.
avatar
;
data
[
'email_verified_at'
]
==
null
?[]:
data
[
'email_verified_at'
]
=
this
.
emailVerifiedAt
;
data
[
'email_verified_at'
]
=
this
.
emailVerifiedAt
;
data
[
'status'
]
=
this
.
status
;
data
[
'fv_role_id'
]
=
this
.
fvRoleId
;
data
[
'settings'
]==
null
?[]:
data
[
'settings'
]
=
this
.
settings
;
data
[
'created_at'
]==
null
?[]:
data
[
'created_at'
]
=
this
.
createdAt
;
data
[
'updated_at'
]==
null
?[]:
data
[
'updated_at'
]
=
this
.
updatedAt
;
data
[
'customer_info'
]==
null
?[]:
data
[
'customer_info'
]
=
this
.
customerInfo
;
data
[
'settings'
]
=
this
.
settings
;
data
[
'created_at'
]
=
this
.
createdAt
;
data
[
'updated_at'
]
=
this
.
updatedAt
;
if
(
this
.
customerInfo
!=
null
)
{
data
[
'customer_info'
]
=
this
.
customerInfo
.
toJson
();
}
return
data
;
}
}
class
CustomerInfo
{
int
id
;
String
prefix
;
String
name
;
String
lastname
;
String
displayName
;
String
image
;
String
email
;
String
age
;
String
sex
;
String
phone
;
String
address
;
String
socialRegister
;
String
socialType
;
String
status
;
String
approved
;
String
createdAt
;
String
updatedAt
;
int
userId
;
CustomerInfo
(
{
this
.
id
,
this
.
prefix
,
this
.
name
,
this
.
lastname
,
this
.
displayName
,
this
.
image
,
this
.
email
,
this
.
age
,
this
.
sex
,
this
.
phone
,
this
.
address
,
this
.
socialRegister
,
this
.
socialType
,
this
.
status
,
this
.
approved
,
this
.
createdAt
,
this
.
updatedAt
,
this
.
userId
});
CustomerInfo
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
id
=
json
[
'id'
];
prefix
=
json
[
'prefix'
];
name
=
json
[
'name'
];
lastname
=
json
[
'lastname'
];
displayName
=
json
[
'display_name'
];
image
=
json
[
'image'
];
email
=
json
[
'email'
];
age
=
json
[
'age'
];
sex
=
json
[
'sex'
];
phone
=
json
[
'phone'
];
address
=
json
[
'address'
];
socialRegister
=
json
[
'social_register'
];
socialType
=
json
[
'social_type'
];
status
=
json
[
'status'
];
approved
=
json
[
'approved'
];
createdAt
=
json
[
'created_at'
];
updatedAt
=
json
[
'updated_at'
];
userId
=
json
[
'user_id'
];
}
Map
<
String
,
dynamic
>
toJson
()
{
final
Map
<
String
,
dynamic
>
data
=
new
Map
<
String
,
dynamic
>();
data
[
'id'
]
=
this
.
id
;
data
[
'prefix'
]
=
this
.
prefix
;
data
[
'name'
]
=
this
.
name
;
data
[
'lastname'
]
=
this
.
lastname
;
data
[
'display_name'
]
=
this
.
displayName
;
data
[
'image'
]
=
this
.
image
;
data
[
'email'
]
=
this
.
email
;
data
[
'age'
]
=
this
.
age
;
data
[
'sex'
]
=
this
.
sex
;
data
[
'phone'
]
=
this
.
phone
;
data
[
'address'
]
=
this
.
address
;
data
[
'social_register'
]
=
this
.
socialRegister
;
data
[
'social_type'
]
=
this
.
socialType
;
data
[
'status'
]
=
this
.
status
;
data
[
'approved'
]
=
this
.
approved
;
data
[
'created_at'
]
=
this
.
createdAt
;
data
[
'updated_at'
]
=
this
.
updatedAt
;
data
[
'user_id'
]
=
this
.
userId
;
return
data
;
}
}
lib/model/register/register_model.dart
0 → 100644
View file @
c2e95add
class
RegisterModel
{
String
message
;
RegisterModel
({
this
.
message
});
RegisterModel
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
message
=
json
[
'message'
];
}
Map
<
String
,
dynamic
>
toJson
()
{
final
Map
<
String
,
dynamic
>
data
=
new
Map
<
String
,
dynamic
>();
data
[
'message'
]
=
this
.
message
;
return
data
;
}
}
lib/service/api.dart
View file @
c2e95add
...
...
@@ -2,6 +2,7 @@ import 'dart:convert';
import
'package:feelverapp/model/Login/login_model.dart'
;
import
'package:feelverapp/model/base/base.dart'
;
import
'package:feelverapp/model/register/register_model.dart'
;
import
'package:http/http.dart'
as
http
;
...
...
@@ -40,6 +41,27 @@ class Api<T>{
}
Future
<
Response
<
T
>>
register
(
Object
body
)
async
{
var
_model
;
var
_fail
;
var
result
;
// (body as Map)['lang'] = allTranslations.currentLanguage;
await
_httpConnection
(
"
${this._baseApi}
/register"
,
this
.
_headerApi
,
body
)
.
then
((
response
)
{
print
(
"ผลลัพ เท่ากับบบบ "
+
"
${response.body}
"
);
if
(
response
.
statusCode
==
200
)
{
_model
=
RegisterModel
.
fromJson
(
json
.
decode
(
response
.
body
));
}
else
{
_fail
=
FailModel
.
fromJson
(
json
.
decode
(
response
.
body
));
}
result
=
new
Response
<
T
>(
_model
,
_fail
);
});
return
result
;
}
///api environment
Future
<
http
.
Response
>
_httpConnection
(
...
...
lib/ui/login/login.dart
View file @
c2e95add
import
'package:feelverapp/ui/home/home.dart'
;
import
'package:feelverapp/ui/login/login_presenter.dart'
;
//import 'package:feelverapp/ui/login/login_presenter.dart';
import
'package:feelverapp/ui/register/register_email.dart'
;
//import 'package:feelverapp/ui/login/login_presenter.dart';
import
'package:feelverapp/util/SizeConfig.dart'
;
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/material.dart'
;
...
...
@@ -421,13 +422,13 @@ class _LoginPageState extends State<LoginPage> with TickerProviderStateMixin {
size:
20
,
),
),
Text
(
'Login with Facebook'
,
style:
TextStyle
(
fontSize:
SizeConfig
.
getFontSize
(
12
),
)
,
textAlign:
TextAlign
.
center
,
),
// Text(
// 'Login with Facebook',
// style: TextStyle(fontSize: SizeConfig.getFontSize(12)
),
// textAlign: TextAlign.center
,
// )
,
],
),
),
...
...
@@ -476,9 +477,11 @@ class _LoginPageState extends State<LoginPage> with TickerProviderStateMixin {
alignment:
Alignment
.
centerRight
,
child:
GestureDetector
(
onTap:
()
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Register
P
age
()),
MaterialPageRoute
(
builder:
(
context
)
=>
Register
p
age
()),
);
},
child:
Text
(
...
...
lib/ui/register/register_email.dart
View file @
c2e95add
import
'package:feelverapp/ui/home/home.dart'
;
import
'package:feelverapp/ui/login/login.dart'
;
import
'package:feelverapp/ui/login/login_presenter.dart'
;
//import 'package:feelverapp/ui/login/login_presenter.dart';
import
'package:feelverapp/ui/register/register_email.dart'
;
import
'package:feelverapp/ui/register/register_presenter.dart'
;
import
'package:feelverapp/util/SizeConfig.dart'
;
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/material.dart'
;
class
Register
P
age
extends
StatefulWidget
{
class
Register
p
age
extends
StatefulWidget
{
@override
_Register
PageState
createState
()
=>
_RegisterP
ageState
();
_Register
pageState
createState
()
=>
_Registerp
ageState
();
}
class
_RegisterPageState
extends
State
<
RegisterPage
>
with
TickerProviderStateMixin
{
@override
class
_RegisterpageState
extends
State
<
Registerpage
>
with
TickerProviderStateMixin
{
TabController
_tabController
;
RegisterPresenter
presenter
;
@override
void
initState
()
{
// TODO: implement initState
super
.
initState
();
presenter
=
RegisterPresenter
(
this
);
_tabController
=
TabController
(
length:
2
,
vsync:
this
);
_tabController
.
addListener
(
_handleTabSelection
);
// registerBloc = RegisterBloc(this);
// loginBloc = LoginBloc(this);
}
void
_handleTabSelection
()
{
setState
(()
{});
}
@override
void
dispose
()
{
super
.
dispose
();
_tabController
.
dispose
();
}
@override
Widget
build
(
BuildContext
context
)
{
SizeConfig
(
context
);
return
Scaffold
(
body:
_setupView
(),
);
}
_setupView
()
{
return
SingleChildScrollView
(
return
Container
(
child:
Column
(
children:
<
Widget
>[
Container
(
...
...
@@ -72,14 +90,37 @@ class _RegisterPageState extends State<RegisterPage> with TickerProviderStateMix
],
),
SizedBox
(
height:
SizeConfig
.
getWidth
(
30
)),
Expanded
(
child:
new
Container
(
// height: double.maxFinite,
child:
new
TabBarView
(
controller:
_tabController
,
children:
<
Widget
>[
_formLogin
(),
_phoneregis
()
// Container(
// color: Colors.red,
// ),
// Container(
// color: Colors.green,
// ),
],
),
),
),
// _phoneLogin(),
],
),
);
}
Widget
_formLogin
()
{
return
Container
(
print
(
"index = "
+
"
${_tabController.index}
"
);
return
SingleChildScrollView
(
child:
Form
(
child:
Column
(
children:
<
Widget
>[
...
...
@@ -107,7 +148,8 @@ class _RegisterPageState extends State<RegisterPage> with TickerProviderStateMix
),
),
child:
TextFormField
(
// controller: loginBloc.emailCtrl,
controller:
presenter
.
emailCtrl
,
// validator: loginBloc.validateField,
decoration:
InputDecoration
(
contentPadding:
EdgeInsets
.
symmetric
(
...
...
@@ -146,7 +188,7 @@ class _RegisterPageState extends State<RegisterPage> with TickerProviderStateMix
BorderRadius
.
circular
(
SizeConfig
.
getPadding
(
50.0
)),
),
child:
TextFormField
(
// controller: loginBloc
.passCtrl,
controller:
presenter
.
passCtrl
,
// validator: loginBloc.validateField,
decoration:
InputDecoration
(
contentPadding:
EdgeInsets
.
symmetric
(
...
...
@@ -176,16 +218,14 @@ class _RegisterPageState extends State<RegisterPage> with TickerProviderStateMix
Padding
(
padding:
EdgeInsets
.
symmetric
(
vertical:
SizeConfig
.
getPadding
(
8.0
),
horizontal:
SizeConfig
.
getPadding
(
24
),
),
horizontal:
SizeConfig
.
getPadding
(
24
)),
child:
Card
(
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
SizeConfig
.
getPadding
(
50.0
),
),
borderRadius:
BorderRadius
.
circular
(
SizeConfig
.
getPadding
(
50.0
)),
),
child:
TextFormField
(
// controller: loginBloc.email
Ctrl,
controller:
presenter
.
firstname
Ctrl
,
// validator: loginBloc.validateField,
decoration:
InputDecoration
(
contentPadding:
EdgeInsets
.
symmetric
(
...
...
@@ -193,15 +233,14 @@ class _RegisterPageState extends State<RegisterPage> with TickerProviderStateMix
horizontal:
SizeConfig
.
getPadding
(
16
),
),
// hintText:
// allTranslations.text(key2: 'email', key: 'login') +
// ' / ' +
// allTranslations.text(
// key2: 'tel_number', key: 'register'),
// allTranslations.text(key2: 'password', key: 'login'),
border:
OutlineInputBorder
(
borderSide:
BorderSide
.
none
),
),
),
),
),
),
Container
(
Container
(
alignment:
Alignment
.
topLeft
,
padding:
EdgeInsets
.
only
(
left:
SizeConfig
.
getPadding
(
30
)),
child:
Text
(
...
...
@@ -216,16 +255,14 @@ class _RegisterPageState extends State<RegisterPage> with TickerProviderStateMix
Padding
(
padding:
EdgeInsets
.
symmetric
(
vertical:
SizeConfig
.
getPadding
(
8.0
),
horizontal:
SizeConfig
.
getPadding
(
24
),
),
horizontal:
SizeConfig
.
getPadding
(
24
)),
child:
Card
(
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
SizeConfig
.
getPadding
(
50.0
),
),
borderRadius:
BorderRadius
.
circular
(
SizeConfig
.
getPadding
(
50.0
)),
),
child:
TextFormField
(
// controller: loginBloc.email
Ctrl,
controller:
presenter
.
lastname
Ctrl
,
// validator: loginBloc.validateField,
decoration:
InputDecoration
(
contentPadding:
EdgeInsets
.
symmetric
(
...
...
@@ -233,199 +270,159 @@ class _RegisterPageState extends State<RegisterPage> with TickerProviderStateMix
horizontal:
SizeConfig
.
getPadding
(
16
),
),
// hintText:
// allTranslations.text(key2: 'email', key: 'login') +
// ' / ' +
// allTranslations.text(
// key2: 'tel_number', key: 'register'),
// allTranslations.text(key2: 'password', key: 'login'),
border:
OutlineInputBorder
(
borderSide:
BorderSide
.
none
),
),
),
),
),
SizedBox
(
height:
SizeConfig
.
getWidth
(
24
),
),
_submitLoginButton
(),
_policyText
(),
SizedBox
(
height:
SizeConfig
.
getWidth
(
20
),
),
_facebookLoginButton
(),
],
),
),
);
}
_submitLoginButton
()
{
return
Padding
(
padding:
EdgeInsets
.
symmetric
(
vertical:
SizeConfig
.
getPadding
(
10.0
),
horizontal:
SizeConfig
.
getPadding
(
32
)),
child:
Container
(
height:
SizeConfig
.
getWidth
(
55
),
child:
CupertinoButton
(
color:
Color
.
fromRGBO
(
106
,
179
,
170
,
1
),
padding:
EdgeInsets
.
all
(
0
),
borderRadius:
BorderRadius
.
all
(
Radius
.
circular
(
50
)),
onPressed:
()
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
LoginPage
()),
);
// if (loginBloc.formKey.currentState.validate()) {
// loginBloc.getLogin();
// }
},
child:
Center
(
Widget
_phoneregis
()
{
print
(
"index = "
+
"
${_tabController.index}
"
);
return
SingleChildScrollView
(
child:
Form
(
child:
Column
(
children:
<
Widget
>[
Container
(
alignment:
Alignment
.
topLeft
,
padding:
EdgeInsets
.
only
(
left:
SizeConfig
.
getPadding
(
30
)),
child:
Text
(
'สมัครสมาชิก'
,
style:
TextStyle
(
color:
Colors
.
white
),
),
),
),
'เบอร์โทร'
,
style:
TextStyle
(
color:
Colors
.
black
,
fontSize:
SizeConfig
.
getFontSize
(
20
),
fontFamily:
"SF_Pro_Text"
,
fontWeight:
FontWeight
.
w500
),
),
);
}
Widget
_facebookLoginButton
()
{
return
Padding
(
padding:
EdgeInsets
.
symmetric
(
vertical:
SizeConfig
.
getPadding
(
16.0
),
horizontal:
SizeConfig
.
getPadding
(
32
)),
child:
Container
(
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
SizeConfig
.
getPadding
(
50
)),
color:
Color
(
0xff3b5998
),
),
height:
SizeConfig
.
getWidth
(
55
),
child:
CupertinoButton
(
color:
Color
(
0xff3b5998
),
padding:
EdgeInsets
.
all
(
0
),
// onPressed: loginBloc.getFacebookLogin,
child:
Center
(
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
<
Widget
>[
Padding
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
SizeConfig
.
getPadding
(
8.0
)),
child:
ImageIcon
(
AssetImage
(
'assets/images/facebook-icon.png'
),
size:
20
,
),
),
Text
(
'Login with Facebook'
,
style:
TextStyle
(
fontSize:
SizeConfig
.
getFontSize
(
12
)),
textAlign:
TextAlign
.
center
,
vertical:
SizeConfig
.
getPadding
(
8.0
),
horizontal:
SizeConfig
.
getPadding
(
24
),
),
],
child:
Card
(
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
SizeConfig
.
getPadding
(
50.0
),
),
),
child:
TextFormField
(
controller:
presenter
.
phonenumberCtrl
,
// validator: loginBloc.validateField,
decoration:
InputDecoration
(
contentPadding:
EdgeInsets
.
symmetric
(
vertical:
SizeConfig
.
getPadding
(
20
),
horizontal:
SizeConfig
.
getPadding
(
16
),
),
// hintText:
// allTranslations.text(key2: 'email', key: 'login') +
// ' / ' +
// allTranslations.text(
// key2: 'tel_number', key: 'register'),
border:
OutlineInputBorder
(
borderSide:
BorderSide
.
none
),
),
);
}
Widget
_policyText
()
{
return
Column
(
children:
<
Widget
>[
Stack
(
children:
<
Widget
>[
Container
(
padding:
EdgeInsets
.
only
(
left:
SizeConfig
.
getPadding
(
30
),
right:
SizeConfig
.
getPadding
(
30
),
top:
SizeConfig
.
getPadding
(
30
)),
child:
Center
(
child:
Text
(
'คุณยอมรับ ข้อกำหนดการใช้งาน และ นโยบายความเป็นส่วนตัว ของอโกด้าเมื่อดำเนินการต่อ'
,
style:
TextStyle
(
fontSize:
SizeConfig
.
getFontSize
(
12
)),
textAlign:
TextAlign
.
center
,
),
),
),
Container
(
margin:
EdgeInsets
.
only
(
right:
SizeConfig
.
getPadding
(
34
),
top:
SizeConfig
.
getPadding
(
47
)),
alignment:
Alignment
.
centerRight
,
child:
GestureDetector
(
onTap:
()
{
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) => RegisterPage()),
// );
},
alignment:
Alignment
.
topLeft
,
padding:
EdgeInsets
.
only
(
left:
SizeConfig
.
getPadding
(
30
)),
child:
Text
(
'สมัครสมาชิก
'
,
'รหัสผ่าน
'
,
style:
TextStyle
(
color:
Colors
.
orange
,
fontSize:
SizeConfig
.
getFontSize
(
12
),
color:
Colors
.
black
,
fontSize:
SizeConfig
.
getFontSize
(
20
),
fontFamily:
"SF_Pro_Text"
,
fontWeight:
FontWeight
.
w600
,
decoration:
TextDecoration
.
underline
,
),
textAlign:
TextAlign
.
right
,
),
),
)
],
),
Container
(
padding:
EdgeInsets
.
all
(
SizeConfig
.
getPadding
(
24
)),
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
<
Widget
>[
Expanded
(
flex:
2
,
child:
Container
(
decoration:
BoxDecoration
(
border:
Border
(
bottom:
BorderSide
(
width:
1
,
color:
Color
(
0xFFE6E6E6
)),
),
fontWeight:
FontWeight
.
w500
),
),
),
Padding
(
padding:
EdgeInsets
.
symmetric
(
vertical:
SizeConfig
.
getPadding
(
8.0
),
horizontal:
SizeConfig
.
getPadding
(
24
)),
child:
Card
(
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
SizeConfig
.
getPadding
(
50.0
)),
),
Expanded
(
flex:
1
,
child:
Text
(
'หรือ'
,
style:
TextStyle
(
fontSize:
SizeConfig
.
getFontSize
(
12
)),
textAlign:
TextAlign
.
center
,
child:
TextFormField
(
controller:
presenter
.
passCtrl
,
// validator: loginBloc.validateField,
decoration:
InputDecoration
(
contentPadding:
EdgeInsets
.
symmetric
(
vertical:
SizeConfig
.
getPadding
(
20
),
horizontal:
SizeConfig
.
getPadding
(
16
),
),
// hintText:
// allTranslations.text(key2: 'password', key: 'login'),
border:
OutlineInputBorder
(
borderSide:
BorderSide
.
none
),
),
Expanded
(
flex:
2
,
child:
Container
(
decoration:
BoxDecoration
(
border:
Border
(
bottom:
BorderSide
(
width:
1
,
color:
Color
(
0xFFE6E6E6
)),
obscureText:
true
,
),
),
),
SizedBox
(
height:
SizeConfig
.
getWidth
(
24
),
),
_submitLoginButton
(),
],
),
),
Stack
(
children:
<
Widget
>[
Container
(
padding:
EdgeInsets
.
only
(
left:
SizeConfig
.
getPadding
(
60
),
right:
SizeConfig
.
getPadding
(
60
)),
);
}
_submitLoginButton
()
{
return
Padding
(
padding:
EdgeInsets
.
symmetric
(
vertical:
SizeConfig
.
getPadding
(
20.0
),
horizontal:
SizeConfig
.
getPadding
(
32
)),
child:
Container
(
height:
SizeConfig
.
getWidth
(
55
),
child:
CupertinoButton
(
color:
Color
.
fromRGBO
(
106
,
179
,
170
,
1
),
padding:
EdgeInsets
.
all
(
0
),
borderRadius:
BorderRadius
.
all
(
Radius
.
circular
(
50
)),
onPressed:
()
{
if
(
_tabController
.
index
==
0
){
presenter
.
letCheckData
();}
else
{
presenter
.
letCheckData_phone
();
}
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) => HomePage()),
// );
// if (loginBloc.formKey.currentState.validate()) {
// loginBloc.getLogin();
// }
},
child:
Center
(
child:
Text
(
'สะดวกสุดๆ แค่ใช้ Facebook เข้าสู่ระบบ ก็ไม่ต้องจำรหัสผ่านอีกต่อไป คลิกปุ่มด้านล่างได้เลย'
,
style:
TextStyle
(
fontSize:
SizeConfig
.
getFontSize
(
12
)),
textAlign:
TextAlign
.
center
,
'สมัครสมาชิก'
,
style:
TextStyle
(
color:
Colors
.
white
),
),
),
),
],
),
],
);
}
}
lib/ui/register/register_presenter.dart
0 → 100644
View file @
c2e95add
import
'dart:async'
;
import
'dart:developer'
;
import
'package:feelverapp/model/Login/login_model.dart'
;
import
'package:feelverapp/model/register/register_model.dart'
;
import
'package:feelverapp/service/Loading.dart'
;
import
'package:feelverapp/service/api.dart'
;
import
'package:feelverapp/service/base_presenter.dart'
;
import
'package:feelverapp/ui/home/home.dart'
;
import
'package:feelverapp/ui/login/login.dart'
;
import
'package:feelverapp/ui/register/register_email.dart'
;
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/material.dart'
;
import
'package:rflutter_alert/rflutter_alert.dart'
;
class
RegisterPresenter
extends
BasePresenter
<
Registerpage
>
{
Api
_api
;
Timer
_timer
;
final
formKey
=
GlobalKey
<
FormState
>();
TextEditingController
emailCtrl
=
TextEditingController
();
TextEditingController
passCtrl
=
TextEditingController
();
TextEditingController
firstnameCtrl
=
TextEditingController
();
TextEditingController
lastnameCtrl
=
TextEditingController
();
TextEditingController
phonenumberCtrl
=
TextEditingController
();
RegisterPresenter
(
State
<
Registerpage
>
state
)
:
super
(
state
);
/////email Login/////////
letCheckData
()
async
{
try
{
if
(
emailCtrl
.
text
.
isEmpty
)
throw
(
'กรุณากรอก
\n
อีเมล์'
);
else
if
(
passCtrl
.
text
.
isEmpty
)
throw
(
'กรุณากรอก
\n
รหัสผ่าน'
);
else
if
(
firstnameCtrl
.
text
.
isEmpty
)
throw
(
'กรุณากรอกชื่อ'
);
else
if
(
lastnameCtrl
.
text
.
isEmpty
)
throw
(
'กรุณากรอกนามสกุล'
);
Pattern
pattern
=
r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+"
;
RegExp
regex
=
new
RegExp
(
pattern
);
if
(!
regex
.
hasMatch
(
emailCtrl
.
text
))
throw
(
'รูปแบบอีเมล์
\n
ไม่ถูกต้อง'
);
Pattern
pattern2
=
r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$'
;
RegExp
regex2
=
new
RegExp
(
pattern2
);
if
(!
regex2
.
hasMatch
(
passCtrl
.
text
))
throw
(
'รหัสผ่านต้องมีความยาวอย่าง น้อย 8 ตัวอักษร และต้องประกอบด้วยอักขระ ดังต่อไปนี้
\n
- ตัวอักษรภาษาอังกฤษ ตัวพิมพ์เล็ก (a-z)
\n
- ตัวอักษรภาษาอังกฤษ ตัวพิมพ์ใหญ่ (A-Z)
\n
- ตัวเลข (0-9)'
);
else
{
await
letregis
();
print
(
"completeee"
);
}
}
catch
(
e
)
{
Alert
(
style:
AlertStyle
(
animationType:
AnimationType
.
fromTop
,
isCloseButton:
false
,
),
context:
state
.
context
,
title:
'
$e
'
,
content:
Icon
(
Icons
.
warning
,
color:
Colors
.
orange
,
size:
80
,),
buttons:
[
DialogButton
(
color:
Color
.
fromRGBO
(
106
,
179
,
170
,
1
),
onPressed:
()
=>
Navigator
.
pop
(
state
.
context
),
child:
Text
(
"ตกลง"
,
style:
TextStyle
(
color:
Colors
.
white
,
fontSize:
20
),
),
)
]).
show
();
}
}
letregis
()
async
{
LoadingView
(
state
.
context
).
show
();
_api
=
Api
<
RegisterModel
>();
var
res
=
await
_api
.
register
({
"access_type"
:
"mobile"
,
"name"
:
firstnameCtrl
.
text
,
"last_name"
:
lastnameCtrl
.
text
,
"email"
:
emailCtrl
.
text
,
'password'
:
passCtrl
.
text
});
LoadingView
(
state
.
context
).
hide
();
if
(
res
.
fail
==
null
)
{
Alert
(
style:
AlertStyle
(
animationType:
AnimationType
.
fromTop
,
isCloseButton:
false
,
),
context:
state
.
context
,
title:
"สมัครสมาชิกสำเร็จ"
,
content:
Icon
(
Icons
.
check_circle
,
color:
Color
.
fromRGBO
(
106
,
179
,
170
,
1
),
size:
80
,),
buttons:
[
DialogButton
(
color:
Color
.
fromRGBO
(
106
,
179
,
170
,
1
),
onPressed:
()
=>
Navigator
.
pushReplacement
(
state
.
context
,
CupertinoPageRoute
(
builder:
(
_
)
=>
LoginPage
())),
child:
Text
(
"ตกลง"
,
style:
TextStyle
(
color:
Colors
.
white
,
fontSize:
20
),
),
)
]).
show
();
RegisterModel
model
=
res
.
success
;
// print("Username ="+"${model.user}");
print
(
"Regist message ="
+
"
${model.message}
"
);
}
else
{
Alert
(
style:
AlertStyle
(
animationType:
AnimationType
.
fromTop
,
isCloseButton:
false
,
),
context:
state
.
context
,
title:
"อีเมล์
\n
มีการลงทะเบียนแล้ว"
,
content:
Icon
(
Icons
.
warning
,
color:
Colors
.
orange
,
size:
80
,),
buttons:
[
DialogButton
(
color:
Color
.
fromRGBO
(
106
,
179
,
170
,
1
),
onPressed:
()
=>
Navigator
.
pop
(
state
.
context
),
child:
Text
(
"ลองอีกครั้ง"
,
style:
TextStyle
(
color:
Colors
.
white
,
fontSize:
20
),
),
)
]).
show
();
}
}
///////phone log in////////////////
letregis_phone
()
async
{
LoadingView
(
state
.
context
).
show
();
_api
=
Api
<
RegisterModel
>();
var
res
=
await
_api
.
register
({
"access_type"
:
"mobile"
,
"phone_number"
:
phonenumberCtrl
.
text
,
'password'
:
passCtrl
.
text
});
LoadingView
(
state
.
context
).
hide
();
if
(
res
.
fail
==
null
)
{
Alert
(
style:
AlertStyle
(
animationType:
AnimationType
.
fromTop
,
isCloseButton:
false
,
),
context:
state
.
context
,
title:
"สมัครสมาชิกสำเร็จ"
,
content:
Icon
(
Icons
.
check_circle
,
color:
Color
.
fromRGBO
(
106
,
179
,
170
,
1
),
size:
80
,),
buttons:
[
DialogButton
(
color:
Color
.
fromRGBO
(
106
,
179
,
170
,
1
),
onPressed:
()
=>
Navigator
.
pushReplacement
(
state
.
context
,
CupertinoPageRoute
(
builder:
(
_
)
=>
LoginPage
())),
child:
Text
(
"ตกลง"
,
style:
TextStyle
(
color:
Colors
.
white
,
fontSize:
20
),
),
)
]).
show
();
RegisterModel
model
=
res
.
success
;
// print("Username ="+"${model.user}");
print
(
"Regist message ="
+
"
${model.message}
"
);
}
else
{
Alert
(
style:
AlertStyle
(
animationType:
AnimationType
.
fromTop
,
isCloseButton:
false
,
),
context:
state
.
context
,
title:
"เบอร์โทรศัพท์ของท่าน
\n
มีการลงทะเบียนแล้ว"
,
content:
Icon
(
Icons
.
warning
,
color:
Colors
.
orange
,
size:
80
,),
buttons:
[
DialogButton
(
color:
Color
.
fromRGBO
(
106
,
179
,
170
,
1
),
onPressed:
()
=>
Navigator
.
pop
(
state
.
context
),
child:
Text
(
"ลองอีกครั้ง"
,
style:
TextStyle
(
color:
Colors
.
white
,
fontSize:
20
),
),
)
]).
show
();
}
}
letCheckData_phone
()
async
{
// if(!verifyPhoneState){
// throw(allTranslations.text(key: 'please_verify_phone'));
// }
try
{
if
(
phonenumberCtrl
.
text
.
isEmpty
)
throw
(
'กรุณากรอก
\n
เบอร์โทรศัพท์มือถือ'
);
else
if
(
passCtrl
.
text
.
isEmpty
)
throw
(
'กรุณากรอก
\n
รหัสผ่าน'
);
Pattern
pattern
=
r'(^(?:[+0]9)?[0-9]{10,12}$)'
;
RegExp
regex
=
new
RegExp
(
pattern
);
if
(!
regex
.
hasMatch
(
phonenumberCtrl
.
text
))
throw
(
'รูปแบบเบอร์โทรศัพท์
\n
ไม่ถูกต้อง'
);
Pattern
pattern2
=
r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$'
;
RegExp
regex2
=
new
RegExp
(
pattern2
);
if
(!
regex2
.
hasMatch
(
passCtrl
.
text
))
throw
(
'รหัสผ่านต้องมีความยาวอย่าง น้อย 8 ตัวอักษร และต้องประกอบด้วยอักขระ ดังต่อไปนี้
\n
- ตัวอักษรภาษาอังกฤษ ตัวพิมพ์เล็ก (a-z)
\n
- ตัวอักษรภาษาอังกฤษ ตัวพิมพ์ใหญ่ (A-Z)
\n
- ตัวเลข (0-9)'
);
else
{
await
letregis_phone
();
print
(
"complete"
);
}
}
catch
(
e
)
{
Alert
(
style:
AlertStyle
(
animationType:
AnimationType
.
fromTop
,
isCloseButton:
false
,
),
context:
state
.
context
,
title:
'
$e
'
,
content:
Icon
(
Icons
.
warning
,
color:
Colors
.
orange
,
size:
80
,),
buttons:
[
DialogButton
(
color:
Color
.
fromRGBO
(
106
,
179
,
170
,
1
),
onPressed:
()
=>
Navigator
.
pop
(
state
.
context
),
child:
Text
(
"ตกลง"
,
style:
TextStyle
(
color:
Colors
.
white
,
fontSize:
20
),
),
)
]).
show
();
}
}
// facebookLogin() async {
// try {
// await _facebookLogin.logIn(['email']).then((result) async {
// var fbData = await Api().getFacebookInfo(result.accessToken.token);
// print(fbData);
// await _letSocialSignIn(result.accessToken.userId, 'facebook')
// .then((value) {
// if (value) {
// Navigator.popUntil(state.context, (route) => route.isFirst);
// Navigator.pushReplacement(state.context, CupertinoPageRoute(builder: (_) =>
// NavigatorPage(),
// ));
// } else {
// Navigator.push(
// state.context,
// CupertinoPageRoute(
// builder: (_) => SignUpEmail(
// socialType: SocialType.facebook,
// socialData: new RegisterSocialDataModel(
// socialId: result.accessToken.userId,
// token: result.accessToken.token,
// email: fbData['email'],
// firstName: fbData['first_name'],
// lastName: fbData['last_name'],
// ),
// )));
// }
// });
// });
// } catch (e) {
// print(e);
// }
// }
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment