Flutter数据交换插件json_bridge的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter数据交换插件 json_bridge 的使用

json_bridge 是一个强大、灵活且易于使用的 JSON 文件管理器,适用于 Dart 和 Flutter 应用。它允许你轻松地存储和检索 JSON 文件中的数据,并支持跨多个平台使用。

兼容性

  • SDK: >=2.14.0 <3.0.0
  • Flutter: >=2.10.0

支持的平台:

支持 Android iOS Linux macOS Windows
JSONBridge ✔️ ✔️ ✔️ ✔️ ✔️

为什么你应该尝试?

  • 存储和检索数据:允许你在应用中存储和检索 JSON 文件中的数据。
  • 灵活的文件存储位置:JSON 文件可以存储在应用文档目录或你提供的任何目录中。
  • 支持嵌套键操作:支持使用点分隔符来操作嵌套键。
  • 多种用途:可用于存储用户偏好设置、应用程序数据等。

开始使用

1. 添加依赖

pubspec.yaml 文件中添加 json_bridge 依赖:

dependencies:
  json_bridge: ^latest_version

请将 ^latest_version 替换为最新版本号。

2. 导入包

在你的 Dart 文件中导入 json_bridge 包:

import 'package:json_bridge/json_bridge.dart';

3. 初始化包

初始化 JSONBridge 实例:

JSONBridge jsonBridge = JSONBridge()..init(fileName: 'config', dir: 'test');

4. 使用包

4.1 写入一个 Map 到 JSON 文件

注意:使用 write 方法会覆盖整个文件内容。如果只想添加新的键值对,请使用 set 方法。

jsonBridge.write({
  'name': 'John Doe',
  'age': 25,
  'address': {
    'street': 'Main Street',
    'city': 'New York',
    'country': 'USA'
  }
});

结果将会是:

{
  "name": "John Doe",
  "age": 25,
  "address": {
    "street": "Main Street",
    "city": "New York",
    "country": "USA"
  }
}

4.2 清空 JSON 文件并删除它

jsonBridge.clear();

4.3 读取 JSON 文件的所有内容

Map<String, dynamic> dataFromJsonBridge = jsonBridge.read();

4.4 添加一个新的 JSON 对象

jsonBridge.set('preferences', {
  'dark': true,
  'receive_notification': false,
  'show_update_notification': true,
});

JSON 文件现在应该包含:

{
  "name": "John Doe",
  "age": 25,
  "address": {
    "street": "Main Street",
    "city": "New York",
    "country": "USA"
  },
  "preferences": {
    "dark": true,
    "receive_notification": false,
    "show_update_notification": true
  }
}

4.5 更新嵌套的键/值对

例如,更新暗模式偏好设置为 false

jsonBridge.set('preferences.dark', false);

更新后的 JSON 文件:

{
  "name": "John Doe",
  "age": 25,
  "address": {
    "street": "Main Street",
    "city": "New York",
    "country": "USA"
  },
  "preferences": {
    "dark": false,
    "receive_notification": false,
    "show_update_notification": true
  }
}

4.6 获取一个值

可以通过点分隔符访问嵌套键:

String name = jsonBridge.get('name'); // John Doe
int age = jsonBridge.get('age'); // 25
String street = jsonBridge.get('address.street'); // Main Street
bool dark = jsonBridge.get('preferences.dark'); // false

4.7 删除一个键

jsonBridge.delete('preferences.show_update_notification');

4.8 检查键是否存在

bool exists = jsonBridge.exists('preferences.dark'); // true
bool notExists = jsonBridge.exists('iKnowThisKeyDoesNotExist'); // false

示例 Demo

以下是一个完整的 Flutter 示例项目,展示了如何使用 json_bridge 插件进行数据交换。

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  JSONBridge jsonBridge = JSONBridge()..init(fileName: 'config', dir: 'test');

  void _initializeData() async {
    await jsonBridge.write({
      'name': 'John Doe',
      'age': 25,
      'address': {
        'street': 'Main Street',
        'city': 'New York',
        'country': 'USA'
      }
    });
  }

  void _updateDarkMode(bool value) {
    jsonBridge.set('preferences.dark', value);
  }

  void _getDarkMode() {
    bool dark = jsonBridge.get('preferences.dark');
    print('Dark mode is set to: $dark');
  }

  [@override](/user/override)
  void initState() {
    super.initState();
    _initializeData();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('JSON Bridge Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () => _updateDarkMode(true),
              child: Text('Enable Dark Mode'),
            ),
            ElevatedButton(
              onPressed: () => _updateDarkMode(false),
              child: Text('Disable Dark Mode'),
            ),
            ElevatedButton(
              onPressed: _getDarkMode,
              child: Text('Get Dark Mode Preference'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用json_bridge插件进行数据交换的代码案例。json_bridge插件允许你在Flutter和原生代码(iOS/Android)之间进行JSON格式的数据通信。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  json_bridge: ^x.y.z  # 请替换为最新的版本号

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

2. 配置原生代码

iOS 配置

ios/Runner/Info.plist文件中,添加权限配置(如果需要的话),并确保你的iOS项目已经正确配置了Flutter环境。

Android 配置

android/app/src/main/AndroidManifest.xml文件中,添加必要的权限(如果需要的话),并确保你的Android项目已经正确配置了Flutter环境。

3. 使用json_bridge进行通信

Flutter 端代码

在你的Dart代码中,导入json_bridge包,并使用它来进行数据通信。

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final JsonBridge _jsonBridge = JsonBridge();

  @override
  void initState() {
    super.initState();

    // 监听从原生代码发送过来的数据
    _jsonBridge.addListener((String message) {
      print('Received from native: $message');
      // 这里可以更新UI或处理数据
    });

    // 向原生代码发送数据
    _sendDataToNative();
  }

  void _sendDataToNative() {
    Map<String, dynamic> data = {
      'key1': 'value1',
      'key2': 123,
    };
    _jsonBridge.send(jsonEncode(data));
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter JsonBridge Example'),
        ),
        body: Center(
          child: Text('Check the console for messages from native code.'),
        ),
      ),
    );
  }
}

原生代码端(iOS)

ios/Runner/AppDelegate.swift中配置json_bridge,监听和发送数据。

import UIKit
import Flutter
import json_bridge  // 确保已经正确导入json_bridge模块

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
    
    // 监听来自Flutter的数据
    let jsonBridge = JsonBridge()
    jsonBridge.addListener { (message: String) in
      print("Received from Flutter: \(message)")
      
      // 处理数据或向Flutter发送数据
      if let data = try? JSONSerialization.data(withJSONObject: ["response": "Hello from iOS"], options: []) {
        let jsonString = String(data: data, encoding: .utf8)!
        jsonBridge.send(jsonString)
      }
    }
    
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

原生代码端(Android)

android/app/src/main/kotlin/.../MainActivity.kt(或Java对应的文件)中配置json_bridge,监听和发送数据。

package com.example.yourappname

import android.os.Bundle
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import com.github.penggle.jsonbridge.JsonBridgePlugin

class MainActivity: FlutterActivity() {
    private val CHANNEL = "com.example.yourappname/json_bridge"

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        
        // 设置JsonBridge插件
        val jsonBridgePlugin = JsonBridgePlugin()
        flutterEngine.getDartExecutor().binaryMessenger.registerReceiver(
            jsonBridgePlugin.receiver, CHANNEL
        )
        
        // 监听来自Flutter的数据
        MethodChannel(flutterEngine.getDartExecutor().binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
            if (call.method == "sendToNative") {
                val message = call.argument<String>("message")
                println("Received from Flutter: $message")
                
                // 处理数据或向Flutter发送数据
                val response = mapOf("response" to "Hello from Android")
                val jsonString = org.json.JSONObject(response).toString()
                jsonBridgePlugin.send(jsonString)
                result.success(null)
            } else {
                result.notImplemented()
            }
        }
    }
}

请注意,上面的Android代码是基于Kotlin的,如果你使用的是Java,则需要相应地调整代码结构。

这个示例展示了如何在Flutter和原生代码之间使用json_bridge插件进行简单的数据通信。根据实际需求,你可能需要调整代码以适应具体的业务逻辑。

回到顶部