From d614532956eb6e89907cb3e605014fc8a30f2b52 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Thu, 23 Jun 2022 12:07:25 +0300 Subject: [PATCH] Announcements implemented --- lib/models/get_announcement_details.dart | 4 +- .../announcements/announcement_details.dart | 89 +++++++++++-------- .../screens/announcements/announcements.dart | 15 +++- pubspec.yaml | 1 + 4 files changed, 68 insertions(+), 41 deletions(-) diff --git a/lib/models/get_announcement_details.dart b/lib/models/get_announcement_details.dart index 33628ce..9414c9f 100644 --- a/lib/models/get_announcement_details.dart +++ b/lib/models/get_announcement_details.dart @@ -3,8 +3,8 @@ class GetAnnouncementDetails { String? titleAR; String? emailBodyEN; String? emailBodyAR; - String? bodyEN; - String? bodyAR; + String? bodyEN = ""; + String? bodyAR = ""; String? bannerImage; String? rowID; String? awarenessName; diff --git a/lib/ui/screens/announcements/announcement_details.dart b/lib/ui/screens/announcements/announcement_details.dart index a3de742..a2f1f99 100644 --- a/lib/ui/screens/announcements/announcement_details.dart +++ b/lib/ui/screens/announcements/announcement_details.dart @@ -3,9 +3,13 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter_html/flutter_html.dart'; import 'package:mohem_flutter_app/api/pending_transactions_api_client.dart'; +import 'package:mohem_flutter_app/app_state/app_state.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/models/get_announcement_details.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:url_launcher/url_launcher.dart'; class AnnouncementDetails extends StatefulWidget { const AnnouncementDetails({Key? key}) : super(key: key); @@ -36,59 +40,68 @@ class _AnnouncementDetailsState extends State { title: "Announcements", ), body: SingleChildScrollView( - child: Container( - width: double.infinity, - padding: const EdgeInsets.all(10.0), - margin: const EdgeInsets.all(12.0), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(10), - boxShadow: [ - BoxShadow( - color: const Color(0xff000000).withOpacity(.05), - blurRadius: 26, - offset: const Offset(0, -3), - ), - ], - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - SizedBox( + child: getAnnouncementDetailsObj != null + ? Container( width: double.infinity, - height: 150.0, - child: ClipRRect( + padding: const EdgeInsets.all(10.0), + margin: const EdgeInsets.all(12.0), + decoration: BoxDecoration( + color: Colors.white, borderRadius: BorderRadius.circular(10), - child: Image.memory( - base64Decode(Utils.getBase64FromJpeg(getAnnouncementDetailsObj?.bannerImage)), - fit: BoxFit.cover, - ), + boxShadow: [ + BoxShadow( + color: const Color(0xff000000).withOpacity(.05), + blurRadius: 26, + offset: const Offset(0, -3), + ), + ], ), - ), - Container( - margin: const EdgeInsets.only(top: 12.0), - child: Html( - data: getAnnouncementDetailsObj?.bodyEN, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + 12.height, + AppState().isArabic(context) + ? Text(getAnnouncementDetailsObj?.titleAR ?? "", style: const TextStyle(color: MyColors.darkTextColor, fontSize: 16, letterSpacing: -0.64, fontWeight: FontWeight.w600)) + : Text(getAnnouncementDetailsObj?.titleEN ?? "", style: const TextStyle(color: MyColors.darkTextColor, fontSize: 16, letterSpacing: -0.64, fontWeight: FontWeight.w600)), + 12.height, + SizedBox( + width: double.infinity, + height: 150.0, + child: ClipRRect( + borderRadius: BorderRadius.circular(10), + child: Image.memory( + base64Decode(Utils.getBase64FromJpeg(getAnnouncementDetailsObj?.bannerImage)), + fit: BoxFit.cover, + ), + ), + ), + Container( + margin: const EdgeInsets.only(top: 12.0), + child: Html( + data: AppState().isArabic(context) ? getAnnouncementDetailsObj?.bodyAR : getAnnouncementDetailsObj?.bodyEN ?? "", + onLinkTap: (String? url, RenderContext context, Map attributes, _) { + launchUrl(Uri.parse(url!)); + }), + ), + ], ), - ), - ], - ), - ), + ) + : Utils.getNoDataWidget(context), ), ); } - getRequestID() { + getRequestID() async { if (currentPageNo == 0) { final arguments = (ModalRoute.of(context)?.settings.arguments ?? {}) as Map; currentPageNo = arguments["currentPageNo"]; rowID = arguments["rowID"]; - getAnnouncementDetails(0, rowID); + await getAnnouncementDetails(0, rowID); } } - void getAnnouncementDetails(int itgAwarenessID, int itgRowID) async { + Future getAnnouncementDetails(int itgAwarenessID, int itgRowID) async { try { Utils.showLoading(context); jsonResponse = await PendingTransactionsApiClient().getAnnouncements(itgAwarenessID, currentPageNo, itgRowID); diff --git a/lib/ui/screens/announcements/announcements.dart b/lib/ui/screens/announcements/announcements.dart index cad3a9a..61ebde4 100644 --- a/lib/ui/screens/announcements/announcements.dart +++ b/lib/ui/screens/announcements/announcements.dart @@ -27,11 +27,22 @@ class _AnnouncementsState extends State { List getAnnouncementsObject = []; List _foundAnnouncements = []; TextEditingController searchController = TextEditingController(); + final ScrollController _controller = ScrollController(); @override void initState() { getAnnouncements(0, 0); super.initState(); + _controller.addListener(() { + if (_controller.position.atEdge) { + bool isTop = _controller.position.pixels == 0; + if (!isTop) { + print('At the bottom'); + currentPageNo++; + getAnnouncements(0, 0); + } + } + }); } @override @@ -71,6 +82,7 @@ class _AnnouncementsState extends State { child: ListView.separated( physics: const BouncingScrollPhysics(), shrinkWrap: true, + controller: _controller, itemBuilder: (BuildContext context, int index) { return InkWell( onTap: () { @@ -125,7 +137,8 @@ class _AnnouncementsState extends State { ); }, separatorBuilder: (BuildContext context, int index) => 1.height, - itemCount: _foundAnnouncements.length ?? 0)) + itemCount: _foundAnnouncements.length ?? 0)), + 20.height, ], ), ) diff --git a/pubspec.yaml b/pubspec.yaml index 365819d..6601587 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -68,6 +68,7 @@ dependencies: open_file: ^3.2.1 wifi_iot: ^0.3.16 flutter_html: ^2.2.1 + url_launcher: ^6.0.15 dev_dependencies: flutter_test: