Kommunikation zwischen Flutter und Native

1. flutter_boost

Hinweis: Flutter-Code, flutter_boost-Kommunikation erfordert, dass der folgende „Senden/Empfangen“-Code in die für flutter_boost registrierte Seite geschrieben wird

//routeFactory ist auf der flutter_boost-Seite registriert

@override

Widget-Build(BuildContext-Kontext) {

return FlutterBoostApp(

routeFactory,

appBuilder: appBuilder,

);

}

1.iOS

schicken

[[FlutterBoost-Instanz] sendEventToFlutterWith:@"event_to_flutter" arguments:@{@"tfs": tfsKey,@"key":@"loadPic"}];

übernehmen

[[FlutterBoost-Instanz] addEventListener:^(NSString *name, NSDictionary *arguments) {

if (![name isEqualToString:@"event_to_native"]) {

zurück;

}

NSString *key=arguments[@"key"];

} forName:@"event_to_native"];

2.flattern

schicken

BoostChannel.instance.sendEventToNative("event_to_native", {"key":"loadPic"});

übernehmen

spätes VoidCallback removeListener;

String filePath = "";

@override

void initState() {

super.initState();

removeListener =

BoostChannel.instance.addEventListener("event_to_flutter", (key, arguments) {

if(arguments.isNotEmpty && arguments['key'] == "loadPic") {

setState(() {

filePath = getTFSUrl(arguments['tfs']);

});

}

return Future<dynamic>(() => null);

});

}

@override

void dispose() {

super.dispose();

removeListener.call();

}

2. MethodeKanal

1.iOS

schicken

FlutterMethodChannel *methodChannel = [FlutterMethodChannel methodChannelWithName:@"native_send_message_to_flutter" BinaryMessenger:[[[FlutterBoost-Instanz] Engine] BinaryMessenger]];

[methodChannel invokeMethod:@"will_logout" Argumente: Null];

übernehmen

2.flattern

schicken

Der Empfangscode muss nach runApp geschrieben werden, andernfalls muss WidgetsFlutterBinding.ensureInitialized() hinzugefügt werden, bevor der Empfangscode hinzugefügt wird. Einige notwendige Bindungen sollten initialisiert werden, bevor der Empfangscode wirksam werden kann.

übernehmen

final MethodChannel _nativeSendMessageChannel = const MethodChannel('native_send_message_to_flutter');< /span>

_nativeSendMessageChannel.setMethodCallHandler((call) async {

debugPrint('flutter _MyBoostAppState _nativeSendMessageChannel = ${call.method}');

if (call.method == 'will_logout') {

SecurityRepository().reset();

}

});

3. EventChannel

Wichtiger Punkt: SetStreamHandler ähnelt dem Festlegen eines Proxy-Objekts. Daher muss der native EventChannel im Voraus festgelegt werden, bevor Flutter den Empfangscode hinzufügt. Andernfalls wird die Ausführung der FlutterStreamHandler-Proxy-Rückruffunktion nicht ausgelöst, wenn Flutter den Empfangscode ausführt , ergebend

Wenn eventSink null ist, kann Native die Sendeaufgabe nicht ausführen.

iOS:

schicken

@interface XXXXX() <FlutterStreamHandler>

@property (nichtatomar, stark) FlutterEventSink eventSink;

@Ende

//aufstellen

-(void)setEventChannel{

FlutterEventChannel *eventChannel = [FlutterEventChannel eventChannelWithName:@"native_eventChannel_send_message_to_flutter" BinaryMessenger:[[[FlutterBoost-Instanz] Engine] BinaryMessenger]];

[eventChannel setStreamHandler:self];//ähnlich dem Proxy

}

//Die von native an Flatter gesendeten Daten

-(void)sendEventChannelMessage:(NSDictionary *)dic{

if (self.eventSink) {

self.eventSink(dic);

}

}

#pragma mark - FlutterStreamHandler

- (FlutterError* _Nullable)onListenWithArguments:(id _Nullable)arguments eventSink:(FlutterEventSink)eventSink {

self.eventSink = eventSink;

return nil;

}

- (FlutterError* _Nullable)onCancelWithArguments:(id _Nullable)arguments {

self.eventSink = nil;

return nil;

}

flutter

接收

@override

void initState() {

// TODO: implement initState

super.initState();

const EventChannel eventChannel = EventChannel('native_eventChannel_send_message_to_flutter');

eventChannel.receiveBroadcastStream().listen(_onEvent,onError: _onError);

}

// 数据接收

void _onEvent(dynamic value) {

debugPrint("flutter_jl_bluetooth_plugin_event _onEvent: $value");

}

// 数据接收: 错误处理

static void _onError(dynamic value) {

debugPrint("flutter_jl_bluetooth_plugin_event _onError: $value");

}

Supongo que te gusta

Origin blog.csdn.net/mofengluo/article/details/128852323
Recomendado
Clasificación