Saturday, March 27, 2021

Edward Lance Lorilla

Edward Lance Lorilla


【FLUTTER ANDROID STUDIO and IOS】GetX With Navigation

Posted: 26 Mar 2021 08:42 PM PDT

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(),
),
];
}
view raw app_pages.dart hosted with ❤ by GitHub
part of 'app_pages.dart';
abstract class Routes {
static const HOME = '/home';
static const LOGIN = '/login';
}
view raw app_routes.dart hosted with ❤ by GitHub
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,
));
}
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);
}
view raw colors.dart hosted with ❤ by GitHub
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/";
view raw constants.dart hosted with ❤ by GitHub
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;
}
}
view raw gistfile1.txt hosted with ❤ by GitHub
import 'package:get/get.dart';
class HomeController extends GetxController {
@override
void onInit() {
super.onInit();
}
}
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)),
);
}
}
view raw home_view.dart hosted with ❤ by GitHub
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'))
],
),
);
}
const t1_ic_ring = "images/t1_ic_ring.png";
const t2_profile = "images/ex_profile.png";
view raw images.dart hosted with ❤ by GitHub
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),
],
),
),
),
),
);
}
view raw left_navi.dart hosted with ❤ by GitHub
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;
}
}
}
view raw login_api.dart hosted with ❤ by GitHub
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';
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)
],
),
),
),
),
);
}
}
view raw login_view.dart hosted with ❤ by GitHub
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,
),
);
}
view raw main.dart hosted with ❤ by GitHub
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: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';
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 testWidget() {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text("TEST", style: TextStyle(fontSize: 30, fontFamily: 'Bold'))
],
),
);
}
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;
}
}
view raw user_model.dart hosted with ❤ by GitHub
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),
),
);
}
view raw widgets.dart hosted with ❤ by GitHub

【FLUTTER ANDROID STUDIO and IOS】GETX CRUD State Management

Posted: 26 Mar 2021 08:38 PM PDT

import "package:flutter/material.dart";
import 'package:get/get.dart';
import '../controllers/TodoController.dart';
import 'TodoScreen.dart';
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final TodoController todoController = Get.put(TodoController());
return Scaffold(
appBar: AppBar(
title: Text('GetX Todo List'),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
Get.to(TodoScreen());
},
),
body: Container(
child: Obx(() =>
ListView.separated(
itemBuilder: (context, index) =>
Dismissible(
key: UniqueKey(),
onDismissed: (_) {
var removed = todoController.todos[index];
todoController.todos.removeAt(index);
Get.snackbar('Task removed',
'The task "${removed
.text}" was successfully removed.',
mainButton: TextButton(
child: Text('Undo'),
onPressed: () {
if (removed.isNull) {
return;
}
todoController.todos.insert(index, removed);
removed = null;
if (Get.isSnackbarOpen) {
Get.back();
}
},
));
},
child: ListTile(
title: Text(todoController.todos[index].text,
style: (todoController.todos[index].done)
? TextStyle(
color: Colors.red,
decoration: TextDecoration.lineThrough)
: TextStyle(
color: Theme
.of(context)
.textTheme
.bodyText1
.color)),
leading: Checkbox(
value: todoController.todos[index].done,
onChanged: (v) {
var changed = todoController.todos[index];
changed.done = v;
todoController.todos[index] = changed;
},
),
trailing: Column(
children: [
InkWell(onTap: (){
Get.to(TodoScreen(
index: index,
));
} ,child: Icon(Icons.chevron_right)),
InkWell(onTap: (){
todoController.todos.removeAt(index);
} ,child: Icon(Icons.delete))
],
),
),
),
separatorBuilder: (_, __) => Divider(),
itemCount: todoController.todos.length)),
));
}
}
view raw HomeScreen.dart hosted with ❤ by GitHub
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'screens/HomeScreen.dart';
void main() async {
await GetStorage.init();
runApp(GetMaterialApp(
debugShowCheckedModeBanner: false,
home: HomeScreen(),
));
}
view raw main.dart hosted with ❤ by GitHub
class Todo {
String text;
bool done;
Todo({this.text, this.done = false});
factory Todo.fromJson(Map<String, dynamic> json) =>
Todo(text: json['text'], done: json['done']);
Map<String, dynamic> toJson() => {'text': text, 'done': done};
}
view raw Todo.dart hosted with ❤ by GitHub
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import '../models/Todo.dart';
class TodoController extends GetxController {
var todos = List<Todo>().obs;
@override
void onInit() {
List storedTodos = GetStorage().read<List>('todos');
if (!storedTodos.isNull) {
todos = storedTodos
.map((e) => Todo.fromJson(e))
.toList()
.obs;
}
ever(todos, (_) {
GetStorage().write('todos', todos.toList());
});
super.onInit();
}
}
import "package:flutter/material.dart";
import 'package:get/get.dart';
import '../controllers/TodoController.dart';
import '../models/Todo.dart';
class TodoScreen extends StatelessWidget {
final TodoController todoController = Get.find();
final int index;
TodoScreen({this.index});
@override
Widget build(BuildContext context) {
String text = '';
if (!this.index.isNull) {
text = todoController.todos[index].text;
}
TextEditingController textEditingController =
TextEditingController(text: text);
return Scaffold(
body: Container(
padding: EdgeInsets.all(12.0),
child: Column(
children: [
Expanded(
child: TextField(
controller: textEditingController,
autofocus: true,
decoration: InputDecoration(
hintText: 'What do you want to accomplish?',
border: InputBorder.none,
focusedBorder: InputBorder.none),
style: TextStyle(
fontSize: 25.0,
),
keyboardType: TextInputType.multiline,
maxLines: 999,
),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ElevatedButton(
style: ButtonStyle(backgroundColor: MaterialStateProperty.all<Color>(Colors.red) ),
child: Text('Cancel'),
onPressed: () {
Get.back();
},
),
ElevatedButton(
child: Text((this.index.isNull) ? 'Add' : 'Edit'),
style: ButtonStyle(backgroundColor: MaterialStateProperty.all<Color>(Colors.green) ),
onPressed: () {
if (this.index.isNull) {
todoController.todos
.add(Todo(text: textEditingController.text));
} else {
var editing = todoController.todos[index];
editing.text = textEditingController.text;
todoController.todos[index] = editing;
}
Get.back();
},
),
],
),
],
),
),
);
}
}
view raw TodoScreen.dart hosted with ❤ by GitHub

【PYTHON OPENCV】K-means clustering algorithm applied to color quantization

Posted: 26 Mar 2021 05:27 PM PDT

"""
K-means clustering algorithm applied to color quantization
"""
# Import required packages:
import numpy as np
import cv2
from matplotlib import pyplot as plt
def show_img_with_matplotlib(color_img, title, pos):
"""Shows an image using matplotlib capabilities"""
# Convert BGR image to RGB
img_RGB = color_img[:, :, ::-1]
ax = plt.subplot(2, 3, pos)
plt.imshow(img_RGB)
plt.title(title)
plt.axis('off')
def color_quantization(image, k):
"""Performs color quantization using K-means clustering algorithm"""
# Transform image into 'data':
data = np.float32(image).reshape((-1, 3))
# print(data.shape)
# Define the algorithm termination criteria (the maximum number of iterations and/or the desired accuracy):
# In this case the maximum number of iterations is set to 20 and epsilon = 1.0
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 20, 1.0)
# Apply K-means clustering algorithm:
ret, label, center = cv2.kmeans(data, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
# At this point we can make the image with k colors
# Convert center to uint8:
center = np.uint8(center)
# Replace pixel values with their center value:
result = center[label.flatten()]
result = result.reshape(img.shape)
return result
# Create the dimensions of the figure and set title:
fig = plt.figure(figsize=(16, 8))
plt.suptitle("Color quantization using K-means clustering algorithm", fontsize=14, fontweight='bold')
fig.patch.set_facecolor('silver')
# Load BGR image:
img = cv2.imread('landscape_1.jpg')
# Apply color quantization:
color_3 = color_quantization(img, 3)
color_5 = color_quantization(img, 5)
color_10 = color_quantization(img, 10)
color_20 = color_quantization(img, 20)
color_40 = color_quantization(img, 40)
# Plot the images:
show_img_with_matplotlib(img, "original image", 1)
show_img_with_matplotlib(color_3, "color quantization (k = 3)", 2)
show_img_with_matplotlib(color_5, "color quantization (k = 5)", 3)
show_img_with_matplotlib(color_10, "color quantization (k = 10)", 4)
show_img_with_matplotlib(color_20, "color quantization (k = 20)", 5)
show_img_with_matplotlib(color_40, "color quantization (k = 40)", 6)
# Show the Figure:
plt.show()

No comments:

Post a Comment