Skip to content

Write Objective-C Code using Dart. This package liberates you from native code and low performance channel.

License

Notifications You must be signed in to change notification settings

icoder33/dart_native

 
 

Repository files navigation

dart_native

Write native code using Dart. This package liberates you from native code and low performance channel.

Still under development!!!

pub package Build Status

Requirements

Flutter 1.12.13 (Dart 2.7.0)

Getting Started

Dart code:

// new Objective-C object.
RuntimeStub stub = RuntimeStub();

// Define Dart function according to Objective-C BarBlock signature.
Function testFunc = (NSObject a) {
    print('hello block! ${a.toString()}');
    return 101;
};

// Dart function will be converted to Objective-C block.
Block block = stub.fooBlock(testFunc);
// invoke Objective-C block.
int result = block.invoke([stub]);
print(result); 

// support built-in structs.
CGRect rect = stub.fooCGRect(CGRect(4, 3, 2, 1));
print(rect);

Objective-C code:

@interface RuntimeStub ()
@end
@implementation RuntimeStub
- (CGRect)fooCGRect:(CGRect)rect {
    NSLog(@"%s %f, %f, %f, %f", __func__, rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
    return (CGRect){1, 2, 3, 4};
}

typedef int(^BarBlock)(NSObject *a);

- (BarBlock)fooBlock:(BarBlock)block {
    dispatch_async(dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^{
        int result = block([NSObject new]);
        NSLog(@"---result: %d", result);
    });
    BarBlock bar = ^(NSObject *a) {
        NSLog(@"bar block arg: %@", a);
        return 404;
    };
    return bar;
}
@end

TODO List

  • Generate Dart code from ObjectiveC/C++ Headers.
  • Unit test.
  • Documents.

Article

About

Write Objective-C Code using Dart. This package liberates you from native code and low performance channel.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Dart 38.0%
  • C 30.9%
  • Objective-C 22.9%
  • Objective-C++ 5.1%
  • Ruby 2.0%
  • Java 1.1%