add debug mode
This commit is contained in:
@@ -10,7 +10,7 @@ class App extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _AppState extends State<App> {
|
class _AppState extends State<App> {
|
||||||
final CanvasController controller = CanvasController();
|
final CanvasController controller = CanvasController(debug: true);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:infinite_lazy_2d_grid/utils/conversions.dart';
|
import 'package:infinite_lazy_2d_grid/utils/conversions.dart';
|
||||||
|
import 'package:infinite_lazy_2d_grid/utils/styles.dart';
|
||||||
|
|
||||||
// ------------------------------ Public Types -------------------------------
|
// ------------------------------ Public Types -------------------------------
|
||||||
|
|
||||||
@@ -25,6 +26,12 @@ class CanvasController with ChangeNotifier {
|
|||||||
int _nextId = 0; // surely we won't run out of IDs, Clueless
|
int _nextId = 0; // surely we won't run out of IDs, Clueless
|
||||||
Offset _gsTopLeftOffset = Offset.zero;
|
Offset _gsTopLeftOffset = Offset.zero;
|
||||||
final Map<int, _CanvasItem> _children = {}; // int for IDs
|
final Map<int, _CanvasItem> _children = {}; // int for IDs
|
||||||
|
bool debug;
|
||||||
|
|
||||||
|
CanvasController({this.debug = false});
|
||||||
|
|
||||||
|
// -------------------- getters --------------------
|
||||||
|
Offset get offset => _gsTopLeftOffset;
|
||||||
|
|
||||||
// -------------------- public functions --------------------
|
// -------------------- public functions --------------------
|
||||||
|
|
||||||
@@ -70,9 +77,38 @@ class CanvasController with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<(Offset, Widget)> widgetsWithScreenPositions() {
|
List<(Offset, Widget)> widgetsWithScreenPositions() {
|
||||||
return _children.values.map((item) {
|
return _children.entries.map((entry) {
|
||||||
|
final item = entry.value;
|
||||||
final ssPosition = gsToSs(item.gsPosition, _gsTopLeftOffset);
|
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();
|
}).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/material.dart';
|
||||||
import 'package:flutter/rendering.dart';
|
import 'package:flutter/rendering.dart';
|
||||||
import 'package:infinite_lazy_2d_grid/core/controller.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';
|
import 'background.dart';
|
||||||
|
|
||||||
@@ -28,11 +30,26 @@ class CanvasView extends StatelessWidget {
|
|||||||
final childrenWithPositions = controller.widgetsWithScreenPositions();
|
final childrenWithPositions = controller.widgetsWithScreenPositions();
|
||||||
final ssPositions = childrenWithPositions.map((e) => e.$1).toList();
|
final ssPositions = childrenWithPositions.map((e) => e.$1).toList();
|
||||||
final children = childrenWithPositions.map((e) => e.$2).toList();
|
final children = childrenWithPositions.map((e) => e.$2).toList();
|
||||||
return _CanvasRenderObject(
|
final canvas = _CanvasRenderObject(
|
||||||
canvasBackground: canvasBackground,
|
canvasBackground: canvasBackground,
|
||||||
ssPositions: ssPositions,
|
ssPositions: ssPositions,
|
||||||
children: children,
|
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) {
|
Offset operator -(Offset other) {
|
||||||
return Offset(dx - other.dx, dy - other.dy);
|
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