import 'package:flutter/material.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'; import 'customer_service_dedicatedv2.dart'; class DisplayTanpaPromo extends StatelessWidget { const DisplayTanpaPromo( {Key? key, required this.isLoading, required this.judul, required this.scrlCnt, required this.selectedCounter, required this.listBelumDilayani, required this.listCall, required this.listSedangDilayani}) : super(key: key); final ValueNotifier isLoading; final ValueNotifier judul; final ScrollController scrlCnt; final ValueNotifier> selectedCounter; final ValueNotifier> listBelumDilayani; final ValueNotifier> listCall; final ValueNotifier> 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: const EdgeInsets.only(left: 68, right: 68, top: 34, bottom: 32), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // judul start Row( children: [ Expanded( flex: 3, child: Container( // color: Colors.green, // width: Constant.getActualX(context: context, x: 900), height: Constant.getActualY(context: context, y: 120), child: Stack( alignment: Alignment.centerLeft, children: [ Container( width: Constant.getActualX(context: context, x: 1400), 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: const EdgeInsets.only( top: 6, left: 80, ), 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(), ), Padding( padding: EdgeInsets.only(left: 40, right: 40), child: 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, ), ) ], ), ), ), Expanded( flex: 1, child: Padding( padding: const EdgeInsets.only(left: 10), child: Clock(), ), ), ], ), // judul end // counter list start Expanded( child: Container( // color: Colors.blue, width: Constant.getActualX(context: context, x: 1920), height: Constant.getActualY(context: context, y: 400), child: GridView.count( scrollDirection: Axis.horizontal, controller: scrlCnt, crossAxisSpacing: 0.6, // mainAxisSpacing: 30, childAspectRatio: 1, crossAxisCount: 1, 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()), ), ), // counter list end // antrian selanjutnya start 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), ), Container( // color: Colors.yellowAccent, width: Constant.getActualX(context: context, x: 1920), height: Constant.getActualY(context: context, y: 360), child: GridView.count( crossAxisSpacing: 10, mainAxisSpacing: 0, crossAxisCount: 3, childAspectRatio: 5, children: listBelumDilayani.value .map( (e) => MyAntrianCustomerServiceDedicated( antrian: e.queueNumber, skip: e.skipQueue, ), ) .toList(), ), ), ], ), ), ), ); } }