数据绑定
使用视图模型将代码连接到编辑器中绑定的元素。
在加载 Rive 文件后,在运行时使用视图模型来连接数据。
如果你使用的是 RiveWidgetController,可以跳过创建 ViewModel 的步骤。直接转到视图模型实例。
// 获取 File 和 Artboard 的引用
final file = await File.asset(
'assets/my_file.riv',
riveFactory: Factory.rive,
);
final artboard = file!.defaultArtboard()!;
// 按名称获取引用
file.viewModelByName("My View Model");
// 按索引获取引用
for (var i = 0; i < file.viewModelCount; i++) {
final indexedVM = file.viewModelByIndex(i);
}
// 获取画板的默认视图模型引用
final defaultVM = file.defaultArtboardViewModel(artboard);
// 不再使用时释放视图模型
viewModel.dispose();
视图模型实例
创建和管理视图模型的实例,用于在运行时与 Rive 图形交换数据。
如果你使用 RiveWidgetController:
// 获取 File 的引用
file = await File.asset(
'assets/rewards.riv',
riveFactory: Factory.rive,
);
// 创建控制器
controller = RiveWidgetController(file!);
// 按名称进行数据绑定
viewModelInstance = controller.dataBind(DataBind.byName('My View Model'));
// 按索引进行数据绑定
viewModelInstance = controller.dataBind(DataBind.byIndex(0));
// 自动数据绑定
viewModelInstance = controller.dataBind(DataBind.auto());
// 将已有的视图模型实例绑 定到控制器:
viewModelInstance = controller.dataBind(DataBind.byInstance(someViewModelInstance));
// 不再需要时释放你创建的对象
viewModelInstance.dispose();
controller.dispose();
file.dispose();
如果你想自行管理视图模型实例的创建:
final vm = file.viewModelByName("My View Model")!;
// 创建空白实例
final vmiBlank = vm.createInstance();
// 创建默认实例
final vmiDefault = vm.createDefaultInstance();
// 按索引创建
for (int i = 0; i < vm.instanceCount; i++) {
final vmiIndexed = vm.createInstanceByIndex(i);
}
// 按名称创建
final vmiNamed = vm.createInstanceByName("My Instance");
// 释放视图模型实例
viewModelInstance.dispose();
绑定
将视图模型实例绑定到画板或状态机,以建立数据连接。
如果你使用 RiveWidgetController,调用以下任一方法时会自动完成绑定:
viewModelInstance = controller.dataBind(DataBind.auto());
viewModelInstance = controller.dataBind(DataBind.byName('My View Model'));
viewModelInstance = controller.dataBind(DataBind.byIndex(0));
viewModelInstance = controller.dataBind(DataBind.byInstance(someViewModelInstance));
否则,你需要手动将视图模型实例绑定到状态机或画板。
final file = await File.asset(
'assets/my_file.riv',
riveFactory: Factory.rive,
);
final artboard = file!.defaultArtboard();
final stateMachine = artboard!.defaultStateMachine()!;
final vm = file.defaultArtboardViewModel(artboard)!;
final vmi = vm.createDefaultInstance()!;
// 绑定到状态机。这会自动同时绑定到画板。
stateMachine.bindViewModelInstance(vmi);
// 如果不使用状态机,则绑定到画板
artboard.bindViewModelInstance(vmi);
自动绑定
自动绑定可简化运行时数据绑定,无需手动绑定到画板或状态机。当文件包含视图模型时,它通过索引或类型自动选择视图模型和实例。
// 获取 File 的引用
file = await File.asset(
'assets/rewards.riv',
riveFactory: Factory.rive,
);
// 创建控制器
controller = RiveWidgetController(file!);
// 自动数据绑定
viewModelInstance = controller.dataBind(DataBind.auto());
// 不再需要时释放你创建的对象
viewModelInstance.dispose();
controller.dispose();
file.dispose();