SharedPreferences 未在发布版本中实例化

SharedPreferences not instantiating in release build

在我的 flutter 应用程序中,我实现了一个入职视图。因为它应该只加载一次,所以我使用共享首选项来存储一个整数以指示已经显示了入职。当我 运行 应用程序处于调试模式时,一切正常。但是当我构建它的发布版本时,它不起作用。

而且我的应用程序使用了 firebase 移动身份验证。我提到这个,因为这可能也是一个原因。

代码:

case InitializeEvent:
        SharedPreferences prefs = await SharedPreferences.getInstance();
        int initScreen = prefs.getInt(SharedPrefUtil.INIT_SCREEN);
        await prefs.setInt(SharedPrefUtil.INIT_SCREEN, 1);
        if (initScreen == 1) {
          add(CheckAppConfigEvent());
        } else {
          yield state.clone(page: RootState.ONBOARDING_PAGE);
        }
        yield state.clone(loading: false);
        break;

所以在上面的代码中,如果我注释初始化共享 pref、读取和写入行并在 if else 语句中设置 true 或 false,那么在发布版本中一切正常。这就是为什么我认为问题在于初始化共享首选项。

而且我只允许上网。我是否缺少 AndroidManifest.xml

中的任何权限
<uses-permission android:name="android.permission.INTERNET"/>

用 flutter build apk 构建 --no-shrink 给我解决了

我的应用程序在发布版本中也无法正常工作,问题是由于 shared_preferences 包造成的。

我在发布版本中遇到以下错误:

MissingPluginException(未在通道 plugins.flutter.io/shared_preferences 上找到方法 getAll 的实现)

我尝试了几种解决方案:

  1. 切换flutter频道
  2. 尝试了几个版本的shared_preferences
  3. 按照此处所述删除 .pub-cache 文件夹 https://github.com/flutter/flutter/issues/38873#issuecomment-680788165

但没有任何效果。

该应用程序在调试版本中运行良好,但在发布版本中运行不佳。

然后我试了

flutter build apk --no-shrink

flutter build appbundle --no-shrink

并且该应用程序在发布版本中也运行良好。但是这个问题在没有缩小代码的情况下得到了解决。 所以这需要修复。

希望 Flutter 团队能够调查并解决这个问题。

编辑:
已将问题报告给 Flutter 团队。
https://github.com/flutter/flutter/issues/65334

我也遇到了同样的问题。在我的例子中,问题不是我的代码,问题是 Gradle 版本,当我使用任何大于 4 的 Gradle 版本时,就会出现这个问题。但是当我将 Gradle 版本降低到 3.5.0 时,它工作正常。我还用 Gradle 3.6.4 测试过它也能正常工作。

改变这个

dependencies {
        classpath 'com.android.tools.build:gradle:4.1.1'
    }

dependencies {
        classpath 'com.android.tools.build:gradle:3.6.4'
    }

注意:在 flutter 中不要总是升级你的 Gradle 版本

classpath 'com.android.tools.build:gradle:4.1.0' 替换为 classpath 'com.android.tools.build:gradle:3.5.0' 在 android/build.gradle 文件中为我解决了问题

对我来说真的很管用,你可以试试----

使用 -> SharedPreferences.setMockInitialValues({});

void main() {
  SharedPreferences.setMockInitialValues({});

  SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
      systemNavigationBarColor: Colors.indigo[900], // navigation bar color
      statusBarColor: Colors.indigo[900],
      systemNavigationBarIconBrightness: Brightness.light));
  runApp(MyApp());
}

可能你忘了在MainActivity.java上添加这行代码 `@Override

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this.getFlutterEngine());
 }`

它对我有用

我刚改了:

dependencies {
   classpath 'com.android.tools.build:gradle:**4.1.0**'
}

TO

dependencies {
   classpath 'com.android.tools.build:gradle:**3.5.0**'
}

然后

  • 扑扑干净
  • flutter build apk --release

它肯定会起作用。

以前的解决方案在我的情况下不起作用,然后我尝试禁用这两个然后它起作用了。

minifyEnabled false shrinkResources false