Flutter桥接通信插件bridge_connect的使用

Flutter桥接通信插件bridge_connect的使用

Easiest way to make http call

特性

它能够轻松实现:

  1. GET API调用
  2. POST API调用

开始使用

TODO: 列出前提条件并提供或指向如何开始使用该包的信息。

使用方法

你只需要调用静态方法来发起API调用。

var api = "https://countriesnow.space/api/v0.1/countries";
var data = await BridgeConnect.getAPICall(api: api);
log("___data in get api call$data");

额外信息

如需获取更多信息,可以联系我们 https://github.com/SMCCZ


为了帮助你更好地理解 BridgeConnect 插件的使用方法,这里提供一个完整的示例Demo。此Demo将展示如何使用 BridgeConnect 发起GET和POST请求,并处理返回的数据。

完整示例Demo

1. 添加依赖

在你的 pubspec.yaml 文件中添加 bridge_connect 依赖:

dependencies:
  bridge_connect: ^1.0.0

然后运行 flutter pub get 来安装依赖。

2. 创建一个简单的Flutter应用

import 'package:flutter/material.dart';
import 'package:bridge_connect/bridge_connect.dart'; // 引入bridge_connect库
import 'dart:developer' as developer;

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'BridgeConnect Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  [@override](/user/override)
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String _result = "No data yet";

  Future<void> fetchData() async {
    var api = "https://countriesnow.space/api/v0.1/countries";
    try {
      var data = await BridgeConnect.getAPICall(api: api);
      developer.log("___data in get api call$data");
      setState(() {
        _result = data.toString(); // 将返回的数据展示在界面上
      });
    } catch (e) {
      developer.log("Error fetching data: $e");
      setState(() {
        _result = "Failed to fetch data";
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("BridgeConnect Demo"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: fetchData,
              child: Text("Fetch Data"),
            ),
            SizedBox(height: 20),
            Text(_result),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


bridge_connect 是一个用于 Flutter 和原生平台(Android 和 iOS)之间进行通信的插件。它允许你在 Flutter 中调用原生的代码,并在原生代码中调用 Flutter 的代码。这种双向通信在许多场景下非常有用,例如需要使用某些特定平台功能或优化性能时。

以下是 bridge_connect 插件的使用步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 bridge_connect 插件的依赖:

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

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

2. 创建一个桥接类

在 Flutter 中,你需要创建一个类来管理与原生平台的通信。这个类通常会使用 MethodChannel 来发送和接收消息。

import 'package:flutter/services.dart';

class BridgeConnect {
  static const MethodChannel _channel = MethodChannel('bridge_connect');

  // 调用原生方法
  static Future<String?> callNativeMethod(String methodName, [Map<String, dynamic>? arguments]) async {
    try {
      final String? result = await _channel.invokeMethod(methodName, arguments);
      return result;
    } on PlatformException catch (e) {
      print("Failed to call native method: '${e.message}'.");
      return null;
    }
  }

  // 从原生平台接收数据
  static void setMethodCallHandler(Future<void> Function(MethodCall call) handler) {
    _channel.setMethodCallHandler(handler);
  }
}

3. 在 Flutter 中调用原生方法

你可以通过 BridgeConnect.callNativeMethod 来调用原生代码中的方法。

void callNativeFunction() async {
  String? result = await BridgeConnect.callNativeMethod('myNativeMethod', {'key': 'value'});
  print('Result from native: $result');
}

4. 在原生代码中实现方法

接下来,你需要在原生平台(Android 和 iOS)中实现 Flutter 调用的方法。

Android

MainActivity.ktMainActivity.java 中,添加以下代码:

import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel

class MainActivity: FlutterActivity() {
    private val CHANNEL = "bridge_connect"

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)

        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
            when (call.method) {
                "myNativeMethod" -> {
                    val value = call.argument<String>("key")
                    result.success("Received: $value")
                }
                else -> result.notImplemented()
            }
        }
    }
}

iOS

AppDelegate.swift 中,添加以下代码:

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 bridgeChannel = FlutterMethodChannel(name: "bridge_connect",
                                                 binaryMessenger: controller.binaryMessenger)
        bridgeChannel.setMethodCallHandler {
            (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
            if call.method == "myNativeMethod" {
                let value = call.arguments as? [String: Any]
                result("Received: \(value?["key"] as? String ?? "")")
            } else {
                result(FlutterMethodNotImplemented)
            }
        }

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

5. 在原生代码中调用 Flutter 方法

如果你想从原生代码中调用 Flutter 方法,可以使用 MethodChannel 发起调用,并在 Flutter 中设置相应的处理程序。

Flutter 端:

BridgeConnect.setMethodCallHandler((call) async {
  if (call.method == 'callFlutterMethod') {
    var value = call.arguments['key'];
    print('Received from native: $value');
  }
});

Android 端:

val result = channel.invokeMethod("callFlutterMethod", mapOf("key" to "Hello from Android"))

iOS 端:

bridgeChannel.invokeMethod("callFlutterMethod", arguments: ["key": "Hello from iOS"]) { result in
    print(result ?? "No result")
}
回到顶部