move child renderable menu to own widget

This commit is contained in:
Nick Fisher
2024-05-17 14:51:08 +08:00
parent 888531f333
commit 17f7a2931f
2 changed files with 47 additions and 40 deletions

View File

@@ -1,3 +1,4 @@
import 'package:animation_tools_dart/animation_tools_dart.dart';
import 'package:dart_filament/dart_filament/abstract_filament_viewer.dart'; import 'package:dart_filament/dart_filament/abstract_filament_viewer.dart';
import 'package:dart_filament/dart_filament/entities/filament_entity.dart'; import 'package:dart_filament/dart_filament/entities/filament_entity.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -9,42 +10,52 @@ class ChildRenderableWidget extends StatelessWidget {
const ChildRenderableWidget( const ChildRenderableWidget(
{super.key, required this.controller, required this.entity}); {super.key, required this.controller, required this.entity});
Widget _childRenderable(FilamentEntity childEntity) { Widget _childRenderable(FilamentEntity childEntity) {
var name = controller.getNameForEntity(childEntity) ?? "<none>"; var name = controller.getNameForEntity(childEntity) ?? "<none>";
return FutureBuilder( var names = controller.getMorphTargetNames(entity, childEntity);
future: controller! return FutureBuilder(
.getMorphTargetNames(entity, name), future: names,
builder: (_, morphTargetsSnapshot) { builder: (_, morphTargetsSnapshot) {
if (!morphTargetsSnapshot.hasData) { if (!morphTargetsSnapshot.hasData) {
return Container(); return Container();
} }
var morphTargets = var morphTargets = morphTargetsSnapshot.data!;
morphTargetsSnapshot.data!;
final menuChildren = <Widget>[]; final menuChildren = <Widget>[];
if(morphTargets.isEmpty) { if (morphTargets.isEmpty) {
menuChildren.add(Text("None")); menuChildren.add(Text("None"));
} else { } else {
for(int i= 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
var newWeights = List.filled( var newWeights = List.filled(morphTargets.length, i.toDouble());
morphTargets.length, i.toDouble() menuChildren.add(MenuItemButton(
); child: Text("Set to $i"),
menuChildren.add(MenuItemButton( onPressed: () async {
child: Text( try {
"Set to $i"), await controller!
onPressed: () async { .setMorphTargetWeights(childEntity, newWeights);
await controller! } catch (err, st) {
.setMorphTargetWeights( print("Error setting morph target weights");
childEntity, newWeights);})); print(err);
} print(st);
menuChildren.addAll(morphTargets.map((t) => Text(t))); }
} }));
return SubmenuButton( }
child: Text(name), menuChildren.add(MenuItemButton(
menuChildren: menuChildren); child: Text("Animate all morph target from 0 to 1"),
}); onPressed: () async {
var morphData = MorphAnimationData(
List<List<double>>.generate(
120,
(i) => List<double>.filled(
morphTargets.length, i / 120)),
morphTargets);
await controller!.setMorphAnimationData(entity, morphData,
targetMeshNames: [name]);
}));
menuChildren.addAll(morphTargets.map((t) => Text(t)));
}
return SubmenuButton(child: Text(name), menuChildren: menuChildren);
});
} }
@override @override
@@ -63,7 +74,3 @@ class ChildRenderableWidget extends StatelessWidget {
}); });
} }
} }

View File

@@ -74,8 +74,8 @@ class _EntityListWidget extends State<EntityListWidget> {
}, },
)) ))
.toList()), .toList()),
ChildRenderableWidget(controller:widget.controller!, entity:entity), ChildRenderableWidget(
controller: widget.controller!, entity: entity),
]) ])
]); ]);
}); });
@@ -121,7 +121,7 @@ class _EntityListWidget extends State<EntityListWidget> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (widget.controller == null) { if (widget.controller == null) {
return Container(); return Container(color: Colors.red);
} }
return FutureBuilder( return FutureBuilder(
future: widget.controller!.initialized, future: widget.controller!.initialized,