import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:adguard_home_manager/widgets/custom_list_tile.dart'; import 'package:adguard_home_manager/models/clients.dart'; class ClientsList extends StatelessWidget { final ScrollController scrollController; final int loadStatus; final List data; final Future Function() fetchClients; const ClientsList({ Key? key, required this.scrollController, required this.loadStatus, required this.data, required this.fetchClients }) : super(key: key); @override Widget build(BuildContext context) { switch (loadStatus) { case 0: return SizedBox( width: double.maxFinite, height: MediaQuery.of(context).size.height-171, child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ const CircularProgressIndicator(), const SizedBox(height: 30), Text( AppLocalizations.of(context)!.loadingStatus, textAlign: TextAlign.center, style: TextStyle( fontSize: 22, color: Theme.of(context).colorScheme.onSurfaceVariant, ), ) ], ), ); case 1: if (data.isNotEmpty) { return ListView.builder( padding: const EdgeInsets.only(top: 0), itemCount: data.length, itemBuilder: (context, index) => CustomListTile( title: data[index].name != '' ? data[index].name! : data[index].ip, subtitle: data[index].name != '' ? data[index].ip : null, trailing: Text( data[index].source, style: TextStyle( color: Theme.of(context).colorScheme.onSurface ), ), ) ); } else { return SizedBox( width: double.maxFinite, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( AppLocalizations.of(context)!.noClientsList, textAlign: TextAlign.center, style: TextStyle( fontSize: 24, color: Theme.of(context).colorScheme.onSurfaceVariant, ), ), const SizedBox(height: 30), TextButton.icon( onPressed: fetchClients, icon: const Icon(Icons.refresh_rounded), label: Text(AppLocalizations.of(context)!.refresh) ) ], ), ); } case 2: return SizedBox( width: double.maxFinite, height: MediaQuery.of(context).size.height-171, child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ const Icon( Icons.error, color: Colors.red, size: 50, ), const SizedBox(height: 30), Text( AppLocalizations.of(context)!.errorLoadServerStatus, textAlign: TextAlign.center, style: TextStyle( fontSize: 22, color: Theme.of(context).colorScheme.onSurfaceVariant, ), ) ], ), ); default: return const SizedBox(); } } }