在swift中创建一个Flutter插件来导出领域数据



我们有一个原生iOS应用,它有一个Realm数据库。现在我们开发了一个新的Flutter应用程序,它将替代原生iOS应用程序。当用户将原生iOS应用程序升级到新的Flutter应用程序时,我们希望将现有Realm数据库的内容迁移到新的Sqflite数据库中。

我们已经创建了一个Flutter插件与swift导出Realm数据到json. 目前,我们能够在插件中添加RealmSwift依赖项,但是当我们运行下面的代码时,它会抛出Cannot find 'DeviceModel' in scope

任何想法从DeviceModel表获得所有行?要做到这一点,有必要手动添加一些Realm模式吗?

import Flutter
import UIKit
import RealmSwift
enum PluginError: Error {
case notImplemented
}
public class SwiftRealmToJsonPlugin: NSObject, FlutterPlugin {
public static func register(with registrar: FlutterPluginRegistrar) {
let channel = FlutterMethodChannel(name: "realm_to_json", binaryMessenger: registrar.messenger())
let instance = SwiftRealmToJsonPlugin()
registrar.addMethodCallDelegate(instance, channel: channel)
}
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
switch call.method {
case "getPlatformVersion":
result("iOS " + UIDevice.current.systemVersion)
case "realmInfoExist":
result(check_data())
default:
result(FlutterMethodNotImplemented)
}
}
// check if Realm exists
func check_data() -> Bool {
let realm = try! Realm()
let devices = realm.objects(DeviceModel.self)
}
}

解决方案是:

  • 将插件语言从Swift更改为Objective-C,并复制粘贴所有Realm模型。
  • 在每个模型类中实现一个方法,用它的数据生成字典。
  • 导出字典到json.

现在我们可以将Realm信息导出为json格式。下一步是实现迁移逻辑,使无表结构适应sql。

感谢@Jay给我指出了解决问题的好方向。

最新更新