Flutter数据交换插件json_bridge的使用
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
更多关于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
插件进行简单的数据通信。根据实际需求,你可能需要调整代码以适应具体的业务逻辑。