SharedPreferences 和数据库:在本机代码中还是在 Flutter 中?

Posted

技术标签:

【中文标题】SharedPreferences 和数据库:在本机代码中还是在 Flutter 中?【英文标题】:SharedPreferences and database: in native code or in Flutter? 【发布时间】:2021-04-26 00:51:15 【问题描述】:

我目前正在将原生 android 音乐应用迁移到 Flutter。此应用依赖于:

共享首选项 一个 SQLite 数据库,目前有 7 个表(我在本机应用程序上使用 Room) 玩家所在的Service

我尝试将尽可能多的代码从原生代码迁移到 Flutter,因为该应用也将在 ios 上可用。

也就是说,Service 部分(及其 iOS 等效项)将使用本机代码编写,因为据我所知,Flutter 中没有等效项。此外,音频播放器已经编写好了(我不会使用另一个),因为它是用于非常特定的用途(它是使用 OpenSL ES 用 C++ 编写的)

该应用在Service 内部 大量使用 SharedPreferences 和数据库。

所以我的问题是:由于应用程序的一部分仍将使用本机代码编写,因此需要操作 SharedPreferences 和数据库中的数据,最好的方法是:我应该创建和操作 SharedPreferences 吗?数据库使用原生代码(Android 和 iOS),还是使用 Flutter?

如果我使用本机代码执行此操作,我将无法利用流(如果我错了,请纠正我) 如果我使用 Flutter 执行此操作,我将不得不从我的本机代码中调用 Dart 代码来请求数据库,我不确定这是一个好习惯...

谢谢。

【问题讨论】:

【参考方案1】:

在您的情况下,您根本不需要任何本机代码。

你可以使用 dart/flutter 包。

要使用 shared Preference,您可以将包添加到您的应用程序中,无需任何其他配置即可在 android 和 IOS 上运行

链接:

https://pub.dev/packages/shared_preferences

DB 部分有多种选择 如果你想要一个 SQL DB,你可以使用 sqflite(不如 ROOM 聪明,但它可以胜任)。

链接:

https://pub.dev/packages/sqflite

如果你想切换到 Nosql DB,我会推荐 Hive: 看看这里:

https://pub.dev/packages/hive

最后,服务取决于您的需求和应用程序的复杂性,但对于音乐应用程序,我认为 audiopLayers 包可以做到: 看这里:

https://pub.dev/packages/audioplayers

请注意: 有些包可能需要一些配置才能工作,比如编辑 androidManifest.xml 或 info.plist 。

【讨论】:

感谢您的帮助,但它没有回答我的问题:我需要 Service,因为我有自己的音频播放器实现,它是使用 OpenSL ES 用 C++ 编写的。那么在这种情况下,最好的选择是什么?

以上是关于SharedPreferences 和数据库:在本机代码中还是在 Flutter 中?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SharedPreferences 系统地存储和获取数据?

Android使用SharedPreferences保存账号密码

Android中SharedPreferences介绍和使用方法

SharedPreferences使用及原理

SharedPreferences用法

android中SharedPreferences和PreferenceActivity的存取数据