update example project

This commit is contained in:
Nick Fisher
2024-02-15 13:47:22 +08:00
parent 0b315f3dfe
commit da123d6274
5 changed files with 108 additions and 19 deletions

View File

@@ -4,6 +4,7 @@ import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_filament/animations/animation_data.dart';
import 'package:flutter_filament/filament_controller.dart';
import 'package:flutter_filament_example/main.dart';
import 'package:permission_handler/permission_handler.dart';
@@ -27,8 +28,22 @@ class _AssetSubmenuState extends State<AssetSubmenu> {
Widget _shapesSubmenu() {
var children = [
MenuItemButton(
closeOnActivate: false,
onPressed: () async {
Timer.periodic(Duration(milliseconds: 50), (_) async {
var entity = await widget.controller
.getChildEntity(ExampleWidgetState.assets.last, "Cylinder");
await showDialog(
context: context,
builder: (BuildContext context) {
return Center(
child: Container(
color: Colors.white, child: Text(entity.toString())));
});
},
child: const Text('Find Cylinder entity by name')),
MenuItemButton(
onPressed: () async {
Timer.periodic(const Duration(milliseconds: 50), (_) async {
await widget.controller.setBoneTransform(
ExampleWidgetState.assets.last,
"Cylinder",
@@ -143,11 +158,40 @@ class _AssetSubmenuState extends State<AssetSubmenu> {
return SubmenuButton(menuChildren: children, child: const Text("Shapes"));
}
Widget _geometrySubmenu() {
return MenuItemButton(
onPressed: () async {
await widget.controller.createGeometry([
-1,
0,
-1,
-1,
0,
1,
1,
0,
1,
1,
0,
-1,
], [
0,
1,
2,
2,
3,
0
], "asset://assets/solidcolor.filamat");
},
child: const Text("Custom geometry"));
}
@override
Widget build(BuildContext context) {
return SubmenuButton(
menuChildren: [
_shapesSubmenu(),
_geometrySubmenu(),
MenuItemButton(
onPressed: () async {
ExampleWidgetState.directionalLight = await widget.controller

View File

@@ -9,11 +9,13 @@ class ControllerMenu extends StatefulWidget {
final FilamentController? controller;
final void Function(FilamentController controller) onControllerCreated;
final void Function() onControllerDestroyed;
final FocusNode sharedFocusNode;
ControllerMenu(
{this.controller,
required this.onControllerCreated,
required this.onControllerDestroyed});
required this.onControllerDestroyed,
required this.sharedFocusNode});
@override
State<StatefulWidget> createState() => _ControllerMenuState();
@@ -21,7 +23,6 @@ class ControllerMenu extends StatefulWidget {
class _ControllerMenuState extends State<ControllerMenu> {
FilamentController? _filamentController;
final FocusNode _buttonFocusNode = FocusNode(debugLabel: 'Camera Menu');
void _createController({String? uberArchivePath}) {
if (_filamentController != null) {
@@ -57,8 +58,10 @@ class _ControllerMenuState extends State<ControllerMenu> {
child: const Text("Create FilamentViewer"),
onPressed: _filamentController == null
? null
: () {
_filamentController!.createViewer();
: () async {
await _filamentController!.createViewer();
await _filamentController!
.setCameraManipulatorOptions(zoomSpeed: 1.0);
},
),
MenuItemButton(
@@ -96,7 +99,7 @@ class _ControllerMenuState extends State<ControllerMenu> {
]);
}
return MenuAnchor(
childFocusNode: _buttonFocusNode,
childFocusNode: widget.sharedFocusNode,
menuChildren: items,
builder:
(BuildContext context, MenuController controller, Widget? child) {

View File

@@ -7,8 +7,10 @@ import 'package:flutter_filament_example/menus/rendering_submenu.dart';
class SceneMenu extends StatefulWidget {
final FilamentController? controller;
final FocusNode sharedFocusNode;
const SceneMenu({super.key, required this.controller});
const SceneMenu(
{super.key, required this.controller, required this.sharedFocusNode});
@override
State<StatefulWidget> createState() {
@@ -34,6 +36,8 @@ class _SceneMenuState extends State<SceneMenu> {
widget.controller?.hasViewer ?? ValueNotifier<bool>(false),
builder: (BuildContext ctx, bool hasViewer, Widget? child) {
return MenuAnchor(
onClose: () {},
childFocusNode: widget.sharedFocusNode,
menuChildren: widget.controller == null
? []
: <Widget>[