Compare commits

..

6 Commits

Author SHA1 Message Date
Nick Fisher
9b99975017 chore(release): publish packages
- thermion_flutter@0.2.0-dev.2.0
2024-09-25 21:18:00 +08:00
Nick Fisher
e6a6862ba4 chore: (flutter) web packaging fixes (use logger) 2024-09-25 21:17:38 +08:00
Nick Fisher
b7d3e9191a chore: (flutter) web packaging fixes 2024-09-25 21:17:20 +08:00
Nick Fisher
b461b2c5db chore: (flutter) web packaging fixes 2024-09-25 21:17:09 +08:00
Nick Fisher
8f7f48bcaa chore: (flutter) add package:web to flutter deps 2024-09-25 21:16:48 +08:00
Nick Fisher
7dc8e394f7 chore!: remove EntityListWidget - will replace with new Scene 2024-09-25 21:16:24 +08:00
7 changed files with 36 additions and 183 deletions

View File

@@ -3,6 +3,27 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## 2024-09-25
### Changes
---
Packages with breaking changes:
- [`thermion_flutter` - `v0.2.0-dev.2.0`](#thermion_flutter---v020-dev20)
Packages with other changes:
- There are no other changes in this release.
---
#### `thermion_flutter` - `v0.2.0-dev.2.0`
- **BREAKING** **CHORE**: remove EntityListWidget - will replace with new Scene.
## 2024-09-25 ## 2024-09-25
### Changes ### Changes

View File

@@ -1,3 +1,9 @@
## 0.2.0-dev.2.0
> Note: This release has breaking changes.
- **BREAKING** **CHORE**: remove EntityListWidget - will replace with new Scene.
## 0.2.0-dev.1.0 ## 0.2.0-dev.1.0
> Note: This release has breaking changes. > Note: This release has breaking changes.

View File

@@ -1,177 +0,0 @@
import 'package:thermion_dart/thermion_dart/thermion_viewer.dart';
import 'package:flutter/material.dart';
import 'package:thermion_flutter/thermion/widgets/debug/child_renderable_widget.dart';
import 'package:thermion_flutter/thermion/widgets/debug/skeleton_menu_item_widget.dart';
class EntityListWidget extends StatefulWidget {
final ThermionViewer? controller;
const EntityListWidget({super.key, required this.controller});
@override
State<StatefulWidget> createState() => _EntityListWidget();
}
class _EntityListWidget extends State<EntityListWidget> {
@override
void didUpdateWidget(EntityListWidget oldWidget) {
super.didUpdateWidget(oldWidget);
}
Widget _entity(ThermionEntity entity) {
return FutureBuilder(
future: widget.controller!.getAnimationNames(entity),
builder: (_, animations) {
if (animations.data == null) {
return Container();
}
final menuController = MenuController();
return Row(children: [
Expanded(
child: GestureDetector(
onTap: () {
widget.controller!.scene.select(entity);
},
child: Text(entity.toString(),
style: TextStyle(
fontWeight:
entity == widget.controller!.scene.selected
? FontWeight.bold
: FontWeight.normal)))),
MenuAnchor(
controller: menuController,
child: Container(
color: Colors.transparent,
child: IconButton(
icon: const Icon(
Icons.arrow_drop_down,
color: Colors.black,
),
onPressed: () {
menuController.open();
},
)),
menuChildren: [
MenuItemButton(
child: const Text("Remove"),
onPressed: () async {
await widget.controller!.removeEntity(entity);
}),
MenuItemButton(
child: const Text("Transform to unit cube"),
onPressed: () async {
await widget.controller!.transformToUnitCube(entity);
}),
SubmenuButton(
child: const Text("Animations"),
menuChildren: animations.data!
.map((a) => SubmenuButton(
child: Text(a),
menuChildren: [
MenuItemButton(
child: Text("Play"),
onPressed: () async {
await widget.controller!
.addAnimationComponent(entity);
widget.controller!.playAnimation(entity,
animations.data!.indexOf(a));
},
),
MenuItemButton(
child: Text("Loop"),
onPressed: () async {
await widget.controller!
.addAnimationComponent(entity);
widget.controller!.playAnimation(
entity, animations.data!.indexOf(a),
loop: true);
},
),
MenuItemButton(
child: Text("Stop"),
onPressed: () async {
await widget.controller!
.addAnimationComponent(entity);
widget.controller!.stopAnimation(
entity, animations.data!.indexOf(a));
},
)
]))
.toList()),
ChildRenderableWidget(
controller: widget.controller!, entity: entity),
SkeletonMenuItemWidget(
controller: widget.controller!, entity: entity)
])
]);
});
}
Widget _light(ThermionEntity entity) {
final controller = MenuController();
return Row(children: [
GestureDetector(
onTap: () {
widget.controller!.scene.select(entity);
},
child: Container(
color: Colors.transparent,
child: Text("Light $entity",
style: TextStyle(
fontWeight: entity == widget.controller!.scene.selected
? FontWeight.bold
: FontWeight.normal)))),
MenuAnchor(
controller: controller,
child: Container(
color: Colors.transparent,
child: IconButton(
icon: const Icon(
Icons.arrow_drop_down,
color: Colors.black,
),
onPressed: () {
controller.open();
},
)),
menuChildren: [
MenuItemButton(
child: const Text("Remove"),
onPressed: () async {
await widget.controller!.removeLight(entity);
})
])
]);
}
@override
Widget build(BuildContext context) {
if (widget.controller == null) {
return Container(color: Colors.red);
}
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),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(30),
color: Colors.white.withOpacity(0.25),
),
child: SingleChildScrollView(
child: Column(
// reverse: true,
children: widget.controller!.scene
.listLights()
.map(_light)
.followedBy(widget.controller!.scene
.listEntities()
.map(_entity))
.cast<Widget>()
.toList())))));
}
}

View File

@@ -1,6 +1,7 @@
import 'dart:js_util'; import 'dart:js_util';
import 'dart:ui' as ui; import 'dart:ui' as ui;
import 'dart:ui_web' as ui_web; import 'dart:ui_web' as ui_web;
import 'package:logging/logging.dart';
import 'package:thermion_flutter_web/thermion_flutter_web_options.dart'; import 'package:thermion_flutter_web/thermion_flutter_web_options.dart';
import 'package:web/web.dart'; import 'package:web/web.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
@@ -9,9 +10,7 @@ class ThermionWidgetWeb extends StatelessWidget {
final ThermionFlutterWebOptions options; final ThermionFlutterWebOptions options;
const ThermionWidgetWeb( const ThermionWidgetWeb(
{super.key, {super.key, this.options = const ThermionFlutterWebOptions.empty()});
this.options =
const ThermionFlutterWebOptions.empty()});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@@ -30,6 +29,7 @@ class _ImageCopyingWidget extends StatefulWidget {
} }
class _ImageCopyingWidgetState extends State<_ImageCopyingWidget> { class _ImageCopyingWidgetState extends State<_ImageCopyingWidget> {
final _logger = Logger("_ImageCopyingWidgetState");
ui.Image? _img; ui.Image? _img;
@override @override
@@ -51,7 +51,7 @@ class _ImageCopyingWidgetState extends State<_ImageCopyingWidget> {
capture(); capture();
}); });
} catch (err) { } catch (err) {
print(err); _logger.severe(err);
} }
} }

View File

@@ -9,5 +9,6 @@ class ThermionWidgetWeb extends StatefulWidget {
const ThermionWidgetWeb({super.key, required this.options}); const ThermionWidgetWeb({super.key, required this.options});
@override @override
// ignore: no_logic_in_create_state
State<StatefulWidget> createState() => throw Exception(); State<StatefulWidget> createState() => throw Exception();
} }

View File

@@ -1,6 +1,6 @@
name: thermion_flutter name: thermion_flutter
description: Flutter plugin for 3D rendering with the Thermion toolkit. description: Flutter plugin for 3D rendering with the Thermion toolkit.
version: 0.2.0-dev.1.0 version: 0.2.0-dev.2.0
homepage: https://thermion.dev homepage: https://thermion.dev
repository: https://github.com/nmfisher/thermion repository: https://github.com/nmfisher/thermion
@@ -22,6 +22,7 @@ dependencies:
thermion_flutter_ffi: ^0.2.0-dev.1.0 thermion_flutter_ffi: ^0.2.0-dev.1.0
thermion_flutter_web: ^0.1.0-dev.1.0 thermion_flutter_web: ^0.1.0-dev.1.0
logging: ^1.2.0 logging: ^1.2.0
web: ^1.0.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

View File

@@ -1,5 +1,5 @@
import 'package:thermion_dart/thermion_dart/compatibility/web/interop/thermion_viewer_wasm.dart';
import 'package:thermion_dart/thermion_dart/thermion_viewer.dart'; import 'package:thermion_dart/thermion_dart/thermion_viewer.dart';
import 'package:thermion_dart/thermion_dart/viewer/web/thermion_viewer_wasm.dart';
import 'package:thermion_flutter_platform_interface/thermion_flutter_platform_interface.dart'; import 'package:thermion_flutter_platform_interface/thermion_flutter_platform_interface.dart';
import 'package:thermion_flutter_platform_interface/thermion_flutter_texture.dart'; import 'package:thermion_flutter_platform_interface/thermion_flutter_texture.dart';
import 'package:flutter_web_plugins/flutter_web_plugins.dart'; import 'package:flutter_web_plugins/flutter_web_plugins.dart';
@@ -7,6 +7,7 @@ import 'package:thermion_flutter_web/thermion_flutter_web_options.dart';
import 'package:web/web.dart'; import 'package:web/web.dart';
class ThermionFlutterWebPlugin extends ThermionFlutterPlatform { class ThermionFlutterWebPlugin extends ThermionFlutterPlatform {
ThermionViewerWasm? _viewer; ThermionViewerWasm? _viewer;
static void registerWith(Registrar registrar) { static void registerWith(Registrar registrar) {