First API Calling with Cubit in Flutter

 import "dart:convert";


import "package:api_with_cubit/2nd_API_call_using_Cubit/Model/login_model.dart";
import "package:http/http.dart" as http;

class ApiServicesSecond {
String baseUrl = "https://reqres.in/";

Future<LoginModel?> userLogIn(String email, String password) async {
var response = await http.post(
Uri.parse("${baseUrl}api/login"),
body: {
"email": email,
"password": password,
},
);

if (response.statusCode == 200) {
LoginModel logInModel = LoginModel.fromJson(jsonDecode(response.body));
return logInModel;
}
return null;
}
}
import "package:api_with_cubit/2nd_API_call_using_Cubit/API_services/api_services.dart";
import "package:api_with_cubit/2nd_API_call_using_Cubit/Cubits/user_login_cubit.dart";
import "package:api_with_cubit/2nd_API_call_using_Cubit/Cubits/user_login_state.dart";
import "package:flutter/material.dart";
import "package:flutter_bloc/flutter_bloc.dart";

void main() {
runApp(const MyApp());
}

class MyApp extends StatelessWidget {
const MyApp({super.key});

@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Login Screen",
debugShowCheckedModeBanner: false,
theme: ThemeData(
appBarTheme: const AppBarTheme(
backgroundColor: Colors.grey,
centerTitle: true,
),
),
home: LoginScreen(),
);
}
}

class LoginScreen extends StatelessWidget {
LoginScreen({super.key});

TextEditingController emailController = TextEditingController();
TextEditingController passwordController = TextEditingController();

@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
return FocusManager.instance.primaryFocus?.unfocus();
},
child: Scaffold(
appBar: AppBar(
title: const Text(
"Login screen",
style: TextStyle(fontWeight: FontWeight.bold),
),
centerTitle: true,
),
body: Center(
child: SizedBox(
width: 300.0,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextFormField(
controller: emailController,
decoration: InputDecoration(
hintText: "Enter Email",
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(11.0),
),
),
),
const SizedBox(height: 30.0),
TextFormField(
controller: passwordController,
decoration: InputDecoration(
hintText: "Enter Password",
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(11.0),
),
),
),
const SizedBox(height: 40.0),
BlocProvider(
create: (context) => UserLoginCubit(),
child: BlocConsumer<UserLoginCubit, UserLoginState>(
listener: (context, state) {
print(state);
},
builder: (context, state) {
if (state is UserLoginLoaded) {
print(state.loginModel.token);
}
return ElevatedButton(
onPressed: () {
WidgetsBinding.instance
.addPostFrameCallback((timeStamp) {
context.read<UserLoginCubit>().userLogin(
emailController.text.toString(),
passwordController.text.toString());
});
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.blue,
fixedSize: const Size(200.0, 50.0),
shape: const LinearBorder(),
),
child: state is UserLoginLoading
? const CircularProgressIndicator(
color: Colors.white,
)
: const Text(
"Continue",
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20.0,
color: Colors.white),
),
);
},
),
),
],
),
),
),
),
);
}
}

import 'package:api_with_cubit/2nd_API_call_using_Cubit/API_services/api_services.dart';
import 'package:api_with_cubit/2nd_API_call_using_Cubit/Cubits/user_login_state.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

class UserLoginCubit extends Cubit<UserLoginState> {
UserLoginCubit() : super(UserLoginInitial());

userLogin(String email, String password) {
emit(UserLoginLoading());
ApiServicesSecond().userLogIn(email, password).then((value) {
emit(UserLoginLoaded(loginModel: value!));
print("UserToken: ${value.token}");
}).onError((error, stackTrance) {
print(error.toString());
emit(UserLoginError(errormsg: error.toString()));
});
}
}

import 'package:api_with_cubit/2nd_API_call_using_Cubit/Model/login_model.dart';

abstract class UserLoginState {}

class UserLoginInitial extends UserLoginState {}

class UserLoginLoading extends UserLoginState {}

class UserLoginLoaded extends UserLoginState {
final LoginModel loginModel;

UserLoginLoaded({required this.loginModel});
}

class UserLoginError extends UserLoginState {
String errormsg;

UserLoginError({required this.errormsg});
}


class LoginModel {
String? token;

LoginModel({this.token});

LoginModel.fromJson(Map<String, dynamic> json) {
token = json['token'];
}

Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['token'] = this.token;
return data;
}
}




Comments

Popular posts from this blog

Second GET API Calling with Bloc simple Example in Flutter

Pagination with Bloc Pattern in Flutter

If_Else_Example