move child renderable menu to own widget
This commit is contained in:
@@ -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 {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user