update example project with debug widgets for child entities & morph targets

This commit is contained in:
Nick Fisher
2024-05-16 22:36:10 +08:00
parent f63228e623
commit 24c62ca026
4 changed files with 114 additions and 66 deletions

View File

@@ -0,0 +1,69 @@
import 'package:dart_filament/dart_filament/abstract_filament_viewer.dart';
import 'package:dart_filament/dart_filament/entities/filament_entity.dart';
import 'package:flutter/material.dart';
class ChildRenderableWidget extends StatelessWidget {
final AbstractFilamentViewer controller;
final FilamentEntity entity;
const ChildRenderableWidget(
{super.key, required this.controller, required this.entity});
Widget _childRenderable(FilamentEntity childEntity) {
var name = controller.getNameForEntity(childEntity) ?? "<none>";
return FutureBuilder(
future: controller!
.getMorphTargetNames(entity, name),
builder: (_, morphTargetsSnapshot) {
if (!morphTargetsSnapshot.hasData) {
return Container();
}
var morphTargets =
morphTargetsSnapshot.data!;
final menuChildren = <Widget>[];
if(morphTargets.isEmpty) {
menuChildren.add(Text("None"));
} else {
for(int i= 0; i < 2; i++) {
var newWeights = List.filled(
morphTargets.length, i.toDouble()
);
menuChildren.add(MenuItemButton(
child: Text(
"Set to $i"),
onPressed: () async {
await controller!
.setMorphTargetWeights(
childEntity, newWeights);}));
}
menuChildren.addAll(morphTargets.map((t) => Text(t)));
}
return SubmenuButton(
child: Text(name),
menuChildren: menuChildren);
});
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: controller!.getChildEntities(entity, true),
builder: (ctx, snapshot) {
if (!snapshot.hasData) {
return Container();
}
var children = snapshot.data!;
return SubmenuButton(
child: Text("Renderable entities"),
menuChildren: children.map(_childRenderable).toList());
});
}
}

View File

@@ -1,5 +1,6 @@
import 'package:dart_filament/dart_filament/abstract_filament_viewer.dart';
import 'package:dart_filament/dart_filament/entities/filament_entity.dart';
import 'package:flutter_filament/filament/widgets/debug/child_renderable_widget.dart';
import 'package:flutter_filament/flutter_filament.dart';
import 'package:flutter/material.dart';
@@ -72,7 +73,9 @@ class _EntityListWidget extends State<EntityListWidget> {
entity, animations.data!.indexOf(a));
},
))
.toList())
.toList()),
ChildRenderableWidget(controller:widget.controller!, entity:entity),
])
]);
});
@@ -120,25 +123,29 @@ class _EntityListWidget extends State<EntityListWidget> {
if (widget.controller == null) {
return Container();
}
return StreamBuilder(
stream: widget.controller!.scene.onUpdated,
builder: (_, __) => Container(
padding: const EdgeInsets.symmetric(
horizontal: 30, vertical: 10),
height: 100,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(30),
color: Colors.white.withOpacity(0.25),
),
child: ListView(
reverse: true,
children: widget.controller!.scene
.listLights()
.map(_light)
.followedBy(widget.controller!.scene
.listEntities()
.map(_entity))
.cast<Widget>()
.toList())));
return FutureBuilder(
future: widget.controller!.initialized,
builder: (_, snapshot) => snapshot.data != true
? Container()
: StreamBuilder(
stream: widget.controller!.scene.onUpdated,
builder: (_, __) => Container(
padding: const EdgeInsets.symmetric(
horizontal: 30, vertical: 10),
height: 100,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(30),
color: Colors.white.withOpacity(0.25),
),
child: ListView(
reverse: true,
children: widget.controller!.scene
.listLights()
.map(_light)
.followedBy(widget.controller!.scene
.listEntities()
.map(_entity))
.cast<Widget>()
.toList()))));
}
}