Commit a9203a16 authored by valdi's avatar valdi

fungsi

parent 7448f38f
// import 'dart:collection'; 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/models/queue.dart';
// class QueueApi { import 'package:flutter/material.dart';
// String id, queue_number, status;
// QueueApi({required this.id, required this.queue_number, required this.status}); class ApiQueue {
// } final String id;
final String queue_number;
// // List<Queue> Queues = [ final String status;
// // Queue(id: '1', nomor: '1', status: 'ready'),
// // Queue(id: '2', nomor: '122', status: 'ready'), ApiQueue(this.id, this.queue_number, this.status);
// // Queue(id: '3', nomor: '133', status: 'queue'),
// // Queue(id: '4', nomor: '144', status: 'ready'), factory ApiQueue.createQueue(Map<String, dynamic> json) {
// // Queue(id: '5', nomor: '155', status: 'ready'), return ApiQueue(
// // Queue(id: '6', nomor: '166', status: 'queue'), json['id'].toString(), json['queue_number'].toString(), json['status']);
// // ]; }
static Future<List<OrderQueue>> getQueue() async {
// factory QueueApi.createQueue(Map<String, dynamic> json) { String apiUrl = "http://192.168.2.142:8000/api/getqueue";
// return Queue(json['id'].toString(), json['queue_number'], json['status']); List<OrderQueue> queues = [];
// } try {
var apiResult = await http.get(Uri.parse(apiUrl));
// static Future<List<QueueApi>> GetQueue() async { var jsonObject = jsonDecode(apiResult.body);
// String apiUrl = "http://192.168.2.142:8000/api/getqueue"; List<dynamic> listQueue = (jsonObject as Map<dynamic, dynamic>)['data'];
// var apiResult = await http.get(Uri.parse(apiUrl)); for (int i = 0; i < listQueue.length; i++) {
// var jsonObject = jsonDecode(apiResult.body); queues.add(OrderQueue.createOrderQueue(listQueue[i]));
// List<dynamic> listQueue = (jsonObject as Map<String, dynamic>)['results']; }
// ignore: empty_catches
// List<QueueApi> queueItem = []; } catch (e) {}
// for (int i = 0; i < listQueue.length; i++)
// queueItem.add(QueueApi.createQueue(listQueue[i])); return queues;
}
// return queueItem; }
// }
\ No newline at end of file
import 'package:bloc/bloc.dart';
import 'package:manager_queue/api.dart';
import 'package:manager_queue/models/queue.dart';
class QueueBloc extends Cubit<List<OrderQueue>> {
QueueBloc() : 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'),
// ];
// QueueBloc() : super(Future.empty);
void queueList() {
getData().then((value) {
// print(value);
emit(value);
});
}
}
import 'dart:collection'; import 'dart:collection';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:manager_queue/data.dart'; // import 'package:manager_queue/data.dart';
import 'package:manager_queue/api.dart';
import 'package:manager_queue/bloc/queue_bloc.dart';
import 'package:manager_queue/models/queue.dart';
class MainPage extends StatefulWidget { class MainPage extends StatefulWidget {
@override @override
...@@ -10,25 +13,57 @@ class MainPage extends StatefulWidget { ...@@ -10,25 +13,57 @@ class MainPage extends StatefulWidget {
class _MainPageState extends State<MainPage> { class _MainPageState extends State<MainPage> {
// var queue = ['1', '4', '5']; // var queue = ['1', '4', '5'];
List<Queue> orderQueue = []; List<dynamic> orderQueue = [];
List<Queue> orderReady = []; List<dynamic> orderReady = [];
var queueSelected = []; List<Queue> queueSelected = [];
List<Queue> readySelected = [];
List<Queue> pickUp = [];
List<dynamic> orderQueueList = [];
void getQueue() async {
var apiQueue = await ApiQueue.getQueue();
setState(() {
orderQueue = apiQueue;
});
}
@override @override
void initState() { void initState() {
orderQueue = Queues.where((i) => (i.status == 'queue')).toList(); orderQueueList = orderQueue.where((i) => (i.status == 'In Queue')).toList();
orderReady = Queues.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> _queue) { void setToReady(List<Queue> queueSelected) {
orderQueue.remove(_queue); for (var i in queueSelected) {
orderQueue.remove(i);
}
orderReady.addAll(queueSelected);
}
void setToQueue(List<Queue> readySelected) {
for (var i in readySelected) {
orderReady.remove(i);
}
orderReady.addAll(_queue); orderQueue.addAll(readySelected);
} }
void setToPickUp(List<Queue> readySelected) {
for (var i in readySelected) {
orderReady.remove(i);
}
pickUp.addAll(readySelected);
}
// void queueSelectItem(List<Queue> _queueselect) {
// }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MaterialApp( return MaterialApp(
...@@ -60,14 +95,14 @@ class _MainPageState extends State<MainPage> { ...@@ -60,14 +95,14 @@ class _MainPageState extends State<MainPage> {
child: MediaQuery.removePadding( child: MediaQuery.removePadding(
context: context, context: context,
removeTop: true, removeTop: true,
child: GridView( child: GridView.builder(
gridDelegate: gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount( const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2, crossAxisCount: 2,
crossAxisSpacing: 10, crossAxisSpacing: 10,
mainAxisSpacing: 5, mainAxisSpacing: 5,
childAspectRatio: 2), childAspectRatio: 2),
children: orderQueue.map((queueItem) { itemBuilder: (context, index) {
return Material( return Material(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
child: InkWell( child: InkWell(
...@@ -93,9 +128,10 @@ class _MainPageState extends State<MainPage> { ...@@ -93,9 +128,10 @@ class _MainPageState extends State<MainPage> {
child: Text( child: Text(
queueSelected.contains(queueItem) queueSelected.contains(queueItem)
? "Pesanan " + ? "Pesanan " +
queueItem.nomor + queueItem.queue_number +
" ✅" " ✅"
: "Pesanan " + queueItem.nomor, : "Pesanan " +
queueItem.queue_number,
style: TextStyle(fontSize: 20), style: TextStyle(fontSize: 20),
), ),
), ),
...@@ -103,7 +139,7 @@ class _MainPageState extends State<MainPage> { ...@@ -103,7 +139,7 @@ class _MainPageState extends State<MainPage> {
), ),
), ),
); );
}).toList(), },
), ),
), ),
), ),
...@@ -112,12 +148,23 @@ class _MainPageState extends State<MainPage> { ...@@ -112,12 +148,23 @@ class _MainPageState extends State<MainPage> {
height: 100, height: 100,
color: Colors.lightBlue, color: Colors.lightBlue,
alignment: Alignment.center, alignment: Alignment.center,
child: Material(
color: Colors.lightBlue,
child: InkWell( child: InkWell(
onTap: () {
setState(() {
if (orderReady.contains(queueSelected)) {
queueSelected.remove(queueSelected);
} else {
orderReady.addAll(queueSelected);
}
// print(queueSelected.toString());
});
},
splashColor: Colors.amber, splashColor: Colors.amber,
child: GestureDetector( child: GestureDetector(
onTap: () => setToReady( onTap: () => setToReady(queueSelected),
orderReady,
),
child: Text( child: Text(
"SET TO READY", "SET TO READY",
style: TextStyle( style: TextStyle(
...@@ -126,6 +173,7 @@ class _MainPageState extends State<MainPage> { ...@@ -126,6 +173,7 @@ class _MainPageState extends State<MainPage> {
), ),
), ),
), ),
),
], ],
), ),
), ),
...@@ -207,17 +255,35 @@ class _MainPageState extends State<MainPage> { ...@@ -207,17 +255,35 @@ class _MainPageState extends State<MainPage> {
mainAxisSpacing: 5, mainAxisSpacing: 5,
childAspectRatio: 2), childAspectRatio: 2),
children: orderReady.map((readyItem) { children: orderReady.map((readyItem) {
return Card( return Material(
borderRadius: BorderRadius.circular(10),
child: InkWell(
onTap: () {
setState(() {
if (readySelected.contains(readyItem)) {
readySelected.remove(readyItem);
} else {
readySelected.add(readyItem);
}
print(readySelected.toString());
});
},
child: Card(
color: Colors.black38, color: Colors.black38,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
), ),
child: Center( child: Center(
child: Text( child: Text(
"Pesanan " + readyItem.nomor, readySelected.contains(readyItem)
? "Pesanan " + readyItem.nomor + " ✅"
: "Pesanan " + readyItem.nomor,
style: TextStyle(fontSize: 20), style: TextStyle(fontSize: 20),
), ),
), ),
),
),
); );
}).toList(), }).toList(),
), ),
...@@ -231,10 +297,28 @@ class _MainPageState extends State<MainPage> { ...@@ -231,10 +297,28 @@ class _MainPageState extends State<MainPage> {
height: 100, height: 100,
color: Colors.green, color: Colors.green,
alignment: Alignment.center, alignment: Alignment.center,
child: InkWell(
onTap: () {
setState(() {
if (orderQueue.contains(readySelected)) {
readySelected.remove(readySelected);
} else {
orderQueue.addAll(readySelected);
}
// print(queueSelected.toString());
});
},
splashColor: Colors.amber,
child: GestureDetector(
onTap: () => setToQueue(readySelected),
child: Text( child: Text(
"SET TO QUEUE", "SET TO QUEUE",
style: TextStyle( style: TextStyle(
fontSize: 30, fontWeight: FontWeight.w700), fontSize: 30,
fontWeight: FontWeight.w700),
),
),
), ),
), ),
), ),
...@@ -244,10 +328,27 @@ class _MainPageState extends State<MainPage> { ...@@ -244,10 +328,27 @@ class _MainPageState extends State<MainPage> {
height: 100, height: 100,
color: Colors.black26, color: Colors.black26,
alignment: Alignment.center, alignment: Alignment.center,
child: InkWell(
onTap: () {
setState(() {
if (pickUp.contains(readySelected)) {
readySelected.remove(readySelected);
} else {
pickUp.addAll(readySelected);
}
// print(queueSelected.toString());
});
},
child: GestureDetector(
onTap: () => setToPickUp(readySelected),
child: Text( child: Text(
"PICK UP", "PICK UP",
style: TextStyle( style: TextStyle(
fontSize: 30, fontWeight: FontWeight.w700), fontSize: 30,
fontWeight: FontWeight.w700),
),
),
), ),
), ),
), ),
......
class OrderQueue {
final String id;
// ignore: non_constant_identifier_names
final String queue_number;
final String status;
OrderQueue(
// ignore: non_constant_identifier_names
{required this.id,
required this.queue_number,
required this.status});
factory OrderQueue.createOrderQueue(Map<String, dynamic> json) {
return OrderQueue(
id: json['id'].toString(),
queue_number: json['queue_number'].toString(),
status: json['status'].toString(),
);
}
}
// import 'package:flutter/material.dart';
// import 'package:flutter_bloc/flutter_bloc.dart';
// import 'package:manager_queue/bloc/queue_bloc.dart';
// import 'package:manager_queue/data.dart';
// class OrderQueue extends StatefulWidget {
// const OrderQueue({Key? key}) : super(key: key);
// @override
// _OrderQueueState createState() => _OrderQueueState();
// }
// class _OrderQueueState extends State<OrderQueue> {
// List<Queue> orderQueue = [];
// List<Queue> orderReady = [];
// List<Queue> queueSelected = [];
// @override
// void initState() {
// orderQueue = Queues.where((i) => (i.status == 'queue')).toList();
// orderReady = Queues.where((i) => (i.status == 'ready')).toList();
// // TODO: implement initState
// super.initState();
// }
// void setToReady(List<Queue> queueSelected) {
// for (var i in queueSelected) {
// orderQueue.remove(i);
// }
// orderReady.addAll(queueSelected);
// }
// @override
// Widget build(BuildContext context) {
// return Container(
// width: 700,
// height: 700,
// child: MediaQuery.removePadding(
// context: context,
// removeTop: true,
// child: GridView(
// gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
// crossAxisCount: 2,
// crossAxisSpacing: 10,
// mainAxisSpacing: 5,
// childAspectRatio: 2),
// children: orderQueue.map((queueItem) {
// return Material(
// borderRadius: BorderRadius.circular(10),
// child: InkWell(
// onTap: () {
// setState(() {
// if (queueSelected.contains(queueItem)) {
// queueSelected.remove(queueItem);
// } else {
// queueSelected.add(queueItem);
// }
// print(queueSelected.toString());
// });
// },
// child: Card(
// color: Colors.black38,
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(10),
// ),
// child: GestureDetector(
// onTap: () {},
// child: Center(
// child: Text(
// queueSelected.contains(queueItem)
// ? "Pesanan " + queueItem.nomor + " ✅"
// : "Pesanan " + queueItem.nomor,
// style: TextStyle(fontSize: 20),
// ),
// ),
// ),
// ),
// ),
// );
// }).toList(),
// ),
// ),
// );
// }
// }
// class OrderReady extends StatefulWidget {
// const OrderReady({Key? key}) : super(key: key);
// @override
// _OrderReadyState createState() => _OrderReadyState();
// }
// class _OrderReadyState extends State<OrderReady> {
// @override
// Widget build(BuildContext context) {
// return Container();
// }
// }
...@@ -8,6 +8,13 @@ packages: ...@@ -8,6 +8,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.8.2" version: "2.8.2"
bloc:
dependency: transitive
description:
name: bloc
url: "https://pub.dartlang.org"
source: hosted
version: "8.0.2"
boolean_selector: boolean_selector:
dependency: transitive dependency: transitive
description: description:
...@@ -62,6 +69,13 @@ packages: ...@@ -62,6 +69,13 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_bloc:
dependency: "direct main"
description:
name: flutter_bloc
url: "https://pub.dartlang.org"
source: hosted
version: "8.0.1"
flutter_lints: flutter_lints:
dependency: "direct dev" dependency: "direct dev"
description: description:
...@@ -116,6 +130,13 @@ packages: ...@@ -116,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"
nested:
dependency: transitive
description:
name: nested
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
path: path:
dependency: transitive dependency: transitive
description: description:
...@@ -123,6 +144,13 @@ packages: ...@@ -123,6 +144,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.8.0" version: "1.8.0"
provider:
dependency: transitive
description:
name: provider
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.2"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
...@@ -186,3 +214,4 @@ packages: ...@@ -186,3 +214,4 @@ packages:
version: "2.1.1" version: "2.1.1"
sdks: sdks:
dart: ">=2.16.1 <3.0.0" dart: ">=2.16.1 <3.0.0"
flutter: ">=1.16.0"
...@@ -27,18 +27,13 @@ environment: ...@@ -27,18 +27,13 @@ environment:
# the latest version available on pub.dev. To see which dependencies have newer # the latest version available on pub.dev. To see which dependencies have newer
# versions available, run `flutter pub outdated`. # versions available, run `flutter pub outdated`.
dependencies: dependencies:
cupertino_icons: ^1.0.2
flutter: flutter:
sdk: flutter sdk: flutter
flutter_bloc: ^8.0.1
http: ^0.13.4 http: ^0.13.4
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
dev_dependencies: dev_dependencies:
flutter_test:
sdk: flutter
# The "flutter_lints" package below contains a set of recommended lints to # The "flutter_lints" package below contains a set of recommended lints to
# encourage good coding practices. The lint set provided by the package is # encourage good coding practices. The lint set provided by the package is
...@@ -46,10 +41,11 @@ dev_dependencies: ...@@ -46,10 +41,11 @@ dev_dependencies:
# package. See that file for information about deactivating specific lint # package. See that file for information about deactivating specific lint
# rules and activating additional ones. # rules and activating additional ones.
flutter_lints: ^1.0.0 flutter_lints: ^1.0.0
flutter_test:
sdk: flutter
# For information on the generic Dart part of this file, see the # For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec # following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter. # The following section is specific to Flutter.
flutter: flutter:
...@@ -57,18 +53,14 @@ flutter: ...@@ -57,18 +53,14 @@ flutter:
# included with your application, so that you can use the icons in # included with your application, so that you can use the icons in
# the material Icons class. # the material Icons class.
uses-material-design: true uses-material-design: true
# To add assets to your application, add an assets section, like this: # To add assets to your application, add an assets section, like this:
# assets: # assets:
# - images/a_dot_burr.jpeg # - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg # - images/a_dot_ham.jpeg
# An image asset can refer to one or more resolution-specific "variants", see # An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware. # https://flutter.dev/assets-and-images/#resolution-aware.
# For details regarding adding assets from package dependencies, see # For details regarding adding assets from package dependencies, see
# https://flutter.dev/assets-and-images/#from-packages # https://flutter.dev/assets-and-images/#from-packages
# To add custom fonts to your application, add a fonts section here, # To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a # in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a # "family" key with the font family name, and a "fonts" key with a
......
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