add debug mode
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
|
||||
@@ -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)})';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
final TextStyle monospaceStyle = TextStyle(
|
||||
color: Colors.black,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontFamily: 'monospace',
|
||||
);
|
||||
Reference in New Issue
Block a user