Flutter之 windows desktop method channel 本地通信

flutter2.png

Flutter2.0

Flutter2.0已经发布了,带来了很多新消息。使开发人员能够为任何平台创建美观、快速且可移植的应用程序。 借助 Flutter 2,可以使用相同的代码库将本机应用程序发布到五个操作系统: iOS,Android,Windows,macOS 和 Linux; 以及针对 Chrome,Firefox,Safari 或 Edge 等浏览器的 Web 体验。 Flutter 甚至可以嵌入到汽车,电视和智能家电中,为环境计算世界提供普遍且可延展的体验。
现在终于可以在stable下直接开发桌面应用了。最近刚好在做一个答题卡识别APP,需要做Windows版本(内心是不想的,无奈Windows系统用户多)。正好体验一下更新之后的变化。

flutter windows desktop

首先,切换到stable channel:

flutter channel stable 

更新

flutter upgrade 

打开Windows、macOS、Linux桌面支持

flutter config --enable-windows-desktop 
flutter config --enable-macos-desktop 
flutter config --enable-linux-desktop 

创建项目

flutter create xxx

已有项目使用

flutter create .

即可重新生成项目。

method channel

使用平台通道在flutter和native本地程序之间进行传递消息。Method channel就是平台通道的api。


PlatformChannels.png

网上和官方能查到的都是关于iOS、Android平台的使用教程,关于flutter windows桌面平台的资料几乎没有,在github上有看到一些issue。内容也不够准确,通过自己的尝试,最后终于找到了方法。
在flutter windows项目目录,找到runner文件夹下的flutter_windows_.cpp,添加如下代码:

#include "flutter/method_channel.h"
#include "flutter/standard_method_codec.h"
void configMethodChannel(flutter::FlutterEngine *engine) {
  const std::string test_channel("com.caidan.yuejuan/scan");
  const flutter::StandardMethodCodec& codec = flutter::StandardMethodCodec::GetInstance();
  flutter::MethodChannel method_channel_(engine->messenger(), test_channel, &codec);
  method_channel_.SetMethodCallHandler([](const auto& call, auto result) {
    std::cout << "Inside method call" << std::endl;
    if (call.method_name().compare("__closeWindow__") == 0) {
      std::cout << "Close window message recieved!" << std::endl;
      result->Success();
    }
    else if (call.method_name().compare("goToNativeScanPage") == 0) {
        std::cout << "goToNativeScanPage!" << std::endl;

        result->Success();
    }
  });
}

在OnCreate方法中,调用configMethodChannel方法即可。
在dart代码中添加调起的方法就不赘述,不知道得可以看官方教程https://flutterchina.club/platform-channels/

参考

  • https://github.com/flutter/flutter/issues#103
  • https://flutterchina.club/platform-channels/

你可能感兴趣的:(Flutter之 windows desktop method channel 本地通信)