add debug mode

This commit is contained in:
2025-07-02 01:57:13 +00:00
parent 0e4125a583
commit 3d41b56889
5 changed files with 69 additions and 4 deletions
+1 -1
View File
@@ -10,7 +10,7 @@ class App extends StatefulWidget {
}
class _AppState extends State<App> {
final CanvasController controller = CanvasController();
final CanvasController controller = CanvasController(debug: true);
@override
void initState() {
+38 -2
View File
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:infinite_lazy_2d_grid/utils/conversions.dart';
import 'package:infinite_lazy_2d_grid/utils/styles.dart';
// ------------------------------ Public Types -------------------------------
@@ -25,6 +26,12 @@ class CanvasController with ChangeNotifier {
int _nextId = 0; // surely we won't run out of IDs, Clueless
Offset _gsTopLeftOffset = Offset.zero;
final Map<int, _CanvasItem> _children = {}; // int for IDs
bool debug;
CanvasController({this.debug = false});
// -------------------- getters --------------------
Offset get offset => _gsTopLeftOffset;
// -------------------- public functions --------------------
@@ -70,9 +77,38 @@ class CanvasController with ChangeNotifier {
}
List<(Offset, Widget)> widgetsWithScreenPositions() {
return _children.values.map((item) {
return _children.entries.map((entry) {
final item = entry.value;
final ssPosition = gsToSs(item.gsPosition, _gsTopLeftOffset);
return (ssPosition, item.builder());
var child = item.builder();
if (debug) child = _Debug(id: entry.key, gs: item.gsPosition, ss: ssPosition, child: child);
return (ssPosition, child);
}).toList();
}
}
class _Debug extends StatelessWidget {
final int id;
final Offset gs, ss;
final Widget child;
const _Debug({required this.id, required this.gs, required this.ss, required this.child});
@override
Widget build(BuildContext context) {
return Stack(
clipBehavior: Clip.none,
children: [
child,
Positioned(
left: 0,
bottom: -60,
child: Text(
'ID: $id\nGS:(${gs.dx.toInt()},${gs.dy.toInt()})\nSS:(${ss.dx.toInt()},${ss.dy.toInt()})',
style: monospaceStyle,
),
),
],
);
}
}
+18 -1
View File
@@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:infinite_lazy_2d_grid/core/controller.dart';
import 'package:infinite_lazy_2d_grid/utils/offset_extensions.dart';
import 'package:infinite_lazy_2d_grid/utils/styles.dart';
import 'background.dart';
@@ -28,11 +30,26 @@ class CanvasView extends StatelessWidget {
final childrenWithPositions = controller.widgetsWithScreenPositions();
final ssPositions = childrenWithPositions.map((e) => e.$1).toList();
final children = childrenWithPositions.map((e) => e.$2).toList();
return _CanvasRenderObject(
final canvas = _CanvasRenderObject(
canvasBackground: canvasBackground,
ssPositions: ssPositions,
children: children,
);
if (controller.debug) {
return Stack(
children: [
canvas,
Positioned(
top: 16,
left: 16,
child: Text('Offset: ${controller.offset.coord()}', style: monospaceStyle),
),
],
);
} else {
return canvas;
}
},
),
),
+4
View File
@@ -10,4 +10,8 @@ extension OffsetCartesionOps on Offset {
Offset operator -(Offset other) {
return Offset(dx - other.dx, dy - other.dy);
}
String coord() {
return '(${dx.toStringAsFixed(2)}, ${dy.toStringAsFixed(2)})';
}
}
+8
View File
@@ -0,0 +1,8 @@
import 'package:flutter/material.dart';
final TextStyle monospaceStyle = TextStyle(
color: Colors.black,
fontSize: 14,
fontWeight: FontWeight.bold,
fontFamily: 'monospace',
);