Flutter高性能键值存储插件mmkv_ios的使用
mmkv_ios #
这是 MMKV
的 iOS 实现细节。
使用 #
切勿单独使用。它不是完整的 MMKV 功能集。它只是提供 MMKV 所需的 FFI 实现。
此包是 官方推荐的插件,这意味着您可以直接使用 mmkv
。
当您这样做时,此包将自动包含在您的应用中,因此您无需将其添加到您的 pubspec.yaml
中。
但是,如果您导入此包以直接使用其任何 API,则应像往常一样将其添加到您的 pubspec.yaml
中。
示例 #
以下是一个完整的示例演示如何使用 Flutter 高性能键值存储插件 mmkv_ios。
设置 #
首先,在您的 pubspec.yaml
文件中添加 mmkv
依赖:
dependencies:
mmkv: ^0.1.0
初始化 #
在您的应用中初始化 MMKV:
import 'package:mmkv/mmkv.dart';
void main() {
// 初始化 MMKV
Mmkv.init();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}
写入数据 #
将数据写入 MMKV:
import 'package:mmkv/mmkv.dart';
void writeData() async {
// 写入字符串
await Mmkv.setString(‘name’, ‘John Doe’);
// 写入整数
await Mmkv.setInt(‘age’, 25);
// 写入布尔值
await Mmkv.setBool(‘isStudent’, true);
}
读取数据 #
从 MMKV 读取数据:
import 'package:mmkv/mmkv.dart';
void readData() async {
// 读取字符串
String name = await Mmkv.getString(‘name’) ?? ‘Unknown’;
print(‘Name: $name’);
// 读取整数
int age = await Mmkv.getInt(‘age’) ?? 0;
print(‘Age: $age’);
// 读取布尔值
bool isStudent = await Mmkv.getBool(‘isStudent’) ?? false;
print(‘Is Student: $isStudent’);
}
删除数据 #
从 MMKV 删除数据:
import 'package:mmkv/mmkv.dart';
void deleteData() async {
// 删除特定键的值
await Mmkv.remove(‘name’);
// 清除所有数据
await Mmkv.clear();
}
完整示例 #
以下是完整的示例代码,展示了如何初始化 MMKV 并进行读写操作:
import 'package:flutter/material.dart';
import 'package:mmkv/mmkv.dart';
void main() {
// 初始化 MMKV
Mmkv.init();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final TextEditingController _nameController = TextEditingController();
final TextEditingController _ageController = TextEditingController();
final TextEditingController _studentController = TextEditingController();
@override
void dispose() {
_nameController.dispose();
_ageController.dispose();
_studentController.dispose();
super.dispose();
}
void _writeData() async {
String name = _nameController.text;
int age = int.parse(_ageController.text);
bool isStudent = _studentController.text.toLowerCase() == ‘true’;
await Mmkv.setString('name', name);
await Mmkv.setInt('age', age);
await Mmkv.setBool('isStudent', isStudent);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Data written successfully')),
);
}
void _readData() async {
String name = await Mmkv.getString(‘name’) ?? ‘Unknown’;
int age = await Mmkv.getInt(‘age’) ?? 0;
bool isStudent = await Mmkv.getBool(‘isStudent’) ?? false;
setState(() {
_nameController.text = name;
_ageController.text = age.toString();
_studentController.text = isStudent.toString();
});
}
void _deleteData() async {
await Mmkv.remove(‘name’);
await Mmkv.clear();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Data deleted successfully')),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(‘MMKV Example’)),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
TextField(controller: _nameController, decoration: InputDecoration(labelText: ‘Name’)),
TextField(controller: _ageController, decoration: InputDecoration(labelText: ‘Age’)),
TextField(controller: _studentController, decoration: InputDecoration(labelText: ‘Is Student (true/false)’)),
SizedBox(height: 20),
ElevatedButton(onPressed: _writeData, child: Text(‘Write Data’)),
ElevatedButton(onPressed: _readData, child: Text(‘Read Data’)),
ElevatedButton(onPressed: _deleteData, child: Text(‘Delete Data’)),
],
),
),
);
}
}
更多关于Flutter高性能键值存储插件mmkv_ios的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter高性能键值存储插件mmkv_ios的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用高性能键值存储插件mmkv_ios
的代码示例。请注意,mmkv_ios
主要用于iOS平台,而Flutter的跨平台项目通常会使用一个同时支持Android和iOS的插件,如mmkv_flutter
。不过,这里为了符合你的要求,我们将专注于mmkv_ios
在iOS平台上的使用。
首先,确保你的Flutter项目已经创建,并且你已经在ios/
目录下打开了Xcode项目。
1. 添加依赖
由于mmkv_ios
是一个iOS原生插件,你需要在Xcode中直接添加它,而不是在pubspec.yaml
中。打开Xcode,然后按照以下步骤操作:
- 选择你的项目目标(在Xcode的左侧项目导航栏中)。
- 转到“General”标签页。
- 向下滚动到“Frameworks, Libraries, and Embedded Content”部分。
- 点击“+”按钮,添加
MMKV.framework
(你可能需要先下载或构建这个框架)。
2. 配置桥接
为了从Flutter代码中调用iOS原生代码,你需要创建一个MethodChannel
。虽然mmkv_ios
本身不提供Flutter插件封装,但你可以自己封装一个。以下是如何在Flutter和iOS之间建立通信的示例。
Flutter端代码
在lib/
目录下创建一个新的Dart文件,比如mmkv_service.dart
:
import 'package:flutter/services.dart';
class MMKVService {
static const MethodChannel _channel = MethodChannel('com.example.mmkv_service');
static Future<void> saveValue(String key, String value) async {
try {
await _channel.invokeMethod('saveValue', <String, String>{
'key': key,
'value': value,
});
} on PlatformException catch (e) {
print("Failed to save value: '${e.message}'.");
}
}
static Future<String?> getValue(String key) async {
try {
final Map<String, dynamic> result = await _channel.invokeMapMethod('getValue', <String, String>{
'key': key,
});
return result['value'] as String?;
} on PlatformException catch (e) {
print("Failed to get value: '${e.message}'.");
return null;
}
}
}
iOS端代码
在Xcode中,打开AppDelegate.swift
(或你用于处理Flutter平台通道的文件),并添加以下代码:
import UIKit
import Flutter
import MMKV // 确保你已经导入了MMKV框架
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
// 初始化MMKV(这里假设你有一个默认的MMKV实例)
MMKV.default().initialize()
// 注册MethodChannel
let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
let channel = FlutterMethodChannel(name: "com.example.mmkv_service", binaryMessenger: controller.binaryMessenger)
channel.setMethodCallHandler({
(call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
if call.method == "saveValue" {
guard let arguments = call.arguments as? [String: String],
let key = arguments["key"],
let value = arguments["value"] else {
result(FlutterError(code: "INVALID_ARGUMENT", message: "Invalid argument passed", details: nil))
return
}
MMKV.default().setString(value, forKey: key)
result(nil)
} else if call.method == "getValue" {
guard let arguments = call.arguments as? [String: String],
let key = arguments["key"] else {
result(FlutterError(code: "INVALID_ARGUMENT", message: "Invalid argument passed", details: nil))
return
}
if let value = MMKV.default().string(forKey: key) {
result(["value": value])
} else {
result(["value": nil])
}
} else {
result(FlutterMethodNotImplementedError(methodName: call.method))
}
})
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
3. 使用服务
现在,你可以在你的Flutter应用中使用MMKVService
来存储和检索键值对:
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('MMKV Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
await MMKVService.saveValue('testKey', 'testValue');
print('Value saved');
},
child: Text('Save Value'),
),
ElevatedButton(
onPressed: () async {
final String? value = await MMKVService.getValue('testKey');
print('Retrieved Value: $value');
},
child: Text('Retrieve Value'),
),
],
),
),
),
);
}
}
这个示例展示了如何在Flutter应用中通过MethodChannel与iOS原生的MMKV进行交互。请注意,mmkv_ios
本身可能不包含Flutter插件支持,因此上述代码是一种手动封装的方法。对于生产环境,建议使用官方或社区维护的跨平台插件,如mmkv_flutter
,以确保更好的兼容性和维护性。