Commit 3814b22d authored by valdi's avatar valdi

success multiple select

parent 3b58ecc8
...@@ -7,17 +7,9 @@ class QueueBloc extends Cubit<List<OrderQueue>> { ...@@ -7,17 +7,9 @@ class QueueBloc 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 == "In Queue")).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'),
// ];
// QueueBloc() : super(Future.empty); // QueueBloc() : super(Future.empty);
void queueList() { void queueList() {
...@@ -26,4 +18,12 @@ class QueueBloc extends Cubit<List<OrderQueue>> { ...@@ -26,4 +18,12 @@ class QueueBloc extends Cubit<List<OrderQueue>> {
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:equatable/equatable.dart';
import 'package:manager_queue/models/queue.dart';
import '../api.dart';
part 'queue_state.dart';
class QueueCubit extends Cubit<QueueState> {
QueueCubit() : super(QueueInitial());
Future<void> getData() async {
emit(QueueLoading());
Future.delayed(const Duration(milliseconds: 2000), () async {
var apiQueue = await ApiQueue.getQueue();
var data = apiQueue.where((i) => (i.status == "In Queue")).toList();
emit(QueueLoaded(data));
});
}
onPressed(List<OrderQueue> active, OrderQueue toUpdate) {
emit(QueueInitial());
var index = active.indexOf(toUpdate);
toUpdate.isSelected = !toUpdate.isSelected;
active[index] = toUpdate;
emit(QueueUpdated(active));
}
}
part of 'queue_cubit.dart';
abstract class QueueState extends Equatable {
const QueueState();
@override
List<Object> get props => [];
}
class QueueInitial extends QueueState {}
class QueueLoading extends QueueState {}
class QueueLoaded extends QueueState {
final List<OrderQueue> queues;
QueueLoaded(this.queues);
@override
List<Object> get props => [queues];
}
class QueueUpdated extends QueueState {
final List<OrderQueue> queues;
QueueUpdated(this.queues);
@override
List<Object> get props => [queues];
}
...@@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; ...@@ -2,6 +2,7 @@ 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/main_page.dart'; import 'package:manager_queue/main_page.dart';
import 'bloc/selected_queue_bloc.dart'; import 'bloc/selected_queue_bloc.dart';
...@@ -20,6 +21,7 @@ class MyApp extends StatelessWidget { ...@@ -20,6 +21,7 @@ class MyApp extends StatelessWidget {
BlocProvider(create: (_) => QueueBloc()), BlocProvider(create: (_) => QueueBloc()),
BlocProvider(create: (_) => ReadyBloc()), BlocProvider(create: (_) => ReadyBloc()),
BlocProvider(create: (_) => SelectedQueueBloc()), BlocProvider(create: (_) => SelectedQueueBloc()),
BlocProvider(create: (_) => QueueCubit()),
], child: MainPage()), ], child: MainPage()),
}, },
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
......
...@@ -3,12 +3,13 @@ import 'dart:collection'; ...@@ -3,12 +3,13 @@ import 'dart:collection';
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/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/bloc/ready_bloc.dart';
import 'package:manager_queue/bloc/selected_queue_bloc.dart';
import 'package:manager_queue/models/queue.dart'; import 'package:manager_queue/models/queue.dart';
import 'cubit/queue_cubit.dart';
class MainPage extends StatefulWidget { class MainPage extends StatefulWidget {
@override @override
_MainPageState createState() => _MainPageState(); _MainPageState createState() => _MainPageState();
...@@ -62,8 +63,8 @@ class _MainPageState extends State<MainPage> { ...@@ -62,8 +63,8 @@ class _MainPageState extends State<MainPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
context.read<QueueBloc>().queueList(); context.read<QueueCubit>().getData();
context.read<ReadyBloc>().queueList(); // context.read<ReadyBloc>().queueList();
print("Rebuild"); print("Rebuild");
return MaterialApp( return MaterialApp(
...@@ -96,14 +97,17 @@ class _MainPageState extends State<MainPage> { ...@@ -96,14 +97,17 @@ class _MainPageState extends State<MainPage> {
child: MediaQuery.removePadding( child: MediaQuery.removePadding(
context: context, context: context,
removeTop: true, removeTop: true,
child: BlocBuilder<QueueBloc, List<dynamic>>( child: BlocConsumer<QueueCubit, QueueState>(
builder: (context, list) { listener: (context, state) {
List<dynamic> orderQueue = []; print('listener');
orderQueue = list print(state);
.where((i) => (i.status == "In Queue")) },
.toList(); builder: (context, state) {
if (state is QueueLoading) {
return CircularProgressIndicator();
} else if (state is QueueLoaded) {
return GridView.builder( return GridView.builder(
itemCount: orderQueue.length, itemCount: state.queues.length,
gridDelegate: gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount( const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2, crossAxisCount: 2,
...@@ -111,14 +115,14 @@ class _MainPageState extends State<MainPage> { ...@@ -111,14 +115,14 @@ class _MainPageState extends State<MainPage> {
mainAxisSpacing: 5, mainAxisSpacing: 5,
childAspectRatio: 2), childAspectRatio: 2),
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
var thisQueue = orderQueue[index]; var thisQueue = state.queues[index];
return Material( return Material(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
child: InkWell( child: InkWell(
onTap: () { onTap: () {
context context
.read<SelectedQueueBloc>() .read<QueueCubit>()
.onPressed(thisQueue); .onPressed(state.queues, thisQueue);
// print(context // print(context
// .read<SelectedQueueBloc>() // .read<SelectedQueueBloc>()
// .state // .state
...@@ -129,34 +133,74 @@ class _MainPageState extends State<MainPage> { ...@@ -129,34 +133,74 @@ class _MainPageState extends State<MainPage> {
child: Card( 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: BlocBuilder<SelectedQueueBloc, child: Text(
List<OrderQueue>>( thisQueue.isSelected
builder: (context, list) {
print("--");
print(list);
return Text(
context
.read<SelectedQueueBloc>()
.state
.contains(thisQueue)
? "Pesanan " + ? "Pesanan " +
thisQueue.queue_number + thisQueue.queue_number +
" ✅ " " ✅ "
: "Pesanan " + : "Pesanan " +
thisQueue.queue_number, thisQueue.queue_number,
style: TextStyle(fontSize: 20), style: TextStyle(fontSize: 20),
))),
),
); );
}, },
);
} else if (state is QueueUpdated) {
print('updated');
return GridView.builder(
itemCount: state.queues.length,
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 10,
mainAxisSpacing: 5,
childAspectRatio: 2),
itemBuilder: (BuildContext context, int index) {
var thisQueue = state.queues[index];
return Material(
borderRadius: BorderRadius.circular(10),
child: InkWell(
onTap: () {
context
.read<QueueCubit>()
.onPressed(state.queues, thisQueue);
// print(context
// .read<SelectedQueueBloc>()
// .state
// .contains(thisQueue)
// ? 'ADA LOH'
// : 'GAK ADA LOH');
},
child: Card(
color: thisQueue.isSelected
? Colors.blue
: Colors.black38,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(10),
), ),
), child: Center(
), child: Text(
thisQueue.isSelected
? "Pesanan " +
thisQueue.queue_number +
" ✅ "
: "Pesanan " +
thisQueue.queue_number,
style: TextStyle(fontSize: 20),
))),
), ),
); );
}, },
); );
} else {
return SizedBox();
}
}, },
), ),
), ),
......
...@@ -2,15 +2,20 @@ class OrderQueue { ...@@ -2,15 +2,20 @@ class OrderQueue {
final String id; final String id;
final String queue_number; final String queue_number;
final String status; final String status;
bool isSelected = false;
OrderQueue( OrderQueue(
{required this.id, required this.queue_number, required this.status}); {required this.id,
required this.queue_number,
required this.status,
required this.isSelected});
factory OrderQueue.createOrderQueue(Map<String, dynamic> json) { factory OrderQueue.createOrderQueue(Map<String, dynamic> json) {
return OrderQueue( return OrderQueue(
id: json['id'].toString(), id: json['id'].toString(),
queue_number: json['queue_number'].toString(), queue_number: json['queue_number'].toString(),
status: json['status'].toString(), status: json['status'].toString(),
isSelected: false,
); );
} }
} }
...@@ -57,6 +57,13 @@ packages: ...@@ -57,6 +57,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.4" version: "1.0.4"
equatable:
dependency: "direct main"
description:
name: equatable
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
......
...@@ -28,6 +28,7 @@ environment: ...@@ -28,6 +28,7 @@ environment:
# versions available, run `flutter pub outdated`. # versions available, run `flutter pub outdated`.
dependencies: dependencies:
cupertino_icons: ^1.0.2 cupertino_icons: ^1.0.2
equatable: ^2.0.3
flutter: flutter:
sdk: flutter sdk: flutter
flutter_bloc: ^8.0.1 flutter_bloc: ^8.0.1
...@@ -35,12 +36,6 @@ dependencies: ...@@ -35,12 +36,6 @@ dependencies:
multi_select_flutter: ^4.0.0 multi_select_flutter: ^4.0.0
dev_dependencies: dev_dependencies:
# The "flutter_lints" package below contains a set of recommended lints to
# encourage good coding practices. The lint set provided by the package is
# activated in the `analysis_options.yaml` file located at the root of your
# package. See that file for information about deactivating specific lint
# rules and activating additional ones.
flutter_lints: ^1.0.0 flutter_lints: ^1.0.0
flutter_test: flutter_test:
sdk: flutter sdk: flutter
......
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