2

在使用带有 Flutter SDK 的 Android Studio 构建应用程序时,我决定获取 shared_preferences 插件并使用它。不久之后,我注意到虽然该应用程序在我的 Android 设备上运行良好,但它无法在模拟器上运行。为了找出解决方案,我尝试直接从 Xcode 运行它,但同样失败了。

出现错误后,我打开了 GeneratedPluginRegistrant.m 文件,其中编辑器只是说“找不到 shared_preferences/SharedPreferencesPlugin.h 文件”

flutter doctor在终端中运行不会提供任何有用的信息,运行pod install也无济于事。

我也尝试添加 FlutterFire 插件,它们都产生相同的结果。

任何帮助表示赞赏!

4

3 回答 3

4

我认为这是一个已知问题https://github.com/flutter/flutter/issues/15099#issuecomment-372375566

要将#15437中的修复应用到修复落地之前创建的基于 Swift 的 Flutter 项目,请将 [这些行] 添加到ios/Podfile.

我认为这意味着https://github.com/mravn-google/flutter/blob/e0c73220a6f69d341ce436244212277d83bc189b/packages/flutter_tools/templates/cocoapods/Podfile-swift#L70-L73

 # workaround for https://github.com/CocoaPods/CocoaPods/issues/7463
 target.headers_build_phase.files.each do |file|
   file.settings = { 'ATTRIBUTES' => ['Public'] }
 end
于 2018-03-14T10:08:25.743 回答
1

我在我的 iOS 版 Flutter 应用程序中也遇到了这个问题很多天,并且已经完成了这里和 github 中解释的几乎所有事情。

我的解决方案是(1)在“flutter upgrade”调用“flutter run”之后(您还必须运行模拟器或附加设备才能正确执行此命令)和(2)在通过命令行成功构建应用程序之后,提到在上面,关闭它并使用 Xcode 通过 Product -> Build 以常规方式构建。

于 2019-02-10T22:22:14.970 回答
0

Shared Preference的概念是特定于 android 的,在 iOS 中不可用。如果你想保存一些东西,我建议你使用Flutter中的Method Channel(Platform Channel)将它发送到原生层并保存。

对于 iOS,使用userDefaults来保存您的数据。

附加信息:

如何使用共享首选项保存数据?

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();

editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString("key_name", "string value"); // Storing string
editor.putInt("key_name", "int value"); // Storing integer
editor.putFloat("key_name", "float value"); // Storing float
editor.putLong("key_name", "long value"); // Storing long

editor.commit(); // Don't forget to commit when your changes are done.

检索数据

// returns stored preference value
// If value is not present return second param value - In this case null
pref.getString("key_name", null); // getting String
pref.getInt("key_name", null); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean

如何使用 userDefaults 保存数据?

NSString *valueToSave = @"someValue";
[[NSUserDefaults standardUserDefaults] setObject:valueToSave 
forKey:@"preferenceName"];
[[NSUserDefaults standardUserDefaults] synchronize];

检索保存的数据

NSString *savedValue = [[NSUserDefaults standardUserDefaults]
stringForKey:@"preferenceName"];

更新 :

有一个颤振插件可以为我们做这件事。

将此添加到您的pubspec.yaml 文件中

dependencies:
shared_preferences: "^0.4.0"

并在项目根目录的命令行中运行。

$ flutter packages get

现在在你的 Dart 代码中你可以使用,

import 'package:shared_preferences/shared_preferences.dart';
于 2018-03-08T06:21:18.017 回答