Untitled
unknown
plain_text
2 years ago
9.4 kB
19
Indexable
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:percent_indicator/circular_percent_indicator.dart';
import 'package:the_citizen_app/src/config/base.dart';
import 'package:the_citizen_app/src/helpers/hex_color.dart';
import 'package:the_citizen_app/src/helpers/k_text.dart';
import 'package:the_citizen_app/src/helpers/global_helper.dart';
import 'package:the_citizen_app/src/helpers/loading.dart';
import 'package:the_citizen_app/src/helpers/route.dart';
import 'package:the_citizen_app/src/pages/report_details_page.dart';
import 'package:collection/collection.dart';
import '../config/app_theme.dart';
class SyncOfflineShoutPage extends StatefulWidget {
@override
State<SyncOfflineShoutPage> createState() => _SyncOfflineShoutPageState();
}
class _SyncOfflineShoutPageState extends State<SyncOfflineShoutPage> with Base {
@override
void initState() {
super.initState();
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
}
@override
dispose() {
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeRight,
DeviceOrientation.landscapeLeft,
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(height: 10),
ShoutStoredInDevice(),
SizedBox(height: 10),
ShoutStoredShoutList(),
],
),
),
bottomNavigationBar: authC.loginType.value == 'online' ? SyncButton() : SizedBox(),
);
}
}
class ShoutStoredInDevice extends StatelessWidget with Base {
@override
Widget build(BuildContext context) {
return Obx(
() => CircularPercentIndicator(
header: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
KText(
text: 'Offline shouts stored in this device:',
fontSize: 16,
bold: true,
),
SizedBox(height: 10),
],
),
),
// animationDuration: 2200,
// animation: true,
radius: 100.0,
lineWidth: 20.0,
percent: 0.0,
center: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'${shoutC.offlineShoutList.length}',
style: TextStyle(
fontWeight: FontWeight.w700,
fontSize: 50,
color: Colors.grey,
),
)
],
)
],
),
circularStrokeCap: CircularStrokeCap.butt,
backgroundColor: shoutC.offlineShoutList == 0 ? Colors.grey.shade300 : Colors.grey,
progressColor: Colors.green,
),
);
}
}
class ShoutStoredShoutList extends StatelessWidget with Base {
@override
Widget build(BuildContext context) {
return Obx(() => shoutC.offlineShoutList.isEmpty
? SizedBox()
: Container(
height: 350,
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
physics: BouncingScrollPhysics(),
child: Container(
width: Get.width,
margin: EdgeInsets.symmetric(horizontal: 10.0, vertical: 5.0),
child: DataTable(
headingRowHeight: 35,
columnSpacing: 13,
showCheckboxColumn: false,
horizontalMargin: 10,
dividerThickness: 1,
showBottomBorder: true,
headingRowColor: MaterialStateColor.resolveWith((states) => hexToColor('#EFF6FF')),
// headingTextStyle: TextStyle(color: Colors.black),
columns: [
DataColumn(
numeric: false,
label: Expanded(
child: Text(
"Date",
style: TextStyle(
fontFamily: 'Manrope',
fontSize: 15.0,
color: hexToColor('#141C44'),
fontWeight: FontWeight.w700,
),
),
),
),
DataColumn(
numeric: false,
label: Expanded(
child: Text(
"Type",
style: TextStyle(
fontFamily: 'Manrope',
fontSize: 15.0,
color: hexToColor('#141C44'),
fontWeight: FontWeight.w700,
),
),
),
),
],
rows: shoutC.offlineShoutList
.mapIndexed((index, item) => DataRow(
cells: <DataCell>[
DataCell(
KText(
text: '${formatDate(date: item.reportedAt!)}',
),
onTap: () async {
push(OfflineReportDetailsPage(
item: item,
));
},
),
DataCell(
KText(
// text: myReports.subcategoryName,
text: '${item.subcategoryName!}',
maxLines: 2,
),
onTap: () {
push(OfflineReportDetailsPage(
item: item,
));
},
),
],
))
.toList(),
),
),
),
),
));
}
}
class SyncButton extends StatelessWidget with Base {
@override
Widget build(BuildContext context) {
return Obx(
() => SizedBox(
width: Get.width,
height: 40,
child: ElevatedButton(
style: ButtonStyle(
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(0.0),
),
),
foregroundColor: MaterialStateProperty.all(Colors.white),
backgroundColor: MaterialStateProperty.all(hexToColor('#F2BA14')),
),
child: shoutC.isSubmitOfflineShout.value
? Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
height: 20,
width: 20,
child: Loading(
color: Colors.white,
),
),
SizedBox(
width: 10,
),
Text(
'Sync Shout',
style: TextStyle(
fontFamily: 'Manrope',
fontSize: 18.0,
color: AppTheme.white,
fontWeight: FontWeight.w700,
),
),
],
)
: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.sync,
color: AppTheme.white,
),
Text(
'Sync Shout',
style: TextStyle(
fontFamily: 'Manrope',
fontSize: 18.0,
color: AppTheme.white,
fontWeight: FontWeight.w700,
),
),
],
),
onPressed: () async {
if (shoutC.isSubmitOfflineShout.value == false) {
shoutC.syncOfflineShouts();
}
},
),
),
);
}
}
Editor is loading...
Leave a Comment