Skip to content

Commit

Permalink
Fix queue
Browse files Browse the repository at this point in the history
  • Loading branch information
PlugFox committed Aug 12, 2023
1 parent 09d33ab commit 77366f3
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 91 deletions.
156 changes: 76 additions & 80 deletions example/lib/src/feature/chat/widget/chat_room.dart
Original file line number Diff line number Diff line change
Expand Up @@ -54,102 +54,98 @@ class _ChatRoomState extends State<ChatRoom> {
}

@override
Widget build(BuildContext context) => Stack(
Widget build(BuildContext context) => Column(
children: <Widget>[
Positioned.fill(
Expanded(
child: ListView.builder(
scrollDirection: Axis.vertical,
padding: const EdgeInsets.only(
top: 16,
bottom: 84,
),
padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 8),
reverse: true,
itemCount: 1000,
itemBuilder: (context, index) => ListTile(
title: Text('Item $index'),
),
),
),
Align(
alignment: Alignment.bottomCenter,
child: Padding(
padding: const EdgeInsets.only(
left: 8,
right: 8,
bottom: 16,
),
child: SizedBox(
width: 480,
height: 48,
child: StateConsumer<ChatConnectionState>(
controller: _connectionController,
builder: (context, connectionState, _) =>
StateConsumer<ChatMessagesState>(
controller: _messagesController,
listener: (context, previous, current) {
switch (current) {
case ChatMessagesState$Successful state:
_textEditingController.clear();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(state.message),
),
);
case ChatMessagesState$Error state:
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(state.message),
backgroundColor: Colors.red,
const Divider(height: 1, thickness: .5),
SizedBox(
height: 64,
child: ColoredBox(
color: Colors.grey.withOpacity(0.2),
child: Column(
children: <Widget>[
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: StateConsumer<ChatConnectionState>(
controller: _connectionController,
builder: (context, connectionState, _) =>
StateConsumer<ChatMessagesState>(
controller: _messagesController,
listener: (context, previous, current) {
switch (current) {
case ChatMessagesState$Successful _:
_textEditingController.clear();
case ChatMessagesState$Error state:
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(state.message),
backgroundColor: Colors.red,
),
);
default:
break;
}
},
builder: (context, messagesState, child) => Row(
children: <Widget>[
Expanded(
child: TextField(
controller: _textEditingController,
enabled: connectionState.isConnected,
decoration: const InputDecoration(
border: InputBorder.none,
hintText: 'Write a message...',
),
),
),
);
default:
break;
}
},
builder: (context, messagesState, child) => Row(
children: <Widget>[
Expanded(
child: TextField(
controller: _textEditingController,
enabled: connectionState.isConnected,
decoration: const InputDecoration(
border: OutlineInputBorder(),
hintText: 'Enter a search term',
ValueListenableBuilder<TextEditingValue>(
valueListenable: _textEditingController,
builder: (context, value, _) {
final enabled = connectionState.isConnected &&
messagesState.isIdling &&
value.text.isNotEmpty;
return IconButton(
icon: AnimatedSwitcher(
duration:
const Duration(milliseconds: 350),
child: switch (connectionState) {
ChatConnectionState$Connecting _ =>
const CircularProgressIndicator(),
ChatConnectionState$Connected _ =>
const Icon(Icons.send),
ChatConnectionState$Disconnected _ =>
const Icon(Icons.send_outlined),
},
),
onPressed: enabled
? () => _messagesController.sendMessage(
widget.user,
'Hello World',
)
: null,
);
},
),
),
],
),
ValueListenableBuilder<TextEditingValue>(
valueListenable: _textEditingController,
builder: (context, value, _) {
final enabled = connectionState.isConnected &&
messagesState.isIdling &&
value.text.isNotEmpty;
return IconButton(
icon: AnimatedSwitcher(
duration: const Duration(milliseconds: 350),
child: switch (connectionState) {
ChatConnectionState$Connecting _ =>
const CircularProgressIndicator(),
ChatConnectionState$Connected _ =>
const Icon(Icons.send),
ChatConnectionState$Disconnected _ =>
const Icon(Icons.send_outlined),
},
),
onPressed: enabled
? () => _messagesController.sendMessage(
widget.user,
'Hello World',
)
: null,
);
},
),
],
),
),
),
),
)),
],
),
),
),
],
);
Expand Down
6 changes: 3 additions & 3 deletions lib/src/client/spinify.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ final class Spinify extends SpinifyBase
SpinifyPresenceMixin,
SpinifyHistoryMixin,
SpinifyRPCMixin,
/* SpinifyQueueMixin, */
SpinifyQueueMixin,
SpinifyMetricsMixin {
/// {@macro spinify}
Spinify([SpinifyConfig? config]) : super(config ?? SpinifyConfig.byDefault());
Expand Down Expand Up @@ -800,8 +800,8 @@ base mixin SpinifyQueueMixin on SpinifyBase {
Future<void> publish(String channel, List<int> data) =>
_eventQueue.push<void>('publish', () => super.publish(channel, data));

@override
FutureOr<void> ready() => _eventQueue.push<void>('ready', super.ready);
/* @override
FutureOr<void> ready() => _eventQueue.push<void>('ready', super.ready); */

@override
Future<SpinifyPresence> presence(String channel) =>
Expand Down
9 changes: 2 additions & 7 deletions lib/src/subscription/client_subscription_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ final class SpinifyClientSubscriptionImpl extends SpinifyClientSubscriptionBase
SpinifyClientSubscriptionSubscribeMixin,
SpinifyClientSubscriptionPublishingMixin,
SpinifyClientSubscriptionHistoryMixin,
SpinifyClientSubscriptionPresenceMixin /* SpinifyClientSubscriptionQueueMixin */ {
SpinifyClientSubscriptionPresenceMixin,
SpinifyClientSubscriptionQueueMixin {
/// {@nodoc}
SpinifyClientSubscriptionImpl({
required super.channel,
Expand Down Expand Up @@ -563,12 +564,6 @@ base mixin SpinifyClientSubscriptionQueueMixin
/// {@nodoc}
final SpinifyEventQueue _eventQueue = SpinifyEventQueue();

@override
FutureOr<void> ready() => _eventQueue.push<void>(
'ready',
super.ready,
);

@override
Future<void> subscribe() => _eventQueue.push<void>(
'subscribe',
Expand Down
3 changes: 2 additions & 1 deletion lib/src/subscription/server_subscription_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ final class SpinifyServerSubscriptionImpl extends SpinifyServerSubscriptionBase
SpinifyServerSubscriptionReadyMixin,
SpinifyServerSubscriptionPublishingMixin,
SpinifyServerSubscriptionHistoryMixin,
SpinifyServerSubscriptionPresenceMixin /* SpinifyServerSubscriptionQueueMixin */ {
SpinifyServerSubscriptionPresenceMixin,
SpinifyServerSubscriptionQueueMixin {
/// {@nodoc}
SpinifyServerSubscriptionImpl({
required super.channel,
Expand Down

0 comments on commit 77366f3

Please sign in to comment.