From 9aa95cc357b5e44615bcfc595b505215b300d288 Mon Sep 17 00:00:00 2001 From: Rastislav Date: Fri, 28 Aug 2026 18:51:39 +0200 Subject: [PATCH] fix --- .github/ISSUE_TEMPLATE/bug.yml | 3 +- .github/ISSUE_TEMPLATE/config.yml | 3 +- .github/workflows/ci.yml | 7 +++-- .github/workflows/publish.yml | 16 ++++++++++- CHANGELOG.md | 6 ++++ README.md | 32 ++++++++++----------- example/decode_hello.dart | 2 +- example/encode_hello.dart | 2 +- example/encode_random_bytes.dart | 4 +-- example/fast_loopback.dart | 4 +-- example/flutter_modem_example.dart | 6 ++++ example/loopback.dart | 4 +-- example/ready_phone_flow.dart | 4 +-- example/ready_server.dart | 4 +-- example/ultrasonic_loopback.dart | 4 +-- lib/{dart_modem.dart => flutter_modem.dart} | 0 lib/src/control/ready_signal_encoder.dart | 6 ++-- lib/src/decoder/protocol_decoder.dart | 4 +-- lib/src/modem.dart | 8 +++--- lib/src/protocol/modem_protocol.dart | 4 +-- pubspec.yaml | 8 +++--- test/bytes_test.dart | 2 +- test/crc32_test.dart | 2 +- test/decoder_test.dart | 2 +- test/encoder_test.dart | 2 +- test/goertzel_test.dart | 2 +- test/modem_protocol_test.dart | 8 +++--- test/packet_test.dart | 2 +- test/ready_signal_detector_test.dart | 4 +-- test/ready_signal_encoder_test.dart | 6 ++-- test/ready_signal_test.dart | 2 +- test/synchronizer_test.dart | 2 +- 32 files changed, 96 insertions(+), 69 deletions(-) create mode 100644 example/flutter_modem_example.dart rename lib/{dart_modem.dart => flutter_modem.dart} (100%) diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 47b44e1..6ef6338 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -1,5 +1,5 @@ name: Bug report -description: Report a reproducible defect in dart_modem. +description: Report a reproducible defect in flutter_modem. title: "[Bug]: " labels: [bug] body: @@ -43,4 +43,3 @@ body: options: - label: I searched existing issues for duplicates. required: true - diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 94b2f92..bd6558b 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,6 +1,5 @@ blank_issues_enabled: false contact_links: - name: Security report - url: https://github.com/bchainhub/dart_modem/security/advisories/new + url: https://github.com/DataLayerHost/flutter_modem/security/advisories/new about: Report vulnerabilities privately instead of opening a public issue. - diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 48c9cb4..1201fdb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -name: Dart CI +name: Testing on: push: @@ -11,11 +11,14 @@ permissions: jobs: test: runs-on: ubuntu-latest + timeout-minutes: 10 steps: - uses: actions/checkout@v4 - uses: dart-lang/setup-dart@v1 + with: + sdk: stable - run: dart pub get - run: dart format --output=none --set-exit-if-changed . - run: dart analyze --fatal-infos - run: dart test - + - run: dart pub publish --dry-run diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b489340..92b6e8b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -6,7 +6,21 @@ on: - "[0-9]+.[0-9]+.[0-9]+" jobs: - publish: + validate: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - uses: dart-lang/setup-dart@v1 + with: + sdk: stable + - run: dart pub get + - run: dart format --output=none --set-exit-if-changed . + - run: dart analyze --fatal-infos + - run: dart test + - run: dart pub publish --dry-run + publish-pub-dev: + needs: validate permissions: id-token: write uses: dart-lang/setup-dart/.github/workflows/publish.yml@v1 diff --git a/CHANGELOG.md b/CHANGELOG.md index a5724bc..fd4986c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.2.0 + +- Rename the package and public library from `dart_modem` to `flutter_modem`. +- Move repository and issue links to DataLayerHost/flutter_modem. +- Align continuous integration and publishing checks with the related Flutter packages. + ## 0.1.0 - Initial release with a pure Dart continuous-phase BFSK encoder. diff --git a/README.md b/README.md index 9dda928..d856054 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# DART MODEM +# Flutter Modem -`dart_modem` is a pure Dart acoustic modem. It turns arbitrary bytes into signed +`flutter_modem` is a pure Dart acoustic modem. It turns arbitrary bytes into signed 16-bit PCM audio and incrementally reconstructs validated packets from PCM. The core has no Flutter, native-code, audio-device, or runtime-specific dependency, so it can be used on the Dart VM, servers, Flutter, and Dart-to-Wasm targets. @@ -10,9 +10,9 @@ so it can be used on the Dart VM, servers, Flutter, and Dart-to-Wasm targets. ```dart import 'dart:convert'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; -final modem = DartModem(modulation: const Bfsk()); +final modem = FlutterModem(modulation: const Bfsk()); final pcm = modem.encode(utf8.encode('Hello')); final decoder = modem.createStreamingDecoder(); @@ -27,13 +27,13 @@ to the host application, which keeps the modem platform-independent. ## Application protocol -`DartModem` uses Voice Transaction Protocol version 1 by default. Each input is +`FlutterModem` uses Voice Transaction Protocol version 1 by default. Each input is treated as an already-signed transaction, wrapped in a SHA-256/CRC-protected envelope, split into Voice TX DATA packets, and reassembled by the matching decoder. Configure the chain identifiers for production use: ```dart -final modem = DartModem( +final modem = FlutterModem( protocol: const VoiceTxModemProtocol( blockchainId: 1, networkId: 1, @@ -44,15 +44,15 @@ final modem = DartModem( The default identifiers are zero when the application does not supply them. Empty payloads are invalid under Voice TX. The complete Voice TX packet, envelope, assembly, and sender/receiver session APIs are exported directly by -`dart_modem`. +`flutter_modem`. To use only the modem's basic `DMOD` transport framing, disable the application protocol explicitly: ```dart -final rawModem = DartModem(protocol: null); +final rawModem = FlutterModem(protocol: null); // Equivalent when a non-null ModemProtocol value is needed: -final identityModem = DartModem(protocol: const NoModemProtocol()); +final identityModem = FlutterModem(protocol: const NoModemProtocol()); ``` Another protocol can replace Voice TX by implementing `ModemProtocol` and its @@ -88,7 +88,7 @@ For hardware with a usable high-frequency audio path, select the built-in near-ultrasonic preset: ```dart -final modem = DartModem( +final modem = FlutterModem( modulation: const Bfsk.ultrasonic(), ); @@ -115,7 +115,7 @@ For noisy, filtered, or codec-damaged calls where throughput is less important, use the 100-baud poor-quality profile: ```dart -final modem = DartModem( +final modem = FlutterModem( modulation: const Bfsk.poorQuality(), ); ``` @@ -128,7 +128,7 @@ It uses 8 kHz PCM with 1200/2200 Hz tones and 80 samples per bit. The older The `fast` preset is an alternative 1200-baud audible channel: ```dart -final modem = DartModem( +final modem = FlutterModem( modulation: const Bfsk.fast(), ); @@ -199,13 +199,13 @@ add gain control, filtering, echo, clock drift, clipping, and noise. Resample captured audio to the configured rate and supply mono signed Int16 PCM. Test the chosen frequencies and baud rate against the actual channel before deployment. -The waveform uses V.23-compatible frequencies and bitrate, but dart_modem's +The waveform uses V.23-compatible frequencies and bitrate, but flutter_modem's packet framing is its own protocol; it does not claim byte-level interoperability with legacy V.23 terminals. Speech codecs, echo cancellation, automatic gain control, and noise suppression can still damage modem audio. An uncompressed G.711 path is preferable where the call stack exposes that choice. -`dart_modem` only generates and analyzes waveforms. A Flutter application can +`flutter_modem` only generates and analyzes waveforms. A Flutter application can connect it to any suitable audio capture/playback package without coupling that package to the modem core. @@ -239,7 +239,7 @@ listening, and permits transmission after a decoded guard delay. Receiver answers → receiver repeats READY → phone microphone captures READY -→ dart_modem detects READY +→ flutter_modem detects READY → app waits guard delay → app plays transaction audio → receiver stops READY transmission when transaction preamble is detected @@ -275,7 +275,7 @@ behavior implemented in this release. ### Receiver/server generation ```dart -final modem = DartModem(); +final modem = FlutterModem(); final ready = ReadySignal( sessionId: secureSessionId, guardDelay: const Duration(milliseconds: 500), diff --git a/example/decode_hello.dart b/example/decode_hello.dart index fc3e2d3..452507f 100644 --- a/example/decode_hello.dart +++ b/example/decode_hello.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'dart:typed_data'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; Future main() async { final Int16List pcm = BfskEncoder().encode(utf8.encode('Hello')); diff --git a/example/encode_hello.dart b/example/encode_hello.dart index 7fdfa84..f4759b1 100644 --- a/example/encode_hello.dart +++ b/example/encode_hello.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'dart:typed_data'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; void main() { final Int16List pcm = BfskEncoder().encode(utf8.encode('Hello')); diff --git a/example/encode_random_bytes.dart b/example/encode_random_bytes.dart index 3c0fdb6..088324f 100644 --- a/example/encode_random_bytes.dart +++ b/example/encode_random_bytes.dart @@ -1,13 +1,13 @@ import 'dart:math'; import 'dart:typed_data'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; void main() { final Random random = Random.secure(); final Uint8List payload = Uint8List.fromList(List.generate(32, (_) => random.nextInt(256))); - final Int16List pcm = DartModem().encode(payload); + final Int16List pcm = FlutterModem().encode(payload); print('Payload: ${bytesToHex(payload)}'); print('PCM samples: ${pcm.length}'); } diff --git a/example/fast_loopback.dart b/example/fast_loopback.dart index b16f28b..7655444 100644 --- a/example/fast_loopback.dart +++ b/example/fast_loopback.dart @@ -1,9 +1,9 @@ import 'dart:convert'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; void main() { - final DartModem modem = DartModem(modulation: const Bfsk.fast()); + final FlutterModem modem = FlutterModem(modulation: const Bfsk.fast()); final List sent = utf8.encode('Fast acoustic modem'); final List received = modem.createDecoder().feed( modem.encode(sent), diff --git a/example/flutter_modem_example.dart b/example/flutter_modem_example.dart new file mode 100644 index 0000000..a06200e --- /dev/null +++ b/example/flutter_modem_example.dart @@ -0,0 +1,6 @@ +import 'package:flutter_modem/flutter_modem.dart'; + +void main() { + final samples = BfskEncoder().encode(const [0x48, 0x69]); + print('Generated ${samples.length} PCM samples.'); +} diff --git a/example/loopback.dart b/example/loopback.dart index a11b80d..b4e40f6 100644 --- a/example/loopback.dart +++ b/example/loopback.dart @@ -1,9 +1,9 @@ import 'dart:convert'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; void main() { - final DartModem modem = DartModem(modulation: const Bfsk()); + final FlutterModem modem = FlutterModem(modulation: const Bfsk()); final List sent = utf8.encode('Acoustic loopback'); final List received = modem.createDecoder().feed(modem.encode(sent)); diff --git a/example/ready_phone_flow.dart b/example/ready_phone_flow.dart index 1d2ef2f..7e9e898 100644 --- a/example/ready_phone_flow.dart +++ b/example/ready_phone_flow.dart @@ -1,9 +1,9 @@ import 'dart:convert'; import 'dart:typed_data'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; -final DartModem modem = DartModem(); +final FlutterModem modem = FlutterModem(); final Int16List preparedTransactionPcm = modem.encode( utf8.encode('Prepared transaction'), ); diff --git a/example/ready_server.dart b/example/ready_server.dart index 040b824..108e127 100644 --- a/example/ready_server.dart +++ b/example/ready_server.dart @@ -1,9 +1,9 @@ import 'dart:typed_data'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; void main() { - final DartModem modem = DartModem(); + final FlutterModem modem = FlutterModem(); final RepeatingReadySignalEncoder repeater = RepeatingReadySignalEncoder( modem: modem, ready: const ReadySignal( diff --git a/example/ultrasonic_loopback.dart b/example/ultrasonic_loopback.dart index 6550699..7308cba 100644 --- a/example/ultrasonic_loopback.dart +++ b/example/ultrasonic_loopback.dart @@ -1,9 +1,9 @@ import 'dart:convert'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; void main() { - final DartModem modem = DartModem( + final FlutterModem modem = FlutterModem( modulation: const Bfsk.ultrasonic(), ); final List sent = utf8.encode('Near-ultrasonic Hello'); diff --git a/lib/dart_modem.dart b/lib/flutter_modem.dart similarity index 100% rename from lib/dart_modem.dart rename to lib/flutter_modem.dart diff --git a/lib/src/control/ready_signal_encoder.dart b/lib/src/control/ready_signal_encoder.dart index 09436bc..962c589 100644 --- a/lib/src/control/ready_signal_encoder.dart +++ b/lib/src/control/ready_signal_encoder.dart @@ -13,14 +13,14 @@ final class ReadySignalEncoderConfig { final Duration trailingSilence; } -/// Adds acoustic padding and encodes READY through a [DartModem]. +/// Adds acoustic padding and encodes READY through a [FlutterModem]. final class ReadySignalEncoder { const ReadySignalEncoder({ required this.modem, this.config = const ReadySignalEncoderConfig(), }); - final DartModem modem; + final FlutterModem modem; final ReadySignalEncoderConfig config; Int16List encode(ReadySignal ready) { @@ -85,7 +85,7 @@ final class RepeatingReadySignalEncoder { _validate(); } - final DartModem modem; + final FlutterModem modem; final ReadySignal ready; final ReadyRepeatConfig config; final ReadySignalEncoderConfig encoderConfig; diff --git a/lib/src/decoder/protocol_decoder.dart b/lib/src/decoder/protocol_decoder.dart index 1f6c08e..7e6f119 100644 --- a/lib/src/decoder/protocol_decoder.dart +++ b/lib/src/decoder/protocol_decoder.dart @@ -35,8 +35,8 @@ final class ProtocolModemDecoder implements ModemFrameDecoder { } /// Push-based protocol-aware modem decoder. -final class StreamingDartModemDecoder implements ModemFrameDecoder { - StreamingDartModemDecoder(this._decoder); +final class StreamingFlutterModemDecoder implements ModemFrameDecoder { + StreamingFlutterModemDecoder(this._decoder); final ModemFrameDecoder _decoder; final StreamController _controller = diff --git a/lib/src/modem.dart b/lib/src/modem.dart index fe3e559..3372d8e 100644 --- a/lib/src/modem.dart +++ b/lib/src/modem.dart @@ -7,8 +7,8 @@ import 'encoder/bfsk_encoder.dart'; import 'protocol/modem_protocol.dart'; /// Convenient facade for encoding and creating matching decoders. -final class DartModem { - DartModem({ +final class FlutterModem { + FlutterModem({ this.modulation = const Bfsk(), this.protocol = const VoiceTxModemProtocol(), }); @@ -57,6 +57,6 @@ final class DartModem { ); } - StreamingDartModemDecoder createStreamingDecoder() => - StreamingDartModemDecoder(createDecoder()); + StreamingFlutterModemDecoder createStreamingDecoder() => + StreamingFlutterModemDecoder(createDecoder()); } diff --git a/lib/src/protocol/modem_protocol.dart b/lib/src/protocol/modem_protocol.dart index a79dc1c..2d5b00c 100644 --- a/lib/src/protocol/modem_protocol.dart +++ b/lib/src/protocol/modem_protocol.dart @@ -23,7 +23,7 @@ abstract interface class ModemProtocolDecoder { void reset(); } -/// Version 1 Voice Transaction Protocol, used by [DartModem] by default. +/// Version 1 Voice Transaction Protocol, used by [FlutterModem] by default. /// /// The input to [encode] is an already-signed, publicly broadcastable /// transaction. It is enveloped, hashed, checksummed, and split into bounded @@ -102,7 +102,7 @@ final class _VoiceTxModemProtocolDecoder implements ModemProtocolDecoder { /// Identity application protocol. /// -/// This is equivalent to passing `protocol: null` to [DartModem], and is +/// This is equivalent to passing `protocol: null` to [FlutterModem], and is /// useful where a concrete [ModemProtocol] value is required. final class NoModemProtocol implements ModemProtocol { const NoModemProtocol(); diff --git a/pubspec.yaml b/pubspec.yaml index 14598d1..2888c60 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,8 +1,8 @@ -name: dart_modem +name: flutter_modem description: A pure Dart acoustic modem for encoding binary data as BFSK PCM audio. -version: 0.1.0 -repository: https://github.com/bchainhub/dart_modem -issue_tracker: https://github.com/bchainhub/dart_modem/issues +version: 0.2.0 +repository: https://github.com/DataLayerHost/flutter_modem +issue_tracker: https://github.com/DataLayerHost/flutter_modem/issues topics: - audio - modem diff --git a/test/bytes_test.dart b/test/bytes_test.dart index c3ce85d..1a322ab 100644 --- a/test/bytes_test.dart +++ b/test/bytes_test.dart @@ -1,4 +1,4 @@ -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; import 'package:test/test.dart'; void main() { diff --git a/test/crc32_test.dart b/test/crc32_test.dart index b9a80dc..035e59a 100644 --- a/test/crc32_test.dart +++ b/test/crc32_test.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; import 'package:test/test.dart'; void main() { diff --git a/test/decoder_test.dart b/test/decoder_test.dart index 916657c..2a458df 100644 --- a/test/decoder_test.dart +++ b/test/decoder_test.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'dart:typed_data'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; import 'package:test/test.dart'; void main() { diff --git a/test/encoder_test.dart b/test/encoder_test.dart index 6ca39fd..aeda6e7 100644 --- a/test/encoder_test.dart +++ b/test/encoder_test.dart @@ -1,6 +1,6 @@ import 'dart:typed_data'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; import 'package:test/test.dart'; void main() { diff --git a/test/goertzel_test.dart b/test/goertzel_test.dart index 6eb721a..8b6cdf1 100644 --- a/test/goertzel_test.dart +++ b/test/goertzel_test.dart @@ -1,6 +1,6 @@ import 'dart:math' as math; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; import 'package:test/test.dart'; void main() { diff --git a/test/modem_protocol_test.dart b/test/modem_protocol_test.dart index 9bc9c94..ad7a7a8 100644 --- a/test/modem_protocol_test.dart +++ b/test/modem_protocol_test.dart @@ -1,11 +1,11 @@ import 'dart:typed_data'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; import 'package:test/test.dart'; void main() { test('Voice TX is the default protocol', () { - final DartModem modem = DartModem(); + final FlutterModem modem = FlutterModem(); final Uint8List payload = Uint8List.fromList([1, 2, 3, 4]); final List frames = @@ -17,7 +17,7 @@ void main() { }); test('null protocol sends bytes without application framing', () { - final DartModem modem = DartModem(protocol: null); + final FlutterModem modem = FlutterModem(protocol: null); final Uint8List payload = Uint8List.fromList([5, 6, 7]); final List frames = @@ -27,7 +27,7 @@ void main() { }); test('a custom protocol can replace Voice TX', () { - final DartModem modem = DartModem(protocol: const _PrefixProtocol()); + final FlutterModem modem = FlutterModem(protocol: const _PrefixProtocol()); final Uint8List payload = Uint8List.fromList([8, 9]); final List frames = diff --git a/test/packet_test.dart b/test/packet_test.dart index 8722f02..53d01ba 100644 --- a/test/packet_test.dart +++ b/test/packet_test.dart @@ -1,4 +1,4 @@ -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; import 'package:test/test.dart'; void main() { diff --git a/test/ready_signal_detector_test.dart b/test/ready_signal_detector_test.dart index dff53c6..599382c 100644 --- a/test/ready_signal_detector_test.dart +++ b/test/ready_signal_detector_test.dart @@ -1,11 +1,11 @@ import 'dart:math' as math; import 'dart:typed_data'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; import 'package:test/test.dart'; void main() { - final DartModem modem = DartModem(); + final FlutterModem modem = FlutterModem(); Int16List encode(ReadySignal signal) => ReadySignalEncoder(modem: modem).encode(signal); diff --git a/test/ready_signal_encoder_test.dart b/test/ready_signal_encoder_test.dart index 9de2ad7..6628b15 100644 --- a/test/ready_signal_encoder_test.dart +++ b/test/ready_signal_encoder_test.dart @@ -1,11 +1,11 @@ import 'dart:typed_data'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; import 'package:test/test.dart'; void main() { group('READY PCM encoder', () { - final DartModem modem = DartModem(); + final FlutterModem modem = FlutterModem(); const ReadySignal ready = ReadySignal(sessionId: 0x12345678); test('modem loopback recovers the exact READY frame', () { @@ -41,7 +41,7 @@ void main() { }); group('repeating READY encoder', () { - final DartModem modem = DartModem(); + final FlutterModem modem = FlutterModem(); const ReadySignal ready = ReadySignal(sessionId: 55, sequenceNumber: 8); const ReadySignalEncoderConfig noPadding = ReadySignalEncoderConfig( leadingSilence: Duration.zero, diff --git a/test/ready_signal_test.dart b/test/ready_signal_test.dart index 43fc105..3b936ad 100644 --- a/test/ready_signal_test.dart +++ b/test/ready_signal_test.dart @@ -1,6 +1,6 @@ import 'dart:typed_data'; -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; import 'package:test/test.dart'; void main() { diff --git a/test/synchronizer_test.dart b/test/synchronizer_test.dart index c01a035..3fb4fc5 100644 --- a/test/synchronizer_test.dart +++ b/test/synchronizer_test.dart @@ -1,4 +1,4 @@ -import 'package:dart_modem/dart_modem.dart'; +import 'package:flutter_modem/flutter_modem.dart'; import 'package:test/test.dart'; void main() {