import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:http/http.dart' as http; import 'package:idrocap/private/notifiche.dart'; import 'package:idrocap/private/profile_organisations.dart'; import 'package:idrocap/utility/utility.dart'; import 'constant/globals.dart' as globals; import 'model/organizzazioni.dart'; import 'widget/menu.dart'; class Organisations extends StatefulWidget { const Organisations({Key? key}) : super(key: key); @override _OrganisationsState createState() => _OrganisationsState(); } class _OrganisationsState extends State { late Future> shows; String searchString = ""; @override void initState() { super.initState(); shows = fetchShows(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( iconTheme: IconThemeData(color: Colors.white), backgroundColor: HexColor(globals.colorAppbar), title: Center(child: Text("Organizzazioni", style: TextStyle(color: Colors.white))), actions: [ IconButton( onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (context) => Notifiche())); }, icon: Icon(Icons.notifications), ) ], ), drawer: Menu(), body: SingleChildScrollView( child: Column( children: [ Padding( padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), child: TextField( onChanged: (value) { setState(() { searchString = value.toLowerCase(); }); }, decoration: InputDecoration(labelText: 'Cerca Organizzazione', suffixIcon: Icon(Icons.search)), ), ), FutureBuilder>( future: shows, builder: (context, snapshot) { if (snapshot.connectionState != ConnectionState.done) { return Center(child: CircularProgressIndicator()); } if (snapshot.hasData) { return ListView.separated( physics: NeverScrollableScrollPhysics(), shrinkWrap: true, itemCount: snapshot.data!.length, itemBuilder: (BuildContext context, int index) { var organizzazione = snapshot.data![index]; if (organizzazione.actor.description.toLowerCase().contains(searchString)) { return GestureDetector( onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => ProfileOrganisations(organizzazioni: organizzazione), ), ); }, child: ListTile( leading: Icon(Icons.account_circle_outlined, size: 40, color: Colors.blue), title: Text(organizzazione.actor.description.toString()), ), ); } else { return Container(); } }, separatorBuilder: (BuildContext context, int index) { var organizzazione = snapshot.data![index]; return organizzazione.actor.description.toLowerCase().contains(searchString) ? Divider() : Container(); }, ); } else if (snapshot.hasError) { return Center(child: Text('Organizzazione non trovata')); } return Center(child: CircularProgressIndicator()); }, ), ], ), ), floatingActionButtonLocation: FloatingActionButtonLocation.miniEndFloat, floatingActionButton: FloatingActionButton( onPressed: () { setState(() { shows = fetchShows(); }); }, tooltip: 'refresh', child: Icon(Icons.refresh, color: HexColor(globals.colorAppbar)), backgroundColor: Colors.white, ), ); } Future> fetchShows() async { try { var url = Uri.parse(globals.url_endpoint + globals.organizzazioni); var response = await http.get(url, headers: globals.headers); var data = json.decode(utf8.decode(response.bodyBytes)); if (response.statusCode == 200) { var organizzazioniJson = data['organisations'] as List; return organizzazioniJson.map((org) => Organizzazioni.fromJson(org)).toList(); } else if (response.statusCode == 401) { Utility().dialogAlert(context); } else { ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(data['result'].toString()))); } } catch (e) { EasyLoading.dismiss(); throw Exception('Problemi nel caricare i dati'); } EasyLoading.dismiss(); return []; // In caso di errore, ritorna una lista vuota } }