import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:idrocap/api/api_service.dart'; import 'package:idrocap/private/dettaglio_pratica.dart'; import 'package:idrocap/private/model/notifiche.dart'; import 'package:idrocap/private/widget/menu.dart'; import 'package:http/http.dart' as http; import 'package:idrocap/utility/utility.dart'; import 'constant/globals.dart' as globals; import 'dart:convert'; class Notifiche extends StatefulWidget { const Notifiche({super.key}); @override State createState() => _NotificheState(); } class _NotificheState extends State { late Future> shows; @override void initState() { shows = Future.value([]); shows = fetchShows(); super.initState(); } @override void dispose() { EasyLoading.dismiss(); super.dispose(); } @override Widget build(BuildContext context) { return new PopScope( canPop: true, child: Scaffold( appBar: AppBar( leading: InkWell( onTap: () { Navigator.pop(context); }, child: Icon( Icons.arrow_back_ios, color: Colors.white, ), ), iconTheme: IconThemeData(color: Colors.white), backgroundColor: HexColor(globals.colorAppbar), title: Center( child: Text( "Sezione notifiche", style: TextStyle(color: Colors.white), ), ), ), drawer: Menu(), body: SingleChildScrollView( child: FutureBuilder>( future: shows, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return Center( child: Padding( padding: EdgeInsets.only(top: 80), child: CircularProgressIndicator(), ), ); } if (snapshot.hasError) { return Padding( padding: EdgeInsets.all(10), child: Center( child: Text('Errore nel caricamento delle notifiche'), ), ); } final data = snapshot.data; if (data == null || data.isEmpty) { globals.userAccess.user.notifications = false; return Padding( padding: EdgeInsets.all(50), child: Center( child: ListTile( leading: Icon(Icons.warning), title: Text("La ricerca non ha fornito alcun risultato"), ), ), ); } return ListView.builder( physics: NeverScrollableScrollPhysics(), scrollDirection: Axis.vertical, shrinkWrap: true, itemCount: data.length, itemBuilder: (BuildContext context, int index) { final notification = data[index].notificheModel; return Column( children: [ GestureDetector( onTap: () { EasyLoading.show(status: "Caricamento in corso!"); ApiService().setNotification(data[index].id.toString(), context); if (notification.link.contains("water_drawing_paperworks/view/")) { ApiService().getData(0, notification.link, 1).then((value) { EasyLoading.dismiss(); if (value["statusCode"] == 200 && value["result"] is Map) { Navigator.push( context, MaterialPageRoute( builder: (context) => PraticheDettaglio( oggettoRicevuto: value, ), ), ).then((_) { setState(() { shows = fetchShows(); }); }); } else { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(value["result"] ?? "Errore sconosciuto")), ); } }); } EasyLoading.dismiss(); setState(() { shows = fetchShows(); }); return; }, child: ListTile( leading: Icon(Icons.info, size: 40, color: Colors.blue), title: Text( notification.title ?? '', style: TextStyle(fontWeight: FontWeight.bold), ), subtitle: Text( notification.body ?? '', style: TextStyle(fontStyle: FontStyle.italic), ), ), ), Divider(), ], ); }, ); }, )), ), ); } Future> fetchShows() async { var response; var url = Uri.parse(globals.url_endpoint + globals.notifiche); response = await http.get(url, headers: globals.headers); var test = json.decode(utf8.decode(response.bodyBytes)); if (response.statusCode == 200) { var topShowsJson = (test['notifications']) as List; return topShowsJson.map((show) => RootNotification.fromJson(show)).toList(); } else if (response.statusCode == 401) { EasyLoading.dismiss(); Utility().dialogAlert(this.context); } EasyLoading.dismiss(); throw Exception('Problemi nel caricare i dati '); } }