Skip to content

Instantly share code, notes, and snippets.

@JustinSDK
Last active June 16, 2020 13:10
Show Gist options
  • Save JustinSDK/37d24ff8f9171058af822ddf651a0fd3 to your computer and use it in GitHub Desktop.
Save JustinSDK/37d24ff8f9171058af822ddf651a0fd3 to your computer and use it in GitHub Desktop.
RenderObjectWidget Demo
import 'package:flutter/material.dart';
void main() {
runApp(
RedSquare(
center: Offset(210, 300),
width: 100,
height: 200,
)
);
runApp(
RedSquare(
center: Offset(210, 300),
width: 100,
height: 200,
)
);
}
class RedSquare extends LeafRenderObjectWidget {
Offset center;
double width;
double height;
RedSquare({this.center, this.width, this.height});
@override
LeafRenderObjectElement createElement() {
print('createElement');
return super.createElement();
}
@override
RenderObject createRenderObject(BuildContext context) {
print('createRenderoObject');
return RedSquareRenderObject(
rect: Rect.fromCenter(
center: center,
width: width,
height: height
)
);
}
@override
void updateRenderObject(BuildContext context, RedSquareRenderObject renderObject) {
print('updateRenderObject');
renderObject
..rect = Rect.fromCenter(
center: center,
width: width,
height: height
);
}
}
class RedSquareRenderObject extends RenderBox {
Rect _rect;
RedSquareRenderObject({Rect rect}) {
this._rect = rect;
}
set rect(Rect rect) {
if (_rect == rect) {
return;
}
_rect = rect;
markNeedsPaint();
}
@override
void paint(PaintingContext context, Offset offset) {
Paint p = Paint()
..color = Colors.red;
context.canvas.drawRect(_rect , p);
}
@override
bool get sizedByParent => true;
@override
void performResize() {
size = constraints.smallest;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment