Flutter C++插件:Linux桌面应用开发

本文介绍了如何在Flutter插件中添加Linux支持,特别是为Linux桌面应用开发一维码和二维码插件。作者分享了从下载Flutter插件到使用Dart和C++进行开发的步骤,包括在统信UOS上进行开发,配置库文件,处理数据类型转换,以及在C++中实现Dart接口。还提供了视频教程和源码链接供进一步学习。
摘要由CSDN通过智能技术生成

我的Flutter一维码,二维码插件已经支持Android,Windows和Web。这篇文章继续添加新的平台:Linux。

Flutter插件下载

https://pub.dev/packages/flutter_barcode_sdk

学习资源

  • https://flutter.dev/desktop
  • https://github.com/google/flutter-desktop-embedding
  • https://github.com/flutter/samples/tree/master/experimental/desktop_photo_search

使用Dart和C++开发Flutter Linux插件

要开发Linux插件,需要把开发平台切换到Linux。我使用统信UOS。

在当前的插件项目中添加Linux插件的模板:

flutter create --template=plugin --platforms=linux .

命令执行之后会生成如下的目录结构:

- include/
- CMakeLists.txt
- flutter_barcode_sdk_plugin.cc

接下来创建一个lib目录。把下载的Dynamsoft Barcode Reader C++ 压缩包里的*.so库文件拷贝到目录中。然后在CMakeLists.txt中配置link_directories, target_link_librariesflutter_barcode_sdk_bundled_libraries

cmake_minimum_required(VERSION 3.10)
set(PROJECT_NAME "flutter_barcode_sdk")
project(${PROJECT_NAME} LANGUAGES CXX)

# This value is used when generating builds using this plugin, so it must
# not be changed
set(PLUGIN_NAME "flutter_barcode_sdk_plugin")

link_directories("${PROJECT_SOURCE_DIR}/bin/") 

add_library(${PLUGIN_NAME} SHARED
  "flutter_barcode_sdk_plugin.cc"
)
apply_standard_settings(${PLUGIN_NAME})
set_target_properties(${PLUGIN_NAME} PROPERTIES
  CXX_VISIBILITY_PRESET hidden)
target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL)
target_include_directories(${PLUGIN_NAME} INTERFACE
  "${CMAKE_CURRENT_SOURCE_DIR}/include")

target_link_libraries(${PLUGIN_NAME} PRIVATE flutter "DynamsoftBarcodeReader")
target_link_libraries(${PLUGIN_NAME} PRIVATE PkgConfig::GTK)

# List of absolute paths to libraries that should be bundled with the plugin
set(flutter_barcode_sdk_bundled_libraries
  "${PROJECT_SOURCE_DIR}/lib/"
  PARENT_SCOPE
)

到此,动态链接库的编译链接已经没有问题了,开始写C++代码。打开flutter_barcode_sdk_plugin.cc找到flutter_barcode_sdk_plugin_handle_method_call()函数。这里是Dart通向C++的入口。我们先构造基本的接口名判断代码:

static void flutter_barcode_sdk_plugin_handle_method_call(
    FlutterBarcodeSdkPlugin* self,
    FlMethodCall* method_call) {
   
  g_autoptr(FlMethodResponse) response = nullptr;

  const gchar* method = fl_method_call_get_name(method_call);
  FlValue* args = fl_method_call_get_args(method_call);

  if (strcmp(method, "getPlatformVersion") == 0) {
   
    struct utsname uname_data = {
   };
    uname(&uname_data);
    g_autofree gchar *version = g_strdup_printf("Linux %s. Dynamsoft Barcode Reader version: %s", uname_data.version, self->manager->GetVersion());
    g_autoptr(FlValue) result = fl_value_new_string(version);
    response = FL_METHOD_RESPONSE(fl_method_success_response_new(result));
  } 
  else if (strcmp(method
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值