Commit 3ea85076 authored by valdi's avatar valdi

panggil api

parent a9203a16
...@@ -12,12 +12,13 @@ class ApiQueue { ...@@ -12,12 +12,13 @@ class ApiQueue {
ApiQueue(this.id, this.queue_number, this.status); ApiQueue(this.id, this.queue_number, this.status);
factory ApiQueue.createQueue(Map<String, dynamic> json) { factory ApiQueue.createQueue(Map<String, dynamic> json) {
return ApiQueue( return ApiQueue(json['id'].toString(), json['queue_number'].toString(),
json['id'].toString(), json['queue_number'].toString(), json['status']); json['status'].toString());
} }
static Future<List<OrderQueue>> getQueue() async { static Future<List<OrderQueue>> getQueue() async {
String apiUrl = "http://192.168.2.142:8000/api/getqueue"; String apiUrl = "http://192.168.2.142:8000/api/getqueue";
// print("Test");
List<OrderQueue> queues = []; List<OrderQueue> queues = [];
try { try {
var apiResult = await http.get(Uri.parse(apiUrl)); var apiResult = await http.get(Uri.parse(apiUrl));
......
import 'package:bloc/bloc.dart';
import 'package:manager_queue/api.dart';
import 'package:manager_queue/models/queue.dart';
class ReadyBloc extends Cubit<List<OrderQueue>> {
ReadyBloc() : super([]);
Future<List<OrderQueue>> getData() async {
var apiQueue = await ApiQueue.getQueue();
return apiQueue;
}
// 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() {
getData().then((value) {
// print(value);
emit(value);
});
}
}
class Queue { class Queue {
String id, nomor, status; String id, nomor, status;
Queue({required this.id, required this.nomor, required this.status}); Queue({required this.id, required this.nomor, required this.status});
static where(bool Function(dynamic i) param0) {}
} }
List<Queue> Queues = [ List<Queue> Queues = [
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:manager_queue/bloc/queue_bloc.dart';
import 'package:manager_queue/bloc/ready_bloc.dart';
import 'package:manager_queue/main_page.dart'; import 'package:manager_queue/main_page.dart';
void main() { void main() {
...@@ -11,7 +14,10 @@ class MyApp extends StatelessWidget { ...@@ -11,7 +14,10 @@ class MyApp extends StatelessWidget {
return MaterialApp( return MaterialApp(
initialRoute: '/', initialRoute: '/',
routes: { routes: {
'/': (context) => MainPage(), '/': (context) => MultiBlocProvider(providers: [
BlocProvider(create: (_) => QueueBloc()),
BlocProvider(create: (_) => ReadyBloc()),
], child: MainPage()),
}, },
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
); );
......
import 'dart:collection'; import 'dart:collection';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
// import 'package:manager_queue/data.dart'; // import 'package:manager_queue/data.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/models/queue.dart'; import 'package:manager_queue/models/queue.dart';
class MainPage extends StatefulWidget { class MainPage extends StatefulWidget {
...@@ -15,28 +17,21 @@ class _MainPageState extends State<MainPage> { ...@@ -15,28 +17,21 @@ class _MainPageState extends State<MainPage> {
// var queue = ['1', '4', '5']; // var queue = ['1', '4', '5'];
List<dynamic> orderQueue = []; List<dynamic> orderQueue = [];
List<dynamic> orderReady = []; List<dynamic> orderReady = [];
List<Queue> queueSelected = []; List<OrderQueue> queueSelected = [];
List<Queue> readySelected = []; List<OrderQueue> readySelected = [];
List<Queue> pickUp = []; List<OrderQueue> pickUp = [];
List<dynamic> orderQueueList = []; // List<dynamic> orderQueueList = [];
void getQueue() async {
var apiQueue = await ApiQueue.getQueue();
setState(() {
orderQueue = apiQueue;
});
}
@override @override
void initState() { void initState() {
orderQueueList = orderQueue.where((i) => (i.status == 'In Queue')).toList(); // orderQueueList = orderQueue.where((i) => (i.status == 'In Queue')).toList();
orderReady = orderQueue.where((i) => (i.status == 'Ready')).toList(); // orderReady = orderQueue.where((i) => (i.status == 'Ready')).toList();
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
} }
void setToReady(List<Queue> queueSelected) { void setToReady(List<OrderQueue> queueSelected) {
for (var i in queueSelected) { for (var i in queueSelected) {
orderQueue.remove(i); orderQueue.remove(i);
} }
...@@ -44,7 +39,7 @@ class _MainPageState extends State<MainPage> { ...@@ -44,7 +39,7 @@ class _MainPageState extends State<MainPage> {
orderReady.addAll(queueSelected); orderReady.addAll(queueSelected);
} }
void setToQueue(List<Queue> readySelected) { void setToQueue(List<OrderQueue> readySelected) {
for (var i in readySelected) { for (var i in readySelected) {
orderReady.remove(i); orderReady.remove(i);
} }
...@@ -52,7 +47,7 @@ class _MainPageState extends State<MainPage> { ...@@ -52,7 +47,7 @@ class _MainPageState extends State<MainPage> {
orderQueue.addAll(readySelected); orderQueue.addAll(readySelected);
} }
void setToPickUp(List<Queue> readySelected) { void setToPickUp(List<OrderQueue> readySelected) {
for (var i in readySelected) { for (var i in readySelected) {
orderReady.remove(i); orderReady.remove(i);
} }
...@@ -66,6 +61,10 @@ class _MainPageState extends State<MainPage> { ...@@ -66,6 +61,10 @@ class _MainPageState extends State<MainPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
context.read<QueueBloc>().queueList();
context.read<ReadyBloc>().queueList();
print("Rebuild");
return MaterialApp( return MaterialApp(
home: Scaffold( home: Scaffold(
backgroundColor: Colors.white, backgroundColor: Colors.white,
...@@ -95,23 +94,31 @@ class _MainPageState extends State<MainPage> { ...@@ -95,23 +94,31 @@ class _MainPageState extends State<MainPage> {
child: MediaQuery.removePadding( child: MediaQuery.removePadding(
context: context, context: context,
removeTop: true, removeTop: true,
child: GridView.builder( child: BlocBuilder<QueueBloc, List<dynamic>>(
builder: (context, list) {
List<dynamic> orderQueue = [];
orderQueue = list
.where((i) => (i.status == "In Queue"))
.toList();
return GridView.builder(
itemCount: orderQueue.length,
gridDelegate: gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount( const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2, crossAxisCount: 2,
crossAxisSpacing: 10, crossAxisSpacing: 10,
mainAxisSpacing: 5, mainAxisSpacing: 5,
childAspectRatio: 2), childAspectRatio: 2),
itemBuilder: (context, index) { itemBuilder: (BuildContext context, int index) {
var thisQueue = orderQueue[index];
return Material( return Material(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
child: InkWell( child: InkWell(
onTap: () { onTap: () {
setState(() { setState(() {
if (queueSelected.contains(queueItem)) { if (queueSelected.contains(thisQueue)) {
queueSelected.remove(queueItem); queueSelected.remove(thisQueue);
} else { } else {
queueSelected.add(queueItem); queueSelected.add(thisQueue);
} }
print(queueSelected.toString()); print(queueSelected.toString());
...@@ -126,12 +133,12 @@ class _MainPageState extends State<MainPage> { ...@@ -126,12 +133,12 @@ class _MainPageState extends State<MainPage> {
onTap: () {}, onTap: () {},
child: Center( child: Center(
child: Text( child: Text(
queueSelected.contains(queueItem) queueSelected.contains(thisQueue)
? "Pesanan " + ? "Pesanan " +
queueItem.queue_number + thisQueue.queue_number +
" ✅" " ✅"
: "Pesanan " + : "Pesanan " +
queueItem.queue_number, thisQueue.queue_number,
style: TextStyle(fontSize: 20), style: TextStyle(fontSize: 20),
), ),
), ),
...@@ -140,6 +147,8 @@ class _MainPageState extends State<MainPage> { ...@@ -140,6 +147,8 @@ class _MainPageState extends State<MainPage> {
), ),
); );
}, },
);
},
), ),
), ),
), ),
...@@ -247,26 +256,32 @@ class _MainPageState extends State<MainPage> { ...@@ -247,26 +256,32 @@ class _MainPageState extends State<MainPage> {
child: MediaQuery.removePadding( child: MediaQuery.removePadding(
context: context, context: context,
removeTop: true, removeTop: true,
child: GridView( child: BlocBuilder<ReadyBloc, List<dynamic>>(
builder: (context, list) {
List<dynamic> orderReady = [];
orderReady =
list.where((i) => (i.status == "Ready")).toList();
return GridView.builder(
itemCount: orderReady.length,
gridDelegate: gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount( const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2, crossAxisCount: 2,
crossAxisSpacing: 10, crossAxisSpacing: 10,
mainAxisSpacing: 5, mainAxisSpacing: 5,
childAspectRatio: 2), childAspectRatio: 2),
children: orderReady.map((readyItem) { itemBuilder: (BuildContext context, int index) {
return Material( return Material(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
child: InkWell( child: InkWell(
onTap: () { onTap: () {
setState(() { setState(() {
if (readySelected.contains(readyItem)) { // if (readySelected.contains(readyItem)) {
readySelected.remove(readyItem); // readySelected.remove(readyItem);
} else { // } else {
readySelected.add(readyItem); // readySelected.add(readyItem);
} // }
print(readySelected.toString()); // print(readySelected.toString());
}); });
}, },
child: Card( child: Card(
...@@ -276,17 +291,21 @@ class _MainPageState extends State<MainPage> { ...@@ -276,17 +291,21 @@ class _MainPageState extends State<MainPage> {
), ),
child: Center( child: Center(
child: Text( child: Text(
readySelected.contains(readyItem) readySelected.contains(orderReady)
? "Pesanan " + readyItem.nomor + " ✅" ? "Pesanan " +
: "Pesanan " + readyItem.nomor, orderReady[index].queue_number +
" ✅"
: "Pesanan " +
orderReady[index].queue_number,
style: TextStyle(fontSize: 20), style: TextStyle(fontSize: 20),
), ),
), ),
), ),
), ),
); );
}).toList(), },
), );
}),
), ),
), ),
Row( Row(
...@@ -361,7 +380,6 @@ class _MainPageState extends State<MainPage> { ...@@ -361,7 +380,6 @@ class _MainPageState extends State<MainPage> {
], ],
), ),
), ),
debugShowCheckedModeBanner: false,
); );
} }
} }
class OrderQueue { class OrderQueue {
final String id; final String id;
// ignore: non_constant_identifier_names
final String queue_number; final String queue_number;
final String status; final String status;
OrderQueue( OrderQueue(
// ignore: non_constant_identifier_names {required this.id, required this.queue_number, required this.status});
{required this.id,
required this.queue_number,
required this.status});
factory OrderQueue.createOrderQueue(Map<String, dynamic> json) { factory OrderQueue.createOrderQueue(Map<String, dynamic> json) {
return OrderQueue( return OrderQueue(
......
...@@ -130,6 +130,13 @@ packages: ...@@ -130,6 +130,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.7.0" version: "1.7.0"
multi_select_flutter:
dependency: "direct main"
description:
name: multi_select_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.0"
nested: nested:
dependency: transitive dependency: transitive
description: description:
......
...@@ -32,6 +32,7 @@ dependencies: ...@@ -32,6 +32,7 @@ dependencies:
sdk: flutter sdk: flutter
flutter_bloc: ^8.0.1 flutter_bloc: ^8.0.1
http: ^0.13.4 http: ^0.13.4
multi_select_flutter: ^4.0.0
dev_dependencies: dev_dependencies:
......
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