87 lines
2.2 KiB
Dart
87 lines
2.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
|
import 'backend.dart';
|
|
import 'login_screen.dart';
|
|
import 'chat_screen.dart';
|
|
import 'chat_list_screen.dart';
|
|
|
|
class UserChecker extends StatefulWidget {
|
|
@override
|
|
_UserCheckerState createState() => _UserCheckerState();
|
|
}
|
|
|
|
class _UserCheckerState extends State<UserChecker> {
|
|
String? username;
|
|
bool isLoading = true;
|
|
final _storage = const FlutterSecureStorage();
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_checkSavedCredentials();
|
|
}
|
|
|
|
Future<void> _checkSavedCredentials() async {
|
|
final savedUsername = await _storage.read(key: 'username');
|
|
final savedPassword = await _storage.read(key: 'password');
|
|
|
|
if (savedUsername != null && savedPassword != null) {
|
|
_handleLogin(savedUsername, savedPassword);
|
|
} else {
|
|
setState(() {
|
|
isLoading = false;
|
|
});
|
|
}
|
|
}
|
|
|
|
static void fetchChats(Function(List<int>) onSuccess) {
|
|
Backend.sendAction("get-chats", {}).then((response) {
|
|
print("chats response: $response");
|
|
List<dynamic> chatObjects = response['chats'];
|
|
List<int> chatIds = chatObjects.map((chat) => chat['id'] as int).toList();
|
|
onSuccess(chatIds);
|
|
});
|
|
}
|
|
|
|
void _handleLogin(String user, String password) async {
|
|
bool success = await Backend.auth(user, password);
|
|
if (!success) {
|
|
setState(() {
|
|
isLoading = false;
|
|
});
|
|
return;
|
|
}
|
|
|
|
setState(() {
|
|
username = user;
|
|
isLoading = true;
|
|
});
|
|
await _storage.write(key: 'username', value: user);
|
|
await _storage.write(key: 'password', value: password);
|
|
|
|
fetchChats((chatIds) {
|
|
if (chatIds.isEmpty) {
|
|
Navigator.pushReplacement(
|
|
context,
|
|
MaterialPageRoute(builder: (_) => ChatListScreen()),
|
|
);
|
|
} else {
|
|
Navigator.pushReplacement(
|
|
context,
|
|
MaterialPageRoute(builder: (_) => ChatScreen(chatId: chatIds.first)),
|
|
);
|
|
}
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
print("Build UserChecker: $username $isLoading");
|
|
if (isLoading) {
|
|
return Center(child: CircularProgressIndicator());
|
|
}
|
|
|
|
return LoginScreen(onLogin: _handleLogin);
|
|
}
|
|
}
|