Flutter Tizen平台交互插件tizen_interop_callbacks的使用

Flutter Tizen平台交互插件tizen_interop_callbacks的使用

pub package

一个用于解决错误信息 Cannot invoke native callback outside an isolate 的Flutter插件。

此插件旨在与 tizen_interop 插件一起使用。类似于 tizen_interop,此插件在构建时没有特定的Tizen版本或配置文件依赖。

使用方法

步骤1

在你的 pubspec.yaml 文件中添加此包和 tizen_interop 作为依赖项:

dependencies:
  ffi: ^2.0.1
  tizen_interop: ^0.4.1
  tizen_interop_callbacks: ^0.3.1

步骤2

在Dart代码中导入这些包:

import 'dart:ffi';
import 'package:tizen_interop/6.0/tizen.dart';
import 'package:tizen_interop_callbacks/tizen_interop_callbacks.dart';

步骤3

实例化 TizenInteropCallbacks 类。这应该在根隔离区中完成 - 即调用 main() 的线程。

final callbacks = TizenInteropCallbacks();

步骤4

在Dart中实现回调并将其注册到 TizenInteropCallbacks 中:

// 注册一个回调函数
final callback = _callbacks.register<Void Function(Int32, Pointer<Void>, Pointer<Void>)>(
  'device_changed_cb',
  Pointer.fromFunction(_batteryChanged),
);

// 实现回调函数
void _batteryChanged(int arg1, Pointer<Void> arg2, Pointer<Void> arg3) {
  // 在这里处理回调逻辑
}

注意,Pointer.fromFunction() 函数用于将Dart函数转换为C函数指针。这里的 device_changed_cb 是你需要注册的回调类型。

步骤5

将获取到的回调指针和用户数据传递给Native API函数:

// 调用Native API函数
final ret = tizen.device_add_callback(
  device_callback_e.DEVICE_CALLBACK_BATTERY_CAPACITY,
  callback.interopCallback,
  callback.interopUserData,
);

警告 interopCallbackinteropUserData 必须同时传递。回调处理实现依赖于 interopUserData。只有少数几个回调不接受 user_data 参数。

完整示例

以下是一个完整的示例,展示了如何使用 tizen_interop_callbacks 插件:

// Copyright 2023 Samsung Electronics Co., Ltd. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/material.dart';

import 'battery.dart';
import 'preview_resolutions.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: DefaultTabController(
        length: 2,
        child: Scaffold(
          appBar: AppBar(
            title: const Text('Tizen Interop Callbacks Example'),
            bottom: const TabBar(tabs: [
              Tab(icon: Icon(Icons.battery_charging_full)),
              Tab(icon: Icon(Icons.camera)),
            ]),
          ),
          body: const TabBarView(children: [
            BatteryTab(),
            PreviewResolutionsTab(),
          ]),
        ),
      ),
    );
  }
}

更多关于Flutter Tizen平台交互插件tizen_interop_callbacks的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Tizen平台交互插件tizen_interop_callbacks的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


tizen_interop_callbacks 是 Flutter 与 Tizen 平台进行交互的一个插件,它允许你在 Flutter 应用中调用 Tizen 平台的本地功能,并处理回调。这个插件的主要用途是在 Flutter 和 Tizen 之间进行双向通信,尤其是在需要调用 Tizen 特定的 API 或功能时。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 tizen_interop_callbacks 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  tizen_interop_callbacks: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装插件。

使用 tizen_interop_callbacks

1. 初始化插件

在 Flutter 应用的 main.dart 文件中,初始化插件:

import 'package:flutter/material.dart';
import 'package:tizen_interop_callbacks/tizen_interop_callbacks.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
    TizenInteropCallbacks.initialize();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Tizen Interop Callbacks Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            _callTizenFunction();
          },
          child: Text('Call Tizen Function'),
        ),
      ),
    );
  }

  void _callTizenFunction() async {
    try {
      // 调用 Tizen 平台的函数
      var result = await TizenInteropCallbacks.callTizenFunction('your_function_name', {'param1': 'value1'});
      print('Result from Tizen: $result');
    } catch (e) {
      print('Error calling Tizen function: $e');
    }
  }
}

2. 在 Tizen 平台实现函数

在 Tizen 平台,你需要实现一个函数来处理 Flutter 的调用。这个函数可以通过 tizen_interop_callbacks 插件注册,并在 Flutter 中调用。

#include <flutter/plugin_registry.h>
#include <flutter/method_channel.h>

void your_tizen_function(const flutter::MethodCall<flutter::EncodableValue>& method_call,
                         std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
    auto arguments = std::get<flutter::EncodableMap>(*method_call.arguments());
    auto param1 = std::get<std::string>(arguments[flutter::EncodableValue("param1")]);

    // 处理逻辑
    std::string response = "Received: " + param1;

    // 返回结果
    result->Success(flutter::EncodableValue(response));
}

void RegisterPlugins(flutter::PluginRegistry* registry) {
    auto channel = std::make_unique<flutter::MethodChannel<flutter::EncodableValue>>(
        registry->messenger(), "your_channel_name", &flutter::StandardMethodCodec::GetInstance());
    channel->SetMethodCallHandler(your_tizen_function);
}

3. 在 Flutter 中处理回调

在 Flutter 中,你可以通过 TizenInteropCallbacks 插件调用 Tizen 平台的函数,并处理返回的结果。

void _callTizenFunction() async {
  try {
    var result = await TizenInteropCallbacks.callTizenFunction('your_function_name', {'param1': 'value1'});
    print('Result from Tizen: $result');
  } catch (e) {
    print('Error calling Tizen function: $e');
  }
}
回到顶部