import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import 'package:fcs/model/announcement_model.dart'; import 'package:fcs/model/main_model.dart'; import 'package:fcs/vo/announcement.dart' as Announce; import 'package:fcs/widget/local_text.dart'; import 'package:fcs/widget/localization/app_translations.dart'; import 'package:fcs/widget/progress.dart'; import '../fcs/common/helpers/theme.dart'; import 'announcement.dart'; import 'announcement_editor.dart'; class AnnouncementList extends StatefulWidget { @override _AnnouncementListState createState() => _AnnouncementListState(); } class _AnnouncementListState extends State { var timeFormatter = new DateFormat('KK:mm a'); var dateFormatter = new DateFormat('dd MMM'); final double dotSize = 15.0; bool _isLoading = false; @override void initState() { super.initState(); } @override Widget build(BuildContext context) { AnnouncementModel announcementModel = Provider.of(context); MainModel mainModel = Provider.of(context); bool isOwnerAndAbove = mainModel.user != null && mainModel.user.isOwnerAndAbove(); bool hasAdmin = mainModel.user != null && mainModel.user.hasAdmin(); return LocalProgress( inAsyncCall: _isLoading, child: Scaffold( appBar: AppBar( backgroundColor: primaryColor, title: LocalText( context, "announcement.title", color: Colors.white, fontSize: 20, )), floatingActionButton: isOwnerAndAbove || hasAdmin ? FloatingActionButton( backgroundColor: primaryColor, child: Icon(Icons.add), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => AnnouncementEditor()), ); }, ) : Container(), body: new ListView.separated( separatorBuilder: (context, index) => Divider( color: Colors.black, ), scrollDirection: Axis.vertical, padding: EdgeInsets.only(left: 15, right: 15, top: 15), shrinkWrap: true, itemCount: announcementModel.announcements.length, itemBuilder: (BuildContext context, int index) { Announce.Announcement announce = announcementModel.announcements[index]; return InkWell( onTap: () { setState(() { Navigator.push( context, MaterialPageRoute( builder: (context) => AnnouncementPage(announcement: announce)), ); }); }, child: Row( children: [ Expanded( child: new Padding( padding: const EdgeInsets.symmetric(vertical: 10.0), child: new Row( children: [ new Padding( padding: new EdgeInsets.symmetric( horizontal: 32.0 - dotSize / 2), child: Icon( Icons.announcement, color: primaryColor, size: 30, ), ), new Expanded( child: new Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ announce.name == null ? Container() : new Text( announce.name, style: new TextStyle( fontSize: 15.0, color: Colors.black), ), ], ), ), Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Padding( padding: const EdgeInsets.all(8.0), child: Text(announce.time == null ? "" : timeFormatter.format(announce.time)), ), announce.fromToday() ? Container() : Text(announce.time == null ? "" : dateFormatter.format(announce.time)), ], ) ], ), ), ), ], ), ); }), ), ); } }