Flutter与Android的交互

前言

  • Flutter的思想是:一切皆组件!
    这里我使用开发工具:JDK1.8+AS3.3+Flutter1.6.2
Flutter 调用 Android java方法
  1. Android 端:需要声明MethodChannelsetMethodCallHandler, 在onCreate()方法中声明MethodChannel并设置MethodCallHandler
    // CHANNEL_NAME是String字符串,对Channel命名
    MethodChannel methodChannel = new MethodChannel(getFlutterView(), CHANNEL_NAME);
    
        // setMethodCallHandler,接收此通道上对方法的调用处理
        methodChannel.setMethodCallHandler(new MethodChannel.MethodCallHandler() {
                    @Override
                    public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
                        // 通过methodCall可以获取参数和方法名  执行对应的业务逻辑
                        if (methodCall.method.equals(getAndroidResult)) {
                             //这里将本地的处理结果保存
                            int random = MainActivity.this.getRandomResult();
                            if (random >= 0) {
                            	//将结果传递给result,通过它回传给Flutter
                                result.success("Success : " + random);
                            } else {
                                result.error("ERROR", "result=" + random, null);
                            }
                        } else {
                            result.notImplemented();
                        }
                    }
                }
        );
    
  2. Flutter端:根据指定的MethodChannel,反射获取Android方法回传的结果,通过setState()更新UI
    class _MyHomePageState extends State<MyHomePage> {
      static const platform_from_android = const MethodChannel("samples.flutter.io/from_android");
      static const String method_android_name = "getAndroidResult";
    
      String androidResult = "nuknow result";//接收Android端处理后的姐结果
    
      Future<Null> _getFromAndroid() async {
        try {
          print("dart -_getFromAndroid");
          // 在通道上调用此方法
          androidResult = await platform_from_android.invokeMethod(method_android_name);
        } on PlatformException catch (e) {
          androidResult = '${e.message}';
        }
        setState(() {
          print("dart -setState");
        });
      }
        @override
        Widget build(BuildContext context) {
          return Scaffold(
            appBar: AppBar(
              ...
            ),
            body: new Center(
              child: Column(
               ...
                children: <Widget>[
                  new RaisedButton(
                    onPressed: _getFromAndroid,
                    child: new Text("Get from Android"),
                  ),
                  new Text(
                    "结果 : $androidResult",
                    style: new TextStyle(
                      fontSize: 30
                    ),
                  ),
                ],
              ),
            ),
          );
        }
    }
    
    结果如下:

总结

  1. Flutter–>Android间, 桥梁是MethodChannel, Flutter通过MethodChannel.invokeMethod()来调用Android方法,Android端在方法回调onMethodCall()里面处理并回传结果给Flutter
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值