美文网首页
Flutter和Native交互:Fluter Boost 方法

Flutter和Native交互:Fluter Boost 方法

作者: 扫地僧练级 | 来源:发表于2020-12-14 15:45 被阅读0次

Flutter和Native混合开发,Fluuter和Native方法互相调用很容易出现内存问题,网上的很多例子都是不全的!!看这篇就够了!!

flutter侧:调用Native的xxx方法

      Map<String,dynamic> tmp = Map<String,dynamic>();
      try {
        /// 调用Native的方法xxx
        FlutterBoost.singleton.channel.sendEvent('xxx', tmp);
      } catch (e) {
      }

iOS侧:监听flutter 调用的xxx方法

// 监听来自flutter的事件 xxx
FLBVoidCallback __block xxxBlock = [FlutterBoostPlugin.sharedInstance addEventListener:^(NSString *name, NSDictionary *arguments) {
        if([name isEqualToString:@"xxx"]) {
            /// 回调给flutter,flutter需要监听aaa(即: Native调用Flutter方法aaa)
            [FlutterBoostPlugin.sharedInstance sendEvent:@"aaa" arguments:@{@"a":@"a",@"b":@"b"}];
        }
        /// 这一行很多网上都没写 但是是需要的 用完了就释放
        xxxBlock();
    } forName:@"xxx"];

flutter侧:监听Native的aaa回调方法(在widget的initState() 中写)

   bool _status = false;
   /// 这一个很多网上都没有 但是这个是必须的  需要在dispose中释放
   VoidCallback aaaCallBack;
   /// 监听Native侧的事件-aaa
   aaaCallBack = FlutterBoost.singleton.channel.addEventListener('aaa',
           (name, arguments){
         /// 刷新界面
         String a = arguments['a'];
         String b = arguments['b'];
         if (widget.a is String
             && a is String
             && widget.b == b) {
           _status = status == '1' ? true : false;
           setState(() {
           });
         }
         return;
       });

     @override
     void dispose() {
      // TODO: implement dispose
      super.dispose();
      /// 这一个很多网上都没有 但是这个是必须的  widget销毁后调用这个方法,释放eventListener
      aaaCallBack();
    }

注意:

经实践:sendEvent的参数arguments 只能是 {String:String} ,各位如果调用失败可以查一下是否是因为这个参数问题!
除了sendEvent+addEventListener 这种方法外,也可以用页面交互的open方法处理事件也可以,但不建议这么做哈

总结一下内存问题:

  1. iOS侧的FLBVoidCallback 需要执行释放
  2. Fluuter侧的VoidCallback 需要在dispose的时候释放

相关文章

网友评论

      本文标题:Flutter和Native交互:Fluter Boost 方法

      本文链接:https://www.haomeiwen.com/subject/pivvgktx.html