refactor canvas painter

This commit is contained in:
2025-07-27 01:41:17 +00:00
parent 2366102cce
commit e5f33c6212
7 changed files with 12 additions and 18 deletions
+2 -2
View File
@@ -34,12 +34,12 @@ class SingleColorBackround extends CanvasBackground {
}
}
class DotGridBackround extends CanvasBackground {
class DotGridBackground extends CanvasBackground {
final double size;
final double spacing;
final Color color;
const DotGridBackround({this.size = 2.0, this.spacing = 50.0, this.color = Colors.black12}) : super();
const DotGridBackground({this.size = 2.0, this.spacing = 50.0, this.color = Colors.black12}) : super();
@override
void paint(Canvas canvas, Offset screenOffset, Offset canvasOffset, double scale, Size canvasSize) {
+3
View File
@@ -1,6 +1,7 @@
import 'dart:collection';
import 'package:flutter/material.dart';
import 'package:infinite_lazy_grid/core/background.dart';
import '../../utils/measure_size.dart';
import '../spatial_hashing.dart';
import '../../utils/offset_extensions.dart';
@@ -28,6 +29,7 @@ class LazyCanvasController with ChangeNotifier {
late BuildContext _context;
bool _firstBuild = true;
int? _focusChildOnInit; // if set, will focus on this child on first build
CanvasBackground background;
bool debug;
final Duration defaultAnimationDuration;
@@ -37,6 +39,7 @@ class LazyCanvasController with ChangeNotifier {
Offset? buildCacheExtent,
Size hashCellSize = const Size(100, 100),
this.defaultAnimationDuration = const Duration(milliseconds: 300),
this.background = const DotGridBackground(),
}) : _hashCellSize = hashCellSize,
_buildCacheExtent = buildCacheExtent != null ? buildCacheExtent + Offset(50, 50) : null
// only top left is considered so if a widget has long width, it'll not be rendered
+2 -3
View File
@@ -9,10 +9,9 @@ import 'controller/controller.dart';
/// An infinite canvas that places all the children at the specified positions.
/// Needs a [LazyCanvasController] to control the canvas and a [CanvasBackground] to draw the background.
class LazyCanvas extends StatefulWidget {
final CanvasBackground canvasBackground;
final LazyCanvasController controller;
const LazyCanvas({required this.controller, required this.canvasBackground, super.key});
const LazyCanvas({required this.controller, super.key});
@override
State<LazyCanvas> createState() => _LazyCanvasState();
@@ -47,7 +46,7 @@ class _LazyCanvasState extends State<LazyCanvas> with TickerProviderStateMixin<L
final children = childrenWithPositions.map((e) => e.child).toList();
final canvas = _CanvasRenderObject(
childrenIds: childrenIds,
canvasBackground: widget.canvasBackground,
canvasBackground: widget.controller.background,
ssPositions: ssPositions,
scale: widget.controller.scale,
gridSpaceOffset: widget.controller.offset,