Compare commits
No commits in common. "75a5ef2df2ea0d2bdc0dfcd9104f12262aedb7b2" and "777e7e3f0d23d8caaa8ee3c3720512575f92e6d9" have entirely different histories.
75a5ef2df2
...
777e7e3f0d
|
|
@ -0,0 +1,28 @@
|
||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:mobdr/model/integration/login_model.dart';
|
||||||
|
import 'package:mobdr/network/api_provider.dart';
|
||||||
|
import 'package:meta/meta.dart';
|
||||||
|
|
||||||
|
part 'login_event.dart';
|
||||||
|
part 'login_state.dart';
|
||||||
|
|
||||||
|
class LoginBloc extends Bloc<LoginEvent, LoginState> {
|
||||||
|
LoginBloc() : super(LoginInitial()) {
|
||||||
|
on<Login>(_login);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _login(Login event, Emitter<LoginState> emit) async {
|
||||||
|
ApiProvider _apiProvider = ApiProvider();
|
||||||
|
|
||||||
|
emit(LoginWaiting());
|
||||||
|
try {
|
||||||
|
List<LoginModel> data =
|
||||||
|
await _apiProvider.login2(event.email, event.password, event.apiToken);
|
||||||
|
emit(LoginSuccess(loginData: data));
|
||||||
|
} catch (ex) {
|
||||||
|
if (ex != 'cancel') {
|
||||||
|
emit(LoginError(errorMessage: ex.toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
part of 'login_bloc.dart';
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
abstract class LoginEvent {}
|
||||||
|
|
||||||
|
class Login extends LoginEvent {
|
||||||
|
final String email;
|
||||||
|
final String password;
|
||||||
|
final apiToken;
|
||||||
|
Login({required this.email, required this.password, required this.apiToken});
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
part of 'login_bloc.dart';
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
abstract class LoginState {}
|
||||||
|
|
||||||
|
class LoginInitial extends LoginState {}
|
||||||
|
|
||||||
|
class InitialLoginState extends LoginState {}
|
||||||
|
|
||||||
|
class LoginError extends LoginState {
|
||||||
|
final String errorMessage;
|
||||||
|
|
||||||
|
LoginError({
|
||||||
|
required this.errorMessage,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
class LoginWaiting extends LoginState {}
|
||||||
|
|
||||||
|
class LoginSuccess extends LoginState {
|
||||||
|
final List<LoginModel> loginData;
|
||||||
|
LoginSuccess({required this.loginData});
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
export 'product_grid_bloc.dart';
|
||||||
|
export 'product_grid_event.dart';
|
||||||
|
export 'product_grid_state.dart';
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:mobdr/model/integration/product_grid_model.dart';
|
||||||
|
import 'package:mobdr/network/api_provider.dart';
|
||||||
|
import './bloc.dart';
|
||||||
|
|
||||||
|
class ProductGridBloc extends Bloc<ProductGridEvent, ProductGridState> {
|
||||||
|
ProductGridBloc() : super(InitialProductGridState()) {
|
||||||
|
on<GetProductGrid>(_getProductGrid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _getProductGrid(
|
||||||
|
GetProductGrid event, Emitter<ProductGridState> emit) async {
|
||||||
|
ApiProvider _apiProvider = ApiProvider();
|
||||||
|
|
||||||
|
emit(ProductGridWaiting());
|
||||||
|
try {
|
||||||
|
List<ProductGridModel> data = await _apiProvider.getProductGrid(
|
||||||
|
event.sessionId, event.skip, event.limit, event.apiToken);
|
||||||
|
emit(GetProductGridSuccess(productGridData: data));
|
||||||
|
} catch (ex) {
|
||||||
|
if (ex != 'cancel') {
|
||||||
|
emit(ProductGridError(errorMessage: ex.toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
import 'package:meta/meta.dart';
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
abstract class ProductGridEvent {}
|
||||||
|
|
||||||
|
class GetProductGrid extends ProductGridEvent {
|
||||||
|
final String sessionId, skip, limit;
|
||||||
|
final apiToken;
|
||||||
|
GetProductGrid({required this.sessionId, required this.skip, required this.limit, @required this.apiToken});
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
import 'package:mobdr/model/integration/product_grid_model.dart';
|
||||||
|
import 'package:meta/meta.dart';
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
abstract class ProductGridState {}
|
||||||
|
|
||||||
|
class InitialProductGridState extends ProductGridState {}
|
||||||
|
|
||||||
|
class ProductGridError extends ProductGridState {
|
||||||
|
final String errorMessage;
|
||||||
|
|
||||||
|
ProductGridError({
|
||||||
|
required this.errorMessage,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
class ProductGridWaiting extends ProductGridState {}
|
||||||
|
|
||||||
|
class GetProductGridSuccess extends ProductGridState {
|
||||||
|
final List<ProductGridModel> productGridData;
|
||||||
|
GetProductGridSuccess({required this.productGridData});
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
export 'product_listview_bloc.dart';
|
||||||
|
export 'product_listview_event.dart';
|
||||||
|
export 'product_listview_state.dart';
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:mobdr/model/integration/product_listview_model.dart';
|
||||||
|
import 'package:mobdr/network/api_provider.dart';
|
||||||
|
import './bloc.dart';
|
||||||
|
|
||||||
|
class ProductListviewBloc
|
||||||
|
extends Bloc<ProductListviewEvent, ProductListviewState> {
|
||||||
|
ProductListviewBloc() : super(InitialProductListviewState()) {
|
||||||
|
on<GetProductListview>(_getProductListview);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _getProductListview(
|
||||||
|
GetProductListview event, Emitter<ProductListviewState> emit) async {
|
||||||
|
ApiProvider _apiProvider = ApiProvider();
|
||||||
|
|
||||||
|
emit(ProductListviewWaiting());
|
||||||
|
try {
|
||||||
|
List<ProductListviewModel> data = await _apiProvider.getProductListview(
|
||||||
|
event.sessionId, event.skip, event.limit, event.apiToken);
|
||||||
|
emit(GetProductListviewSuccess(productListviewData: data));
|
||||||
|
} catch (ex) {
|
||||||
|
if (ex != 'cancel') {
|
||||||
|
emit(ProductListviewError(errorMessage: ex.toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
import 'package:meta/meta.dart';
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
abstract class ProductListviewEvent {}
|
||||||
|
|
||||||
|
class GetProductListview extends ProductListviewEvent {
|
||||||
|
final String sessionId, skip, limit;
|
||||||
|
final apiToken;
|
||||||
|
GetProductListview({required this.sessionId, required this.skip, required this.limit, required this.apiToken});
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
import 'package:mobdr/model/integration/product_listview_model.dart';
|
||||||
|
import 'package:meta/meta.dart';
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
abstract class ProductListviewState {}
|
||||||
|
|
||||||
|
class InitialProductListviewState extends ProductListviewState {}
|
||||||
|
|
||||||
|
class ProductListviewError extends ProductListviewState {
|
||||||
|
final String errorMessage;
|
||||||
|
|
||||||
|
ProductListviewError({
|
||||||
|
required this.errorMessage,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
class ProductListviewWaiting extends ProductListviewState {}
|
||||||
|
|
||||||
|
class GetProductListviewSuccess extends ProductListviewState {
|
||||||
|
final List<ProductListviewModel> productListviewData;
|
||||||
|
GetProductListviewSuccess({required this.productListviewData});
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
export 'student_bloc.dart';
|
||||||
|
export 'student_event.dart';
|
||||||
|
export 'student_state.dart';
|
||||||
|
|
@ -0,0 +1,121 @@
|
||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:mobdr/model/integration/student_model.dart';
|
||||||
|
import 'package:mobdr/network/api_provider.dart';
|
||||||
|
import './bloc.dart';
|
||||||
|
|
||||||
|
class StudentBloc extends Bloc<StudentEvent, StudentState> {
|
||||||
|
StudentBloc() : super(InitialStudentState()) {
|
||||||
|
on<GetStudent>(_getStudent);
|
||||||
|
on<AddStudent>(_addStudent);
|
||||||
|
on<EditStudent>(_editStudent);
|
||||||
|
on<DeleteStudent>(_deleteStudent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _getStudent(GetStudent event, Emitter<StudentState> emit) async {
|
||||||
|
ApiProvider _apiProvider = ApiProvider();
|
||||||
|
|
||||||
|
emit(GetStudentWaiting());
|
||||||
|
try {
|
||||||
|
List<StudentModel> data =
|
||||||
|
await _apiProvider.getStudent(event.sessionId, event.apiToken);
|
||||||
|
emit(GetStudentSuccess(studentData: data));
|
||||||
|
} catch (ex) {
|
||||||
|
if (ex != 'cancel') {
|
||||||
|
emit(GetStudentError(errorMessage: ex.toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _addStudent(AddStudent event, Emitter<StudentState> emit) async {
|
||||||
|
ApiProvider _apiProvider = ApiProvider();
|
||||||
|
|
||||||
|
String errorMessage = '';
|
||||||
|
if (event.studentName == '') {
|
||||||
|
errorMessage = 'Student name cannot be empty';
|
||||||
|
} else if (event.studentPhoneNumber == '') {
|
||||||
|
errorMessage = 'Student phone number can not be empty';
|
||||||
|
} else if (event.studentGender == '') {
|
||||||
|
errorMessage = 'Student gender can not be empty';
|
||||||
|
} else if (event.studentAddress == '') {
|
||||||
|
errorMessage = 'Student address can not be empty';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errorMessage == '') {
|
||||||
|
emit(AddStudentWaiting());
|
||||||
|
try {
|
||||||
|
List data = await _apiProvider.addStudent(
|
||||||
|
event.sessionId,
|
||||||
|
event.studentName,
|
||||||
|
event.studentPhoneNumber,
|
||||||
|
event.studentGender,
|
||||||
|
event.studentAddress,
|
||||||
|
event.apiToken);
|
||||||
|
emit(AddStudentSuccess(
|
||||||
|
msg: data[0],
|
||||||
|
studentId: data[1],
|
||||||
|
studentName: event.studentName,
|
||||||
|
studentPhoneNumber: event.studentPhoneNumber,
|
||||||
|
studentGender: event.studentGender,
|
||||||
|
studentAddress: event.studentAddress));
|
||||||
|
} catch (ex) {
|
||||||
|
emit(AddStudentError(errorMessage: ex.toString()));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
emit(StudentErrorValidation(errorMessage: errorMessage));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _editStudent(EditStudent event, Emitter<StudentState> emit) async {
|
||||||
|
ApiProvider _apiProvider = ApiProvider();
|
||||||
|
|
||||||
|
String errorMessage = '';
|
||||||
|
if (event.studentName == '') {
|
||||||
|
errorMessage = 'Student name cannot be empty';
|
||||||
|
} else if (event.studentPhoneNumber == '') {
|
||||||
|
errorMessage = 'Student phone number can not be empty';
|
||||||
|
} else if (event.studentGender == '') {
|
||||||
|
errorMessage = 'Student gender can not be empty';
|
||||||
|
} else if (event.studentAddress == '') {
|
||||||
|
errorMessage = 'Student address can not be empty';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errorMessage == '') {
|
||||||
|
emit(EditStudentWaiting());
|
||||||
|
try {
|
||||||
|
String message = await _apiProvider.editStudent(
|
||||||
|
event.sessionId,
|
||||||
|
event.studentId,
|
||||||
|
event.studentName,
|
||||||
|
event.studentPhoneNumber,
|
||||||
|
event.studentGender,
|
||||||
|
event.studentAddress,
|
||||||
|
event.apiToken);
|
||||||
|
emit(EditStudentSuccess(
|
||||||
|
msg: message,
|
||||||
|
index: event.index,
|
||||||
|
studentId: event.studentId,
|
||||||
|
studentName: event.studentName,
|
||||||
|
studentPhoneNumber: event.studentPhoneNumber,
|
||||||
|
studentGender: event.studentGender,
|
||||||
|
studentAddress: event.studentAddress));
|
||||||
|
} catch (ex) {
|
||||||
|
emit(EditStudentError(errorMessage: ex.toString()));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
emit(StudentErrorValidation(errorMessage: errorMessage));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _deleteStudent(DeleteStudent event, Emitter<StudentState> emit) async {
|
||||||
|
ApiProvider _apiProvider = ApiProvider();
|
||||||
|
|
||||||
|
emit(DeleteStudentWaiting());
|
||||||
|
try {
|
||||||
|
String msg = await _apiProvider.deleteStudent(
|
||||||
|
event.sessionId, event.studentId, event.apiToken);
|
||||||
|
emit(DeleteStudentSuccess(msg: msg, index: event.index));
|
||||||
|
} catch (ex) {
|
||||||
|
emit(DeleteStudentError(errorMessage: ex.toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
import 'package:meta/meta.dart';
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
abstract class StudentEvent {}
|
||||||
|
|
||||||
|
class GetStudent extends StudentEvent {
|
||||||
|
final String sessionId;
|
||||||
|
final apiToken;
|
||||||
|
GetStudent({required this.sessionId, required this.apiToken});
|
||||||
|
}
|
||||||
|
|
||||||
|
class AddStudent extends StudentEvent {
|
||||||
|
final String sessionId;
|
||||||
|
final String studentName, studentPhoneNumber, studentGender, studentAddress;
|
||||||
|
final apiToken;
|
||||||
|
AddStudent({required this.sessionId, required this.studentName, required this.studentPhoneNumber, required this.studentGender, required this.studentAddress, required this.apiToken});
|
||||||
|
}
|
||||||
|
|
||||||
|
class EditStudent extends StudentEvent {
|
||||||
|
final String sessionId;
|
||||||
|
final int studentId, index;
|
||||||
|
final String studentName, studentPhoneNumber, studentGender, studentAddress;
|
||||||
|
final apiToken;
|
||||||
|
EditStudent({required this.sessionId, required this.index, required this.studentId, required this.studentName, required this.studentPhoneNumber, required this.studentGender, required this.studentAddress, required this.apiToken});
|
||||||
|
}
|
||||||
|
|
||||||
|
class DeleteStudent extends StudentEvent {
|
||||||
|
final String sessionId;
|
||||||
|
final int studentId, index;
|
||||||
|
final apiToken;
|
||||||
|
DeleteStudent({required this.sessionId, required this.studentId, required this.index, required this.apiToken});
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,99 @@
|
||||||
|
import 'package:mobdr/model/integration/student_model.dart';
|
||||||
|
import 'package:meta/meta.dart';
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
abstract class StudentState {}
|
||||||
|
|
||||||
|
class InitialStudentState extends StudentState {}
|
||||||
|
|
||||||
|
// get student state
|
||||||
|
class GetStudentWaiting extends StudentState {}
|
||||||
|
|
||||||
|
class GetStudentError extends StudentState {
|
||||||
|
final String errorMessage;
|
||||||
|
GetStudentError({
|
||||||
|
required this.errorMessage,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
class GetStudentSuccess extends StudentState {
|
||||||
|
final List<StudentModel> studentData;
|
||||||
|
GetStudentSuccess({required this.studentData});
|
||||||
|
}
|
||||||
|
|
||||||
|
// general
|
||||||
|
class StudentErrorValidation extends StudentState {
|
||||||
|
final String errorMessage;
|
||||||
|
StudentErrorValidation({
|
||||||
|
required this.errorMessage,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// add student state
|
||||||
|
class AddStudentWaiting extends StudentState {}
|
||||||
|
|
||||||
|
class AddStudentError extends StudentState {
|
||||||
|
final String errorMessage;
|
||||||
|
AddStudentError({
|
||||||
|
required this.errorMessage,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
class AddStudentSuccess extends StudentState {
|
||||||
|
final int studentId;
|
||||||
|
final String msg,
|
||||||
|
studentName,
|
||||||
|
studentPhoneNumber,
|
||||||
|
studentGender,
|
||||||
|
studentAddress;
|
||||||
|
AddStudentSuccess(
|
||||||
|
{required this.msg,
|
||||||
|
required this.studentId,
|
||||||
|
required this.studentName,
|
||||||
|
required this.studentPhoneNumber,
|
||||||
|
required this.studentGender,
|
||||||
|
required this.studentAddress});
|
||||||
|
}
|
||||||
|
|
||||||
|
// edit student state
|
||||||
|
class EditStudentWaiting extends StudentState {}
|
||||||
|
|
||||||
|
class EditStudentError extends StudentState {
|
||||||
|
final String errorMessage;
|
||||||
|
EditStudentError({
|
||||||
|
required this.errorMessage,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
class EditStudentSuccess extends StudentState {
|
||||||
|
final int studentId, index;
|
||||||
|
final String msg,
|
||||||
|
studentName,
|
||||||
|
studentPhoneNumber,
|
||||||
|
studentGender,
|
||||||
|
studentAddress;
|
||||||
|
EditStudentSuccess(
|
||||||
|
{required this.msg,
|
||||||
|
required this.index,
|
||||||
|
required this.studentId,
|
||||||
|
required this.studentName,
|
||||||
|
required this.studentPhoneNumber,
|
||||||
|
required this.studentGender,
|
||||||
|
required this.studentAddress});
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete student state
|
||||||
|
class DeleteStudentWaiting extends StudentState {}
|
||||||
|
|
||||||
|
class DeleteStudentError extends StudentState {
|
||||||
|
final String errorMessage;
|
||||||
|
DeleteStudentError({
|
||||||
|
required this.errorMessage,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
class DeleteStudentSuccess extends StudentState {
|
||||||
|
final String msg;
|
||||||
|
final int index;
|
||||||
|
DeleteStudentSuccess({required this.msg, required this.index});
|
||||||
|
}
|
||||||
|
|
@ -2,14 +2,14 @@ import 'dart:convert';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
//import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
import 'package:mobdr/model/login.dart';
|
import 'package:mobdr/model/login.dart';
|
||||||
import 'package:mobdr/model/user_profile.dart';
|
import 'package:mobdr/model/user_profile.dart';
|
||||||
|
|
||||||
class LocalStorage {
|
class LocalStorage {
|
||||||
static Future<SharedPreferences> get prefs async =>
|
//static Future<SharedPreferences> get prefs async =>
|
||||||
await SharedPreferences.getInstance();
|
// await SharedPreferences.getInstance();
|
||||||
|
|
||||||
static FlutterSecureStorage get securePref => FlutterSecureStorage();
|
static FlutterSecureStorage get securePref => FlutterSecureStorage();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import 'package:mobdr/ui/reusable/cache_image_network.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:mobdr/service/local_storage.dart';
|
import 'package:mobdr/service/local_storage.dart';
|
||||||
|
import 'package:mobdr/model/login.dart';
|
||||||
|
|
||||||
class TabHomePage extends StatefulWidget {
|
class TabHomePage extends StatefulWidget {
|
||||||
@override
|
@override
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue