Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
Q
queue_flutter
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ernanda
queue_flutter
Commits
3814b22d
Commit
3814b22d
authored
Feb 25, 2022
by
valdi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
success multiple select
parent
3b58ecc8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
192 additions
and
80 deletions
+192
-80
queue_bloc.dart
lib/bloc/queue_bloc.dart
+9
-9
queue_cubit.dart
lib/cubit/queue_cubit.dart
+29
-0
queue_state.dart
lib/cubit/queue_state.dart
+30
-0
main.dart
lib/main.dart
+2
-0
main_page.dart
lib/main_page.dart
+108
-64
queue.dart
lib/models/queue.dart
+6
-1
pubspec.lock
pubspec.lock
+7
-0
pubspec.yaml
pubspec.yaml
+1
-6
No files found.
lib/bloc/queue_bloc.dart
View file @
3814b22d
...
...
@@ -7,17 +7,9 @@ class QueueBloc extends Cubit<List<OrderQueue>> {
Future
<
List
<
OrderQueue
>>
getData
()
async
{
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);
void
queueList
()
{
...
...
@@ -26,4 +18,12 @@ class QueueBloc extends Cubit<List<OrderQueue>> {
emit
(
value
);
});
}
onPressed
(
OrderQueue
thisQueue
)
{
var
index
=
state
.
indexOf
(
thisQueue
);
thisQueue
.
isSelected
=
!
thisQueue
.
isSelected
;
state
[
index
]
=
thisQueue
;
print
(
'berubah'
);
emit
(
state
);
}
}
lib/cubit/queue_cubit.dart
0 → 100644
View file @
3814b22d
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
));
}
}
lib/cubit/queue_state.dart
0 → 100644
View file @
3814b22d
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
];
}
lib/main.dart
View file @
3814b22d
...
...
@@ -2,6 +2,7 @@ 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/cubit/queue_cubit.dart'
;
import
'package:manager_queue/main_page.dart'
;
import
'bloc/selected_queue_bloc.dart'
;
...
...
@@ -20,6 +21,7 @@ class MyApp extends StatelessWidget {
BlocProvider
(
create:
(
_
)
=>
QueueBloc
()),
BlocProvider
(
create:
(
_
)
=>
ReadyBloc
()),
BlocProvider
(
create:
(
_
)
=>
SelectedQueueBloc
()),
BlocProvider
(
create:
(
_
)
=>
QueueCubit
()),
],
child:
MainPage
()),
},
debugShowCheckedModeBanner:
false
,
...
...
lib/main_page.dart
View file @
3814b22d
...
...
@@ -3,12 +3,13 @@ import 'dart:collection';
import
'package:flutter/material.dart'
;
import
'package:flutter_bloc/flutter_bloc.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/ready_bloc.dart'
;
import
'package:manager_queue/bloc/selected_queue_bloc.dart'
;
import
'package:manager_queue/models/queue.dart'
;
import
'cubit/queue_cubit.dart'
;
class
MainPage
extends
StatefulWidget
{
@override
_MainPageState
createState
()
=>
_MainPageState
();
...
...
@@ -62,8 +63,8 @@ class _MainPageState extends State<MainPage> {
@override
Widget
build
(
BuildContext
context
)
{
context
.
read
<
Queue
Bloc
>().
queueList
();
context
.
read
<
ReadyBloc
>().
queueList
();
context
.
read
<
Queue
Cubit
>().
getData
();
//
context.read<ReadyBloc>().queueList();
print
(
"Rebuild"
);
return
MaterialApp
(
...
...
@@ -96,67 +97,110 @@ class _MainPageState extends State<MainPage> {
child:
MediaQuery
.
removePadding
(
context:
context
,
removeTop:
true
,
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:
const
SliverGridDelegateWithFixedCrossAxisCount
(
crossAxisCount:
2
,
crossAxisSpacing:
10
,
mainAxisSpacing:
5
,
childAspectRatio:
2
),
itemBuilder:
(
BuildContext
context
,
int
index
)
{
var
thisQueue
=
orderQueue
[
index
];
return
Material
(
borderRadius:
BorderRadius
.
circular
(
10
),
child:
InkWell
(
onTap:
()
{
context
.
read
<
SelectedQueueBloc
>()
.
onPressed
(
thisQueue
);
// print(context
// .read<SelectedQueueBloc>()
// .state
// .contains(thisQueue)
// ? 'ADA LOH'
// : 'GAK ADA LOH');
},
child:
Card
(
color:
Colors
.
black38
,
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
10
),
),
child:
Center
(
child:
BlocBuilder
<
SelectedQueueBloc
,
List
<
OrderQueue
>>(
builder:
(
context
,
list
)
{
print
(
"--"
);
print
(
list
);
return
Text
(
context
.
read
<
SelectedQueueBloc
>()
.
state
.
contains
(
thisQueue
)
?
"Pesanan "
+
thisQueue
.
queue_number
+
" ✅ "
:
"Pesanan "
+
thisQueue
.
queue_number
,
style:
TextStyle
(
fontSize:
20
),
);
},
),
),
child:
BlocConsumer
<
QueueCubit
,
QueueState
>(
listener:
(
context
,
state
)
{
print
(
'listener'
);
print
(
state
);
},
builder:
(
context
,
state
)
{
if
(
state
is
QueueLoading
)
{
return
CircularProgressIndicator
();
}
else
if
(
state
is
QueueLoaded
)
{
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:
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
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
();
}
},
),
),
...
...
lib/models/queue.dart
View file @
3814b22d
...
...
@@ -2,15 +2,20 @@ class OrderQueue {
final
String
id
;
final
String
queue_number
;
final
String
status
;
bool
isSelected
=
false
;
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
)
{
return
OrderQueue
(
id:
json
[
'id'
].
toString
(),
queue_number:
json
[
'queue_number'
].
toString
(),
status:
json
[
'status'
].
toString
(),
isSelected:
false
,
);
}
}
pubspec.lock
View file @
3814b22d
...
...
@@ -57,6 +57,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
equatable:
dependency: "direct main"
description:
name: equatable
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
fake_async:
dependency: transitive
description:
...
...
pubspec.yaml
View file @
3814b22d
...
...
@@ -28,6 +28,7 @@ environment:
# versions available, run `flutter pub outdated`.
dependencies
:
cupertino_icons
:
^1.0.2
equatable
:
^2.0.3
flutter
:
sdk
:
flutter
flutter_bloc
:
^8.0.1
...
...
@@ -35,12 +36,6 @@ dependencies:
multi_select_flutter
:
^4.0.0
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_test
:
sdk
:
flutter
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment