import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../models/models.dart'; import '../services/auth_controller.dart'; import '../ui/feedback.dart'; class LoginRequestsScreen extends StatefulWidget { const LoginRequestsScreen({super.key}); @override State createState() => _LoginRequestsScreenState(); } class _LoginRequestsScreenState extends State { List? _requests; bool _loading = true; @override void initState() { super.initState(); _load(); } Future _load() async { try { final requests = await context.read().api.loginRequests(); if (!mounted) return; setState(() { _requests = requests; _loading = false; }); } catch (error) { if (!mounted) return; setState(() => _loading = false); showError(context, error); } } Future _decide(LoginRequestItem request, {required bool approve}) async { final api = context.read().api; try { if (approve) { await api.approveLogin(request.id); } else { await api.rejectLogin(request.id); } await _load(); } catch (error) { if (mounted) showError(context, error); } } @override Widget build(BuildContext context) { final requests = _requests ?? []; return Scaffold( appBar: AppBar(title: const Text('Login requests')), body: _loading && _requests == null ? const Center(child: CircularProgressIndicator()) : RefreshIndicator( onRefresh: _load, child: ListView( padding: const EdgeInsets.all(16), children: [ if (requests.isEmpty) const Padding( padding: EdgeInsets.symmetric(vertical: 32), child: Center(child: Text('No dealers are waiting to sign in.')), ), for (final request in requests) Card( child: Padding( padding: const EdgeInsets.all(12), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(request.name, style: Theme.of(context).textTheme.titleMedium), Text(request.phone), if (request.dealerName != null) Text(request.dealerName!), Row( children: [ TextButton( onPressed: () => _decide(request, approve: false), child: const Text('Reject'), ), FilledButton( onPressed: () => _decide(request, approve: true), child: const Text('Approve'), ), ], ), ], ), ), ), ], ), ), ); } }