import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:platform_device_id_v3/platform_device_id.dart';
import 'package:login_ex/common/repository/logging.dart';
import 'package:login_ex/common/res/data.dart';
import 'package:login_ex/common/utils/utils.dart';
import 'package:login_ex/contact/repository/rest_client.dart';
import 'package:login_ex/contact/view/contact_result_page.dart';
import 'package:login_ex/user/model/login_response.dart';
import 'package:login_ex/common/component/custom_text_form_field.dart';
import 'package:login_ex/common/res/colors.dart';
import 'package:login_ex/common/view/default_layout.dart';
import 'package:login_ex/user/repository/crypto_api.dart';
class LoginScreen extends StatefulWidget {
const LoginScreen({super.key});
@override
State<LoginScreen> createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
String userid = '';
String password = '';
late String _deviceId;
late final RestClient restClient;
@override
void initState() {
super.initState();
getDeviceUniqueId();
loginRestInit();
}
Future<void> loginRestInit() async {
Dio dio = Dio();
dio.interceptors.add(LogInterceptor());
dio.interceptors.add(const CustLogInterceptor(storage: storage));
restClient = RestClient(dio);
}
Future<void> getDeviceUniqueId() async {
String? deviceId;
try {
deviceId = await PlatformDeviceId.getDeviceId;
} on PlatformException {
deviceId = 'Failed to get deviceId.';
}
if (!mounted) return;
setState(() {
_deviceId = deviceId!;
print("deviceId -> $_deviceId");
});
}
@override
Widget build(BuildContext context) {
return DefaultLayout(
child: SafeArea(
top: true,
bottom: false,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
const SizedBox(height: 50.0),
Image.asset(
'asset/img/logo/logo.png',
width: MediaQuery.of(context).size.width ,
),
const SizedBox(height: 16.0),
CustomTextFormField(
hintText: '아이디를 입력하세요',
obscureText: false,
onChanged: (String value) {
userid = value.trim();
},
),
const SizedBox(height: 16.0),
CustomTextFormField(
hintText: '비밀번호를 입력하세요',
obscureText: true,
onChanged: (String value) {
password = value.trim();
},
),
const SizedBox(height: 16.0),
ElevatedButton(
onPressed: () async {
if(userid.isNotEmpty && password.isNotEmpty){
final mobileNO = await storage.read(key: MNumber);
LoginResponse result = await restClient.userLogin(
Crypto.AES_encrypt(Crypto.URLkey()),
Crypto.AES_encrypt(userid),
Crypto.RSA_encrypt(password),
_deviceId,
mobileNO!
);
if(result.status.contains('success')){
Utils.showSnackBar(context, '로그인 성공');
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => const ContactResultPage(),
),
);
} else {
Utils.showAlert(context, result.status, result.message);
}
} else {
if(userid.isEmpty) {
Utils.showSnackBar(context, '아이디를 입력하세요');
return;
}
if(password.isEmpty){
Utils.showSnackBar(context, '비밀번호를 입력하세요');
return;
}
}
},
style: ElevatedButton.styleFrom(
backgroundColor: PRIMARY_COLOR,
),
child: const Text(
'로그인',
),
),
],
),
),
),
);
}
}