flutter_native_channel 0.0.3 copy "flutter_native_channel: ^0.0.3" to clipboard
flutter_native_channel: ^0.0.3 copied to clipboard

outdated

A fast flutter message channel by using dart FFI and shared memory.

example/lib/main.dart

import 'package:flutter/material.dart';

import 'package:flutter/services.dart';
import 'package:flutter_native_channel/flutter_native_channel.dart';

const channel = MethodChannel('flutter_native_channel_example');
final synchronousChannel =
    SynchronousMethodChannel('flutter_native_channel_example');
final nativeChannel = ConcurrentMethodChannel('flutter_native_channel_example');

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  int binTs = 0;
  int channelTs = 0;
  int syncBinTs = 0;
  int syncChannelTs = 0;
  int asyncBinTs = 0;
  int asyncChannelTs = 0;

  void handleTest() async {
    var ts = DateTime.now();
    await Future.wait<dynamic>([
      for (var i = 0; i < 20; i++)
        ServicesBinding.instance.defaultBinaryMessenger
            .send('flutter_bin_channel', ByteData(5)),
    ]);
    binTs = DateTime.now().difference(ts).inMicroseconds;

    ts = DateTime.now();
    await Future.wait<dynamic>([
      for (var i = 0; i < 20; i++) channel.invokeMethod<dynamic>('MTD', null),
    ]);
    channelTs = DateTime.now().difference(ts).inMicroseconds;

    ts = DateTime.now();
    for (var i = 0; i < 20; i++) {
      await SynchronousNativeBinaryMessenger().send(1234, null);
    }
    syncBinTs = DateTime.now().difference(ts).inMicroseconds;

    ts = DateTime.now();
    for (var i = 0; i < 20; i++) {
      synchronousChannel.invokeMethod<dynamic>('MTD', null);
    }
    syncChannelTs = DateTime.now().difference(ts).inMicroseconds;

    ts = DateTime.now();
    await Future.wait<dynamic>([
      ConcurrentNativeBinaryMessenger.instance.send(1234, null),
    ]);
    asyncBinTs = DateTime.now().difference(ts).inMicroseconds;

    ts = DateTime.now();
    await Future.wait<dynamic>([
      for (var i = 0; i < 20; i++)
        nativeChannel.invokeMethod<dynamic>('MTD', null),
    ]);
    asyncChannelTs = DateTime.now().difference(ts).inMicroseconds;

    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Flutter Native Channel Test'),
        ),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            Text('20 * 5M'),
            Text('via flutter bin: $binTs us'),
            Text('via flutter channel: $channelTs us'),
            Text('via sync native bin: $syncBinTs us'),
            Text('via sync native channel: $syncChannelTs us'),
            Text('via async native bin: $asyncBinTs us'),
            Text('via async native channel: $asyncChannelTs us'),
          ],
        ),
        floatingActionButton: FloatingActionButton(
          child: Icon(Icons.play_arrow),
          onPressed: handleTest,
        ),
      ),
    );
  }
}
0
likes
0
pub points
21%
popularity

Publisher

unverified uploader

A fast flutter message channel by using dart FFI and shared memory.

Homepage

License

unknown (LICENSE)

Dependencies

crypto, ffi, flutter

More

Packages that depend on flutter_native_channel