Skip to content

Commit

Permalink
Stable release and move bloc related APIs to comms package (#61)
Browse files Browse the repository at this point in the history
* Stable release and move bloc related APIs to comms package

- update changelog and pubspec version

- bump sdk constraint, bump packages, remove uuid package

- add README

- remove bloc related APIs which were moved to comms package

Closes #59

* Update flutter_comms workflows

* Update pubspec flutter constraint

* Set publish dart sdk to 3.0.6
  • Loading branch information
lewandowski-jan authored Jul 21, 2023
1 parent 0049c21 commit 0f07e1a
Show file tree
Hide file tree
Showing 13 changed files with 96 additions and 215 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/comms-publish.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
- name: Install Dart
uses: dart-lang/setup-dart@v1
with:
sdk: 3.0.0
sdk: 3.0.6

- name: Install mobile-tools
uses: actions/checkout@v3
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/flutter_comms-prepare.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
strategy:
fail-fast: false
matrix:
flutter-version: ['3.3.x', '3.7.x', '3.10.x']
flutter-version: ['3.10.x']

defaults:
run:
Expand All @@ -45,4 +45,4 @@ jobs:
run: flutter test

- name: flutter format
run: flutter format --set-exit-if-changed .
run: dart format --set-exit-if-changed .
2 changes: 1 addition & 1 deletion .github/workflows/flutter_comms-publish.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
- name: Install Dart
uses: dart-lang/setup-dart@v1
with:
sdk: 2.17.0
sdk: 3.0.6

- name: Install mobile-tools
uses: actions/checkout@v3
Expand Down
4 changes: 4 additions & 0 deletions packages/flutter_comms/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 1.0.0

- Move bloc related apis to comms package, add README (#61)

## 0.0.6+2

- Fix `StateSender` to only send messages when state is actually emitted
Expand Down
80 changes: 79 additions & 1 deletion packages/flutter_comms/README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,81 @@
# flutter_comms

Simple communication pattern abstraction on streams, created for communication between blocs and or widgets.
[![codestyle][pub_badge_style]][pub_badge_link]

`flutter_comms` builds on top of [comms], making it easier to implement comms pattern
in Flutter projects.

For use in dart only projects, use [comms].

## Installation

```console
$ flutter pub add flutter_comms
```

## Basic usage

You can mix in `Listener` and `Sender` mixins to widgets but for more convenience
helper widgets have been prepared.

### MessageListener

A `MessageListener` works exactly like `Listener` but calls `listen` and `cancel`
functions for you, enabling it to receive messages from any `Sender`sharing the
same message type.

```dart
MessageListener<MessageA>(
onMessage: (message) {
// handle received messages
},
onIntialMessage: (message) {
// handle initial message
},
child: Widget(),
)
```

### MultiMessageListener

Merges multiple `MessageListener` widgets, improving the readability of
nested `MessageListener`s.

```dart
MultiMessageListener(
listeners: [
MessageListener<MessageA>(
onMessage: (message) {},
),
MessageListener<MessageB>(
onMessage: (message) {},
),
],
child: Widget(),
)
```

### useMessageListener

`useMessageListener` hook calls `onMessage` everytime a message of type `Message`
is received. Works similarly to `Listener` but handles starting message receiving
and cleaning up itself.

This hook will receive messages only when `HookWidget` using it is built.

```dart
Widget build(BuildContext context) {
useMessageListener<MessageA>(
(message) {
// handle received messages
},
onInitialMessage: (message) {
// handle initial message
}
);
}
```

[pub_badge_style]: https://img.shields.io/badge/style-leancode__lint-black
[pub_badge_link]: https://pub.dartlang.org/packages/leancode_lint
[comms]: https://pub.dev/packages/comms
3 changes: 0 additions & 3 deletions packages/flutter_comms/lib/flutter_comms.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
export 'package:comms/comms.dart';

export 'src/listener_bloc.dart';
export 'src/listener_cubit.dart';
export 'src/state_sender.dart';
export 'src/use_message_listener.dart';
export 'src/widgets/message_listener.dart';
export 'src/widgets/multi_message_listener.dart';
29 changes: 0 additions & 29 deletions packages/flutter_comms/lib/src/listener_bloc.dart

This file was deleted.

31 changes: 0 additions & 31 deletions packages/flutter_comms/lib/src/listener_cubit.dart

This file was deleted.

14 changes: 0 additions & 14 deletions packages/flutter_comms/lib/src/state_sender.dart

This file was deleted.

16 changes: 7 additions & 9 deletions packages/flutter_comms/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
name: flutter_comms
description: Simple communication pattern abstraction on streams, created for communication between blocs and or widgets.
version: 0.0.6+2
version: 1.0.0
homepage: https://github.com/leancodepl/comms

environment:
sdk: ">=2.17.0 <3.0.0"
flutter: ">=3.0.0 <4.0.0"
sdk: ">=3.0.0 <4.0.0"
flutter: ">=3.10.0 <4.0.0"

dependencies:
bloc: ^8.1.0
comms: ^0.0.9
comms: ^1.0.1
flutter:
sdk: flutter
flutter_hooks: ^0.18.2
logging: ^1.0.2
meta: ^1.7.0
logging: ^1.2.0
meta: ^1.9.1
nested: ^1.0.0
uuid: ^3.0.6

dev_dependencies:
flutter_test:
sdk: flutter
leancode_lint: ^2.1.0+1
leancode_lint: ^4.0.0+1
74 changes: 2 additions & 72 deletions packages/flutter_comms/test/flutter_comms_test.dart
Original file line number Diff line number Diff line change
@@ -1,77 +1,7 @@
import 'package:comms/comms.dart';
import 'package:flutter_test/flutter_test.dart';

import 'listeners/product_count_cubit.dart';
import 'senders/basket_cubit.dart';

int numberOfProductCountMessageSink() =>
MessageSinkRegister().getSinksOfType<ProductCountChangedMessage>().length;

void main() {
group('ListenerCubit - Sender:', () {
test(
'ProductCountListenerCubit message sink is added to register after constructor',
() async {
final cubit = ProductCountListenerCubit();
expect(numberOfProductCountMessageSink(), 1);
await cubit.close();
},
);

test(
'ProductCountListenerCubit message sink is removed from register after close',
() async {
final cubit = ProductCountListenerCubit();
expect(numberOfProductCountMessageSink(), 1);
await cubit.close();
expect(numberOfProductCountMessageSink(), 0);
},
);

test(
'ProductCountListenerCubit state is consistent with number of elements in BasketCubit state',
() async {
final basketCubit = BasketCubit();
final productCountCubit = ProductCountListenerCubit();

basketCubit
..add('T-shirt')
..add('Socks');
await Future<void>.delayed(Duration.zero);

expect(productCountCubit.state, basketCubit.state.length);

basketCubit.removeLast();
await Future<void>.delayed(Duration.zero);

expect(productCountCubit.state, basketCubit.state.length);

await basketCubit.close();
await productCountCubit.close();
},
);

test(
'ProductCountListenerCubit correctly sets initial state using buffered message',
() async {
final basketCubit = BasketCubit()..add('Jeans');
final productCountCubit = ProductCountListenerCubit();

basketCubit
..add('T-shirt')
..add('Socks');
await Future<void>.delayed(Duration.zero);

expect(productCountCubit.state, basketCubit.state.length);

basketCubit.removeLast();
await Future<void>.delayed(Duration.zero);

expect(productCountCubit.state, basketCubit.state.length);

await basketCubit.close();
await productCountCubit.close();
},
);
test('', () {
expect(2 + 2, 4);
});
}
34 changes: 0 additions & 34 deletions packages/flutter_comms/test/listeners/product_count_cubit.dart

This file was deleted.

18 changes: 0 additions & 18 deletions packages/flutter_comms/test/senders/basket_cubit.dart

This file was deleted.

0 comments on commit 0f07e1a

Please sign in to comment.