Files
AppCardsStarter_Modelo/lib/notificacoes/notificacoes.dart
T
2021-05-04 16:12:48 -03:00

168 lines
6.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:animations/animations.dart';
import 'package:get/get.dart';
import 'package:url_launcher/url_launcher.dart';
import 'notificacao.dart';
import 'notificacoes_controller.dart';
//import 'package:supercharged/supercharged.dart';
class NotificacoesScreen extends StatelessWidget {
final NotificacoesController c = Get.put(NotificacoesController());
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Notificações'),
centerTitle: false,
),
body: Obx(() => c.loading.value ? Center(child: CircularProgressIndicator(),) : c.errorCode.value != 0 ? this._buildError() : RefreshIndicator(
onRefresh: c.refresh,
// child: AnimatedList(
// key: c.listKey,
// padding: const EdgeInsets.all(8.0),
// initialItemCount: c.notificacoesResults.length + 1,
// itemBuilder: (context,index,animation){
// if (index < c.notificacoesResults.length) {
// return SlideTransition(
// //position: c.animation,
// position: Tween<Offset>(
// begin: const Offset(-1, 0),
// end: Offset(0, 0),
// ).animate(animation),
// child: this._buildListTile(index)
// );
// } else if (index > 1) {
// if(c.loadMore == null || c.loadMore){
// c.getNotificacoesBloc();
// return Container(
// height: 40,
// width: 40,
// alignment: Alignment.center,
// child: CircularProgressIndicator(),
// );
// }
// else{
// return Center(child: Padding(
// padding: const EdgeInsets.only(top: 8.0),
// child: Text("Não há mais Notificações para exibir."),
// ),);
// }
// }
// else {
// return Center(child: Padding(
// padding: const EdgeInsets.only(top: 8.0),
// child: Text("Não há mais Notificações para exibir."),
// ),);
// }
// }
// ),
child: ListView.builder(
padding: const EdgeInsets.all(8.0),
itemCount: c.notificacoesResults.length + 1,
itemBuilder: (_,index){
if (index < c.notificacoesResults.length) {
return this._buildListTile(index);
// return SlideTransition(
// position: c.animation,
// child: this._buildListTile(index)
// );
} else if (index > 1) {
if(c.loadMore == null || c.loadMore){
c.getNotificacoesBloc();
return Container(
height: 40,
width: 40,
alignment: Alignment.center,
child: CircularProgressIndicator(),
);
}
else{
return Center(child: Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Text("Não há mais Notificações para exibir."),
),);
}
}
else {
return Center(child: Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Text("Não há mais Notificações para exibir."),
),);
}
},
),
)),
// body: ListView(
// padding: const EdgeInsets.all(8.0),
// children: <Widget>[
// ...List<Widget>.generate(10, (int index) {
// return this._buildListTile(index);
// }),
// ],
// ),
);
}
Widget _buildError(){
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(c.errorMessage),
RaisedButton(onPressed: c.refresh, child: Text('Atualizar'),)
],
),
);
}
Widget _buildListTile(int index) {
if(c.notificacoesResults[index].tipoConteudo == 'L'){
return this._buildListTileTile(index: index,onTap: (){
c.notificacaoLidaBloc(c.notificacoesResults[index].iD).then((value) => launch(c.notificacoesResults[index].conteudo));
});
}
return OpenContainer<bool>(
//openColor: Colors.transparent,
closedColor: Colors.black87.withOpacity(0.2),
transitionType: ContainerTransitionType.fadeThrough,
openBuilder: (BuildContext _, VoidCallback openContainer) {
c.notificacoesResults[index].visualizado = true;
c.getNotificacaoDetail(c.notificacoesResults[index].iD);
//return _DetailsPage();
return NotificacaoDetail();
},
onClosed: (bool isMarkedAsDone) {
c.notificacaoLidaBloc(c.notificacoesResults[index].iD);
if (isMarkedAsDone ?? false)
Get.rawSnackbar(message: 'Marked as done!');
},
tappable: false,
closedShape: const RoundedRectangleBorder(),
closedElevation: 0.0,
closedBuilder: (BuildContext _, VoidCallback openContainer) {
return this._buildListTileTile(index: index,onTap: openContainer);
},
);
}
Widget _buildListTileTile({Function onTap,@required int index}){
return ListTile(
leading: CircleAvatar(
backgroundImage: GetUtils.isNullOrBlank(c.notificacoesResults[index].imageUrl) ? AssetImage(
'assets/images/logo.png',
) : NetworkImage(c.notificacoesResults[index].imageUrl),
// child: Image.asset(
// 'assets/images/logo.png',
// width: 40,
// ),
),
onTap: onTap,
trailing: c.notificacoesResults[index].visualizado ? Text('') : Text('',style: TextStyle(color: Colors.blue),),
title: Text(c.notificacoesResults[index].titulo),
subtitle: Text(c.getDateFormatada(c.notificacoesResults[index].dataNotificacao)),
);
}
}