gpt4 book ai didi

android - Flutter - 如何在 iOS 上使用 shared_preferences 和 Settings.bundle(Android 又如何?)

转载 作者:IT王子 更新时间:2023-10-29 06:33:28 24 4
gpt4 key购买 nike

所以我们有一个 Flutter 应用程序——它有很多用户偏好。迄今为止,我们一直在使用 shared_preferences 插件来处理它们(就像 Flutter 领域的其他人一样)。生活很幸福。

现在,我们的 iOS 用户希望在我们应用程序的 Settings.app 区域中看到其中一些首选项。目前,只有系统标准的显示。

我们(通过 Xcode)为几个新的首选项创建了一个 Settings.bundle 文件(在添加其他首选项之前)——瞧——我们在应用程序的设置中看到了它们……然而,我们并没有在实际的 Flutter 应用程序中看到它们——我们仍然只看到在应用程序本身内管理的“其他”首选项。

我们基本上是在 Debug模式下“转储”Preferences 键和值..我们看到的都是我们在应用程序中定义的..

所以两个问题:

1) 我们是否遗漏了什么?查看 shared_preferences 的内部代码,它似乎使用了 Settings.bundle 使用的相同“存储”区域。那么为什么我们在应用令人困惑。但我们看到了其他应用。

2) Android 中无需启动应用程序即可设置应用程序首选项的等效方法是什么?我们的偏好之一只有在应用程序启动之前设置才有意义..老实说,我不是一个多产的 Android 开发者..

干杯!

最佳答案

这里是部分答案,仅适用于 iOS。仍然不知道如何在 Android 上处理这个问题(或者如果可能的话)。

如果您想在您的应用程序的“设置”应用程序中设置可查看和可更改的首选项,基本上您需要执行一个额外的步骤。一般的整体步骤是:

-- 像往常一样创建您的 Flutter 首选项。-- 在 iOS 文件夹中创建一个名为“Settings.bundle”的新顶级文件夹。 Runner 文件夹中已有其中一个,但这对我们来说用处不大。

-- 在 Settings.bundle 文件夹中,您需要另一个名为“en.lproj”(或您想要的任何其他语言)的子文件夹。在该子文件夹中,您需要一个名为“Root.strings”的文件。

-- 与 en.lproj 处于同一级别的是另一个名为“Root.plist”的文件。所以结构基本上是这样的:

main_app/
iOS/
...
Settings.bundle/
en.lproj/
Root.strings
Root.plist

根.plist

这里是魔法(大部分)存在的地方。事实证明,flutter 会自动添加前缀“flutter”。您使用的所有首选项名称。这就是 secret 。所以这是 Root.plist 的示例。注意 flutter.XXXX 键名!

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>StringsTable</key>
<string>Root</string>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>Data Location</string>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>Region</string>
<key>Key</key>
<string>flutter.dataSourceRegionV2</string>
<key>DefaultValue</key>
<string>0</string>
<key>Titles</key>
<array>
<string>US/World</string>
<string>EU</string>
<string>Advanced</string>
</array>
<key>Values</key>
<array>
<integer>1</integer>
<integer>2</integer>
<integer>3</integer>
</array>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>Server</string>
<key>Key</key>
<string>flutter.dataSourceServerURLV2</string>
<key>DefaultValue</key>
<string></string>
<key>IsSecure</key>
<false/>
<key>KeyboardType</key>
<string>URL</string>
<key>AutocapitalizationType</key>
<string>None</string>
<key>AutocorrectionType</key>
<string>No</string>
</dict>
</array>
</dict>
</plist>

根字符串

这包含根据语言在应用的设置文件中使用的翻译字符串。这很简单。同样,来自同一个样本:

/* A single strings file, whose title is specified in your preferences schema. The strings files provide the localized content to display to the user for each of your preferences. */

"Data Location" = "Data Location";
"Region" = "Region";
"Server" = "Adv. URL";
"none given" = "none given";
"Authorization" = "Authorization";
"Username" = "Username";
"Password" = "Password";
"Advanced" = "Advanced";
"US/World" = "USA";
"EU" = "European Union";

在您的 Flutter 应用程序中,您使用正常的 shared_preferences用法——只记得删除“flutter”。来自您的应用程序中的前缀。

这是一篇不错的文章的链接,其中包含有关 iOS 设置的更多信息:iOS Settings

希望这可以帮助您解决这个小难题!现在,如果我们能弄清楚 Android!

关于android - Flutter - 如何在 iOS 上使用 shared_preferences 和 Settings.bundle(Android 又如何?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54911044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com