【FLUTTER ANDROID STUDIO and IOS】GetX With Navigation
Posted: 26 Mar 2021 08:42 PM PDT
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import '../pages/login/login_view.dart';
import '../pages/home/home_view.dart';
import 'package:get/get.dart';
part 'app_routes.dart';
class AppPages {
static const INITIAL = Routes.HOME;
static const LOGIN = Routes.LOGIN;
static final routes = [
GetPage(
name: Routes.HOME,
page: () => HomeView(),
),
GetPage(
name: Routes.LOGIN,
page: () => LoginView(),
),
];
}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
part of 'app_pages.dart';
abstract class Routes {
static const HOME = '/home';
static const LOGIN = '/login';
}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart';
import 'package:get/state_manager.dart';
import '../navi/navi_controller.dart';
Widget bottomNavi(NaviController naviController) {
return Obx(() =>
BottomNavigationBar(
items: [
BottomNavigationBarItem(icon: Icon(Icons.home), label: "Home"),
BottomNavigationBarItem(icon: Icon(Icons.share), label: "Test"),
BottomNavigationBarItem(
icon: Icon(Icons.settings), label: "Settings"),
],
currentIndex: naviController.selectedIndex.value,
onTap: naviController.onBottomNavItemTapped,
));
}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart';
var textColorPrimary = materialColor(0XFF212121);
const textColorSecondary = Color(0XFF747474);
const edit_text_background = Color(0XFFE8E8E8);
const white = Color(0XFFffffff);
const colorPrimary = Colors.blueAccent;
const view_color = Color(0XFFDADADA);
Map<int, Color> color = {
50: Color.fromRGBO(136, 14, 79, .1),
100: Color.fromRGBO(136, 14, 79, .2),
200: Color.fromRGBO(136, 14, 79, .3),
300: Color.fromRGBO(136, 14, 79, .4),
400: Color.fromRGBO(136, 14, 79, .5),
500: Color.fromRGBO(136, 14, 79, .6),
600: Color.fromRGBO(136, 14, 79, .7),
700: Color.fromRGBO(136, 14, 79, .8),
800: Color.fromRGBO(136, 14, 79, .9),
900: Color.fromRGBO(136, 14, 79, 1),
};
MaterialColor materialColor(colorHax) {
return MaterialColor(colorHax, color);
}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fontRegular = 'Regular';
const fontMedium = 'Medium';
const fontSemibold = 'Semibold';
const fontBold = 'Bold';
const textSizeSmall = 12.0;
const textSizeSMedium = 14.0;
const textSizeMedium = 16.0;
const textSizeLargeMedium = 18.0;
const textSizeNormal = 20.0;
const textSizeLarge = 24.0;
const textSizeXLarge = 30.0;
const base_url = "https://gist.githubusercontent.com/edward1986/cc9f36f5a4d069f38fcb62956001a3f3/raw/a31a268e8e22ca4c430a2358e52d1d7bad505539/";
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart';
var textColorPrimary = materialColor(0XFF212121);
const textColorSecondary = Color(0XFF747474);
const edit_text_background = Color(0XFFE8E8E8);
const white = Color(0XFFffffff);
const colorPrimary = Colors.blueAccent;
const view_color = Color(0XFFDADADA);
Map<int, Color> color = {
50: Color.fromRGBO(136, 14, 79, .1),
100: Color.fromRGBO(136, 14, 79, .2),
200: Color.fromRGBO(136, 14, 79, .3),
300: Color.fromRGBO(136, 14, 79, .4),
400: Color.fromRGBO(136, 14, 79, .5),
500: Color.fromRGBO(136, 14, 79, .6),
600: Color.fromRGBO(136, 14, 79, .7),
700: Color.fromRGBO(136, 14, 79, .8),
800: Color.fromRGBO(136, 14, 79, .9),
900: Color.fromRGBO(136, 14, 79, 1),
};
MaterialColor materialColor(colorHax) {
return MaterialColor(colorHax, color);
}
const fontRegular = 'Regular';
const fontMedium = 'Medium';
const fontSemibold = 'Semibold';
const fontBold = 'Bold';
const textSizeSmall = 12.0;
const textSizeSMedium = 14.0;
const textSizeMedium = 16.0;
const textSizeLargeMedium = 18.0;
const textSizeNormal = 20.0;
const textSizeLarge = 24.0;
const textSizeXLarge = 30.0;
const base_url = "https://gist.githubusercontent.com/edward1986/cc9f36f5a4d069f38fcb62956001a3f3/raw/a31a268e8e22ca4c430a2358e52d1d7bad505539/";
const t1_ic_ring = "images/t1_ic_ring.png";
const t2_profile = "images/ex_profile.png";
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import '../generated/models/user_model.dart';
import '../routes/app_pages.dart';
import '../services/login_api.dart';
class MainController extends GetxController {
var myUser_val = "".obs;
@override
void onInit() {
print("On init HomeController");
String myUser_str = GetStorage().read<String>('myUser');
if (!myUser_str.isNull) myUser_val.value = myUser_str;
super.onInit();
}
}
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import '../routes/app_pages.dart';
import 'colors.dart';
import 'constants.dart';
Padding editTextStyle(var hintText, TextEditingController myController,
{isPassword = true}) {
return Padding(
padding: const EdgeInsets.fromLTRB(40, 0, 40, 0),
child: TextFormField(
controller: myController,
style:
TextStyle(fontSize: textSizeLargeMedium, fontFamily: fontRegular),
obscureText: isPassword,
validator: (String val) {
if (val.length < 3) {
return ("Please login!");
} else {
return null;
}
},
decoration: InputDecoration(
contentPadding: EdgeInsets.fromLTRB(24, 18, 24, 18),
hintText: hintText,
filled: true,
fillColor: edit_text_background,
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(40),
borderSide:
const BorderSide(color: edit_text_background, width: 0.0),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(40),
borderSide:
const BorderSide(color: edit_text_background, width: 0.0),
),
),
));
}
// Login/SignUp HeadingElement
Text formHeading(var label) {
return Text(label,
style:
TextStyle(color: textColorPrimary, fontSize: 30, fontFamily: 'Bold'),
textAlign: TextAlign.center);
}
Text formSubHeadingForm(var label) {
return Text(label,
style: TextStyle(
color: textColorSecondary, fontSize: 20, fontFamily: 'Bold'),
textAlign: TextAlign.center);
}
Widget text(var text,
{var fontSize = textSizeLargeMedium,
textColor = textColorSecondary,
var fontFamily = fontRegular,
var isCentered = false,
var maxLine = 1,
var latterSpacing = 0.5}) {
return Text(
text,
textAlign: isCentered ? TextAlign.center : TextAlign.start,
maxLines: maxLine,
style: TextStyle(
fontFamily: fontFamily,
fontSize: fontSize,
color: textColor,
height: 1.5,
letterSpacing: latterSpacing),
);
}
Material shadowButton(var name, VoidCallback callbackFunction) {
return Material(
elevation: 2,
shadowColor: Colors.deepOrangeAccent[200],
borderRadius: new BorderRadius.circular(40.0),
child: SizedBox(
width: double.infinity,
height: 60,
child: MaterialButton(
child: text(name,
fontSize: textSizeLargeMedium,
textColor: white,
fontFamily: fontMedium),
textColor: white,
shape: RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(40.0)),
color: colorPrimary,
onPressed: callbackFunction),
),
);
}
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'pages/login/login_controller.dart';
import 'utils/main_controlller.dart';
import 'generated/models/user_model.dart';
import 'routes/app_pages.dart';
void main() async {
await GetStorage.init();
MainController mainController = Get.put(MainController());
LoginController loginController = Get.put(LoginController());
String initialRoute = AppPages.INITIAL;
if (mainController.myUser_val.value == "") {
initialRoute = AppPages.LOGIN;
} else {
User loggedInUser =
User.fromJson(jsonDecode(mainController.myUser_val.value));
loginController.myUser.value = loggedInUser;
}
runApp(
GetMaterialApp(
title: "Application",
initialRoute: initialRoute,
getPages: AppPages.routes,
),
);
}
import 'dart:convert';
import 'package:dio/dio.dart';
import '../generated/models/user_model.dart';
import '../../utils/constants.dart';
class LoginAPI {
Future<User> login(String username, String password) async {
final url =
base_url + "test.json?username=" + username + "&pass=" + password;
try {
Response response = await Dio().get(url);
print(response);
final user = User.fromJson(json.decode(response.data));
return user;
} catch (e) {
print(e);
return null;
}
}
}
part of 'app_pages.dart';
abstract class Routes {
static const HOME = '/home';
static const LOGIN = '/login';
}
import '../pages/login/login_view.dart';
import '../pages/home/home_view.dart';
import 'package:get/get.dart';
part 'app_routes.dart';
class AppPages {
static const INITIAL = Routes.HOME;
static const LOGIN = Routes.LOGIN;
static final routes = [
GetPage(
name: Routes.HOME,
page: () => HomeView(),
),
GetPage(
name: Routes.LOGIN,
page: () => LoginView(),
),
];
}
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import '../../generated/models/user_model.dart';
import 'login_controller.dart';
import '../../routes/app_pages.dart';
import '../../services/login_api.dart';
import '../../utils/colors.dart';
import '../../utils/constants.dart';
import '../../utils/images.dart';
import '../../utils/widgets.dart';
class LoginView extends StatelessWidget {
bool rememberMe = false;
final LoginController loginController = Get.put(LoginController());
TextEditingController usernameController = TextEditingController(text: "");
TextEditingController passController = TextEditingController(text: "");
loginUser() async {
String username = usernameController.text;
String password = passController.text;
if (username.length < 3) {
Get.snackbar("Warning", "Please enter username!");
} else if (password.length < 3) {
Get.snackbar("Warning", "Please enter your password!");
} else {
loginController.loginUser(username, password);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: SingleChildScrollView(
child: Container(
color: Colors.white,
alignment: Alignment.center,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SizedBox(height: 30),
Image.asset(t1_ic_ring, height: 100, width: 100),
SizedBox(height: 16),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
formHeading("Login/"),
formSubHeadingForm("Signup")
]),
SizedBox(height: 50),
new Form(
autovalidateMode: AutovalidateMode.onUserInteraction,
child: Column(
children: [
editTextStyle("Username", usernameController,
isPassword: false),
SizedBox(height: 16),
editTextStyle("Password", passController,
isPassword: true),
],
)),
SizedBox(height: 8),
Padding(
padding: const EdgeInsets.fromLTRB(16, 0, 0, 0),
child: CheckboxListTile(
title: text("Remember me", textColor: textColorPrimary),
value: rememberMe,
onChanged: (newValue) {
rememberMe = newValue;
//setState(() {});
},
controlAffinity: ListTileControlAffinity.leading,
),
),
SizedBox(height: 8),
Padding(
padding: EdgeInsets.fromLTRB(40, 16, 40, 16),
child: shadowButton("Sign in", this.loginUser)),
SizedBox(height: 24),
text("forgot pass",
textColor: textColorPrimary, fontFamily: fontMedium)
],
),
),
),
),
);
}
}
import 'dart:convert';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import '../../generated/models/user_model.dart';
import '../../routes/app_pages.dart';
import '../../services/login_api.dart';
class LoginController extends GetxController {
var myUser = User().obs;
@override
void onInit() => null;
loginUser(String username, String password) async {
print("login in controller....");
User thisUser = await LoginAPI().login(username, password);
myUser.value = thisUser;
String myUser_str = jsonEncode(myUser.value.toJson());
GetStorage().write("myUser", myUser_str);
Get.offNamed(Routes.HOME);
}
}
import 'package:flutter/material.dart';
Widget testWidget() {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text("TEST", style: TextStyle(fontSize: 30, fontFamily: 'Bold'))
],
),
);
}
import 'package:flutter/material.dart';
Widget settingsWidget() {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text("SETTINGS", style: TextStyle(fontSize: 30, fontFamily: 'Bold'))
],
),
);
}
import 'package:flutter/material.dart';
Widget homeWidget() {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text("HOME", style: TextStyle(fontSize: 30, fontFamily: 'Bold'))
],
),
);
}
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import '../../navi/bottom_navi.dart';
import '../../navi/left_navi.dart';
import '../../navi/navi_controller.dart';
import 'home_widget.dart';
import 'settings_widget.dart';
import 'test_widget.dart';
import '../../pages/login/login_controller.dart';
import '../../utils/main_controlller.dart';
import 'home_controller.dart';
class HomeView extends StatelessWidget {
final HomeController homeController = Get.put(HomeController());
final NaviController naviController = Get.put(NaviController());
final LoginController loginController = Get.put(LoginController());
@override
Widget build(BuildContext context) {
List<Widget> _widgetList = <Widget>[
homeWidget(),
testWidget(),
settingsWidget()
];
return Scaffold(
appBar: AppBar(title: Text('home')),
drawer: leftNavi(loginController.myUser.value.name.toString()),
bottomNavigationBar: bottomNavi(naviController),
body:
Obx(() => _widgetList.elementAt(naviController.selectedIndex.value)),
);
}
}
import 'package:get/get.dart';
class HomeController extends GetxController {
@override
void onInit() {
super.onInit();
}
}
import 'package:get/get.dart';
import '../routes/app_pages.dart';
class NaviController extends GetxController {
var selectedIndex = 0.obs;
@override
void onInit() {
print("On init NaviController");
super.onInit();
}
void onBottomNavItemTapped(int index) {
print("tab item clicked:" + index.toString());
selectedIndex.value = index;
}
}
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import '../routes/app_pages.dart';
import '../utils/colors.dart';
import '../utils/constants.dart';
import '../utils/images.dart';
import '../utils/widgets.dart';
Widget getDrawerItem(String icon, String name, int pos) {
return GestureDetector(
onTap: () {
print("logout clicked....");
GetStorage().write("myUser", "");
Get.toNamed(Routes.LOGIN);
},
child: Container(color: white,
padding: EdgeInsets.fromLTRB(10, 6, 10, 6),
child: Row(
children: <Widget>[
//SvgPicture.asset(icon, width: 20, height: 20),
SizedBox(width: 10),
text(name,
textColor: colorPrimary,
fontSize: textSizeLargeMedium,
fontFamily: fontMedium)
],
),
),
);
}
Widget leftNavi_old(String name) {
return Drawer(
child: ListView(
children: [
DrawerHeader(
child: Text("Hoşgeldin " + name),
decoration: BoxDecoration(color: Colors.blueAccent),
),
ListTile(
title: Text("Ana Sayfa"),
onTap: () {},
),
ListTile(
title: Text("Hakkımızda"),
onTap: () {},
),
ListTile(
title: Text("Logout"),
onTap: () {
print("logout clicked....");
GetStorage().write("myUser", "");
Get.toNamed(Routes.LOGIN);
},
)
],
));
}
Widget leftNavi(String name) {
return SizedBox(
width: Get.width * 0.85,
height: Get.height,
child: Drawer(
elevation: 8,
child: SingleChildScrollView(
child: Container(
width: Get.width,
color: white,
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.only(top: 40, right: 20),
child: Container(
padding: EdgeInsets.fromLTRB(20, 20, 20, 20),
decoration: new BoxDecoration(
color: colorPrimary,
borderRadius: new BorderRadius.only(
bottomRight: const Radius.circular(24.0),
topRight: const Radius.circular(24.0))),
/*User Profile*/
child: Row(
children: <Widget>[
CircleAvatar(
backgroundImage:
Image
.asset(t2_profile, height: 100, width: 100)
.image,
radius: 40),
SizedBox(width: 16),
Expanded(
child: Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
text("Name " + name,
textColor: white,
fontFamily: fontBold,
fontSize: textSizeNormal),
SizedBox(height: 8),
text("user_email@name.com",
textColor: white, fontSize: textSizeMedium),
],
),
),
)
],
),
)),
SizedBox(height: 10),
getDrawerItem("t2_user", "Profile", 1),
getDrawerItem("t2_chat", "Message", 2),
getDrawerItem("t2_report", "Report", 3),
getDrawerItem("t2_settings", "Settings", 4),
getDrawerItem("t2_logout", "Sign out", 5),
SizedBox(height: 10),
Divider(color: view_color, height: 1),
SizedBox(height: 10),
getDrawerItem("t2_share", "Share", 6),
getDrawerItem("t2_help", "Help", 7),
SizedBox(height: 10),
],
),
),
),
),
);
}
import 'package:flutter/material.dart';
import 'package:get/state_manager.dart';
import '../navi/navi_controller.dart';
Widget bottomNavi(NaviController naviController) {
return Obx(() =>
BottomNavigationBar(
items: [
BottomNavigationBarItem(icon: Icon(Icons.home), label: "Home"),
BottomNavigationBarItem(icon: Icon(Icons.share), label: "Test"),
BottomNavigationBarItem(
icon: Icon(Icons.settings), label: "Settings"),
],
currentIndex: naviController.selectedIndex.value,
onTap: naviController.onBottomNavItemTapped,
));
}
class User {
String name;
String surname;
String token;
User({this.name, this.surname, this.token});
User.fromJson(Map<String, dynamic> json) {
name = json['name'];
surname = json['surname'];
token = json['token'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = Map<String, dynamic>();
data['name'] = this.name;
data['surname'] = this.surname;
data['token'] = this.token;
return data;
}
}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:get/get.dart';
class HomeController extends GetxController {
@override
void onInit() {
super.onInit();
}
}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import '../../navi/bottom_navi.dart';
import '../../navi/left_navi.dart';
import '../../navi/navi_controller.dart';
import 'home_widget.dart';
import 'settings_widget.dart';
import 'test_widget.dart';
import '../../pages/login/login_controller.dart';
import '../../utils/main_controlller.dart';
import 'home_controller.dart';
class HomeView extends StatelessWidget {
final HomeController homeController = Get.put(HomeController());
final NaviController naviController = Get.put(NaviController());
final LoginController loginController = Get.put(LoginController());
@override
Widget build(BuildContext context) {
List<Widget> _widgetList = <Widget>[
homeWidget(),
testWidget(),
settingsWidget()
];
return Scaffold(
appBar: AppBar(title: Text('home')),
drawer: leftNavi(loginController.myUser.value.name.toString()),
bottomNavigationBar: bottomNavi(naviController),
body:
Obx(() => _widgetList.elementAt(naviController.selectedIndex.value)),
);
}
}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const t1_ic_ring = "images/t1_ic_ring.png";
const t2_profile = "images/ex_profile.png";
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import '../routes/app_pages.dart';
import '../utils/colors.dart';
import '../utils/constants.dart';
import '../utils/images.dart';
import '../utils/widgets.dart';
Widget getDrawerItem(String icon, String name, int pos) {
return GestureDetector(
onTap: () {
print("logout clicked....");
GetStorage().write("myUser", "");
Get.toNamed(Routes.LOGIN);
},
child: Container(color: white,
padding: EdgeInsets.fromLTRB(10, 6, 10, 6),
child: Row(
children: <Widget>[
//SvgPicture.asset(icon, width: 20, height: 20),
SizedBox(width: 10),
text(name,
textColor: colorPrimary,
fontSize: textSizeLargeMedium,
fontFamily: fontMedium)
],
),
),
);
}
Widget leftNavi_old(String name) {
return Drawer(
child: ListView(
children: [
DrawerHeader(
child: Text("Hoşgeldin " + name),
decoration: BoxDecoration(color: Colors.blueAccent),
),
ListTile(
title: Text("Ana Sayfa"),
onTap: () {},
),
ListTile(
title: Text("Hakkımızda"),
onTap: () {},
),
ListTile(
title: Text("Logout"),
onTap: () {
print("logout clicked....");
GetStorage().write("myUser", "");
Get.toNamed(Routes.LOGIN);
},
)
],
));
}
Widget leftNavi(String name) {
return SizedBox(
width: Get.width * 0.85,
height: Get.height,
child: Drawer(
elevation: 8,
child: SingleChildScrollView(
child: Container(
width: Get.width,
color: white,
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.only(top: 40, right: 20),
child: Container(
padding: EdgeInsets.fromLTRB(20, 20, 20, 20),
decoration: new BoxDecoration(
color: colorPrimary,
borderRadius: new BorderRadius.only(
bottomRight: const Radius.circular(24.0),
topRight: const Radius.circular(24.0))),
/*User Profile*/
child: Row(
children: <Widget>[
CircleAvatar(
backgroundImage:
Image
.asset(t2_profile, height: 100, width: 100)
.image,
radius: 40),
SizedBox(width: 16),
Expanded(
child: Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
text("Name " + name,
textColor: white,
fontFamily: fontBold,
fontSize: textSizeNormal),
SizedBox(height: 8),
text("user_email@name.com",
textColor: white, fontSize: textSizeMedium),
],
),
),
)
],
),
)),
SizedBox(height: 10),
getDrawerItem("t2_user", "Profile", 1),
getDrawerItem("t2_chat", "Message", 2),
getDrawerItem("t2_report", "Report", 3),
getDrawerItem("t2_settings", "Settings", 4),
getDrawerItem("t2_logout", "Sign out", 5),
SizedBox(height: 10),
Divider(color: view_color, height: 1),
SizedBox(height: 10),
getDrawerItem("t2_share", "Share", 6),
getDrawerItem("t2_help", "Help", 7),
SizedBox(height: 10),
],
),
),
),
),
);
}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'dart:convert';
import 'package:dio/dio.dart';
import '../generated/models/user_model.dart';
import '../../utils/constants.dart';
class LoginAPI {
Future<User> login(String username, String password) async {
final url =
base_url + "test.json?username=" + username + "&pass=" + password;
try {
Response response = await Dio().get(url);
print(response);
final user = User.fromJson(json.decode(response.data));
return user;
} catch (e) {
print(e);
return null;
}
}
}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'dart:convert';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import '../../generated/models/user_model.dart';
import '../../routes/app_pages.dart';
import '../../services/login_api.dart';
class LoginController extends GetxController {
var myUser = User().obs;
@override
void onInit() => null;
loginUser(String username, String password) async {
print("login in controller....");
User thisUser = await LoginAPI().login(username, password);
myUser.value = thisUser;
String myUser_str = jsonEncode(myUser.value.toJson());
GetStorage().write("myUser", myUser_str);
Get.offNamed(Routes.HOME);
}
}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import '../../generated/models/user_model.dart';
import 'login_controller.dart';
import '../../routes/app_pages.dart';
import '../../services/login_api.dart';
import '../../utils/colors.dart';
import '../../utils/constants.dart';
import '../../utils/images.dart';
import '../../utils/widgets.dart';
class LoginView extends StatelessWidget {
bool rememberMe = false;
final LoginController loginController = Get.put(LoginController());
TextEditingController usernameController = TextEditingController(text: "");
TextEditingController passController = TextEditingController(text: "");
loginUser() async {
String username = usernameController.text;
String password = passController.text;
if (username.length < 3) {
Get.snackbar("Warning", "Please enter username!");
} else if (password.length < 3) {
Get.snackbar("Warning", "Please enter your password!");
} else {
loginController.loginUser(username, password);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: SingleChildScrollView(
child: Container(
color: Colors.white,
alignment: Alignment.center,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SizedBox(height: 30),
Image.asset(t1_ic_ring, height: 100, width: 100),
SizedBox(height: 16),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
formHeading("Login/"),
formSubHeadingForm("Signup")
]),
SizedBox(height: 50),
new Form(
autovalidateMode: AutovalidateMode.onUserInteraction,
child: Column(
children: [
editTextStyle("Username", usernameController,
isPassword: false),
SizedBox(height: 16),
editTextStyle("Password", passController,
isPassword: true),
],
)),
SizedBox(height: 8),
Padding(
padding: const EdgeInsets.fromLTRB(16, 0, 0, 0),
child: CheckboxListTile(
title: text("Remember me", textColor: textColorPrimary),
value: rememberMe,
onChanged: (newValue) {
rememberMe = newValue;
//setState(() {});
},
controlAffinity: ListTileControlAffinity.leading,
),
),
SizedBox(height: 8),
Padding(
padding: EdgeInsets.fromLTRB(40, 16, 40, 16),
child: shadowButton("Sign in", this.loginUser)),
SizedBox(height: 24),
text("forgot pass",
textColor: textColorPrimary, fontFamily: fontMedium)
],
),
),
),
),
);
}
}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'pages/login/login_controller.dart';
import 'utils/main_controlller.dart';
import 'generated/models/user_model.dart';
import 'routes/app_pages.dart';
void main() async {
await GetStorage.init();
MainController mainController = Get.put(MainController());
LoginController loginController = Get.put(LoginController());
String initialRoute = AppPages.INITIAL;
if (mainController.myUser_val.value == "") {
initialRoute = AppPages.LOGIN;
} else {
User loggedInUser =
User.fromJson(jsonDecode(mainController.myUser_val.value));
loginController.myUser.value = loggedInUser;
}
runApp(
GetMaterialApp(
title: "Application",
initialRoute: initialRoute,
getPages: AppPages.routes,
),
);
}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import '../generated/models/user_model.dart';
import '../routes/app_pages.dart';
import '../services/login_api.dart';
class MainController extends GetxController {
var myUser_val = "".obs;
@override
void onInit() {
print("On init HomeController");
String myUser_str = GetStorage().read<String>('myUser');
if (!myUser_str.isNull) myUser_val.value = myUser_str;
super.onInit();
}
}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:get/get.dart';
import '../routes/app_pages.dart';
class NaviController extends GetxController {
var selectedIndex = 0.obs;
@override
void onInit() {
print("On init NaviController");
super.onInit();
}
void onBottomNavItemTapped(int index) {
print("tab item clicked:" + index.toString());
selectedIndex.value = index;
}
}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class User {
String name;
String surname;
String token;
User({this.name, this.surname, this.token});
User.fromJson(Map<String, dynamic> json) {
name = json['name'];
surname = json['surname'];
token = json['token'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = Map<String, dynamic>();
data['name'] = this.name;
data['surname'] = this.surname;
data['token'] = this.token;
return data;
}
}
No comments:
Post a Comment