常见问题
常见的 Flutter 运行时问题和修复方法。
Flutter 构建失败时,我应该首先查看哪里?
从以下文档开始:
大多数构建问题来自设置/版本不匹配、过时的原生构建产物或跳过的原生设置。清理重建通常可以解决问题:
flutter clean
flutter pub get
flutter run
如果原生库未下载,为目标平台运行 rive_native 设置 CLI:
dart run rive_native:setup --verbose --clean --platform <platform>
将 <platform> 替换为你构建的目标平台(例如 android 或 macos)。
你也可以将多个平台作为逗号分隔的列表提供(例如 android,ios,macos)。
如果仍然出现设置错误,请按照 Rive Native 故障排查 进行排查。对于 Android 特定的设置问题,请参见 Android 说明。
LateInitializationError: Field 'makeFlutterFactory' has not been initialized
如果你看到类似 LateInitializationError: Field 'makeFlutterFactory' has not been initialized 的错误,请确保在显示任何 Rive 组件之前初始化 Rive。
尽早调用 await RiveNative.init()(例如在 main() 中),在创建或使用 Factory.flutter/Factory.rive 之前。
import 'package:flutter/widgets.dart';
import 'package:rive/rive.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await RiveNative.init();
runApp(const MyApp());
}
Web 上出现 "Too many active WebGL contexts" 警告
每个拥有自己纹理的 Factory.rive 组件都会持有一个活动的 WebGL 上下文,而浏览器对上下文数量有上限。达到上限还可能导致 Rive 组件空白或冻结,以及 CanvasKit 上下文丢失错误。有关上下文如何释放和复用的说明,请参见 WebGL 上下文(Web)。
要避免触及上限:
- 使用 RivePanel 将多个组件绘制到同一个共享纹理中——总共只需一个上下文。
- 释放不再显示的 Rive 组件——这会释放它们所占用的 WebGL 上下文。
将 RiveNative.debugRenderTextureLogging 设为 true,即可确认是否触及上限:它会记录纹理的创建、复用和释放,并附带实时的 WebGL 上下文数量。
如何在 Android 上启用 16KB 页面支持?
Rive Flutter 0.14.x 默认包含 16KB 页面支持。
如果你使用的是 0.13.x,需要在 gradle.properties 文件中通过设置 rive.ndk.version=28.1.13356709 来指定使用的 NDK 版本。
这为你提供了 16KB 页面支持以及控制未来更新所用 NDK 的灵活性。
更多上下文信息,请参见 rive-flutter issue #479。
为什么在 iOS release 构建中使用 SPM 会出现 Failed to lookup symbol?
如果 IPA 构建报告 Failed to lookup symbol 错误,可能是 Xcode 剥离了某些所需的全局符号。
在 Xcode 中,选择 Runner target,打开 Build Settings > Strip Style,然后将 All Symbols 改为 Non-Global Symbols。