Files
display-counter-cpone/lib/screen/with_media_promo.dart
Hanan Askarim 7c1569fb3a add media promo
2026-04-07 11:46:20 +07:00

447 lines
18 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_image_slideshow/flutter_image_slideshow.dart';
import 'package:text_scroll/text_scroll.dart';
import '../app/constant.dart';
import '../model/display_counter_dedicated_modelv2.dart';
import '../model/service_model.dart';
import '../widget/clock.dart';
import '../widget/my_antrian_customer_service_dedicated.dart';
import '../widget/my_counter_customer_service_dedicated.dart';
class WithMediaPromo extends StatelessWidget {
const WithMediaPromo({
Key? key,
required this.listBelumDilayani,
required this.isLoading,
required this.judul,
required this.scrlCnt,
required this.selectedCounter,
required this.listCall,
required this.listSedangDilayani,
}) : super(key: key);
final ValueNotifier<List<NotServed>> listBelumDilayani;
final ValueNotifier<bool> isLoading;
final ValueNotifier<String> judul;
final ScrollController scrlCnt;
final ValueNotifier<List<Layanan>> selectedCounter;
final ValueNotifier<List<Call>> listCall;
final ValueNotifier<List<Served>> listSedangDilayani;
@override
Widget build(BuildContext context) {
getNomorAntrian(String counterID) {
var rawCall = listCall.value;
// print(rawCall);
Call call = Call(
queueID: '0',
statusID: '0',
queueNumber: '0',
queueCounterID: '0',
counterCode: '0',
orderStatus: '0');
for (var i = 0; i < rawCall.length; i++) {
if (rawCall[i].queueCounterID == counterID) {
call = rawCall[i];
}
}
var rawProcess = listSedangDilayani.value;
Served process = Served(
queueID: '0',
statusID: '0',
queueNumber: '0',
queueCounterID: '0',
counterCode: '0',
orderStatus: '0');
for (var i = 0; i < rawProcess.length; i++) {
if (rawProcess[i].queueCounterID == counterID) {
process = rawProcess[i];
}
}
if (call.queueID != '0' && process.queueID == '0') {
return call.queueNumber;
} else if (call.queueID == '0' && process.queueID != '0') {
return process.queueNumber;
} else if (call.queueID == '0' && process.queueID == '0') {
return '-';
} else {
return call.queueNumber;
}
}
getBlinkAntrian(String counterID) {
var rawCall = listCall.value;
// print(rawCall);
Call call = Call(
queueID: '0',
statusID: '0',
queueNumber: '0',
queueCounterID: '0',
counterCode: '0',
orderStatus: '0');
for (var i = 0; i < rawCall.length; i++) {
if (rawCall[i].queueCounterID == counterID) {
call = rawCall[i];
}
}
var rawProcess = listSedangDilayani.value;
Served process = Served(
queueID: '0',
statusID: '0',
queueNumber: '0',
queueCounterID: '0',
counterCode: '0',
orderStatus: '0');
for (var i = 0; i < rawProcess.length; i++) {
if (rawProcess[i].queueCounterID == counterID) {
process = rawProcess[i];
}
}
if (call.queueID != '0' && process.queueID == '0') {
return true;
} else if (call.queueID == '0' && process.queueID != '0') {
return false;
} else if (call.queueID == '0' && process.queueID == '0') {
return false;
} else {
return true;
}
}
return Material(
child: Container(
width: Constant.getActualX(context: context, x: 1920),
height: Constant.getActualY(context: context, y: 1080),
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage('images/background.png'), fit: BoxFit.fill)),
child: Padding(
padding: EdgeInsets.only(
left: Constant.getActualX(context: context, x: 68),
right: Constant.getActualX(context: context, x: 68),
top: Constant.getActualY(context: context, y: 34),
bottom: Constant.getActualY(context: context, y: 32)),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Column(
// mainAxisAlignment: MainAxisAlignment.end,
// crossAxisAlignment: CrossAxisAlignment.start,
children: [
//TV
SizedBox(
width: Constant.getActualX(context: context, x: 882),
height: Constant.getActualY(context: context, y: 508),
child: ImageSlideshow(
indicatorColor: Colors.transparent,
indicatorBackgroundColor: Colors.transparent,
autoPlayInterval: 5000,
isLoop: true,
children: [
// Container(
// child:
// ),
Image.network(
'https://${Constant.baseSocket}/one-media/one-queue/slide-counter/1.jpg',
errorBuilder: (context, error, stackTrace) {
return Image.asset(
'images/1.jpg',
fit: BoxFit.fitWidth,
);
},
headers: {
'Access-Control-Allow-Origin': '*',
},
loadingBuilder: (context, child, loadingProgress) {
if (loadingProgress == null) {
return child;
} else {
return Center(
child: CircularProgressIndicator(),
);
}
},
),
Image.network(
'https://${Constant.baseSocket}/one-media/one-queue/slide-counter/2.jpg',
errorBuilder: (context, error, stackTrace) {
return Image.asset(
'images/2.jpg',
fit: BoxFit.fitWidth,
);
},
headers: {
'Access-Control-Allow-Origin': '*',
},
loadingBuilder: (context, child, loadingProgress) {
if (loadingProgress == null) {
return child;
} else {
return Center(
child: CircularProgressIndicator(),
);
}
},
),
Image.network(
'https://${Constant.baseSocket}/one-media/one-queue/slide-counter/3.jpg',
errorBuilder: (context, error, stackTrace) {
return Image.asset(
'images/3.jpg',
fit: BoxFit.fitWidth,
);
},
headers: {
'Access-Control-Allow-Origin': '*',
},
loadingBuilder: (context, child, loadingProgress) {
if (loadingProgress == null) {
return child;
} else {
return Center(
child: CircularProgressIndicator(),
);
}
},
),
Image.network(
'https://${Constant.baseSocket}/one-media/one-queue/slide-counter/4.jpg',
errorBuilder: (context, error, stackTrace) {
return Image.asset(
'images/4.jpg',
fit: BoxFit.fitWidth,
);
},
headers: {
'Access-Control-Allow-Origin': '*',
},
loadingBuilder: (context, child, loadingProgress) {
if (loadingProgress == null) {
return child;
} else {
return Center(
child: CircularProgressIndicator(),
);
}
},
),
Image.network(
'https://${Constant.baseSocket}/one-media/one-queue/slide-counter/5.jpg',
errorBuilder: (context, error, stackTrace) {
return Image.asset(
'images/5.jpg',
fit: BoxFit.fitWidth,
);
},
headers: {
'Access-Control-Allow-Origin': '*',
},
loadingBuilder: (context, child, loadingProgress) {
if (loadingProgress == null) {
return child;
} else {
return Center(
child: CircularProgressIndicator(),
);
}
},
),
Image.network(
'https://${Constant.baseSocket}/one-media/one-queue/slide-counter/6.jpg',
errorBuilder: (context, error, stackTrace) {
return Image.asset(
'images/6.jpg',
fit: BoxFit.fitWidth,
);
},
headers: {
'Access-Control-Allow-Origin': '*',
},
loadingBuilder: (context, child, loadingProgress) {
if (loadingProgress == null) {
return child;
} else {
return Center(
child: CircularProgressIndicator(),
);
}
},
),
],
),
),
SizedBox(
height: Constant.getActualY(context: context, y: 10),
),
// waktu yg direvisi
Clock(),
//Antrian Selanjutnya
SizedBox(
width: Constant.getActualX(context: context, x: 882),
height: Constant.getActualY(context: context, y: 66),
child: Text('Antrian Selanjutnya',
style: Constant.S50(context: context)
.copyWith(color: Constant.textBlack)),
),
SizedBox(
height: Constant.getActualY(context: context, y: 24),
),
SizedBox(
width: Constant.getActualX(context: context, x: 882),
height: Constant.getActualY(context: context, y: 300),
child: GridView.count(
crossAxisSpacing: 10,
mainAxisSpacing: 0,
crossAxisCount: 2,
childAspectRatio: 4,
children: listBelumDilayani.value
.map(
(e) => GestureDetector(
onTap: () {
// process_sound(
// e['waiting'].queueNumber, "r117");
},
child: MyAntrianCustomerServiceDedicated(
skip: e.skipQueue,
antrian: e.queueNumber,
),
),
)
.toList(),
),
),
],
),
// const Spacer(),
SizedBox(
width: Constant.getActualX(context: context, x: 40),
),
Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Row(
children: [
SizedBox(
width: Constant.getActualX(context: context, x: 808),
height: Constant.getActualY(context: context, y: 160),
child: Stack(
alignment: Alignment.centerLeft,
children: [
Container(
width:
Constant.getActualX(context: context, x: 808),
height:
Constant.getActualY(context: context, y: 72),
decoration: BoxDecoration(
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.25),
blurRadius: 8)
],
borderRadius: BorderRadius.circular(20),
color: Colors.white),
child: Padding(
padding: EdgeInsets.only(
top: 6,
left: Constant.getActualX(
context: context, x: 120),
),
child: Stack(
alignment: Alignment.centerLeft,
children: [
if (isLoading.value)
SizedBox(
width: Constant.getActualX(
context: context, x: 60),
height: Constant.getActualX(
context: context, x: 70),
child:
const CircularProgressIndicator(),
),
TextScroll(judul.value,
velocity: Velocity(
pixelsPerSecond: Offset(50, 0)),
style: Constant.body_3(context: context)
.copyWith(color: Constant.textRed)),
],
),
),
),
Container(
width:
Constant.getActualX(context: context, x: 100),
height:
Constant.getActualY(context: context, y: 100),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
gradient: LinearGradient(
colors: [Constant.red1, Constant.red2])),
),
Positioned(
top: 0,
child: Image.asset(
'images/cs.png',
fit: BoxFit.cover,
height: 100,
),
)
],
),
),
SizedBox(
width: Constant.getActualX(context: context, x: 20),
),
],
),
SizedBox(
width: Constant.getActualX(context: context, x: 808),
height: Constant.getActualY(context: context, y: 820),
child: GridView.count(
scrollDirection: Axis.horizontal,
controller: scrlCnt,
crossAxisSpacing: 90,
mainAxisSpacing: 60,
crossAxisCount: 2,
children: selectedCounter.value
.map(
(e) => MyCounterCustomerServiceDedicated(
// counter: 'DOKTER UMUM',
counter: 'Counter ${e.counterCode}',
nomorAntrian:
getNomorAntrian(e.counterID.toString()),
// nomorAntrian: 'LA 001',
borderDalam: const BorderRadius.only(
topLeft: Radius.circular(50),
topRight: Radius.circular(50),
bottomLeft: Radius.circular(50)),
borderLuar: const BorderRadius.only(
topLeft: Radius.circular(60),
topRight: Radius.circular(60),
bottomLeft: Radius.circular(60),
),
blink: getBlinkAntrian(e.counterID.toString()),
),
)
.toList()),
),
],
),
],
),
),
),
);
}
}