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 { String? username; bool isLoading = true; final _storage = const FlutterSecureStorage(); @override void initState() { super.initState(); _checkSavedCredentials(); } Future _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) onSuccess) { Backend.sendAction("get-chats", {}).then((response) { print("chats response: $response"); List chatObjects = response['chats']; List chatIds = chatObjects.map((chat) => chat['id'] as int).toList(); onSuccess(chatIds); }); } void _handleLogin(String user, String password) async { setState(() { username = user; isLoading = true; }); await Backend.auth(user, password); 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); } }