Flutter数据通信插件flutter_channel_json的使用

flutter_channel_json是一个用于标准化 Flutter 方法通道数据传输格式的插件,通常与 fluent_channel_event_bus`一起使用。

添加依赖

pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter_channel_json: ^版本号

然后执行以下命令以安装依赖:

flutter pub get

如何使用它?

Dart

首先,在 Dart 文件中导入插件:

import 'package:flutter_channel_json/flutter_channel_json.dart';

默认初始化

const json = FlutterChannelJson(
  code: 300,
  message: 'message',
  success: false,
  data: 2,
);

根据字典初始化

final json = FlutterChannelJson.fromJson({
  'code': 300,
  'message': 'message',
  'data': 2,
  'success': false,
});

基于 JSON 字符串初始化

final json = FlutterChannelJson.fromJsonString(
  '{"code": 300, "message": "message", "data": 2, "success": false}',
);

将对象转换为字典

final json = const FlutterChannelJson(
  code: 300,
  message: 'message',
  success: false,
  data: 2,
).toJson();

将对象转换为字符串

final json = const FlutterChannelJson(
  code: 300,
  message: 'message',
  success: false,
  data: 2,
).toJsonString();

初始化成功类型

final json = FlutterChannelJson.success(2);

初始化失败类型

final json = FlutterChannelJson.failure('message');

Swift

默认初始化

let json = FlutterChannelJson(code: 300,
                              message: "message",
                              data: 2,
                              success: false)

初始化成功类型

let json = FlutterChannelJson(success: 2)

初始化失败类型

let json = FlutterChannelJson(failure: "message", code: 300)

根据字典初始化

let json = FlutterChannelJson<Int>(json: ["code": 300,
                                          "message": "message",
                                          "data": 2,
                                          "success": false])

基于 JSON 字符串初始化

let json = try? FlutterChannelJson<Int>(jsonString: "{\"code\":300,\"message\":\"message\",\"data\":2,\"success\":false}")

对象转 JSON 字符串

let json = FlutterChannelJson(code: 300,
                              message: "message",
                              data: 2,
                              success: false)
let jsonString = json.toJsonString()

对象转字典

let json = FlutterChannelJson(code: 300,
                              message: "message",
                              data: 2,
                              success: false)
let jsonMap = json.toJson()

Kotlin

默认初始化

val json = FlutterChannelJson(code = 300, message = "message", data = 2, success = false)

初始化成功类型

val json = FlutterChannelJson(data = 2)

初始化失败类型

val json = FlutterChannelJson<Int>(message = "message")

基于 JSON 字符串初始化

val json = FlutterChannelJson(jsonString = "{\"code\":300,\"message\":\"message\",\"data\":2,\"success\":false}", Int::class.java)

根据字典初始化

val map: Map<String, Any> = mapOf("code" to 300, "message" to "message", "data" to 2, "success" to false)
val json = FlutterChannelJson<Int>(json = map)

对象转 JSON 字符串

val json = FlutterChannelJson(code = 300, message = "message", data = 2, success = false).toJsonString()

对象转字典

val json = FlutterChannelJson(code = 300, message = "message", data = 2, success = false)
val map = json.toJson()

完整示例 Demo

以下是一个完整的 Flutter 示例代码,展示如何使用 flutter_channel_json 插件进行数据通信。

示例代码

// main.dart
import 'package:flutter/material.dart';
import 'package:flutter_channel_json/flutter_channel_json.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('flutter_channel_json 示例')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () {
                  // 初始化 JSON 数据
                  final json = FlutterChannelJson.success(2);
                  print('Success JSON: $json');

                  // 转换为字典
                  final jsonData = json.toJson();
                  print('JSON to Map: $jsonData');

                  // 转换为字符串
                  final jsonString = json.toJsonString();
                  print('JSON to String: $jsonString');
                },
                child: Text('发送成功数据'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () {
                  // 初始化 JSON 数据
                  final json = FlutterChannelJson.failure('请求失败');
                  print('Failure JSON: $json');

                  // 转换为字典
                  final jsonData = json.toJson();
                  print('JSON to Map: $jsonData');

                  // 转换为字符串
                  final jsonString = json.toJsonString();
                  print('JSON to String: $jsonString');
                },
                child: Text('发送失败数据'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

运行效果

运行上述代码后,点击按钮将分别打印成功和失败的 JSON 数据,并将其转换为字典和字符串。以下是控制台输出示例:

Success JSON: FlutterChannelJson(success: true, code: null, message: null, data: 2)
JSON to Map: {success: true, data: 2}
JSON to String: {"success":true,"data":2}

Failure JSON: FlutterChannelJson(success: false, code: 300, message: 请求失败, data: null)
JSON to Map: {success: false, code: 300, message: 请求失败}
JSON to String: {"success":false,"code":300,"message":"请求失败"}

更多关于Flutter数据通信插件flutter_channel_json的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据通信插件flutter_channel_json的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_channel_json 是一个用于在 Flutter 和原生平台(如 Android 和 iOS)之间进行数据通信的插件。它允许你通过 JSON 格式的数据在 Flutter 和原生代码之间传递信息。以下是如何使用 flutter_channel_json 的基本步骤:

1. 添加依赖

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

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

然后运行 flutter pub get 来获取依赖。

2. 在 Flutter 中调用原生代码

2.1 初始化插件

在你的 Flutter 代码中,首先需要初始化 flutter_channel_json 插件:

import 'package:flutter_channel_json/flutter_channel_json.dart';

final channel = FlutterChannelJson();

2.2 发送数据到原生平台

你可以使用 invokeMethod 方法发送 JSON 数据到原生平台:

void sendDataToNative() async {
  final response = await channel.invokeMethod('methodName', {
    'key1': 'value1',
    'key2': 'value2',
  });
  print('Response from native: $response');
}

methodName 是你在原生代码中定义的方法名,{'key1': 'value1', 'key2': 'value2'} 是你要传递的 JSON 数据。

2.3 接收原生平台的响应

invokeMethod 方法会返回一个 Future,你可以通过它来接收原生平台的响应。

3. 在原生平台中处理数据

3.1 Android 端

在 Android 端,你需要在 MainActivity 中处理 Flutter 发送过来的数据。

import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.embedding.android.FlutterActivity;

public class MainActivity extends FlutterActivity {
    private static final String CHANNEL = "your_channel_name";

    @Override
    public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);

        new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL).setMethodCallHandler(
                new MethodCallHandler() {
                    @Override
                    public void onMethodCall(MethodCall call, Result result) {
                        if (call.method.equals("methodName")) {
                            // 处理 Flutter 发送过来的数据
                            String key1 = call.argument("key1");
                            String key2 = call.argument("key2");

                            // 返回响应给 Flutter
                            result.success("Response from Android");
                        } else {
                            result.notImplemented();
                        }
                    }
                });
    }
}

3.2 iOS 端

在 iOS 端,你需要在 AppDelegate 中处理 Flutter 发送过来的数据。

import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
    override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
        let channel = FlutterMethodChannel(name: "your_channel_name",
                                              binaryMessenger: controller.binaryMessenger)
        channel.setMethodCallHandler({
            (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
            if call.method == "methodName" {
                // 处理 Flutter 发送过来的数据
                let key1 = call.arguments["key1"] as? String
                let key2 = call.arguments["key2"] as? String

                // 返回响应给 Flutter
                result("Response from iOS")
            } else {
                result(FlutterMethodNotImplemented)
            }
        })

        GeneratedPluginRegistrant.register(with: self)
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
    }
}

4. 处理复杂数据结构

flutter_channel_json 支持传递复杂的 JSON 数据结构。你可以在 Flutter 和原生平台之间传递嵌套的 JSON 对象、数组等。

5. 错误处理

在 Flutter 中,你可以使用 try-catch 来捕获原生平台返回的错误:

void sendDataToNative() async {
  try {
    final response = await channel.invokeMethod('methodName', {
      'key1': 'value1',
      'key2': 'value2',
    });
    print('Response from native: $response');
  } catch (e) {
    print('Error: $e');
  }
}
回到顶部