diff --git a/CHANGELOG.md b/CHANGELOG.md
index 95ded61..ac4744f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,6 @@
-## [0.9.10]
-- start port to null-safety.
+## [1.0.0-nullsafety.0]
+- initial migration to null-safety
+- fix non-working examples.
- fix a bug with GText layout.
## [0.9.9]
diff --git a/README.md b/README.md
index 8e50741..db81ac5 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,8 @@ To get some extended, boring explanations, and eventually some sample codes, che
#### news!
-- WIP Support for [null-safety](https://github.com/roipeker/graphx/tree/null-safety) in the other branch.
+- WIP Support for [null-safety](https://github.com/roipeker/graphx/tree/null-safety)
+
- Support for HotReload
#### prototyping
@@ -33,6 +34,7 @@ GraphX is all about visuals, here you have some screen captures of random protot
For your GraphX scene to support **Hot Reload**, you should initialize your variables and DisplayObjects inside `addedToStage`, and optionally clean them in `dispose`.
+
[](https://media.giphy.com/media/NMG8gfpJxFiu1eALZo/source.mp4)
[](https://media.giphy.com/media/RIrvhfZoDtal41Tb4e/source.mp4)
[](https://media.giphy.com/media/pQdeurUOAqWdZuxxUK/source.mp4)
diff --git a/example/analysis_options.yaml b/example/analysis_options.yaml
new file mode 100644
index 0000000..26f7e43
--- /dev/null
+++ b/example/analysis_options.yaml
@@ -0,0 +1,3 @@
+analyzer:
+ errors:
+ todo: ignore
diff --git a/example/android/app/src/main/res/drawable-v21/launch_background.xml b/example/android/app/src/main/res/drawable-v21/launch_background.xml
new file mode 100644
index 0000000..f74085f
--- /dev/null
+++ b/example/android/app/src/main/res/drawable-v21/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/example/android/app/src/main/res/values-night/styles.xml b/example/android/app/src/main/res/values-night/styles.xml
new file mode 100644
index 0000000..449a9f9
--- /dev/null
+++ b/example/android/app/src/main/res/values-night/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/example/assets/murat_coffee/espresso_roast_vintage_2.png b/example/assets/murat_coffee/espresso.png
similarity index 100%
rename from example/assets/murat_coffee/espresso_roast_vintage_2.png
rename to example/assets/murat_coffee/espresso.png
diff --git a/example/lib/demos/altitude_indicator/scene.dart b/example/lib/demos/altitude_indicator/scene.dart
index 8f8f0e4..e930567 100644
--- a/example/lib/demos/altitude_indicator/scene.dart
+++ b/example/lib/demos/altitude_indicator/scene.dart
@@ -16,17 +16,17 @@ class AltitudIndicatorScene extends GSprite {
/// inner circle.
GSprite rotatorCircle = GSprite();
- GSprite movable;
+ GSprite? movable;
double innerCircSeparation = 50.0;
double outlineThickness1 = 18.0;
double outlineThickness2 = 10.0;
- double meterSize;
+ late double meterSize;
final redColor = const Color(0xffDA5537);
double valueMeterGap = 34.0;
- double innerCircleSize;
+ late double innerCircleSize;
- double get minStageSize => Math.min(stage.stageWidth, stage.stageHeight);
+ double get minStageSize => Math.min(stage!.stageWidth, stage!.stageHeight);
@override
void addedToStage() {
@@ -43,12 +43,14 @@ class AltitudIndicatorScene extends GSprite {
.endFill();
addChild(mainMask);
mainContainer.mask = mainMask;
+
/// center pivot in the current bounding box of scene.
alignPivot();
- stage.onResized.add(() {
+ stage!.onResized.add(() {
/// position the scene in the middle of screen.
- setPosition(stage.stageWidth / 2, stage.stageHeight / 2);
+ setPosition(stage!.stageWidth / 2, stage!.stageHeight / 2);
+
/// scale % accordingly.
scale = minStageSize / meterSize;
});
@@ -85,10 +87,10 @@ class AltitudIndicatorScene extends GSprite {
createOutsideLines();
/// create some movement for the airplane!
- stage.onEnterFrame.add(onEnterFrame);
+ stage!.onEnterFrame.add(onEnterFrame);
}
- bool isPressed(LogicalKeyboardKey key) => stage.keyboard.isPressed(key);
+ bool isPressed(LogicalKeyboardKey key) => stage!.keyboard!.isPressed(key);
int getDirY() {
if (isPressed(LogicalKeyboardKey.arrowDown)) {
@@ -113,9 +115,9 @@ class AltitudIndicatorScene extends GSprite {
var dirX = getDirX();
if (dirY != 0) {
- movable.y += 1.2 * dirY;
+ movable!.y += 1.2 * dirY;
} else {
- movable.y += (-movable.y) / 20;
+ movable!.y += (-movable!.y) / 20;
}
if (dirX != 0) {
@@ -126,16 +128,16 @@ class AltitudIndicatorScene extends GSprite {
}
var maxRangeY = valueMeterGap * 2;
- if (movable.y > maxRangeY) {
- movable.y = maxRangeY;
- } else if (movable.y < -maxRangeY) {
- movable.y = -maxRangeY;
+ if (movable!.y > maxRangeY) {
+ movable!.y = maxRangeY;
+ } else if (movable!.y < -maxRangeY) {
+ movable!.y = -maxRangeY;
}
// rotatorCircle.rotation += .01;
}
- GSprite drawRotator() {
+ GSprite? drawRotator() {
/// background first.
movable = GSprite();
@@ -150,9 +152,9 @@ class AltitudIndicatorScene extends GSprite {
ground.alignPivot(Alignment.topCenter);
line.alignPivot(Alignment.center);
- movable.addChild(sky);
- movable.addChild(ground);
- movable.addChild(line);
+ movable!.addChild(sky);
+ movable!.addChild(ground);
+ movable!.addChild(line);
/// another option to draw background.
// var rotatorBackground = GShape();
@@ -173,12 +175,12 @@ class AltitudIndicatorScene extends GSprite {
// movable.addChild(rotatorBackground);
var elements = buildRotatorElements();
- movable.addChild(elements);
- rotatorCircle.addChild(movable);
+ movable!.addChild(elements);
+ rotatorCircle.addChild(movable!);
/// the red arrow should always stay in the same position...
/// re-parent the element to the rotator circle.
- var arrow = elements.getChildByName('arrow');
+ var arrow = elements.getChildByName('arrow')!;
rotatorCircle.addChild(arrow);
return movable;
}
@@ -329,7 +331,7 @@ class AltitudIndicatorScene extends GSprite {
GShape _buildLine({
double thickness = 3.0,
- double rotationDegrees,
+ required double rotationDegrees,
}) {
var line = GShape();
line.graphics.lineStyle(thickness, kColorWhite);
@@ -337,7 +339,7 @@ class AltitudIndicatorScene extends GSprite {
line.graphics.lineTo((innerCircleSize + innerCircSeparation) / 2, 0);
line.pivotX = line.width;
line.rotation = deg2rad(rotationDegrees);
- linesContainer?.addChild(line);
+ linesContainer.addChild(line);
return line;
}
diff --git a/example/lib/demos/ball_line_collision/scene/ball.dart b/example/lib/demos/ball_line_collision/scene/ball.dart
index d111020..cb091c3 100644
--- a/example/lib/demos/ball_line_collision/scene/ball.dart
+++ b/example/lib/demos/ball_line_collision/scene/ball.dart
@@ -3,20 +3,20 @@ import 'package:graphx/graphx.dart';
class Ball extends GShape {
double radius, vx, vy;
- Color color;
+ Color? color;
Ball({
- double x,
- double y,
- this.radius,
- this.vx,
- this.vy,
+ double? x,
+ double? y,
+ required this.radius,
+ required this.vx,
+ required this.vy,
this.color,
}) {
this.x = x;
this.y = y;
graphics
- .beginFill(color.withOpacity(.8))
+ .beginFill(color!.withOpacity(.8))
.lineStyle(6, kColorBlack)
.drawCircle(0, 0, radius)
.endFill()
diff --git a/example/lib/demos/ball_line_collision/scene/scene.dart b/example/lib/demos/ball_line_collision/scene/scene.dart
index 619bcf4..a7e4f4c 100644
--- a/example/lib/demos/ball_line_collision/scene/scene.dart
+++ b/example/lib/demos/ball_line_collision/scene/scene.dart
@@ -4,17 +4,15 @@
///
/// web demo: https://roi-graphx-balls-collision.surge.sh/#/
-
import 'package:flutter/material.dart';
import 'package:graphx/graphx.dart';
import 'ball.dart';
class CollisionScene extends GSprite {
+ double get sw => stage!.stageWidth;
- double get sw => stage.stageWidth;
-
- double get sh => stage.stageHeight;
+ double get sh => stage!.stageHeight;
/// lazy with the types :P
var lines = [];
@@ -37,12 +35,12 @@ class CollisionScene extends GSprite {
addChild(ball);
balls.add(ball);
});
- stage.onMouseDown.add(_onMouseDown);
+ stage!.onMouseDown.add(_onMouseDown);
}
void _onMouseDown(input) {
- stage.onMouseUp.addOnce((input) => stage.onMouseMove.removeAll());
- stage.onMouseMove.add((input) => points.add([mouseX, mouseY, 0.0]));
+ stage!.onMouseUp.addOnce((input) => stage!.onMouseMove.removeAll());
+ stage!.onMouseMove.add((input) => points.add([mouseX, mouseY, 0.0]));
points = >[
[mouseX, mouseY, 0.0]
];
@@ -133,4 +131,4 @@ class CollisionScene extends GSprite {
}
}
}
-}
\ No newline at end of file
+}
diff --git a/example/lib/demos/bookmark_button/scene.dart b/example/lib/demos/bookmark_button/scene.dart
index 14e7945..a7998a3 100644
--- a/example/lib/demos/bookmark_button/scene.dart
+++ b/example/lib/demos/bookmark_button/scene.dart
@@ -7,15 +7,15 @@ import 'package:flutter/material.dart';
import 'package:graphx/graphx.dart';
class BookmarkButton extends GSprite {
- double get sw => stage.stageWidth;
+ double get sw => stage!.stageWidth;
- double get sh => stage.stageHeight;
- GShape bg;
- GText label;
+ double get sh => stage!.stageHeight;
+ late GShape bg;
+ late GText label;
bool isOn = false;
- static List _gifFrames;
- GMovieClip bookmarkIco;
- GDropShadowFilter shadow;
+ static List? _gifFrames;
+ late GMovieClip bookmarkIco;
+ GDropShadowFilter? shadow;
/// remove if not in debug? (hot reload).
@override
@@ -27,7 +27,7 @@ class BookmarkButton extends GSprite {
@override
void addedToStage() {
- stage.color = Color(0xffEDEFFB);
+ stage!.color = Color(0xffEDEFFB);
bg = addChild(GShape()) as GShape;
shadow = GDropShadowFilter(
6,
@@ -37,7 +37,7 @@ class BookmarkButton extends GSprite {
Color(0xffA4AADB).withOpacity(.43),
);
bg.$useSaveLayerBounds = false;
- bg.filters = [shadow];
+ bg.filters = [shadow!];
label = GText.build(
text: 'Bookmark',
color: Colors.black.withOpacity(.7),
@@ -49,10 +49,10 @@ class BookmarkButton extends GSprite {
label.setPosition(sw - label.textWidth - 32, (sh - label.textHeight) / 2);
_loadTexture();
onMouseDown.add((e) {
- shadow.tween(duration: .3, blurX: 2, blurY: 2, distance: 1);
+ shadow!.tween(duration: .3, blurX: 2, blurY: 2, distance: 1);
bg.tween(duration: .3, scale: .95);
- stage.onMouseUp.addOnce((e) {
- shadow.tween(duration: .5, blurX: 6, blurY: 6, distance: 6);
+ stage!.onMouseUp.addOnce((e) {
+ shadow!.tween(duration: .5, blurX: 6, blurY: 6, distance: 6);
bg.tween(duration: .5, scale: 1);
});
});
@@ -69,14 +69,14 @@ class BookmarkButton extends GSprite {
Future _loadTexture() async {
if (_gifFrames == null) {
- var atlas = await ResourceLoader.loadGif(
+ var atlas = await (ResourceLoader.loadGif(
'assets/bookmark_button/bookmark.gif',
resolution: 2,
- cacheId: 'bookmark');
+ cacheId: 'bookmark') as Future);
_gifFrames = atlas.textureFrames;
}
bookmarkIco =
- addChild(GMovieClip(frames: _gifFrames, fps: 50)) as GMovieClip;
+ addChild(GMovieClip(frames: _gifFrames!, fps: 50)) as GMovieClip;
bookmarkIco.repeatable = false;
bookmarkIco.alignPivot();
bookmarkIco.setPosition(label.x / 2 + 2, sh / 2);
diff --git a/example/lib/demos/breakout/scene/game_scene.dart b/example/lib/demos/breakout/scene/game_scene.dart
index 35e632f..082fd98 100644
--- a/example/lib/demos/breakout/scene/game_scene.dart
+++ b/example/lib/demos/breakout/scene/game_scene.dart
@@ -9,7 +9,7 @@ class BreakoutAtari extends GSprite {
static const double gameW = 160;
static const double gameH = 192;
- static BreakoutAtari instance;
+ static late BreakoutAtari instance;
final bricks = [];
@@ -26,22 +26,22 @@ class BreakoutAtari extends GSprite {
double brickH = 12.0;
final wallW = 4.0;
- int cols, rows;
- double totalBrickSep;
+ int cols = 0, rows = 0;
+ late double totalBrickSep;
- Paddle paddle;
- Ball ball;
- GSprite bicksContainer;
- HUD hud;
+ late Paddle paddle;
+ late Ball ball;
+ late GSprite bicksContainer;
+ late HUD hud;
bool movingLeft = false;
bool movingRight = false;
bool _isGameOver = false;
int brokenBricksCount = 0;
- double get sw => stage.stageWidth;
+ double get sw => stage!.stageWidth;
- double get sh => stage.stageHeight;
+ double get sh => stage!.stageHeight;
BreakoutAtari() {
instance = this;
@@ -122,18 +122,18 @@ class BreakoutAtari extends GSprite {
_updatePause();
}
});
- stage.onMouseDown.add((event) {
+ stage!.onMouseDown.add((event) {
isDragging = true;
stagePressX = mouseX;
paddlePressX = paddle.x;
- stage.onMouseUp.addOnce((event) {
+ stage!.onMouseUp.addOnce((event) {
isDragging = false;
});
});
// stage.color = Colors.black.value;
// stage.showBoundsRect = true;
- stage.maskBounds = true;
- stage.keyboard.onUp.add((input) {
+ stage!.maskBounds = true;
+ stage!.keyboard!.onUp.add((input) {
if (input.isKey(LogicalKeyboardKey.escape)) {
isPaused = !isPaused;
mps.emit1(GameEvents.action, isPaused);
@@ -146,7 +146,7 @@ class BreakoutAtari extends GSprite {
}
});
- stage.keyboard.onDown.add((input) {
+ stage!.keyboard!.onDown.add((input) {
if (input.arrowLeft || input.isKey(LogicalKeyboardKey.keyA)) {
movingLeft = true;
} else if (input.arrowRight || input.isKey(LogicalKeyboardKey.keyD)) {
@@ -195,8 +195,8 @@ class BreakoutAtari extends GSprite {
paddle.y = gameH - paddle.h - 10;
alignPivot();
- stage.onResized.add(() {
- var graphBounds = bounds;
+ stage!.onResized.add(() {
+ var graphBounds = bounds!;
var r1 = sw / sh;
var r2 = graphBounds.width / graphBounds.height;
if (r1 < r2) {
@@ -217,7 +217,7 @@ class BreakoutAtari extends GSprite {
if (isDragging) {
paddle.x = paddlePressX + (mouseX - stagePressX);
} else {
- var thrust = stage.keyboard.isShiftPressed ? 2.0 : 1.0;
+ var thrust = stage!.keyboard!.isShiftPressed ? 2.0 : 1.0;
if (movingLeft) {
paddle.vx = -paddle.speed;
} else if (movingRight) {
@@ -261,7 +261,7 @@ class BreakoutAtari extends GSprite {
bricks.forEach((b) {
if (!collides(b, ball)) return;
removeBricks.add(b);
- hud.showPoints(b.points, b.getBounds(this));
+ hud.showPoints(b.points, b.getBounds(this)!);
b.removeFromParent();
/// check speed
@@ -295,8 +295,8 @@ class BreakoutAtari extends GSprite {
}
bool collides(GDisplayObject obj1, GDisplayObject obj2) {
- var bounds1 = obj1.getBounds(this);
- var bounds2 = obj2.getBounds(this);
+ var bounds1 = obj1.getBounds(this)!;
+ var bounds2 = obj2.getBounds(this)!;
return bounds1.intersects(bounds2);
}
@@ -322,11 +322,11 @@ class BreakoutAtari extends GSprite {
void _updatePause() {
hud.showPause(isPaused);
- final ticker = stage.scene.core.ticker;
+ final ticker = stage!.scene.core.ticker;
if (isPaused) {
- ticker.callNextFrame(ticker.pause);
+ ticker!.callNextFrame(ticker.pause);
} else {
- ticker.resume();
+ ticker!.resume();
}
}
}
diff --git a/example/lib/demos/breakout/scene/hud.dart b/example/lib/demos/breakout/scene/hud.dart
index 389bfcc..b9149a0 100644
--- a/example/lib/demos/breakout/scene/hud.dart
+++ b/example/lib/demos/breakout/scene/hud.dart
@@ -7,7 +7,7 @@ import 'game_scene.dart';
class HUD extends GSprite {
// ignore: non_constant_identifier_names
- GText _score_tf, _balls_tf, _gameState_tf, _speedUp_tf;
+ GText? _score_tf, _balls_tf, _gameState_tf, _speedUp_tf;
final w = BreakoutAtari.gameW;
final h = BreakoutAtari.gameH;
@@ -20,15 +20,15 @@ class HUD extends GSprite {
var titleScore = _getText('SCORE', 4);
titleScore.setPosition(textMargin, textMargin);
_score_tf = _getText('0', 6);
- _score_tf.setPosition(textMargin, 10);
+ _score_tf!.setPosition(textMargin, 10);
var titleBall = _getText('BALL', 4);
titleBall.alignPivot(Alignment.topRight);
titleBall.setPosition(w - textMargin, textMargin);
_balls_tf = _getText('3/3', 6);
- _balls_tf.alignPivot(Alignment.topRight);
- _balls_tf.setPosition(titleBall.x, 10);
+ _balls_tf!.alignPivot(Alignment.topRight);
+ _balls_tf!.setPosition(titleBall.x, 10);
_gameState_tf = GText(
text: 'GAME OVER',
@@ -40,13 +40,13 @@ class HUD extends GSprite {
),
paragraphStyle: ParagraphStyle(textAlign: TextAlign.center),
);
- _gameState_tf.y = (h - _gameState_tf.textHeight) / 2;
- addChild(_gameState_tf);
+ _gameState_tf!.y = (h - _gameState_tf!.textHeight) / 2;
+ addChild(_gameState_tf!);
_speedUp_tf = _getText('SPEED UP!', 10);
- _speedUp_tf.alignPivot();
- _speedUp_tf.setPosition(w / 2, h / 2);
- _speedUp_tf.alpha = 0;
+ _speedUp_tf!.alignPivot();
+ _speedUp_tf!.setPosition(w / 2, h / 2);
+ _speedUp_tf!.alpha = 0;
setGameOver(false);
}
@@ -102,13 +102,13 @@ class HUD extends GSprite {
void speedUp() {
final offset = 10.0;
GTween.killTweensOf(_speedUp_tf);
- _speedUp_tf.y = h / 2;
- _speedUp_tf.alpha = 0;
- _speedUp_tf.tween(duration: .15, alpha: 1);
- _speedUp_tf.tween(duration: 1.2, delay: .15, y: h / 2 - offset, alpha: 0);
+ _speedUp_tf!.y = h / 2;
+ _speedUp_tf!.alpha = 0;
+ _speedUp_tf!.tween(duration: .15, alpha: 1);
+ _speedUp_tf!.tween(duration: 1.2, delay: .15, y: h / 2 - offset, alpha: 0);
}
- GText _getText(String label, double size, [Shadow shadow]) {
+ GText _getText(String label, double size, [Shadow? shadow]) {
var tf = GText(
text: label,
textStyle: TextStyle(
@@ -124,32 +124,32 @@ class HUD extends GSprite {
void showPause(bool isPaused) {
if (isPaused) {
- _gameState_tf.text = 'PAUSED';
- _gameState_tf.visible = true;
+ _gameState_tf!.text = 'PAUSED';
+ _gameState_tf!.visible = true;
} else {
- _gameState_tf.visible = false;
+ _gameState_tf!.visible = false;
}
}
void showWin() {
- _gameState_tf.text = 'YOU WIN!';
- _gameState_tf.visible = true;
+ _gameState_tf!.text = 'YOU WIN!';
+ _gameState_tf!.visible = true;
}
void setBalls(int numBalls, int maxBalls) {
- _balls_tf.text = '$numBalls/$maxBalls';
- _balls_tf.alignPivot(Alignment.topRight);
+ _balls_tf!.text = '$numBalls/$maxBalls';
+ _balls_tf!.alignPivot(Alignment.topRight);
}
void setScore(int points) {
- _score_tf.text = '$points';
+ _score_tf!.text = '$points';
}
void setGameOver(bool flag) {
- _gameState_tf.visible = false;
+ _gameState_tf!.visible = false;
if (flag) {
- _gameState_tf.text = 'GAME OVER';
- _gameState_tf.visible = true;
+ _gameState_tf!.text = 'GAME OVER';
+ _gameState_tf!.visible = true;
}
}
}
diff --git a/example/lib/demos/breakout/scene/objects.dart b/example/lib/demos/breakout/scene/objects.dart
index 3e9d43d..6b607f2 100644
--- a/example/lib/demos/breakout/scene/objects.dart
+++ b/example/lib/demos/breakout/scene/objects.dart
@@ -2,10 +2,10 @@ import 'package:flutter/material.dart';
import 'package:graphx/graphx.dart';
abstract class GameObj extends GShape {
- double w, h;
- Color color;
+ double w = 0, h = 0;
+ Color? color;
- void init(double w, double h, Color color) {
+ void init(double w, double h, Color? color) {
this.w = w;
this.h = h;
this.color = color;
@@ -28,7 +28,7 @@ class Ball extends GameObj {
@override
void _draw() {
- graphics.beginFill(color).drawCircle(0, 0, w / 2).endFill();
+ graphics.beginFill(color!).drawCircle(0, 0, w / 2).endFill();
}
}
@@ -38,7 +38,7 @@ class Paddle extends GameObj {
@override
void _draw() {
- graphics.beginFill(color).drawRect(0, 0, w, h).endFill();
+ graphics.beginFill(color!).drawRect(0, 0, w, h).endFill();
}
}
@@ -47,6 +47,6 @@ class Brick extends GameObj {
@override
void _draw() {
- graphics.beginFill(color).drawRect(0, 0, w, h).endFill();
+ graphics.beginFill(color!).drawRect(0, 0, w, h).endFill();
}
}
diff --git a/example/lib/demos/card_rotation/scene.dart b/example/lib/demos/card_rotation/scene.dart
index 9b9cfa1..814a7ea 100644
--- a/example/lib/demos/card_rotation/scene.dart
+++ b/example/lib/demos/card_rotation/scene.dart
@@ -11,7 +11,7 @@ import 'package:graphx/graphx.dart';
class CardRotation3dScene extends GSprite {
@override
void addedToStage() {
- stage.color = Color(0xffF8F6F4);
+ stage!.color = Color(0xffF8F6F4);
initUi();
}
@@ -103,7 +103,7 @@ Just 89.- THB''', 0x9E7878, 12.0, FontWeight.normal, 20 / 12);
cardItemParent.mouseChildren = false;
cardItemParent.useCursor = true;
- stage.onEnterFrame.add((event) {
+ stage!.onEnterFrame.add((event) {
var dx = cardItemParent.mouseX;
var dy = cardItemParent.mouseY;
var angle = Math.atan2(dy, dx);
@@ -126,7 +126,7 @@ Just 89.- THB''', 0x9E7878, 12.0, FontWeight.normal, 20 / 12);
ease: GEase.easeOutExpo,
);
- stage.onMouseUp.addOnce((event) {
+ stage!.onMouseUp.addOnce((event) {
cardItemParent.tween(
duration: 1.2,
scale: 1,
@@ -144,13 +144,13 @@ Just 89.- THB''', 0x9E7878, 12.0, FontWeight.normal, 20 / 12);
});
cardItemParent.alignPivot();
- stage.onResized.add(() {
- cardItemParent.x = stage.stageWidth / 2;
- cardItemParent.y = stage.stageHeight / 2;
+ stage!.onResized.add(() {
+ cardItemParent.x = stage!.stageWidth / 2;
+ cardItemParent.y = stage!.stageHeight / 2;
});
- cardItemParent.x = stage.stageWidth / 2;
- cardItemParent.y = stage.stageHeight / 2;
+ cardItemParent.x = stage!.stageWidth / 2;
+ cardItemParent.y = stage!.stageHeight / 2;
// cardItemParent.rotationX = .2;
}
diff --git a/example/lib/demos/chart_bezier/bezier_points.dart b/example/lib/demos/chart_bezier/bezier_points.dart
index f39a772..936856c 100644
--- a/example/lib/demos/chart_bezier/bezier_points.dart
+++ b/example/lib/demos/chart_bezier/bezier_points.dart
@@ -1,12 +1,10 @@
import 'package:graphx/graphx.dart';
class _BezierControlPoint {
- GPoint prev;
- GPoint next;
-
- _BezierControlPoint([this.prev, this.next]) {
- prev ??= GPoint();
- next ??= GPoint();
+ late GPoint prev, next;
+ _BezierControlPoint() {
+ prev = GPoint();
+ next = GPoint();
}
}
@@ -16,14 +14,13 @@ void bezierCurveThrough(
Graphics g,
List points, [
double tension = .25,
- List output,
+ List? output,
]) {
- tension ??= .25;
var len = points.length;
if (len == 2) {
output?.addAll([points[0], points[1]]);
- g?.moveTo(points[0].x, points[0].y);
- g?.lineTo(points[1].x, points[1].y);
+ g.moveTo(points[0].x, points[0].y);
+ g.lineTo(points[1].x, points[1].y);
return;
}
@@ -66,13 +63,13 @@ void bezierCurveThrough(
);
/// draw?
- g?.moveTo(points[0].x, points[0].y);
+ g.moveTo(points[0].x, points[0].y);
output?.add(points[0]);
for (var i = 1; i < len; ++i) {
var p = points[i];
var cp = cpoints[i];
var cpp = cpoints[i - 1];
- g?.cubicCurveTo(cpp.next.x, cpp.next.y, cp.prev.x, cp.prev.y, p.x, p.y);
+ g.cubicCurveTo(cpp.next.x, cpp.next.y, cp.prev.x, cp.prev.y, p.x, p.y);
output?.addAll([cpp.next, cp.prev, p]);
}
cpoints.clear();
diff --git a/example/lib/demos/chart_bezier/curved_graph_scene.dart b/example/lib/demos/chart_bezier/curved_graph_scene.dart
index 52cf9c5..0adb454 100644
--- a/example/lib/demos/chart_bezier/curved_graph_scene.dart
+++ b/example/lib/demos/chart_bezier/curved_graph_scene.dart
@@ -5,37 +5,26 @@ import 'bezier_points.dart';
class CurvedGraphScene extends GSprite {
List graphPositions = [.2, .4, .9, .3, .6, .7, .9, .3];
- List bezierPoints;
+ List bezierPoints = [];
- double get graphW => stage.stageWidth;
- double get graphH => stage.stageHeight;
+ double get graphW => stage!.stageWidth;
- GSprite graph, dots;
- GShape lines, filled;
- List coords;
+ double get graphH => stage!.stageHeight;
- GTweenableList myTweenList;
- List lastPercents;
+ late GSprite graph, dots;
+ late GShape lines, filled;
+ late List coords;
- GShape drawCircle(double px, double py) {
- var sh = GShape();
- dots.addChild(sh);
- sh.graphics.beginFill(Colors.red).drawCircle(0, 0, 2).endFill();
- sh.setPosition(px, py);
- return sh;
- }
+ late GTweenableList myTweenList;
+ late List lastPercents;
@override
void addedToStage() {
- bezierPoints = [];
- // stage.color = Colors.black;
- stage.maskBounds=true;
-
+ stage!.maskBounds = true;
graph = GSprite();
dots = GSprite();
lines = GShape();
filled = GShape();
-
addChild(filled);
addChild(lines);
addChild(graph);
@@ -54,11 +43,10 @@ class CurvedGraphScene extends GSprite {
lastPercents = List.from(graphPositions);
myTweenList = lastPercents.twn;
randomNumbers();
- stage.onMouseClick.add((e) => randomNumbers());
+ stage!.onMouseClick.add((e) => randomNumbers());
}
void randomNumbers() {
- var newValues = lastPercents.map((e) => Math.random()).toList();
for (var i = 0; i < dots.children.length; ++i) {
var dot = dots.children[i];
dot.tween(
@@ -80,6 +68,7 @@ class CurvedGraphScene extends GSprite {
colorize: Colors.red,
);
}
+ final newValues = lastPercents.map((e) => Math.random()).toList();
myTweenList.tween(
newValues,
duration: 2,
@@ -94,10 +83,11 @@ class CurvedGraphScene extends GSprite {
void renderPositions(List percents) {
for (var i = 0; i < percents.length; ++i) {
coords[i].y = percents[i] * graphH;
- dots.getChildAt(i).y = coords[i].y;
+ final dot = dots.getChildAt(i);
+ dot.y = coords[i].y;
}
lines.graphics.clear();
- lines.graphics.lineStyle(1, Colors.black);
+ lines.graphics.lineStyle(1, Colors.blue);
lines.graphics.lineGradientStyle(
GradientType.linear,
[
@@ -127,4 +117,12 @@ class CurvedGraphScene extends GSprite {
.lineTo(bezierPoints[0].x, bezierPoints[0].y)
.endFill();
}
+
+ GShape drawCircle(double px, double py) {
+ var sh = GShape();
+ dots.addChild(sh);
+ sh.graphics.beginFill(Colors.red).drawCircle(0, 0, 2).endFill();
+ sh.setPosition(px, py);
+ return sh;
+ }
}
diff --git a/example/lib/demos/chart_mountain/chart_data.dart b/example/lib/demos/chart_mountain/chart_data.dart
index 58eeacc..78e1458 100644
--- a/example/lib/demos/chart_mountain/chart_data.dart
+++ b/example/lib/demos/chart_mountain/chart_data.dart
@@ -11,8 +11,8 @@ const sampleGraphData = [
];
class GraphModel {
- final List data;
- final Color color;
- final String name;
+ final List? data;
+ final Color? color;
+ final String? name;
const GraphModel({this.data, this.color, this.name});
}
diff --git a/example/lib/demos/chart_mountain/scene/chart_graph.dart b/example/lib/demos/chart_mountain/scene/chart_graph.dart
index c8ce3a0..8870636 100644
--- a/example/lib/demos/chart_mountain/scene/chart_graph.dart
+++ b/example/lib/demos/chart_mountain/scene/chart_graph.dart
@@ -4,9 +4,9 @@ import '../chart_data.dart';
import 'utils.dart';
class MyGraph extends GSprite {
- GShape graph;
- GSprite chartContainer, titlesContainer;
- GShape background;
+ GShape? graph;
+ GSprite? chartContainer, titlesContainer;
+ late GShape background;
double minValueY = 0, maxValueY = 160, stepY = 20;
List xRange = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'];
@@ -14,12 +14,12 @@ class MyGraph extends GSprite {
double graphW = 295;
double graphH = 209;
- double lineSepY, lineSepX;
- int numLinesY, numLinesX;
+ double lineSepY = 0.0, lineSepX = 0.0;
+ int numLinesY = 0, numLinesX = 0;
double minAlpha = .7;
double maxAlpha = 1.0;
- final List data;
+ final List? data;
MyGraph({this.data});
@override
@@ -28,7 +28,7 @@ class MyGraph extends GSprite {
addChild(background);
chartContainer = GSprite();
- addChild(chartContainer);
+ addChild(chartContainer!);
numLinesY = ((minValueY + (maxValueY - minValueY)) ~/ stepY) + 1;
numLinesX = xRange.length;
@@ -70,18 +70,18 @@ class MyGraph extends GSprite {
});
});
- chartContainer.addChild(graph);
+ chartContainer?.addChild(graph);
drawChart(data, graph, 1);
return graph;
}
- void drawChart(GraphModel data, GShape graph, [double percent = 1]) {
+ void drawChart(GraphModel data, GShape graph, [double? percent = 1]) {
var g = graph.graphics;
g.clear();
- g.beginFill(data.color);
- var list = data.data;
+ g.beginFill(data.color!);
+ var list = data.data!;
for (var i = 0; i < list.length; ++i) {
- final valuePercent = list[i] / maxValueY * percent;
+ final valuePercent = list[i] / maxValueY * percent!;
final relY = graphH - valuePercent * graphH;
var px = i * lineSepX;
if (i == 0) {
diff --git a/example/lib/demos/chart_mountain/scene/chart_scene.dart b/example/lib/demos/chart_mountain/scene/chart_scene.dart
index 671bae7..7269a44 100644
--- a/example/lib/demos/chart_mountain/scene/chart_scene.dart
+++ b/example/lib/demos/chart_mountain/scene/chart_scene.dart
@@ -6,16 +6,16 @@ import 'chart_graph.dart';
import 'chart_title.dart';
class SampleMountainChart extends GSprite {
- MyGraph graph;
- GraphTitle titles;
+ late MyGraph graph;
+ late GraphTitle titles;
- double get sw => stage.stageWidth;
+ double get sw => stage!.stageWidth;
- double get sh => stage.stageHeight;
+ double get sh => stage!.stageHeight;
@override
void addedToStage() {
- stage.showBoundsRect = true;
+ stage!.showBoundsRect = true;
graph = MyGraph(data: sampleGraphData);
graph.x = 40;
graph.y = 20;
diff --git a/example/lib/demos/chart_mountain/scene/chart_title.dart b/example/lib/demos/chart_mountain/scene/chart_title.dart
index e573557..920fc94 100644
--- a/example/lib/demos/chart_mountain/scene/chart_title.dart
+++ b/example/lib/demos/chart_mountain/scene/chart_title.dart
@@ -4,19 +4,19 @@ import '../chart_data.dart';
import 'utils.dart';
class GraphTitle extends GSprite {
- final List data;
+ final List? data;
GraphTitle({this.data});
@override
void addedToStage() {
- for (var i = 0; i < data.length; ++i) {
- final vo = data[i];
+ for (var i = 0; i < data!.length; ++i) {
+ final vo = data![i];
var item = GSprite();
addChild(item);
var quad = GShape();
item.addChild(quad);
- quad.graphics.beginFill(vo.color).drawRect(0, 0, 7, 7).endFill();
+ quad.graphics.beginFill(vo.color!).drawRect(0, 0, 7, 7).endFill();
quad.y = 3;
var title = createLabel(vo.name);
item.addChild(title);
diff --git a/example/lib/demos/chart_mountain/scene/utils.dart b/example/lib/demos/chart_mountain/scene/utils.dart
index be8f3e0..d6fc7a9 100644
--- a/example/lib/demos/chart_mountain/scene/utils.dart
+++ b/example/lib/demos/chart_mountain/scene/utils.dart
@@ -1,4 +1,4 @@
import 'package:graphx/graphx.dart';
-GText createLabel(String text) =>
+GText createLabel(String? text) =>
GText.build(text: text, fontSize: 10, color: kColorBlack);
diff --git a/example/lib/demos/color_picker/picker_container.dart b/example/lib/demos/color_picker/picker_container.dart
index af3b718..2cc1b90 100644
--- a/example/lib/demos/color_picker/picker_container.dart
+++ b/example/lib/demos/color_picker/picker_container.dart
@@ -27,7 +27,7 @@ class PickerContainer extends StatelessWidget {
child: Row(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
- ValueListenableBuilder(
+ ValueListenableBuilder(
valueListenable: pickerNotifier,
builder: (ctx, value, _) => Container(
width: 40,
diff --git a/example/lib/demos/color_picker/scene/hue_scene.dart b/example/lib/demos/color_picker/scene/hue_scene.dart
index 2ffecc8..36a0a2b 100644
--- a/example/lib/demos/color_picker/scene/hue_scene.dart
+++ b/example/lib/demos/color_picker/scene/hue_scene.dart
@@ -4,13 +4,13 @@ import 'package:graphx/graphx.dart';
import '../utils.dart';
class HueScene extends GSprite {
- GShape colorSelector;
- GShape arrowSelector;
- GShape lineSelector;
- Color _selectedColor;
+ late GShape colorSelector;
+ late GShape arrowSelector;
+ GShape? lineSelector;
+ Color? _selectedColor;
- double sw, sh;
- ByteData colorsBytes;
+ double sw = 0.0, sh = 0.0;
+ ByteData? colorsBytes;
HueScene() {
// config(usePointer: true, autoUpdateAndRender: true);
@@ -22,8 +22,8 @@ class HueScene extends GSprite {
var hvsList = List.generate(numHues, (index) {
return HSVColor.fromAHSV(1, index / numHues * 360, 1, 1).toColor();
});
- sw = stage.stageWidth;
- sh = stage.stageHeight;
+ sw = stage!.stageWidth;
+ sh = stage!.stageHeight;
colorSelector = GShape();
colorSelector.graphics
@@ -40,9 +40,9 @@ class HueScene extends GSprite {
arrowSelector = GShape();
lineSelector = GShape();
- lineSelector.graphics.beginFill(kColorWhite).drawRect(0, 0, sw, 10);
- lineSelector.alignPivot(Alignment.center);
- lineSelector.x = sw / 2;
+ lineSelector!.graphics.beginFill(kColorWhite).drawRect(0, 0, sw, 10);
+ lineSelector!.alignPivot(Alignment.center);
+ lineSelector!.x = sw / 2;
/// create the arrow GShape first
arrowSelector.graphics.beginFill(kColorBlack).drawPolygonFaces(
@@ -67,24 +67,24 @@ class HueScene extends GSprite {
addChild(colorSelector);
addChild(arrowSelector);
- addChild(lineSelector);
- lineSelector.alpha = 0;
+ addChild(lineSelector!);
+ lineSelector!.alpha = 0;
mouseChildren = false;
- lineSelector.scaleX = 0;
- stage.onMouseDown.add((input) {
+ lineSelector!.scaleX = 0;
+ stage!.onMouseDown.add((input) {
// lineSelector.y = sh / 2;
GTween.killTweensOf(lineSelector);
- lineSelector.height = 8;
- lineSelector.tween(
+ lineSelector!.height = 8;
+ lineSelector!.tween(
duration: .8,
height: 2,
scaleX: 1,
alpha: 1,
ease: GEase.easeOutExpo,
);
- stage.onMouseUp.addOnce((input) {
- lineSelector.tween(
+ stage!.onMouseUp.addOnce((input) {
+ lineSelector!.tween(
duration: .8,
scaleX: 0,
height: 0,
@@ -92,7 +92,7 @@ class HueScene extends GSprite {
});
_updatePosition();
});
- stage.onMouseMove.add(_onMouseMove);
+ stage!.onMouseMove.add(_onMouseMove);
/// get the image bytes from capturing the GShape snapshot.
/// so we can get the colors from the bytes List.
@@ -109,13 +109,13 @@ class HueScene extends GSprite {
}
void _updatePosition() {
- lineSelector.y = arrowSelector.y = mouseY.clamp(0.0, sh - 1);
+ lineSelector!.y = arrowSelector.y = mouseY.clamp(0.0, sh - 1);
updateColor();
}
void updateColor() {
_selectedColor = getPixelColor(
- colorsBytes,
+ colorsBytes!,
sw.toInt(),
sh.toInt(),
0,
@@ -123,6 +123,6 @@ class HueScene extends GSprite {
);
/// emit the event to update the UI.
- pickerMPS.emit1(ColorPickerEmitter.changeHue, _selectedColor);
+ pickerMPS.emit1(ColorPickerEmitter.changeHue, _selectedColor);
}
}
diff --git a/example/lib/demos/color_picker/scene/value_scene.dart b/example/lib/demos/color_picker/scene/value_scene.dart
index 10e2394..35ad9b4 100644
--- a/example/lib/demos/color_picker/scene/value_scene.dart
+++ b/example/lib/demos/color_picker/scene/value_scene.dart
@@ -4,21 +4,21 @@ import 'package:graphx/graphx.dart';
import '../utils.dart';
class ValueScene extends GSprite {
- GShape bgColor;
- GShape bgBrightness;
- GShape bgValue;
- GSprite colorsContainer;
- ByteData colorsBytes;
- GShape selector;
- Color _selectedColor;
- double sw, sh;
+ late GShape bgColor;
+ late GShape bgBrightness;
+ late GShape bgValue;
+ late GSprite colorsContainer;
+ ByteData? colorsBytes;
+ late GShape selector;
+ Color? _selectedColor;
+ double sw = 0.0, sh = 0.0;
ValueScene();
@override
void addedToStage() {
- sw = stage.stageWidth;
- sh = stage.stageHeight;
+ sw = stage!.stageWidth;
+ sh = stage!.stageHeight;
bgColor = GShape();
bgColor.graphics
@@ -52,16 +52,16 @@ class ValueScene extends GSprite {
addChild(selector);
mouseChildren = false;
- stage.onMouseDown.add((e) {
+ stage!.onMouseDown.add((e) {
_updateColor();
selector.tween(duration: .4, scale: 1.5);
GMouse.hide();
- stage.onMouseUp.addOnce((e) {
+ stage!.onMouseUp.addOnce((e) {
GMouse.show();
selector.tween(duration: .3, scale: 1);
});
});
- stage.onMouseMove.add(_handleMouseMove);
+ stage!.onMouseMove.add(_handleMouseMove);
pickerMPS.on(ColorPickerEmitter.changeHue, handleChangeHue);
}
@@ -77,7 +77,8 @@ class ValueScene extends GSprite {
updateColor();
}
- void drawGradient(Graphics graphics, {Color color, bool isHorizontal}) {
+ void drawGradient(Graphics graphics,
+ {required Color color, required bool isHorizontal}) {
var from = isHorizontal ? Alignment.centerLeft : Alignment.bottomCenter;
var to = isHorizontal ? Alignment.centerRight : Alignment.topCenter;
graphics
@@ -109,7 +110,7 @@ class ValueScene extends GSprite {
void updateColor() {
if (colorsBytes == null) return;
_selectedColor = getPixelColor(
- colorsBytes,
+ colorsBytes!,
sw.toInt(),
sh.toInt(),
selector.x.toInt(),
@@ -117,7 +118,7 @@ class ValueScene extends GSprite {
);
/// emit the event to update the UI.
- pickerNotifier.value = _selectedColor;
+ pickerNotifier.value = _selectedColor!;
// pickerMPS.emit1(ColorPickerEmitter.changeValue, _selectedColor);
}
}
diff --git a/example/lib/demos/color_picker/utils.dart b/example/lib/demos/color_picker/utils.dart
index 13e9bad..25b8814 100644
--- a/example/lib/demos/color_picker/utils.dart
+++ b/example/lib/demos/color_picker/utils.dart
@@ -31,9 +31,9 @@ Color getPixelColor(
return Color.fromARGB(a, r, g, b);
}
-Future getImageBytes(GDisplayObject object) async {
+Future getImageBytes(GDisplayObject object) async {
var texture = await object.createImageTexture(true, 1);
- var data = texture.root.toByteData(format: ImageByteFormat.rawRgba);
+ var data = texture.root!.toByteData(format: ImageByteFormat.rawRgba);
// texture?.dispose();
// texture = null;
return data;
diff --git a/example/lib/demos/colorful_loader/scene/bubble_preloader.dart b/example/lib/demos/colorful_loader/scene/bubble_preloader.dart
index 73edcbc..172db2f 100644
--- a/example/lib/demos/colorful_loader/scene/bubble_preloader.dart
+++ b/example/lib/demos/colorful_loader/scene/bubble_preloader.dart
@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:graphx/graphx.dart';
class BubblePreloader extends GSprite {
-
static const gradientColors = [
Color(0xFF9874D3),
Color(0xFF6E7CCC),
@@ -13,9 +12,9 @@ class BubblePreloader extends GSprite {
];
double w, h;
- GShape bg, percentMask, bgGradient;
- GSprite percentContainer, bubblesContainer;
- double borderRadius, percent = 0.25, gradientShift = 0.0;
+ GShape? bg, percentMask, bgGradient;
+ late GSprite percentContainer, bubblesContainer;
+ double borderRadius = 0.0, percent = 0.25, gradientShift = 0.0;
Color bgColor = const Color(0xffDEE0E3);
int numBubbles = 50;
@@ -37,11 +36,11 @@ class BubblePreloader extends GSprite {
bgGradient = GShape();
percentMask = GShape();
- percentContainer.addChild(bgGradient);
+ percentContainer.addChild(bgGradient!);
percentContainer.addChild(bubblesContainer);
- addChild(bg);
+ addChild(bg!);
addChild(percentContainer);
- addChild(percentMask);
+ addChild(percentMask!);
percentContainer.mask = percentMask;
_drawBack();
@@ -96,7 +95,7 @@ class BubblePreloader extends GSprite {
}
void _drawMask() {
- percentMask.graphics
+ percentMask!.graphics
.clear()
.beginFill(bgColor)
.drawRoundRect(0, 0, w * percent, h, borderRadius)
@@ -114,7 +113,7 @@ class BubblePreloader extends GSprite {
}
void _drawBack() {
- bg.graphics
+ bg!.graphics
.beginFill(bgColor)
.drawRoundRect(0, 0, w, h, borderRadius)
.endFill();
@@ -125,7 +124,7 @@ class BubblePreloader extends GSprite {
gradientShift %= 3;
var a1 = -1.0 - gradientShift;
var a2 = 4.0 - gradientShift;
- bgGradient.graphics
+ bgGradient!.graphics
.clear()
.beginGradientFill(
GradientType.linear,
diff --git a/example/lib/demos/colorful_loader/scene/scene.dart b/example/lib/demos/colorful_loader/scene/scene.dart
index f6fdb63..27b5a4e 100644
--- a/example/lib/demos/colorful_loader/scene/scene.dart
+++ b/example/lib/demos/colorful_loader/scene/scene.dart
@@ -11,7 +11,7 @@ import 'bubble_preloader.dart';
/// just a wrapper scene class.
class ColorLoaderScene extends GSprite {
- BubblePreloader loader;
+ late BubblePreloader loader;
@override
void addedToStage() {
@@ -21,11 +21,11 @@ class ColorLoaderScene extends GSprite {
loader = BubblePreloader(w: 385, h: 14);
addChild(loader);
- stage.onResized.add(_handleStageResize);
+ stage!.onResized.add(_handleStageResize);
}
void _handleStageResize() {
- loader.x = (stage.stageWidth - loader.w) / 2;
- loader.y = (stage.stageHeight - loader.h) / 2;
+ loader.x = (stage!.stageWidth - loader.w) / 2;
+ loader.y = (stage!.stageHeight - loader.h) / 2;
}
}
diff --git a/example/lib/demos/dialer/dialer_scene.dart b/example/lib/demos/dialer/dialer_scene.dart
index 37e83e1..7b185ca 100644
--- a/example/lib/demos/dialer/dialer_scene.dart
+++ b/example/lib/demos/dialer/dialer_scene.dart
@@ -12,7 +12,7 @@ import 'package:graphx/graphx.dart';
const pinkColor = Color(0xffDD3D5C);
class DialerScene extends GSprite {
- Dialer dialer;
+ late Dialer dialer;
@override
void addedToStage() {
@@ -26,11 +26,11 @@ class Dialer extends GSprite {
double radius = 700 / 2;
bool isPressed = false;
GPoint pressed = GPoint();
- GShape bg;
+ late GShape bg;
double prevRot = 0.0;
double pressRot = 0.0;
- Dialer([GSprite doc]) {
+ Dialer([GSprite? doc]) {
_draw();
doc?.addChild(this);
@@ -42,7 +42,7 @@ class Dialer extends GSprite {
pressed.setTo(mouseX, mouseY);
prevRot = bg.rotation;
pressRot = Math.atan2(mouseY, mouseX); //bg.rotation;
- stage.onMouseUp.add(
+ stage!.onMouseUp.add(
(event) => isPressed = false,
);
});
diff --git a/example/lib/demos/dna_3d/scene.dart b/example/lib/demos/dna_3d/scene.dart
index 4bd0423..48bd668 100644
--- a/example/lib/demos/dna_3d/scene.dart
+++ b/example/lib/demos/dna_3d/scene.dart
@@ -2,14 +2,14 @@ import 'package:flutter/material.dart';
import 'package:graphx/graphx.dart';
class DnaScene extends GSprite {
- double spiralRadius, centerX, centerY, centerZ;
+ double spiralRadius = 0.0, centerX = 0.0, centerY = 0.0, centerZ = 0.0;
double fl = 150;
- List dots;
+ late List dots;
@override
void addedToStage() async {
- stage.color = Colors.white;
+ stage!.color = Colors.white;
dots = List.generate(80, (index) {
var dot = Dot();
addChild(dot);
@@ -22,8 +22,8 @@ class DnaScene extends GSprite {
@override
void update(double delta) {
super.update(delta);
- centerX = stage.stageWidth / 2;
- centerY = stage.stageHeight / 2;
+ centerX = stage!.stageWidth / 2;
+ centerY = stage!.stageHeight / 2;
centerZ = 100.0;
spiralRadius = (mouseX - centerX) / 4;
@@ -47,7 +47,7 @@ class DnaScene extends GSprite {
/// we just make a class to store the basic properties
/// for the calculations.
class Dot extends GShape {
- double py, angle, speed = 5;
+ double py = 0.0, angle = 0.0, speed = 5;
Dot() {
graphics.beginFill(kColorBlack).drawCircle(0, 0, 10).endFill();
diff --git a/example/lib/demos/drawing_pad_bezier/drawing_pad/draw_pad_scene.dart b/example/lib/demos/drawing_pad_bezier/drawing_pad/draw_pad_scene.dart
index 893f6ee..08aba9f 100644
--- a/example/lib/demos/drawing_pad_bezier/drawing_pad/draw_pad_scene.dart
+++ b/example/lib/demos/drawing_pad_bezier/drawing_pad/draw_pad_scene.dart
@@ -6,9 +6,9 @@ import 'pad.dart';
class DrawPadScene extends GSprite {
int colorCount = 0;
- double get sw => stage.stageWidth;
+ double get sw => stage!.stageWidth;
- double get sh => stage.stageHeight;
+ double get sh => stage!.stageHeight;
double targetRot = 0;
double opacity = 1.0;
@@ -20,9 +20,9 @@ class DrawPadScene extends GSprite {
@override
void addedToStage() async {
- stage.onHotReload.addOnce(() {
- stage.onMouseScroll.removeAll();
- stage.onMouseMove.removeAll();
+ stage!.onHotReload.addOnce(() {
+ stage!.onMouseScroll.removeAll();
+ stage!.onMouseMove.removeAll();
mps.offAll('color');
mps.offAll('clear');
});
@@ -35,11 +35,11 @@ class DrawPadScene extends GSprite {
pad.onBegin = GMouse.hide;
pad.onEnd = GMouse.show;
- stage.onMouseScroll.add((event) {
+ stage!.onMouseScroll.add((event) {
var dir = event.scrollDelta.y;
if (dir == 0) return;
dir = dir < 0 ? 1 : -1;
- if (stage.keyboard.isShiftPressed) {
+ if (stage!.keyboard!.isShiftPressed) {
pad.minW += (dir * .1);
pad.minW = pad.minW.clamp(minRad, maxRad);
} else {
@@ -47,13 +47,13 @@ class DrawPadScene extends GSprite {
pad.maxW = pad.maxW.clamp(minRad, maxRad);
}
});
- stage.onResized.add(() => pad.resize(sw, sh));
+ stage!.onResized.add(() => pad.resize(sw, sh));
pad.minW = .2;
pad.maxW = 12.2;
mps.on('alpha', (double alpha) {
opacity = alpha;
- pad.canvas.alpha = alpha;
+ pad.canvas!.alpha = alpha;
});
mps.on('color', (Color color) {
pad.penColor = color;
diff --git a/example/lib/demos/drawing_pad_bezier/drawing_pad/pad.dart b/example/lib/demos/drawing_pad_bezier/drawing_pad/pad.dart
index 94be25c..87ec134 100644
--- a/example/lib/demos/drawing_pad_bezier/drawing_pad/pad.dart
+++ b/example/lib/demos/drawing_pad_bezier/drawing_pad/pad.dart
@@ -15,24 +15,24 @@ class Pad extends GSprite {
Color penColor = Color(0xff000000);
Color backgroundColor = Colors.black;
- Function onBegin, onEnd, onUpdate;
+ Function? onBegin, onEnd, onUpdate;
final List _lastPoints = [];
double _lastVelocity = 0;
double _lastWidth = 0;
- GShape _canvas;
+ GShape? _canvas;
- GShape _bg;
+ late GShape _bg;
- GShape get canvas => _canvas;
- Graphics _g;
+ GShape? get canvas => _canvas;
+ late Graphics _g;
double w, h;
Pad({this.w = 300, this.h = 200}) {
_canvas = GShape();
_bg = GShape();
addChild(_bg);
- addChild(_canvas);
- _g = _canvas.graphics;
+ addChild(_canvas!);
+ _g = _canvas!.graphics;
clear();
on();
}
@@ -51,11 +51,7 @@ class Pad extends GSprite {
.beginFill(backgroundColor)
.drawRect(0, 0, w, h)
.endFill();
- _g
- .clear()
- .beginFill(baseTransparent)
- .drawRect(0, 0, w, h)
- .endFill();
+ _g.clear().beginFill(baseTransparent).drawRect(0, 0, w, h).endFill();
_data.clear();
_reset();
_isEmpty = true;
@@ -76,7 +72,7 @@ class Pad extends GSprite {
void off() {
onMouseDown.remove(_handleMouseDown);
onMouseMove.remove(_handleMouseMove);
- stage?.onMouseUp?.remove(_handleMouseUp);
+ stage?.onMouseUp.remove(_handleMouseUp);
}
void on() {
@@ -85,7 +81,7 @@ class Pad extends GSprite {
}
_handleMouseDown(MouseInputData input) {
- stage.onMouseUp.addOnce(_handleMouseUp);
+ stage!.onMouseUp.addOnce(_handleMouseUp);
_isMouseDown = true;
_strokeBegin(input);
}
@@ -125,15 +121,15 @@ class Pad extends GSprite {
return;
}
- final mx = _canvas.mouseX;
- final my = _canvas.mouseY;
+ final mx = _canvas!.mouseX;
+ final my = _canvas!.mouseY;
final point = _createPoint(mx, my);
final lastPointData = _data.last;
var lastPoints = lastPointData.points;
var lastPoint = lastPoints.isNotEmpty ? lastPoints.last : null;
var hasLastPoint = lastPoint != null;
var isLastPointTooClose =
- hasLastPoint ? point.distanceTo(lastPoint) <= minDist : false;
+ hasLastPoint ? point.distanceTo(lastPoint!) <= minDist : false;
final color = lastPointData.color;
if (!hasLastPoint || !(hasLastPoint && isLastPointTooClose)) {
@@ -150,7 +146,7 @@ class Pad extends GSprite {
PadPoint _createPoint(double px, double py) => PadPoint(px, py, getTimer());
- BezierDraw _addPoint(PadPoint point) {
+ BezierDraw? _addPoint(PadPoint point) {
_lastPoints.add(point);
if (_lastPoints.length > 2) {
if (_lastPoints.length == 3) {
@@ -231,7 +227,7 @@ class Pad extends GSprite {
class _StrokeData {
Color color;
- List points;
+ late List points;
_StrokeData(this.color) {
points = [];
diff --git a/example/lib/demos/drawing_pad_bezier/drawing_pad/point.dart b/example/lib/demos/drawing_pad_bezier/drawing_pad/point.dart
index 88e8b43..4bc48b9 100644
--- a/example/lib/demos/drawing_pad_bezier/drawing_pad/point.dart
+++ b/example/lib/demos/drawing_pad_bezier/drawing_pad/point.dart
@@ -4,8 +4,8 @@ import 'package:graphx/graphx.dart';
class PadPoint {
double x, y;
- int time;
- PadPoint(this.x, this.y, [int time]) {
+ int? time;
+ PadPoint(this.x, this.y, [int? time]) {
this.time = time ?? getTimer();
}
@@ -15,7 +15,7 @@ class PadPoint {
}
double velocityForm(PadPoint start) =>
- time != start.time ? distanceTo(start) / (time - start.time) : 0.0;
+ time != start.time ? distanceTo(start) / (time! - start.time!) : 0.0;
PadPoint operator -(PadPoint other) => PadPoint(x - other.x, y - other.y);
PadPoint operator +(PadPoint other) => PadPoint(x + other.x, y + other.y);
diff --git a/example/lib/demos/dripping_iv/scene/dripping_scene.dart b/example/lib/demos/dripping_iv/scene/dripping_scene.dart
index a101a32..dffe144 100644
--- a/example/lib/demos/dripping_iv/scene/dripping_scene.dart
+++ b/example/lib/demos/dripping_iv/scene/dripping_scene.dart
@@ -1,17 +1,16 @@
-import '../../../utils/svg_utils.dart';
import 'package:flutter/material.dart';
import 'package:graphx/graphx.dart';
import 'svgs.dart';
class DrippingScene extends GSprite {
- GSvgShape drop;
+ late GSvgShape drop;
double tubeW = 38, tubeH = 157, tubeOffset = 4.0;
- GSprite tubeContainer;
- GShape water, tubeMask;
+ late GSprite tubeContainer;
+ GShape? water, tubeMask;
@override
Future addedToStage() async {
- stage.color = Colors.red;
+ stage!.color = Colors.red;
var dropData = await SvgUtils.svgDataFromString(dropSvg);
var tubeData = await SvgUtils.svgDataFromString(tubeSvgString);
final waterColor = Colors.white;
@@ -19,16 +18,16 @@ class DrippingScene extends GSprite {
var tube = GSvgShape(tubeData);
addChild(tube);
tubeMask = GShape();
- tubeMask.setPosition(13, 29);
- tubeMask.graphics
+ tubeMask!.setPosition(13, 29);
+ tubeMask!.graphics
.beginFill(Colors.white.withOpacity(.2))
.drawRoundRect(tubeOffset, tubeOffset, tubeW - tubeOffset * 2,
tubeH - tubeOffset * 2, tubeW / 2)
.endFill();
- addChild(tubeMask);
+ addChild(tubeMask!);
tubeContainer = GSprite();
- tubeContainer.setPosition(tubeMask.x, tubeMask.y);
+ tubeContainer.setPosition(tubeMask!.x, tubeMask!.y);
tubeContainer.mask = tubeMask;
addChild(tubeContainer);
@@ -39,12 +38,12 @@ class DrippingScene extends GSprite {
tubeContainer.addChild(drop);
water = GShape();
- water.graphics
+ water!.graphics
.beginFill(waterColor.withOpacity(.5))
.drawRect(0, 0, tubeW, 30);
- water.alignPivot(Alignment.bottomLeft);
- water.y = tubeH;
- tubeContainer.addChild(water);
+ water!.alignPivot(Alignment.bottomLeft);
+ water!.y = tubeH;
+ tubeContainer.addChild(water!);
addParticles();
// moveWater();
@@ -52,7 +51,7 @@ class DrippingScene extends GSprite {
/// This shouldnt be needed... if u wrap in a Sized widget.
alignPivot();
- setPosition(stage.stageWidth / 2, stage.stageHeight / 2);
+ setPosition(stage!.stageWidth / 2, stage!.stageHeight / 2);
}
void resetDripping() {
@@ -63,10 +62,10 @@ class DrippingScene extends GSprite {
}
void moveWater() {
- double targetH = water.height > 10 ? 5 : tubeH / 2;
+ double targetH = water!.height > 10 ? 5 : tubeH / 2;
/// toggle water box height up and down...
- water.tween(
+ water!.tween(
duration: 6,
height: targetH,
ease: GEase.linearToEaseOut,
diff --git a/example/lib/demos/elastic_band/scene.dart b/example/lib/demos/elastic_band/scene.dart
index c7b2e0f..8e40506 100644
--- a/example/lib/demos/elastic_band/scene.dart
+++ b/example/lib/demos/elastic_band/scene.dart
@@ -13,14 +13,14 @@ class ElasticBandScene extends GSprite {
@override
void addedToStage() {
- stage.onMouseDown.add(_handleMouseDown);
+ stage!.onMouseDown.add(_handleMouseDown);
_handleUp(null);
}
void _handleMouseDown(e) {
isPressed = true;
- stage.onMouseMove.add(_handleMouseMove);
- stage.onMouseUp.addOnce(_handleUp);
+ stage!.onMouseMove.add(_handleMouseMove);
+ stage!.onMouseUp.addOnce(_handleUp);
}
void _handleMouseMove(e) {
@@ -28,11 +28,11 @@ class ElasticBandScene extends GSprite {
}
void _handleUp(e) {
- stage.onMouseMove.remove(_handleMouseMove);
+ stage!.onMouseMove.remove(_handleMouseMove);
isPressed = false;
tweenPoint(
- stage.stageWidth / 2,
- stage.stageHeight / 2,
+ stage!.stageWidth / 2,
+ stage!.stageHeight / 2,
1,
GEase.elasticOut,
);
@@ -53,8 +53,8 @@ class ElasticBandScene extends GSprite {
}
void drawLine() {
- var sw = stage.stageWidth;
- var sh = stage.stageHeight;
+ var sw = stage!.stageWidth;
+ var sh = stage!.stageHeight;
var cx = sw / 2;
graphics
diff --git a/example/lib/demos/expander_fab_menu/expander_fab_menu.dart b/example/lib/demos/expander_fab_menu/expander_fab_menu.dart
index bb9931a..233af38 100644
--- a/example/lib/demos/expander_fab_menu/expander_fab_menu.dart
+++ b/example/lib/demos/expander_fab_menu/expander_fab_menu.dart
@@ -21,6 +21,7 @@ class ExpanderFabMenu extends StatelessWidget {
Icons.arrow_back,
color: Colors.black,
),
+ onPressed: () {},
),
),
body: MyMenu(
@@ -43,9 +44,9 @@ class ExpanderFabMenu extends StatelessWidget {
}
class MyMenu extends StatefulWidget {
- final Widget child;
+ final Widget? child;
- const MyMenu({Key key, this.child}) : super(key: key);
+ const MyMenu({Key? key, this.child}) : super(key: key);
@override
_MyMenuState createState() => _MyMenuState();
@@ -54,29 +55,22 @@ class MyMenu extends StatefulWidget {
class _MyMenuState extends State with TickerProviderStateMixin {
bool isOpen = false;
- AnimationController anim;
+ AnimationController? anim;
final GlobalKey mySuperKey = GlobalKey();
final menuScene = MyCoolMenuScene();
@override
void initState() {
super.initState();
- final dur = Duration(seconds: 1);
- // anim = AnimationController(
- // vsync: this,
- // duration: dur,
- // );
- // anim.addListener(() {
- // setState(() {});
- // });
- WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
+ menuScene.requestPositionCallback = getPosition;
+ WidgetsBinding.instance!.addPostFrameCallback((timeStamp) {
getPosition();
});
}
void getPosition() {
- var ro = mySuperKey.currentContext.findRenderObject() as RenderBox;
- var menuRO = context.findRenderObject() as RenderBox;
+ var ro = mySuperKey.currentContext!.findRenderObject() as RenderBox;
+ var menuRO = context.findRenderObject() as RenderBox?;
var position = ro.localToGlobal(Offset.zero, ancestor: menuRO);
menuScene.updatePosition(GRect.fromNative(position & ro.size));
}
@@ -95,7 +89,7 @@ class _MyMenuState extends State with TickerProviderStateMixin {
// color: Colors.red,
child: Column(
children: [
- Expanded(child: widget.child),
+ Expanded(child: widget.child!),
Container(
height: 60,
decoration: BoxDecoration(color: Colors.white, boxShadow: [
@@ -116,10 +110,6 @@ class _MyMenuState extends State with TickerProviderStateMixin {
color: Colors.transparent,
key: mySuperKey,
),
- // Visibility(
- // visible: !isOpen,
- // child: myFav(),
- // ),
baseButton,
baseButton,
],
@@ -134,56 +124,29 @@ class _MyMenuState extends State with TickerProviderStateMixin {
),
);
}
-
-// Widget buildAnimFab() {
-// print(isOpen);
-// print(anim.value);
-// print(pos);
-// if (!isOpen) {}
-// return Positioned(
-// top: pos.dy * (1 - anim.value),
-// left: pos.dx,
-// child: IconButton(
-// // key: mySuperKey,
-// icon: Icon(
-// Icons.accessibility,
-// color: Colors.red,
-// ),
-// // backgroundColor: Colors.white,
-// onPressed: () {
-// isOpen = !isOpen;
-// trace('pressed', isOpen);
-// if (isOpen) {
-// anim.forward();
-// } else {
-// anim.reverse();
-// }
-// },
-// ),
-// );
-// }
}
class MyCoolMenuScene extends GSprite {
- MyButton button;
-
bool isOpen = false;
+ late VoidCallback requestPositionCallback;
+ late MyButton button;
+ double? buttonY;
+ late GShape curtain;
+ late GSprite menuContainer;
MyCoolMenuScene() {
button = MyButton();
}
- GRect _position;
- double buttonY;
- GShape curtain;
void updatePosition(GRect position) {
- _position = position;
button.x = position.x + position.width / 2;
- button.y = buttonY = position.y + position.height / 2;
+ buttonY = position.y + position.height / 2;
+ if( !isOpen ){
+ button.y = buttonY;
+ }
}
- GSprite menuContainer;
@override
void addedToStage() {
@@ -196,6 +159,14 @@ class MyCoolMenuScene extends GSprite {
_buildMenu();
addChild(button);
+ stage!.onResized.add((){
+ requestPositionCallback.call();
+ menuContainer.setPosition(sw / 2, sh / 2);
+ if( isOpen ){
+ _renderCurt();
+ }
+ });
+
button.onMouseClick.add((event) {
isOpen = !isOpen;
button.open(isOpen);
@@ -220,7 +191,6 @@ class MyCoolMenuScene extends GSprite {
}
},
);
-
} else {
curtain.tween(
duration: .5,
@@ -238,17 +208,17 @@ class MyCoolMenuScene extends GSprite {
});
}
- double get sw => stage.stageWidth;
+ double get sw => stage!.stageWidth;
- double get sh => stage.stageHeight;
- var twnCurtainY = 0.0;
+ double get sh => stage!.stageHeight;
+ double? twnCurtainY = 0.0;
bool bounceCurtain = false;
_bounceCurtain() {
if (bounceCurtain) return;
bounceCurtain = true;
- final myTween = twnCurtainY.twn;
+ final myTween = twnCurtainY!.twn;
myTween.tween(
sh,
duration: 1,
@@ -265,12 +235,11 @@ class MyCoolMenuScene extends GSprite {
void _renderCurt() {
final g = curtain.graphics;
-
g.clear();
// g.lineStyle(2, Colors.black);
g.beginFill(Colors.red);
g.moveTo(0, sh);
- g.curveTo(button.x, sh, button.x, twnCurtainY);
+ g.curveTo(button.x, sh, button.x, twnCurtainY!);
g.curveTo(button.x, sh, sw, sh);
g.lineTo(sw, 0).lineTo(0, 0).closePath();
}
@@ -288,22 +257,22 @@ class MyCoolMenuScene extends GSprite {
doc: menuContainer,
);
itm.alignPivot();
- itm.alpha=0;
+ itm.alpha = 0;
itm.y = i * 34.0;
items.add(itm);
}
menuContainer.alignPivot();
- menuContainer.setPosition(sw/2,sh/2);
+ menuContainer.setPosition(sw / 2, sh / 2);
}
void showMenuNow() {
- var len = items.length ;
+ var len = items.length;
for (var i = 0; i < items.length; ++i) {
var itm = items[i];
itm.y = i * 34.0;
- double ta = isOpen ? 1 : 0 ;
- if( isOpen ){
- itm.tween(duration: .45, delay: .25 + ((len-1)-i) * .09, alpha: ta);
+ double ta = isOpen ? 1 : 0;
+ if (isOpen) {
+ itm.tween(duration: .45, delay: .25 + ((len - 1) - i) * .09, alpha: ta);
} else {
itm.tween(duration: .12, delay: 0, alpha: 0, overwrite: 1);
}
@@ -312,8 +281,8 @@ class MyCoolMenuScene extends GSprite {
}
class MyButton extends GSprite {
- GShape bg;
- GIcon icon;
+ late GShape bg;
+ late GIcon icon;
double radius = 20;
@override
diff --git a/example/lib/demos/fb_reactions/fb_reactions.dart b/example/lib/demos/fb_reactions/fb_reactions.dart
index 5840af6..b240406 100644
--- a/example/lib/demos/fb_reactions/fb_reactions.dart
+++ b/example/lib/demos/fb_reactions/fb_reactions.dart
@@ -56,9 +56,9 @@ class FacebookReactionsMain extends StatelessWidget {
}
class InnerCardItem extends StatelessWidget {
- final PostVo data;
+ final PostVo? data;
- const InnerCardItem({Key key, this.data}) : super(key: key);
+ const InnerCardItem({Key? key, this.data}) : super(key: key);
@override
Widget build(BuildContext context) {
@@ -82,14 +82,14 @@ class InnerCardItem extends StatelessWidget {
radius: 24,
/// dev channel
// foregroundImage: NetworkImage(data.profileImageUrl),
- child: Text(data.username[0].toUpperCase()),
+ child: Text(data!.username[0].toUpperCase()),
),
const SizedBox(width: 8),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
- data.username,
+ data!.username,
style: const TextStyle(
fontSize: 13,
fontWeight: FontWeight.bold,
@@ -97,7 +97,7 @@ class InnerCardItem extends StatelessWidget {
),
const SizedBox(height: 4),
Text(
- data.time,
+ data!.time,
style: const TextStyle(
fontSize: 10,
color: Colors.black38,
@@ -111,7 +111,7 @@ class InnerCardItem extends StatelessWidget {
const SizedBox(height: 8),
Text(
- data.title,
+ data!.title,
style: const TextStyle(
fontWeight: FontWeight.bold,
fontSize: 15,
@@ -133,7 +133,7 @@ class InnerCardItem extends StatelessWidget {
),
clipBehavior: Clip.antiAlias,
child: Image.network(
- data.imageUrl,
+ data!.imageUrl,
height: 240,
fit: BoxFit.cover,
),
@@ -143,12 +143,12 @@ class InnerCardItem extends StatelessWidget {
Row(
children: [
- _IconReaction.likes(count: data.numLikes),
+ _IconReaction.likes(count: data!.numLikes),
const SizedBox(width: 12),
- _IconReaction.comments(count: data.numComments),
+ _IconReaction.comments(count: data!.numComments),
Spacer(),
Text(
- data.shares,
+ data!.shares,
style: const TextStyle(
fontSize: 10,
color: Colors.black,
@@ -167,12 +167,12 @@ class InnerCardItem extends StatelessWidget {
}
class _IconReaction extends StatelessWidget {
- final IconData iconData;
+ final IconData? iconData;
final Color color;
- final int count;
+ final int? count;
const _IconReaction({
- Key key,
+ Key? key,
this.iconData,
this.color = Colors.black,
this.count,
@@ -194,7 +194,7 @@ class _IconReaction extends StatelessWidget {
children: [
Icon(
iconData,
- color: color ?? Colors.black,
+ color: color,
size: 16,
),
const SizedBox(width: 2),
diff --git a/example/lib/demos/fb_reactions/model.dart b/example/lib/demos/fb_reactions/model.dart
index 7a7c3c8..5ae47af 100644
--- a/example/lib/demos/fb_reactions/model.dart
+++ b/example/lib/demos/fb_reactions/model.dart
@@ -39,8 +39,8 @@ class PostVo {
final String imageUrl;
final String time;
- int numLikes, numComments;
- String shares;
+ int? numLikes, numComments;
+ late String shares;
PostVo._(
this.username,
diff --git a/example/lib/demos/fb_reactions/scene/menu_item.dart b/example/lib/demos/fb_reactions/scene/menu_item.dart
index aa7211b..0a9194d 100644
--- a/example/lib/demos/fb_reactions/scene/menu_item.dart
+++ b/example/lib/demos/fb_reactions/scene/menu_item.dart
@@ -3,11 +3,11 @@ import 'package:graphx/graphx.dart';
//// each face
class MenuItem extends GSprite {
- double size, targetTooltipY;
- GSprite pill;
- GShape bg, msk;
- GText label;
- GMovieClip emoji;
+ double? size, targetTooltipY;
+ late GSprite pill;
+ GShape? bg, msk;
+ late GText label;
+ late GMovieClip emoji;
MenuItem([this.size = 60]) {
_init();
@@ -18,16 +18,16 @@ class MenuItem extends GSprite {
/// bg is the emoji face.
bg = GShape();
- addChild(bg);
- bg.graphics
+ addChild(bg!);
+ bg!.graphics
.beginFill(Colors.black.withOpacity(.5))
- .drawCircle(0, 0, size / 2)
+ .drawCircle(0, 0, size! / 2)
.endFill();
msk = GShape();
- addChild(msk);
- msk.graphics.copyFrom(bg.graphics);
- msk.mouseEnabled = false;
+ addChild(msk!);
+ msk!.graphics.copyFrom(bg!.graphics);
+ msk!.mouseEnabled = false;
emoji = GMovieClip(frames: []);
addChild(emoji);
mouseChildren = false;
@@ -50,7 +50,7 @@ class MenuItem extends GSprite {
pill.mouseEnabled = false;
pill.scale = .75;
pill.addChild(label);
- targetTooltipY = -size * .9;
+ targetTooltipY = -size! * .9;
}
void showTooltip(bool flag) {
@@ -69,7 +69,7 @@ class MenuItem extends GSprite {
pill.scale = .75;
pill.addChild(label);
pill.alignPivot();
- targetTooltipY = -size * .9;
+ targetTooltipY = -size! * .9;
}
void drawBackground() {
@@ -87,9 +87,9 @@ class MenuItem extends GSprite {
}
void _setGifAtlas(String gifId) {
- final myAtlas = ResourceLoader.getGif(gifId);
+ final myAtlas = ResourceLoader.getGif(gifId)!;
emoji.setFrameTextures(myAtlas.textureFrames);
- emoji.width = size + 2;
+ emoji.width = size! + 2;
emoji.mask = bg;
emoji.scaleY = emoji.scaleX;
emoji.mouseEnabled = false;
diff --git a/example/lib/demos/fb_reactions/scene/menu_scene.dart b/example/lib/demos/fb_reactions/scene/menu_scene.dart
index 3f8e714..db880d1 100644
--- a/example/lib/demos/fb_reactions/scene/menu_scene.dart
+++ b/example/lib/demos/fb_reactions/scene/menu_scene.dart
@@ -36,34 +36,34 @@ class MenuScene extends GSprite {
'assets/fb_reactions/angry.gif',
),
];
- List