跳到主要内容

常见问题

常见的 Flutter 运行时问题和修复方法。

Flutter 构建失败时,我应该首先查看哪里?

从以下文档开始:

大多数构建问题来自设置/版本不匹配、过时的原生构建产物或跳过的原生设置。清理重建通常可以解决问题:

flutter clean
flutter pub get
flutter run

如果原生库未下载,为目标平台运行 rive_native 设置 CLI:

dart run rive_native:setup --verbose --clean --platform <platform>

<platform> 替换为你构建的目标平台(例如 androidmacos)。 你也可以将多个平台作为逗号分隔的列表提供(例如 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

看完还有疑问?进群交流下!
与众多 Rive 创作者、开发者一起交流探讨与答疑解惑。
加入交流群