Commit d125b466 authored by valdi's avatar valdi

succes set ready, queue, and pick up

parent 3814b22d
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:manager_queue/helper/config.dart';
import 'package:manager_queue/models/queue.dart'; import 'package:manager_queue/models/queue.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
...@@ -17,7 +18,7 @@ class ApiQueue { ...@@ -17,7 +18,7 @@ class ApiQueue {
} }
static Future<List<OrderQueue>> getQueue() async { static Future<List<OrderQueue>> getQueue() async {
String apiUrl = "http://192.168.2.142:8000/api/getqueue"; String apiUrl = apiUrlQueue;
// print("Test"); // print("Test");
List<OrderQueue> queues = []; List<OrderQueue> queues = [];
try { try {
......
...@@ -7,23 +7,21 @@ class ReadyBloc extends Cubit<List<OrderQueue>> { ...@@ -7,23 +7,21 @@ class ReadyBloc extends Cubit<List<OrderQueue>> {
Future<List<OrderQueue>> getData() async { Future<List<OrderQueue>> getData() async {
var apiQueue = await ApiQueue.getQueue(); var apiQueue = await ApiQueue.getQueue();
return apiQueue; return apiQueue.where((i) => (i.status == "Ready")).toList();
} }
// List<OrderQueue> queues = [
// OrderQueue(id: "1", queue_number: '123', status: 'Ready'),
// OrderQueue(id: "2", queue_number: '1234', status: 'Ready'),
// OrderQueue(id: "3", queue_number: '12345', status: 'queue'),
// OrderQueue(id: "4", queue_number: '123456', status: 'queue'),
// OrderQueue(id: "5", queue_number: '12345633', status: 'Ready'),
// ];
// ReadyBloc() : super(Future.empty);
void queueList() { void queueList() {
getData().then((value) { getData().then((value) {
// print(value); // print(value);
emit(value); emit(value);
}); });
} }
onPressed(OrderQueue thisQueue) {
var index = state.indexOf(thisQueue);
thisQueue.isSelected = !thisQueue.isSelected;
state[index] = thisQueue;
print('berubah');
emit(state);
}
} }
import 'package:bloc/bloc.dart';
import 'package:flutter/widgets.dart';
import 'package:manager_queue/models/queue.dart';
class SelectedReadyBloc extends Cubit<List<OrderQueue>> {
SelectedReadyBloc() : super([]);
onPressed(OrderQueue thisQueue) {
if (state.contains(thisQueue)) {
state.remove(thisQueue);
} else {
state.add(thisQueue);
}
print(state);
emit(state);
}
}
...@@ -11,12 +11,12 @@ class QueueCubit extends Cubit<QueueState> { ...@@ -11,12 +11,12 @@ class QueueCubit extends Cubit<QueueState> {
Future<void> getData() async { Future<void> getData() async {
emit(QueueLoading()); emit(QueueLoading());
Future.delayed(const Duration(milliseconds: 2000), () async { // Future.delayed(const Duration(milliseconds: 2000), () async {
var apiQueue = await ApiQueue.getQueue(); var apiQueue = await ApiQueue.getQueue();
var data = apiQueue.where((i) => (i.status == "In Queue")).toList(); var data = apiQueue.where((i) => (i.status == "In Queue")).toList();
emit(QueueLoaded(data)); emit(QueueLoaded(data));
}); // });
} }
onPressed(List<OrderQueue> active, OrderQueue toUpdate) { onPressed(List<OrderQueue> active, OrderQueue toUpdate) {
......
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:manager_queue/models/queue.dart';
import '../api.dart';
part 'ready_state.dart';
class ReadyCubit extends Cubit<ReadyState> {
ReadyCubit() : super(ReadyInitial());
Future<void> getData() async {
emit(ReadyLoading());
// Future.delayed(const Duration(milliseconds: 2000), () async {
var apiQueue = await ApiQueue.getQueue();
var data = apiQueue.where((i) => (i.status == "Ready")).toList();
emit(ReadyLoaded(data));
// });
}
onPressed(List<OrderQueue> active, OrderQueue toUpdate) {
emit(ReadyInitial());
var index = active.indexOf(toUpdate);
toUpdate.isSelectedReady = !toUpdate.isSelectedReady;
active[index] = toUpdate;
emit(ReadyUpdated(active));
}
}
part of 'ready_cubit.dart';
abstract class ReadyState extends Equatable {
const ReadyState();
@override
List<Object> get props => [];
}
class ReadyInitial extends ReadyState {}
class ReadyLoading extends ReadyState {}
class ReadyLoaded extends ReadyState {
final List<OrderQueue> readys;
ReadyLoaded(this.readys);
@override
List<Object> get props => [readys];
}
class ReadyUpdated extends ReadyState {
final List<OrderQueue> readys;
ReadyUpdated(this.readys);
@override
List<Object> get props => [readys];
}
import 'package:mqtt_client/mqtt_browser_client.dart';
const String apiUrlQueue = "http://192.168.2.142:8000/api/getqueue";
const String apiUrlUpdate = "http://192.168.2.142:8000/api/updatequeue";
const String mqttUrl = "ws://dev.ravku.com";
const String queueTopic = "queuetest/1";
const String queueMessage = "updateApi";
const int mqttPort = 1883;
final mqClient = MqttBrowserClient(mqttUrl, "");
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:manager_queue/bloc/queue_bloc.dart'; import 'package:manager_queue/bloc/queue_bloc.dart';
import 'package:manager_queue/bloc/ready_bloc.dart'; import 'package:manager_queue/bloc/ready_bloc.dart';
import 'package:manager_queue/cubit/queue_cubit.dart'; import 'package:manager_queue/cubit/queue_cubit.dart';
import 'package:manager_queue/cubit/ready_cubit.dart';
import 'package:manager_queue/helper/config.dart';
import 'package:manager_queue/main_page.dart'; import 'package:manager_queue/main_page.dart';
import 'package:mqtt_client/mqtt_client.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'bloc/selected_queue_bloc.dart'; import 'bloc/selected_queue_bloc.dart';
import 'bloc/selected_ready_bloc.dart';
void main() { void main() {
// var prefs = await SharedPreferences.getInstance();
runApp(MyApp()); runApp(MyApp());
} }
Future<int> runMqTT(BuildContext context) async {
mqClient.logging(on: false);
mqClient.setProtocolV311();
mqClient.keepAlivePeriod = 86400;
mqClient.port = mqttPort;
mqClient.onDisconnected;
mqClient.onConnected;
mqClient.onSubscribed;
// mqClient.pongCallback = pong;
final connMess = MqttConnectMessage()
.withClientIdentifier('Mqtt_MyClientUniqueId')
.withWillTopic('willtopic') // If you set this you must set a will message
.withWillMessage('My Will message')
.startClean() // Non persistent session for testing
.withWillQos(MqttQos.atLeastOnce);
// print('EXAMPLE::Mosquitto client connecting....');
mqClient.connectionMessage = connMess;
try {
await mqClient.connect();
} on NoConnectionException catch (e) {
// Raised by the client when connection fails.
// print('EXAMPLE::client exception - $e');
mqClient.disconnect();
} on SocketException catch (e) {
// Raised by the socket layer
// print('EXAMPLE::socket exception - $e');
mqClient.disconnect();
}
if (mqClient.connectionStatus!.state == MqttConnectionState.connected) {
// print('EXAMPLE::Mosquitto client connected');
} else {
/// Use status here rather than state if you also want the broker return code.
// print(
// 'EXAMPLE::ERROR Mosquitto client connection failed - disconnecting, status is ${mqClient.connectionStatus}');
mqClient.disconnect();
exit(-1);
}
/// Ok, lets try a subscription
// print('EXAMPLE::Subscribing to the queuetest/1 topic');
var topic = queueTopic; // Not a wildcard topic
mqClient.subscribe(topic, MqttQos.atMostOnce);
/// The client has a change notifier object(see the Observable class) which we then listen to to get
/// notifications of published updates to each subscribed topic.
// mqClient.updates!.listen((List<MqttReceivedMessage<MqttMessage?>>? c) {
// final recMess = c![0].payload as MqttPublishMessage;
// final pt =
// MqttPublishPayload.bytesToStringAsString(recMess.payload.message);
// // if (c[0].topic == topic && pt == queueMessage) {
// // context.read<QueueBloc>().queueList();
// // // print("berhasil update API");
// // } else {
// // // print("tidak berhasil dapat message yang sesuai");
// // }
// print('Notifikasi masuk dari topic <${c[0].topic}>, isinya adalah: $pt ');
// print('');
// });
// print('EXAMPLE::Sleeping....');
// await MqttUtilities.asyncSleep(60);
// /// Finally, unsubscribe and exit gracefully
// print('EXAMPLE::Unsubscribing');
// mqClient.unsubscribe(topic);
/// Wait for the unsubscribe message from the broker if you wish.
// await MqttUtilities.asyncSleep(2);
// print('EXAMPLE::Disconnecting');
// mqClient.disconnect();
return 0;
}
class MyApp extends StatelessWidget { class MyApp extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
runMqTT(context);
return MaterialApp( return MaterialApp(
initialRoute: '/', initialRoute: '/',
routes: { routes: {
...@@ -22,6 +107,8 @@ class MyApp extends StatelessWidget { ...@@ -22,6 +107,8 @@ class MyApp extends StatelessWidget {
BlocProvider(create: (_) => ReadyBloc()), BlocProvider(create: (_) => ReadyBloc()),
BlocProvider(create: (_) => SelectedQueueBloc()), BlocProvider(create: (_) => SelectedQueueBloc()),
BlocProvider(create: (_) => QueueCubit()), BlocProvider(create: (_) => QueueCubit()),
BlocProvider(create: (_) => SelectedReadyBloc()),
BlocProvider(create: (_) => ReadyCubit()),
], child: MainPage()), ], child: MainPage()),
}, },
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
......
import 'dart:collection'; import 'dart:collection';
import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
...@@ -6,9 +7,12 @@ import 'package:flutter_bloc/flutter_bloc.dart'; ...@@ -6,9 +7,12 @@ import 'package:flutter_bloc/flutter_bloc.dart';
// import 'package:manager_queue/api.dart'; // import 'package:manager_queue/api.dart';
import 'package:manager_queue/bloc/queue_bloc.dart'; import 'package:manager_queue/bloc/queue_bloc.dart';
import 'package:manager_queue/bloc/ready_bloc.dart'; import 'package:manager_queue/bloc/ready_bloc.dart';
import 'package:manager_queue/helper/config.dart';
import 'package:manager_queue/models/queue.dart'; import 'package:manager_queue/models/queue.dart';
import 'package:http/http.dart' as http;
import 'package:mqtt_client/mqtt_client.dart';
import 'cubit/queue_cubit.dart'; import 'cubit/queue_cubit.dart';
import 'cubit/ready_cubit.dart';
class MainPage extends StatefulWidget { class MainPage extends StatefulWidget {
@override @override
...@@ -16,56 +20,88 @@ class MainPage extends StatefulWidget { ...@@ -16,56 +20,88 @@ class MainPage extends StatefulWidget {
} }
class _MainPageState extends State<MainPage> { class _MainPageState extends State<MainPage> {
// var queue = ['1', '4', '5'];
List<dynamic> orderQueue = []; List<dynamic> orderQueue = [];
List<dynamic> orderReady = []; List<dynamic> orderReady = [];
List<OrderQueue> queueSelected = []; List<String> queueSelected = [];
List<OrderQueue> readySelected = []; List<String> readySelected = [];
List<OrderQueue> pickUp = []; List<String> pickUp = [];
// List<dynamic> orderQueueList = [];
// @override
// void initState() {
// // orderQueueList = orderQueue.where((i) => (i.status == 'In Queue')).toList();
// // orderReady = orderQueue.where((i) => (i.status == 'Ready')).toList();
// // TODO: implement initState
// super.initState();
// }
void setToReady(List<OrderQueue> queueSelected) { void setToReady(List queueSelected) async {
var apiUrl = apiUrlUpdate;
for (var i in queueSelected) { for (var i in queueSelected) {
orderQueue.remove(i); var apiResult = await http
.post(Uri.parse(apiUrl), body: {"id": i.toString(), "status": "1"});
var jsonObject = jsonDecode(apiResult.body)['status'];
// if (jsonObject == true) {
// context.read<QueueCubit>().getData();
// context.read<ReadyCubit>().getData();
// } else {
// print("tidak berhasil");
// }
} }
context.read<QueueCubit>().getData();
orderReady.addAll(queueSelected); context.read<ReadyCubit>().getData();
const pubTopic = queueTopic;
final builder = MqttClientPayloadBuilder();
builder.addString(queueMessage);
mqClient.publishMessage(pubTopic, MqttQos.exactlyOnce, builder.payload!);
} }
void setToQueue(List<OrderQueue> readySelected) { void setToQueue(List readySelected) async {
// print(readySelected);
var apiUrl = apiUrlUpdate;
for (var i in readySelected) { for (var i in readySelected) {
orderReady.remove(i); var apiResult = await http
.post(Uri.parse(apiUrl), body: {"id": i.toString(), "status": "0"});
var jsonObject = jsonDecode(apiResult.body)['status'];
// if (jsonObject == true) {
// context.read<ReadyCubit>().getData();
// context.read<QueueCubit>().getData();
// } else {
// print("tidak berhasil");
// }
} }
context.read<ReadyCubit>().getData();
orderQueue.addAll(readySelected); context.read<QueueCubit>().getData();
const pubTopic = queueTopic;
final builder = MqttClientPayloadBuilder();
builder.addString(queueMessage);
mqClient.publishMessage(pubTopic, MqttQos.exactlyOnce, builder.payload!);
} }
void setToPickUp(List<OrderQueue> readySelected) { // void setToPickUp(List<OrderQueue> readySelected) {
// for (var i in readySelected) {
// orderReady.remove(i);
// }
// pickUp.addAll(readySelected);
// }
void setToPickUp(List readySelected) async {
// print(readySelected);
var apiUrl = apiUrlUpdate;
for (var i in readySelected) { for (var i in readySelected) {
orderReady.remove(i); var apiResult = await http
.post(Uri.parse(apiUrl), body: {"id": i.toString(), "status": "2"});
var jsonObject = jsonDecode(apiResult.body)['status'];
// if (jsonObject == true) {
// context.read<ReadyCubit>().getData();
// context.read<QueueCubit>().getData();
// } else {
// print("tidak berhasil");
// }
} }
context.read<ReadyCubit>().getData();
pickUp.addAll(readySelected); const pubTopic = queueTopic;
final builder = MqttClientPayloadBuilder();
builder.addString(queueMessage);
mqClient.publishMessage(pubTopic, MqttQos.exactlyOnce, builder.payload!);
} }
// void queueSelectItem(List<Queue> _queueselect) {
// }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
context.read<QueueCubit>().getData(); context.read<QueueCubit>().getData();
// context.read<ReadyBloc>().queueList(); context.read<ReadyCubit>().getData();
print("Rebuild");
return MaterialApp( return MaterialApp(
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
...@@ -123,12 +159,6 @@ class _MainPageState extends State<MainPage> { ...@@ -123,12 +159,6 @@ class _MainPageState extends State<MainPage> {
context context
.read<QueueCubit>() .read<QueueCubit>()
.onPressed(state.queues, thisQueue); .onPressed(state.queues, thisQueue);
// print(context
// .read<SelectedQueueBloc>()
// .state
// .contains(thisQueue)
// ? 'ADA LOH'
// : 'GAK ADA LOH');
}, },
child: Card( child: Card(
color: Colors.black38, color: Colors.black38,
...@@ -138,12 +168,7 @@ class _MainPageState extends State<MainPage> { ...@@ -138,12 +168,7 @@ class _MainPageState extends State<MainPage> {
), ),
child: Center( child: Center(
child: Text( child: Text(
thisQueue.isSelected "Pesanan " + thisQueue.queue_number,
? "Pesanan " +
thisQueue.queue_number +
" ✅ "
: "Pesanan " +
thisQueue.queue_number,
style: TextStyle(fontSize: 20), style: TextStyle(fontSize: 20),
))), ))),
), ),
...@@ -151,7 +176,6 @@ class _MainPageState extends State<MainPage> { ...@@ -151,7 +176,6 @@ class _MainPageState extends State<MainPage> {
}, },
); );
} else if (state is QueueUpdated) { } else if (state is QueueUpdated) {
print('updated');
return GridView.builder( return GridView.builder(
itemCount: state.queues.length, itemCount: state.queues.length,
gridDelegate: gridDelegate:
...@@ -162,6 +186,13 @@ class _MainPageState extends State<MainPage> { ...@@ -162,6 +186,13 @@ class _MainPageState extends State<MainPage> {
childAspectRatio: 2), childAspectRatio: 2),
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
var thisQueue = state.queues[index]; var thisQueue = state.queues[index];
if (thisQueue.isSelected) {
if (!queueSelected.contains(thisQueue.id)) {
queueSelected.add(thisQueue.id);
}
} else {
queueSelected.remove(thisQueue.id);
}
return Material( return Material(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
child: InkWell( child: InkWell(
...@@ -169,12 +200,6 @@ class _MainPageState extends State<MainPage> { ...@@ -169,12 +200,6 @@ class _MainPageState extends State<MainPage> {
context context
.read<QueueCubit>() .read<QueueCubit>()
.onPressed(state.queues, thisQueue); .onPressed(state.queues, thisQueue);
// print(context
// .read<SelectedQueueBloc>()
// .state
// .contains(thisQueue)
// ? 'ADA LOH'
// : 'GAK ADA LOH');
}, },
child: Card( child: Card(
color: thisQueue.isSelected color: thisQueue.isSelected
...@@ -186,12 +211,7 @@ class _MainPageState extends State<MainPage> { ...@@ -186,12 +211,7 @@ class _MainPageState extends State<MainPage> {
), ),
child: Center( child: Center(
child: Text( child: Text(
thisQueue.isSelected "Pesanan " + thisQueue.queue_number,
? "Pesanan " +
thisQueue.queue_number +
" ✅ "
: "Pesanan " +
thisQueue.queue_number,
style: TextStyle(fontSize: 20), style: TextStyle(fontSize: 20),
))), ))),
), ),
...@@ -205,33 +225,21 @@ class _MainPageState extends State<MainPage> { ...@@ -205,33 +225,21 @@ class _MainPageState extends State<MainPage> {
), ),
), ),
), ),
Container( InkWell(
width: 1000, onTap: () {
height: 100, setToReady(queueSelected);
color: Colors.lightBlue, },
alignment: Alignment.center, child: Container(
child: Material( width: 1000,
height: 100,
color: Colors.lightBlue, color: Colors.lightBlue,
alignment: Alignment.center,
child: InkWell( child: InkWell(
onTap: () { onTap: () => setToReady(queueSelected),
setState(() { child: Text(
if (orderReady.contains(queueSelected)) { "SET TO READY",
queueSelected.remove(queueSelected); style: TextStyle(
} else { fontSize: 30, fontWeight: FontWeight.w700),
orderReady.addAll(queueSelected);
}
// print(queueSelected.toString());
});
},
splashColor: Colors.amber,
child: GestureDetector(
onTap: () => setToReady(queueSelected),
child: Text(
"SET TO READY",
style: TextStyle(
fontSize: 30, fontWeight: FontWeight.w700),
),
), ),
), ),
), ),
...@@ -264,21 +272,43 @@ class _MainPageState extends State<MainPage> { ...@@ -264,21 +272,43 @@ class _MainPageState extends State<MainPage> {
fontSize: 30, fontWeight: FontWeight.w700), fontSize: 30, fontWeight: FontWeight.w700),
), ),
), ),
Container( InkWell(
width: 400, onTap: () {
height: 100, print("clear");
margin: EdgeInsets.all(20), showDialog(
decoration: BoxDecoration( context: context,
borderRadius: BorderRadius.all( builder: (BuildContext context) => AlertDialog(
Radius.circular(20), title: Text("Clear"),
content: Text("Are you sure to clear?"),
actions: <Widget>[
TextButton(
onPressed: () => Navigator.pop(context),
child: Text('Cancel'),
),
TextButton(
onPressed: () => Navigator.pop(context),
child: Text('OK'),
),
],
),
);
},
child: Container(
width: 400,
height: 100,
margin: EdgeInsets.all(20),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(20),
),
color: Colors.amber,
),
alignment: Alignment.center,
child: Text(
"CLEAR",
style: TextStyle(
fontSize: 30, fontWeight: FontWeight.w700),
), ),
color: Colors.amber,
),
alignment: Alignment.center,
child: Text(
"CLEAR",
style: TextStyle(
fontSize: 30, fontWeight: FontWeight.w700),
), ),
), ),
], ],
...@@ -309,81 +339,159 @@ class _MainPageState extends State<MainPage> { ...@@ -309,81 +339,159 @@ class _MainPageState extends State<MainPage> {
child: MediaQuery.removePadding( child: MediaQuery.removePadding(
context: context, context: context,
removeTop: true, removeTop: true,
child: BlocBuilder<ReadyBloc, List<dynamic>>( child: BlocConsumer<ReadyCubit, ReadyState>(
builder: (context, list) { listener: (context, state) {
List<dynamic> orderReady = []; print('listener');
orderReady = print(state);
list.where((i) => (i.status == "Ready")).toList(); },
return GridView.builder( builder: (context, state) {
itemCount: orderReady.length, if (state is ReadyLoading) {
gridDelegate: return CircularProgressIndicator();
const SliverGridDelegateWithFixedCrossAxisCount( } else if (state is ReadyLoaded) {
crossAxisCount: 2, return GridView.builder(
crossAxisSpacing: 10, itemCount: state.readys.length,
mainAxisSpacing: 5, gridDelegate:
childAspectRatio: 2), const SliverGridDelegateWithFixedCrossAxisCount(
itemBuilder: (BuildContext context, int index) { crossAxisCount: 2,
var thisReady = orderReady[index]; crossAxisSpacing: 10,
return Material( mainAxisSpacing: 5,
borderRadius: BorderRadius.circular(10), childAspectRatio: 2),
child: InkWell( itemBuilder: (BuildContext context, int index) {
onTap: () { var thisQueue = state.readys[index];
setState(() { return Material(
if (readySelected.contains(thisReady)) { borderRadius: BorderRadius.circular(10),
readySelected.remove(thisReady); child: InkWell(
} else { onTap: () {
readySelected.add(thisReady); context
} .read<ReadyCubit>()
.onPressed(state.readys, thisQueue);
print(readySelected.toString()); },
}); child: Card(
}, color: Colors.black38,
child: Card( shape: RoundedRectangleBorder(
color: Colors.black38, borderRadius:
shape: RoundedRectangleBorder( BorderRadius.circular(10),
borderRadius: BorderRadius.circular(10), ),
child: Center(
child: Text(
"Pesanan " + thisQueue.queue_number,
style: TextStyle(fontSize: 20),
))),
), ),
child: Center( );
child: Text( },
readySelected.contains(thisReady) );
? "Pesanan " + } else if (state is ReadyUpdated) {
thisReady.queue_number + return GridView.builder(
" ✅" itemCount: state.readys.length,
: "Pesanan " + gridDelegate:
thisReady.queue_number, const SliverGridDelegateWithFixedCrossAxisCount(
style: TextStyle(fontSize: 20), crossAxisCount: 2,
), crossAxisSpacing: 10,
mainAxisSpacing: 5,
childAspectRatio: 2),
itemBuilder: (BuildContext context, int index) {
var thisQueue = state.readys[index];
if (thisQueue.isSelectedReady) {
if (!readySelected.contains(thisQueue.id)) {
readySelected.add(thisQueue.id);
}
} else {
readySelected.remove(thisQueue.id);
}
return Material(
borderRadius: BorderRadius.circular(10),
child: InkWell(
onTap: () {
context
.read<ReadyCubit>()
.onPressed(state.readys, thisQueue);
},
child: Card(
color: thisQueue.isSelectedReady
? Colors.blue
: Colors.black38,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(10),
),
child: Center(
child: Text(
"Pesanan " + thisQueue.queue_number,
style: TextStyle(fontSize: 20),
))),
), ),
), );
), },
); );
}, } else {
); return SizedBox();
}), }
},
),
// child: BlocBuilder<ReadyBloc, List<dynamic>>(
// builder: (context, list) {
// List<dynamic> orderReady = [];
// orderReady = list;
// return GridView.builder(
// itemCount: orderReady.length,
// gridDelegate:
// const SliverGridDelegateWithFixedCrossAxisCount(
// crossAxisCount: 2,
// crossAxisSpacing: 10,
// mainAxisSpacing: 5,
// childAspectRatio: 2),
// itemBuilder: (BuildContext context, int index) {
// var thisReady = orderReady[index];
// return Material(
// borderRadius: BorderRadius.circular(10),
// child: InkWell(
// onTap: () {
// setState(() {
// if (readySelected.contains(thisReady)) {
// readySelected.remove(thisReady);
// } else {
// readySelected.add(thisReady);
// }
// print(readySelected.toString());
// });
// },
// child: Card(
// color: Colors.black38,
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(10),
// ),
// child: Center(
// child: Text(
// readySelected.contains(thisReady)
// ? "Pesanan " + thisReady.id + " ✅"
// : "Pesanan " + thisReady.id,
// style: TextStyle(fontSize: 20),
// ),
// ),
// ),
// ),
// );
// },
// );
// }),
), ),
), ),
Row( Row(
children: [ children: [
Flexible( Flexible(
flex: 1, flex: 1,
child: Container( child: InkWell(
height: 100, onTap: () {
color: Colors.green, setToQueue(readySelected);
alignment: Alignment.center, },
child: InkWell( child: Container(
onTap: () { height: 100,
setState(() { color: Colors.green,
if (orderQueue.contains(readySelected)) { alignment: Alignment.center,
readySelected.remove(readySelected); child: InkWell(
} else {
orderQueue.addAll(readySelected);
}
// print(queueSelected.toString());
});
},
splashColor: Colors.amber,
child: GestureDetector(
onTap: () => setToQueue(readySelected), onTap: () => setToQueue(readySelected),
child: Text( child: Text(
"SET TO QUEUE", "SET TO QUEUE",
...@@ -397,23 +505,15 @@ class _MainPageState extends State<MainPage> { ...@@ -397,23 +505,15 @@ class _MainPageState extends State<MainPage> {
), ),
Flexible( Flexible(
flex: 1, flex: 1,
child: Container( child: InkWell(
height: 100, onTap: () {
color: Colors.black26, setToPickUp(readySelected);
alignment: Alignment.center, },
child: InkWell( child: Container(
onTap: () { height: 100,
setState(() { color: Colors.black26,
if (pickUp.contains(readySelected)) { alignment: Alignment.center,
readySelected.remove(readySelected); child: InkWell(
} else {
pickUp.addAll(readySelected);
}
// print(queueSelected.toString());
});
},
child: GestureDetector(
onTap: () => setToPickUp(readySelected), onTap: () => setToPickUp(readySelected),
child: Text( child: Text(
"PICK UP", "PICK UP",
......
...@@ -3,12 +3,14 @@ class OrderQueue { ...@@ -3,12 +3,14 @@ class OrderQueue {
final String queue_number; final String queue_number;
final String status; final String status;
bool isSelected = false; bool isSelected = false;
bool isSelectedReady = false;
OrderQueue( OrderQueue(
{required this.id, {required this.id,
required this.queue_number, required this.queue_number,
required this.status, required this.status,
required this.isSelected}); required this.isSelected,
required this.isSelectedReady});
factory OrderQueue.createOrderQueue(Map<String, dynamic> json) { factory OrderQueue.createOrderQueue(Map<String, dynamic> json) {
return OrderQueue( return OrderQueue(
...@@ -16,6 +18,7 @@ class OrderQueue { ...@@ -16,6 +18,7 @@ class OrderQueue {
queue_number: json['queue_number'].toString(), queue_number: json['queue_number'].toString(),
status: json['status'].toString(), status: json['status'].toString(),
isSelected: false, isSelected: false,
isSelectedReady: false,
); );
} }
} }
...@@ -50,6 +50,13 @@ packages: ...@@ -50,6 +50,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.15.0" version: "1.15.0"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
cupertino_icons: cupertino_icons:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -64,6 +71,13 @@ packages: ...@@ -64,6 +71,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.3" version: "2.0.3"
event_bus:
dependency: transitive
description:
name: event_bus
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
...@@ -71,6 +85,20 @@ packages: ...@@ -71,6 +85,20 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0" version: "1.2.0"
ffi:
dependency: transitive
description:
name: ffi
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
file:
dependency: transitive
description:
name: file
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.2"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
...@@ -95,6 +123,11 @@ packages: ...@@ -95,6 +123,11 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
http: http:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -109,6 +142,13 @@ packages: ...@@ -109,6 +142,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.0.0" version: "4.0.0"
js:
dependency: transitive
description:
name: js
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.4"
lints: lints:
dependency: transitive dependency: transitive
description: description:
...@@ -137,6 +177,13 @@ packages: ...@@ -137,6 +177,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.7.0" version: "1.7.0"
mqtt_client:
dependency: "direct main"
description:
name: mqtt_client
url: "https://pub.dartlang.org"
source: hosted
version: "9.6.5"
multi_select_flutter: multi_select_flutter:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -158,6 +205,48 @@ packages: ...@@ -158,6 +205,48 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.8.1" version: "1.8.1"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.5"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.5"
platform:
dependency: transitive
description:
name: platform
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.0"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.2"
process:
dependency: transitive
description:
name: process
url: "https://pub.dartlang.org"
source: hosted
version: "4.2.4"
provider: provider:
dependency: transitive dependency: transitive
description: description:
...@@ -165,6 +254,62 @@ packages: ...@@ -165,6 +254,62 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.0.2" version: "6.0.2"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.13"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.11"
shared_preferences_ios:
dependency: transitive
description:
name: shared_preferences_ios
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
shared_preferences_macos:
dependency: transitive
description:
name: shared_preferences_macos
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
...@@ -219,6 +364,13 @@ packages: ...@@ -219,6 +364,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.3.0" version: "1.3.0"
uuid:
dependency: "direct main"
description:
name: uuid
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.6"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
...@@ -226,6 +378,20 @@ packages: ...@@ -226,6 +378,20 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.1" version: "2.1.1"
win32:
dependency: transitive
description:
name: win32
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.1"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.0+1"
sdks: sdks:
dart: ">=2.16.1 <3.0.0" dart: ">=2.16.1 <3.0.0"
flutter: ">=1.16.0" flutter: ">=2.8.0"
...@@ -33,7 +33,10 @@ dependencies: ...@@ -33,7 +33,10 @@ dependencies:
sdk: flutter sdk: flutter
flutter_bloc: ^8.0.1 flutter_bloc: ^8.0.1
http: ^0.13.4 http: ^0.13.4
mqtt_client: ^9.6.5
multi_select_flutter: ^4.0.0 multi_select_flutter: ^4.0.0
shared_preferences: ^2.0.13
uuid: ^3.0.6
dev_dependencies: dev_dependencies:
flutter_lints: ^1.0.0 flutter_lints: ^1.0.0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment