• 矮个子先生😝
    2019-08-27
    看了下Flutter提供的api,动手实现了下,native调flutter的方法
    Future<String> nativeCallFlutter(int a) async {
      print('success $a');
      return 'success';
    }

    platform.setMethodCallHandler((MethodCall call) async {
        if (call.method == 'nativeCallFlutter') {
         return await nativeCallFlutter(call.arguments);
        }
        return 'none';
      });

    在iOS端调用:
    [channel invokeMethod:@"nativeCallFlutter" arguments:@1 result:^(id _Nullable result) {
            NSLog(@"result = %@",result);
        }];
    展开

    作者回复: 赞,方法通道是双向的,既支持Dart调Native,也支持Native调Dart。第31节会讲具体的实践

    
     2
  • 寂寞不点烟
    2019-12-10
    而原生代码在处理方法调用请求时,如果涉及到异步或非主线程切换,需要确保回调过程是在原生系统的 UI 线程(也就是 Android 和 iOS 的主线程)。在Android中UI现线程不一定是主线程。

    作者回复: 看怎么理解,如果你理解能操作UI的线程就是UI线程,那UI线程确实不一定是主线程

    
     1
  • 和小胖
    2019-10-14
    思考题:
    flutter 端:
    // 处理按钮点击
    handleButtonClick() async {
      int result;
      // 异常捕获
      try {
        // 异步等待方法通道的调用结果
        result = await platform.invokeMethod('openAppMarket', <String, dynamic>{
          'appId': "com.xxx.xxx",
          'packageName': "xxx.com.xxx",
        });
      } catch (e) {
        result = -1;
      }
      print("Result:$result");
    }

    Android 端:
    if (call.method == "openAppMarket") {
                        if (call.hasArgument("appId")) {
                            //获取 appId
                            call.argument<String>("appId")
                        }
                        if (call.hasArgument("packageName")) {
                            //获取包名
                            call.argument<String>("packageName")
                        }
                    }
    展开

    作者回复: 厉害👍

    
     1
  • 神巅巅
    2020-01-10
    请问最新的1.12,新建flutterviewcontroller是不是不会新建engine了,而是可以复用初始化创建的engine
    
    
  • 菜头
    2019-11-03
    如果是获取系统相册直接获取 图片对象
    Dart 支持各个平台的 image 对象类型吗

    作者回复: 这种建议只在原生实现界面,flutter接受最后选择的图片地址

    
    
  • 辉哥
    2019-09-24
    问一下,Flutter和原生应用应该不处于同一个进程吧

    作者回复: 不特殊处理的话,是一个进程

    
    
  • 江宁彭于晏
    2019-09-11
    // 声明 MethodChannel
    const platform = MethodChannel('samples.chenhang/utils');

    // 处理按钮点击
    handleButtonClick(Map paramDic) async{
      int result;
      // 异常捕获
      try {
        // 异步等待方法通道的调用结果,Map 中插入appid和包名,跳转链接等信息
        result = await platform.invokeMethod('openAppMarket', [paramDic]);
      }
      catch (e) {
        result = -1;
      }
      print("Result:$result");
    }
    展开

    作者回复: 这个接口的易用性貌似不太合理啊,调用方和原生代码宿主对于参数的处理都比较别扭

    
    
  • 小水滴
    2019-08-30
    iOS系统创建多份FlutterViewController会有什么问题吗

    作者回复: 每启动一个 FlutterVC实例,就会创建一套新的渲染机制,即 Flutter Engine,以及底层的 Isolate。这些实例之间的内存是不互相共享的,系统资源消耗比较大

    
    
  • ptlCoder
    2019-08-29
    methodChannelWithName:@"samples.chenhang/utils"
    这个通道名称有什么要求嘛?还是说见名知意就好?
    另外,如果flutter很多地方都用到了原生系统方法,岂不是在iOS或安卓flutter入口那做很多个判断?

    作者回复: 1.没要求,主要Dart层与原生宿主层保持一致就可以;
    2.对

    
    
  • 许童童
    2019-08-27
    dart层通过platform.invokeMethod 第二个参数传入动态参数
    native层可以通过call.argument拿到参数

    作者回复: 赞

    
    
  • 宇
    2019-08-27
    dart层:
    platform.invokeMethod('openAppStore', {"appId": "com.tencent.mm"});

    native层:
    String appId = call.argument("appId");
                                try {
                                    Uri uri = Uri.parse("market://details?id=" + appId);
                                    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                    startActivity(intent);
                                } catch (Exception e) {
                                    result.error("UNAVAILABLE", "没有安装应用市场", null);
                                }
    展开

    作者回复: 赞

    
    
  • yasuoyuhao
    2019-08-27
    調用原生能力使得 flutter 如虎添翼,並不是要完全取代原生開發,而是採取共生共存的概念。利用原生龐大的生態系,第三方開源組件,為初生的 flutter 提供了擴充,原生調用的功能。使得很多原生開源組件的解決方案可以很好的引入 flutter,這是喜歡 flutter 的其中一個原因。
    
    
我们在线,来聊聊吧