Flutter CachedNetworkImage 不适用于从 Playstore 下载的应用程序,卡在占位符上
Flutter CachedNetworkImage doesn't work for App downloaded from playstore, stuck on placeholder
我在我的应用程序中使用 CachedNetworkImage,当我 运行 它在调试中或在 Android 上发布时它工作正常,但是当我将 aab 上传到 Play 商店并下载应用程序时来自 Play 商店,图像只是卡在占位符上。
这是我在应用程序中使用它的方式。请注意,我使用文本小部件作为占位符和错误,以便我可以直观地调试发布版本上的任何问题:
child: Stack(
children: <Widget>[
url != null
? CachedNetworkImage(
imageUrl: url,
errorWidget: (context, url, error) => Text("$error"),
placeholder: (context, url) => Text("Loading $url"),
imageBuilder: (context, imageProvider) => Container(
width: double.infinity,
height: 150,
decoration: BoxDecoration(
image: DecorationImage(image: imageProvider, fit: BoxFit.fitWidth),
),
),
)
: Container(),
它只是停留在占位符上,看起来像这样
我在 pubspec 中使用 cached_network_image 的最新版本:
cached_network_image: ^2.4.1
以下是我迄今为止为帮助缩小问题范围所做的尝试:
- 使用
Image.network(url)
而不是 CachedNetworkImage。当我这样做时图像加载正常,所以我知道这不是互联网或 url. 的问题
- 运行 使用
flutter run --release
在设备上构建的发布版本。这工作正常,图像加载正确。
- 正在试用多台设备。我尝试在 Android 8 上使用 Samsung Galaxy 8,在 Android 11 上使用 Pixel 2xl。两者都适用于调试版本和发布版本,但从 Play 商店下载时却不行。
- 确保 URL 可以 public 访问并且已启用互联网权限。该应用程序能够正常加载来自互联网的其他内容,并且图像 url 在 public 域上。
我最终在 github 问题中找到了解决方案 github。com/Baseflow/flutter_cached_network_image/issues/497。原来这是 CachedNetworkImage 使用的 sqflite 库的混淆问题。在他们在库中修复它之前,解决方案是将默认混淆文件添加到 build.gradle 文件:
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true // Add these lines
shrinkResources true // Add these lines
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') // Add these lines
}
}
我真的很惊讶没有其他人在我能找到的 SO 上发帖,这似乎是对图书馆的重大改变。
我在我的应用程序中使用 CachedNetworkImage,当我 运行 它在调试中或在 Android 上发布时它工作正常,但是当我将 aab 上传到 Play 商店并下载应用程序时来自 Play 商店,图像只是卡在占位符上。
这是我在应用程序中使用它的方式。请注意,我使用文本小部件作为占位符和错误,以便我可以直观地调试发布版本上的任何问题:
child: Stack(
children: <Widget>[
url != null
? CachedNetworkImage(
imageUrl: url,
errorWidget: (context, url, error) => Text("$error"),
placeholder: (context, url) => Text("Loading $url"),
imageBuilder: (context, imageProvider) => Container(
width: double.infinity,
height: 150,
decoration: BoxDecoration(
image: DecorationImage(image: imageProvider, fit: BoxFit.fitWidth),
),
),
)
: Container(),
它只是停留在占位符上,看起来像这样
我在 pubspec 中使用 cached_network_image 的最新版本:
cached_network_image: ^2.4.1
以下是我迄今为止为帮助缩小问题范围所做的尝试:
- 使用
Image.network(url)
而不是 CachedNetworkImage。当我这样做时图像加载正常,所以我知道这不是互联网或 url. 的问题
- 运行 使用
flutter run --release
在设备上构建的发布版本。这工作正常,图像加载正确。 - 正在试用多台设备。我尝试在 Android 8 上使用 Samsung Galaxy 8,在 Android 11 上使用 Pixel 2xl。两者都适用于调试版本和发布版本,但从 Play 商店下载时却不行。
- 确保 URL 可以 public 访问并且已启用互联网权限。该应用程序能够正常加载来自互联网的其他内容,并且图像 url 在 public 域上。
我最终在 github 问题中找到了解决方案 github。com/Baseflow/flutter_cached_network_image/issues/497。原来这是 CachedNetworkImage 使用的 sqflite 库的混淆问题。在他们在库中修复它之前,解决方案是将默认混淆文件添加到 build.gradle 文件:
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true // Add these lines
shrinkResources true // Add these lines
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') // Add these lines
}
}
我真的很惊讶没有其他人在我能找到的 SO 上发帖,这似乎是对图书馆的重大改变。