Merge pull request #2673 from jason-simmons/gradle_example
Example that builds a Flutter Android app using Gradle
diff --git a/dev/manual_tests/android/AndroidManifest.xml b/dev/manual_tests/android/AndroidManifest.xml
new file mode 100644
index 0000000..98a4eaf
--- /dev/null
+++ b/dev/manual_tests/android/AndroidManifest.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2015 The Chromium Authors. All rights reserved.
+ Use of this source code is governed by a BSD-style license that can be
+ found in the LICENSE file.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="io.flutter.tests.ManualTests" android:versionCode="1" android:versionName="0.0.1">
+
+ <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" />
+ <uses-permission android:name="android.permission.INTERNET"/>
+
+ <application android:label="Flutter Manual Tests" android:name="org.domokit.sky.shell.SkyApplication">
+ <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize" android:hardwareAccelerated="true" android:launchMode="singleTask" android:name="org.domokit.sky.shell.SkyActivity" android:theme="@android:style/Theme.Black.NoTitleBar">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+ </manifest>
diff --git a/dev/manual_tests/card_collection.dart b/dev/manual_tests/card_collection.dart
index 602d3bf..1ea8b09 100644
--- a/dev/manual_tests/card_collection.dart
+++ b/dev/manual_tests/card_collection.dart
@@ -17,6 +17,7 @@
}
class CardCollection extends StatefulWidget {
+ @override
CardCollectionState createState() => new CardCollectionState();
}
@@ -72,6 +73,7 @@
_initVariableSizedCardModels();
}
+ @override
void initState() {
super.initState();
_initCardModels();
@@ -403,6 +405,7 @@
.createShader(bounds);
}
+ @override
Widget build(BuildContext context) {
Widget cardCollection;
if (_fixedSizeCards) {
diff --git a/dev/manual_tests/drag_and_drop.dart b/dev/manual_tests/drag_and_drop.dart
index 832a01d..f7c5a76 100644
--- a/dev/manual_tests/drag_and_drop.dart
+++ b/dev/manual_tests/drag_and_drop.dart
@@ -7,6 +7,7 @@
import 'package:flutter/material.dart';
class ExampleDragTarget extends StatefulWidget {
+ @override
ExampleDragTargetState createState() => new ExampleDragTargetState();
}
@@ -19,6 +20,7 @@
});
}
+ @override
Widget build(BuildContext context) {
return new DragTarget<Color>(
onAccept: _handleAccept,
@@ -41,14 +43,19 @@
class Dot extends StatefulWidget {
Dot({ Key key, this.color, this.size, this.child, this.tappable: false }) : super(key: key);
+
final Color color;
final double size;
final Widget child;
final bool tappable;
+
+ @override
DotState createState() => new DotState();
}
class DotState extends State<Dot> {
int taps = 0;
+
+ @override
Widget build(BuildContext context) {
return new GestureDetector(
onTap: config.tappable ? () { setState(() { taps += 1; }); } : null,
@@ -84,6 +91,7 @@
static const double kHeavyMultiplier = 1.5;
static const double kFingerSize = 50.0;
+ @override
Widget build(BuildContext context) {
double size = kDotSize;
if (heavy)
@@ -146,6 +154,7 @@
static const double segmentArc = deltaTheta / 2.0; // radians
static const double startOffset = 1.0; // radians
+ @override
void paint(Canvas canvas, Size size) {
final double radius = size.shortestSide / 2.0;
final Paint paint = new Paint()
@@ -159,6 +168,7 @@
canvas.drawPath(path, paint);
}
+ @override
bool shouldRepaint(DashOutlineCirclePainter oldPainter) => false;
}
@@ -172,6 +182,7 @@
static final GlobalKey kBallKey = new GlobalKey();
static const double kBallSize = 50.0;
+ @override
Widget build(BuildContext context) {
Widget ball = new DefaultTextStyle(
style: Theme.of(context).textTheme.body1.copyWith(
@@ -213,14 +224,18 @@
}
class DragAndDropApp extends StatefulWidget {
+ @override
DragAndDropAppState createState() => new DragAndDropAppState();
}
class DragAndDropAppState extends State<DragAndDropApp> {
int position = 1;
+
void moveBall(int newPosition) {
setState(() { position = newPosition; });
}
+
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
diff --git a/dev/manual_tests/mozart.dart b/dev/manual_tests/mozart.dart
index 83840cf..2521c38 100644
--- a/dev/manual_tests/mozart.dart
+++ b/dev/manual_tests/mozart.dart
@@ -46,6 +46,7 @@
final GestureTapCallback onTap;
final GesturePanUpdateCallback onPanUpdate;
+ @override
Widget build(BuildContext context) {
double top, right, bottom, left, width, height;
@@ -93,6 +94,7 @@
final ChildViewConnection child;
final ValueChanged<ChildViewConnection> onClose;
+ @override
_WindowState createState() => new _WindowState();
}
@@ -119,6 +121,7 @@
config.onClose(config.child);
}
+ @override
Widget build(BuildContext context) {
return new Positioned(
left: _offset.dx,
@@ -167,6 +170,7 @@
final Widget child;
final ValueChanged<ChildViewConnection> onLaunch;
+ @override
Widget build(BuildContext context) {
return new RaisedButton(
onPressed: () { onLaunch(new ChildViewConnection(url: url)); },
@@ -180,6 +184,7 @@
final List<Widget> items;
+ @override
Widget build(BuildContext context) {
return new Row(
mainAxisAlignment: MainAxisAlignment.center,
@@ -189,6 +194,7 @@
}
class WindowManager extends StatefulWidget {
+ @override
_WindowManagerState createState() => new _WindowManagerState();
}
@@ -207,6 +213,7 @@
});
}
+ @override
Widget build(BuildContext context) {
return new Material(
child: new Stack(
diff --git a/dev/manual_tests/overlay_geometry.dart b/dev/manual_tests/overlay_geometry.dart
index 566f8e5..bcde679 100644
--- a/dev/manual_tests/overlay_geometry.dart
+++ b/dev/manual_tests/overlay_geometry.dart
@@ -27,6 +27,7 @@
final double size;
final MarkerType type;
+ @override
void paint(Canvas canvas, _) {
Paint paint = new Paint()..color = const Color(0x8000FF00);
double r = size / 2.0;
@@ -46,6 +47,7 @@
}
}
+ @override
bool shouldRepaint(_MarkerPainter oldPainter) {
return oldPainter.size != size
|| oldPainter.type != type;
@@ -64,6 +66,7 @@
final double size;
final MarkerType type;
+ @override
Widget build(BuildContext context) {
return new Positioned(
left: position.x - size / 2.0,
@@ -83,6 +86,7 @@
}
class OverlayGeometryApp extends StatefulWidget {
+ @override
OverlayGeometryAppState createState() => new OverlayGeometryAppState();
}
@@ -96,6 +100,7 @@
double markersScrollOffset;
ScrollListener scrollListener;
+ @override
void initState() {
super.initState();
List<double> cardHeights = <double>[
@@ -151,6 +156,7 @@
);
}
+ @override
Widget build(BuildContext context) {
List<Widget> layers = <Widget>[
new Scaffold(
diff --git a/dev/manual_tests/pageable_list.dart b/dev/manual_tests/pageable_list.dart
index d13eaca..fe2992d 100644
--- a/dev/manual_tests/pageable_list.dart
+++ b/dev/manual_tests/pageable_list.dart
@@ -14,10 +14,12 @@
}
class PageableListApp extends StatefulWidget {
+ @override
PageableListAppState createState() => new PageableListAppState();
}
class PageableListAppState extends State<PageableListApp> {
+ @override
void initState() {
super.initState();
List<Size> cardSizes = [
@@ -122,6 +124,7 @@
);
}
+ @override
Widget build(BuildContext context) {
return new IconTheme(
data: const IconThemeData(color: Colors.white),
diff --git a/dev/manual_tests/raw_keyboard.dart b/dev/manual_tests/raw_keyboard.dart
index 7960ac2..df57d6d 100644
--- a/dev/manual_tests/raw_keyboard.dart
+++ b/dev/manual_tests/raw_keyboard.dart
@@ -33,6 +33,7 @@
class RawKeyboardDemo extends StatefulWidget {
RawKeyboardDemo({ GlobalKey key }) : super(key: key);
+ @override
_HardwareKeyDemoState createState() => new _HardwareKeyDemoState();
}
@@ -45,6 +46,7 @@
});
}
+ @override
Widget build(BuildContext context) {
bool focused = Focus.at(context);
Widget child;
diff --git a/examples/hello_world/android/AndroidManifest.xml b/examples/hello_world/android/AndroidManifest.xml
new file mode 100644
index 0000000..6d96b4e
--- /dev/null
+++ b/examples/hello_world/android/AndroidManifest.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2015 The Chromium Authors. All rights reserved.
+ Use of this source code is governed by a BSD-style license that can be
+ found in the LICENSE file.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="io.flutter.examples.HelloWorld" android:versionCode="1" android:versionName="0.0.1">
+
+ <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" />
+ <uses-permission android:name="android.permission.INTERNET"/>
+
+ <application android:label="Flutter Hello" android:name="org.domokit.sky.shell.SkyApplication">
+ <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize" android:hardwareAccelerated="true" android:launchMode="singleTask" android:name="org.domokit.sky.shell.SkyActivity" android:theme="@android:style/Theme.Black.NoTitleBar">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+ </manifest>
diff --git a/examples/layers/android/AndroidManifest.xml b/examples/layers/android/AndroidManifest.xml
new file mode 100644
index 0000000..e81d686
--- /dev/null
+++ b/examples/layers/android/AndroidManifest.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2015 The Chromium Authors. All rights reserved.
+ Use of this source code is governed by a BSD-style license that can be
+ found in the LICENSE file.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="io.flutter.examples.Layers" android:versionCode="1" android:versionName="0.0.1">
+
+ <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" />
+ <uses-permission android:name="android.permission.INTERNET"/>
+
+ <application android:label="Flutter Layers" android:name="org.domokit.sky.shell.SkyApplication">
+ <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize" android:hardwareAccelerated="true" android:launchMode="singleTask" android:name="org.domokit.sky.shell.SkyActivity" android:theme="@android:style/Theme.Black.NoTitleBar">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+ </manifest>
diff --git a/examples/layers/rendering/autolayout.dart b/examples/layers/rendering/autolayout.dart
index de29293..2380cd3 100644
--- a/examples/layers/rendering/autolayout.dart
+++ b/examples/layers/rendering/autolayout.dart
@@ -14,6 +14,7 @@
AutoLayoutRect p3 = new AutoLayoutRect();
AutoLayoutRect p4 = new AutoLayoutRect();
+ @override
List<al.Constraint> getConstraints(AutoLayoutRect parent) {
return <al.Constraint>[
// Sum of widths of each box must be equal to that of the container
@@ -44,6 +45,7 @@
];
}
+ @override
bool shouldUpdateConstraints(AutoLayoutDelegate oldDelegate) => true;
}
diff --git a/examples/layers/rendering/src/sector_layout.dart b/examples/layers/rendering/src/sector_layout.dart
index d8b69f4..069888c 100644
--- a/examples/layers/rendering/src/sector_layout.dart
+++ b/examples/layers/rendering/src/sector_layout.dart
@@ -36,9 +36,13 @@
return deltaTheta.clamp(minDeltaTheta, maxDeltaTheta);
}
+ @override
bool get isTight => minDeltaTheta >= maxDeltaTheta && minDeltaTheta >= maxDeltaTheta;
+ @override
bool get isNormalized => minDeltaRadius <= maxDeltaRadius && minDeltaTheta <= maxDeltaTheta;
+
+ @override
bool get debugAssertIsNormalized {
assert(isNormalized);
return isNormalized;
@@ -69,6 +73,7 @@
abstract class RenderSector extends RenderObject {
+ @override
void setupParentData(RenderObject child) {
if (child.parentData is! SectorParentData)
child.parentData = new SectorParentData();
@@ -76,13 +81,17 @@
// RenderSectors always use SectorParentData subclasses, as they need to be
// able to read their position information for painting and hit testing.
+ @override
SectorParentData get parentData => super.parentData;
SectorDimensions getIntrinsicDimensions(SectorConstraints constraints, double radius) {
return new SectorDimensions.withConstraints(constraints);
}
+ @override
SectorConstraints get constraints => super.constraints;
+
+ @override
void debugAssertDoesMeetConstraints() {
assert(constraints != null);
assert(deltaRadius != null);
@@ -94,11 +103,15 @@
assert(constraints.minDeltaTheta <= deltaTheta);
assert(deltaTheta <= math.max(constraints.minDeltaTheta, constraints.maxDeltaTheta));
}
+
+ @override
void performResize() {
// default behavior for subclasses that have sizedByParent = true
deltaRadius = constraints.constrainDeltaRadius(0.0);
deltaTheta = constraints.constrainDeltaTheta(0.0);
}
+
+ @override
void performLayout() {
// descendants have to either override performLayout() to set both
// the dimensions and lay out children, or, set sizedByParent to
@@ -106,7 +119,10 @@
assert(sizedByParent);
}
+ @override
Rect get paintBounds => new Rect.fromLTWH(0.0, 0.0, 2.0 * deltaRadius, 2.0 * deltaRadius);
+
+ @override
Rect get semanticBounds => new Rect.fromLTWH(-deltaRadius, -deltaRadius, 2.0 * deltaRadius, 2.0 * deltaRadius);
bool hitTest(HitTestResult result, { double radius, double theta }) {
@@ -137,6 +153,7 @@
}
// offset must point to the center of the circle
+ @override
void paint(PaintingContext context, Offset offset) {
assert(deltaRadius != null);
assert(deltaTheta != null);
@@ -167,6 +184,7 @@
class RenderSectorWithChildren extends RenderDecoratedSector with ContainerRenderObjectMixin<RenderSector, SectorChildListParentData> {
RenderSectorWithChildren(BoxDecoration decoration) : super(decoration);
+ @override
void hitTestChildren(HitTestResult result, { double radius, double theta }) {
RenderSector child = lastChild;
while (child != null) {
@@ -177,6 +195,7 @@
}
}
+ @override
void visitChildren(RenderObjectVisitor visitor) {
RenderSector child = lastChild;
while (child != null) {
@@ -217,12 +236,14 @@
}
}
+ @override
void setupParentData(RenderObject child) {
// TODO(ianh): avoid code duplication
if (child.parentData is! SectorChildListParentData)
child.parentData = new SectorChildListParentData();
}
+ @override
SectorDimensions getIntrinsicDimensions(SectorConstraints constraints, double radius) {
double outerDeltaRadius = constraints.constrainDeltaRadius(desiredDeltaRadius);
double innerDeltaRadius = outerDeltaRadius - padding * 2.0;
@@ -251,6 +272,7 @@
deltaTheta: innerTheta);
}
+ @override
void performLayout() {
assert(this.parentData is SectorParentData);
deltaRadius = constraints.constrainDeltaRadius(desiredDeltaRadius);
@@ -284,6 +306,7 @@
// offset must point to the center of our circle
// each sector then knows how to paint itself at its location
+ @override
void paint(PaintingContext context, Offset offset) {
// TODO(ianh): avoid code duplication
super.paint(context, offset);
@@ -327,12 +350,14 @@
}
}
+ @override
void setupParentData(RenderObject child) {
// TODO(ianh): avoid code duplication
if (child.parentData is! SectorChildListParentData)
child.parentData = new SectorChildListParentData();
}
+ @override
SectorDimensions getIntrinsicDimensions(SectorConstraints constraints, double radius) {
assert(this.parentData is SectorParentData);
double paddingTheta = math.atan(padding / this.parentData.radius);
@@ -359,6 +384,7 @@
deltaTheta: outerDeltaTheta);
}
+ @override
void performLayout() {
assert(this.parentData is SectorParentData);
deltaTheta = constraints.constrainDeltaTheta(desiredDeltaTheta);
@@ -389,6 +415,7 @@
// offset must point to the center of our circle
// each sector then knows how to paint itself at its location
+ @override
void paint(PaintingContext context, Offset offset) {
// TODO(ianh): avoid code duplication
super.paint(context, offset);
@@ -417,29 +444,34 @@
markNeedsLayout();
}
+ @override
void setupParentData(RenderObject child) {
if (child.parentData is! SectorParentData)
child.parentData = new SectorParentData();
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
if (child == null)
return super.getMinIntrinsicWidth(constraints);
return getIntrinsicDimensions(constraints).width;
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
if (child == null)
return super.getMaxIntrinsicWidth(constraints);
return getIntrinsicDimensions(constraints).width;
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
if (child == null)
return super.getMinIntrinsicHeight(constraints);
return getIntrinsicDimensions(constraints).height;
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
if (child == null)
return super.getMaxIntrinsicHeight(constraints);
@@ -456,6 +488,7 @@
return constraints.constrain(new Size(dimension, dimension));
}
+ @override
void performLayout() {
if (child == null) {
size = constraints.constrain(Size.zero);
@@ -472,6 +505,7 @@
}
}
+ @override
void paint(PaintingContext context, Offset offset) {
super.paint(context, offset);
if (child != null) {
@@ -481,6 +515,7 @@
}
}
+ @override
bool hitTest(HitTestResult result, { Point position }) {
if (child == null)
return false;
@@ -516,15 +551,18 @@
double desiredDeltaTheta;
final Color backgroundColor;
+ @override
SectorDimensions getIntrinsicDimensions(SectorConstraints constraints, double radius) {
return new SectorDimensions.withConstraints(constraints, deltaTheta: desiredDeltaTheta);
}
+ @override
void performLayout() {
deltaRadius = constraints.constrainDeltaRadius(desiredDeltaRadius);
deltaTheta = constraints.constrainDeltaTheta(desiredDeltaTheta);
}
+ @override
void handleEvent(PointerEvent event, HitTestEntry entry) {
if (event is PointerDownEvent) {
decoration = new BoxDecoration(backgroundColor: const Color(0xFFFF0000));
diff --git a/examples/layers/rendering/src/solid_color_box.dart b/examples/layers/rendering/src/solid_color_box.dart
index d4dbcf0..77dce23 100644
--- a/examples/layers/rendering/src/solid_color_box.dart
+++ b/examples/layers/rendering/src/solid_color_box.dart
@@ -13,34 +13,40 @@
: backgroundColor = backgroundColor,
super(decoration: new BoxDecoration(backgroundColor: backgroundColor));
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
return constraints.constrainHeight(
this.desiredSize == Size.infinite ? 0.0 : desiredSize.width
);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
return constraints.constrainWidth(
this.desiredSize == Size.infinite ? 0.0 : desiredSize.width
);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
return constraints.constrainHeight(
this.desiredSize == Size.infinite ? 0.0 : desiredSize.height
);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
return constraints.constrainHeight(
this.desiredSize == Size.infinite ? 0.0 : desiredSize.height
);
}
+ @override
void performLayout() {
size = constraints.constrain(desiredSize);
}
+ @override
void handleEvent(PointerEvent event, BoxHitTestEntry entry) {
if (event is PointerDownEvent) {
decoration = new BoxDecoration(backgroundColor: const Color(0xFFFF0000));
diff --git a/examples/layers/rendering/touch_input.dart b/examples/layers/rendering/touch_input.dart
index 05a50fc..c566949 100644
--- a/examples/layers/rendering/touch_input.dart
+++ b/examples/layers/rendering/touch_input.dart
@@ -45,20 +45,24 @@
/// Indicates that the size of this render object depends only on the
/// layout constraints provided by the parent.
+ @override
bool get sizedByParent => true;
/// By selecting the biggest value permitted by the incomming constraints
/// during layout, this function makes this render object as large as
/// possible (i.e., fills the entire screen).
+ @override
void performResize() {
size = constraints.biggest;
}
/// Makes this render object hittable so that it receives pointer events.
+ @override
bool hitTestSelf(Point position) => true;
/// Processes pointer events by mutating state and invalidating its previous
/// painting commands.
+ @override
void handleEvent(PointerEvent event, BoxHitTestEntry entry) {
if (event is PointerDownEvent) {
Color color = _kColors[event.pointer.remainder(_kColors.length)];
@@ -78,6 +82,7 @@
}
/// Issues new painting commands.
+ @override
void paint(PaintingContext context, Offset offset) {
final Canvas canvas = context.canvas;
// The "size" property indicates the size of that this render box was
diff --git a/examples/layers/services/media_service.dart b/examples/layers/services/media_service.dart
index 1bd51ce..2bb0e4a 100644
--- a/examples/layers/services/media_service.dart
+++ b/examples/layers/services/media_service.dart
@@ -74,6 +74,7 @@
}
}
+ @override
Widget build(BuildContext context) {
List<Widget> children = <Widget>[];
for (PianoKey key in keys) {
diff --git a/examples/layers/widgets/autolayout.dart b/examples/layers/widgets/autolayout.dart
index 3b4d028..11bd267 100644
--- a/examples/layers/widgets/autolayout.dart
+++ b/examples/layers/widgets/autolayout.dart
@@ -13,6 +13,7 @@
AutoLayoutRect p3 = new AutoLayoutRect();
AutoLayoutRect p4 = new AutoLayoutRect();
+ @override
List<al.Constraint> getConstraints(AutoLayoutRect parent) {
return <al.Constraint>[
// Sum of widths of each box must be equal to that of the container
@@ -43,16 +44,19 @@
];
}
+ @override
bool shouldUpdateConstraints(_MyAutoLayoutDelegate oldDelegate) => true;
}
class ColoredBoxes extends StatefulWidget {
+ @override
_ColoredBoxesState createState() => new _ColoredBoxesState();
}
class _ColoredBoxesState extends State<ColoredBoxes> {
final _MyAutoLayoutDelegate delegate = new _MyAutoLayoutDelegate();
+ @override
Widget build(BuildContext context) {
return new AutoLayout(
delegate: delegate,
diff --git a/examples/layers/widgets/custom_render_box.dart b/examples/layers/widgets/custom_render_box.dart
index a938388..f5ace57 100644
--- a/examples/layers/widgets/custom_render_box.dart
+++ b/examples/layers/widgets/custom_render_box.dart
@@ -9,10 +9,12 @@
RenderDots() : super(additionalConstraints: const BoxConstraints.expand());
// Makes this render box hittable so that we'll get pointer events.
+ @override
bool hitTestSelf(Point position) => true;
final Map<int, Point> _dots = <int, Point>{};
+ @override
void handleEvent(PointerEvent event, BoxHitTestEntry entry) {
if (event is PointerDownEvent || event is PointerMoveEvent) {
_dots[event.pointer] = event.position;
@@ -23,6 +25,7 @@
}
}
+ @override
void paint(PaintingContext context, Offset offset) {
final Canvas canvas = context.canvas;
canvas.drawRect(offset & size, new Paint()..color = new Color(0xFF0000FF));
@@ -37,6 +40,8 @@
class Dots extends SingleChildRenderObjectWidget {
Dots({ Key key, Widget child }) : super(key: key, child: child);
+
+ @override
RenderDots createRenderObject(BuildContext context) => new RenderDots();
}
diff --git a/examples/layers/widgets/gestures.dart b/examples/layers/widgets/gestures.dart
index 7fa1042..d44415d 100644
--- a/examples/layers/widgets/gestures.dart
+++ b/examples/layers/widgets/gestures.dart
@@ -25,6 +25,7 @@
final bool doubleTapEnabled;
final bool longPressEnabled;
+ @override
void paint(Canvas canvas, Size size) {
Point center = (size.center(Point.origin).toOffset() * zoom + offset).toPoint();
double radius = size.width / 2.0 * zoom;
@@ -42,6 +43,7 @@
canvas.drawCircle(center, radius, paint);
}
+ @override
bool shouldRepaint(_GesturePainter oldPainter) {
return oldPainter.zoom != zoom
|| oldPainter.offset != offset
@@ -55,6 +57,7 @@
}
class GestureDemo extends StatefulWidget {
+ @override
_GestureDemoState createState() => new _GestureDemoState();
}
@@ -134,6 +137,7 @@
});
}
+ @override
Widget build(BuildContext context) {
return new Stack(
children: <Widget>[
diff --git a/examples/layers/widgets/media_query.dart b/examples/layers/widgets/media_query.dart
index 20120d0..5c50264 100644
--- a/examples/layers/widgets/media_query.dart
+++ b/examples/layers/widgets/media_query.dart
@@ -9,6 +9,7 @@
final String name;
+ @override
Widget build(BuildContext context) {
return new Row(
children: <Widget>[
@@ -31,6 +32,7 @@
final String name;
+ @override
Widget build(BuildContext context) {
return new Card(
child: new Column(
@@ -70,6 +72,7 @@
final List<String> names;
+ @override
Widget build(BuildContext context) {
if (MediaQuery.of(context).size.width < _kGridViewBreakpoint) {
return new ScrollableList(
diff --git a/examples/layers/widgets/sectors.dart b/examples/layers/widgets/sectors.dart
index e058043..33ac584 100644
--- a/examples/layers/widgets/sectors.dart
+++ b/examples/layers/widgets/sectors.dart
@@ -17,6 +17,7 @@
}
class SectorApp extends StatefulWidget {
+ @override
SectorAppState createState() => new SectorAppState();
}
@@ -147,6 +148,7 @@
);
}
+ @override
Widget build(BuildContext context) {
return new MaterialApp(
theme: new ThemeData.light(),
diff --git a/examples/layers/widgets/spinning_mixed.dart b/examples/layers/widgets/spinning_mixed.dart
index 2998e2c..9b4e5cf 100644
--- a/examples/layers/widgets/spinning_mixed.dart
+++ b/examples/layers/widgets/spinning_mixed.dart
@@ -18,7 +18,10 @@
// Solid colour, Widget version
class Rectangle extends StatelessWidget {
Rectangle(this.color, { Key key }) : super(key: key);
+
final Color color;
+
+ @override
Widget build(BuildContext context) {
return new Flexible(
child: new Container(
diff --git a/examples/layers/widgets/spinning_square.dart b/examples/layers/widgets/spinning_square.dart
index bf754c6..8af6deb 100644
--- a/examples/layers/widgets/spinning_square.dart
+++ b/examples/layers/widgets/spinning_square.dart
@@ -5,12 +5,14 @@
import 'package:flutter/widgets.dart';
class SpinningSquare extends StatefulWidget {
+ @override
_SpinningSquareState createState() => new _SpinningSquareState();
}
class _SpinningSquareState extends State<SpinningSquare> {
AnimationController _animation;
+ @override
void initState() {
super.initState();
// We use 3600 milliseconds instead of 1800 milliseconds because 0.0 -> 1.0
@@ -21,6 +23,7 @@
)..repeat();
}
+ @override
Widget build(BuildContext context) {
return new RotationTransition(
turns: _animation,
diff --git a/examples/layers/widgets/styled_text.dart b/examples/layers/widgets/styled_text.dart
index 505e11b..673126f 100644
--- a/examples/layers/widgets/styled_text.dart
+++ b/examples/layers/widgets/styled_text.dart
@@ -58,6 +58,7 @@
Widget toPlainText(String name, String text) => new Text(name + ":" + text);
class SpeakerSeparator extends StatelessWidget {
+ @override
Widget build(BuildContext context) {
return new Container(
constraints: const BoxConstraints.expand(height: 0.0),
@@ -72,10 +73,12 @@
}
class StyledTextDemo extends StatefulWidget {
+ @override
_StyledTextDemoState createState() => new _StyledTextDemoState();
}
class _StyledTextDemoState extends State<StyledTextDemo> {
+ @override
void initState() {
super.initState();
_toText = toStyledText;
@@ -89,6 +92,7 @@
});
}
+ @override
Widget build(BuildContext context) {
List<Widget> lines = _kNameLines
.map((List<String> nameAndText) => Function.apply(_toText, nameAndText))
diff --git a/examples/material_gallery/lib/demo/buttons_demo.dart b/examples/material_gallery/lib/demo/buttons_demo.dart
index b1e2ecf..4ae9249 100644
--- a/examples/material_gallery/lib/demo/buttons_demo.dart
+++ b/examples/material_gallery/lib/demo/buttons_demo.dart
@@ -45,6 +45,7 @@
// to recover this demo's selected tab. To enable it to compare restored
// _ButtonDemo objects with new ones, define hashCode and operator== .
+ @override
bool operator==(Object other) {
if (other.runtimeType != runtimeType)
return false;
@@ -52,16 +53,19 @@
return typedOther.title == title && typedOther.text == text;
}
+ @override
int get hashCode => hashValues(title.hashCode, text.hashCode);
}
class ButtonsDemo extends StatefulWidget {
+ @override
_ButtonsDemoState createState() => new _ButtonsDemoState();
}
class _ButtonsDemoState extends State<ButtonsDemo> {
List<_ButtonDemo> demos;
+ @override
void initState() {
super.initState();
demos = <_ButtonDemo>[
@@ -192,6 +196,7 @@
);
}
+ @override
Widget build(BuildContext context) {
return new TabBarSelection<_ButtonDemo>(
values: demos,
diff --git a/examples/material_gallery/lib/demo/cards_demo.dart b/examples/material_gallery/lib/demo/cards_demo.dart
index f337a04..b379e0f 100644
--- a/examples/material_gallery/lib/demo/cards_demo.dart
+++ b/examples/material_gallery/lib/demo/cards_demo.dart
@@ -43,6 +43,7 @@
final TravelDestination destination;
+ @override
Widget build(BuildContext context) {
ThemeData theme = Theme.of(context);
TextStyle titleStyle = theme.textTheme.headline.copyWith(color: Colors.white);
@@ -115,6 +116,7 @@
}
class CardsDemo extends StatelessWidget {
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
diff --git a/examples/material_gallery/lib/demo/chip_demo.dart b/examples/material_gallery/lib/demo/chip_demo.dart
index 2c1f331..124cfa1 100644
--- a/examples/material_gallery/lib/demo/chip_demo.dart
+++ b/examples/material_gallery/lib/demo/chip_demo.dart
@@ -5,6 +5,7 @@
import 'package:flutter/material.dart';
class ChipDemo extends StatefulWidget {
+ @override
_ChipDemoState createState() => new _ChipDemoState();
}
@@ -17,6 +18,7 @@
});
}
+ @override
Widget build(BuildContext context) {
List<Widget> chips = <Widget>[
new Chip(
diff --git a/examples/material_gallery/lib/demo/colors_demo.dart b/examples/material_gallery/lib/demo/colors_demo.dart
index 744f930..601e49e 100644
--- a/examples/material_gallery/lib/demo/colors_demo.dart
+++ b/examples/material_gallery/lib/demo/colors_demo.dart
@@ -54,6 +54,7 @@
String colorString() => "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}";
+ @override
Widget build(BuildContext context) {
return new Container(
height: kColorItemHeight,
@@ -80,6 +81,7 @@
final TextStyle blackTextStyle = Typography.black.body1;
final TextStyle whiteTextStyle = Typography.white.body1;
+ @override
Widget build(BuildContext context) {
List<Widget> colorItems = swatch.colors.keys.map((int index) {
return new DefaultTextStyle(
@@ -107,6 +109,7 @@
}
class ColorsDemo extends StatelessWidget {
+ @override
Widget build(BuildContext context) {
return new TabBarSelection<ColorSwatch>(
values: colorSwatches,
diff --git a/examples/material_gallery/lib/demo/date_picker_demo.dart b/examples/material_gallery/lib/demo/date_picker_demo.dart
index a97716d..a482af4 100644
--- a/examples/material_gallery/lib/demo/date_picker_demo.dart
+++ b/examples/material_gallery/lib/demo/date_picker_demo.dart
@@ -8,6 +8,7 @@
import 'package:intl/intl.dart';
class DatePickerDemo extends StatefulWidget {
+ @override
_DatePickerDemoState createState() => new _DatePickerDemoState();
}
@@ -28,6 +29,7 @@
}
}
+ @override
Widget build(BuildContext context) {
return
new Scaffold(
diff --git a/examples/material_gallery/lib/demo/dialog_demo.dart b/examples/material_gallery/lib/demo/dialog_demo.dart
index caa6c08..ad06711 100644
--- a/examples/material_gallery/lib/demo/dialog_demo.dart
+++ b/examples/material_gallery/lib/demo/dialog_demo.dart
@@ -28,6 +28,7 @@
final String text;
final VoidCallback onPressed;
+ @override
Widget build(BuildContext context) {
return new InkWell(
onTap: onPressed,
@@ -54,6 +55,7 @@
}
class DialogDemo extends StatefulWidget {
+ @override
DialogDemoState createState() => new DialogDemoState();
}
@@ -74,6 +76,7 @@
});
}
+ @override
Widget build(BuildContext context) {
final ThemeData theme = Theme.of(context);
final TextStyle dialogTextStyle = theme.textTheme.subhead.copyWith(color: theme.textTheme.caption.color);
diff --git a/examples/material_gallery/lib/demo/drop_down_demo.dart b/examples/material_gallery/lib/demo/drop_down_demo.dart
index 91e0179..fe5a7c6 100644
--- a/examples/material_gallery/lib/demo/drop_down_demo.dart
+++ b/examples/material_gallery/lib/demo/drop_down_demo.dart
@@ -5,6 +5,7 @@
import 'package:flutter/material.dart';
class DropDownDemo extends StatefulWidget {
+ @override
_DropDownDemoState createState() => new _DropDownDemoState();
}
@@ -18,6 +19,7 @@
.toList();
}
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(title: new Text("Dropdown Button")),
diff --git a/examples/material_gallery/lib/demo/fitness_demo.dart b/examples/material_gallery/lib/demo/fitness_demo.dart
index 43539f6..962ad5e 100644
--- a/examples/material_gallery/lib/demo/fitness_demo.dart
+++ b/examples/material_gallery/lib/demo/fitness_demo.dart
@@ -16,6 +16,7 @@
class FitnessDemo extends StatelessWidget {
FitnessDemo({ Key key }) : super(key: key);
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
@@ -28,6 +29,8 @@
class _FitnessDemoContents extends StatefulWidget {
_FitnessDemoContents({ Key key }) : super(key: key);
+
+ @override
_FitnessDemoContentsState createState() => new _FitnessDemoContentsState();
}
@@ -43,6 +46,7 @@
_sprites = new SpriteSheet(_images['packages/flutter_gallery_assets/jumpingjack.png'], json);
}
+ @override
void initState() {
super.initState();
@@ -73,6 +77,7 @@
_WorkoutAnimationNode workoutAnimation;
+ @override
Widget build(BuildContext context) {
if (!assetsLoaded)
return new Container();
@@ -248,6 +253,7 @@
_jumpingJack.neutralPose();
}
+ @override
void update(double dt) {
if (workingOut) {
int millis = new DateTime.now().millisecondsSinceEpoch - _startTimeMillis;
@@ -273,6 +279,7 @@
double value;
+ @override
void paint(Canvas canvas) {
applyTransformForPivot(canvas);
@@ -513,10 +520,12 @@
class _Fireworks extends StatefulWidget {
_Fireworks({ Key key }) : super(key: key);
+ @override
_FireworksState createState() => new _FireworksState();
}
class _FireworksState extends State<_Fireworks> {
+ @override
void initState() {
super.initState();
fireworks = new _FireworksNode();
@@ -524,6 +533,7 @@
_FireworksNode fireworks;
+ @override
Widget build(BuildContext context) {
return new SpriteWidget(fireworks);
}
@@ -533,6 +543,7 @@
_FireworksNode() : super(const Size(1024.0, 1024.0));
double _countDown = 0.0;
+ @override
void update(double dt) {
if (_countDown <= 0.0) {
_addExplosion();
diff --git a/examples/material_gallery/lib/demo/flexible_space_demo.dart b/examples/material_gallery/lib/demo/flexible_space_demo.dart
index 0282dbe..6cb3653 100644
--- a/examples/material_gallery/lib/demo/flexible_space_demo.dart
+++ b/examples/material_gallery/lib/demo/flexible_space_demo.dart
@@ -11,6 +11,7 @@
final IconData icon;
final List<Widget> children;
+ @override
Widget build(BuildContext context) {
return new Container(
padding: const EdgeInsets.symmetric(vertical: 16.0),
@@ -41,6 +42,7 @@
final IconData icon;
final List<String> lines;
+ @override
Widget build(BuildContext context) {
List<Widget> columnChildren = lines.sublist(0, lines.length - 1).map((String line) => new Text(line)).toList();
columnChildren.add(new Text(lines.last, style: Theme.of(context).textTheme.caption));
@@ -68,13 +70,17 @@
}
class FlexibleSpaceDemo extends StatefulWidget {
+ @override
FlexibleSpaceDemoState createState() => new FlexibleSpaceDemoState();
}
class FlexibleSpaceDemoState extends State<FlexibleSpaceDemo> {
+ final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();
final double appBarHeight = 256.0;
final Key scrollableKey = new UniqueKey();
+ AppBarBehavior _appBarBehavior = AppBarBehavior.scroll;
+ @override
Widget build(BuildContext context) {
return new Theme(
data: new ThemeData(
@@ -82,18 +88,37 @@
primarySwatch: Colors.indigo
),
child: new Scaffold(
+ key: scaffoldKey,
appBarHeight: appBarHeight,
scrollableKey: scrollableKey,
- appBarBehavior: AppBarBehavior.scroll,
+ appBarBehavior: _appBarBehavior,
appBar: new AppBar(
actions: <Widget>[
new IconButton(
icon: Icons.create,
- tooltip: 'Search'
+ tooltip: 'Search',
+ onPressed: () {
+ scaffoldKey.currentState.showSnackBar(new SnackBar(
+ content: new Text('Not supported.')
+ ));
+ }
),
- new IconButton(
- icon: Icons.more_vert,
- tooltip: 'Show menu'
+ new PopupMenuButton<AppBarBehavior>(
+ onSelected: (AppBarBehavior value) {
+ setState(() {
+ _appBarBehavior = value;
+ });
+ },
+ items: <PopupMenuItem<AppBarBehavior>>[
+ new PopupMenuItem<AppBarBehavior>(
+ value: AppBarBehavior.scroll,
+ child: new Text('AppBar scrolls away')
+ ),
+ new PopupMenuItem<AppBarBehavior>(
+ value: AppBarBehavior.under,
+ child: new Text('AppBar stays put')
+ )
+ ]
)
],
flexibleSpace: (BuildContext context) {
diff --git a/examples/material_gallery/lib/demo/full_screen_dialog_demo.dart b/examples/material_gallery/lib/demo/full_screen_dialog_demo.dart
index a179ce9..b00807d 100644
--- a/examples/material_gallery/lib/demo/full_screen_dialog_demo.dart
+++ b/examples/material_gallery/lib/demo/full_screen_dialog_demo.dart
@@ -27,6 +27,7 @@
final TimeOfDay time;
final ValueChanged<DateTime> onChanged;
+ @override
Widget build(BuildContext context) {
final ThemeData theme = Theme.of(context);
@@ -93,6 +94,7 @@
}
class FullScreenDialogDemo extends StatefulWidget {
+ @override
FullScreenDialogDemoState createState() => new FullScreenDialogDemoState();
}
@@ -137,6 +139,7 @@
);
}
+ @override
Widget build(BuildContext context) {
final ThemeData theme = Theme.of(context);
diff --git a/examples/material_gallery/lib/demo/grid_list_demo.dart b/examples/material_gallery/lib/demo/grid_list_demo.dart
index e36cf78..bcc2fdf 100644
--- a/examples/material_gallery/lib/demo/grid_list_demo.dart
+++ b/examples/material_gallery/lib/demo/grid_list_demo.dart
@@ -55,6 +55,7 @@
));
}
+ @override
Widget build(BuildContext context) {
final Widget image = new GestureDetector(
onTap: () { showPhoto(context); },
@@ -104,9 +105,12 @@
assert(tileHeightFactor != null && tileHeightFactor > 0.0);
}
+ @override
final int columnCount;
+
final double tileHeightFactor;
+ @override
GridSpecification getGridSpecification(BoxConstraints constraints, int childCount) {
assert(constraints.maxWidth < double.INFINITY);
assert(constraints.maxHeight < double.INFINITY);
@@ -121,6 +125,7 @@
);
}
+ @override
bool shouldRelayout(GridListDemoGridDelegate oldDelegate) {
return columnCount != oldDelegate.columnCount
|| tileHeightFactor != oldDelegate.tileHeightFactor
@@ -131,6 +136,7 @@
class GridListDemo extends StatefulWidget {
GridListDemo({ Key key }) : super(key: key);
+ @override
GridListDemoState createState() => new GridListDemoState();
}
@@ -169,6 +175,7 @@
// When the ScrollableGrid first appears we want the last row to only be
// partially visible, to help the user recognize that the grid is scrollable.
// The GridListDemoGridDelegate's tileHeightFactor is used for this.
+ @override
Widget build(BuildContext context) {
final Orientation orientation = MediaQuery.of(context).orientation;
return new Scaffold(
diff --git a/examples/material_gallery/lib/demo/icons_demo.dart b/examples/material_gallery/lib/demo/icons_demo.dart
index 051da20..b42ae7d 100644
--- a/examples/material_gallery/lib/demo/icons_demo.dart
+++ b/examples/material_gallery/lib/demo/icons_demo.dart
@@ -5,6 +5,7 @@
import 'package:flutter/material.dart';
class IconsDemo extends StatefulWidget {
+ @override
IconsDemoState createState() => new IconsDemoState();
}
@@ -61,6 +62,7 @@
);
}
+ @override
Widget build(BuildContext context) {
final ThemeData theme = Theme.of(context);
final TextStyle textStyle = theme.textTheme.subhead.copyWith(color: theme.textTheme.caption.color);
diff --git a/examples/material_gallery/lib/demo/leave_behind_demo.dart b/examples/material_gallery/lib/demo/leave_behind_demo.dart
index 01a064f..26cbbd2 100644
--- a/examples/material_gallery/lib/demo/leave_behind_demo.dart
+++ b/examples/material_gallery/lib/demo/leave_behind_demo.dart
@@ -28,6 +28,7 @@
class LeaveBehindDemo extends StatefulWidget {
LeaveBehindDemo({ Key key }) : super(key: key);
+ @override
LeaveBehindDemoState createState() => new LeaveBehindDemoState();
}
@@ -47,6 +48,7 @@
});
}
+ @override
void initState() {
super.initState();
initListItems();
@@ -122,6 +124,7 @@
);
}
+ @override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
diff --git a/examples/material_gallery/lib/demo/list_demo.dart b/examples/material_gallery/lib/demo/list_demo.dart
index eec78f2..daa92ff 100644
--- a/examples/material_gallery/lib/demo/list_demo.dart
+++ b/examples/material_gallery/lib/demo/list_demo.dart
@@ -13,6 +13,7 @@
class ListDemo extends StatefulWidget {
ListDemo({ Key key }) : super(key: key);
+ @override
ListDemoState createState() => new ListDemoState();
}
@@ -153,6 +154,7 @@
);
}
+ @override
Widget build(BuildContext context) {
final String layoutText = _dense ? " \u2013 Dense" : "";
String itemSizeText;
diff --git a/examples/material_gallery/lib/demo/menu_demo.dart b/examples/material_gallery/lib/demo/menu_demo.dart
index 24a4eb9..c357e36 100644
--- a/examples/material_gallery/lib/demo/menu_demo.dart
+++ b/examples/material_gallery/lib/demo/menu_demo.dart
@@ -7,6 +7,7 @@
class MenuDemo extends StatefulWidget {
MenuDemo({ Key key }) : super(key: key);
+ @override
MenuDemoState createState() => new MenuDemoState();
}
@@ -24,6 +25,7 @@
final String _checkedValue4 = 'Four';
List<String> _checkedValues;
+ @override
void initState() {
super.initState();
_simpleValue = _simpleValue2;
@@ -53,6 +55,7 @@
bool isChecked(String value) => _checkedValues.contains(value);
+ @override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
diff --git a/examples/material_gallery/lib/demo/modal_bottom_sheet_demo.dart b/examples/material_gallery/lib/demo/modal_bottom_sheet_demo.dart
index 295fe4b..d347967 100644
--- a/examples/material_gallery/lib/demo/modal_bottom_sheet_demo.dart
+++ b/examples/material_gallery/lib/demo/modal_bottom_sheet_demo.dart
@@ -11,6 +11,7 @@
textAlign: TextAlign.center
);
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(title: new Text("Modal Bottom Sheet")),
diff --git a/examples/material_gallery/lib/demo/page_selector_demo.dart b/examples/material_gallery/lib/demo/page_selector_demo.dart
index 3afe479..d0d6747 100644
--- a/examples/material_gallery/lib/demo/page_selector_demo.dart
+++ b/examples/material_gallery/lib/demo/page_selector_demo.dart
@@ -12,6 +12,7 @@
selection.value = selection.values[(selection.index + delta).clamp(0, selection.values.length - 1)];
}
+ @override
Widget build(BuildContext notUsed) { // Can't find the TabBarSelection from this context.
final List<IconData> icons = <IconData>[
Icons.event,
diff --git a/examples/material_gallery/lib/demo/persistent_bottom_sheet_demo.dart b/examples/material_gallery/lib/demo/persistent_bottom_sheet_demo.dart
index b003d5f..5709593 100644
--- a/examples/material_gallery/lib/demo/persistent_bottom_sheet_demo.dart
+++ b/examples/material_gallery/lib/demo/persistent_bottom_sheet_demo.dart
@@ -26,6 +26,7 @@
});
}
+ @override
Widget build(BuildContext notUsed) { // Can't find the Scaffold from this context.
return new Scaffold(
appBar: new AppBar(title: new Text("Persistent Bottom Sheet")),
diff --git a/examples/material_gallery/lib/demo/progress_indicator_demo.dart b/examples/material_gallery/lib/demo/progress_indicator_demo.dart
index ef65d09..4409615 100644
--- a/examples/material_gallery/lib/demo/progress_indicator_demo.dart
+++ b/examples/material_gallery/lib/demo/progress_indicator_demo.dart
@@ -5,11 +5,13 @@
import 'package:flutter/material.dart';
class ProgressIndicatorDemo extends StatefulWidget {
+ @override
_ProgressIndicatorDemoState createState() => new _ProgressIndicatorDemoState();
}
class _ProgressIndicatorDemoState extends State<ProgressIndicatorDemo> {
+ @override
void initState() {
super.initState();
controller = new AnimationController(
@@ -81,6 +83,7 @@
);
}
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(title: new Text('Progress Indicators')),
diff --git a/examples/material_gallery/lib/demo/scrolling_techniques_demo.dart b/examples/material_gallery/lib/demo/scrolling_techniques_demo.dart
index d1c01e4..6c2cf91 100644
--- a/examples/material_gallery/lib/demo/scrolling_techniques_demo.dart
+++ b/examples/material_gallery/lib/demo/scrolling_techniques_demo.dart
@@ -19,6 +19,7 @@
final String leftText;
final String rightText;
+ @override
Widget build(BuildContext context) {
return new Container(
height: height,
@@ -85,6 +86,7 @@
Navigator.push(context, new MaterialPageRoute<Null>(builder: builder));
}
+ @override
Widget build(BuildContext context) {
return new Card(
child: new InkWell(
@@ -111,6 +113,7 @@
"specified it is stacked on top of the ToolBar.";
class ScrollingTechniquesDemo extends StatelessWidget {
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(title: new Text('Scrolling Techniques')),
diff --git a/examples/material_gallery/lib/demo/slider_demo.dart b/examples/material_gallery/lib/demo/slider_demo.dart
index 623e794..0475476 100644
--- a/examples/material_gallery/lib/demo/slider_demo.dart
+++ b/examples/material_gallery/lib/demo/slider_demo.dart
@@ -5,12 +5,14 @@
import 'package:flutter/material.dart';
class SliderDemo extends StatefulWidget {
+ @override
_SliderDemoState createState() => new _SliderDemoState();
}
class _SliderDemoState extends State<SliderDemo> {
double _value = 25.0;
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(title: new Text("Sliders")),
diff --git a/examples/material_gallery/lib/demo/snack_bar_demo.dart b/examples/material_gallery/lib/demo/snack_bar_demo.dart
index d487c2a..c5affd3 100644
--- a/examples/material_gallery/lib/demo/snack_bar_demo.dart
+++ b/examples/material_gallery/lib/demo/snack_bar_demo.dart
@@ -56,6 +56,7 @@
);
}
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
diff --git a/examples/material_gallery/lib/demo/tabs_demo.dart b/examples/material_gallery/lib/demo/tabs_demo.dart
index 3764670..2292888 100644
--- a/examples/material_gallery/lib/demo/tabs_demo.dart
+++ b/examples/material_gallery/lib/demo/tabs_demo.dart
@@ -23,6 +23,7 @@
Icons.language: 'LANGUAGE',
};
+ @override
Widget build(BuildContext context) {
final Color iconColor = Theme.of(context).accentColor;
return new TabBarSelection<IconData>(
diff --git a/examples/material_gallery/lib/demo/tabs_fab_demo.dart b/examples/material_gallery/lib/demo/tabs_fab_demo.dart
index 723c4e9..517e61d 100644
--- a/examples/material_gallery/lib/demo/tabs_fab_demo.dart
+++ b/examples/material_gallery/lib/demo/tabs_fab_demo.dart
@@ -26,6 +26,7 @@
"by its key.";
class TabsFabDemo extends StatefulWidget {
+ @override
_TabsFabDemoState createState() => new _TabsFabDemoState();
}
@@ -41,6 +42,7 @@
];
_Page selectedPage;
+ @override
void initState() {
super.initState();
selectedPage = pages[0];
@@ -88,6 +90,7 @@
);
}
+ @override
Widget build(BuildContext context) {
return new TabBarSelection<_Page>(
values: pages,
diff --git a/examples/material_gallery/lib/demo/text_field_demo.dart b/examples/material_gallery/lib/demo/text_field_demo.dart
index 417a4aa..a5bf2d9 100644
--- a/examples/material_gallery/lib/demo/text_field_demo.dart
+++ b/examples/material_gallery/lib/demo/text_field_demo.dart
@@ -7,6 +7,7 @@
class TextFieldDemo extends StatefulWidget {
TextFieldDemo({ Key key }) : super(key: key);
+ @override
TextFieldDemoState createState() => new TextFieldDemoState();
}
@@ -59,6 +60,7 @@
return null;
}
+ @override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
diff --git a/examples/material_gallery/lib/demo/time_picker_demo.dart b/examples/material_gallery/lib/demo/time_picker_demo.dart
index 99891d9..adf4983 100644
--- a/examples/material_gallery/lib/demo/time_picker_demo.dart
+++ b/examples/material_gallery/lib/demo/time_picker_demo.dart
@@ -7,6 +7,7 @@
import 'package:flutter/material.dart';
class TimePickerDemo extends StatefulWidget {
+ @override
_TimePickerDemoState createState() => new _TimePickerDemoState();
}
@@ -25,6 +26,7 @@
}
}
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(title: new Text("Time Picker")),
diff --git a/examples/material_gallery/lib/demo/toggle_controls_demo.dart b/examples/material_gallery/lib/demo/toggle_controls_demo.dart
index 56a87d4..2b3759b 100644
--- a/examples/material_gallery/lib/demo/toggle_controls_demo.dart
+++ b/examples/material_gallery/lib/demo/toggle_controls_demo.dart
@@ -5,6 +5,7 @@
import 'package:flutter/material.dart';
class ToggleControlsDemo extends StatefulWidget {
+ @override
_ToggleControlsDemoState createState() => new _ToggleControlsDemoState();
}
@@ -31,6 +32,7 @@
});
}
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(title: new Text("Selection Controls")),
diff --git a/examples/material_gallery/lib/demo/tooltip_demo.dart b/examples/material_gallery/lib/demo/tooltip_demo.dart
index 085f0cb..2dfb457 100644
--- a/examples/material_gallery/lib/demo/tooltip_demo.dart
+++ b/examples/material_gallery/lib/demo/tooltip_demo.dart
@@ -10,6 +10,7 @@
"apps accessible, like screen readers.";
class TooltipDemo extends StatelessWidget {
+ @override
Widget build(BuildContext context) {
final ThemeData theme = Theme.of(context);
return new Scaffold(
diff --git a/examples/material_gallery/lib/demo/two_level_list_demo.dart b/examples/material_gallery/lib/demo/two_level_list_demo.dart
index f47738f..7799592 100644
--- a/examples/material_gallery/lib/demo/two_level_list_demo.dart
+++ b/examples/material_gallery/lib/demo/two_level_list_demo.dart
@@ -5,6 +5,7 @@
import 'package:flutter/material.dart';
class TwoLevelListDemo extends StatelessWidget {
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(title: new Text('Expand/Collapse List Control')),
@@ -15,7 +16,7 @@
items: <Widget>[
new TwoLevelListItem(title: new Text('Top')),
new TwoLevelSublist(
- center: new Text('Sublist'),
+ title: new Text('Sublist'),
children: <Widget>[
new TwoLevelListItem(title: new Text('One')),
new TwoLevelListItem(title: new Text('Two')),
diff --git a/examples/material_gallery/lib/demo/typography_demo.dart b/examples/material_gallery/lib/demo/typography_demo.dart
index f03bd4d..a1072f5 100644
--- a/examples/material_gallery/lib/demo/typography_demo.dart
+++ b/examples/material_gallery/lib/demo/typography_demo.dart
@@ -16,6 +16,7 @@
final TextStyle style;
final String text;
+ @override
Widget build(BuildContext context) {
final ThemeData theme = Theme.of(context);
final TextStyle nameStyle = theme.textTheme.body1.copyWith(color: theme.textTheme.caption.color);
@@ -38,6 +39,7 @@
}
class TypographyDemo extends StatelessWidget {
+ @override
Widget build(BuildContext context) {
final TextTheme textTheme = Theme.of(context).textTheme;
final List<Widget> styleItems = <Widget>[
diff --git a/examples/material_gallery/lib/demo/weather_demo.dart b/examples/material_gallery/lib/demo/weather_demo.dart
index 4c91fbe..e111d68 100644
--- a/examples/material_gallery/lib/demo/weather_demo.dart
+++ b/examples/material_gallery/lib/demo/weather_demo.dart
@@ -19,6 +19,8 @@
class WeatherDemo extends StatefulWidget {
WeatherDemo({ Key key }) : super(key: key);
+
+ @override
_WeatherDemoState createState() => new _WeatherDemoState();
}
@@ -42,6 +44,7 @@
_sprites = new SpriteSheet(_images['packages/flutter_gallery_assets/weathersprites.png'], json);
}
+ @override
void initState() {
super.initState();
@@ -58,6 +61,7 @@
WeatherWorld weatherWorld;
+ @override
Widget build(BuildContext context) {
if (!assetsLoaded) {
return new Scaffold(
@@ -132,6 +136,7 @@
final bool selected;
final VoidCallback onPressed;
+ @override
Widget build(BuildContext context) {
Color color;
if (selected)
@@ -262,6 +267,7 @@
_snow.active = weatherType == WeatherType.snow;
}
+ @override
void spriteBoxPerformedLayout() {
_sun.position = spriteBox.visibleArea.topLeft + const Offset(350.0, 180.0);
}
@@ -273,6 +279,7 @@
Color colorTop;
Color colorBottom;
+ @override
void paint(Canvas canvas) {
applyTransformForPivot(canvas);
@@ -426,6 +433,7 @@
));
}
+ @override
void update(double dt) {
rotation += dt * _rotationSpeed;
}
diff --git a/examples/material_gallery/lib/gallery/app.dart b/examples/material_gallery/lib/gallery/app.dart
index 642c0ba..57a5d81 100644
--- a/examples/material_gallery/lib/gallery/app.dart
+++ b/examples/material_gallery/lib/gallery/app.dart
@@ -11,6 +11,7 @@
static GalleryAppState of(BuildContext context) => context.ancestorStateOfType(const TypeMatcher<GalleryAppState>());
+ @override
GalleryAppState createState() => new GalleryAppState();
}
@@ -23,6 +24,7 @@
});
}
+ @override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Material Gallery',
diff --git a/examples/material_gallery/lib/gallery/drawer.dart b/examples/material_gallery/lib/gallery/drawer.dart
index 1509e85..9e484a4 100644
--- a/examples/material_gallery/lib/gallery/drawer.dart
+++ b/examples/material_gallery/lib/gallery/drawer.dart
@@ -21,6 +21,7 @@
});
}
+ @override
Widget build(BuildContext context) {
return new Drawer(
child: new Block(
diff --git a/examples/material_gallery/lib/gallery/home.dart b/examples/material_gallery/lib/gallery/home.dart
index af6c480..3d4ddbf 100644
--- a/examples/material_gallery/lib/gallery/home.dart
+++ b/examples/material_gallery/lib/gallery/home.dart
@@ -42,10 +42,12 @@
class GalleryHome extends StatefulWidget {
GalleryHome({ Key key }) : super(key: key);
+ @override
GalleryHomeState createState() => new GalleryHomeState();
}
class GalleryHomeState extends State<GalleryHome> {
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBarHeight: 128.0,
diff --git a/examples/material_gallery/lib/gallery/section.dart b/examples/material_gallery/lib/gallery/section.dart
index c1060f1..fa9f95d 100644
--- a/examples/material_gallery/lib/gallery/section.dart
+++ b/examples/material_gallery/lib/gallery/section.dart
@@ -37,7 +37,7 @@
data: theme,
child: new Scaffold(
appBarHeight: appBarHeight,
- appBarBehavior: AppBarBehavior.scroll,
+ appBarBehavior: AppBarBehavior.under,
scrollableKey: scrollableKey,
appBar: new AppBar(
flexibleSpace: (BuildContext context) => new FlexibleSpaceBar(title: new Text(title))
@@ -61,6 +61,7 @@
));
}
+ @override
Widget build (BuildContext context) {
final ThemeData theme = new ThemeData(
brightness: Theme.of(context).brightness,
diff --git a/examples/stocks/lib/main.dart b/examples/stocks/lib/main.dart
index 663f63f..ec828c5 100644
--- a/examples/stocks/lib/main.dart
+++ b/examples/stocks/lib/main.dart
@@ -24,6 +24,7 @@
import 'stock_types.dart';
class StocksApp extends StatefulWidget {
+ @override
StocksAppState createState() => new StocksAppState();
}
@@ -45,6 +46,7 @@
showSemanticsDebugger: false
);
+ @override
void initState() {
super.initState();
new StockDataFetcher((StockData data) {
@@ -99,6 +101,7 @@
return StockStrings.instance;
}
+ @override
Widget build(BuildContext context) {
assert(() {
debugPaintSizeEnabled = _configuration.debugShowSizes;
diff --git a/examples/stocks/lib/stock_arrow.dart b/examples/stocks/lib/stock_arrow.dart
index 84ce41a..cbc91f0 100644
--- a/examples/stocks/lib/stock_arrow.dart
+++ b/examples/stocks/lib/stock_arrow.dart
@@ -12,6 +12,7 @@
final Color color;
final double percentChange;
+ @override
void paint(Canvas canvas, Size size) {
Paint paint = new Paint()..color = color;
paint.strokeWidth = 1.0;
@@ -44,6 +45,7 @@
canvas.drawCircle(new Point(centerX, centerY), r, paint);
}
+ @override
bool shouldRepaint(StockArrowPainter oldPainter) {
return oldPainter.color != color
|| oldPainter.percentChange != percentChange;
@@ -67,6 +69,7 @@
return Colors.red[_colorIndexForPercentChange(percentChange)];
}
+ @override
Widget build(BuildContext context) {
return new Container(
width: 40.0,
diff --git a/examples/stocks/lib/stock_home.dart b/examples/stocks/lib/stock_home.dart
index 093fc9e..e40cb4a 100644
--- a/examples/stocks/lib/stock_home.dart
+++ b/examples/stocks/lib/stock_home.dart
@@ -19,6 +19,7 @@
enum StockHomeTab { market, portfolio }
class _NotImplementedDialog extends StatelessWidget {
+ @override
Widget build(BuildContext context) {
return new Dialog(
title: new Text('Not Implemented'),
@@ -58,6 +59,7 @@
final StockConfiguration configuration;
final ValueChanged<StockConfiguration> updater;
+ @override
StockHomeState createState() => new StockHomeState();
}
@@ -336,6 +338,7 @@
);
}
+ @override
Widget build(BuildContext context) {
return new TabBarSelection<StockHomeTab>(
values: <StockHomeTab>[StockHomeTab.market, StockHomeTab.portfolio],
@@ -356,6 +359,7 @@
}
class _CreateCompanySheet extends StatefulWidget {
+ @override
_CreateCompanySheetState createState() => new _CreateCompanySheetState();
}
@@ -368,6 +372,7 @@
});
}
+ @override
Widget build(BuildContext context) {
// TODO(ianh): Fill this out.
return new Column(
diff --git a/examples/stocks/lib/stock_list.dart b/examples/stocks/lib/stock_list.dart
index 8ffadaa..ba41051 100644
--- a/examples/stocks/lib/stock_list.dart
+++ b/examples/stocks/lib/stock_list.dart
@@ -16,6 +16,7 @@
final StockRowActionCallback onShow;
final StockRowActionCallback onAction;
+ @override
Widget build(BuildContext context) {
return new ScrollableList(
key: const ValueKey<String>('stock-list'),
diff --git a/examples/stocks/lib/stock_row.dart b/examples/stocks/lib/stock_row.dart
index 1e79ea3..bc69a22 100644
--- a/examples/stocks/lib/stock_row.dart
+++ b/examples/stocks/lib/stock_row.dart
@@ -11,9 +11,12 @@
class StockRowPartKey extends Key {
const StockRowPartKey(this.keySalt, this.stock, this.part) : super.constructor();
+
final Object keySalt;
final Stock stock;
final StockRowPartKind part;
+
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -24,7 +27,11 @@
&& stock == typedOther.stock
&& part == typedOther.part;
}
+
+ @override
int get hashCode => hashValues(keySalt, stock, part);
+
+ @override
String toString() => '[$runtimeType ${keySalt.toString().split(".")[1]}:${stock.symbol}:${part.toString().split(".")[1]}]';
}
@@ -54,6 +61,7 @@
return callback == null ? null : () => callback(stock, _arrowKey);
}
+ @override
Widget build(BuildContext context) {
final String lastSale = "\$${stock.lastSale.toStringAsFixed(2)}";
String changeInPrice = "${stock.percentChange.toStringAsFixed(2)}%";
diff --git a/examples/stocks/lib/stock_settings.dart b/examples/stocks/lib/stock_settings.dart
index 23f33c7..f21f0fd 100644
--- a/examples/stocks/lib/stock_settings.dart
+++ b/examples/stocks/lib/stock_settings.dart
@@ -12,6 +12,7 @@
final StockConfiguration configuration;
final ValueChanged<StockConfiguration> updater;
+ @override
StockSettingsState createState() => new StockSettingsState();
}
@@ -245,6 +246,7 @@
);
}
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: buildAppBar(context),
diff --git a/examples/stocks/lib/stock_symbol_viewer.dart b/examples/stocks/lib/stock_symbol_viewer.dart
index adff7a9..5f2ff07 100644
--- a/examples/stocks/lib/stock_symbol_viewer.dart
+++ b/examples/stocks/lib/stock_symbol_viewer.dart
@@ -13,6 +13,7 @@
final Stock stock;
+ @override
Widget build(BuildContext context) {
String lastSale = "\$${stock.lastSale.toStringAsFixed(2)}";
String changeInPrice = "${stock.percentChange.toStringAsFixed(2)}%";
@@ -71,6 +72,7 @@
final Stock stock;
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
@@ -93,6 +95,7 @@
final Stock stock;
+ @override
Widget build(BuildContext context) {
return new Container(
padding: new EdgeInsets.all(10.0),
diff --git a/packages/cassowary/lib/expression.dart b/packages/cassowary/lib/expression.dart
index 03e23da..98c264c 100644
--- a/packages/cassowary/lib/expression.dart
+++ b/packages/cassowary/lib/expression.dart
@@ -153,6 +153,7 @@
return null;
}
+ @override
_EquationMember operator *(_EquationMember m) {
_Pair<Expression, double> args = _findMulitplierAndMultiplicand(m);
@@ -166,6 +167,7 @@
return args.first._applyMultiplicand(args.second);
}
+ @override
_EquationMember operator /(_EquationMember m) {
if (!m.isConstant) {
throw new ParserException(
@@ -176,6 +178,7 @@
return this._applyMultiplicand(1.0 / m.value);
}
+ @override
String toString() {
StringBuffer buffer = new StringBuffer();
diff --git a/packages/cassowary/lib/param.dart b/packages/cassowary/lib/param.dart
index cd912f4..add1a6d 100644
--- a/packages/cassowary/lib/param.dart
+++ b/packages/cassowary/lib/param.dart
@@ -18,12 +18,15 @@
dynamic context;
+ @override
bool get isConstant => false;
+ @override
double get value => variable.value;
String get name => variable.name;
void set name(String name) { variable.name = name; }
+ @override
Expression asExpression() => new Expression(<Term>[new Term(variable, 1.0)], 0.0);
}
diff --git a/packages/cassowary/lib/parser_exception.dart b/packages/cassowary/lib/parser_exception.dart
index 979533c..e031636 100644
--- a/packages/cassowary/lib/parser_exception.dart
+++ b/packages/cassowary/lib/parser_exception.dart
@@ -9,6 +9,7 @@
List<_EquationMember> members;
ParserException(this.message, this.members);
+ @override
String toString() {
if (message == null) return "Error while parsing constraint or expression";
return "Error: '$message' while trying to parse constraint or expression";
diff --git a/packages/cassowary/lib/row.dart b/packages/cassowary/lib/row.dart
index d9806e9..513fb9d 100644
--- a/packages/cassowary/lib/row.dart
+++ b/packages/cassowary/lib/row.dart
@@ -65,6 +65,7 @@
insertRow(row, coefficient);
}
+ @override
String toString() {
StringBuffer buffer = new StringBuffer();
diff --git a/packages/cassowary/lib/solver.dart b/packages/cassowary/lib/solver.dart
index 4688e9f..de348be 100644
--- a/packages/cassowary/lib/solver.dart
+++ b/packages/cassowary/lib/solver.dart
@@ -588,6 +588,7 @@
return entering ?? new _Symbol(_SymbolType.invalid, 0);
}
+ @override
String toString() {
StringBuffer buffer = new StringBuffer();
String separator = "\n~~~~~~~~~";
diff --git a/packages/cassowary/lib/symbol.dart b/packages/cassowary/lib/symbol.dart
index ab0531a..5b9d828 100644
--- a/packages/cassowary/lib/symbol.dart
+++ b/packages/cassowary/lib/symbol.dart
@@ -12,6 +12,7 @@
_Symbol(this.type, this.tick);
+ @override
String toString() {
String typeString = 'unknown';
switch (type) {
diff --git a/packages/cassowary/lib/term.dart b/packages/cassowary/lib/term.dart
index a402020..9845e1f 100644
--- a/packages/cassowary/lib/term.dart
+++ b/packages/cassowary/lib/term.dart
@@ -10,13 +10,17 @@
final Variable variable;
final double coefficient;
+ @override
bool get isConstant => false;
+ @override
double get value => coefficient * variable.value;
+ @override
Expression asExpression() =>
new Expression([new Term(this.variable, this.coefficient)], 0.0);
+ @override
String toString() {
StringBuffer buffer = new StringBuffer();
diff --git a/packages/flutter/lib/src/animation/animation.dart b/packages/flutter/lib/src/animation/animation.dart
index cc2deb1..dfd48a7 100644
--- a/packages/flutter/lib/src/animation/animation.dart
+++ b/packages/flutter/lib/src/animation/animation.dart
@@ -62,6 +62,7 @@
/// Whether this animation is stopped at the end.
bool get isCompleted => status == AnimationStatus.completed;
+ @override
String toString() {
return '$runtimeType(${toStringDetails()})';
}
diff --git a/packages/flutter/lib/src/animation/animation_controller.dart b/packages/flutter/lib/src/animation/animation_controller.dart
index 4df50f1..5451216 100644
--- a/packages/flutter/lib/src/animation/animation_controller.dart
+++ b/packages/flutter/lib/src/animation/animation_controller.dart
@@ -99,6 +99,7 @@
/// Setting this value also stops the controller if it is currently
/// running; if this happens, it also notifies all the status
/// listeners.
+ @override
double get value => _value;
double _value;
void set value(double newValue) {
@@ -114,6 +115,7 @@
_AnimationDirection _direction;
+ @override
AnimationStatus get status {
if (!isAnimating && value == upperBound)
return AnimationStatus.completed;
@@ -202,6 +204,7 @@
}
/// Stops running this animation.
+ @override
void dispose() {
stop();
}
@@ -224,6 +227,7 @@
_checkStatusChanged();
}
+ @override
String toStringDetails() {
String paused = isAnimating ? '' : '; paused';
String label = debugLabel == null ? '' : '; for $debugLabel';
@@ -245,6 +249,7 @@
final double _end;
final Curve _curve;
+ @override
double x(double timeInSeconds) {
assert(timeInSeconds >= 0.0);
double t = (timeInSeconds / _durationInSeconds).clamp(0.0, 1.0);
@@ -256,8 +261,10 @@
return _begin + (_end - _begin) * _curve.transform(t);
}
+ @override
double dx(double timeInSeconds) => 1.0;
+ @override
bool isDone(double timeInSeconds) => timeInSeconds > _durationInSeconds;
}
@@ -272,13 +279,16 @@
final double _periodInSeconds;
+ @override
double x(double timeInSeconds) {
assert(timeInSeconds >= 0.0);
final double t = (timeInSeconds / _periodInSeconds) % 1.0;
return ui.lerpDouble(min, max, t);
}
+ @override
double dx(double timeInSeconds) => 1.0;
+ @override
bool isDone(double timeInSeconds) => false;
}
diff --git a/packages/flutter/lib/src/animation/animations.dart b/packages/flutter/lib/src/animation/animations.dart
index 5cd46c2..8daca9a 100644
--- a/packages/flutter/lib/src/animation/animations.dart
+++ b/packages/flutter/lib/src/animation/animations.dart
@@ -11,11 +11,22 @@
class _AlwaysCompleteAnimation extends Animation<double> {
const _AlwaysCompleteAnimation();
+ @override
void addListener(VoidCallback listener) { }
+
+ @override
void removeListener(VoidCallback listener) { }
+
+ @override
void addStatusListener(AnimationStatusListener listener) { }
+
+ @override
void removeStatusListener(AnimationStatusListener listener) { }
+
+ @override
AnimationStatus get status => AnimationStatus.completed;
+
+ @override
double get value => 1.0;
}
@@ -29,11 +40,22 @@
class _AlwaysDismissedAnimation extends Animation<double> {
const _AlwaysDismissedAnimation();
+ @override
void addListener(VoidCallback listener) { }
+
+ @override
void removeListener(VoidCallback listener) { }
+
+ @override
void addStatusListener(AnimationStatusListener listener) { }
+
+ @override
void removeStatusListener(AnimationStatusListener listener) { }
+
+ @override
AnimationStatus get status => AnimationStatus.dismissed;
+
+ @override
double get value => 0.0;
}
@@ -48,12 +70,22 @@
class AlwaysStoppedAnimation<T> extends Animation<T> {
const AlwaysStoppedAnimation(this.value);
+ @override
final T value;
+ @override
void addListener(VoidCallback listener) { }
+
+ @override
void removeListener(VoidCallback listener) { }
+
+ @override
void addStatusListener(AnimationStatusListener listener) { }
+
+ @override
void removeStatusListener(AnimationStatusListener listener) { }
+
+ @override
AnimationStatus get status => AnimationStatus.forward;
}
@@ -123,6 +155,7 @@
}
}
+ @override
void didStartListening() {
if (_parent != null) {
_parent.addListener(notifyListeners);
@@ -130,6 +163,7 @@
}
}
+ @override
void didStopListening() {
if (_parent != null) {
_parent.removeListener(notifyListeners);
@@ -137,7 +171,10 @@
}
}
+ @override
AnimationStatus get status => _parent != null ? _parent.status : _status;
+
+ @override
double get value => _parent != null ? _parent.value : _value;
}
@@ -155,19 +192,24 @@
/// The animation whose value and direction this animation is reversing.
final Animation<double> parent;
+ @override
void addListener(VoidCallback listener) {
didRegisterListener();
parent.addListener(listener);
}
+
+ @override
void removeListener(VoidCallback listener) {
parent.removeListener(listener);
didUnregisterListener();
}
+ @override
void didStartListening() {
parent.addStatusListener(_statusChangeHandler);
}
+ @override
void didStopListening() {
parent.removeStatusListener(_statusChangeHandler);
}
@@ -176,7 +218,10 @@
notifyStatusListeners(_reverseStatus(status));
}
+ @override
AnimationStatus get status => _reverseStatus(parent.status);
+
+ @override
double get value => 1.0 - parent.value;
AnimationStatus _reverseStatus(AnimationStatus status) {
@@ -206,6 +251,7 @@
}
/// The animation to which this animation applies a curve.
+ @override
final Animation<double> parent;
/// The curve to use in the forward direction.
@@ -238,6 +284,7 @@
}
}
+ @override
double get value {
final bool useForwardCurve = reverseCurve == null || (_curveDirection ?? parent.status) != AnimationStatus.reverse;
Curve activeCurve = useForwardCurve ? curve : reverseCurve;
@@ -306,6 +353,7 @@
assert(_lastStatus != null);
}
+ @override
AnimationStatus get status => _currentTrain.status;
double _lastValue;
@@ -342,10 +390,12 @@
onSwitchedTrain();
}
+ @override
double get value => _currentTrain.value;
/// Frees all the resources used by this performance.
/// After this is called, this object is no longer usable.
+ @override
void dispose() {
assert(_currentTrain != null);
_currentTrain.removeStatusListener(_statusChangeHandler);
diff --git a/packages/flutter/lib/src/animation/curves.dart b/packages/flutter/lib/src/animation/curves.dart
index 5deafa1..07d4772 100644
--- a/packages/flutter/lib/src/animation/curves.dart
+++ b/packages/flutter/lib/src/animation/curves.dart
@@ -31,13 +31,18 @@
/// The identity map over the unit interval.
class Linear extends Curve {
const Linear();
+
+ @override
double transform(double t) => t;
}
/// A sawtooth curve that repeats a given number of times over the unit interval.
class SawTooth extends Curve {
const SawTooth(this.count);
+
final int count;
+
+ @override
double transform(double t) {
t *= count;
return t - t.truncateToDouble();
@@ -57,6 +62,7 @@
/// The curve to apply between [start] and [end].
final Curve curve;
+ @override
double transform(double t) {
assert(start >= 0.0);
assert(start <= 1.0);
@@ -79,6 +85,7 @@
final double c;
final double d;
+ @override
double transform(double t) {
double start = 0.0;
double end = 1.0;
@@ -112,13 +119,18 @@
/// A curve that is the reversed inversion of its given curve.
class FlippedCurve extends Curve {
FlippedCurve(this.curve);
+
final Curve curve;
+
+ @override
double transform(double t) => 1.0 - curve.transform(1.0 - t);
}
/// An oscillating curve that grows in magnitude.
class BounceInCurve extends Curve {
const BounceInCurve();
+
+ @override
double transform(double t) {
return 1.0 - _bounce(1.0 - t);
}
@@ -127,6 +139,8 @@
/// An oscillating curve that shrink in magnitude.
class BounceOutCurve extends Curve {
const BounceOutCurve();
+
+ @override
double transform(double t) {
return _bounce(t);
}
@@ -135,6 +149,8 @@
/// An oscillating curve that first grows and then shrink in magnitude.
class BounceInOutCurve extends Curve {
const BounceInOutCurve();
+
+ @override
double transform(double t) {
if (t < 0.5)
return (1.0 - _bounce(1.0 - t)) * 0.5;
@@ -146,7 +162,10 @@
/// An oscillating curve that grows in magnitude while overshooting its bounds.
class ElasticInCurve extends Curve {
const ElasticInCurve([this.period = 0.4]);
+
final double period;
+
+ @override
double transform(double t) {
double s = period / 4.0;
t = t - 1.0;
@@ -157,7 +176,10 @@
/// An oscillating curve that shrinks in magnitude while overshooting its bounds.
class ElasticOutCurve extends Curve {
const ElasticOutCurve([this.period = 0.4]);
+
final double period;
+
+ @override
double transform(double t) {
double s = period / 4.0;
return math.pow(2.0, -10 * t) * math.sin((t - s) * (math.PI * 2.0) / period) + 1.0;
@@ -167,7 +189,10 @@
/// An oscillating curve that grows and then shrinks in magnitude while overshooting its bounds.
class ElasticInOutCurve extends Curve {
const ElasticInOutCurve([this.period = 0.4]);
+
final double period;
+
+ @override
double transform(double t) {
double s = period / 4.0;
t = 2.0 * t - 1.0;
diff --git a/packages/flutter/lib/src/animation/forces.dart b/packages/flutter/lib/src/animation/forces.dart
index 1b428e4..a3d6389 100644
--- a/packages/flutter/lib/src/animation/forces.dart
+++ b/packages/flutter/lib/src/animation/forces.dart
@@ -37,6 +37,7 @@
distance: 0.01
);
+ @override
Simulation release(double position, double velocity) {
double target = velocity < 0.0 ? this.left - tolerance.distance
: this.right + tolerance.distance;
diff --git a/packages/flutter/lib/src/animation/listener_helpers.dart b/packages/flutter/lib/src/animation/listener_helpers.dart
index fb761e5..6f2d937 100644
--- a/packages/flutter/lib/src/animation/listener_helpers.dart
+++ b/packages/flutter/lib/src/animation/listener_helpers.dart
@@ -14,18 +14,23 @@
/// A mixin that helps listen to another object only when this object has registered listeners.
abstract class AnimationLazyListenerMixin implements _ListenerMixin {
int _listenerCounter = 0;
+
+ @override
void didRegisterListener() {
assert(_listenerCounter >= 0);
if (_listenerCounter == 0)
didStartListening();
_listenerCounter += 1;
}
+
+ @override
void didUnregisterListener() {
assert(_listenerCounter >= 1);
_listenerCounter -= 1;
if (_listenerCounter == 0)
didStopListening();
}
+
void didStartListening();
void didStopListening();
bool get isListening => _listenerCounter > 0;
@@ -34,7 +39,10 @@
/// A mixin that replaces the didRegisterListener/didUnregisterListener contract
/// with a dispose contract.
abstract class AnimationEagerListenerMixin implements _ListenerMixin {
+ @override
void didRegisterListener() { }
+
+ @override
void didUnregisterListener() { }
/// Release any resources used by this object.
diff --git a/packages/flutter/lib/src/animation/tween.dart b/packages/flutter/lib/src/animation/tween.dart
index 65991ca..6dd9c39 100644
--- a/packages/flutter/lib/src/animation/tween.dart
+++ b/packages/flutter/lib/src/animation/tween.dart
@@ -32,10 +32,12 @@
_AnimatedEvaluation(this.parent, this._evaluatable);
/// The animation from which this value is derived.
+ @override
final Animation<double> parent;
final Animatable<T> _evaluatable;
+ @override
T get value => _evaluatable.evaluate(parent);
}
@@ -45,6 +47,7 @@
final Animatable<double> _parent;
final Animatable<T> _evaluatable;
+ @override
T evaluate(Animation<double> animation) {
double value = _parent.evaluate(animation);
return _evaluatable.evaluate(new AlwaysStoppedAnimation<double>(value));
@@ -65,6 +68,7 @@
T lerp(double t) => begin + (end - begin) * t;
/// Returns the interpolated value for the current value of the given animation.
+ @override
T evaluate(Animation<double> animation) {
if (end == null)
return begin;
@@ -76,6 +80,7 @@
return lerp(t);
}
+ @override
String toString() => '$runtimeType($begin \u2192 $end)';
}
@@ -86,6 +91,7 @@
class ColorTween extends Tween<Color> {
ColorTween({ Color begin, Color end }) : super(begin: begin, end: end);
+ @override
Color lerp(double t) => Color.lerp(begin, end, t);
}
@@ -96,6 +102,7 @@
class SizeTween extends Tween<Size> {
SizeTween({ Size begin, Size end }) : super(begin: begin, end: end);
+ @override
Size lerp(double t) => Size.lerp(begin, end, t);
}
@@ -106,6 +113,7 @@
class RectTween extends Tween<Rect> {
RectTween({ Rect begin, Rect end }) : super(begin: begin, end: end);
+ @override
Rect lerp(double t) => Rect.lerp(begin, end, t);
}
@@ -123,6 +131,7 @@
// The inherited lerp() function doesn't work with ints because it multiplies
// the begin and end types by a double, and int * double returns a double.
+ @override
int lerp(double t) => (begin + (end - begin) * t).round();
}
@@ -140,6 +149,7 @@
// The inherited lerp() function doesn't work with ints because it multiplies
// the begin and end types by a double, and int * double returns a double.
+ @override
int lerp(double t) => (begin + (end - begin) * t).floor();
}
@@ -154,6 +164,7 @@
/// The curve to use when transforming the value of the animation.
Curve curve;
+ @override
double evaluate(Animation<double> animation) {
double t = animation.value;
if (t == 0.0 || t == 1.0) {
diff --git a/packages/flutter/lib/src/gestures/binding.dart b/packages/flutter/lib/src/gestures/binding.dart
index d8324bd..d71c401 100644
--- a/packages/flutter/lib/src/gestures/binding.dart
+++ b/packages/flutter/lib/src/gestures/binding.dart
@@ -21,6 +21,7 @@
/// A binding for the gesture subsystem.
abstract class Gesturer extends BindingBase implements HitTestTarget, HitTestable {
+ @override
void initInstances() {
super.initInstances();
_instance = this;
@@ -76,6 +77,7 @@
}
/// Determine which [HitTestTarget] objects are located at a given position.
+ @override
void hitTest(HitTestResult result, Point position) {
result.add(new HitTestEntry(this));
}
@@ -113,6 +115,7 @@
}
}
+ @override
void handleEvent(PointerEvent event, HitTestEntry entry) {
pointerRouter.route(event);
if (event is PointerDownEvent) {
diff --git a/packages/flutter/lib/src/gestures/drag.dart b/packages/flutter/lib/src/gestures/drag.dart
index fdd02e4..0a75630 100644
--- a/packages/flutter/lib/src/gestures/drag.dart
+++ b/packages/flutter/lib/src/gestures/drag.dart
@@ -46,6 +46,7 @@
Map<int, VelocityTracker> _velocityTrackers = new Map<int, VelocityTracker>();
+ @override
void addPointer(PointerEvent event) {
startTrackingPointer(event.pointer);
_velocityTrackers[event.pointer] = new VelocityTracker();
@@ -56,6 +57,7 @@
}
}
+ @override
void handleEvent(PointerEvent event) {
assert(_state != DragState.ready);
if (event is PointerMoveEvent) {
@@ -75,6 +77,7 @@
stopTrackingIfPointerNoLongerDown(event);
}
+ @override
void acceptGesture(int pointer) {
if (_state != DragState.accepted) {
_state = DragState.accepted;
@@ -87,6 +90,7 @@
}
}
+ @override
void didStopTrackingLastPointer(int pointer) {
if (_state == DragState.possible) {
resolve(GestureDisposition.rejected);
@@ -108,6 +112,7 @@
_velocityTrackers.clear();
}
+ @override
void dispose() {
_velocityTrackers.clear();
super.dispose();
@@ -115,27 +120,45 @@
}
class VerticalDragGestureRecognizer extends _DragGestureRecognizer<double> {
+ @override
double get _initialPendingDragDelta => 0.0;
+
+ @override
double _getDragDelta(PointerEvent event) => event.delta.dy;
+
+ @override
bool get _hasSufficientPendingDragDeltaToAccept => _pendingDragDelta.abs() > kTouchSlop;
+ @override
String toStringShort() => 'vertical drag';
}
class HorizontalDragGestureRecognizer extends _DragGestureRecognizer<double> {
+ @override
double get _initialPendingDragDelta => 0.0;
+
+ @override
double _getDragDelta(PointerEvent event) => event.delta.dx;
+
+ @override
bool get _hasSufficientPendingDragDeltaToAccept => _pendingDragDelta.abs() > kTouchSlop;
+ @override
String toStringShort() => 'horizontal drag';
}
class PanGestureRecognizer extends _DragGestureRecognizer<Offset> {
+ @override
Offset get _initialPendingDragDelta => Offset.zero;
+
+ @override
Offset _getDragDelta(PointerEvent event) => event.delta;
+
+ @override
bool get _hasSufficientPendingDragDeltaToAccept {
return _pendingDragDelta.distance > kPanSlop;
}
+ @override
String toStringShort() => 'pan';
}
diff --git a/packages/flutter/lib/src/gestures/events.dart b/packages/flutter/lib/src/gestures/events.dart
index c9dd414..e8737da 100644
--- a/packages/flutter/lib/src/gestures/events.dart
+++ b/packages/flutter/lib/src/gestures/events.dart
@@ -171,6 +171,7 @@
/// the stylus is flat on that surface).
final double tilt;
+ @override
String toString() => '$runtimeType($position)';
String toStringFull() {
diff --git a/packages/flutter/lib/src/gestures/hit_test.dart b/packages/flutter/lib/src/gestures/hit_test.dart
index b0ae5f4..047b4b0 100644
--- a/packages/flutter/lib/src/gestures/hit_test.dart
+++ b/packages/flutter/lib/src/gestures/hit_test.dart
@@ -25,6 +25,7 @@
/// The [HitTestTarget] encountered during the hit test.
final HitTestTarget target;
+ @override
String toString() => '$target';
}
@@ -49,5 +50,6 @@
path.add(entry);
}
+ @override
String toString() => 'HitTestResult(${path.isEmpty ? "<empty path>" : path.join(", ")})';
}
diff --git a/packages/flutter/lib/src/gestures/long_press.dart b/packages/flutter/lib/src/gestures/long_press.dart
index 67be3eb..fb74621 100644
--- a/packages/flutter/lib/src/gestures/long_press.dart
+++ b/packages/flutter/lib/src/gestures/long_press.dart
@@ -15,16 +15,19 @@
GestureLongPressCallback onLongPress;
+ @override
void didExceedDeadline() {
resolve(GestureDisposition.accepted);
if (onLongPress != null)
onLongPress();
}
+ @override
void handlePrimaryPointer(PointerEvent event) {
if (event is PointerUpEvent)
resolve(GestureDisposition.rejected);
}
+ @override
String toStringShort() => 'long press';
}
diff --git a/packages/flutter/lib/src/gestures/lsq_solver.dart b/packages/flutter/lib/src/gestures/lsq_solver.dart
index 25c8e9b..2fe6f05 100644
--- a/packages/flutter/lib/src/gestures/lsq_solver.dart
+++ b/packages/flutter/lib/src/gestures/lsq_solver.dart
@@ -36,6 +36,7 @@
double norm() => math.sqrt(this * this);
+ @override
String toString() {
String result = "";
for (int i = 0; i < _length; i++) {
@@ -68,6 +69,7 @@
_columns
);
+ @override
String toString() {
String result = "";
for (int i = 0; i < _rows; i++) {
diff --git a/packages/flutter/lib/src/gestures/multidrag.dart b/packages/flutter/lib/src/gestures/multidrag.dart
index 3f291cd..bc27756 100644
--- a/packages/flutter/lib/src/gestures/multidrag.dart
+++ b/packages/flutter/lib/src/gestures/multidrag.dart
@@ -125,6 +125,7 @@
Map<int, T> _pointers = <int, T>{};
+ @override
void addPointer(PointerDownEvent event) {
assert(_pointers != null);
assert(event.pointer != null);
@@ -163,6 +164,7 @@
}
}
+ @override
void acceptGesture(int pointer) {
assert(_pointers != null);
T state = _pointers[pointer];
@@ -186,6 +188,7 @@
return drag;
}
+ @override
void rejectGesture(int pointer) {
assert(_pointers != null);
if (_pointers.containsKey(pointer)) {
@@ -204,6 +207,7 @@
_pointers.remove(pointer);
}
+ @override
void dispose() {
for (int pointer in _pointers.keys)
_removeState(pointer);
@@ -217,22 +221,26 @@
class _ImmediatePointerState extends MultiDragPointerState {
_ImmediatePointerState(Point initialPosition) : super(initialPosition);
+ @override
void checkForResolutionAfterMove() {
assert(pendingDelta != null);
if (pendingDelta.distance > kTouchSlop)
resolve(GestureDisposition.accepted);
}
+ @override
void accepted(GestureMultiDragStartCallback starter) {
starter(initialPosition);
}
}
class ImmediateMultiDragGestureRecognizer extends MultiDragGestureRecognizer<_ImmediatePointerState> {
+ @override
_ImmediatePointerState createNewPointerState(PointerDownEvent event) {
return new _ImmediatePointerState(event.position);
}
+ @override
String toStringShort() => 'multidrag';
}
@@ -240,22 +248,26 @@
class _HorizontalPointerState extends MultiDragPointerState {
_HorizontalPointerState(Point initialPosition) : super(initialPosition);
+ @override
void checkForResolutionAfterMove() {
assert(pendingDelta != null);
if (pendingDelta.dx.abs() > kTouchSlop)
resolve(GestureDisposition.accepted);
}
+ @override
void accepted(GestureMultiDragStartCallback starter) {
starter(initialPosition);
}
}
class HorizontalMultiDragGestureRecognizer extends MultiDragGestureRecognizer<_HorizontalPointerState> {
+ @override
_HorizontalPointerState createNewPointerState(PointerDownEvent event) {
return new _HorizontalPointerState(event.position);
}
+ @override
String toStringShort() => 'horizontal multidrag';
}
@@ -263,22 +275,26 @@
class _VerticalPointerState extends MultiDragPointerState {
_VerticalPointerState(Point initialPosition) : super(initialPosition);
+ @override
void checkForResolutionAfterMove() {
assert(pendingDelta != null);
if (pendingDelta.dy.abs() > kTouchSlop)
resolve(GestureDisposition.accepted);
}
+ @override
void accepted(GestureMultiDragStartCallback starter) {
starter(initialPosition);
}
}
class VerticalMultiDragGestureRecognizer extends MultiDragGestureRecognizer<_VerticalPointerState> {
+ @override
_VerticalPointerState createNewPointerState(PointerDownEvent event) {
return new _VerticalPointerState(event.position);
}
+ @override
String toStringShort() => 'vertical multidrag';
}
@@ -306,6 +322,7 @@
assert(_starter == null);
}
+ @override
void accepted(GestureMultiDragStartCallback starter) {
assert(_starter == null);
if (_timer == null)
@@ -314,6 +331,7 @@
_starter = starter;
}
+ @override
void checkForResolutionAfterMove() {
assert(_timer != null);
assert(pendingDelta != null);
@@ -321,6 +339,7 @@
resolve(GestureDisposition.rejected);
}
+ @override
void dispose() {
_timer?.cancel();
_timer = null;
@@ -342,9 +361,11 @@
_delay = value;
}
+ @override
_DelayedPointerState createNewPointerState(PointerDownEvent event) {
return new _DelayedPointerState(event.position, _delay);
}
+ @override
String toStringShort() => 'long multidrag';
}
diff --git a/packages/flutter/lib/src/gestures/multitap.dart b/packages/flutter/lib/src/gestures/multitap.dart
index 97da6fd..f40e410 100644
--- a/packages/flutter/lib/src/gestures/multitap.dart
+++ b/packages/flutter/lib/src/gestures/multitap.dart
@@ -82,6 +82,7 @@
_TapTracker _firstTap;
final Map<int, _TapTracker> _trackers = new Map<int, _TapTracker>();
+ @override
void addPointer(PointerEvent event) {
// Ignore out-of-bounds second taps.
if (_firstTap != null &&
@@ -112,8 +113,10 @@
}
}
+ @override
void acceptGesture(int pointer) { }
+ @override
void rejectGesture(int pointer) {
_TapTracker tracker = _trackers[pointer];
// If tracker isn't in the list, check if this is the first tap tracker
@@ -138,6 +141,7 @@
_reset();
}
+ @override
void dispose() {
_reset();
}
@@ -198,6 +202,7 @@
}
}
+ @override
String toStringShort() => 'double tap';
}
@@ -255,6 +260,7 @@
}
}
+ @override
void stopTrackingPointer(PointerRoute route) {
_timer?.cancel();
_timer = null;
@@ -305,6 +311,7 @@
final Map<int, _TapGesture> _gestureMap = new Map<int, _TapGesture>();
+ @override
void addPointer(PointerEvent event) {
assert(!_gestureMap.containsKey(event.pointer));
_gestureMap[event.pointer] = new _TapGesture(
@@ -316,12 +323,14 @@
onTapDown(event.position, event.pointer);
}
+ @override
void acceptGesture(int pointer) {
assert(_gestureMap.containsKey(pointer));
_gestureMap[pointer]?.accept();
assert(!_gestureMap.containsKey(pointer));
}
+ @override
void rejectGesture(int pointer) {
assert(_gestureMap.containsKey(pointer));
_gestureMap[pointer]?.reject();
@@ -347,6 +356,7 @@
onLongTapDown(lastPosition, pointer);
}
+ @override
void dispose() {
List<_TapGesture> localGestures = new List<_TapGesture>.from(_gestureMap.values);
for (_TapGesture gesture in localGestures)
@@ -355,5 +365,6 @@
assert(_gestureMap.isEmpty);
}
+ @override
String toStringShort() => 'multitap';
}
diff --git a/packages/flutter/lib/src/gestures/recognizer.dart b/packages/flutter/lib/src/gestures/recognizer.dart
index 21bc125..9db54cb 100644
--- a/packages/flutter/lib/src/gestures/recognizer.dart
+++ b/packages/flutter/lib/src/gestures/recognizer.dart
@@ -61,8 +61,13 @@
final Set<int> _trackedPointers = new HashSet<int>();
void handleEvent(PointerEvent event);
+
+ @override
void acceptGesture(int pointer) { }
+
+ @override
void rejectGesture(int pointer) { }
+
void didStopTrackingLastPointer(int pointer);
void resolve(GestureDisposition disposition) {
@@ -72,6 +77,7 @@
entry.resolve(disposition);
}
+ @override
void dispose() {
resolve(GestureDisposition.rejected);
for (int pointer in _trackedPointers)
@@ -116,6 +122,7 @@
Point initialPosition;
Timer _timer;
+ @override
void addPointer(PointerDownEvent event) {
startTrackingPointer(event.pointer);
if (state == GestureRecognizerState.ready) {
@@ -127,6 +134,7 @@
}
}
+ @override
void handleEvent(PointerEvent event) {
assert(state != GestureRecognizerState.ready);
if (state == GestureRecognizerState.possible && event.pointer == primaryPointer) {
@@ -151,6 +159,7 @@
assert(deadline == null);
}
+ @override
void rejectGesture(int pointer) {
if (pointer == primaryPointer) {
_stopTimer();
@@ -158,11 +167,13 @@
}
}
+ @override
void didStopTrackingLastPointer(int pointer) {
_stopTimer();
state = GestureRecognizerState.ready;
}
+ @override
void dispose() {
_stopTimer();
super.dispose();
diff --git a/packages/flutter/lib/src/gestures/scale.dart b/packages/flutter/lib/src/gestures/scale.dart
index e54eb4c..f6daf55 100644
--- a/packages/flutter/lib/src/gestures/scale.dart
+++ b/packages/flutter/lib/src/gestures/scale.dart
@@ -31,6 +31,7 @@
double get _scaleFactor => _initialSpan > 0.0 ? _currentSpan / _initialSpan : 1.0;
+ @override
void addPointer(PointerEvent event) {
startTrackingPointer(event.pointer);
if (_state == ScaleState.ready) {
@@ -41,6 +42,7 @@
}
}
+ @override
void handleEvent(PointerEvent event) {
assert(_state != ScaleState.ready);
bool configChanged = false;
@@ -101,6 +103,7 @@
onUpdate(_scaleFactor, focalPoint);
}
+ @override
void acceptGesture(int pointer) {
if (_state != ScaleState.accepted) {
_state = ScaleState.accepted;
@@ -108,6 +111,7 @@
}
}
+ @override
void didStopTrackingLastPointer(int pointer) {
switch(_state) {
case ScaleState.possible:
@@ -125,5 +129,6 @@
_state = ScaleState.ready;
}
+ @override
String toStringShort() => 'scale';
}
diff --git a/packages/flutter/lib/src/gestures/tap.dart b/packages/flutter/lib/src/gestures/tap.dart
index 02fe31c..0744e46 100644
--- a/packages/flutter/lib/src/gestures/tap.dart
+++ b/packages/flutter/lib/src/gestures/tap.dart
@@ -27,6 +27,7 @@
bool _wonArena = false;
Point _finalPosition;
+ @override
void handlePrimaryPointer(PointerEvent event) {
if (event is PointerUpEvent) {
_finalPosition = event.position;
@@ -34,6 +35,7 @@
}
}
+ @override
void resolve(GestureDisposition disposition) {
if (_wonArena && disposition == GestureDisposition.rejected) {
if (onTapCancel != null)
@@ -43,10 +45,12 @@
super.resolve(disposition);
}
+ @override
void didExceedDeadline() {
_checkDown();
}
+ @override
void acceptGesture(int pointer) {
super.acceptGesture(pointer);
if (pointer == primaryPointer) {
@@ -56,6 +60,7 @@
}
}
+ @override
void rejectGesture(int pointer) {
super.rejectGesture(pointer);
if (pointer == primaryPointer) {
@@ -91,5 +96,6 @@
_finalPosition = null;
}
+ @override
String toStringShort() => 'tap';
}
diff --git a/packages/flutter/lib/src/gestures/velocity_tracker.dart b/packages/flutter/lib/src/gestures/velocity_tracker.dart
index fe2ca13..baac211 100644
--- a/packages/flutter/lib/src/gestures/velocity_tracker.dart
+++ b/packages/flutter/lib/src/gestures/velocity_tracker.dart
@@ -17,6 +17,7 @@
final int degree;
final double confidence;
+ @override
String toString() {
return 'Estimate(xCoefficients: $xCoefficients, '
'yCoefficients: $yCoefficients, '
@@ -73,6 +74,7 @@
_WeightChooser _chooseWeight;
int _index;
+ @override
void addMovement(Duration timeStamp, Point position) {
_index += 1;
if (_index == kHistorySize)
@@ -82,6 +84,7 @@
movement.position = position;
}
+ @override
_Estimate getEstimate() {
// Iterate over movement samples in reverse time order and collect samples.
List<double> x = new List<double>();
@@ -145,6 +148,7 @@
);
}
+ @override
void clear() {
_index = -1;
}
@@ -228,6 +232,7 @@
pixelsPerSecond: pixelsPerSecond + other.pixelsPerSecond);
}
+ @override
bool operator ==(dynamic other) {
if (other is! Velocity)
return false;
@@ -235,8 +240,10 @@
return pixelsPerSecond == typedOther.pixelsPerSecond;
}
+ @override
int get hashCode => pixelsPerSecond.hashCode;
+ @override
String toString() => 'Velocity(${pixelsPerSecond.dx.toStringAsFixed(1)}, ${pixelsPerSecond.dy.toStringAsFixed(1)})';
}
diff --git a/packages/flutter/lib/src/material/app.dart b/packages/flutter/lib/src/material/app.dart
index c5894e2..318bb1b 100644
--- a/packages/flutter/lib/src/material/app.dart
+++ b/packages/flutter/lib/src/material/app.dart
@@ -71,14 +71,17 @@
/// Only available in checked mode.
final bool debugShowMaterialGrid;
+ @override
_MaterialAppState createState() => new _MaterialAppState();
}
class _MaterialAppState extends WidgetsAppState<MaterialApp> {
-
final HeroController _heroController = new HeroController();
+
+ @override
NavigatorObserver get navigatorObserver => _heroController;
+ @override
Widget build(BuildContext context) {
ThemeData theme = config.theme ?? new ThemeData.fallback();
Widget result = new AnimatedTheme(
diff --git a/packages/flutter/lib/src/material/app_bar.dart b/packages/flutter/lib/src/material/app_bar.dart
index d478d6e..bbb1286 100644
--- a/packages/flutter/lib/src/material/app_bar.dart
+++ b/packages/flutter/lib/src/material/app_bar.dart
@@ -42,9 +42,9 @@
AppBar copyWith({
Key key,
- Widget left,
- Widget center,
- List<Widget> right,
+ Widget leading,
+ Widget title,
+ List<Widget> actions,
WidgetBuilder flexibleSpace,
double foregroundOpacity,
int elevation,
@@ -54,9 +54,9 @@
}) {
return new AppBar(
key: key ?? this.key,
- leading: left ?? this.leading,
- title: center ?? this.title,
- actions: right ?? this.actions,
+ leading: leading ?? this.leading,
+ title: title ?? this.title,
+ actions: actions ?? this.actions,
flexibleSpace: flexibleSpace ?? this.flexibleSpace,
foregroundOpacity: foregroundOpacity ?? this.foregroundOpacity,
tabBar: tabBar ?? this.tabBar,
@@ -67,6 +67,7 @@
);
}
+ @override
Widget build(BuildContext context) {
Color color = backgroundColor;
IconThemeData iconThemeData;
@@ -117,7 +118,7 @@
// If the toolBar's height shrinks below toolBarHeight, it will be clipped and bottom
// justified. This is so that the toolbar appears to move upwards as its height is reduced.
- final double toolBarHeight = kAppBarHeight + combinedPadding.top + combinedPadding.bottom;
+ final double toolBarHeight = kToolBarHeight + combinedPadding.top + combinedPadding.bottom;
final Widget toolBar = new ConstrainedBox(
constraints: new BoxConstraints(maxHeight: toolBarHeight),
child: new Padding(
diff --git a/packages/flutter/lib/src/material/bottom_sheet.dart b/packages/flutter/lib/src/material/bottom_sheet.dart
index 21d750c..0a30c1e 100644
--- a/packages/flutter/lib/src/material/bottom_sheet.dart
+++ b/packages/flutter/lib/src/material/bottom_sheet.dart
@@ -32,6 +32,7 @@
final VoidCallback onClosing;
final WidgetBuilder builder;
+ @override
_BottomSheetState createState() => new _BottomSheetState();
static AnimationController createAnimationController() {
@@ -75,6 +76,7 @@
}
}
+ @override
Widget build(BuildContext context) {
return new GestureDetector(
onVerticalDragUpdate: _handleDragUpdate,
@@ -99,6 +101,7 @@
final double progress;
+ @override
BoxConstraints getConstraintsForChild(BoxConstraints constraints) {
return new BoxConstraints(
minWidth: constraints.maxWidth,
@@ -108,10 +111,12 @@
);
}
+ @override
Offset getPositionForChild(Size size, Size childSize) {
return new Offset(0.0, size.height - childSize.height * progress);
}
+ @override
bool shouldRelayout(_ModalBottomSheetLayout oldDelegate) {
return progress != oldDelegate.progress;
}
@@ -122,10 +127,12 @@
final _ModalBottomSheetRoute<T> route;
+ @override
_ModalBottomSheetState<T> createState() => new _ModalBottomSheetState<T>();
}
class _ModalBottomSheetState<T> extends State<_ModalBottomSheet<T>> {
+ @override
Widget build(BuildContext context) {
return new GestureDetector(
onTap: () => Navigator.pop(context),
@@ -156,14 +163,21 @@
final WidgetBuilder builder;
+ @override
Duration get transitionDuration => _kBottomSheetDuration;
+
+ @override
bool get barrierDismissable => true;
+
+ @override
Color get barrierColor => Colors.black54;
+ @override
AnimationController createAnimationController() {
return BottomSheet.createAnimationController();
}
+ @override
Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> forwardAnimation) {
return new _ModalBottomSheet<T>(route: this);
}
diff --git a/packages/flutter/lib/src/material/button.dart b/packages/flutter/lib/src/material/button.dart
index 0fd126a..4a1eeb7 100644
--- a/packages/flutter/lib/src/material/button.dart
+++ b/packages/flutter/lib/src/material/button.dart
@@ -31,6 +31,7 @@
return result?.color ?? ButtonColor.normal;
}
+ @override
bool updateShouldNotify(ButtonTheme old) => color != old.color;
}
@@ -63,6 +64,7 @@
/// enable a button, set its [onPressed] property to a non-null value.
bool get enabled => onPressed != null;
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (!enabled)
@@ -110,6 +112,7 @@
});
}
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context));
Widget contents = new InkWell(
diff --git a/packages/flutter/lib/src/material/card.dart b/packages/flutter/lib/src/material/card.dart
index 241d553..f289477 100644
--- a/packages/flutter/lib/src/material/card.dart
+++ b/packages/flutter/lib/src/material/card.dart
@@ -17,6 +17,7 @@
final Widget child;
final Color color;
+ @override
Widget build(BuildContext context) {
return new Container(
margin: _kCardMargins,
diff --git a/packages/flutter/lib/src/material/checkbox.dart b/packages/flutter/lib/src/material/checkbox.dart
index 54b1d42..c9e47b6 100644
--- a/packages/flutter/lib/src/material/checkbox.dart
+++ b/packages/flutter/lib/src/material/checkbox.dart
@@ -37,6 +37,7 @@
final Color activeColor;
final ValueChanged<bool> onChanged;
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context));
ThemeData themeData = Theme.of(context);
@@ -67,6 +68,7 @@
final Color inactiveColor;
final ValueChanged<bool> onChanged;
+ @override
_RenderCheckbox createRenderObject(BuildContext context) => new _RenderCheckbox(
value: value,
activeColor: activeColor,
@@ -74,6 +76,7 @@
onChanged: onChanged
);
+ @override
void updateRenderObject(BuildContext context, _RenderCheckbox renderObject) {
renderObject
..value = value
@@ -103,6 +106,7 @@
size: const Size(2 * kRadialReactionRadius, 2 * kRadialReactionRadius)
);
+ @override
void paint(PaintingContext context, Offset offset) {
final Canvas canvas = context.canvas;
final double offsetX = _kOffset + offset.dx;
diff --git a/packages/flutter/lib/src/material/chip.dart b/packages/flutter/lib/src/material/chip.dart
index 04e7a83..e77080b 100644
--- a/packages/flutter/lib/src/material/chip.dart
+++ b/packages/flutter/lib/src/material/chip.dart
@@ -33,6 +33,7 @@
final Widget label;
final VoidCallback onDeleted;
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context));
final bool deletable = onDeleted != null;
diff --git a/packages/flutter/lib/src/material/circle_avatar.dart b/packages/flutter/lib/src/material/circle_avatar.dart
index a10fbfd..4674980 100644
--- a/packages/flutter/lib/src/material/circle_avatar.dart
+++ b/packages/flutter/lib/src/material/circle_avatar.dart
@@ -19,6 +19,7 @@
final Color backgroundColor;
final double radius;
+ @override
Widget build(BuildContext context) {
final ThemeData theme = Theme.of(context);
final Color color = backgroundColor ?? theme.primaryColor;
diff --git a/packages/flutter/lib/src/material/constants.dart b/packages/flutter/lib/src/material/constants.dart
index 93f37f0..f56f506 100644
--- a/packages/flutter/lib/src/material/constants.dart
+++ b/packages/flutter/lib/src/material/constants.dart
@@ -9,7 +9,7 @@
// Mobile Landscape: 48dp
// Mobile Portrait: 56dp
// Tablet/Desktop: 64dp
-const double kAppBarHeight = 56.0;
+const double kToolBarHeight = 56.0;
const double kExtendedAppBarHeight = 128.0;
const double kTextTabBarHeight = 48.0;
diff --git a/packages/flutter/lib/src/material/date_picker.dart b/packages/flutter/lib/src/material/date_picker.dart
index 3024af3..1388462 100644
--- a/packages/flutter/lib/src/material/date_picker.dart
+++ b/packages/flutter/lib/src/material/date_picker.dart
@@ -34,6 +34,7 @@
final DateTime firstDate;
final DateTime lastDate;
+ @override
_DatePickerState createState() => new _DatePickerState();
}
@@ -64,6 +65,7 @@
static const double _calendarHeight = 210.0;
+ @override
Widget build(BuildContext context) {
Widget header = new _DatePickerHeader(
selectedDate: config.selectedDate,
@@ -120,6 +122,7 @@
onModeChanged(value);
}
+ @override
Widget build(BuildContext context) {
ThemeData theme = Theme.of(context);
TextTheme headerTheme = theme.primaryTextTheme;
@@ -181,6 +184,7 @@
final ValueChanged<DateTime> onChanged;
final DateTime displayedMonth;
+ @override
Widget build(BuildContext context) {
ThemeData themeData = Theme.of(context);
TextStyle headerStyle = themeData.textTheme.caption.copyWith(fontWeight: FontWeight.w700);
@@ -289,10 +293,12 @@
final DateTime lastDate;
final double itemExtent;
+ @override
_MonthPickerState createState() => new _MonthPickerState();
}
class _MonthPickerState extends State<MonthPicker> {
+ @override
void initState() {
super.initState();
_updateCurrentDate();
@@ -335,6 +341,7 @@
return result;
}
+ @override
Widget build(BuildContext context) {
return new ScrollableLazyList(
itemExtent: config.itemExtent,
@@ -343,6 +350,7 @@
);
}
+ @override
void dispose() {
if (_timer != null)
_timer.cancel();
@@ -369,6 +377,7 @@
final DateTime firstDate;
final DateTime lastDate;
+ @override
_YearPickerState createState() => new _YearPickerState();
}
@@ -403,6 +412,7 @@
return items;
}
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context));
return new ScrollableLazyList(
diff --git a/packages/flutter/lib/src/material/date_picker_dialog.dart b/packages/flutter/lib/src/material/date_picker_dialog.dart
index 2d58f0b..49696b2 100644
--- a/packages/flutter/lib/src/material/date_picker_dialog.dart
+++ b/packages/flutter/lib/src/material/date_picker_dialog.dart
@@ -22,10 +22,12 @@
final DateTime firstDate;
final DateTime lastDate;
+ @override
_DatePickerDialogState createState() => new _DatePickerDialogState();
}
class _DatePickerDialogState extends State<_DatePickerDialog> {
+ @override
void initState() {
super.initState();
_selectedDate = config.initialDate;
@@ -47,6 +49,7 @@
Navigator.pop(context, _selectedDate);
}
+ @override
Widget build(BuildContext context) {
return new Dialog(
content: new DatePicker(
diff --git a/packages/flutter/lib/src/material/dialog.dart b/packages/flutter/lib/src/material/dialog.dart
index e8acc90..078bba5 100644
--- a/packages/flutter/lib/src/material/dialog.dart
+++ b/packages/flutter/lib/src/material/dialog.dart
@@ -54,6 +54,7 @@
}
}
+ @override
Widget build(BuildContext context) {
List<Widget> dialogBody = new List<Widget>();
@@ -123,14 +124,21 @@
final Widget child;
+ @override
Duration get transitionDuration => const Duration(milliseconds: 150);
+
+ @override
bool get barrierDismissable => true;
+
+ @override
Color get barrierColor => Colors.black54;
+ @override
Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> forwardAnimation) {
return child;
}
+ @override
Widget buildTransitions(BuildContext context, Animation<double> animation, Animation<double> forwardAnimation, Widget child) {
return new FadeTransition(
opacity: new CurvedAnimation(
diff --git a/packages/flutter/lib/src/material/divider.dart b/packages/flutter/lib/src/material/divider.dart
index d01968a..75097f1 100644
--- a/packages/flutter/lib/src/material/divider.dart
+++ b/packages/flutter/lib/src/material/divider.dart
@@ -15,6 +15,7 @@
final double indent;
final Color color;
+ @override
Widget build(BuildContext context) {
final double bottom = (height ~/ 2.0).toDouble();
return new Container(
diff --git a/packages/flutter/lib/src/material/drawer.dart b/packages/flutter/lib/src/material/drawer.dart
index e3353e9..201a640 100644
--- a/packages/flutter/lib/src/material/drawer.dart
+++ b/packages/flutter/lib/src/material/drawer.dart
@@ -36,6 +36,7 @@
final int elevation;
final Widget child;
+ @override
Widget build(BuildContext context) {
return new ConstrainedBox(
constraints: const BoxConstraints.expand(width: _kWidth),
@@ -55,10 +56,12 @@
final Widget child;
+ @override
DrawerControllerState createState() => new DrawerControllerState();
}
class DrawerControllerState extends State<DrawerController> {
+ @override
void initState() {
super.initState();
_controller = new AnimationController(duration: _kBaseSettleDuration)
@@ -66,6 +69,7 @@
..addStatusListener(_animationStatusChanged);
}
+ @override
void dispose() {
_controller
..removeListener(_animationChanged)
@@ -158,6 +162,7 @@
final ColorTween _color = new ColorTween(begin: Colors.transparent, end: Colors.black54);
final GlobalKey _gestureDetectorKey = new GlobalKey();
+ @override
Widget build(BuildContext context) {
if (_controller.status == AnimationStatus.dismissed) {
return new Align(
diff --git a/packages/flutter/lib/src/material/drawer_header.dart b/packages/flutter/lib/src/material/drawer_header.dart
index 4feb78b..a830dc8 100644
--- a/packages/flutter/lib/src/material/drawer_header.dart
+++ b/packages/flutter/lib/src/material/drawer_header.dart
@@ -16,6 +16,7 @@
final Widget child;
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context));
final double statusBarHeight = (MediaQuery.of(context)?.padding ?? EdgeInsets.zero).top;
diff --git a/packages/flutter/lib/src/material/drawer_item.dart b/packages/flutter/lib/src/material/drawer_item.dart
index 05942a0..c82f248 100644
--- a/packages/flutter/lib/src/material/drawer_item.dart
+++ b/packages/flutter/lib/src/material/drawer_item.dart
@@ -55,6 +55,7 @@
return result;
}
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context));
ThemeData themeData = Theme.of(context);
diff --git a/packages/flutter/lib/src/material/dropdown.dart b/packages/flutter/lib/src/material/dropdown.dart
index 34550c2..44ec9c4 100644
--- a/packages/flutter/lib/src/material/dropdown.dart
+++ b/packages/flutter/lib/src/material/dropdown.dart
@@ -35,6 +35,7 @@
final double menuBottom;
final RenderBox renderBox;
+ @override
void paint(Canvas canvas, Size size) {
final BoxPainter painter = new BoxDecoration(
backgroundColor: color,
@@ -47,6 +48,7 @@
painter.paint(canvas, new Rect.fromLTRB(0.0, top, size.width, bottom));
}
+ @override
bool shouldRepaint(_DropDownMenuPainter oldPainter) {
return oldPainter.color != color
|| oldPainter.elevation != elevation
@@ -64,6 +66,7 @@
final _DropDownRoute<T> route;
+ @override
Widget build(BuildContext context) {
// The menu is shown in three stages (unit timing in brackets):
// [0s - 0.25s] - Fade in a rect-sized menu container with the selected item.
@@ -152,13 +155,18 @@
// returning a real null value.
class _DropDownRouteResult<T> {
const _DropDownRouteResult(this.result);
+
final T result;
+
+ @override
bool operator ==(dynamic other) {
if (other is! _DropDownRouteResult<T>)
return false;
final _DropDownRouteResult<T> typedOther = other;
return result == typedOther.result;
}
+
+ @override
int get hashCode => result.hashCode;
}
@@ -176,10 +184,16 @@
final Rect rect;
final int elevation;
+ @override
Duration get transitionDuration => _kDropDownMenuDuration;
+
+ @override
bool get barrierDismissable => true;
+
+ @override
Color get barrierColor => null;
+ @override
ModalPosition getPosition(BuildContext context) {
RenderBox overlayBox = Overlay.of(context).context.findRenderObject();
assert(overlayBox != null); // can't be null; routes get inserted by Navigator which has its own Overlay
@@ -192,6 +206,7 @@
);
}
+ @override
Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> forwardAnimation) {
return new _DropDownMenu<T>(route: this);
}
@@ -207,6 +222,7 @@
final Widget child;
final T value;
+ @override
Widget build(BuildContext context) {
return new Container(
height: _kMenuItemHeight,
@@ -238,18 +254,21 @@
final ValueChanged<T> onChanged;
final int elevation;
+ @override
_DropDownButtonState<T> createState() => new _DropDownButtonState<T>();
}
class _DropDownButtonState<T> extends State<DropDownButton<T>> {
final GlobalKey indexedStackKey = new GlobalKey(debugLabel: 'DropDownButton.IndexedStack');
+ @override
void initState() {
super.initState();
_updateSelectedIndex();
assert(_selectedIndex != null);
}
+ @override
void didUpdateConfig(DropDownButton<T> oldConfig) {
if (config.items[_selectedIndex].value != config.value)
_updateSelectedIndex();
@@ -285,6 +304,7 @@
});
}
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context));
return new GestureDetector(
diff --git a/packages/flutter/lib/src/material/flat_button.dart b/packages/flutter/lib/src/material/flat_button.dart
index d469525..f3f5415 100644
--- a/packages/flutter/lib/src/material/flat_button.dart
+++ b/packages/flutter/lib/src/material/flat_button.dart
@@ -59,21 +59,23 @@
/// Controls the default text color if the text color isn't explicit set.
final ThemeBrightness colorBrightness;
+ @override
_FlatButtonState createState() => new _FlatButtonState();
}
class _FlatButtonState extends MaterialButtonState<FlatButton> {
-
+ @override
int get elevation => 0;
+ @override
Color getColor(BuildContext context) {
if (!config.enabled)
return config.disabledColor;
return config.color;
}
+ @override
ThemeBrightness getColorBrightness(BuildContext context) {
return config.colorBrightness ?? Theme.of(context).brightness;
}
-
}
diff --git a/packages/flutter/lib/src/material/flexible_space_bar.dart b/packages/flutter/lib/src/material/flexible_space_bar.dart
index b9d4408..7987f10 100644
--- a/packages/flutter/lib/src/material/flexible_space_bar.dart
+++ b/packages/flutter/lib/src/material/flexible_space_bar.dart
@@ -17,17 +17,18 @@
final Widget title;
final Widget image;
+ @override
_FlexibleSpaceBarState createState() => new _FlexibleSpaceBarState();
}
class _FlexibleSpaceBarState extends State<FlexibleSpaceBar> {
-
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasScaffold(context));
final double appBarHeight = Scaffold.of(context).appBarHeight;
final Animation<double> animation = Scaffold.of(context).appBarAnimation;
final EdgeInsets toolBarPadding = MediaQuery.of(context)?.padding ?? EdgeInsets.zero;
- final double toolBarHeight = kAppBarHeight + toolBarPadding.top;
+ final double toolBarHeight = kToolBarHeight + toolBarPadding.top;
final List<Widget> children = <Widget>[];
// background image
@@ -63,7 +64,7 @@
color: titleStyle.color.withAlpha(new Tween<double>(begin: 255.0, end: 0.0).evaluate(opacityCurve).toInt())
);
final double yAlignStart = 1.0;
- final double yAlignEnd = (toolBarPadding.top + kAppBarHeight / 2.0) / toolBarHeight;
+ final double yAlignEnd = (toolBarPadding.top + kToolBarHeight / 2.0) / toolBarHeight;
final double scaleAndAlignEnd = (appBarHeight - toolBarHeight) / appBarHeight;
final CurvedAnimation scaleAndAlignCurve = new CurvedAnimation(
parent: animation,
diff --git a/packages/flutter/lib/src/material/floating_action_button.dart b/packages/flutter/lib/src/material/floating_action_button.dart
index edc81b5..00be2e0 100644
--- a/packages/flutter/lib/src/material/floating_action_button.dart
+++ b/packages/flutter/lib/src/material/floating_action_button.dart
@@ -57,6 +57,7 @@
final int highlightElevation;
final bool mini;
+ @override
_FloatingActionButtonState createState() => new _FloatingActionButtonState();
}
@@ -64,6 +65,7 @@
Animation<double> _childSegue;
AnimationController _childSegueController;
+ @override
void initState() {
super.initState();
_childSegueController = new AnimationController(duration: _kChildSegue)
@@ -77,6 +79,7 @@
));
}
+ @override
void didUpdateConfig(FloatingActionButton oldConfig) {
super.didUpdateConfig(oldConfig);
if (Widget.canUpdate(oldConfig.child, config.child) && config.backgroundColor == oldConfig.backgroundColor)
@@ -94,6 +97,7 @@
});
}
+ @override
Widget build(BuildContext context) {
Color iconColor = Colors.white;
Color materialColor = config.backgroundColor;
diff --git a/packages/flutter/lib/src/material/grid_tile.dart b/packages/flutter/lib/src/material/grid_tile.dart
index fefd8f8..65dc9a9 100644
--- a/packages/flutter/lib/src/material/grid_tile.dart
+++ b/packages/flutter/lib/src/material/grid_tile.dart
@@ -15,6 +15,7 @@
final Widget footer;
final Widget child;
+ @override
Widget build(BuildContext context) {
if (header == null && footer == null)
return child;
diff --git a/packages/flutter/lib/src/material/grid_tile_bar.dart b/packages/flutter/lib/src/material/grid_tile_bar.dart
index 87dfe9c..f35aa9d 100644
--- a/packages/flutter/lib/src/material/grid_tile_bar.dart
+++ b/packages/flutter/lib/src/material/grid_tile_bar.dart
@@ -31,6 +31,7 @@
final Widget subtitle;
final Widget trailing;
+ @override
Widget build(BuildContext context) {
BoxDecoration decoration;
if (backgroundColor != null)
diff --git a/packages/flutter/lib/src/material/icon.dart b/packages/flutter/lib/src/material/icon.dart
index 90a8bf4..21ccb0c 100644
--- a/packages/flutter/lib/src/material/icon.dart
+++ b/packages/flutter/lib/src/material/icon.dart
@@ -56,6 +56,7 @@
return IconTheme.of(context)?.color ?? _getDefaultColorForThemeBrightness(Theme.of(context).brightness);
}
+ @override
Widget build(BuildContext context) {
if (icon == null)
return new SizedBox(width: size, height: size);
@@ -84,6 +85,7 @@
);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('$icon');
diff --git a/packages/flutter/lib/src/material/icon_button.dart b/packages/flutter/lib/src/material/icon_button.dart
index 461dc75..abada4d 100644
--- a/packages/flutter/lib/src/material/icon_button.dart
+++ b/packages/flutter/lib/src/material/icon_button.dart
@@ -53,6 +53,7 @@
/// used for accessibility.
final String tooltip;
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context));
Widget result = new Padding(
@@ -75,6 +76,7 @@
);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('$icon');
diff --git a/packages/flutter/lib/src/material/icon_theme.dart b/packages/flutter/lib/src/material/icon_theme.dart
index e14c2e8..e9e3562 100644
--- a/packages/flutter/lib/src/material/icon_theme.dart
+++ b/packages/flutter/lib/src/material/icon_theme.dart
@@ -24,8 +24,10 @@
return result?.data;
}
+ @override
bool updateShouldNotify(IconTheme old) => data != old.data;
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('$data');
diff --git a/packages/flutter/lib/src/material/icon_theme_data.dart b/packages/flutter/lib/src/material/icon_theme_data.dart
index 860a872..f80c7d2 100644
--- a/packages/flutter/lib/src/material/icon_theme_data.dart
+++ b/packages/flutter/lib/src/material/icon_theme_data.dart
@@ -23,6 +23,7 @@
);
}
+ @override
bool operator ==(dynamic other) {
if (other is! IconThemeData)
return false;
@@ -30,7 +31,9 @@
return color == typedOther.color && opacity == typedOther.opacity;
}
+ @override
int get hashCode => hashValues(color, opacity);
+ @override
String toString() => '$color';
}
diff --git a/packages/flutter/lib/src/material/icons.dart b/packages/flutter/lib/src/material/icons.dart
index 485f441..6a9f1af 100644
--- a/packages/flutter/lib/src/material/icons.dart
+++ b/packages/flutter/lib/src/material/icons.dart
@@ -6,13 +6,18 @@
const IconData(this.codePoint);
final int codePoint;
+ @override
bool operator ==(dynamic other) {
if (other is! IconData)
return false;
final IconData typedOther = other;
return codePoint == typedOther.codePoint;
}
+
+ @override
int get hashCode => codePoint.hashCode;
+
+ @override
String toString() => 'IconData(codePoint: $codePoint)';
}
diff --git a/packages/flutter/lib/src/material/ink_well.dart b/packages/flutter/lib/src/material/ink_well.dart
index 1eff1e7..394959e 100644
--- a/packages/flutter/lib/src/material/ink_well.dart
+++ b/packages/flutter/lib/src/material/ink_well.dart
@@ -44,6 +44,7 @@
final bool containedInWell;
final BoxShape highlightShape;
+ @override
_InkResponseState<InkResponse> createState() => new _InkResponseState<InkResponse>();
}
@@ -133,6 +134,7 @@
config.onLongPress();
}
+ @override
void deactivate() {
if (_splashes != null) {
Set<InkSplash> splashes = _splashes;
@@ -147,11 +149,13 @@
super.deactivate();
}
+ @override
void dependenciesChanged(Type affectedWidgetType) {
if (affectedWidgetType == Theme && _lastHighlight != null)
_lastHighlight.color = Theme.of(context).highlightColor;
}
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context));
final bool enabled = config.onTap != null || config.onDoubleTap != null || config.onLongPress != null;
diff --git a/packages/flutter/lib/src/material/input.dart b/packages/flutter/lib/src/material/input.dart
index c3e0981..40bb04d 100644
--- a/packages/flutter/lib/src/material/input.dart
+++ b/packages/flutter/lib/src/material/input.dart
@@ -67,6 +67,7 @@
/// Called when the user indicates that they are done editing the text in the field.
final ValueChanged<InputValue> onSubmitted;
+ @override
_InputState createState() => new _InputState();
}
@@ -78,6 +79,7 @@
GlobalKey get focusKey => config.key is GlobalKey ? config.key : _rawInputLineKey;
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context));
ThemeData themeData = Theme.of(context);
diff --git a/packages/flutter/lib/src/material/list.dart b/packages/flutter/lib/src/material/list.dart
index 507dd4a..00be870 100644
--- a/packages/flutter/lib/src/material/list.dart
+++ b/packages/flutter/lib/src/material/list.dart
@@ -39,12 +39,14 @@
final EdgeInsets scrollablePadding;
final Key scrollableKey;
+ @override
_MaterialListState createState() => new _MaterialListState();
}
class _MaterialListState extends State<MaterialList> {
ScrollbarPainter _scrollbarPainter = new ScrollbarPainter();
+ @override
Widget build(BuildContext context) {
return new ScrollableList(
key: config.scrollableKey,
diff --git a/packages/flutter/lib/src/material/list_item.dart b/packages/flutter/lib/src/material/list_item.dart
index 4e2da07..714527e 100644
--- a/packages/flutter/lib/src/material/list_item.dart
+++ b/packages/flutter/lib/src/material/list_item.dart
@@ -84,6 +84,7 @@
return dense ? style.copyWith(color: color, fontSize: 12.0) : style.copyWith(color: color);
}
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context));
final bool isTwoLine = !isThreeLine && subtitle != null;
diff --git a/packages/flutter/lib/src/material/material.dart b/packages/flutter/lib/src/material/material.dart
index b2f2de7..7658caa 100644
--- a/packages/flutter/lib/src/material/material.dart
+++ b/packages/flutter/lib/src/material/material.dart
@@ -98,8 +98,10 @@
return result;
}
+ @override
_MaterialState createState() => new _MaterialState();
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('$type');
@@ -125,6 +127,7 @@
}
}
+ @override
Widget build(BuildContext context) {
Color backgroundColor = _getBackgroundColor(context);
Widget contents = config.child;
@@ -189,10 +192,12 @@
// This is here to satisfy the MaterialInkController contract.
// The actual painting of this color is done by a Container in the
// MaterialState build method.
+ @override
Color color;
final List<InkFeature> _inkFeatures = <InkFeature>[];
+ @override
InkSplash splashAt({
RenderBox referenceBox,
Point position,
@@ -228,6 +233,7 @@
return math.max(math.max(d1, d2), math.max(d3, d4)).ceilToDouble();
}
+ @override
InkHighlight highlightAt({
RenderBox referenceBox,
Color color,
@@ -245,6 +251,7 @@
return highlight;
}
+ @override
void addInkFeature(InkFeature feature) {
assert(!feature._debugDisposed);
assert(feature.renderer == this);
@@ -258,8 +265,10 @@
markNeedsPaint();
}
+ @override
bool hitTestSelf(Point position) => true;
+ @override
void paint(PaintingContext context, Offset offset) {
if (_inkFeatures.isNotEmpty) {
final Canvas canvas = context.canvas;
@@ -279,8 +288,10 @@
final Color color;
+ @override
RenderInkFeatures createRenderObject(BuildContext context) => new RenderInkFeatures(color: color);
+ @override
void updateRenderObject(BuildContext context, RenderInkFeatures renderObject) {
renderObject.color = color;
}
@@ -328,6 +339,7 @@
void paintFeature(Canvas canvas, Matrix4 transform);
+ @override
String toString() => "$runtimeType@$hashCode";
}
@@ -371,6 +383,7 @@
Animation<int> _alpha;
AnimationController _alphaController;
+ @override
void confirm() {
int duration = (targetRadius / _kSplashConfirmedVelocity).floor();
_radiusController
@@ -379,6 +392,7 @@
_alphaController.forward();
}
+ @override
void cancel() {
_alphaController.forward();
}
@@ -388,12 +402,14 @@
dispose();
}
+ @override
void dispose() {
_radiusController.stop();
_alphaController.stop();
super.dispose();
}
+ @override
void paintFeature(Canvas canvas, Matrix4 transform) {
Paint paint = new Paint()..color = color.withAlpha(_alpha.value);
Point center = position;
@@ -440,8 +456,11 @@
).animate(_alphaController);
}
+ @override
Color get color => _color;
Color _color;
+
+ @override
void set color(Color value) {
if (value == _color)
return;
@@ -451,17 +470,20 @@
final BoxShape shape;
+ @override
bool get active => _active;
bool _active = true;
Animation<int> _alpha;
AnimationController _alphaController;
+ @override
void activate() {
_active = true;
_alphaController.forward();
}
+ @override
void deactivate() {
_active = false;
_alphaController.reverse();
@@ -472,6 +494,7 @@
dispose();
}
+ @override
void dispose() {
_alphaController.stop();
super.dispose();
@@ -484,6 +507,7 @@
canvas.drawCircle(rect.center, _kDefaultSplashRadius, paint);
}
+ @override
void paintFeature(Canvas canvas, Matrix4 transform) {
Paint paint = new Paint()..color = color.withAlpha(_alpha.value);
Offset originOffset = MatrixUtils.getAsTranslation(transform);
diff --git a/packages/flutter/lib/src/material/page.dart b/packages/flutter/lib/src/material/page.dart
index 303b0be..59cb5f8 100644
--- a/packages/flutter/lib/src/material/page.dart
+++ b/packages/flutter/lib/src/material/page.dart
@@ -23,6 +23,7 @@
end: Point.origin
);
+ @override
Widget build(BuildContext context) {
Point position = _position.evaluate(animation);
Matrix4 transform = new Matrix4.identity()
@@ -52,10 +53,16 @@
final WidgetBuilder builder;
+ @override
Duration get transitionDuration => kMaterialPageRouteTransitionDuration;
+
+ @override
Color get barrierColor => null;
+
+ @override
bool canTransitionFrom(TransitionRoute<dynamic> nextRoute) => false;
+ @override
Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> forwardAnimation) {
Widget result = builder(context);
assert(() {
@@ -67,6 +74,7 @@
return result;
}
+ @override
Widget buildTransitions(BuildContext context, Animation<double> animation, Animation<double> forwardAnimation, Widget child) {
return new _MaterialPageTransition(
animation: animation,
@@ -74,5 +82,6 @@
);
}
+ @override
String get debugLabel => '${super.debugLabel}(${settings.name})';
}
diff --git a/packages/flutter/lib/src/material/popup_menu.dart b/packages/flutter/lib/src/material/popup_menu.dart
index de732a6..7326e10 100644
--- a/packages/flutter/lib/src/material/popup_menu.dart
+++ b/packages/flutter/lib/src/material/popup_menu.dart
@@ -39,12 +39,15 @@
class PopupMenuDivider extends PopupMenuEntry<dynamic> {
PopupMenuDivider({ Key key, this.height: 16.0 }) : super(key: key);
+ @override
final double height;
+ @override
_PopupMenuDividerState createState() => new _PopupMenuDividerState();
}
class _PopupMenuDividerState extends State<PopupMenuDivider> {
+ @override
Widget build(BuildContext context) => new Divider(height: config.height);
}
@@ -56,12 +59,18 @@
this.child
}) : super(key: key);
+ @override
final T value;
+
+ @override
final bool enabled;
+
final Widget child;
+ @override
double get height => _kMenuItemHeight;
+ @override
_PopupMenuItemState<PopupMenuItem<T>> createState() => new _PopupMenuItemState<PopupMenuItem<T>>();
}
@@ -73,6 +82,7 @@
Navigator.pop(context, config.value);
}
+ @override
Widget build(BuildContext context) {
final ThemeData theme = Theme.of(context);
TextStyle style = theme.textTheme.subhead;
@@ -123,6 +133,7 @@
final bool checked;
+ @override
_CheckedPopupMenuItemState<T> createState() => new _CheckedPopupMenuItemState<T>();
}
@@ -131,6 +142,7 @@
AnimationController _controller;
Animation<double> get _opacity => _controller.view;
+ @override
void initState() {
super.initState();
_controller = new AnimationController(duration: _kFadeDuration)
@@ -138,6 +150,7 @@
..addListener(() => setState(() { /* animation changed */ }));
}
+ @override
void onTap() {
// This fades the checkmark in or out when tapped.
if (config.checked)
@@ -147,6 +160,7 @@
super.onTap();
}
+ @override
Widget buildChild() {
return new ListItem(
enabled: config.enabled,
@@ -167,6 +181,7 @@
final _PopupMenuRoute<T> route;
+ @override
Widget build(BuildContext context) {
double unit = 1.0 / (route.items.length + 1.5); // 1.0 for the width and 0.5 for the last item's fade.
List<Widget> children = <Widget>[];
@@ -239,6 +254,7 @@
final ModalPosition position;
final double selectedItemOffset;
+ @override
BoxConstraints getConstraintsForChild(BoxConstraints constraints) {
return new BoxConstraints(
minWidth: 0.0,
@@ -251,6 +267,7 @@
// Put the child wherever position specifies, so long as it will fit within the
// specified parent size padded (inset) by 8. If necessary, adjust the child's
// position so that it fits.
+ @override
Offset getPositionForChild(Size size, Size childSize) {
double x = position?.left
?? (position?.right != null ? size.width - (position.right + childSize.width) : _kMenuScreenPadding);
@@ -271,6 +288,7 @@
return new Offset(x, y);
}
+ @override
bool shouldRelayout(_PopupMenuRouteLayout oldDelegate) {
return position != oldDelegate.position;
}
@@ -290,8 +308,10 @@
final dynamic initialValue;
final int elevation;
+ @override
ModalPosition getPosition(BuildContext context) => null;
+ @override
Animation<double> createAnimation() {
return new CurvedAnimation(
parent: super.createAnimation(),
@@ -299,10 +319,16 @@
);
}
+ @override
Duration get transitionDuration => _kMenuDuration;
+
+ @override
bool get barrierDismissable => true;
+
+ @override
Color get barrierColor => null;
+ @override
Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> forwardAnimation) {
double selectedItemOffset;
if (initialValue != null) {
@@ -375,6 +401,7 @@
final int elevation;
final Widget child;
+ @override
_PopupMenuButtonState<T> createState() => new _PopupMenuButtonState<T>();
}
@@ -398,6 +425,7 @@
});
}
+ @override
Widget build(BuildContext context) {
if (config.child == null) {
return new IconButton(
diff --git a/packages/flutter/lib/src/material/progress_indicator.dart b/packages/flutter/lib/src/material/progress_indicator.dart
index 37bce7c..ec6da26 100644
--- a/packages/flutter/lib/src/material/progress_indicator.dart
+++ b/packages/flutter/lib/src/material/progress_indicator.dart
@@ -25,6 +25,7 @@
Color _getBackgroundColor(BuildContext context) => Theme.of(context).backgroundColor;
Color _getValueColor(BuildContext context) => Theme.of(context).primaryColor;
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('${(value.clamp(0.0, 1.0) * 100.0).toStringAsFixed(1)}%');
@@ -44,6 +45,7 @@
final double value;
final double animationValue;
+ @override
void paint(Canvas canvas, Size size) {
Paint paint = new Paint()
..color = backgroundColor
@@ -63,6 +65,7 @@
}
}
+ @override
bool shouldRepaint(_LinearProgressIndicatorPainter oldPainter) {
return oldPainter.backgroundColor != backgroundColor
|| oldPainter.valueColor != valueColor
@@ -77,6 +80,7 @@
double value
}) : super(key: key, value: value);
+ @override
_LinearProgressIndicatorState createState() => new _LinearProgressIndicatorState();
}
@@ -84,6 +88,7 @@
Animation<double> _animation;
AnimationController _controller;
+ @override
void initState() {
super.initState();
_controller = new AnimationController(
@@ -92,6 +97,7 @@
_animation = new CurvedAnimation(parent: _controller, curve: Curves.fastOutSlowIn);
}
+ @override
void dispose() {
_controller.stop();
super.dispose();
@@ -114,6 +120,7 @@
);
}
+ @override
Widget build(BuildContext context) {
if (config.value != null)
return _buildIndicator(context, _animation.value);
@@ -150,6 +157,7 @@
final int stepValue;
final double rotationValue;
+ @override
void paint(Canvas canvas, Size size) {
Paint paint = new Paint()
..color = valueColor
@@ -177,6 +185,7 @@
}
}
+ @override
bool shouldRepaint(_CircularProgressIndicatorPainter oldPainter) {
return oldPainter.valueColor != valueColor
|| oldPainter.value != value
@@ -193,6 +202,7 @@
double value
}) : super(key: key, value: value);
+ @override
_CircularProgressIndicatorState createState() => new _CircularProgressIndicatorState();
}
@@ -216,6 +226,7 @@
class _CircularProgressIndicatorState extends State<CircularProgressIndicator> {
AnimationController _controller;
+ @override
void initState() {
super.initState();
_controller = new AnimationController(
@@ -223,6 +234,7 @@
)..repeat();
}
+ @override
void dispose() {
_controller.stop();
super.dispose();
@@ -247,6 +259,7 @@
);
}
+ @override
Widget build(BuildContext context) {
if (config.value != null)
return _buildIndicator(context, 0.0, 0.0, 0, 0.0);
diff --git a/packages/flutter/lib/src/material/radio.dart b/packages/flutter/lib/src/material/radio.dart
index 83b4bd3..440e1b6 100644
--- a/packages/flutter/lib/src/material/radio.dart
+++ b/packages/flutter/lib/src/material/radio.dart
@@ -39,6 +39,7 @@
onChanged(value);
}
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context));
ThemeData themeData = Theme.of(context);
@@ -72,6 +73,7 @@
final Color activeColor;
final ValueChanged<bool> onChanged;
+ @override
_RenderRadio createRenderObject(BuildContext context) => new _RenderRadio(
value: selected,
activeColor: activeColor,
@@ -79,6 +81,7 @@
onChanged: onChanged
);
+ @override
void updateRenderObject(BuildContext context, _RenderRadio renderObject) {
renderObject
..value = selected
@@ -102,8 +105,10 @@
size: const Size(2 * kRadialReactionRadius, 2 * kRadialReactionRadius)
);
+ @override
bool get isInteractive => super.isInteractive && !value;
+ @override
void paint(PaintingContext context, Offset offset) {
final Canvas canvas = context.canvas;
diff --git a/packages/flutter/lib/src/material/raised_button.dart b/packages/flutter/lib/src/material/raised_button.dart
index 3c3decb..424f88d 100644
--- a/packages/flutter/lib/src/material/raised_button.dart
+++ b/packages/flutter/lib/src/material/raised_button.dart
@@ -57,11 +57,12 @@
final int highlightElevation;
final int disabledElevation;
+ @override
_RaisedButtonState createState() => new _RaisedButtonState();
}
class _RaisedButtonState extends MaterialButtonState<RaisedButton> {
-
+ @override
int get elevation {
if (config.enabled) {
if (highlight)
@@ -72,6 +73,7 @@
}
}
+ @override
Color getColor(BuildContext context) {
if (config.enabled) {
return config.color ?? Theme.of(context).buttonColor;
@@ -87,8 +89,8 @@
}
}
+ @override
ThemeBrightness getColorBrightness(BuildContext context) {
return config.colorBrightness ?? Theme.of(context).brightness;
}
-
}
diff --git a/packages/flutter/lib/src/material/scaffold.dart b/packages/flutter/lib/src/material/scaffold.dart
index 8cb699d..faf2cc8 100644
--- a/packages/flutter/lib/src/material/scaffold.dart
+++ b/packages/flutter/lib/src/material/scaffold.dart
@@ -20,9 +20,25 @@
const double _kFloatingActionButtonMargin = 16.0; // TODO(hmuller): should be device dependent
const Duration _kFloatingActionButtonSegue = const Duration(milliseconds: 400);
+/// The Scaffold's appbar is the toolbar, tabbar, and the "flexible space" that's
+/// stacked behind them. The Scaffold's appBarBehavior defines how the appbar
+/// responds to scrolling the application.
enum AppBarBehavior {
+ /// The tool bar's layout does not respond to scrolling.
anchor,
+
+ /// The tool bar's appearance and layout depend on the scrollOffset of the
+ /// Scrollable identified by the Scaffold's scrollableKey. With the scrollOffset
+ /// at 0.0, scrolling downwards causes the toolbar's flexible space to shrink,
+ /// and then the entire toolbar fade outs and scrolls off the top of the screen.
+ /// Scrolling upwards always causes the toolbar to reappear.
scroll,
+
+ /// The tool bar's appearance and layout depend on the scrollOffset of the
+ /// Scrollable identified by the Scaffold's scrollableKey. With the scrollOffset
+ /// at 0.0, Scrolling downwards causes the toolbar's flexible space to shrink.
+ /// Other than that, the toolbar remains anchored at the top.
+ under,
}
enum _ScaffoldSlot {
@@ -39,6 +55,7 @@
final EdgeInsets padding;
+ @override
void performLayout(Size size) {
BoxConstraints looseConstraints = new BoxConstraints.loose(size);
@@ -102,6 +119,7 @@
}
}
+ @override
bool shouldRelayout(_ScaffoldLayout oldDelegate) {
return padding != oldDelegate.padding;
}
@@ -117,6 +135,7 @@
final Widget child;
+ @override
_FloatingActionButtonTransitionState createState() => new _FloatingActionButtonTransitionState();
}
@@ -124,6 +143,7 @@
final AnimationController controller = new AnimationController(duration: _kFloatingActionButtonSegue);
Widget oldChild;
+ @override
void initState() {
super.initState();
controller.forward().then((_) {
@@ -131,11 +151,13 @@
});
}
+ @override
void dispose() {
controller.stop();
super.dispose();
}
+ @override
void didUpdateConfig(_FloatingActionButtonTransition oldConfig) {
if (Widget.canUpdate(oldConfig.child, config.child))
return;
@@ -147,6 +169,7 @@
});
}
+ @override
Widget build(BuildContext context) {
final List<Widget> children = new List<Widget>();
if (oldChild != null) {
@@ -192,7 +215,7 @@
this.appBarHeight
}) : super(key: key) {
assert((appBarBehavior == AppBarBehavior.scroll) ? scrollableKey != null : true);
- assert((appBarBehavior == AppBarBehavior.scroll) ? appBarHeight != null && appBarHeight > kAppBarHeight : true);
+ assert((appBarBehavior == AppBarBehavior.scroll) ? appBarHeight != null && appBarHeight > kToolBarHeight : true);
}
final AppBar appBar;
@@ -206,6 +229,7 @@
/// The state from the closest instance of this class that encloses the given context.
static ScaffoldState of(BuildContext context) => context.ancestorStateOfType(const TypeMatcher<ScaffoldState>());
+ @override
ScaffoldState createState() => new ScaffoldState();
}
@@ -347,6 +371,7 @@
// INTERNALS
+ @override
void initState() {
super.initState();
_appBarController = new AnimationController();
@@ -358,6 +383,7 @@
}
}
+ @override
void dispose() {
_appBarController.stop();
_snackBarController?.stop();
@@ -380,10 +406,10 @@
if (appBar == null)
return null;
EdgeInsets appBarPadding = new EdgeInsets.only(top: padding.top);
- Widget left = appBar.leading;
- if (left == null) {
+ Widget leading = appBar.leading;
+ if (leading == null) {
if (config.drawer != null) {
- left = new IconButton(
+ leading = new IconButton(
icon: Icons.menu,
onPressed: openDrawer,
tooltip: 'Open navigation menu' // TODO(ianh): Figure out how to localize this string
@@ -391,7 +417,7 @@
} else {
_shouldShowBackArrow ??= Navigator.canPop(context);
if (_shouldShowBackArrow) {
- left = new IconButton(
+ leading = new IconButton(
icon: Icons.arrow_back,
onPressed: () => Navigator.pop(context),
tooltip: 'Back' // TODO(ianh): Figure out how to localize this string
@@ -403,7 +429,7 @@
elevation: elevation ?? appBar.elevation ?? 4,
padding: appBarPadding,
foregroundOpacity: foregroundOpacity,
- left: left
+ leading: leading
);
}
@@ -430,36 +456,53 @@
));
}
+ Widget _buildAnchoredAppBar(double toolBarHeight, EdgeInsets toolBarPadding) {
+ // Drive _appBarController to the point where the flexible space has disappeared.
+ _appBarController.value = (appBarHeight - toolBarHeight) / appBarHeight;
+ return new SizedBox(
+ height: toolBarHeight,
+ child: _getModifiedAppBar(padding: toolBarPadding)
+ );
+ }
+
Widget _buildScrollableAppBar(BuildContext context) {
- final EdgeInsets appBarPadding = MediaQuery.of(context)?.padding ?? EdgeInsets.zero;
- final double appBarHeight = kAppBarHeight + appBarPadding.top;
+ final EdgeInsets toolBarPadding = MediaQuery.of(context)?.padding ?? EdgeInsets.zero;
+ final double toolBarHeight = kToolBarHeight + toolBarPadding.top;
Widget appBar;
- if (_scrollOffset <= appBarHeight && _scrollOffset >= appBarHeight - appBarHeight) {
- // scrolled to the top, only the app bar is (partially) visible
- final double height = math.max(_floatingAppBarHeight, appBarHeight - _scrollOffset);
- final double opacity = _appBarOpacity(1.0 - ((appBarHeight - height) / appBarHeight));
- _appBarController.value = (appBarHeight - height) / appBarHeight;
- appBar = new SizedBox(
- height: height,
- child: _getModifiedAppBar(padding: appBarPadding, foregroundOpacity: opacity)
- );
+ if (_scrollOffset <= appBarHeight && _scrollOffset >= appBarHeight - toolBarHeight) {
+ // scrolled to the top, only the toolbar is (partially) visible.
+ if (config.appBarBehavior == AppBarBehavior.under) {
+ appBar = _buildAnchoredAppBar(toolBarHeight, toolBarPadding);
+ } else {
+ final double height = math.max(_floatingAppBarHeight, appBarHeight - _scrollOffset);
+ final double opacity = _appBarOpacity(1.0 - ((toolBarHeight - height) / toolBarHeight));
+ _appBarController.value = (appBarHeight - height) / appBarHeight;
+ appBar = new SizedBox(
+ height: height,
+ child: _getModifiedAppBar(padding: toolBarPadding, foregroundOpacity: opacity)
+ );
+ }
} else if (_scrollOffset > appBarHeight) {
- // scrolled down, show the "floating" app bar
- _floatingAppBarHeight = (_floatingAppBarHeight + _scrollOffsetDelta).clamp(0.0, appBarHeight);
- final double appBarOpacity = _appBarOpacity(_floatingAppBarHeight / appBarHeight);
- _appBarController.value = (appBarHeight - _floatingAppBarHeight) / appBarHeight;
- appBar = new SizedBox(
- height: _floatingAppBarHeight,
- child: _getModifiedAppBar(padding: appBarPadding, foregroundOpacity: appBarOpacity)
- );
+ // scrolled past the entire app bar, maybe show the "floating" toolbar.
+ if (config.appBarBehavior == AppBarBehavior.under) {
+ appBar = _buildAnchoredAppBar(toolBarHeight, toolBarPadding);
+ } else {
+ _floatingAppBarHeight = (_floatingAppBarHeight + _scrollOffsetDelta).clamp(0.0, toolBarHeight);
+ final double toolBarOpacity = _appBarOpacity(_floatingAppBarHeight / toolBarHeight);
+ _appBarController.value = (appBarHeight - _floatingAppBarHeight) / appBarHeight;
+ appBar = new SizedBox(
+ height: _floatingAppBarHeight,
+ child: _getModifiedAppBar(padding: toolBarPadding, foregroundOpacity: toolBarOpacity)
+ );
+ }
} else {
// _scrollOffset < appBarHeight - appBarHeight, scrolled to the top, flexible space is visible
final double height = appBarHeight - _scrollOffset.clamp(0.0, appBarHeight);
_appBarController.value = (appBarHeight - height) / appBarHeight;
appBar = new SizedBox(
height: height,
- child: _getModifiedAppBar(padding: appBarPadding, elevation: 0)
+ child: _getModifiedAppBar(padding: toolBarPadding, elevation: 0)
);
_floatingAppBarHeight = 0.0;
}
@@ -467,11 +510,12 @@
return appBar;
}
+ @override
Widget build(BuildContext context) {
- EdgeInsets padding = MediaQuery.of(context)?.padding ?? EdgeInsets.zero;
+ final EdgeInsets padding = MediaQuery.of(context)?.padding ?? EdgeInsets.zero;
if (_snackBars.length > 0) {
- ModalRoute<dynamic> route = ModalRoute.of(context);
+ final ModalRoute<dynamic> route = ModalRoute.of(context);
if (route == null || route.isCurrent) {
if (_snackBarController.isCompleted && _snackBarTimer == null)
_snackBarTimer = new Timer(_snackBars.first._widget.duration, _hideSnackBar);
@@ -484,7 +528,7 @@
final List<LayoutId> children = new List<LayoutId>();
_addIfNonNull(children, config.body, _ScaffoldSlot.body);
if (config.appBarBehavior == AppBarBehavior.anchor) {
- Widget appBar = new ConstrainedBox(
+ final Widget appBar = new ConstrainedBox(
child: _getModifiedAppBar(padding: padding),
constraints: new BoxConstraints(maxHeight: config.appBarHeight ?? kExtendedAppBarHeight + padding.top)
);
@@ -494,7 +538,7 @@
if (_currentBottomSheet != null ||
(_dismissedBottomSheets != null && _dismissedBottomSheets.isNotEmpty)) {
- List<Widget> bottomSheets = <Widget>[];
+ final List<Widget> bottomSheets = <Widget>[];
if (_dismissedBottomSheets != null && _dismissedBottomSheets.isNotEmpty)
bottomSheets.addAll(_dismissedBottomSheets);
if (_currentBottomSheet != null)
@@ -510,7 +554,7 @@
_addIfNonNull(children, _snackBars.first._widget, _ScaffoldSlot.snackBar);
if (config.floatingActionButton != null) {
- Widget fab = new _FloatingActionButtonTransition(
+ final Widget fab = new _FloatingActionButtonTransition(
key: new ValueKey<Key>(config.floatingActionButton.key),
child: config.floatingActionButton
);
@@ -529,8 +573,7 @@
Widget application;
- if (config.appBarBehavior == AppBarBehavior.scroll) {
- double overScroll = _scrollOffset.clamp(double.NEGATIVE_INFINITY, 0.0);
+ if (config.appBarBehavior != AppBarBehavior.anchor) {
application = new NotificationListener<ScrollNotification>(
onNotification: _handleScrollNotification,
child: new Stack(
@@ -542,7 +585,7 @@
)
),
new Positioned(
- top: -overScroll,
+ top: 0.0,
left: 0.0,
right: 0.0,
child: _buildScrollableAppBar(context)
@@ -586,6 +629,7 @@
final VoidCallback onDismissed;
final WidgetBuilder builder;
+ @override
_PersistentBottomSheetState createState() => new _PersistentBottomSheetState();
}
@@ -594,17 +638,20 @@
// We take ownership of the animation controller given in the first configuration.
// We also share control of that animation with out BottomSheet widget.
+ @override
void initState() {
super.initState();
assert(config.animationController.status == AnimationStatus.forward);
config.animationController.addStatusListener(_handleStatusChange);
}
+ @override
void didUpdateConfig(_PersistentBottomSheet oldConfig) {
super.didUpdateConfig(oldConfig);
assert(config.animationController == oldConfig.animationController);
}
+ @override
void dispose() {
config.animationController.stop();
super.dispose();
@@ -619,6 +666,7 @@
config.onDismissed();
}
+ @override
Widget build(BuildContext context) {
return new AnimatedBuilder(
animation: config.animationController,
diff --git a/packages/flutter/lib/src/material/scrollbar_painter.dart b/packages/flutter/lib/src/material/scrollbar_painter.dart
index 4b89a46..5098a62 100644
--- a/packages/flutter/lib/src/material/scrollbar_painter.dart
+++ b/packages/flutter/lib/src/material/scrollbar_painter.dart
@@ -52,6 +52,7 @@
paintThumb(context, thumbOrigin & thumbSize);
}
+ @override
void paint(PaintingContext context, Offset offset) {
if (_alpha == 0)
return;
@@ -60,6 +61,7 @@
AnimationController _fade;
+ @override
Future<Null> scrollStarted() {
if (_fade == null) {
_fade = new AnimationController(duration: _kScrollbarThumbFadeDuration);
@@ -72,10 +74,12 @@
return _fade.forward();
}
+ @override
Future<Null> scrollEnded() {
return _fade.reverse();
}
+ @override
void detach() {
super.detach();
_fade?.stop();
diff --git a/packages/flutter/lib/src/material/slider.dart b/packages/flutter/lib/src/material/slider.dart
index d503380..252e75d 100644
--- a/packages/flutter/lib/src/material/slider.dart
+++ b/packages/flutter/lib/src/material/slider.dart
@@ -37,6 +37,7 @@
onChanged(value * (max - min) + min);
}
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context));
return new _SliderRenderObjectWidget(
@@ -55,12 +56,14 @@
final Color activeColor;
final ValueChanged<double> onChanged;
+ @override
_RenderSlider createRenderObject(BuildContext context) => new _RenderSlider(
value: value,
activeColor: activeColor,
onChanged: onChanged
);
+ @override
void updateRenderObject(BuildContext context, _RenderSlider renderObject) {
renderObject
..value = value
@@ -155,13 +158,16 @@
}
}
+ @override
bool hitTestSelf(Point position) => true;
+ @override
void handleEvent(PointerEvent event, BoxHitTestEntry entry) {
if (event is PointerDownEvent && onChanged != null)
_drag.addPointer(event);
}
+ @override
void paint(PaintingContext context, Offset offset) {
final Canvas canvas = context.canvas;
diff --git a/packages/flutter/lib/src/material/snack_bar.dart b/packages/flutter/lib/src/material/snack_bar.dart
index 8009da4..3697768 100644
--- a/packages/flutter/lib/src/material/snack_bar.dart
+++ b/packages/flutter/lib/src/material/snack_bar.dart
@@ -49,6 +49,7 @@
/// The callback to be invoked when the button is pressed. Must be non-null.
final VoidCallback onPressed;
+ @override
Widget build(BuildContext context) {
return new Container(
margin: const EdgeInsets.only(left: _kSideMargins),
@@ -86,6 +87,7 @@
final Duration duration;
final Animation<double> animation;
+ @override
Widget build(BuildContext context) {
assert(animation != null);
List<Widget> children = <Widget>[
diff --git a/packages/flutter/lib/src/material/switch.dart b/packages/flutter/lib/src/material/switch.dart
index d6d3185..72a94fc 100644
--- a/packages/flutter/lib/src/material/switch.dart
+++ b/packages/flutter/lib/src/material/switch.dart
@@ -21,6 +21,7 @@
final Color activeColor;
final ValueChanged<bool> onChanged;
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context));
ThemeData themeData = Theme.of(context);
@@ -68,6 +69,7 @@
final Color inactiveTrackColor;
final ValueChanged<bool> onChanged;
+ @override
_RenderSwitch createRenderObject(BuildContext context) => new _RenderSwitch(
value: value,
activeColor: activeColor,
@@ -77,6 +79,7 @@
onChanged: onChanged
);
+ @override
void updateRenderObject(BuildContext context, _RenderSwitch renderObject) {
renderObject
..value = value
@@ -165,6 +168,7 @@
reactionController.reverse();
}
+ @override
void handleEvent(PointerEvent event, BoxHitTestEntry entry) {
if (event is PointerDownEvent && onChanged != null)
_drag.addPointer(event);
@@ -174,6 +178,7 @@
Color _cachedThumbColor;
BoxPainter _thumbPainter;
+ @override
void paint(PaintingContext context, Offset offset) {
final Canvas canvas = context.canvas;
diff --git a/packages/flutter/lib/src/material/tabs.dart b/packages/flutter/lib/src/material/tabs.dart
index 3ed5239..c082a18 100644
--- a/packages/flutter/lib/src/material/tabs.dart
+++ b/packages/flutter/lib/src/material/tabs.dart
@@ -89,11 +89,13 @@
}
}
+ @override
void setupParentData(RenderBox child) {
if (child.parentData is! _TabBarParentData)
child.parentData = new _TabBarParentData();
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
BoxConstraints widthConstraints =
new BoxConstraints(maxWidth: constraints.maxWidth, maxHeight: constraints.maxHeight);
@@ -109,6 +111,7 @@
return constraints.constrainWidth(width);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
BoxConstraints widthConstraints =
new BoxConstraints(maxWidth: constraints.maxWidth, maxHeight: constraints.maxHeight);
@@ -129,8 +132,10 @@
double _getIntrinsicHeight(BoxConstraints constraints) => constraints.constrainHeight(_tabBarHeight);
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) => _getIntrinsicHeight(constraints);
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) => _getIntrinsicHeight(constraints);
void layoutFixedWidthTabs() {
@@ -194,6 +199,7 @@
}
}
+ @override
void performLayout() {
assert(constraints is BoxConstraints);
if (childCount == 0)
@@ -211,6 +217,7 @@
reportLayoutChangedIfNeeded();
}
+ @override
bool hitTestChildren(HitTestResult result, { Point position }) {
return defaultHitTestChildren(result, position: position);
}
@@ -233,6 +240,7 @@
canvas.drawRect((point + offset) & size, new Paint()..color = indicatorColor);
}
+ @override
void paint(PaintingContext context, Offset offset) {
int index = 0;
RenderBox child = firstChild;
@@ -265,12 +273,14 @@
final bool isScrollable;
final TabLayoutChanged onLayoutChanged;
+ @override
_RenderTabBar createRenderObject(BuildContext context) {
_RenderTabBar result = new _RenderTabBar(onLayoutChanged);
updateRenderObject(context, result);
return result;
}
+ @override
void updateRenderObject(BuildContext context, _RenderTabBar renderObject) {
renderObject
..selectedIndex = selectedIndex
@@ -330,6 +340,7 @@
}
}
+ @override
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context));
Widget labelContent;
@@ -363,6 +374,7 @@
);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('$label');
@@ -372,8 +384,10 @@
class _TabsScrollBehavior extends BoundedBehavior {
_TabsScrollBehavior();
+ @override
bool isScrollable = true;
+ @override
Simulation createScrollSimulation(double position, double velocity) {
if (!isScrollable)
return null;
@@ -384,6 +398,7 @@
);
}
+ @override
double applyCurve(double scrollOffset, double scrollDelta) {
return (isScrollable) ? super.applyCurve(scrollOffset, scrollDelta) : 0.0;
}
@@ -414,6 +429,7 @@
final ValueChanged<T> onChanged;
final Widget child;
+ @override
TabBarSelectionState<T> createState() => new TabBarSelectionState<T>();
static TabBarSelectionState<dynamic/*=T*/> of/*<T>*/(BuildContext context) {
@@ -436,6 +452,7 @@
_valueToIndex[value] = index++;
}
+ @override
void initState() {
super.initState();
_value = config.value ?? PageStorage.of(context)?.readState(context) ?? values.first;
@@ -449,6 +466,7 @@
_initValueToIndex();
}
+ @override
void didUpdateConfig(TabBarSelection<T> oldConfig) {
super.didUpdateConfig(oldConfig);
if (values != oldConfig.values)
@@ -532,6 +550,7 @@
..removeListener(listener.handleProgressChange);
}
+ @override
void deactivate() {
_controller.stop();
for (TabBarSelectionAnimationListener listener in _animationListeners.toList()) {
@@ -542,6 +561,7 @@
_writeValue();
}
+ @override
Widget build(BuildContext context) {
return config.child;
}
@@ -564,6 +584,7 @@
final Map<T, TabLabel> labels;
final bool isScrollable;
+ @override
_TabBarState<T> createState() => new _TabBarState<T>();
}
@@ -578,27 +599,32 @@
_selection?.registerAnimationListener(this);
}
+ @override
void initState() {
super.initState();
scrollBehavior.isScrollable = config.isScrollable;
_initSelection(TabBarSelection.of(context));
}
+ @override
void didUpdateConfig(TabBar<T> oldConfig) {
super.didUpdateConfig(oldConfig);
if (!config.isScrollable)
scrollTo(0.0);
}
+ @override
void dispose() {
_selection?.unregisterAnimationListener(this);
super.dispose();
}
+ @override
void handleSelectionDeactivate() {
_selection = null;
}
+ @override
void handleStatusChange(AnimationStatus status) {
if (config.labels.length == 0)
return;
@@ -614,6 +640,7 @@
}
}
+ @override
void handleProgressChange() {
if (config.labels.length == 0 || _selection == null)
return;
@@ -666,7 +693,10 @@
return new Rect.fromLTRB(r.left, r.bottom, r.right, r.bottom + _kTabIndicatorHeight);
}
+ @override
ScrollBehavior<double, double> createScrollBehavior() => new _TabsScrollBehavior();
+
+ @override
_TabsScrollBehavior get scrollBehavior => super.scrollBehavior;
double _centeredTabScrollOffset(int tabIndex) {
@@ -731,6 +761,7 @@
return scrollOffsetToPixelDelta(scrollOffset);
}
+ @override
Widget buildContent(BuildContext context) {
TabBarSelectionState<T> newSelection = TabBarSelection.of(context);
if (_selection != newSelection)
@@ -808,6 +839,7 @@
assert(children.length > 1);
}
+ @override
_TabBarViewState<T> createState() => new _TabBarViewState<T>();
}
@@ -820,6 +852,7 @@
BoundedBehavior _boundedBehavior;
+ @override
ExtentScrollBehavior get scrollBehavior {
_boundedBehavior ??= new BoundedBehavior();
return _boundedBehavior;
@@ -833,22 +866,26 @@
}
}
+ @override
void initState() {
super.initState();
_initSelection(TabBarSelection.of(context));
}
+ @override
void didUpdateConfig(TabBarView<T> oldConfig) {
super.didUpdateConfig(oldConfig);
if (_selection != null && config.children != oldConfig.children)
_updateItemsForSelectedIndex(_selection.index);
}
+ @override
void dispose() {
_selection?.unregisterAnimationListener(this);
super.dispose();
}
+ @override
void handleSelectionDeactivate() {
_selection = null;
}
@@ -888,9 +925,11 @@
_updateScrollBehaviorForSelectedIndex(selectedIndex);
}
+ @override
void handleStatusChange(AnimationStatus status) {
}
+ @override
void handleProgressChange() {
if (_selection == null || !_selection.valueIsChanging)
return;
@@ -918,6 +957,7 @@
}
}
+ @override
void dispatchOnScroll() {
if (_selection == null || _selection.valueIsChanging)
return;
@@ -931,6 +971,7 @@
controller.value = scrollOffset / 2.0;
}
+ @override
Future<Null> fling(double scrollVelocity) {
if (_selection == null || _selection.valueIsChanging)
return new Future<Null>.value();
@@ -955,6 +996,7 @@
return settleScrollOffset();
}
+ @override
Widget buildContent(BuildContext context) {
TabBarSelectionState<T> newSelection = TabBarSelection.of(context);
if (_selection != newSelection)
@@ -997,6 +1039,7 @@
);
}
+ @override
Widget build(BuildContext context) {
final TabBarSelectionState<T> selection = TabBarSelection.of(context);
final Color color = Theme.of(context).accentColor;
diff --git a/packages/flutter/lib/src/material/theme.dart b/packages/flutter/lib/src/material/theme.dart
index f3c9efe..45a8eb6 100644
--- a/packages/flutter/lib/src/material/theme.dart
+++ b/packages/flutter/lib/src/material/theme.dart
@@ -34,8 +34,10 @@
return theme?.data ?? _kFallbackTheme;
}
+ @override
bool updateShouldNotify(Theme old) => data != old.data;
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('$data');
@@ -46,6 +48,7 @@
class ThemeDataTween extends Tween<ThemeData> {
ThemeDataTween({ ThemeData begin, ThemeData end }) : super(begin: begin, end: end);
+ @override
ThemeData lerp(double t) => ThemeData.lerp(begin, end, t);
}
@@ -67,18 +70,21 @@
final Widget child;
+ @override
_AnimatedThemeState createState() => new _AnimatedThemeState();
}
class _AnimatedThemeState extends AnimatedWidgetBaseState<AnimatedTheme> {
ThemeDataTween _data;
+ @override
void forEachTween(TweenVisitor<dynamic> visitor) {
// TODO(ianh): Use constructor tear-offs when it becomes possible
_data = visitor(_data, config.data, (dynamic value) => new ThemeDataTween(begin: value));
assert(_data != null);
}
+ @override
Widget build(BuildContext context) {
return new Theme(
child: config.child,
@@ -86,6 +92,7 @@
);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (_data != null)
diff --git a/packages/flutter/lib/src/material/theme_data.dart b/packages/flutter/lib/src/material/theme_data.dart
index 6490dd1..8e5b258 100644
--- a/packages/flutter/lib/src/material/theme_data.dart
+++ b/packages/flutter/lib/src/material/theme_data.dart
@@ -241,6 +241,7 @@
);
}
+ @override
bool operator==(Object other) {
if (other.runtimeType != runtimeType)
return false;
@@ -268,6 +269,8 @@
(otherData.primaryTextTheme == primaryTextTheme) &&
(otherData.primaryIconTheme == primaryIconTheme);
}
+
+ @override
int get hashCode {
return hashValues(
brightness,
@@ -297,5 +300,6 @@
);
}
+ @override
String toString() => '$runtimeType($brightness $primaryColor etc...)';
}
diff --git a/packages/flutter/lib/src/material/time_picker.dart b/packages/flutter/lib/src/material/time_picker.dart
index bd37553..18edbbc 100644
--- a/packages/flutter/lib/src/material/time_picker.dart
+++ b/packages/flutter/lib/src/material/time_picker.dart
@@ -73,6 +73,7 @@
/// The hour at which the current period starts.
int get periodOffset => period == DayPeriod.am ? 0 : _kHoursPerPeriod;
+ @override
bool operator ==(dynamic other) {
if (other is! TimeOfDay)
return false;
@@ -81,9 +82,11 @@
&& typedOther.minute == minute;
}
+ @override
int get hashCode => hashValues(hour, minute);
// TODO(ianh): Localize.
+ @override
String toString() => '$hourOfPeriodLabel:$minuteLabel $periodLabel';
}
@@ -100,6 +103,7 @@
final TimeOfDay selectedTime;
final ValueChanged<TimeOfDay> onChanged;
+ @override
_TimePickerState createState() => new _TimePickerState();
}
@@ -113,6 +117,7 @@
});
}
+ @override
Widget build(BuildContext context) {
Widget header = new _TimePickerHeader(
selectedTime: config.selectedTime,
@@ -167,6 +172,7 @@
onChanged(selectedTime.replacing(hour: newHour));
}
+ @override
Widget build(BuildContext context) {
ThemeData theme = Theme.of(context);
TextTheme headerTheme = theme.primaryTextTheme;
@@ -274,6 +280,7 @@
final Color primaryColor;
final double theta;
+ @override
void paint(Canvas canvas, Size size) {
double radius = size.shortestSide / 2.0;
Offset center = new Offset(size.width / 2.0, size.height / 2.0);
@@ -305,6 +312,7 @@
}
}
+ @override
bool shouldRepaint(_DialPainter oldPainter) {
return oldPainter.labels != labels
|| oldPainter.primaryColor != primaryColor
@@ -325,10 +333,12 @@
final _TimePickerMode mode;
final ValueChanged<TimeOfDay> onChanged;
+ @override
_DialState createState() => new _DialState();
}
class _DialState extends State<_Dial> {
+ @override
void initState() {
super.initState();
_thetaController = new AnimationController(duration: _kDialAnimateDuration);
@@ -339,6 +349,7 @@
))..addListener(() => setState(() { }));
}
+ @override
void didUpdateConfig(_Dial oldConfig) {
if (config.mode != oldConfig.mode && !_dragging)
_animateTo(_getThetaForTime(config.selectedTime));
@@ -434,6 +445,7 @@
final List<TextPainter> _hours = _initHours();
final List<TextPainter> _minutes = _initMinutes();
+ @override
Widget build(BuildContext context) {
return new GestureDetector(
onPanStart: _handlePanStart,
diff --git a/packages/flutter/lib/src/material/time_picker_dialog.dart b/packages/flutter/lib/src/material/time_picker_dialog.dart
index b026dfd..3e038b3 100644
--- a/packages/flutter/lib/src/material/time_picker_dialog.dart
+++ b/packages/flutter/lib/src/material/time_picker_dialog.dart
@@ -18,10 +18,12 @@
final TimeOfDay initialTime;
+ @override
_TimePickerDialogState createState() => new _TimePickerDialogState();
}
class _TimePickerDialogState extends State<_TimePickerDialog> {
+ @override
void initState() {
super.initState();
_selectedTime = config.initialTime;
@@ -43,6 +45,7 @@
Navigator.pop(context, _selectedTime);
}
+ @override
Widget build(BuildContext context) {
return new Dialog(
content: new TimePicker(
diff --git a/packages/flutter/lib/src/material/toggleable.dart b/packages/flutter/lib/src/material/toggleable.dart
index b48cd52..1260701 100644
--- a/packages/flutter/lib/src/material/toggleable.dart
+++ b/packages/flutter/lib/src/material/toggleable.dart
@@ -148,8 +148,10 @@
_reactionController.reverse();
}
+ @override
bool hitTestSelf(Point position) => true;
+ @override
void handleEvent(PointerEvent event, BoxHitTestEntry entry) {
if (event is PointerDownEvent && isInteractive)
_tap.addPointer(event);
@@ -163,7 +165,10 @@
}
}
+ @override
bool get hasSemantics => isInteractive;
+
+ @override
Iterable<SemanticAnnotator> getSemanticAnnotators() sync* {
yield (SemanticsNode semantics) {
semantics.hasCheckedState = true;
@@ -171,11 +176,22 @@
semantics.canBeTapped = isInteractive;
};
}
+
+ @override
void handleSemanticTap() => _handleTap();
+ @override
void handleSemanticLongPress() { }
+
+ @override
void handleSemanticScrollLeft() { }
+
+ @override
void handleSemanticScrollRight() { }
+
+ @override
void handleSemanticScrollUp() { }
+
+ @override
void handleSemanticScrollDown() { }
}
diff --git a/packages/flutter/lib/src/material/tooltip.dart b/packages/flutter/lib/src/material/tooltip.dart
index 520ef67..fe7a3c5 100644
--- a/packages/flutter/lib/src/material/tooltip.dart
+++ b/packages/flutter/lib/src/material/tooltip.dart
@@ -64,8 +64,10 @@
final Duration showDuration;
final Widget child;
+ @override
_TooltipState createState() => new _TooltipState();
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('"$message"');
@@ -80,6 +82,7 @@
OverlayEntry _entry;
Timer _timer;
+ @override
void initState() {
super.initState();
_controller = new AnimationController(duration: config.fadeDuration)
@@ -102,6 +105,7 @@
});
}
+ @override
void didUpdateConfig(Tooltip oldConfig) {
super.didUpdateConfig(oldConfig);
if (config.fadeDuration != oldConfig.fadeDuration)
@@ -169,12 +173,14 @@
_controller.reverse();
}
+ @override
void deactivate() {
if (_entry != null)
hideTooltip();
super.deactivate();
}
+ @override
Widget build(BuildContext context) {
assert(Overlay.of(context, debugRequiredFor: config) != null);
return new GestureDetector(
@@ -201,8 +207,10 @@
final EdgeInsets screenEdgeMargin;
final bool preferBelow;
+ @override
BoxConstraints getConstraintsForChild(BoxConstraints constraints) => constraints.loosen();
+ @override
Offset getPositionForChild(Size size, Size childSize) {
// VERTICAL DIRECTION
final bool fitsBelow = target.y + verticalOffset + childSize.height <= size.height - screenEdgeMargin.bottom;
@@ -226,6 +234,7 @@
return new Offset(x, y);
}
+ @override
bool shouldRelayout(_TooltipPositionDelegate oldDelegate) {
return target != target
|| verticalOffset != verticalOffset
@@ -264,6 +273,7 @@
final EdgeInsets screenEdgeMargin;
final bool preferBelow;
+ @override
Widget build(BuildContext context) {
return new Positioned(
top: 0.0,
diff --git a/packages/flutter/lib/src/material/two_level_list.dart b/packages/flutter/lib/src/material/two_level_list.dart
index b19e357..e8946c4 100644
--- a/packages/flutter/lib/src/material/two_level_list.dart
+++ b/packages/flutter/lib/src/material/two_level_list.dart
@@ -32,6 +32,7 @@
final GestureTapCallback onTap;
final GestureLongPressCallback onLongPress;
+ @override
Widget build(BuildContext context) {
final TwoLevelList parentList = context.ancestorWidgetOfExactType(TwoLevelList);
assert(parentList != null);
@@ -50,12 +51,13 @@
}
class TwoLevelSublist extends StatefulWidget {
- TwoLevelSublist({ Key key, this.left, this.center, this.children }) : super(key: key);
+ TwoLevelSublist({ Key key, this.leading, this.title, this.children }) : super(key: key);
- final Widget left;
- final Widget center;
+ final Widget leading;
+ final Widget title;
final List<Widget> children;
+ @override
_TwoLevelSublistState createState() => new _TwoLevelSublistState();
}
@@ -70,6 +72,7 @@
bool _isExpanded = false;
+ @override
void initState() {
super.initState();
_controller = new AnimationController(duration: _kExpand);
@@ -108,10 +111,10 @@
children: <Widget>[
new TwoLevelListItem(
onTap: _handleOnTap,
- leading: config.left,
+ leading: config.leading,
title: new DefaultTextStyle(
style: Theme.of(context).textTheme.subhead.copyWith(color: _headerColor.evaluate(_easeInAnimation)),
- child: config.center
+ child: config.title
),
trailing: new RotationTransition(
turns: _iconTurns,
@@ -132,6 +135,7 @@
);
}
+ @override
Widget build(BuildContext context) {
final ThemeData theme = Theme.of(context);
_borderColor.end = theme.dividerColor;
@@ -155,5 +159,6 @@
final List<Widget> items;
final MaterialListType type;
+ @override
Widget build(BuildContext context) => new Block(children: items);
}
diff --git a/packages/flutter/lib/src/painting/box_painter.dart b/packages/flutter/lib/src/painting/box_painter.dart
index 13a3946..4b382a7 100644
--- a/packages/flutter/lib/src/painting/box_painter.dart
+++ b/packages/flutter/lib/src/painting/box_painter.dart
@@ -48,6 +48,7 @@
);
}
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -58,8 +59,10 @@
width == typedOther.width;
}
+ @override
int get hashCode => hashValues(color, width);
+ @override
String toString() => 'BorderSide($color, $width)';
}
@@ -122,6 +125,7 @@
);
}
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -134,8 +138,10 @@
left == typedOther.left;
}
+ @override
int get hashCode => hashValues(top, right, bottom, left);
+ @override
String toString() => 'Border($top, $right, $bottom, $left)';
}
@@ -218,6 +224,7 @@
return result;
}
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -230,8 +237,10 @@
spreadRadius == typedOther.spreadRadius;
}
+ @override
int get hashCode => hashValues(color, offset, blurRadius, spreadRadius);
+ @override
String toString() => 'BoxShadow($color, $offset, $blurRadius, $spreadRadius)';
}
@@ -287,6 +296,7 @@
/// How this gradient should tile the plane.
final TileMode tileMode;
+ @override
Shader createShader(Rect rect) {
return new ui.Gradient.linear(
<Point>[_offsetToPoint(begin, rect), _offsetToPoint(end, rect)],
@@ -294,6 +304,7 @@
);
}
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -325,8 +336,10 @@
return true;
}
+ @override
int get hashCode => hashValues(begin, end, tileMode, hashList(colors), hashList(stops));
+ @override
String toString() {
return 'LinearGradient($begin, $end, $colors, $stops, $tileMode)';
}
@@ -373,6 +386,7 @@
/// How this gradient should tile the plane.
final TileMode tileMode;
+ @override
Shader createShader(Rect rect) {
return new ui.Gradient.radial(
_offsetToPoint(center, rect),
@@ -381,6 +395,7 @@
);
}
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -412,8 +427,10 @@
return true;
}
+ @override
int get hashCode => hashValues(center, radius, tileMode, hashList(colors), hashList(stops));
+ @override
String toString() {
return 'RadialGradient($center, $radius, $colors, $stops, $tileMode)';
}
@@ -595,9 +612,12 @@
/// FractionalOffset(0.0, 1.0) represents the bottom left of the Size,
class FractionalOffset {
const FractionalOffset(this.dx, this.dy);
+
final double dx;
final double dy;
+
static const FractionalOffset zero = const FractionalOffset(0.0, 0.0);
+
FractionalOffset operator -() {
return new FractionalOffset(-dx, -dy);
}
@@ -625,6 +645,8 @@
Offset alongSize(Size other) {
return new Offset(dx * other.width, dy * other.height);
}
+
+ @override
bool operator ==(dynamic other) {
if (other is! FractionalOffset)
return false;
@@ -632,6 +654,8 @@
return dx == typedOther.dx &&
dy == typedOther.dy;
}
+
+ @override
int get hashCode => hashValues(dx, dy);
static FractionalOffset lerp(FractionalOffset a, FractionalOffset b, double t) {
if (a == null && b == null)
@@ -642,6 +666,8 @@
return new FractionalOffset(b.dx * (1.0 - t), b.dy * (1.0 - t));
return new FractionalOffset(ui.lerpDouble(a.dx, b.dx, t), ui.lerpDouble(a.dy, b.dy, t));
}
+
+ @override
String toString() => '$runtimeType($dx, $dy)';
}
@@ -719,6 +745,7 @@
listener();
}
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -733,8 +760,10 @@
_imageResource == typedOther._imageResource;
}
+ @override
int get hashCode => hashValues(fit, repeat, centerSlice, colorFilter, alignment, _imageResource);
+ @override
String toString() => 'BackgroundImage($fit, $repeat)';
}
@@ -764,6 +793,7 @@
this.shape: BoxShape.rectangle
});
+ @override
bool debugAssertValid() {
assert(shape != BoxShape.circle ||
borderRadius == null); // Can't have a border radius if you're a circle.
@@ -797,6 +827,7 @@
final BoxShape shape;
/// The inset space occupied by the border.
+ @override
EdgeInsets get padding => border?.dimensions;
/// Returns a new box decoration that is scaled by the given factor.
@@ -835,18 +866,21 @@
);
}
+ @override
BoxDecoration lerpFrom(Decoration a, double t) {
if (a is! BoxDecoration)
return BoxDecoration.lerp(null, this, t);
return BoxDecoration.lerp(a, this, t);
}
+ @override
BoxDecoration lerpTo(Decoration b, double t) {
if (b is! BoxDecoration)
return BoxDecoration.lerp(this, null, t);
return BoxDecoration.lerp(this, b, t);
}
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -862,6 +896,7 @@
shape == typedOther.shape;
}
+ @override
int get hashCode {
return hashValues(
backgroundColor,
@@ -877,6 +912,7 @@
/// Stringifies the BoxDecoration. By default, the output will be on one line.
/// If the method is passed a non-empty string argument, then the output will
/// span multiple lines, each prefixed by that argument.
+ @override
String toString([String prefix = '']) {
List<String> result = <String>[];
if (backgroundColor != null)
@@ -900,11 +936,15 @@
return result.join('\n');
}
+ @override
bool get needsListeners => backgroundImage != null;
+ @override
void addChangeListener(VoidCallback listener) {
backgroundImage?._addChangeListener(listener);
}
+
+ @override
void removeChangeListener(VoidCallback listener) {
backgroundImage?._removeChangeListener(listener);
}
@@ -917,6 +957,7 @@
return borderRadius > shortestSide ? shortestSide : borderRadius;
}
+ @override
bool hitTest(Size size, Point position) {
assert(shape != null);
assert((Point.origin & size).contains(position));
@@ -935,6 +976,7 @@
}
}
+ @override
_BoxDecorationPainter createBoxPainter() => new _BoxDecorationPainter(this);
}
@@ -1136,6 +1178,7 @@
}
/// Paint the box decoration into the given location on the given canvas
+ @override
void paint(Canvas canvas, Rect rect) {
_paintShadows(canvas, rect);
_paintBackgroundColor(canvas, rect);
diff --git a/packages/flutter/lib/src/painting/colors.dart b/packages/flutter/lib/src/painting/colors.dart
index 66b2042..0aee048 100644
--- a/packages/flutter/lib/src/painting/colors.dart
+++ b/packages/flutter/lib/src/painting/colors.dart
@@ -101,6 +101,7 @@
);
}
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -113,7 +114,9 @@
&& typedOther.value == value;
}
+ @override
int get hashCode => hashValues(alpha, hue, saturation, value);
+ @override
String toString() => "HSVColor($alpha, $hue, $saturation, $value)";
}
diff --git a/packages/flutter/lib/src/painting/decoration.dart b/packages/flutter/lib/src/painting/decoration.dart
index 8600aa6..7865343 100644
--- a/packages/flutter/lib/src/painting/decoration.dart
+++ b/packages/flutter/lib/src/painting/decoration.dart
@@ -20,6 +20,8 @@
void addChangeListener(VoidCallback listener) { assert(false); }
void removeChangeListener(VoidCallback listener) { assert(false); }
BoxPainter createBoxPainter();
+
+ @override
String toString([String prefix = '']) => '$prefix$runtimeType';
}
diff --git a/packages/flutter/lib/src/painting/edge_insets.dart b/packages/flutter/lib/src/painting/edge_insets.dart
index 767ea68..b3c914c 100644
--- a/packages/flutter/lib/src/painting/edge_insets.dart
+++ b/packages/flutter/lib/src/painting/edge_insets.dart
@@ -135,6 +135,7 @@
/// An EdgeInsets with zero offsets in each direction.
static const EdgeInsets zero = const EdgeInsets.TRBL(0.0, 0.0, 0.0, 0.0);
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -147,7 +148,9 @@
left == typedOther.left;
}
+ @override
int get hashCode => hashValues(top, left, bottom, right);
+ @override
String toString() => "EdgeInsets($top, $right, $bottom, $left)";
}
diff --git a/packages/flutter/lib/src/painting/text_editing.dart b/packages/flutter/lib/src/painting/text_editing.dart
index e1c50dd..8776902 100644
--- a/packages/flutter/lib/src/painting/text_editing.dart
+++ b/packages/flutter/lib/src/painting/text_editing.dart
@@ -51,6 +51,7 @@
return text.substring(start, end);
}
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -61,11 +62,13 @@
&& typedOther.end == end;
}
+ @override
int get hashCode => hashValues(
start.hashCode,
end.hashCode
);
+ @override
String toString() => 'TextRange(start: $start, end: $end)';
}
@@ -136,10 +139,12 @@
/// Might be larger than, smaller than, or equal to base.
TextPosition get extent => new TextPosition(offset: extentOffset, affinity: affinity);
+ @override
String toString() {
return '$runtimeType(baseOffset: $baseOffset, extentOffset: $extentOffset, affinity: $affinity, isDirectional: $isDirectional)';
}
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -152,6 +157,7 @@
&& typedOther.isDirectional == isDirectional;
}
+ @override
int get hashCode => hashValues(
baseOffset.hashCode,
extentOffset.hashCode,
diff --git a/packages/flutter/lib/src/painting/text_painter.dart b/packages/flutter/lib/src/painting/text_painter.dart
index 248ef9c..f42390c 100644
--- a/packages/flutter/lib/src/painting/text_painter.dart
+++ b/packages/flutter/lib/src/painting/text_painter.dart
@@ -113,6 +113,7 @@
return buffer.toString();
}
+ @override
String toString([String prefix = '']) {
StringBuffer buffer = new StringBuffer();
buffer.writeln('$prefix$runtimeType:');
@@ -158,6 +159,7 @@
return true;
}
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -169,6 +171,8 @@
&& typedOther.recognizer == recognizer
&& _deepEquals(typedOther.children, children);
}
+
+ @override
int get hashCode => hashValues(style, text, recognizer, hashList(children));
}
diff --git a/packages/flutter/lib/src/painting/text_style.dart b/packages/flutter/lib/src/painting/text_style.dart
index b832214..8f28071 100644
--- a/packages/flutter/lib/src/painting/text_style.dart
+++ b/packages/flutter/lib/src/painting/text_style.dart
@@ -176,6 +176,7 @@
);
}
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -198,6 +199,7 @@
decorationStyle == typedOther.decorationStyle;
}
+ @override
int get hashCode {
return hashValues(
inherit,
@@ -217,6 +219,7 @@
);
}
+ @override
String toString([String prefix = '']) {
List<String> result = <String>[];
result.add('${prefix}inherit: $inherit');
diff --git a/packages/flutter/lib/src/rendering/auto_layout.dart b/packages/flutter/lib/src/rendering/auto_layout.dart
index d1aff44..fd8793f 100644
--- a/packages/flutter/lib/src/rendering/auto_layout.dart
+++ b/packages/flutter/lib/src/rendering/auto_layout.dart
@@ -179,6 +179,7 @@
_explicitConstraints.clear();
}
+ @override
void adoptChild(RenderObject child) {
// Make sure to call super first to setup the parent data
super.adoptChild(child);
@@ -187,6 +188,7 @@
assert(child.parentData == childParentData);
}
+ @override
void dropChild(RenderObject child) {
final AutoLayoutParentData childParentData = child.parentData;
childParentData._removeImplicitConstraints();
@@ -194,19 +196,23 @@
super.dropChild(child);
}
+ @override
void setupParentData(RenderObject child) {
if (child.parentData is! AutoLayoutParentData)
child.parentData = new AutoLayoutParentData(child);
}
+ @override
bool get sizedByParent => true;
+ @override
void performResize() {
size = constraints.biggest;
}
Size _previousSize;
+ @override
void performLayout() {
bool needToFlushUpdates = false;
@@ -241,10 +247,12 @@
}
}
+ @override
bool hitTestChildren(HitTestResult result, { Point position }) {
return defaultHitTestChildren(result, position: position);
}
+ @override
void paint(PaintingContext context, Offset offset) {
defaultPaint(context, offset);
}
diff --git a/packages/flutter/lib/src/rendering/binding.dart b/packages/flutter/lib/src/rendering/binding.dart
index 8fddbf5..41d2307 100644
--- a/packages/flutter/lib/src/rendering/binding.dart
+++ b/packages/flutter/lib/src/rendering/binding.dart
@@ -22,6 +22,7 @@
abstract class Renderer extends Object with Scheduler, Services
implements HitTestable {
+ @override
void initInstances() {
super.initInstances();
_instance = this;
@@ -90,6 +91,7 @@
}
}
+ @override
void hitTest(HitTestResult result, Point position) {
assert(renderView != null);
renderView.hitTest(result, position: position);
diff --git a/packages/flutter/lib/src/rendering/block.dart b/packages/flutter/lib/src/rendering/block.dart
index a7b9090..834e8ff 100644
--- a/packages/flutter/lib/src/rendering/block.dart
+++ b/packages/flutter/lib/src/rendering/block.dart
@@ -39,12 +39,14 @@
addAll(children);
}
+ @override
void setupParentData(RenderBox child) {
if (child.parentData is! BlockParentData)
child.parentData = new BlockParentData();
}
/// The direction to use as the main axis.
+ @override
Axis get mainAxis => _mainAxis;
Axis _mainAxis;
void set mainAxis (Axis value) {
@@ -95,6 +97,7 @@
math.max(minExtent, parentData.offset.dx + child.size.width);
}
+ @override
void performLayout() {
BoxConstraints innerConstraints = _getInnerConstraints(constraints);
double position = 0.0;
@@ -113,6 +116,7 @@
assert(!size.isInfinite);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('mainAxis: $mainAxis');
@@ -156,6 +160,7 @@
return constrainer(math.max(extent, minExtent));
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (isVertical) {
@@ -168,6 +173,7 @@
return _getIntrinsicMainAxis(constraints, constraints.constrainWidth);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (isVertical) {
@@ -180,6 +186,7 @@
return _getIntrinsicMainAxis(constraints, constraints.constrainWidth);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (isVertical)
@@ -191,6 +198,7 @@
);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (isVertical)
@@ -202,10 +210,12 @@
);
}
+ @override
double computeDistanceToActualBaseline(TextBaseline baseline) {
return defaultComputeDistanceToFirstActualBaseline(baseline);
}
+ @override
void performLayout() {
assert((isVertical ? constraints.maxHeight >= double.INFINITY : constraints.maxWidth >= double.INFINITY) &&
'RenderBlock does not clip or resize its children, so it must be placed in a parent that does not constrain '
@@ -213,10 +223,12 @@
super.performLayout();
}
+ @override
void paint(PaintingContext context, Offset offset) {
defaultPaint(context, offset);
}
+ @override
bool hitTestChildren(HitTestResult result, { Point position }) {
return defaultHitTestChildren(result, position: position);
}
@@ -254,6 +266,8 @@
super(children: children, mainAxis: mainAxis, itemExtent: itemExtent, minExtent: minExtent);
bool _inCallback = false;
+
+ @override
bool get isRepaintBoundary => true;
/// Called during [layout] to determine the block's children.
@@ -322,11 +336,13 @@
markNeedsPaint();
}
+ @override
void attach() {
super.attach();
_overlayPainter?.attach(this);
}
+ @override
void detach() {
super.detach();
_overlayPainter?.detach();
@@ -366,6 +382,7 @@
return result;
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (isVertical)
@@ -373,6 +390,7 @@
return constraints.constrainWidth(minExtent);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (isVertical)
@@ -380,6 +398,7 @@
return _getIntrinsicDimension(constraints, totalExtentCallback, new BoxConstraints(minWidth: minExtent).enforce(constraints).constrainWidth);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (!isVertical)
@@ -387,6 +406,7 @@
return constraints.constrainHeight(0.0);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (!isVertical)
@@ -399,6 +419,7 @@
// scroll the RenderBlockViewport, it would shift in its parent if
// the parent was baseline-aligned, which makes no sense.
+ @override
void performLayout() {
if (_callback != null) {
try {
@@ -422,10 +443,12 @@
overlayPainter?.paint(context, offset);
}
+ @override
void paint(PaintingContext context, Offset offset) {
context.pushClipRect(needsCompositing, offset, Point.origin & size, _paintContents);
}
+ @override
void applyPaintTransform(RenderBox child, Matrix4 transform) {
if (isVertical)
transform.translate(0.0, startOffset);
@@ -434,8 +457,10 @@
super.applyPaintTransform(child, transform);
}
+ @override
Rect describeApproximatePaintClip(RenderObject child) => Point.origin & size;
+ @override
bool hitTestChildren(HitTestResult result, { Point position }) {
if (isVertical)
return defaultHitTestChildren(result, position: position + new Offset(0.0, -startOffset));
@@ -443,6 +468,7 @@
return defaultHitTestChildren(result, position: position + new Offset(-startOffset, 0.0));
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('startOffset: $startOffset');
diff --git a/packages/flutter/lib/src/rendering/box.dart b/packages/flutter/lib/src/rendering/box.dart
index caf8111..6af4b76 100644
--- a/packages/flutter/lib/src/rendering/box.dart
+++ b/packages/flutter/lib/src/rendering/box.dart
@@ -211,6 +211,7 @@
bool get hasTightHeight => minHeight >= maxHeight;
/// Whether there is exactly one size that satifies the constraints.
+ @override
bool get isTight => hasTightWidth && hasTightHeight;
/// Whether there is an upper bound on the maximum width.
@@ -293,6 +294,7 @@
/// normalized and have undefined behavior when they are not. In
/// checked mode, many of these APIs will assert if the constraints
/// are not normalized.
+ @override
bool get isNormalized {
return minWidth >= 0.0 &&
minWidth <= maxWidth &&
@@ -300,6 +302,7 @@
minHeight <= maxHeight;
}
+ @override
bool get debugAssertIsNormalized {
assert(() {
if (minWidth < 0.0 && minHeight < 0.0)
@@ -328,6 +331,7 @@
);
}
+ @override
bool operator ==(dynamic other) {
assert(debugAssertIsNormalized);
if (identical(this, other))
@@ -342,11 +346,13 @@
maxHeight == typedOther.maxHeight;
}
+ @override
int get hashCode {
assert(debugAssertIsNormalized);
return hashValues(minWidth, maxWidth, minHeight, maxHeight);
}
+ @override
String toString() {
String annotation = isNormalized ? '' : '; NOT NORMALIZED';
if (minWidth == double.INFINITY && minHeight == double.INFINITY)
@@ -369,11 +375,13 @@
class BoxHitTestEntry extends HitTestEntry {
const BoxHitTestEntry(RenderBox target, this.localPosition) : super(target);
+ @override
RenderBox get target => super.target;
/// The position of the hit test in the local coordinates of [target].
final Point localPosition;
+ @override
String toString() => '${target.runtimeType}@$localPosition';
}
@@ -387,6 +395,7 @@
_offset = value;
}
+ @override
String toString() => 'offset=$offset';
}
@@ -413,7 +422,7 @@
/// width value (and pass true for parentUsesSize). After the child determines
/// its height, use the child's height to determine your size.
abstract class RenderBox extends RenderObject {
-
+ @override
void setupParentData(RenderObject child) {
if (child.parentData is! BoxParentData)
child.parentData = new BoxParentData();
@@ -512,8 +521,10 @@
assert(() { debugAssertDoesMeetConstraints(); return true; });
}
+ @override
Rect get semanticBounds => Point.origin & size;
+ @override
void debugResetSize() {
// updates the value of size._canBeUsedByParent if necessary
size = size;
@@ -593,7 +604,10 @@
}
/// The box constraints most recently received from the parent.
+ @override
BoxConstraints get constraints => super.constraints;
+
+ @override
void debugAssertDoesMeetConstraints() {
assert(constraints != null);
assert(_size != null);
@@ -681,6 +695,7 @@
}
}
+ @override
void markNeedsLayout() {
if (_cachedBaselines != null && _cachedBaselines.isNotEmpty) {
// if we have cached data, then someone must have used our data
@@ -699,11 +714,15 @@
}
super.markNeedsLayout();
}
+
+ @override
void performResize() {
// default behavior for subclasses that have sizedByParent = true
size = constraints.constrain(Size.zero);
assert(!size.isInfinite);
}
+
+ @override
void performLayout() {
assert(() {
if (!sizedByParent) {
@@ -759,6 +778,7 @@
///
/// The RenderBox implementation takes care of adjusting the matrix for the
/// position of the given child.
+ @override
void applyPaintTransform(RenderObject child, Matrix4 transform) {
assert(child.parent == this);
BoxParentData childParentData = child.parentData;
@@ -811,9 +831,12 @@
/// can lead to undefined behavior.
///
/// The returned paint bounds are in the local coordinate system of this box.
+ @override
Rect get paintBounds => Point.origin & size;
int _debugActivePointers = 0;
+
+ @override
void handleEvent(PointerEvent event, HitTestEntry entry) {
super.handleEvent(event, entry);
assert(() {
@@ -829,6 +852,7 @@
});
}
+ @override
void debugPaint(PaintingContext context, Offset offset) {
assert(() {
if (debugPaintSizeEnabled)
@@ -888,6 +912,7 @@
});
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('size: ${ hasSize ? size : "MISSING" }');
@@ -974,5 +999,6 @@
class FractionalOffsetTween extends Tween<FractionalOffset> {
FractionalOffsetTween({ FractionalOffset begin, FractionalOffset end }) : super(begin: begin, end: end);
+ @override
FractionalOffset lerp(double t) => FractionalOffset.lerp(begin, end, t);
}
diff --git a/packages/flutter/lib/src/rendering/child_view.dart b/packages/flutter/lib/src/rendering/child_view.dart
index 33e5267..94c7784 100644
--- a/packages/flutter/lib/src/rendering/child_view.dart
+++ b/packages/flutter/lib/src/rendering/child_view.dart
@@ -19,11 +19,8 @@
mojom.ViewProxy _initViewProxy() {
int viewHandle = ui.takeViewHandle();
- assert(() {
- if (viewHandle == core.MojoHandle.INVALID)
- debugPrint('Child view are supported only when running in Mojo shell.');
- return true;
- });
+ if (viewHandle == core.MojoHandle.INVALID)
+ return null;
return new mojom.ViewProxy.fromHandle(new core.MojoHandle(viewHandle));
}
@@ -74,7 +71,7 @@
assert(_viewOwner != null);
assert(_viewKey == null);
_viewKey = _nextViewKey++;
- _view.addChild(_viewKey, _viewOwner.impl);
+ _view?.addChild(_viewKey, _viewOwner.impl);
_viewOwner = null;
}
@@ -83,7 +80,7 @@
assert(_viewOwner == null);
assert(_viewKey != null);
_viewOwner = new mojom.ViewOwnerProxy.unbound();
- _view.removeChild(_viewKey, _viewOwner);
+ _view?.removeChild(_viewKey, _viewOwner);
_viewKey = null;
}
@@ -117,6 +114,8 @@
assert(_attached);
assert(_attachments == 1);
assert(_viewKey != null);
+ if (_view == null)
+ return new Future<mojom.ViewLayoutInfo>.value(null);
int width = (size.width * scale).round();
int height = (size.height * scale).round();
// TODO(abarth): Ideally we would propagate our actually constraints to be
@@ -171,26 +170,49 @@
markNeedsLayout();
}
+ @override
void attach() {
super.attach();
_child?._attach();
}
+ @override
void detach() {
_child?._detach();
super.detach();
}
+ @override
bool get alwaysNeedsCompositing => true;
+
+ @override
bool get sizedByParent => true;
+ @override
void performResize() {
size = constraints.biggest;
}
+ TextPainter _debugErrorMessage;
+
+ @override
void performLayout() {
- if (_child != null)
+ if (_child != null) {
_child._layout(size: size, scale: scale).then(_handleLayoutInfoChanged);
+ assert(() {
+ if (_view == null) {
+ _debugErrorMessage ??= new TextPainter()
+ ..text = new TextSpan(text: 'Child view are supported only when running in Mojo shell.');
+ _debugErrorMessage
+ ..minWidth = size.width
+ ..maxWidth = size.width
+ ..minHeight = size.height
+ ..maxHeight = size.height
+ ..layout();
+ }
+ return true;
+ });
+ }
}
mojom.ViewLayoutInfo _layoutInfo;
@@ -200,14 +222,24 @@
markNeedsPaint();
}
+ @override
bool hitTestSelf(Point position) => true;
+ @override
void paint(PaintingContext context, Offset offset) {
assert(needsCompositing);
if (_layoutInfo != null)
context.pushChildScene(offset, scale, _layoutInfo);
+ assert(() {
+ if (_view == null) {
+ context.canvas.drawRect(offset & size, new Paint()..color = const Color(0xFF0000FF));
+ _debugErrorMessage.paint(context.canvas, offset);
+ }
+ return true;
+ });
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('child: $child');
diff --git a/packages/flutter/lib/src/rendering/custom_layout.dart b/packages/flutter/lib/src/rendering/custom_layout.dart
index d5d0608..605a120 100644
--- a/packages/flutter/lib/src/rendering/custom_layout.dart
+++ b/packages/flutter/lib/src/rendering/custom_layout.dart
@@ -12,6 +12,7 @@
/// An object representing the identity of this child.
Object id;
+ @override
String toString() => '${super.toString()}; id=$id';
}
@@ -191,6 +192,7 @@
/// debugging data printed by [debugDumpRenderTree] and friends.
///
/// By default, returns the [runtimeType] of the class.
+ @override
String toString() => '$runtimeType';
}
@@ -211,6 +213,7 @@
addAll(children);
}
+ @override
void setupParentData(RenderBox child) {
if (child.parentData is! MultiChildLayoutParentData)
child.parentData = new MultiChildLayoutParentData();
@@ -233,31 +236,38 @@
return constraints.constrain(_delegate.getSize(constraints));
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
return _getSize(constraints).width;
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
return _getSize(constraints).width;
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
return _getSize(constraints).height;
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
return _getSize(constraints).height;
}
+ @override
void performLayout() {
size = _getSize(constraints);
delegate._callPerformLayout(size, firstChild);
}
+ @override
void paint(PaintingContext context, Offset offset) {
defaultPaint(context, offset);
}
+ @override
bool hitTestChildren(HitTestResult result, { Point position }) {
return defaultHitTestChildren(result, position: position);
}
diff --git a/packages/flutter/lib/src/rendering/editable_line.dart b/packages/flutter/lib/src/rendering/editable_line.dart
index 4c07836..013e7e9 100644
--- a/packages/flutter/lib/src/rendering/editable_line.dart
+++ b/packages/flutter/lib/src/rendering/editable_line.dart
@@ -131,29 +131,36 @@
return _layoutTemplate.height;
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return constraints.constrainWidth(0.0);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return constraints.constrainWidth(0.0);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return constraints.constrainHeight(_preferredHeight);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return constraints.constrainHeight(_preferredHeight);
}
+ @override
bool hitTestSelf(Point position) => true;
TapGestureRecognizer _tap;
+
+ @override
void handleEvent(PointerEvent event, BoxHitTestEntry entry) {
if (event is PointerDownEvent && onSelectionChanged != null)
_tap.addPointer(event);
@@ -201,6 +208,7 @@
Rect _caretPrototype;
+ @override
void performLayout() {
Size oldSize = hasSize ? size : null;
size = new Size(constraints.maxWidth, constraints.constrainHeight(_preferredHeight));
@@ -250,6 +258,7 @@
bool get _hasVisualOverflow => _contentSize.width > size.width;
+ @override
void paint(PaintingContext context, Offset offset) {
if (_hasVisualOverflow)
context.pushClipRect(needsCompositing, offset, Point.origin & size, _paintContents);
@@ -257,5 +266,6 @@
_paintContents(context, offset);
}
+ @override
Rect describeApproximatePaintClip(RenderObject child) => _hasVisualOverflow ? Point.origin & size : null;
}
diff --git a/packages/flutter/lib/src/rendering/error.dart b/packages/flutter/lib/src/rendering/error.dart
index e6c3d00..a86be46 100644
--- a/packages/flutter/lib/src/rendering/error.dart
+++ b/packages/flutter/lib/src/rendering/error.dart
@@ -53,26 +53,33 @@
ui.Paragraph _paragraph;
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
return constraints.constrainWidth(0.0);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
return constraints.constrainWidth(_kMaxWidth);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
return constraints.constrainHeight(0.0);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
return constraints.constrainHeight(_kMaxHeight);
}
+ @override
bool get sizedByParent => true;
+ @override
bool hitTestSelf(Point position) => true;
+ @override
void performResize() {
size = constraints.constrain(const Size(_kMaxWidth, _kMaxHeight));
}
@@ -92,6 +99,7 @@
lineHeight: 0.25 // TODO(ianh): https://github.com/flutter/flutter/issues/2460 will affect this
);
+ @override
void paint(PaintingContext context, Offset offset) {
try {
context.canvas.drawRect(offset & size, new Paint() .. color = backgroundColor);
diff --git a/packages/flutter/lib/src/rendering/flex.dart b/packages/flutter/lib/src/rendering/flex.dart
index 6a20573..05c8a5b 100644
--- a/packages/flutter/lib/src/rendering/flex.dart
+++ b/packages/flutter/lib/src/rendering/flex.dart
@@ -17,6 +17,7 @@
/// according to the flex factors of the flexible children.
int flex;
+ @override
String toString() => '${super.toString()}; flex=$flex';
}
@@ -134,6 +135,7 @@
/// Set during layout if overflow occurred on the main axis
double _overflow;
+ @override
void setupParentData(RenderBox child) {
if (child.parentData is! FlexParentData)
child.parentData = new FlexParentData();
@@ -278,6 +280,7 @@
}
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
return _getIntrinsicSize(
constraints: constraints,
@@ -286,6 +289,7 @@
);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
return _getIntrinsicSize(
constraints: constraints,
@@ -294,6 +298,7 @@
);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
return _getIntrinsicSize(
constraints: constraints,
@@ -302,6 +307,7 @@
);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
return _getIntrinsicSize(
constraints: constraints,
@@ -309,6 +315,7 @@
childSize: (RenderBox child, BoxConstraints innerConstraints) => child.getMaxIntrinsicHeight(innerConstraints));
}
+ @override
double computeDistanceToActualBaseline(TextBaseline baseline) {
if (_direction == FlexDirection.horizontal)
return defaultComputeDistanceToHighestActualBaseline(baseline);
@@ -328,6 +335,7 @@
return (_direction == FlexDirection.horizontal) ? child.size.width : child.size.height;
}
+ @override
void performLayout() {
// Originally based on http://www.w3.org/TR/css-flexbox-1/ Section 9.7 Resolving Flexible Lengths
@@ -537,10 +545,12 @@
}
}
+ @override
bool hitTestChildren(HitTestResult result, { Point position }) {
return defaultHitTestChildren(result, position: position);
}
+ @override
void paint(PaintingContext context, Offset offset) {
if (_overflow <= 0.0) {
defaultPaint(context, offset);
@@ -583,8 +593,10 @@
});
}
+ @override
Rect describeApproximatePaintClip(RenderObject child) => _overflow > 0.0 ? Point.origin & size : null;
+ @override
String toString() {
String header = super.toString();
if (_overflow is double && _overflow > 0.0)
@@ -592,6 +604,7 @@
return header;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('direction: $_direction');
diff --git a/packages/flutter/lib/src/rendering/grid.dart b/packages/flutter/lib/src/rendering/grid.dart
index 6ded3db..ebaa929 100644
--- a/packages/flutter/lib/src/rendering/grid.dart
+++ b/packages/flutter/lib/src/rendering/grid.dart
@@ -205,6 +205,7 @@
// Insets for the entire grid.
final EdgeInsets padding;
+ @override
GridChildPlacement getChildPlacement(GridSpecification specification, int index, Object placementData) {
final int columnCount = specification.columnOffsets.length - 1;
return new GridChildPlacement(
@@ -213,6 +214,7 @@
);
}
+ @override
bool shouldRelayout(GridDelegateWithInOrderChildPlacement oldDelegate) {
return columnSpacing != oldDelegate.columnSpacing
|| rowSpacing != oldDelegate.rowSpacing
@@ -240,6 +242,7 @@
/// The ratio of the width to the height of each tile in the grid.
final double tileAspectRatio;
+ @override
GridSpecification getGridSpecification(BoxConstraints constraints, int childCount) {
assert(constraints.maxWidth < double.INFINITY);
int rowCount = (childCount / columnCount).ceil();
@@ -256,16 +259,19 @@
);
}
+ @override
bool shouldRelayout(FixedColumnCountGridDelegate oldDelegate) {
return columnCount != oldDelegate.columnCount
|| tileAspectRatio != oldDelegate.tileAspectRatio
|| super.shouldRelayout(oldDelegate);
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints, int childCount) {
return constraints.constrainWidth(0.0);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints, int childCount) {
return constraints.constrainWidth(0.0);
}
@@ -297,6 +303,7 @@
/// The ratio of the width to the height of each tile in the grid.
final double tileAspectRatio;
+ @override
GridSpecification getGridSpecification(BoxConstraints constraints, int childCount) {
assert(constraints.maxWidth < double.INFINITY);
final double gridWidth = math.max(0.0, constraints.maxWidth - padding.horizontal);
@@ -315,16 +322,19 @@
);
}
+ @override
bool shouldRelayout(MaxTileWidthGridDelegate oldDelegate) {
return maxTileWidth != oldDelegate.maxTileWidth
|| tileAspectRatio != oldDelegate.tileAspectRatio
|| super.shouldRelayout(oldDelegate);
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints, int childCount) {
return constraints.constrainWidth(0.0);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints, int childCount) {
return constraints.constrainWidth(maxTileWidth * childCount);
}
@@ -335,6 +345,7 @@
/// Opaque data passed to the getChildPlacement method of the grid's [GridDelegate].
Object placementData;
+ @override
String toString() => '${super.toString()}; placementData=$placementData';
}
@@ -384,6 +395,7 @@
_delegate = newDelegate;
}
+ @override
void set mainAxis(Axis value) {
assert(() {
if (value != Axis.vertical)
@@ -393,6 +405,7 @@
super.mainAxis = value;
}
+ @override
int get virtualChildCount => super.virtualChildCount ?? childCount;
/// The virtual index of the first child.
@@ -409,31 +422,37 @@
markNeedsLayout();
}
+ @override
void setupParentData(RenderBox child) {
if (child.parentData is! GridParentData)
child.parentData = new GridParentData();
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return _delegate.getMinIntrinsicWidth(constraints, virtualChildCount);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return _delegate.getMaxIntrinsicWidth(constraints, virtualChildCount);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return _delegate.getMinIntrinsicHeight(constraints, virtualChildCount);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return _delegate.getMaxIntrinsicHeight(constraints, virtualChildCount);
}
+ @override
double computeDistanceToActualBaseline(TextBaseline baseline) {
return defaultComputeDistanceToHighestActualBaseline(baseline);
}
@@ -453,6 +472,7 @@
}
}
+ @override
void performLayout() {
_updateGridSpecification();
final Size gridSize = _specification.gridSize;
diff --git a/packages/flutter/lib/src/rendering/image.dart b/packages/flutter/lib/src/rendering/image.dart
index 8ac1bfb..91e2ece 100644
--- a/packages/flutter/lib/src/rendering/image.dart
+++ b/packages/flutter/lib/src/rendering/image.dart
@@ -203,6 +203,7 @@
return constraints.constrain(new Size(width, height));
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (_width == null && _height == null)
@@ -210,11 +211,13 @@
return _sizeForConstraints(constraints).width;
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return _sizeForConstraints(constraints).width;
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (_width == null && _height == null)
@@ -222,17 +225,21 @@
return _sizeForConstraints(constraints).height;
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return _sizeForConstraints(constraints).height;
}
+ @override
bool hitTestSelf(Point position) => true;
+ @override
void performLayout() {
size = _sizeForConstraints(constraints);
}
+ @override
void paint(PaintingContext context, Offset offset) {
if (_image == null)
return;
@@ -248,6 +255,7 @@
);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('image: $image');
diff --git a/packages/flutter/lib/src/rendering/layer.dart b/packages/flutter/lib/src/rendering/layer.dart
index 9d3b3c2..2f1ea1c 100644
--- a/packages/flutter/lib/src/rendering/layer.dart
+++ b/packages/flutter/lib/src/rendering/layer.dart
@@ -70,6 +70,7 @@
/// origin of the builder's coordinate system.
void addToScene(ui.SceneBuilder builder, Offset layerOffset);
+ @override
String toString() => '$runtimeType';
dynamic debugOwner;
@@ -102,6 +103,7 @@
/// The picture's coodinate system matches this layer's coodinate system
ui.Picture picture;
+ @override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
builder.addPicture(layerOffset, picture);
}
@@ -114,6 +116,7 @@
double devicePixelRatio;
mojom.ViewLayoutInfo layoutInfo;
+ @override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
builder.addChildScene(
offset + layerOffset,
@@ -124,6 +127,7 @@
);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('offset: $offset');
@@ -150,6 +154,7 @@
final int rasterizerThreshold;
+ @override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
assert(optionsMask != null);
builder.addPerformanceOverlay(optionsMask, overlayRect.shift(layerOffset));
@@ -243,6 +248,7 @@
_lastChild = null;
}
+ @override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
addChildrenToScene(builder, layerOffset);
}
@@ -256,6 +262,7 @@
}
}
+ @override
String debugDescribeChildren(String prefix) {
String result = '$prefix \u2502\n';
if (_firstChild != null) {
@@ -281,10 +288,12 @@
/// Offset from parent in the parent's coordinate system.
Offset offset;
+ @override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
addChildrenToScene(builder, offset + layerOffset);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('offset: $offset');
@@ -301,12 +310,14 @@
// TODO(abarth): Why is the rectangle in the parent's coordinate system
// instead of in the coordinate system of this layer?
+ @override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
builder.pushClipRect(clipRect.shift(layerOffset));
addChildrenToScene(builder, layerOffset);
builder.pop();
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('clipRect: $clipRect');
@@ -322,12 +333,14 @@
// TODO(abarth): Why is the rounded-rect in the parent's coordinate system
// instead of in the coordinate system of this layer?
+ @override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
builder.pushClipRRect(clipRRect.shift(layerOffset));
addChildrenToScene(builder, layerOffset);
builder.pop();
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('clipRRect: $clipRRect');
@@ -343,12 +356,14 @@
// TODO(abarth): Why is the path in the parent's coordinate system instead of
// in the coordinate system of this layer?
+ @override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
builder.pushClipPath(clipPath.shift(layerOffset));
addChildrenToScene(builder, layerOffset);
builder.pop();
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('clipPath: $clipPath');
@@ -362,6 +377,7 @@
/// The matrix to apply
Matrix4 transform;
+ @override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
Matrix4 offsetTransform = new Matrix4.identity();
offsetTransform.translate(offset.dx + layerOffset.dx, offset.dy + layerOffset.dy);
@@ -370,6 +386,7 @@
builder.pop();
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('transform:');
@@ -387,12 +404,14 @@
/// transparent and 255 is fully opaque.
int alpha;
+ @override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
builder.pushOpacity(alpha);
addChildrenToScene(builder, layerOffset);
builder.pop();
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('alpha: $alpha');
@@ -412,12 +431,14 @@
/// The tranfer mode to apply when blending the shader with the children.
TransferMode transferMode;
+ @override
void addToScene(ui.SceneBuilder builder, Offset layerOffset) {
builder.pushShaderMask(shader, maskRect.shift(layerOffset), transferMode);
addChildrenToScene(builder, layerOffset);
builder.pop();
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('shader: $shader');
diff --git a/packages/flutter/lib/src/rendering/list.dart b/packages/flutter/lib/src/rendering/list.dart
index 2e04d1c..abea020 100644
--- a/packages/flutter/lib/src/rendering/list.dart
+++ b/packages/flutter/lib/src/rendering/list.dart
@@ -54,6 +54,7 @@
markNeedsLayout();
}
+ @override
void setupParentData(RenderBox child) {
if (child.parentData is! ListParentData)
child.parentData = new ListParentData();
@@ -90,10 +91,12 @@
}
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
return _getIntrinsicWidth(constraints);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
return _getIntrinsicWidth(constraints);
}
@@ -108,14 +111,17 @@
}
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
return _getIntrinsicHeight(constraints);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
return _getIntrinsicHeight(constraints);
}
+ @override
void performLayout() {
switch (mainAxis) {
case Axis.vertical:
diff --git a/packages/flutter/lib/src/rendering/object.dart b/packages/flutter/lib/src/rendering/object.dart
index 56b650b..266bc2a 100644
--- a/packages/flutter/lib/src/rendering/object.dart
+++ b/packages/flutter/lib/src/rendering/object.dart
@@ -30,6 +30,7 @@
/// Called when the RenderObject is removed from the tree.
void detach() { }
+ @override
String toString() => '<none>';
}
@@ -469,6 +470,7 @@
bool _debugCompiled = false;
Iterable<SemanticsNode> compile({ _SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics });
+ @override
String toString() => '$runtimeType($hashCode)';
}
@@ -482,6 +484,7 @@
assert(owner._semantics != null);
}
+ @override
Iterable<SemanticsNode> compile({ _SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics }) sync* {
assert(!_debugCompiled);
assert(() { _debugCompiled = true; return true; });
@@ -506,6 +509,7 @@
bool get haveConcreteNode => true;
+ @override
Iterable<SemanticsNode> compile({ _SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics }) sync* {
assert(!_debugCompiled);
assert(() { _debugCompiled = true; return true; });
@@ -537,6 +541,7 @@
Iterable<_SemanticsFragment> children
}) : super(owner: owner, annotators: annotators, children: children);
+ @override
SemanticsNode establishSemanticsNode(_SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics) {
assert(_ancestorChain.length == 1);
assert(geometry == null);
@@ -552,6 +557,7 @@
return node;
}
+ @override
_SemanticsGeometry createSemanticsGeometryForChild(_SemanticsGeometry geometry) {
return new _SemanticsGeometry();
}
@@ -564,6 +570,7 @@
Iterable<_SemanticsFragment> children
}) : super(owner: owner, annotators: annotators, children: children);
+ @override
SemanticsNode establishSemanticsNode(_SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics) {
owner._semantics ??= new SemanticsNode(
handler: owner is SemanticActionHandler ? owner as dynamic : null
@@ -578,6 +585,7 @@
return node;
}
+ @override
_SemanticsGeometry createSemanticsGeometryForChild(_SemanticsGeometry geometry) {
return new _SemanticsGeometry.withClipFrom(geometry);
}
@@ -590,9 +598,11 @@
Iterable<_SemanticsFragment> children
}) : super(owner: owner, annotators: annotators, children: children);
+ @override
bool get haveConcreteNode => _haveConcreteNode;
bool _haveConcreteNode;
+ @override
SemanticsNode establishSemanticsNode(_SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics) {
SemanticsNode node;
assert(_haveConcreteNode == null);
@@ -616,6 +626,7 @@
return node;
}
+ @override
_SemanticsGeometry createSemanticsGeometryForChild(_SemanticsGeometry geometry) {
if (haveConcreteNode)
return new _SemanticsGeometry.withClipFrom(geometry);
@@ -632,6 +643,7 @@
assert(children.length > 1);
}
+ @override
Iterable<SemanticsNode> compile({ _SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics }) sync* {
assert(!_debugCompiled);
assert(() { _debugCompiled = true; return true; });
@@ -691,6 +703,7 @@
///
/// Only for use by subclasses when changing their child lists. Calling this
/// in other cases will lead to an inconsistent tree and probably cause crashes.
+ @override
void adoptChild(RenderObject child) {
assert(debugCanPerformMutations);
assert(child != null);
@@ -704,6 +717,7 @@
///
/// Only for use by subclasses when changing their child lists. Calling this
/// in other cases will lead to an inconsistent tree and probably cause crashes.
+ @override
void dropChild(RenderObject child) {
assert(debugCanPerformMutations);
assert(child != null);
@@ -1651,6 +1665,7 @@
// EVENTS
/// Override this function to handle pointer events that hit this render object.
+ @override
void handleEvent(PointerEvent event, HitTestEntry entry) { }
@@ -1675,6 +1690,7 @@
/// Returns a human understandable name.
+ @override
String toString() {
String header = '$runtimeType';
if (_relayoutSubtreeRoot != null && _relayoutSubtreeRoot != this) {
@@ -1759,20 +1775,28 @@
if (_child != null)
adoptChild(_child);
}
+
+ @override
void attach() {
super.attach();
if (_child != null)
_child.attach();
}
+
+ @override
void detach() {
super.detach();
if (_child != null)
_child.detach();
}
+
+ @override
void visitChildren(RenderObjectVisitor visitor) {
if (_child != null)
visitor(_child);
}
+
+ @override
String debugDescribeChildren(String prefix) {
if (child != null)
return '$prefix \u2502\n${child.toStringDeep('$prefix \u2514\u2500child: ', '$prefix ')}';
@@ -1788,6 +1812,7 @@
ChildType nextSibling;
/// Clear the sibling pointers.
+ @override
void detach() {
super.detach();
if (previousSibling != null) {
@@ -1971,6 +1996,7 @@
markNeedsLayout();
}
+ @override
void attach() {
super.attach();
ChildType child = _firstChild;
@@ -1981,6 +2007,7 @@
}
}
+ @override
void detach() {
super.detach();
ChildType child = _firstChild;
@@ -1991,6 +2018,7 @@
}
}
+ @override
void redepthChildren() {
ChildType child = _firstChild;
while (child != null) {
@@ -2000,6 +2028,7 @@
}
}
+ @override
void visitChildren(RenderObjectVisitor visitor) {
ChildType child = _firstChild;
while (child != null) {
@@ -2021,6 +2050,7 @@
return childParentData.nextSibling;
}
+ @override
String debugDescribeChildren(String prefix) {
String result = '$prefix \u2502\n';
if (_firstChild != null) {
@@ -2044,6 +2074,9 @@
/// Error thrown when the rendering library encounters a contract violation.
class RenderingError extends AssertionError {
RenderingError(this.message);
+
final String message;
+
+ @override
String toString() => message;
}
diff --git a/packages/flutter/lib/src/rendering/overflow.dart b/packages/flutter/lib/src/rendering/overflow.dart
index 2d129c4..9222496 100644
--- a/packages/flutter/lib/src/rendering/overflow.dart
+++ b/packages/flutter/lib/src/rendering/overflow.dart
@@ -28,42 +28,50 @@
markNeedsLayout();
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return constraints.constrainWidth(_requestedSize.width);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return constraints.constrainWidth(_requestedSize.width);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return constraints.constrainHeight(_requestedSize.height);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return constraints.constrainHeight(_requestedSize.height);
}
+ @override
double computeDistanceToActualBaseline(TextBaseline baseline) {
if (child != null)
return child.getDistanceToActualBaseline(baseline);
return super.computeDistanceToActualBaseline(baseline);
}
+ @override
void performLayout() {
size = constraints.constrain(_requestedSize);
if (child != null)
child.layout(constraints);
}
+ @override
bool hitTestChildren(HitTestResult result, { Point position }) {
return child?.hitTest(result, position: position) ?? false;
}
+ @override
void paint(PaintingContext context, Offset offset) {
if (child != null)
context.paintChild(child, offset);
@@ -78,23 +86,38 @@
this.child = child;
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) => constraints.minWidth;
+
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) => constraints.minWidth;
+
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) => constraints.minHeight;
+
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) => constraints.minHeight;
+ @override
bool get sizedByParent => true;
+ @override
void performResize() {
size = constraints.smallest;
}
+ @override
void performLayout() {
if (child != null)
child.layout(constraints);
}
+ @override
bool hitTest(HitTestResult result, { Point position }) => false;
+
+ @override
void paint(PaintingContext context, Offset offset) { }
+
+ @override
void visitChildrenForSemantics(RenderObjectVisitor visitor) { }
}
diff --git a/packages/flutter/lib/src/rendering/paragraph.dart b/packages/flutter/lib/src/rendering/paragraph.dart
index b158b53..c3ae986 100644
--- a/packages/flutter/lib/src/rendering/paragraph.dart
+++ b/packages/flutter/lib/src/rendering/paragraph.dart
@@ -52,11 +52,13 @@
_constraintsForCurrentLayout = constraints;
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
_layoutText(constraints);
return constraints.constrainWidth(_textPainter.minIntrinsicWidth);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
_layoutText(constraints);
return constraints.constrainWidth(_textPainter.maxIntrinsicWidth);
@@ -67,24 +69,29 @@
return constraints.constrainHeight(_textPainter.size.height);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return _getIntrinsicHeight(constraints);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return _getIntrinsicHeight(constraints);
}
+ @override
double computeDistanceToActualBaseline(TextBaseline baseline) {
assert(!needsLayout);
_layoutText(constraints);
return _textPainter.computeDistanceToActualBaseline(baseline);
}
+ @override
bool hitTestSelf(Point position) => true;
+ @override
void handleEvent(PointerEvent event, BoxHitTestEntry entry) {
if (event is! PointerDownEvent)
return;
@@ -95,11 +102,13 @@
span?.recognizer?.addPointer(event);
}
+ @override
void performLayout() {
_layoutText(constraints);
size = constraints.constrain(_textPainter.size);
}
+ @override
void paint(PaintingContext context, Offset offset) {
// Ideally we could compute the min/max intrinsic width/height with a
// non-destructive operation. However, currently, computing these values
@@ -112,12 +121,14 @@
_textPainter.paint(context.canvas, offset);
}
+ @override
Iterable<SemanticAnnotator> getSemanticAnnotators() sync* {
yield (SemanticsNode node) {
node.label = text.toPlainText();
};
}
+ @override
String debugDescribeChildren(String prefix) {
return '$prefix \u2558\u2550\u2566\u2550\u2550 text \u2550\u2550\u2550\n'
'${text.toString("$prefix \u2551 ")}\n'
diff --git a/packages/flutter/lib/src/rendering/performance_overlay.dart b/packages/flutter/lib/src/rendering/performance_overlay.dart
index 700ea10..b70d371 100644
--- a/packages/flutter/lib/src/rendering/performance_overlay.dart
+++ b/packages/flutter/lib/src/rendering/performance_overlay.dart
@@ -66,13 +66,18 @@
markNeedsPaint();
}
+ @override
bool get sizedByParent => true;
+
+ @override
bool get alwaysNeedsCompositing => true;
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
return constraints.constrainWidth(0.0);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
return constraints.constrainWidth(0.0);
}
@@ -89,18 +94,22 @@
return result;
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
return constraints.constrainHeight(intrinsicHeight);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
return constraints.constrainHeight(intrinsicHeight);
}
+ @override
void performResize() {
size = constraints.constrain(new Size(double.INFINITY, intrinsicHeight));
}
+ @override
void paint(PaintingContext context, Offset offset) {
assert(needsCompositing);
context.pushPerformanceOverlay(offset, optionsMask, rasterizerThreshold, size);
diff --git a/packages/flutter/lib/src/rendering/proxy_box.dart b/packages/flutter/lib/src/rendering/proxy_box.dart
index 70d04cb..c9e354d 100644
--- a/packages/flutter/lib/src/rendering/proxy_box.dart
+++ b/packages/flutter/lib/src/rendering/proxy_box.dart
@@ -34,6 +34,7 @@
this.child = child;
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -41,6 +42,7 @@
return super.getMinIntrinsicWidth(constraints);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -48,6 +50,7 @@
return super.getMaxIntrinsicWidth(constraints);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -55,6 +58,7 @@
return super.getMinIntrinsicHeight(constraints);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -62,12 +66,14 @@
return super.getMaxIntrinsicHeight(constraints);
}
+ @override
double computeDistanceToActualBaseline(TextBaseline baseline) {
if (child != null)
return child.getDistanceToActualBaseline(baseline);
return super.computeDistanceToActualBaseline(baseline);
}
+ @override
void performLayout() {
if (child != null) {
child.layout(constraints, parentUsesSize: true);
@@ -77,10 +83,12 @@
}
}
+ @override
bool hitTestChildren(HitTestResult result, { Point position }) {
return child?.hitTest(result, position: position) ?? false;
}
+ @override
void paint(PaintingContext context, Offset offset) {
if (child != null)
context.paintChild(child, offset);
@@ -113,6 +121,7 @@
HitTestBehavior behavior;
+ @override
bool hitTest(HitTestResult result, { Point position }) {
bool hitTarget = false;
if (position.x >= 0.0 && position.x < size.width &&
@@ -124,8 +133,10 @@
return hitTarget;
}
+ @override
bool hitTestSelf(Point position) => behavior == HitTestBehavior.opaque;
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
switch (behavior) {
@@ -173,6 +184,7 @@
markNeedsLayout();
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -180,6 +192,7 @@
return _additionalConstraints.enforce(constraints).constrainWidth(0.0);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -187,6 +200,7 @@
return _additionalConstraints.enforce(constraints).constrainWidth(0.0);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -194,6 +208,7 @@
return _additionalConstraints.enforce(constraints).constrainHeight(0.0);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -201,6 +216,7 @@
return _additionalConstraints.enforce(constraints).constrainHeight(0.0);
}
+ @override
void performLayout() {
if (child != null) {
child.layout(_additionalConstraints.enforce(constraints), parentUsesSize: true);
@@ -210,6 +226,7 @@
}
}
+ @override
void debugPaintSize(PaintingContext context, Offset offset) {
super.debugPaintSize(context, offset);
assert(() {
@@ -223,6 +240,7 @@
});
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('additionalConstraints: $additionalConstraints');
@@ -301,6 +319,7 @@
);
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -308,6 +327,7 @@
return _getInnerConstraints(constraints).constrainWidth(0.0);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -315,6 +335,7 @@
return _getInnerConstraints(constraints).constrainWidth(0.0);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -322,6 +343,7 @@
return _getInnerConstraints(constraints).constrainHeight(0.0);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -329,6 +351,7 @@
return _getInnerConstraints(constraints).constrainHeight(0.0);
}
+ @override
void performLayout() {
if (child != null) {
child.layout(_getInnerConstraints(constraints), parentUsesSize: true);
@@ -338,6 +361,7 @@
}
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('widthFactor: ${_widthFactor ?? "pass-through"}');
@@ -393,18 +417,22 @@
markNeedsLayout();
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
return constraints.minWidth;
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
return constraints.maxWidth;
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
return constraints.minHeight;
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
return constraints.maxHeight;
}
@@ -468,12 +496,14 @@
return constraints.constrain(new Size(width, height));
}
+ @override
void performLayout() {
size = _applyAspectRatio(constraints);
if (child != null)
child.layout(new BoxConstraints.tight(size));
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('aspectRatio: $aspectRatio');
@@ -535,11 +565,13 @@
return constraints.tighten(width: _applyStep(width, _stepWidth));
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return getMaxIntrinsicWidth(constraints);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child == null)
@@ -548,6 +580,7 @@
return constraints.constrainWidth(_applyStep(childResult, _stepWidth));
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child == null)
@@ -556,6 +589,7 @@
return constraints.constrainHeight(_applyStep(childResult, _stepHeight));
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child == null)
@@ -564,6 +598,7 @@
return constraints.constrainHeight(_applyStep(childResult, _stepHeight));
}
+ @override
void performLayout() {
if (child != null) {
BoxConstraints childConstraints = _getInnerConstraints(constraints);
@@ -576,6 +611,7 @@
}
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('stepWidth: $stepWidth');
@@ -605,6 +641,7 @@
return constraints.tighten(height: height);
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child == null)
@@ -612,6 +649,7 @@
return child.getMinIntrinsicWidth(_getInnerConstraints(constraints));
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child == null)
@@ -619,11 +657,13 @@
return child.getMaxIntrinsicWidth(_getInnerConstraints(constraints));
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return getMaxIntrinsicHeight(constraints);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child == null)
@@ -631,6 +671,7 @@
return child.getMaxIntrinsicHeight(constraints);
}
+ @override
void performLayout() {
if (child != null) {
child.layout(_getInnerConstraints(constraints), parentUsesSize: true);
@@ -657,6 +698,7 @@
assert(opacity >= 0.0 && opacity <= 1.0);
}
+ @override
bool get alwaysNeedsCompositing => child != null && (_alpha != 0 && _alpha != 255);
/// The fraction to scale the child's alpha value.
@@ -679,6 +721,7 @@
int _alpha;
+ @override
void paint(PaintingContext context, Offset offset) {
if (child != null) {
if (_alpha == 0)
@@ -692,11 +735,13 @@
}
}
+ @override
void visitChildrenForSemantics(RenderObjectVisitor visitor) {
if (child != null && _alpha != 0)
visitor(child);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('opacity: ${opacity.toStringAsFixed(1)}');
@@ -729,8 +774,10 @@
markNeedsPaint();
}
+ @override
bool get alwaysNeedsCompositing => child != null;
+ @override
void paint(PaintingContext context, Offset offset) {
if (child != null) {
assert(needsCompositing);
@@ -788,6 +835,7 @@
T get _defaultClip;
T get _clip => _clipper?.getClip(size) ?? _defaultClip;
+ @override
Rect describeApproximatePaintClip(RenderObject child) => _clipper?.getApproximateClipRect(size) ?? Point.origin & size;
}
@@ -800,8 +848,10 @@
CustomClipper<Rect> clipper
}) : super(child: child, clipper: clipper);
+ @override
Rect get _defaultClip => Point.origin & size;
+ @override
bool hitTest(HitTestResult result, { Point position }) {
if (_clipper != null) {
Rect clipRect = _clip;
@@ -811,6 +861,7 @@
return super.hitTest(result, position: position);
}
+ @override
void paint(PaintingContext context, Offset offset) {
if (child != null)
context.pushClipRect(needsCompositing, offset, _clip, super.paint);
@@ -863,6 +914,7 @@
// TODO(ianh): either convert this to the CustomClipper world, or
// TODO(ianh): implement describeApproximatePaintClip for this class
+ @override
void paint(PaintingContext context, Offset offset) {
if (child != null) {
Rect rect = Point.origin & size;
@@ -893,8 +945,10 @@
return _cachedPath;
}
+ @override
Rect get _defaultClip => Point.origin & size;
+ @override
bool hitTest(HitTestResult result, { Point position }) {
Rect clipBounds = _clip;
Point center = clipBounds.center;
@@ -907,6 +961,7 @@
return super.hitTest(result, position: position);
}
+ @override
void paint(PaintingContext context, Offset offset) {
if (child != null) {
Rect clipBounds = _clip;
@@ -979,20 +1034,24 @@
_decoration.removeChangeListener(markNeedsPaint);
}
+ @override
void attach() {
super.attach();
_addListenerIfNeeded();
}
+ @override
void detach() {
_removeListenerIfNeeded();
super.detach();
}
+ @override
bool hitTestSelf(Point position) {
return _decoration.hitTest(size, position);
}
+ @override
void paint(PaintingContext context, Offset offset) {
assert(size.width != null);
assert(size.height != null);
@@ -1004,6 +1063,7 @@
_painter.paint(context.canvas, offset & size);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('decoration:');
@@ -1130,6 +1190,7 @@
return result;
}
+ @override
bool hitTest(HitTestResult result, { Point position }) {
if (transformHitTests) {
Matrix4 inverse;
@@ -1147,6 +1208,7 @@
return super.hitTest(result, position: position);
}
+ @override
void paint(PaintingContext context, Offset offset) {
if (child != null) {
Matrix4 transform = _effectiveTransform;
@@ -1158,11 +1220,13 @@
}
}
+ @override
void applyPaintTransform(RenderBox child, Matrix4 transform) {
transform.multiply(_effectiveTransform);
super.applyPaintTransform(child, transform);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('transform matrix:');
@@ -1206,6 +1270,7 @@
/// always honor the transformation, regardless of the value of this property.
bool transformHitTests;
+ @override
bool hitTest(HitTestResult result, { Point position }) {
assert(!needsLayout);
if (transformHitTests)
@@ -1213,17 +1278,20 @@
return super.hitTest(result, position: position);
}
+ @override
void paint(PaintingContext context, Offset offset) {
assert(!needsLayout);
if (child != null)
super.paint(context, offset + translation.alongSize(size));
}
+ @override
void applyPaintTransform(RenderBox child, Matrix4 transform) {
transform.translate(translation.dx * size.width, translation.dy * size.height);
super.applyPaintTransform(child, transform);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('translation: $translation');
@@ -1290,12 +1358,14 @@
}
}
+ @override
bool hitTestChildren(HitTestResult result, { Point position }) {
if (_foregroundPainter != null && (_foregroundPainter.hitTest(position) ?? false))
return true;
return super.hitTestChildren(result, position: position);
}
+ @override
bool hitTestSelf(Point position) {
return _painter != null && (_painter.hitTest(position) ?? true);
}
@@ -1340,6 +1410,7 @@
canvas.restore();
}
+ @override
void paint(PaintingContext context, Offset offset) {
if (_painter != null)
_paintWithPainter(context.canvas, offset, _painter);
@@ -1370,6 +1441,7 @@
PointerUpEventListener onPointerUp;
PointerCancelEventListener onPointerCancel;
+ @override
void handleEvent(PointerEvent event, HitTestEntry entry) {
if (onPointerDown != null && event is PointerDownEvent)
return onPointerDown(event);
@@ -1381,6 +1453,7 @@
return onPointerCancel(event);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
List<String> listeners = <String>[];
@@ -1409,6 +1482,8 @@
/// for the surround tree.
class RenderRepaintBoundary extends RenderProxyBox {
RenderRepaintBoundary({ RenderBox child }) : super(child);
+
+ @override
bool get isRepaintBoundary => true;
}
@@ -1455,6 +1530,7 @@
bool get _effectiveIgnoringSemantics => ignoringSemantics == null ? ignoring : ignoringSemantics;
+ @override
bool hitTest(HitTestResult result, { Point position }) {
return ignoring ? false : super.hitTest(result, position: position);
}
@@ -1462,11 +1538,13 @@
// TODO(ianh): figure out a way to still include labels and flags in
// descendants, just make them non-interactive, even when
// _effectiveIgnoringSemantics is true
+ @override
void visitChildrenForSemantics(RenderObjectVisitor visitor) {
if (child != null && !_effectiveIgnoringSemantics)
visitor(child);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('ignoring: $ignoring');
@@ -1485,6 +1563,7 @@
/// Opaque meta data ignored by the render tree
dynamic metaData;
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('metaData: $metaData');
@@ -1562,6 +1641,7 @@
/// leftwards drag.
double scrollFactor;
+ @override
bool get hasSemantics {
return onTap != null
|| onLongPress != null
@@ -1569,6 +1649,7 @@
|| onVerticalDragUpdate != null;
}
+ @override
Iterable<SemanticAnnotator> getSemanticAnnotators() sync* {
if (hasSemantics) {
yield (SemanticsNode semantics) {
@@ -1580,31 +1661,37 @@
}
}
+ @override
void handleSemanticTap() {
if (onTap != null)
onTap();
}
+ @override
void handleSemanticLongPress() {
if (onLongPress != null)
onLongPress();
}
+ @override
void handleSemanticScrollLeft() {
if (onHorizontalDragUpdate != null)
onHorizontalDragUpdate(size.width * -scrollFactor);
}
+ @override
void handleSemanticScrollRight() {
if (onHorizontalDragUpdate != null)
onHorizontalDragUpdate(size.width * scrollFactor);
}
+ @override
void handleSemanticScrollUp() {
if (onVerticalDragUpdate != null)
onVerticalDragUpdate(size.height * -scrollFactor);
}
+ @override
void handleSemanticScrollDown() {
if (onVerticalDragUpdate != null)
onVerticalDragUpdate(size.height * scrollFactor);
@@ -1668,8 +1755,10 @@
markNeedsSemanticsUpdate(onlyChanges: (value != null) == hadValue);
}
+ @override
bool get hasSemantics => container;
+ @override
Iterable<SemanticAnnotator> getSemanticAnnotators() sync* {
if (checked != null) {
yield (SemanticsNode semantics) {
@@ -1694,6 +1783,8 @@
/// and the gesture detector that goes with them.
class RenderMergeSemantics extends RenderProxyBox {
RenderMergeSemantics({ RenderBox child }) : super(child);
+
+ @override
Iterable<SemanticAnnotator> getSemanticAnnotators() sync* {
yield (SemanticsNode node) { node.mergeAllDescendantsIntoThisNode = true; };
}
@@ -1705,5 +1796,7 @@
/// to it (e.g. text included only for the visual effect).
class RenderExcludeSemantics extends RenderProxyBox {
RenderExcludeSemantics({ RenderBox child }) : super(child);
+
+ @override
void visitChildrenForSemantics(RenderObjectVisitor visitor) { }
}
diff --git a/packages/flutter/lib/src/rendering/rotated_box.dart b/packages/flutter/lib/src/rendering/rotated_box.dart
index 18a151d..059362f 100644
--- a/packages/flutter/lib/src/rendering/rotated_box.dart
+++ b/packages/flutter/lib/src/rendering/rotated_box.dart
@@ -39,6 +39,7 @@
bool get _isVertical => quarterTurns % 2 == 1;
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -46,6 +47,7 @@
return super.getMinIntrinsicWidth(constraints);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -53,6 +55,7 @@
return super.getMaxIntrinsicWidth(constraints);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -60,6 +63,7 @@
return super.getMinIntrinsicHeight(constraints);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -69,6 +73,7 @@
Matrix4 _paintTransform;
+ @override
void performLayout() {
_paintTransform = null;
if (child != null) {
@@ -83,6 +88,7 @@
}
}
+ @override
bool hitTestChildren(HitTestResult result, { Point position }) {
assert(_paintTransform != null || needsLayout || child == null);
if (child == null || _paintTransform == null)
@@ -97,11 +103,13 @@
context.paintChild(child, offset);
}
+ @override
void paint(PaintingContext context, Offset offset) {
if (child != null)
context.pushTransform(needsCompositing, offset, _paintTransform, _paintChild);
}
+ @override
void applyPaintTransform(RenderBox child, Matrix4 transform) {
if (_paintTransform != null)
transform.multiply(_paintTransform);
diff --git a/packages/flutter/lib/src/rendering/semantics.dart b/packages/flutter/lib/src/rendering/semantics.dart
index 1d9c156..bbf047f 100644
--- a/packages/flutter/lib/src/rendering/semantics.dart
+++ b/packages/flutter/lib/src/rendering/semantics.dart
@@ -237,7 +237,10 @@
_markDirty();
}
+ @override
SemanticsNode get parent => super.parent;
+
+ @override
void redepthChildren() {
if (_children != null) {
for (SemanticsNode child in _children)
@@ -261,6 +264,7 @@
static Map<int, SemanticsNode> _nodes = <int, SemanticsNode>{};
static Set<SemanticsNode> _detachedNodes = new Set<SemanticsNode>();
+ @override
void attach() {
super.attach();
assert(!_nodes.containsKey(_id));
@@ -273,6 +277,8 @@
child.attach();
}
}
+
+ @override
void detach() {
super.detach();
assert(_nodes.containsKey(_id));
@@ -440,6 +446,7 @@
return result._actionHandler;
}
+ @override
String toString() {
return '$runtimeType($_id'
'${_dirty ? " (${ _dirtyNodes.contains(this) ? 'dirty' : 'STALE' })" : ""}'
@@ -469,24 +476,37 @@
}
class SemanticsServer extends mojom.SemanticsServer {
+ @override
void addSemanticsListener(mojom.SemanticsListenerProxy listener) {
SemanticsNode.addListener(listener.ptr);
}
+
+ @override
void tap(int nodeID) {
SemanticsNode.getSemanticActionHandlerForId(nodeID, neededFlag: _SemanticFlags.canBeTapped)?.handleSemanticTap();
}
+
+ @override
void longPress(int nodeID) {
SemanticsNode.getSemanticActionHandlerForId(nodeID, neededFlag: _SemanticFlags.canBeLongPressed)?.handleSemanticLongPress();
}
+
+ @override
void scrollLeft(int nodeID) {
SemanticsNode.getSemanticActionHandlerForId(nodeID, neededFlag: _SemanticFlags.canBeScrolledHorizontally)?.handleSemanticScrollLeft();
}
+
+ @override
void scrollRight(int nodeID) {
SemanticsNode.getSemanticActionHandlerForId(nodeID, neededFlag: _SemanticFlags.canBeScrolledHorizontally)?.handleSemanticScrollRight();
}
+
+ @override
void scrollUp(int nodeID) {
SemanticsNode.getSemanticActionHandlerForId(nodeID, neededFlag: _SemanticFlags.canBeScrolledVertically)?.handleSemanticScrollUp();
}
+
+ @override
void scrollDown(int nodeID) {
SemanticsNode.getSemanticActionHandlerForId(nodeID, neededFlag: _SemanticFlags.canBeScrolledVertically)?.handleSemanticScrollDown();
}
diff --git a/packages/flutter/lib/src/rendering/shifted_box.dart b/packages/flutter/lib/src/rendering/shifted_box.dart
index 744b10c..ec37a33 100644
--- a/packages/flutter/lib/src/rendering/shifted_box.dart
+++ b/packages/flutter/lib/src/rendering/shifted_box.dart
@@ -15,6 +15,7 @@
this.child = child;
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -22,6 +23,7 @@
return super.getMinIntrinsicWidth(constraints);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -29,6 +31,7 @@
return super.getMaxIntrinsicWidth(constraints);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -36,6 +39,7 @@
return super.getMinIntrinsicHeight(constraints);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -43,6 +47,7 @@
return super.getMaxIntrinsicHeight(constraints);
}
+ @override
double computeDistanceToActualBaseline(TextBaseline baseline) {
double result;
if (child != null) {
@@ -57,6 +62,7 @@
return result;
}
+ @override
void paint(PaintingContext context, Offset offset) {
if (child != null) {
final BoxParentData childParentData = child.parentData;
@@ -64,6 +70,7 @@
}
}
+ @override
bool hitTestChildren(HitTestResult result, { Point position }) {
if (child != null) {
final BoxParentData childParentData = child.parentData;
@@ -103,6 +110,7 @@
markNeedsLayout();
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
double totalPadding = padding.left + padding.right;
@@ -111,6 +119,7 @@
return constraints.constrainWidth(totalPadding);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
double totalPadding = padding.left + padding.right;
@@ -119,6 +128,7 @@
return constraints.constrainWidth(totalPadding);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
double totalPadding = padding.top + padding.bottom;
@@ -127,6 +137,7 @@
return constraints.constrainHeight(totalPadding);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
double totalPadding = padding.top + padding.bottom;
@@ -135,6 +146,7 @@
return constraints.constrainHeight(totalPadding);
}
+ @override
void performLayout() {
assert(padding != null);
if (child == null) {
@@ -154,6 +166,7 @@
));
}
+ @override
void debugPaintSize(PaintingContext context, Offset offset) {
super.debugPaintSize(context, offset);
assert(() {
@@ -198,6 +211,7 @@
});
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('padding: $padding');
@@ -274,6 +288,7 @@
markNeedsLayout();
}
+ @override
void performLayout() {
final bool shrinkWrapWidth = _widthFactor != null || constraints.maxWidth == double.INFINITY;
final bool shrinkWrapHeight = _heightFactor != null || constraints.maxHeight == double.INFINITY;
@@ -290,6 +305,7 @@
}
}
+ @override
void debugPaintSize(PaintingContext context, Offset offset) {
super.debugPaintSize(context, offset);
assert(() {
@@ -347,6 +363,7 @@
});
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('alignment: $alignment');
@@ -461,32 +478,39 @@
);
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return constraints.minWidth;
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return constraints.minWidth;
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return constraints.minHeight;
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return constraints.minHeight;
}
+ @override
bool get sizedByParent => true;
+ @override
void performResize() {
size = constraints.biggest;
}
+ @override
void performLayout() {
if (child != null) {
child.layout(_getInnerConstraints(constraints), parentUsesSize: true);
@@ -495,6 +519,7 @@
}
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('minWidth: ${minWidth ?? "use parent minWidth constraint"}');
@@ -550,32 +575,39 @@
return constraints.constrain(_delegate.getSize(constraints));
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return _getSize(constraints).width;
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return _getSize(constraints).width;
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return _getSize(constraints).height;
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
return _getSize(constraints).height;
}
+ @override
bool get sizedByParent => true;
+ @override
void performResize() {
size = _getSize(constraints);
}
+ @override
void performLayout() {
if (child != null) {
BoxConstraints childConstraints = delegate.getConstraintsForChild(constraints);
@@ -624,6 +656,7 @@
markNeedsLayout();
}
+ @override
void performLayout() {
if (child != null) {
child.layout(constraints.loosen(), parentUsesSize: true);
@@ -636,6 +669,7 @@
}
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('baseline: $baseline');
diff --git a/packages/flutter/lib/src/rendering/stack.dart b/packages/flutter/lib/src/rendering/stack.dart
index 8bf2f3e..d360f5c 100644
--- a/packages/flutter/lib/src/rendering/stack.dart
+++ b/packages/flutter/lib/src/rendering/stack.dart
@@ -114,6 +114,7 @@
);
}
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -126,8 +127,10 @@
bottom == typedOther.bottom;
}
+ @override
int get hashCode => hashValues(left, top, right, bottom);
+ @override
String toString() => "RelativeRect.fromLTRB(${left?.toStringAsFixed(1)}, ${top?.toStringAsFixed(1)}, ${right?.toStringAsFixed(1)}, ${bottom?.toStringAsFixed(1)})";
}
@@ -172,6 +175,7 @@
/// children in the stack.
bool get isPositioned => top != null || right != null || bottom != null || left != null || width != null || height != null;
+ @override
String toString() {
List<String> values = <String>[];
if (top != null)
@@ -205,6 +209,7 @@
bool _hasVisualOverflow = false;
+ @override
void setupParentData(RenderBox child) {
if (child.parentData is! StackParentData)
child.parentData = new StackParentData();
@@ -219,6 +224,7 @@
}
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
double width = constraints.minWidth;
@@ -234,6 +240,7 @@
return width;
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
bool hasNonPositionedChildren = false;
@@ -254,6 +261,7 @@
return width;
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
double height = constraints.minHeight;
@@ -269,6 +277,7 @@
return height;
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
bool hasNonPositionedChildren = false;
@@ -289,10 +298,12 @@
return height;
}
+ @override
double computeDistanceToActualBaseline(TextBaseline baseline) {
return defaultComputeDistanceToHighestActualBaseline(baseline);
}
+ @override
void performLayout() {
_hasVisualOverflow = false;
bool hasNonPositionedChildren = false;
@@ -375,12 +386,14 @@
}
}
+ @override
bool hitTestChildren(HitTestResult result, { Point position }) {
return defaultHitTestChildren(result, position: position);
}
void paintStack(PaintingContext context, Offset offset);
+ @override
void paint(PaintingContext context, Offset offset) {
if (_hasVisualOverflow) {
context.pushClipRect(needsCompositing, offset, Point.origin & size, paintStack);
@@ -389,6 +402,7 @@
}
}
+ @override
Rect describeApproximatePaintClip(RenderObject child) => _hasVisualOverflow ? Point.origin & size : null;
}
@@ -431,6 +445,7 @@
alignment: alignment
);
+ @override
void paintStack(PaintingContext context, Offset offset) {
defaultPaint(context, offset);
}
@@ -476,6 +491,7 @@
return child;
}
+ @override
bool hitTestChildren(HitTestResult result, { Point position }) {
if (firstChild == null)
return false;
@@ -487,6 +503,7 @@
return child.hitTest(result, position: transformed);
}
+ @override
void paintStack(PaintingContext context, Offset offset) {
if (firstChild == null)
return;
diff --git a/packages/flutter/lib/src/rendering/view.dart b/packages/flutter/lib/src/rendering/view.dart
index 9a982ad..df99ec1 100644
--- a/packages/flutter/lib/src/rendering/view.dart
+++ b/packages/flutter/lib/src/rendering/view.dart
@@ -26,6 +26,7 @@
/// The orientation of the output surface (aspirational).
final int orientation;
+ @override
String toString() => '$size';
}
@@ -77,12 +78,15 @@
// We never call layout() on this class, so this should never get
// checked. (This class is laid out using scheduleInitialLayout().)
+ @override
void debugAssertDoesMeetConstraints() { assert(false); }
+ @override
void performResize() {
assert(false);
}
+ @override
void performLayout() {
if (configuration.orientation != _orientation) {
if (_orientation != null && child != null)
@@ -96,6 +100,7 @@
child.layout(new BoxConstraints.tight(_size));
}
+ @override
void rotate({ int oldAngle, int newAngle, Duration time }) {
assert(false); // nobody tells the screen to rotate, the whole rotate() dance is started from our performResize()
}
@@ -107,8 +112,10 @@
return true;
}
+ @override
bool get isRepaintBoundary => true;
+ @override
void paint(PaintingContext context, Offset offset) {
if (child != null)
context.paintChild(child, offset);
@@ -138,9 +145,13 @@
}
}
+ @override
Rect get paintBounds => Point.origin & size;
+
+ @override
Rect get semanticBounds => Point.origin & size;
+ @override
void debugFillDescription(List<String> description) {
// call to ${super.debugFillDescription(prefix)} is omitted because the root superclasses don't include any interesting information for this class
description.add('window size: ${ui.window.size} (in device pixels)');
diff --git a/packages/flutter/lib/src/rendering/viewport.dart b/packages/flutter/lib/src/rendering/viewport.dart
index eb4b3f4..d56b230 100644
--- a/packages/flutter/lib/src/rendering/viewport.dart
+++ b/packages/flutter/lib/src/rendering/viewport.dart
@@ -55,6 +55,7 @@
}
}
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -65,8 +66,10 @@
containerSize == typedOther.containerSize;
}
+ @override
int get hashCode => hashValues(contentSize, containerSize);
+ @override
String toString() => 'ViewportDimensions(container: $containerSize, content: $contentSize)';
}
@@ -125,6 +128,7 @@
/// If the viewport is scrollable in a particular direction (e.g., vertically),
/// the child is given layout constraints that are fully unconstrainted in
/// that direction (e.g., the child can be as tall as it wants).
+ @override
Axis get mainAxis => _mainAxis;
Axis _mainAxis;
void set mainAxis(Axis value) {
@@ -163,11 +167,13 @@
markNeedsPaint();
}
+ @override
void attach() {
super.attach();
_overlayPainter?.attach(this);
}
+ @override
void detach() {
super.detach();
_overlayPainter?.detach();
@@ -190,11 +196,13 @@
);
}
+ @override
void applyPaintTransform(RenderBox child, Matrix4 transform) {
final Offset effectivePaintOffset = _effectivePaintOffset;
super.applyPaintTransform(child, transform.translate(effectivePaintOffset.dx, effectivePaintOffset.dy));
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('paintOffset: $paintOffset');
@@ -243,6 +251,7 @@
return innerConstraints;
}
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -250,6 +259,7 @@
return super.getMinIntrinsicWidth(constraints);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -257,6 +267,7 @@
return super.getMaxIntrinsicWidth(constraints);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -264,6 +275,7 @@
return super.getMinIntrinsicHeight(constraints);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.debugAssertIsNormalized);
if (child != null)
@@ -276,6 +288,7 @@
// scroll the RenderViewport, it would shift in its parent if the
// parent was baseline-aligned, which makes no sense.
+ @override
void performLayout() {
ViewportDimensions oldDimensions = dimensions;
if (child != null) {
@@ -298,6 +311,7 @@
return paintOffset < Offset.zero || !(Offset.zero & size).contains((paintOffset & child.size).bottomRight);
}
+ @override
void paint(PaintingContext context, Offset offset) {
if (child != null) {
final Offset effectivePaintOffset = _effectivePaintOffset;
@@ -315,12 +329,14 @@
}
}
+ @override
Rect describeApproximatePaintClip(RenderObject child) {
if (child != null && _shouldClipAtPaintOffset(_effectivePaintOffset))
return Point.origin & size;
return null;
}
+ @override
bool hitTestChildren(HitTestResult result, { Point position }) {
if (child != null) {
assert(child.parentData is BoxParentData);
@@ -367,6 +383,7 @@
markNeedsLayout();
}
+ @override
bool hitTestChildren(HitTestResult result, { Point position }) {
return defaultHitTestChildren(result, position: position + -_effectivePaintOffset);
}
@@ -376,12 +393,15 @@
_overlayPainter?.paint(context, offset);
}
+ @override
void paint(PaintingContext context, Offset offset) {
context.pushClipRect(needsCompositing, offset, Point.origin & size, _paintContents);
}
+ @override
Rect describeApproximatePaintClip(RenderObject child) => Point.origin & size;
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('virtual child count: $virtualChildCount');
diff --git a/packages/flutter/lib/src/scheduler/scheduler.dart b/packages/flutter/lib/src/scheduler/scheduler.dart
index 4a32f86..998c4a0 100644
--- a/packages/flutter/lib/src/scheduler/scheduler.dart
+++ b/packages/flutter/lib/src/scheduler/scheduler.dart
@@ -91,6 +91,7 @@
abstract class Scheduler extends BindingBase {
/// Requires clients to use the [scheduler] singleton
+ @override
void initInstances() {
super.initInstances();
_instance = this;
diff --git a/packages/flutter/lib/src/services/activity.dart b/packages/flutter/lib/src/services/activity.dart
index 6bba0fb..4e5d835 100644
--- a/packages/flutter/lib/src/services/activity.dart
+++ b/packages/flutter/lib/src/services/activity.dart
@@ -11,14 +11,29 @@
export 'package:sky_services/activity/activity.mojom.dart';
-/// Dart wrapper around Activity mojo service available in Flutter on Android.
-///
-/// Most clients will want to use these methods instead of the activity service
-/// directly.
+// Dart wrapper around Activity mojo service available in Flutter on Android.
+//
+// Most clients will want to use these methods instead of the activity service
+// directly.
-const int NEW_DOCUMENT = 0x00080000;
-const int NEW_TASK = 0x10000000;
-const int MULTIPLE_TASK = 0x08000000;
+// The constants below are from
+// http://developer.android.com/reference/android/content/Intent.html
+
+/// Open a document into a new task rooted at the activity launched by
+/// this Intent.
+///
+/// See Android's Intent.FLAG_ACTIVITY_NEW_DOCUMENT.
+const int NEW_DOCUMENT = 0x00080000; // ignore: constant_identifier_names
+
+/// Start a new task on this history stack.
+///
+/// See Android's Intent.FLAG_ACTIVITY_NEW_TASK.
+const int NEW_TASK = 0x10000000; // ignore: constant_identifier_names
+
+/// Create a new task and launch an activity into it.
+///
+/// See Android's Intent.FLAG_ACTIVITY_MULTIPLE_TASK.
+const int MULTIPLE_TASK = 0x08000000; // ignore: constant_identifier_names
ActivityProxy _initActivityProxy() {
ActivityProxy activity = new ActivityProxy.unbound();
diff --git a/packages/flutter/lib/src/services/assertions.dart b/packages/flutter/lib/src/services/assertions.dart
index 26aaab3..7d159e1 100644
--- a/packages/flutter/lib/src/services/assertions.dart
+++ b/packages/flutter/lib/src/services/assertions.dart
@@ -4,6 +4,9 @@
class FlutterError extends AssertionError {
FlutterError(this.message);
+
final String message;
+
+ @override
String toString() => message;
}
diff --git a/packages/flutter/lib/src/services/asset_bundle.dart b/packages/flutter/lib/src/services/asset_bundle.dart
index 43df8f9..d6977cf 100644
--- a/packages/flutter/lib/src/services/asset_bundle.dart
+++ b/packages/flutter/lib/src/services/asset_bundle.dart
@@ -21,6 +21,8 @@
ImageResource loadImage(String key);
Future<String> loadString(String key);
Future<core.MojoDataPipeConsumer> load(String key);
+
+ @override
String toString() => '$runtimeType@$hashCode()';
}
@@ -31,16 +33,20 @@
String _urlFromKey(String key) => _baseUrl.resolve(key).toString();
+ @override
Future<core.MojoDataPipeConsumer> load(String key) async {
return (await fetchUrl(_urlFromKey(key))).body;
}
+ @override
ImageResource loadImage(String key) => imageCache.load(_urlFromKey(key));
+ @override
Future<String> loadString(String key) async {
return (await http.get(_urlFromKey(key))).body;
}
+ @override
String toString() => '$runtimeType@$hashCode($_baseUrl)';
}
@@ -54,6 +60,7 @@
return new ImageInfo(image: await decodeImageFromDataPipe(await load(key)));
}
+ @override
ImageResource loadImage(String key) {
return imageResourceCache.putIfAbsent(key, () {
return new ImageResource(fetchImage(key));
@@ -66,6 +73,7 @@
return new String.fromCharCodes(new Uint8List.view(data.buffer));
}
+ @override
Future<String> loadString(String key) {
return _stringCache.putIfAbsent(key, () => _fetchString(key));
}
@@ -90,6 +98,7 @@
AssetBundleProxy _bundle;
+ @override
Future<core.MojoDataPipeConsumer> load(String key) async {
return (await _bundle.ptr.getAsStream(key)).assetData;
}
diff --git a/packages/flutter/lib/src/services/binding.dart b/packages/flutter/lib/src/services/binding.dart
index ff0023c..165b07b 100644
--- a/packages/flutter/lib/src/services/binding.dart
+++ b/packages/flutter/lib/src/services/binding.dart
@@ -34,10 +34,12 @@
assert(() { _debugInitialized = true; return true; });
}
+ @override
String toString() => '<$runtimeType>';
}
abstract class Services extends BindingBase {
+ @override
void initInstances() {
super.initInstances();
new MojoShell();
diff --git a/packages/flutter/lib/src/services/image_cache.dart b/packages/flutter/lib/src/services/image_cache.dart
index cf06a5d..387d7c6 100644
--- a/packages/flutter/lib/src/services/image_cache.dart
+++ b/packages/flutter/lib/src/services/image_cache.dart
@@ -24,6 +24,7 @@
final String _url;
final double _scale;
+ @override
Future<ImageInfo> loadImage() async {
UrlResponse response = await fetchUrl(_url);
if (response.statusCode >= 400) {
@@ -36,6 +37,7 @@
);
}
+ @override
bool operator ==(dynamic other) {
if (other is! _UrlFetcher)
return false;
@@ -43,6 +45,7 @@
return _url == typedOther._url && _scale == typedOther._scale;
}
+ @override
int get hashCode => hashValues(_url, _scale);
}
diff --git a/packages/flutter/lib/src/services/image_resource.dart b/packages/flutter/lib/src/services/image_resource.dart
index cc8e008..073821c 100644
--- a/packages/flutter/lib/src/services/image_resource.dart
+++ b/packages/flutter/lib/src/services/image_resource.dart
@@ -9,8 +9,11 @@
class ImageInfo {
ImageInfo({ this.image, this.scale: 1.0 });
+
final ui.Image image;
final double scale;
+
+ @override
String toString() => '$image @ ${scale}x';
}
@@ -89,6 +92,7 @@
debugPrint('------------------------------------------------------------------------');
}
+ @override
String toString() {
StringBuffer result = new StringBuffer();
result.write('$runtimeType(');
diff --git a/packages/flutter/lib/src/widgets/app.dart b/packages/flutter/lib/src/widgets/app.dart
index d1b91aa..9b280d1 100644
--- a/packages/flutter/lib/src/widgets/app.dart
+++ b/packages/flutter/lib/src/widgets/app.dart
@@ -99,6 +99,7 @@
/// representative of what will happen in release mode.
final bool debugShowCheckedModeBanner;
+ @override
WidgetsAppState<WidgetsApp> createState() => new WidgetsAppState<WidgetsApp>();
}
@@ -112,6 +113,7 @@
LocaleQueryData _localeData;
+ @override
void initState() {
super.initState();
_navigator = new GlobalObjectKey(this);
@@ -119,11 +121,13 @@
WidgetFlutterBinding.instance.addObserver(this);
}
+ @override
void dispose() {
WidgetFlutterBinding.instance.removeObserver(this);
super.dispose();
}
+ @override
bool didPopRoute() {
assert(mounted);
NavigatorState navigator = _navigator.currentState;
@@ -135,6 +139,7 @@
return result;
}
+ @override
void didChangeMetrics() {
setState(() {
// The properties of ui.window have changed. We use them in our build
@@ -142,6 +147,7 @@
});
}
+ @override
void didChangeLocale(Locale locale) {
if (config.onLocaleChanged != null) {
config.onLocaleChanged(locale).then((LocaleQueryData data) {
@@ -151,10 +157,12 @@
}
}
+ @override
void didChangeAppLifecycleState(AppLifecycleState state) { }
NavigatorObserver get navigatorObserver => null;
+ @override
Widget build(BuildContext context) {
if (config.onLocaleChanged != null && _localeData == null) {
// If the app expects a locale but we don't yet know the locale, then
diff --git a/packages/flutter/lib/src/widgets/asset_vendor.dart b/packages/flutter/lib/src/widgets/asset_vendor.dart
index 00d6690..69cad02 100644
--- a/packages/flutter/lib/src/widgets/asset_vendor.dart
+++ b/packages/flutter/lib/src/widgets/asset_vendor.dart
@@ -33,6 +33,7 @@
final Map<String, String> keyCache = <String, String>{};
+ @override
Future<core.MojoDataPipeConsumer> load(String key) async {
if (!keyCache.containsKey(key))
keyCache[key] = await resolver.resolve(key);
@@ -57,10 +58,12 @@
resolver: resolver
);
+ @override
_ResolutionAwareAssetResolver get resolver => super.resolver;
final ImageDecoder _imageDecoder;
+ @override
Future<ImageInfo> fetchImage(String key) async {
core.MojoDataPipeConsumer pipe = await load(key);
// At this point the key should be in our key cache, and the image
@@ -93,6 +96,7 @@
_assetManifest = JSON.decode(json);
}
+ @override
Future<String> resolve(String name) async {
_initializer ??= _loadManifest();
await _initializer;
@@ -146,6 +150,7 @@
return candidates[lower];
}
+ @override
String chooseVariant(String main, List<String> candidates) {
SplayTreeMap<double, String> mapping = new SplayTreeMap<double, String>();
for (String candidate in candidates)
@@ -205,8 +210,10 @@
final Widget child;
final ImageDecoder imageDecoder;
+ @override
_AssetVendorState createState() => new _AssetVendorState();
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('bundle: $bundle');
@@ -230,11 +237,13 @@
);
}
+ @override
void initState() {
super.initState();
_initBundle();
}
+ @override
void didUpdateConfig(AssetVendor oldConfig) {
if (config.bundle != oldConfig.bundle ||
config.devicePixelRatio != oldConfig.devicePixelRatio) {
@@ -242,10 +251,12 @@
}
}
+ @override
Widget build(BuildContext context) {
return new DefaultAssetBundle(bundle: _bundle, child: config.child);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('bundle: $_bundle');
diff --git a/packages/flutter/lib/src/widgets/auto_layout.dart b/packages/flutter/lib/src/widgets/auto_layout.dart
index cd4eed3..5e2fab2 100644
--- a/packages/flutter/lib/src/widgets/auto_layout.dart
+++ b/packages/flutter/lib/src/widgets/auto_layout.dart
@@ -19,8 +19,10 @@
final AutoLayoutDelegate delegate;
+ @override
RenderAutoLayout createRenderObject(BuildContext context) => new RenderAutoLayout(delegate: delegate);
+ @override
void updateRenderObject(BuildContext context, RenderAutoLayout renderObject) {
renderObject.delegate = delegate;
}
@@ -32,6 +34,7 @@
final AutoLayoutRect rect;
+ @override
void applyParentData(RenderObject renderObject) {
assert(renderObject.parentData is AutoLayoutParentData);
final AutoLayoutParentData parentData = renderObject.parentData;
diff --git a/packages/flutter/lib/src/widgets/basic.dart b/packages/flutter/lib/src/widgets/basic.dart
index cb1c88e..300600e 100644
--- a/packages/flutter/lib/src/widgets/basic.dart
+++ b/packages/flutter/lib/src/widgets/basic.dart
@@ -68,12 +68,15 @@
/// (i.e., invisible).
final double opacity;
+ @override
RenderOpacity createRenderObject(BuildContext context) => new RenderOpacity(opacity: opacity);
+ @override
void updateRenderObject(BuildContext context, RenderOpacity renderObject) {
renderObject.opacity = opacity;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('opacity: $opacity');
@@ -94,6 +97,7 @@
final ShaderCallback shaderCallback;
final TransferMode transferMode;
+ @override
RenderShaderMask createRenderObject(BuildContext context) {
return new RenderShaderMask(
shaderCallback: shaderCallback,
@@ -101,6 +105,7 @@
);
}
+ @override
void updateRenderObject(BuildContext context, RenderShaderMask renderObject) {
renderObject
..shaderCallback = shaderCallback
@@ -131,8 +136,10 @@
/// Where to paint the box decoration.
final DecorationPosition position;
+ @override
RenderDecoratedBox createRenderObject(BuildContext context) => new RenderDecoratedBox(decoration: decoration, position: position);
+ @override
void updateRenderObject(BuildContext context, RenderDecoratedBox renderObject) {
renderObject
..decoration = decoration
@@ -163,17 +170,20 @@
/// The painter that paints after the children.
final CustomPainter foregroundPainter;
+ @override
RenderCustomPaint createRenderObject(BuildContext context) => new RenderCustomPaint(
painter: painter,
foregroundPainter: foregroundPainter
);
+ @override
void updateRenderObject(BuildContext context, RenderCustomPaint renderObject) {
renderObject
..painter = painter
..foregroundPainter = foregroundPainter;
}
+ @override
void didUnmountRenderObject(RenderCustomPaint renderObject) {
renderObject
..painter = null
@@ -190,12 +200,15 @@
/// If non-null, determines which clip to use.
final CustomClipper<Rect> clipper;
+ @override
RenderClipRect createRenderObject(BuildContext context) => new RenderClipRect(clipper: clipper);
+ @override
void updateRenderObject(BuildContext context, RenderClipRect renderObject) {
renderObject.clipper = clipper;
}
+ @override
void didUnmountRenderObject(RenderClipRect renderObject) {
renderObject.clipper = null;
}
@@ -222,8 +235,10 @@
/// object.
final double yRadius;
+ @override
RenderClipRRect createRenderObject(BuildContext context) => new RenderClipRRect(xRadius: xRadius, yRadius: yRadius);
+ @override
void updateRenderObject(BuildContext context, RenderClipRRect renderObject) {
renderObject
..xRadius = xRadius
@@ -241,12 +256,15 @@
/// If non-null, determines which clip to use.
final CustomClipper<Rect> clipper;
+ @override
RenderClipOval createRenderObject(BuildContext context) => new RenderClipOval(clipper: clipper);
+ @override
void updateRenderObject(BuildContext context, RenderClipOval renderObject) {
renderObject.clipper = clipper;
}
+ @override
void didUnmountRenderObject(RenderClipOval renderObject) {
renderObject.clipper = null;
}
@@ -281,6 +299,7 @@
/// Whether to apply the translation when performing hit tests.
final bool transformHitTests;
+ @override
RenderTransform createRenderObject(BuildContext context) => new RenderTransform(
transform: transform,
origin: origin,
@@ -288,6 +307,7 @@
transformHitTests: transformHitTests
);
+ @override
void updateRenderObject(BuildContext context, RenderTransform renderObject) {
renderObject
..transform = transform
@@ -311,8 +331,10 @@
/// Whether to apply the translation when performing hit tests.
final bool transformHitTests;
+ @override
RenderFractionalTranslation createRenderObject(BuildContext context) => new RenderFractionalTranslation(translation: translation, transformHitTests: transformHitTests);
+ @override
void updateRenderObject(BuildContext context, RenderFractionalTranslation renderObject) {
renderObject
..translation = translation
@@ -334,8 +356,10 @@
/// The number of clockwise quarter turns the child should be rotated.
final int quarterTurns;
+ @override
RenderRotatedBox createRenderObject(BuildContext context) => new RenderRotatedBox(quarterTurns: quarterTurns);
+ @override
void updateRenderObject(BuildContext context, RenderRotatedBox renderObject) {
renderObject.quarterTurns = quarterTurns;
}
@@ -356,8 +380,10 @@
/// The amount to pad the child in each dimension.
final EdgeInsets padding;
+ @override
RenderPadding createRenderObject(BuildContext context) => new RenderPadding(padding: padding);
+ @override
void updateRenderObject(BuildContext context, RenderPadding renderObject) {
renderObject.padding = padding;
}
@@ -407,8 +433,10 @@
/// Can be both greater and less than 1.0 but must be positive.
final double heightFactor;
+ @override
RenderPositionedBox createRenderObject(BuildContext context) => new RenderPositionedBox(alignment: alignment, widthFactor: widthFactor, heightFactor: heightFactor);
+ @override
void updateRenderObject(BuildContext context, RenderPositionedBox renderObject) {
renderObject
..alignment = alignment
@@ -440,8 +468,10 @@
final SingleChildLayoutDelegate delegate;
+ @override
RenderCustomSingleChildLayoutBox createRenderObject(BuildContext context) => new RenderCustomSingleChildLayoutBox(delegate: delegate);
+ @override
void updateRenderObject(BuildContext context, RenderCustomSingleChildLayoutBox renderObject) {
renderObject.delegate = delegate;
}
@@ -461,6 +491,7 @@
/// An object representing the identity of this child.
final Object id;
+ @override
void applyParentData(RenderObject renderObject) {
assert(renderObject.parentData is MultiChildLayoutParentData);
final MultiChildLayoutParentData parentData = renderObject.parentData;
@@ -472,6 +503,7 @@
}
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('id: $id');
@@ -498,10 +530,12 @@
/// The delegate that controls the layout of the children.
final MultiChildLayoutDelegate delegate;
+ @override
RenderCustomMultiChildLayoutBox createRenderObject(BuildContext context) {
return new RenderCustomMultiChildLayoutBox(delegate: delegate);
}
+ @override
void updateRenderObject(BuildContext context, RenderCustomMultiChildLayoutBox renderObject) {
renderObject.delegate = delegate;
}
@@ -521,6 +555,7 @@
/// If non-null, requires the child to have exactly this height.
final double height;
+ @override
RenderConstrainedBox createRenderObject(BuildContext context) => new RenderConstrainedBox(
additionalConstraints: _additionalConstraints
);
@@ -529,10 +564,12 @@
return new BoxConstraints.tightFor(width: width, height: height);
}
+ @override
void updateRenderObject(BuildContext context, RenderConstrainedBox renderObject) {
renderObject.additionalConstraints = _additionalConstraints;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (width != null)
@@ -556,12 +593,15 @@
/// The additional constraints to impose on the child.
final BoxConstraints constraints;
+ @override
RenderConstrainedBox createRenderObject(BuildContext context) => new RenderConstrainedBox(additionalConstraints: constraints);
+ @override
void updateRenderObject(BuildContext context, RenderConstrainedBox renderObject) {
renderObject.additionalConstraints = constraints;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('$constraints');
@@ -587,17 +627,20 @@
/// incoming height constraint multipled by this factor.
final double height;
+ @override
RenderFractionallySizedBox createRenderObject(BuildContext context) => new RenderFractionallySizedBox(
widthFactor: width,
heightFactor: height
);
+ @override
void updateRenderObject(BuildContext context, RenderFractionallySizedBox renderObject) {
renderObject
..widthFactor = width
..heightFactor = height;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (width != null)
@@ -649,6 +692,7 @@
/// with the center of the parent.
final FractionalOffset alignment;
+ @override
RenderOverflowBox createRenderObject(BuildContext context) => new RenderOverflowBox(
minWidth: minWidth,
maxWidth: maxWidth,
@@ -657,6 +701,7 @@
alignment: alignment
);
+ @override
void updateRenderObject(BuildContext context, RenderOverflowBox renderObject) {
renderObject
..minWidth = minWidth
@@ -666,6 +711,7 @@
..alignment = alignment;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (minWidth != null)
@@ -685,8 +731,10 @@
final Size size;
+ @override
RenderSizedOverflowBox createRenderObject(BuildContext context) => new RenderSizedOverflowBox(requestedSize: size);
+ @override
void updateRenderObject(BuildContext context, RenderSizedOverflowBox renderObject) {
renderObject.requestedSize = size;
}
@@ -699,6 +747,7 @@
OffStage({ Key key, Widget child })
: super(key: key, child: child);
+ @override
RenderOffStage createRenderObject(BuildContext context) => new RenderOffStage();
}
@@ -740,12 +789,15 @@
/// a 16:9 width:height aspect ratio would have a value of 16.0/9.0.
final double aspectRatio;
+ @override
RenderAspectRatio createRenderObject(BuildContext context) => new RenderAspectRatio(aspectRatio: aspectRatio);
+ @override
void updateRenderObject(BuildContext context, RenderAspectRatio renderObject) {
renderObject.aspectRatio = aspectRatio;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('aspectRatio: $aspectRatio');
@@ -774,8 +826,10 @@
/// If non-null, force the child's height to be a multiple of this value.
final double stepHeight;
+ @override
RenderIntrinsicWidth createRenderObject(BuildContext context) => new RenderIntrinsicWidth(stepWidth: stepWidth, stepHeight: stepHeight);
+ @override
void updateRenderObject(BuildContext context, RenderIntrinsicWidth renderObject) {
renderObject
..stepWidth = stepWidth
@@ -792,6 +846,8 @@
/// This class is relatively expensive. Avoid using it where possible.
class IntrinsicHeight extends SingleChildRenderObjectWidget {
IntrinsicHeight({ Key key, Widget child }) : super(key: key, child: child);
+
+ @override
RenderIntrinsicHeight createRenderObject(BuildContext context) => new RenderIntrinsicHeight();
}
@@ -810,8 +866,10 @@
/// The type of baseline to use for positioning the child.
final TextBaseline baselineType;
+ @override
RenderBaseline createRenderObject(BuildContext context) => new RenderBaseline(baseline: baseline, baselineType: baselineType);
+ @override
void updateRenderObject(BuildContext context, RenderBaseline renderObject) {
renderObject
..baseline = baseline
@@ -863,6 +921,7 @@
final ViewportDimensionsChangeCallback onPaintOffsetUpdateNeeded;
+ @override
RenderViewport createRenderObject(BuildContext context) {
return new RenderViewport(
paintOffset: paintOffset,
@@ -873,6 +932,7 @@
);
}
+ @override
void updateRenderObject(BuildContext context, RenderViewport renderObject) {
// Order dependency: RenderViewport validates scrollOffset based on mainAxis.
renderObject
@@ -943,6 +1003,7 @@
return padding + decorationPadding;
}
+ @override
Widget build(BuildContext context) {
Widget current = child;
@@ -976,6 +1037,7 @@
return current;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (constraints != null)
@@ -1014,8 +1076,10 @@
/// The direction to use as the main axis.
final Axis mainAxis;
+ @override
RenderBlock createRenderObject(BuildContext context) => new RenderBlock(mainAxis: mainAxis);
+ @override
void updateRenderObject(BuildContext context, RenderBlock renderObject) {
renderObject.mainAxis = mainAxis;
}
@@ -1054,8 +1118,10 @@
/// How to align the non-positioned children in the stack.
final FractionalOffset alignment;
+ @override
RenderStack createRenderObject(BuildContext context) => new RenderStack(alignment: alignment);
+ @override
void updateRenderObject(BuildContext context, RenderStack renderObject) {
renderObject.alignment = alignment;
}
@@ -1078,8 +1144,10 @@
/// How to align the non-positioned children in the stack.
final FractionalOffset alignment;
+ @override
RenderIndexedStack createRenderObject(BuildContext context) => new RenderIndexedStack(index: index, alignment: alignment);
+ @override
void updateRenderObject(BuildContext context, RenderIndexedStack renderObject) {
renderObject
..index = index
@@ -1143,6 +1211,7 @@
/// set. The third must be null.
final double height;
+ @override
void applyParentData(RenderObject renderObject) {
assert(renderObject.parentData is StackParentData);
final StackParentData parentData = renderObject.parentData;
@@ -1185,6 +1254,7 @@
}
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (left != null)
@@ -1215,8 +1285,10 @@
/// The delegate that controls the layout of the children.
GridDelegate createDelegate();
+ @override
RenderGrid createRenderObject(BuildContext context) => new RenderGrid(delegate: _delegate);
+ @override
void updateRenderObject(BuildContext context, RenderGrid renderObject) {
renderObject.delegate = _delegate;
}
@@ -1234,6 +1306,7 @@
/// The delegate that controls the layout of the children.
final GridDelegate delegate;
+ @override
GridDelegate createDelegate() => delegate;
}
@@ -1268,6 +1341,7 @@
/// The amount of padding to apply to each child.
final EdgeInsets padding;
+ @override
FixedColumnCountGridDelegate createDelegate() {
return new FixedColumnCountGridDelegate(
columnCount: columnCount,
@@ -1310,6 +1384,7 @@
/// The amount of padding to apply to each child.
final EdgeInsets padding;
+ @override
MaxTileWidthGridDelegate createDelegate() {
return new MaxTileWidthGridDelegate(
maxTileWidth: maxTileWidth,
@@ -1329,6 +1404,7 @@
/// Opaque data passed to the getChildPlacement method of the grid's [GridDelegate].
final DataType placementData;
+ @override
void applyParentData(RenderObject renderObject) {
assert(renderObject.parentData is GridParentData);
final GridParentData parentData = renderObject.parentData;
@@ -1340,6 +1416,7 @@
}
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('placementData: $placementData');
@@ -1369,8 +1446,10 @@
final CrossAxisAlignment crossAxisAlignment;
final TextBaseline textBaseline;
+ @override
RenderFlex createRenderObject(BuildContext context) => new RenderFlex(direction: direction, mainAxisAlignment: mainAxisAlignment, crossAxisAlignment: crossAxisAlignment, textBaseline: textBaseline);
+ @override
void updateRenderObject(BuildContext context, RenderFlex renderObject) {
renderObject
..direction = direction
@@ -1440,6 +1519,7 @@
/// according to the flex factors of the flexible children.
final int flex;
+ @override
void applyParentData(RenderObject renderObject) {
assert(renderObject.parentData is FlexParentData);
final FlexParentData parentData = renderObject.parentData;
@@ -1451,6 +1531,7 @@
}
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('flex: $flex');
@@ -1468,8 +1549,10 @@
final TextSpan text;
+ @override
RenderParagraph createRenderObject(BuildContext context) => new RenderParagraph(text);
+ @override
void updateRenderObject(BuildContext context, RenderParagraph renderObject) {
renderObject.text = text;
}
@@ -1495,8 +1578,10 @@
return result?.style;
}
+ @override
bool updateShouldNotify(DefaultTextStyle old) => style != old.style;
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
'$style'.split('\n').forEach(description.add);
@@ -1529,6 +1614,7 @@
return style;
}
+ @override
Widget build(BuildContext context) {
return new RichText(
text: new TextSpan(
@@ -1538,6 +1624,7 @@
);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('"$data"');
@@ -1610,6 +1697,7 @@
/// the center slice will be stretched only vertically.
final Rect centerSlice;
+ @override
RenderImage createRenderObject(BuildContext context) => new RenderImage(
image: image,
width: width,
@@ -1622,6 +1710,7 @@
centerSlice: centerSlice
);
+ @override
void updateRenderObject(BuildContext context, RenderImage renderObject) {
renderObject
..image = image
@@ -1635,6 +1724,7 @@
..centerSlice = centerSlice;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('image: $image');
@@ -1721,8 +1811,10 @@
/// the center slice will be stretched only vertically.
final Rect centerSlice;
+ @override
_RawImageResourceState createState() => new _RawImageResourceState();
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('image: $image');
@@ -1744,6 +1836,7 @@
}
class _RawImageResourceState extends State<RawImageResource> {
+ @override
void initState() {
super.initState();
config.image.addListener(_handleImageChanged);
@@ -1757,11 +1850,13 @@
});
}
+ @override
void dispose() {
config.image.removeListener(_handleImageChanged);
super.dispose();
}
+ @override
void didUpdateConfig(RawImageResource oldConfig) {
if (config.image != oldConfig.image) {
oldConfig.image.removeListener(_handleImageChanged);
@@ -1769,6 +1864,7 @@
}
}
+ @override
Widget build(BuildContext context) {
return new RawImage(
image: _resolvedImage?.image,
@@ -1844,6 +1940,7 @@
/// the center slice will be stretched only vertically.
final Rect centerSlice;
+ @override
Widget build(BuildContext context) {
return new RawImageResource(
image: imageCache.load(src, scale: scale),
@@ -1857,6 +1954,7 @@
);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('src: $src');
@@ -1902,6 +2000,7 @@
return result?.bundle;
}
+ @override
bool updateShouldNotify(DefaultAssetBundle old) => bundle != old.bundle;
}
@@ -1963,6 +2062,7 @@
/// the center slice will be stretched only vertically.
final Rect centerSlice;
+ @override
Widget build(BuildContext context) {
return new RawImageResource(
image: imageCache.loadProvider(provider),
@@ -1976,6 +2076,7 @@
);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('provider: $provider');
@@ -2062,6 +2163,7 @@
/// the center slice will be stretched only vertically.
final Rect centerSlice;
+ @override
Widget build(BuildContext context) {
return new RawImageResource(
image: (bundle ?? DefaultAssetBundle.of(context)).loadImage(name),
@@ -2075,6 +2177,7 @@
);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('name: $name');
@@ -2122,8 +2225,10 @@
/// tree will be dirty.
final VoidCallback onBuild;
+ @override
RenderBox createRenderObject(BuildContext context) => renderBox;
+ @override
void updateRenderObject(BuildContext context, RenderBox renderObject) {
if (onBuild != null)
onBuild();
@@ -2152,6 +2257,7 @@
final PointerCancelEventListener onPointerCancel;
final HitTestBehavior behavior;
+ @override
RenderPointerListener createRenderObject(BuildContext context) => new RenderPointerListener(
onPointerDown: onPointerDown,
onPointerMove: onPointerMove,
@@ -2160,6 +2266,7 @@
behavior: behavior
);
+ @override
void updateRenderObject(BuildContext context, RenderPointerListener renderObject) {
renderObject
..onPointerDown = onPointerDown
@@ -2169,6 +2276,7 @@
..behavior = behavior;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
List<String> listeners = <String>[];
@@ -2208,6 +2316,8 @@
/// for the surround tree.
class RepaintBoundary extends SingleChildRenderObjectWidget {
RepaintBoundary({ Key key, Widget child }) : super(key: key, child: child);
+
+ @override
RenderRepaintBoundary createRenderObject(BuildContext context) => new RenderRepaintBoundary();
}
@@ -2218,11 +2328,13 @@
final bool ignoring;
final bool ignoringSemantics; // if null, defaults to value of ignoring
+ @override
RenderIgnorePointer createRenderObject(BuildContext context) => new RenderIgnorePointer(
ignoring: ignoring,
ignoringSemantics: ignoringSemantics
);
+ @override
void updateRenderObject(BuildContext context, RenderIgnorePointer renderObject) {
renderObject
..ignoring = ignoring
@@ -2268,12 +2380,14 @@
/// Provides a textual description of the widget.
final String label;
+ @override
RenderSemanticAnnotations createRenderObject(BuildContext context) => new RenderSemanticAnnotations(
container: container,
checked: checked,
label: label
);
+ @override
void updateRenderObject(BuildContext context, RenderSemanticAnnotations renderObject) {
renderObject
..container = container
@@ -2281,6 +2395,7 @@
..label = label;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('container: $container');
@@ -2310,6 +2425,8 @@
/// callbacks.
class MergeSemantics extends SingleChildRenderObjectWidget {
MergeSemantics({ Key key, Widget child }) : super(key: key, child: child);
+
+ @override
RenderMergeSemantics createRenderObject(BuildContext context) => new RenderMergeSemantics();
}
@@ -2321,6 +2438,8 @@
/// redundant with the chip label.
class ExcludeSemantics extends SingleChildRenderObjectWidget {
ExcludeSemantics({ Key key, Widget child }) : super(key: key, child: child);
+
+ @override
RenderExcludeSemantics createRenderObject(BuildContext context) => new RenderExcludeSemantics();
}
@@ -2335,17 +2454,20 @@
final dynamic metaData;
final HitTestBehavior behavior;
+ @override
RenderMetaData createRenderObject(BuildContext context) => new RenderMetaData(
metaData: metaData,
behavior: behavior
);
+ @override
void updateRenderObject(BuildContext context, RenderMetaData renderObject) {
renderObject
..metaData = metaData
..behavior = behavior;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('behavior: $behavior');
@@ -2359,6 +2481,7 @@
final Widget child;
+ @override
Widget build(BuildContext context) => child;
}
@@ -2373,15 +2496,20 @@
/// object identity.
final WidgetBuilder builder;
+ @override
Widget build(BuildContext context) => builder(context);
}
typedef Widget StatefulWidgetBuilder(BuildContext context, StateSetter setState);
class StatefulBuilder extends StatefulWidget {
StatefulBuilder({ Key key, this.builder }) : super(key: key);
+
final StatefulWidgetBuilder builder;
+
+ @override
_StatefulBuilderState createState() => new _StatefulBuilderState();
}
class _StatefulBuilderState extends State<StatefulBuilder> {
+ @override
Widget build(BuildContext context) => config.builder(context, setState);
}
diff --git a/packages/flutter/lib/src/widgets/binding.dart b/packages/flutter/lib/src/widgets/binding.dart
index ac0cf19..9d1b5cb 100644
--- a/packages/flutter/lib/src/widgets/binding.dart
+++ b/packages/flutter/lib/src/widgets/binding.dart
@@ -35,6 +35,7 @@
return _instance;
}
+ @override
void initInstances() {
super.initInstances();
_instance = this;
@@ -60,6 +61,7 @@
void addObserver(BindingObserver observer) => _observers.add(observer);
bool removeObserver(BindingObserver observer) => _observers.remove(observer);
+ @override
void handleMetricsChanged() {
super.handleMetricsChanged();
for (BindingObserver observer in _observers)
@@ -88,6 +90,7 @@
observer.didChangeAppLifecycleState(state);
}
+ @override
void beginFrame() {
buildDirtyElements();
super.beginFrame();
@@ -190,10 +193,13 @@
final RenderObjectWithChildMixin<T> container;
final String debugShortDescription;
+ @override
RenderObjectToWidgetElement<T> createElement() => new RenderObjectToWidgetElement<T>(this);
+ @override
RenderObjectWithChildMixin<T> createRenderObject(BuildContext context) => container;
+ @override
void updateRenderObject(BuildContext context, RenderObject renderObject) { }
RenderObjectToWidgetElement<T> attachToRenderTree([RenderObjectToWidgetElement<T> element]) {
@@ -208,6 +214,7 @@
return element;
}
+ @override
String toStringShort() => debugShortDescription ?? super.toStringShort();
}
@@ -222,40 +229,48 @@
class RenderObjectToWidgetElement<T extends RenderObject> extends RenderObjectElement {
RenderObjectToWidgetElement(RenderObjectToWidgetAdapter<T> widget) : super(widget);
+ @override
RenderObjectToWidgetAdapter<T> get widget => super.widget;
Element _child;
static const Object _rootChildSlot = const Object();
+ @override
void visitChildren(ElementVisitor visitor) {
if (_child != null)
visitor(_child);
}
+ @override
void mount(Element parent, dynamic newSlot) {
assert(parent == null);
super.mount(parent, newSlot);
_child = updateChild(_child, widget.child, _rootChildSlot);
}
+ @override
void update(RenderObjectToWidgetAdapter<T> newWidget) {
super.update(newWidget);
assert(widget == newWidget);
_child = updateChild(_child, widget.child, _rootChildSlot);
}
+ @override
RenderObjectWithChildMixin<T> get renderObject => super.renderObject;
+ @override
void insertChildRenderObject(RenderObject child, dynamic slot) {
assert(slot == _rootChildSlot);
renderObject.child = child;
}
+ @override
void moveChildRenderObject(RenderObject child, dynamic slot) {
assert(false);
}
+ @override
void removeChildRenderObject(RenderObject child) {
assert(renderObject.child == child);
renderObject.child = null;
diff --git a/packages/flutter/lib/src/widgets/checked_mode_banner.dart b/packages/flutter/lib/src/widgets/checked_mode_banner.dart
index 51a21b4..e819d49 100644
--- a/packages/flutter/lib/src/widgets/checked_mode_banner.dart
+++ b/packages/flutter/lib/src/widgets/checked_mode_banner.dart
@@ -30,6 +30,7 @@
..maxHeight = kHeight
..layout();
+ @override
void paint(Canvas canvas, Size size) {
final Paint paintShadow = new Paint()
..color = const Color(0x7F000000)
@@ -44,7 +45,10 @@
textPainter.paint(canvas, kRect.topLeft.toOffset() + kTextAlign);
}
+ @override
bool shouldRepaint(_CheckedModeBannerPainter oldPainter) => false;
+
+ @override
bool hitTest(Point position) => false;
}
@@ -58,6 +62,7 @@
final Widget child;
+ @override
Widget build(BuildContext context) {
Widget result = child;
assert(() {
diff --git a/packages/flutter/lib/src/widgets/child_view.dart b/packages/flutter/lib/src/widgets/child_view.dart
index a02b02b..ccad34c 100644
--- a/packages/flutter/lib/src/widgets/child_view.dart
+++ b/packages/flutter/lib/src/widgets/child_view.dart
@@ -14,6 +14,7 @@
final ChildViewConnection child;
+ @override
Widget build(BuildContext context) {
assert(MediaQuery.of(context) != null);
return new _ChildViewWidget(
@@ -32,8 +33,10 @@
final ChildViewConnection child;
final double scale;
+ @override
RenderChildView createRenderObject(BuildContext context) => new RenderChildView(child: child, scale: scale);
+ @override
void updateRenderObject(BuildContext context, RenderChildView renderObject) {
renderObject
..child = child
diff --git a/packages/flutter/lib/src/widgets/dismissable.dart b/packages/flutter/lib/src/widgets/dismissable.dart
index 8e59925..7aff201 100644
--- a/packages/flutter/lib/src/widgets/dismissable.dart
+++ b/packages/flutter/lib/src/widgets/dismissable.dart
@@ -89,10 +89,12 @@
/// The direction in which the widget can be dismissed.
final DismissDirection direction;
+ @override
_DismissableState createState() => new _DismissableState();
}
class _DismissableState extends State<Dismissable> {
+ @override
void initState() {
super.initState();
_moveController = new AnimationController(duration: _kDismissDuration)
@@ -109,6 +111,7 @@
double _dragExtent = 0.0;
bool _dragUnderway = false;
+ @override
void dispose() {
_moveController?.stop();
_resizeController?.stop();
@@ -273,6 +276,7 @@
}
}
+ @override
Widget build(BuildContext context) {
Widget background = config.background;
if (config.secondaryBackground != null) {
diff --git a/packages/flutter/lib/src/widgets/drag_target.dart b/packages/flutter/lib/src/widgets/drag_target.dart
index c75161d..be67982 100644
--- a/packages/flutter/lib/src/widgets/drag_target.dart
+++ b/packages/flutter/lib/src/widgets/drag_target.dart
@@ -80,8 +80,9 @@
/// Should return a new MultiDragGestureRecognizer instance
/// constructed with the given arguments.
- MultiDragGestureRecognizer<dynamic> createRecognizer(GestureMultiDragStartCallback onStart);
+ MultiDragGestureRecognizer<MultiDragPointerState> createRecognizer(GestureMultiDragStartCallback onStart);
+ @override
_DraggableState<T> createState() => new _DraggableState<T>();
}
@@ -107,6 +108,7 @@
maxSimultaneousDrags: maxSimultaneousDrags
);
+ @override
ImmediateMultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new ImmediateMultiDragGestureRecognizer()..onStart = onStart;
}
@@ -135,6 +137,7 @@
maxSimultaneousDrags: maxSimultaneousDrags
);
+ @override
HorizontalMultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new HorizontalMultiDragGestureRecognizer()..onStart = onStart;
}
@@ -163,6 +166,7 @@
maxSimultaneousDrags: maxSimultaneousDrags
);
+ @override
VerticalMultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new VerticalMultiDragGestureRecognizer()..onStart = onStart;
}
@@ -190,6 +194,7 @@
maxSimultaneousDrags: maxSimultaneousDrags
);
+ @override
DelayedMultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new DelayedMultiDragGestureRecognizer()
..onStart = (Point position) {
@@ -203,6 +208,7 @@
class _DraggableState<T> extends State<DraggableBase<T>> {
+ @override
void initState() {
super.initState();
_recognizer = config.createRecognizer(_startDrag);
@@ -248,6 +254,7 @@
);
}
+ @override
Widget build(BuildContext context) {
assert(Overlay.of(context, debugRequiredFor: config) != null);
final bool canDrag = config.maxSimultaneousDrags == null ||
@@ -282,6 +289,7 @@
/// Called when an acceptable piece of data was dropped over this drag target.
final DragTargetAccept<T> onAccept;
+ @override
_DragTargetState<T> createState() => new _DragTargetState<T>();
}
@@ -319,6 +327,7 @@
config.onAccept(data);
}
+ @override
Widget build(BuildContext context) {
return new MetaData(
metaData: this,
@@ -368,13 +377,18 @@
OverlayEntry _entry;
// Drag API
+ @override
void move(Offset offset) {
_position += offset;
update(_position);
}
+
+ @override
void end(Velocity velocity) {
finish(_DragEndKind.dropped);
}
+
+ @override
void cancel() {
finish(_DragEndKind.canceled);
}
diff --git a/packages/flutter/lib/src/widgets/editable.dart b/packages/flutter/lib/src/widgets/editable.dart
index e722cfa..0abfd02 100644
--- a/packages/flutter/lib/src/widgets/editable.dart
+++ b/packages/flutter/lib/src/widgets/editable.dart
@@ -63,6 +63,7 @@
..composingExtent = inputValue.composing.end;
}
+ @override
void updateEditingState(mojom.EditingState state) {
inputValue = new InputValue(
text: state.text,
@@ -76,6 +77,7 @@
inputValue = inputValue.copyWith(composing: TextRange.empty);
}
+ @override
void submit(mojom.SubmitAction action) {
clearComposing();
onSubmitted();
@@ -101,8 +103,10 @@
static const InputValue empty = const InputValue();
+ @override
String toString() => '$runtimeType(text: \u2524$text\u251C, selection: $selection, composing: $composing)';
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -114,6 +118,7 @@
&& typedOther.composing == composing;
}
+ @override
int get hashCode => hashValues(
text.hashCode,
selection.hashCode,
@@ -182,6 +187,7 @@
/// Called when the user indicates that they are done editing the text in the field.
final ValueChanged<InputValue> onSubmitted;
+ @override
RawInputLineState createState() => new RawInputLineState();
}
@@ -192,9 +198,13 @@
_KeyboardClientImpl _keyboardClient;
KeyboardHandle _keyboardHandle;
+ @override
ScrollBehavior<double, double> createScrollBehavior() => new BoundedBehavior();
+
+ @override
BoundedBehavior get scrollBehavior => super.scrollBehavior;
+ @override
void initState() {
super.initState();
_keyboardClient = new _KeyboardClientImpl(
@@ -204,6 +214,7 @@
);
}
+ @override
void didUpdateConfig(RawInputLine oldConfig) {
if (_keyboardClient.inputValue != config.value) {
_keyboardClient.inputValue = config.value;
@@ -300,6 +311,7 @@
_cursorTimer = new Timer.periodic(_kCursorBlinkHalfPeriod, _cursorTick);
}
+ @override
void dispose() {
if (_isAttachedToKeyboard)
_keyboardHandle.release();
@@ -314,6 +326,7 @@
_showCursor = false;
}
+ @override
Widget buildContent(BuildContext context) {
assert(config.style != null);
assert(config.focusKey != null);
@@ -365,6 +378,7 @@
final Offset paintOffset;
final ViewportDimensionsChangeCallback onPaintOffsetUpdateNeeded;
+ @override
RenderEditableLine createRenderObject(BuildContext context) {
return new RenderEditableLine(
text: _styledTextSpan,
@@ -378,6 +392,7 @@
);
}
+ @override
void updateRenderObject(BuildContext context, RenderEditableLine renderObject) {
renderObject
..text = _styledTextSpan
diff --git a/packages/flutter/lib/src/widgets/focus.dart b/packages/flutter/lib/src/widgets/focus.dart
index 767676b..ab9904e 100644
--- a/packages/flutter/lib/src/widgets/focus.dart
+++ b/packages/flutter/lib/src/widgets/focus.dart
@@ -44,6 +44,7 @@
focusedScope = focusState._focusedScope == _noFocusedScope ? null : focusState._focusedScope;
}
+ @override
bool updateShouldNotify(_FocusScope oldWidget) {
if (scopeFocused != oldWidget.scopeFocused)
return true;
@@ -58,6 +59,7 @@
return false;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (scopeFocused)
@@ -189,16 +191,19 @@
focusScope.focusState._setFocusedScope(key);
}
+ @override
_FocusState createState() => new _FocusState();
}
class _FocusState extends State<Focus> {
+ @override
void initState() {
super.initState();
_updateWidgetRemovalListener(_focusedWidget);
_updateScopeRemovalListener(_focusedScope);
}
+ @override
void dispose() {
_updateWidgetRemovalListener(null);
_updateScopeRemovalListener(null);
@@ -291,6 +296,7 @@
Scrollable.ensureVisible(focusedContext);
}
+ @override
Widget build(BuildContext context) {
MediaQueryData data = MediaQuery.of(context);
if (data != null) {
diff --git a/packages/flutter/lib/src/widgets/framework.dart b/packages/flutter/lib/src/widgets/framework.dart
index 2babda7..4e61e86 100644
--- a/packages/flutter/lib/src/widgets/framework.dart
+++ b/packages/flutter/lib/src/widgets/framework.dart
@@ -32,20 +32,29 @@
/// their values match.
class ValueKey<T> extends Key {
const ValueKey(this.value) : super.constructor();
+
final T value;
+
+ @override
bool operator ==(dynamic other) {
if (other is! ValueKey<T>)
return false;
final ValueKey<T> typedOther = other;
return value == typedOther.value;
}
+
+ @override
int get hashCode => value.hashCode;
+
+ @override
String toString() => '[\'$value\']';
}
/// A [Key] that is only equal to itself.
class UniqueKey extends Key {
const UniqueKey() : super.constructor();
+
+ @override
String toString() => '[$hashCode]';
}
@@ -55,14 +64,21 @@
/// generate that Widget.
class ObjectKey extends Key {
const ObjectKey(this.value) : super.constructor();
+
final Object value;
+
+ @override
bool operator ==(dynamic other) {
if (other is! ObjectKey)
return false;
final ObjectKey typedOther = other;
return identical(value, typedOther.value);
}
+
+ @override
int get hashCode => identityHashCode(value);
+
+ @override
String toString() => '[${value.runtimeType}(${value.hashCode})]';
}
@@ -181,7 +197,10 @@
/// the key's identity.
class LabeledGlobalKey<T extends State<StatefulWidget>> extends GlobalKey<T> {
const LabeledGlobalKey(this._debugLabel) : super.constructor();
+
final String _debugLabel;
+
+ @override
String toString() => '[GlobalKey ${_debugLabel != null ? _debugLabel : hashCode}]';
}
@@ -192,13 +211,19 @@
class GlobalObjectKey extends GlobalKey {
const GlobalObjectKey(this.value) : super.constructor();
final Object value;
+
+ @override
bool operator ==(dynamic other) {
if (other is! GlobalObjectKey)
return false;
final GlobalObjectKey typedOther = other;
return identical(value, typedOther.value);
}
+
+ @override
int get hashCode => identityHashCode(value);
+
+ @override
String toString() => '[$runtimeType ${value.runtimeType}(${value.hashCode})]';
}
@@ -224,6 +249,7 @@
return key == null ? '$runtimeType' : '$runtimeType-$key';
}
+ @override
String toString() {
final String name = toStringShort();
final List<String> data = <String>[];
@@ -251,6 +277,7 @@
/// StatelessWidget always use [StatelessElement]s to represent
/// themselves in the Element tree.
+ @override
StatelessElement createElement() => new StatelessElement(this);
/// Returns another Widget out of which this StatelessWidget is built.
@@ -271,6 +298,7 @@
/// StatefulWidget always use [StatefulElement]s to represent
/// themselves in the Element tree.
+ @override
StatefulElement createElement() => new StatefulElement(this);
/// Returns an instance of the state to which this StatefulWidget is
@@ -390,6 +418,7 @@
/// called.
void dependenciesChanged(Type affectedWidgetType) { }
+ @override
String toString() {
final List<String> data = <String>[];
debugFillDescription(data);
@@ -420,6 +449,7 @@
const ParentDataWidget({ Key key, Widget child })
: super(key: key, child: child);
+ @override
ParentDataElement<T> createElement() => new ParentDataElement<T>(this);
/// Subclasses should override this function to return true if the given
@@ -468,6 +498,7 @@
const InheritedWidget({ Key key, Widget child })
: super(key: key, child: child);
+ @override
InheritedElement createElement() => new InheritedElement(this);
bool updateShouldNotify(InheritedWidget oldWidget);
@@ -480,6 +511,7 @@
const RenderObjectWidget({ Key key }) : super(key: key);
/// RenderObjectWidgets always inflate to a RenderObjectElement subclass.
+ @override
RenderObjectElement createElement();
/// Constructs an instance of the RenderObject class that this
@@ -500,6 +532,7 @@
abstract class LeafRenderObjectWidget extends RenderObjectWidget {
const LeafRenderObjectWidget({ Key key }) : super(key: key);
+ @override
LeafRenderObjectElement createElement() => new LeafRenderObjectElement(this);
}
@@ -511,6 +544,7 @@
final Widget child;
+ @override
SingleChildRenderObjectElement createElement() => new SingleChildRenderObjectElement(this);
}
@@ -527,6 +561,7 @@
final List<Widget> children;
+ @override
MultiChildRenderObjectElement createElement() => new MultiChildRenderObjectElement(this);
}
@@ -633,6 +668,7 @@
int _depth;
/// The configuration for this element.
+ @override
Widget get widget => _widget;
Widget _widget;
@@ -658,6 +694,7 @@
void visitChildren(ElementVisitor visitor) { }
/// Wrapper around visitChildren for BuildContext.
+ @override
void visitChildElements(void visitor(Element element)) {
// don't allow visitChildElements() during build, since children aren't necessarily built yet
assert(!BuildableElement._debugStateLocked);
@@ -908,10 +945,13 @@
assert(() { _debugLifecycleState = _ElementLifecycle.defunct; return true; });
}
+ @override
RenderObject findRenderObject() => renderObject;
Map<Type, InheritedElement> _inheritedWidgets;
Set<InheritedElement> _dependencies;
+
+ @override
InheritedWidget inheritFromWidgetOfExactType(Type targetType) {
InheritedElement ancestor = _inheritedWidgets == null ? null : _inheritedWidgets[targetType];
if (ancestor != null) {
@@ -928,6 +968,7 @@
_inheritedWidgets = _parent?._inheritedWidgets;
}
+ @override
Widget ancestorWidgetOfExactType(Type targetType) {
Element ancestor = _parent;
while (ancestor != null && ancestor.widget.runtimeType != targetType)
@@ -935,6 +976,7 @@
return ancestor?.widget;
}
+ @override
State ancestorStateOfType(TypeMatcher matcher) {
Element ancestor = _parent;
while (ancestor != null) {
@@ -946,6 +988,7 @@
return statefulAncestor?.state;
}
+ @override
RenderObject ancestorRenderObjectOfType(TypeMatcher matcher) {
Element ancestor = _parent;
while (ancestor != null) {
@@ -957,6 +1000,7 @@
return renderObjectAncestor?.renderObject;
}
+ @override
void visitAncestorElements(bool visitor(Element element)) {
Element ancestor = _parent;
while (ancestor != null && visitor(ancestor))
@@ -983,6 +1027,7 @@
return widget != null ? '${widget.toStringShort()}' : '[$runtimeType]';
}
+ @override
String toString() {
final List<String> data = <String>[];
debugFillDescription(data);
@@ -1026,13 +1071,17 @@
Object exception
) : message = _stringify(exception),
super(key: new UniqueKey());
+
final String message;
+
static String _stringify(Object exception) {
try {
return exception.toString();
} catch (e) { }
return 'Error';
}
+
+ @override
RenderBox createRenderObject(BuildContext context) => new RenderErrorBox(message);
}
@@ -1182,10 +1231,12 @@
/// Called by rebuild() after the appropriate checks have been made.
void performRebuild();
+ @override
void dependenciesChanged(Type affectedWidgetType) {
markNeedsBuild();
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (dirty)
@@ -1203,6 +1254,7 @@
WidgetBuilder _builder;
Element _child;
+ @override
void mount(Element parent, dynamic newSlot) {
super.mount(parent, newSlot);
assert(_child == null);
@@ -1221,6 +1273,7 @@
///
/// Called automatically during mount() to generate the first build, and by
/// rebuild() when the element needs updating.
+ @override
void performRebuild() {
assert(_debugSetAllowIgnoredCallsToMarkNeedsBuild(true));
Widget built;
@@ -1257,11 +1310,13 @@
}
}
+ @override
void visitChildren(ElementVisitor visitor) {
if (_child != null)
visitor(_child);
}
+ @override
bool detachChild(Element child) {
assert(child == _child);
_deactivateChild(_child);
@@ -1276,8 +1331,10 @@
_builder = widget.build;
}
+ @override
StatelessWidget get widget => super.widget;
+ @override
void update(StatelessWidget newWidget) {
super.update(newWidget);
assert(widget == newWidget);
@@ -1304,6 +1361,7 @@
State<StatefulWidget> get state => _state;
State<StatefulWidget> _state;
+ @override
void _firstBuild() {
assert(_state._debugLifecycleState == _StateLifecycle.created);
try {
@@ -1325,6 +1383,7 @@
super._firstBuild();
}
+ @override
void update(StatefulWidget newWidget) {
super.update(newWidget);
assert(widget == newWidget);
@@ -1343,11 +1402,13 @@
rebuild();
}
+ @override
void deactivate() {
_state.deactivate();
super.deactivate();
}
+ @override
void unmount() {
super.unmount();
_state.dispose();
@@ -1365,11 +1426,13 @@
_state = null;
}
+ @override
void dependenciesChanged(Type affectedWidgetType) {
super.dependenciesChanged(affectedWidgetType);
_state.dependenciesChanged(affectedWidgetType);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (state != null)
@@ -1382,10 +1445,12 @@
_builder = _build;
}
+ @override
_ProxyWidget get widget => super.widget;
Widget _build(BuildContext context) => widget.child;
+ @override
void update(_ProxyWidget newWidget) {
_ProxyWidget oldWidget = widget;
assert(widget != null);
@@ -1403,14 +1468,16 @@
class ParentDataElement<T extends RenderObjectWidget> extends _ProxyElement {
ParentDataElement(ParentDataWidget<T> widget) : super(widget);
+ @override
ParentDataWidget<T> get widget => super.widget;
+ @override
void mount(Element parent, dynamic slot) {
assert(() {
List<Widget> badAncestors = <Widget>[];
Element ancestor = parent;
while (ancestor != null) {
- if (ancestor is ParentDataElement<dynamic>) {
+ if (ancestor is ParentDataElement<RenderObjectWidget>) {
badAncestors.add(ancestor.widget);
} else if (ancestor is RenderObjectElement) {
if (widget.debugIsValidAncestor(ancestor.widget))
@@ -1434,12 +1501,13 @@
super.mount(parent, slot);
}
+ @override
void notifyDescendants(ParentDataWidget<T> oldWidget) {
void notifyChildren(Element child) {
if (child is RenderObjectElement) {
child.updateParentData(widget);
} else {
- assert(child is! ParentDataElement<dynamic>);
+ assert(child is! ParentDataElement<RenderObjectWidget>);
child.visitChildren(notifyChildren);
}
}
@@ -1452,10 +1520,12 @@
class InheritedElement extends _ProxyElement {
InheritedElement(InheritedWidget widget) : super(widget);
+ @override
InheritedWidget get widget => super.widget;
final Set<Element> _dependants = new HashSet<Element>();
+ @override
void _updateInheritance() {
final Map<Type, InheritedElement> incomingWidgets = _parent?._inheritedWidgets;
if (incomingWidgets != null)
@@ -1465,6 +1535,7 @@
_inheritedWidgets[widget.runtimeType] = this;
}
+ @override
void debugDeactivated() {
assert(() {
assert(_dependants.isEmpty);
@@ -1473,6 +1544,7 @@
super.debugDeactivated();
}
+ @override
void notifyDescendants(InheritedWidget oldWidget) {
if (!widget.updateShouldNotify(oldWidget))
return;
@@ -1494,9 +1566,11 @@
abstract class RenderObjectElement extends BuildableElement {
RenderObjectElement(RenderObjectWidget widget) : super(widget);
+ @override
RenderObjectWidget get widget => super.widget;
/// The underlying [RenderObject] for this element
+ @override
RenderObject get renderObject => _renderObject;
RenderObject _renderObject;
@@ -1509,16 +1583,17 @@
return ancestor;
}
- ParentDataElement<dynamic> _findAncestorParentDataElement() {
+ ParentDataElement<RenderObjectWidget> _findAncestorParentDataElement() {
Element ancestor = _parent;
while (ancestor != null && ancestor is! RenderObjectElement) {
- if (ancestor is ParentDataElement<dynamic>)
+ if (ancestor is ParentDataElement<RenderObjectWidget>)
return ancestor;
ancestor = ancestor._parent;
}
return null;
}
+ @override
void mount(Element parent, dynamic newSlot) {
super.mount(parent, newSlot);
_renderObject = widget.createRenderObject(this);
@@ -1528,6 +1603,7 @@
_dirty = false;
}
+ @override
void update(RenderObjectWidget newWidget) {
super.update(newWidget);
assert(widget == newWidget);
@@ -1540,6 +1616,7 @@
_renderObject.debugOwner = debugGetOwnershipChain(10);
}
+ @override
void performRebuild() {
_dirty = false;
}
@@ -1703,21 +1780,24 @@
return newChildren;
}
+ @override
void deactivate() {
super.deactivate();
assert(!renderObject.attached);
}
+ @override
void unmount() {
super.unmount();
assert(!renderObject.attached);
widget.didUnmountRenderObject(renderObject);
}
- void updateParentData(ParentDataWidget<dynamic> parentData) {
+ void updateParentData(ParentDataWidget<RenderObjectWidget> parentData) {
parentData.applyParentData(renderObject);
}
+ @override
void _updateSlot(dynamic newSlot) {
assert(slot != newSlot);
super._updateSlot(newSlot);
@@ -1725,16 +1805,18 @@
_ancestorRenderObjectElement.moveChildRenderObject(renderObject, slot);
}
+ @override
void attachRenderObject(dynamic newSlot) {
assert(_ancestorRenderObjectElement == null);
_slot = newSlot;
_ancestorRenderObjectElement = _findAncestorRenderObjectElement();
_ancestorRenderObjectElement?.insertChildRenderObject(renderObject, newSlot);
- ParentDataElement<dynamic> parentDataElement = _findAncestorParentDataElement();
+ ParentDataElement<RenderObjectWidget> parentDataElement = _findAncestorParentDataElement();
if (parentDataElement != null)
updateParentData(parentDataElement.widget);
}
+ @override
void detachRenderObject() {
if (_ancestorRenderObjectElement != null) {
_ancestorRenderObjectElement.removeChildRenderObject(renderObject);
@@ -1747,6 +1829,7 @@
void moveChildRenderObject(RenderObject child, dynamic slot);
void removeChildRenderObject(RenderObject child);
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (renderObject != null)
@@ -1758,14 +1841,17 @@
class LeafRenderObjectElement extends RenderObjectElement {
LeafRenderObjectElement(LeafRenderObjectWidget widget): super(widget);
+ @override
void insertChildRenderObject(RenderObject child, dynamic slot) {
assert(false);
}
+ @override
void moveChildRenderObject(RenderObject child, dynamic slot) {
assert(false);
}
+ @override
void removeChildRenderObject(RenderObject child) {
assert(false);
}
@@ -1775,15 +1861,18 @@
class SingleChildRenderObjectElement extends RenderObjectElement {
SingleChildRenderObjectElement(SingleChildRenderObjectWidget widget) : super(widget);
+ @override
SingleChildRenderObjectWidget get widget => super.widget;
Element _child;
+ @override
void visitChildren(ElementVisitor visitor) {
if (_child != null)
visitor(_child);
}
+ @override
bool detachChild(Element child) {
assert(child == _child);
_deactivateChild(_child);
@@ -1791,30 +1880,35 @@
return true;
}
+ @override
void mount(Element parent, dynamic newSlot) {
super.mount(parent, newSlot);
_child = updateChild(_child, widget.child, null);
}
+ @override
void update(SingleChildRenderObjectWidget newWidget) {
super.update(newWidget);
assert(widget == newWidget);
_child = updateChild(_child, widget.child, null);
}
+ @override
void insertChildRenderObject(RenderObject child, dynamic slot) {
- final RenderObjectWithChildMixin<dynamic> renderObject = this.renderObject;
+ final RenderObjectWithChildMixin<RenderObject> renderObject = this.renderObject;
assert(slot == null);
renderObject.child = child;
assert(renderObject == this.renderObject);
}
+ @override
void moveChildRenderObject(RenderObject child, dynamic slot) {
assert(false);
}
+ @override
void removeChildRenderObject(RenderObject child) {
- final RenderObjectWithChildMixin<dynamic> renderObject = this.renderObject;
+ final RenderObjectWithChildMixin<RenderObject> renderObject = this.renderObject;
assert(renderObject.child == child);
renderObject.child = null;
assert(renderObject == this.renderObject);
@@ -1827,6 +1921,7 @@
assert(!_debugHasDuplicateIds());
}
+ @override
MultiChildRenderObjectWidget get widget => super.widget;
List<Element> _children;
@@ -1834,20 +1929,23 @@
// repeatedly to remove children.
final Set<Element> _detachedChildren = new HashSet<Element>();
+ @override
void insertChildRenderObject(RenderObject child, Element slot) {
- final ContainerRenderObjectMixin<dynamic, dynamic> renderObject = this.renderObject;
+ final ContainerRenderObjectMixin<RenderObject, ContainerParentDataMixin<RenderObject>> renderObject = this.renderObject;
renderObject.insert(child, after: slot?.renderObject);
assert(renderObject == this.renderObject);
}
+ @override
void moveChildRenderObject(RenderObject child, dynamic slot) {
- final ContainerRenderObjectMixin<dynamic, dynamic> renderObject = this.renderObject;
+ final ContainerRenderObjectMixin<RenderObject, ContainerParentDataMixin<RenderObject>> renderObject = this.renderObject;
renderObject.move(child, after: slot?.renderObject);
assert(renderObject == this.renderObject);
}
+ @override
void removeChildRenderObject(RenderObject child) {
- final ContainerRenderObjectMixin<dynamic, dynamic> renderObject = this.renderObject;
+ final ContainerRenderObjectMixin<RenderObject, ContainerParentDataMixin<RenderObject>> renderObject = this.renderObject;
assert(child.parent == renderObject);
renderObject.remove(child);
assert(renderObject == this.renderObject);
@@ -1871,6 +1969,7 @@
return false;
}
+ @override
void visitChildren(ElementVisitor visitor) {
for (Element child in _children) {
if (!_detachedChildren.contains(child))
@@ -1878,12 +1977,14 @@
}
}
+ @override
bool detachChild(Element child) {
_detachedChildren.add(child);
_deactivateChild(child);
return true;
}
+ @override
void mount(Element parent, dynamic newSlot) {
super.mount(parent, newSlot);
_children = new List<Element>(widget.children.length);
@@ -1895,6 +1996,7 @@
}
}
+ @override
void update(MultiChildRenderObjectWidget newWidget) {
super.update(newWidget);
assert(widget == newWidget);
@@ -1906,6 +2008,8 @@
class WidgetError extends AssertionError {
WidgetError(this.message);
final String message;
+
+ @override
String toString() => message;
}
diff --git a/packages/flutter/lib/src/widgets/gesture_detector.dart b/packages/flutter/lib/src/widgets/gesture_detector.dart
index 71a4998..cd0fde5 100644
--- a/packages/flutter/lib/src/widgets/gesture_detector.dart
+++ b/packages/flutter/lib/src/widgets/gesture_detector.dart
@@ -157,6 +157,7 @@
/// duplication of information.
final bool excludeFromSemantics;
+ @override
Widget build(BuildContext context) {
Map<Type, GestureRecognizerFactory> gestures = <Type, GestureRecognizerFactory>{};
@@ -261,6 +262,7 @@
/// duplication of information.
final bool excludeFromSemantics;
+ @override
RawGestureDetectorState createState() => new RawGestureDetectorState();
}
@@ -268,11 +270,13 @@
Map<Type, GestureRecognizer> _recognizers = const <Type, GestureRecognizer>{};
+ @override
void initState() {
super.initState();
_syncAll(config.gestures);
}
+ @override
void didUpdateConfig(RawGestureDetector oldConfig) {
_syncAll(config.gestures);
}
@@ -308,6 +312,7 @@
}
}
+ @override
void dispose() {
for (GestureRecognizer recognizer in _recognizers.values)
recognizer.dispose();
@@ -340,6 +345,7 @@
return config.child == null ? HitTestBehavior.translucent : HitTestBehavior.deferToChild;
}
+ @override
Widget build(BuildContext context) {
Widget result = new Listener(
onPointerDown: _handlePointerDown,
@@ -351,6 +357,7 @@
return result;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (_recognizers == null) {
@@ -458,12 +465,14 @@
assert(false);
}
+ @override
RenderSemanticsGestureHandler createRenderObject(BuildContext context) {
RenderSemanticsGestureHandler result = new RenderSemanticsGestureHandler();
updateRenderObject(context, result);
return result;
}
+ @override
void updateRenderObject(BuildContext context, RenderSemanticsGestureHandler renderObject) {
Map<Type, GestureRecognizer> recognizers = owner._recognizers;
renderObject
diff --git a/packages/flutter/lib/src/widgets/gridpaper.dart b/packages/flutter/lib/src/widgets/gridpaper.dart
index 39138b4..bf58684 100644
--- a/packages/flutter/lib/src/widgets/gridpaper.dart
+++ b/packages/flutter/lib/src/widgets/gridpaper.dart
@@ -20,6 +20,7 @@
final int divisions;
final int subDivisions;
+ @override
void paint(Canvas canvas, Size size) {
Paint linePaint = new Paint()
..color = color;
@@ -34,6 +35,7 @@
}
}
+ @override
bool shouldRepaint(_GridPaperPainter oldPainter) {
return oldPainter.color != color
|| oldPainter.interval != interval
@@ -41,6 +43,7 @@
|| oldPainter.subDivisions != subDivisions;
}
+ @override
bool hitTest(Point position) => false;
}
@@ -70,6 +73,7 @@
final Widget child;
+ @override
Widget build(BuildContext context) {
return new CustomPaint(
foregroundPainter: new _GridPaperPainter(
diff --git a/packages/flutter/lib/src/widgets/heroes.dart b/packages/flutter/lib/src/widgets/heroes.dart
index f80e087..3b78f40 100644
--- a/packages/flutter/lib/src/widgets/heroes.dart
+++ b/packages/flutter/lib/src/widgets/heroes.dart
@@ -146,6 +146,7 @@
return result;
}
+ @override
HeroState createState() => new HeroState();
}
@@ -154,8 +155,10 @@
GlobalKey _key = new GlobalKey();
Size _placeholderSize;
+ @override
bool get alwaysAnimate => config.alwaysAnimate;
+ @override
_HeroManifest _takeChild(Rect animationArea, Animation<double> currentAnimation) {
assert(mounted);
final RenderBox renderObject = context.findRenderObject();
@@ -198,6 +201,7 @@
_setChild(null);
}
+ @override
Widget build(BuildContext context) {
if (_placeholderSize != null) {
assert(_key == null);
@@ -237,10 +241,13 @@
final RelativeRectTween currentRect;
final Tween<double> currentTurns;
+ @override
bool get alwaysAnimate => true;
bool get taken => _taken;
bool _taken = false;
+
+ @override
_HeroManifest _takeChild(Rect animationArea, Animation<double> currentAnimation) {
assert(!taken);
_taken = true;
@@ -386,6 +393,7 @@
}
}
+ @override
String toString() => '$_heroes';
}
@@ -401,6 +409,7 @@
final List<OverlayEntry> _overlayEntries = new List<OverlayEntry>();
+ @override
void didPush(Route<dynamic> route, Route<dynamic> previousRoute) {
assert(navigator != null);
assert(route != null);
@@ -414,6 +423,7 @@
}
}
+ @override
void didPop(Route<dynamic> route, Route<dynamic> previousRoute) {
assert(navigator != null);
assert(route != null);
diff --git a/packages/flutter/lib/src/widgets/implicit_animations.dart b/packages/flutter/lib/src/widgets/implicit_animations.dart
index 7508246..359cf66 100644
--- a/packages/flutter/lib/src/widgets/implicit_animations.dart
+++ b/packages/flutter/lib/src/widgets/implicit_animations.dart
@@ -11,6 +11,7 @@
class BoxConstraintsTween extends Tween<BoxConstraints> {
BoxConstraintsTween({ BoxConstraints begin, BoxConstraints end }) : super(begin: begin, end: end);
+ @override
BoxConstraints lerp(double t) => BoxConstraints.lerp(begin, end, t);
}
@@ -18,6 +19,7 @@
class DecorationTween extends Tween<Decoration> {
DecorationTween({ Decoration begin, Decoration end }) : super(begin: begin, end: end);
+ @override
Decoration lerp(double t) {
if (begin == null && end == null)
return null;
@@ -31,6 +33,7 @@
class EdgeInsetsTween extends Tween<EdgeInsets> {
EdgeInsetsTween({ EdgeInsets begin, EdgeInsets end }) : super(begin: begin, end: end);
+ @override
EdgeInsets lerp(double t) => EdgeInsets.lerp(begin, end, t);
}
@@ -40,6 +43,7 @@
class Matrix4Tween extends Tween<Matrix4> {
Matrix4Tween({ Matrix4 begin, Matrix4 end }) : super(begin: begin, end: end);
+ @override
Matrix4 lerp(double t) {
// TODO(mpcomplete): Animate the full matrix. Will animating the cells
// separately work?
@@ -68,8 +72,10 @@
/// The duration over which to animate the parameters of this container.
final Duration duration;
+ @override
AnimatedWidgetBaseState<AnimatedWidgetBase> createState();
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('duration: ${duration.inMilliseconds}ms');
@@ -90,6 +96,7 @@
Animation<double> get animation => _animation;
Animation<double> _animation;
+ @override
void initState() {
super.initState();
_controller = new AnimationController(
@@ -100,6 +107,7 @@
_constructTweens();
}
+ @override
void didUpdateConfig(T oldConfig) {
if (config.curve != oldConfig.curve)
_updateCurve();
@@ -122,6 +130,7 @@
_animation = _controller;
}
+ @override
void dispose() {
_controller.stop();
super.dispose();
@@ -229,8 +238,10 @@
/// If non-null, requires the decoration to have this height.
final double height;
+ @override
_AnimatedContainerState createState() => new _AnimatedContainerState();
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (constraints != null)
@@ -262,6 +273,7 @@
Tween<double> _width;
Tween<double> _height;
+ @override
void forEachTween(TweenVisitor<dynamic> visitor) {
// TODO(ianh): Use constructor tear-offs when it becomes possible
_constraints = visitor(_constraints, config.constraints, (dynamic value) => new BoxConstraintsTween(begin: value));
@@ -274,6 +286,7 @@
_height = visitor(_height, config.height, (dynamic value) => new Tween<double>(begin: value));
}
+ @override
Widget build(BuildContext context) {
return new Container(
child: config.child,
@@ -288,6 +301,7 @@
);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (_constraints != null)
@@ -370,6 +384,7 @@
/// set. The third must be null.
final double height;
+ @override
_AnimatedPositionedState createState() => new _AnimatedPositionedState();
}
@@ -381,6 +396,7 @@
Tween<double> _width;
Tween<double> _height;
+ @override
void forEachTween(TweenVisitor<dynamic> visitor) {
// TODO(ianh): Use constructor tear-offs when it becomes possible
_left = visitor(_left, config.left, (dynamic value) => new Tween<double>(begin: value));
@@ -391,6 +407,7 @@
_height = visitor(_height, config.height, (dynamic value) => new Tween<double>(begin: value));
}
+ @override
Widget build(BuildContext context) {
return new Positioned(
child: config.child,
@@ -403,6 +420,7 @@
);
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (_left != null)
diff --git a/packages/flutter/lib/src/widgets/locale_query.dart b/packages/flutter/lib/src/widgets/locale_query.dart
index b45f0b5..5b73fd4 100644
--- a/packages/flutter/lib/src/widgets/locale_query.dart
+++ b/packages/flutter/lib/src/widgets/locale_query.dart
@@ -26,8 +26,10 @@
return query?.data;
}
+ @override
bool updateShouldNotify(LocaleQuery old) => data != old.data;
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('$data');
diff --git a/packages/flutter/lib/src/widgets/media_query.dart b/packages/flutter/lib/src/widgets/media_query.dart
index 39531d6..5afd18e 100644
--- a/packages/flutter/lib/src/widgets/media_query.dart
+++ b/packages/flutter/lib/src/widgets/media_query.dart
@@ -34,6 +34,7 @@
return size.width > size.height ? Orientation.landscape : Orientation.portrait;
}
+ @override
bool operator==(Object other) {
if (other.runtimeType != runtimeType)
return false;
@@ -43,12 +44,14 @@
&& typedOther.devicePixelRatio == devicePixelRatio;
}
+ @override
int get hashCode => hashValues(
size.hashCode,
padding.hashCode,
devicePixelRatio.hashCode
);
+ @override
String toString() => '$runtimeType($size, $orientation)';
}
@@ -76,8 +79,10 @@
return query == null ? null : query.data;
}
+ @override
bool updateShouldNotify(MediaQuery old) => data != old.data;
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('$data');
diff --git a/packages/flutter/lib/src/widgets/mimic.dart b/packages/flutter/lib/src/widgets/mimic.dart
index 7faae04..76fd8fa 100644
--- a/packages/flutter/lib/src/widgets/mimic.dart
+++ b/packages/flutter/lib/src/widgets/mimic.dart
@@ -129,6 +129,7 @@
/// A handle to the widget that this widget should copy.
final MimicableHandle original;
+ @override
Widget build(BuildContext context) {
if (original != null && original._state.mounted && original._state._placeholderSize != null)
return original._state.config.child;
@@ -145,6 +146,7 @@
final Widget child;
+ @override
MimicableState createState() => new MimicableState();
}
@@ -222,6 +224,7 @@
}
}
+ @override
Widget build(BuildContext context) {
if (_placeholderSize != null) {
return new ConstrainedBox(
diff --git a/packages/flutter/lib/src/widgets/mixed_viewport.dart b/packages/flutter/lib/src/widgets/mixed_viewport.dart
index 8df1ba3..018542d 100644
--- a/packages/flutter/lib/src/widgets/mixed_viewport.dart
+++ b/packages/flutter/lib/src/widgets/mixed_viewport.dart
@@ -33,10 +33,12 @@
final ViewportDimensionsChangeCallback onPaintOffsetUpdateNeeded;
final InvalidatorAvailableCallback onInvalidatorAvailable; // call the callback this gives to invalidate sizes
+ @override
_MixedViewportElement createElement() => new _MixedViewportElement(this);
// we don't pass constructor arguments to the RenderBlockViewport() because until
// we know our children, the constructor arguments we could give have no effect
+ @override
RenderBlockViewport createRenderObject(BuildContext context) => new RenderBlockViewport();
_ChangeDescription evaluateChangesFrom(MixedViewport oldWidget) {
@@ -55,8 +57,11 @@
class _ChildKey {
const _ChildKey(this.type, this.key);
factory _ChildKey.fromWidget(Widget widget) => new _ChildKey(widget.runtimeType, widget.key);
+
final Type type;
final Key key;
+
+ @override
bool operator ==(dynamic other) {
if (other is! _ChildKey)
return false;
@@ -64,7 +69,11 @@
return type == typedOther.type &&
key == typedOther.key;
}
+
+ @override
int get hashCode => hashValues(type, key);
+
+ @override
String toString() => "_ChildKey(type: $type, key: $key)";
}
@@ -74,6 +83,7 @@
widget.onInvalidatorAvailable(invalidate);
}
+ @override
MixedViewport get widget => super.widget;
/// _childExtents contains the extents of each child from the top of the list
@@ -115,6 +125,7 @@
double _overrideStartOffset;
double get startOffset => _overrideStartOffset ?? widget.startOffset;
+ @override
RenderBlockViewport get renderObject => super.renderObject;
/// Notify the BlockViewport that the children at indices have, or might have,
@@ -136,11 +147,13 @@
_invalidIndices.clear();
}
+ @override
void visitChildren(ElementVisitor visitor) {
for (Element child in _childrenByKey.values)
visitor(child);
}
+ @override
void mount(Element parent, dynamic newSlot) {
super.mount(parent, newSlot);
renderObject
@@ -152,6 +165,7 @@
..minCrossAxisExtentCallback = _noIntrinsicExtent;
}
+ @override
void unmount() {
renderObject
..callback = null
@@ -178,6 +192,7 @@
static final Object _omit = new Object(); // used as a slot when it's not yet time to attach the child
+ @override
void update(MixedViewport newWidget) {
_ChangeDescription changes = newWidget.evaluateChangesFrom(widget);
super.update(newWidget);
@@ -205,6 +220,7 @@
}
}
+ @override
void performRebuild() {
// we just need to redraw our existing widgets as-is
if (_childrenByKey.length > 0) {
@@ -614,11 +630,13 @@
_firstVisibleChildIndex = startIndex;
}
+ @override
void updateSlotForChild(Element element, dynamic newSlot) {
assert(newSlot == null || newSlot == _omit || newSlot is Element);
super.updateSlotForChild(element, newSlot);
}
+ @override
void insertChildRenderObject(RenderObject child, dynamic slot) {
if (slot == _omit)
return;
@@ -626,6 +644,7 @@
renderObject.insert(child, after: slot?.renderObject);
}
+ @override
void moveChildRenderObject(RenderObject child, dynamic slot) {
if (slot == _omit)
return;
@@ -638,6 +657,7 @@
renderObject.insert(child, after: previousSibling);
}
+ @override
void removeChildRenderObject(RenderObject child) {
if (child.parent != renderObject)
return; // probably had slot == _omit when inserted
diff --git a/packages/flutter/lib/src/widgets/modal_barrier.dart b/packages/flutter/lib/src/widgets/modal_barrier.dart
index 38e0699..62c36ea 100644
--- a/packages/flutter/lib/src/widgets/modal_barrier.dart
+++ b/packages/flutter/lib/src/widgets/modal_barrier.dart
@@ -22,6 +22,7 @@
/// Whether touching the barrier will pop the current route off the [Navigator].
final bool dismissable;
+ @override
Widget build(BuildContext context) {
return new Semantics(
container: true,
@@ -58,6 +59,7 @@
/// Whether touching the barrier will pop the current route off the [Navigator].
final bool dismissable;
+ @override
Widget build(BuildContext context) {
return new ModalBarrier(
color: color.value,
diff --git a/packages/flutter/lib/src/widgets/navigator.dart b/packages/flutter/lib/src/widgets/navigator.dart
index cf5eb51..fa903c0 100644
--- a/packages/flutter/lib/src/widgets/navigator.dart
+++ b/packages/flutter/lib/src/widgets/navigator.dart
@@ -97,6 +97,7 @@
/// The initial route typically skips any entrance transition to speed startup.
final bool isInitialRoute;
+ @override
String toString() {
String result = '"$name"';
if (mostValuableKeys != null && mostValuableKeys.isNotEmpty) {
@@ -271,6 +272,7 @@
navigator.openTransaction(callback);
}
+ @override
NavigatorState createState() => new NavigatorState();
}
@@ -279,6 +281,7 @@
final GlobalKey<OverlayState> _overlayKey = new GlobalKey<OverlayState>();
final List<Route<dynamic>> _history = new List<Route<dynamic>>();
+ @override
void initState() {
super.initState();
assert(config.observer == null || config.observer.navigator == null);
@@ -289,6 +292,7 @@
)));
}
+ @override
void didUpdateConfig(Navigator oldConfig) {
if (oldConfig.observer != config.observer) {
oldConfig.observer?._navigator = null;
@@ -297,6 +301,7 @@
}
}
+ @override
void dispose() {
assert(!_debugLocked);
assert(() { _debugLocked = true; return true; });
@@ -481,6 +486,7 @@
return true;
}
+ @override
Widget build(BuildContext context) {
assert(!_debugLocked);
assert(_history.isNotEmpty);
diff --git a/packages/flutter/lib/src/widgets/notification_listener.dart b/packages/flutter/lib/src/widgets/notification_listener.dart
index c35d0d1..4bd91b4 100644
--- a/packages/flutter/lib/src/widgets/notification_listener.dart
+++ b/packages/flutter/lib/src/widgets/notification_listener.dart
@@ -13,8 +13,8 @@
void dispatch(BuildContext target) {
target.visitAncestorElements((Element element) {
if (element is StatelessElement &&
- element.widget is NotificationListener<dynamic>) {
- final NotificationListener<dynamic> widget = element.widget;
+ element.widget is NotificationListener<Notification>) {
+ final NotificationListener<Notification> widget = element.widget;
if (widget._dispatch(this)) // that function checks the type dynamically
return false;
}
@@ -42,6 +42,7 @@
return false;
}
+ @override
Widget build(BuildContext context) => child;
}
diff --git a/packages/flutter/lib/src/widgets/overlay.dart b/packages/flutter/lib/src/widgets/overlay.dart
index d7bf3e8..deb3eab 100644
--- a/packages/flutter/lib/src/widgets/overlay.dart
+++ b/packages/flutter/lib/src/widgets/overlay.dart
@@ -46,15 +46,21 @@
_key.currentState?.setState(() { /* the state that changed is in the builder */ });
}
+ @override
String toString() => '$runtimeType@$hashCode(opaque: $opaque)';
}
class _OverlayEntry extends StatefulWidget {
_OverlayEntry(OverlayEntry entry) : entry = entry, super(key: entry._key);
+
final OverlayEntry entry;
+
+ @override
_OverlayEntryState createState() => new _OverlayEntryState();
}
+
class _OverlayEntryState extends State<_OverlayEntry> {
+ @override
Widget build(BuildContext context) => config.entry.builder(context);
}
@@ -98,6 +104,7 @@
return result;
}
+ @override
OverlayState createState() => new OverlayState();
}
@@ -105,6 +112,7 @@
class OverlayState extends State<Overlay> {
final List<OverlayEntry> _entries = new List<OverlayEntry>();
+ @override
void initState() {
super.initState();
insertAll(config.initialEntries);
@@ -171,6 +179,7 @@
return result;
}
+ @override
Widget build(BuildContext context) {
List<Widget> backwardsChildren = <Widget>[];
@@ -184,6 +193,7 @@
return new Stack(children: backwardsChildren.reversed.toList(growable: false));
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('entries: $_entries');
diff --git a/packages/flutter/lib/src/widgets/page_storage.dart b/packages/flutter/lib/src/widgets/page_storage.dart
index 6a2233b..69853a1 100644
--- a/packages/flutter/lib/src/widgets/page_storage.dart
+++ b/packages/flutter/lib/src/widgets/page_storage.dart
@@ -7,13 +7,17 @@
class _StorageEntryIdentifier {
Type clientType;
List<Key> keys;
+
void addKey(Key key) {
assert(key != null);
assert(key is! GlobalKey);
keys ??= <Key>[];
keys.add(key);
}
+
GlobalKey scopeKey;
+
+ @override
bool operator ==(dynamic other) {
if (other is! _StorageEntryIdentifier)
return false;
@@ -30,8 +34,11 @@
}
return true;
}
+
+ @override
int get hashCode => hashValues(clientType, scopeKey, hashList(keys));
+ @override
String toString() {
return 'StorageEntryIdentifier($clientType, $scopeKey, ${keys?.join(":")})';
}
@@ -102,5 +109,6 @@
return widget?.bucket;
}
+ @override
Widget build(BuildContext context) => child;
}
diff --git a/packages/flutter/lib/src/widgets/pageable_list.dart b/packages/flutter/lib/src/widgets/pageable_list.dart
index 3cefe42..e06f8d0 100644
--- a/packages/flutter/lib/src/widgets/pageable_list.dart
+++ b/packages/flutter/lib/src/widgets/pageable_list.dart
@@ -73,6 +73,7 @@
/// The list of pages themselves.
final Iterable<Widget> children;
+ @override
PageableListState<PageableList> createState() => new PageableListState<PageableList>();
}
@@ -96,11 +97,13 @@
}
}
+ @override
double pixelOffsetToScrollOffset(double pixelOffset) {
final double pixelsPerScrollUnit = _pixelsPerScrollUnit;
return super.pixelOffsetToScrollOffset(pixelsPerScrollUnit == 0.0 ? 0.0 : pixelOffset / pixelsPerScrollUnit);
}
+ @override
double scrollOffsetToPixelOffset(double scrollOffset) {
return super.scrollOffsetToPixelOffset(scrollOffset * _pixelsPerScrollUnit);
}
@@ -118,11 +121,13 @@
}
}
+ @override
void initState() {
super.initState();
_updateScrollBehavior();
}
+ @override
void didUpdateConfig(PageableList oldConfig) {
super.didUpdateConfig(oldConfig);
@@ -149,21 +154,25 @@
));
}
+ @override
void dispatchOnScrollStart() {
super.dispatchOnScrollStart();
config.scrollableListPainter?.scrollStarted();
}
+ @override
void dispatchOnScroll() {
super.dispatchOnScroll();
config.scrollableListPainter?.scrollOffset = scrollOffset;
}
+ @override
void dispatchOnScrollEnd() {
super.dispatchOnScrollEnd();
config.scrollableListPainter?.scrollEnded();
}
+ @override
Widget buildContent(BuildContext context) {
return new PageViewport(
itemsWrap: config.itemsWrap,
@@ -178,6 +187,7 @@
UnboundedBehavior _unboundedBehavior;
OverscrollBehavior _overscrollBehavior;
+ @override
ExtentScrollBehavior get scrollBehavior {
if (config.itemsWrap) {
_unboundedBehavior ??= new UnboundedBehavior();
@@ -187,10 +197,13 @@
return _overscrollBehavior;
}
+ @override
ScrollBehavior<double, double> createScrollBehavior() => scrollBehavior;
+ @override
bool get shouldSnapScrollOffset => config.itemsSnapAlignment == PageableListFlingBehavior.canFlingAcrossMultiplePages;
+ @override
double snapScrollOffset(double newScrollOffset) {
final double previousItemOffset = newScrollOffset.floorToDouble();
final double nextItemOffset = newScrollOffset.ceilToDouble();
@@ -205,6 +218,7 @@
.then(_notifyPageChanged);
}
+ @override
Future<Null> fling(double scrollVelocity) {
switch(config.itemsSnapAlignment) {
case PageableListFlingBehavior.canFlingAcrossMultiplePages:
@@ -214,6 +228,7 @@
}
}
+ @override
Future<Null> settleScrollOffset() {
return scrollTo(snapScrollOffset(scrollOffset), duration: config.duration, curve: config.curve)
.then(_notifyPageChanged);
@@ -237,43 +252,57 @@
assert(mainAxis != null);
}
+ @override
final double startOffset;
+
final Axis mainAxis;
final ViewportAnchor anchor;
final bool itemsWrap;
final RenderObjectPainter overlayPainter;
+
+ @override
final Iterable<Widget> children;
+ @override
RenderList createRenderObject(BuildContext context) => new RenderList();
+ @override
_PageViewportElement createElement() => new _PageViewportElement(this);
}
class _PageViewportElement extends VirtualViewportElement {
_PageViewportElement(PageViewport widget) : super(widget);
+ @override
PageViewport get widget => super.widget;
+ @override
RenderList get renderObject => super.renderObject;
+ @override
int get materializedChildBase => _materializedChildBase;
int _materializedChildBase;
+ @override
int get materializedChildCount => _materializedChildCount;
int _materializedChildCount;
+ @override
double get startOffsetBase => _startOffsetBase;
double _startOffsetBase;
+ @override
double get startOffsetLimit =>_startOffsetLimit;
double _startOffsetLimit;
+ @override
double scrollOffsetToPixelOffset(double scrollOffset) {
if (_containerExtent == null)
return 0.0;
return super.scrollOffsetToPixelOffset(scrollOffset) * _containerExtent;
}
+ @override
void updateRenderObject(PageViewport oldWidget) {
renderObject
..mainAxis = widget.mainAxis
@@ -298,6 +327,7 @@
renderObject.dimensions = new ViewportDimensions(containerSize: containerSize, contentSize: materializedContentSize);
}
+ @override
void layout(BoxConstraints constraints) {
final int length = renderObject.virtualChildCount;
diff --git a/packages/flutter/lib/src/widgets/pages.dart b/packages/flutter/lib/src/widgets/pages.dart
index f0abba4..5a29e60 100644
--- a/packages/flutter/lib/src/widgets/pages.dart
+++ b/packages/flutter/lib/src/widgets/pages.dart
@@ -15,11 +15,20 @@
Completer<T> completer,
RouteSettings settings: const RouteSettings()
}) : super(completer: completer, settings: settings);
+
+ @override
bool get opaque => true;
+
+ @override
bool get barrierDismissable => false;
+
+ @override
bool canTransitionTo(TransitionRoute<dynamic> nextRoute) => nextRoute is PageRoute<dynamic>;
+
+ @override
bool canTransitionFrom(TransitionRoute<dynamic> nextRoute) => nextRoute is PageRoute<dynamic>;
+ @override
AnimationController createAnimationController() {
AnimationController controller = super.createAnimationController();
if (settings.isInitialRoute)
diff --git a/packages/flutter/lib/src/widgets/performance_overlay.dart b/packages/flutter/lib/src/widgets/performance_overlay.dart
index 3aa1045..0205071 100644
--- a/packages/flutter/lib/src/widgets/performance_overlay.dart
+++ b/packages/flutter/lib/src/widgets/performance_overlay.dart
@@ -56,11 +56,13 @@
/// how many frame intervals).
final int rasterizerThreshold;
+ @override
RenderPerformanceOverlay createRenderObject(BuildContext context) => new RenderPerformanceOverlay(
optionsMask: optionsMask,
rasterizerThreshold: rasterizerThreshold
);
+ @override
void updateRenderObject(BuildContext context, RenderPerformanceOverlay renderObject) {
renderObject
..optionsMask = optionsMask
diff --git a/packages/flutter/lib/src/widgets/placeholder.dart b/packages/flutter/lib/src/widgets/placeholder.dart
index aaccb3b..6b40b21 100644
--- a/packages/flutter/lib/src/widgets/placeholder.dart
+++ b/packages/flutter/lib/src/widgets/placeholder.dart
@@ -9,6 +9,7 @@
class Placeholder extends StatefulWidget {
Placeholder({ Key key }) : super(key: key);
+ @override
PlaceholderState createState() => new PlaceholderState();
}
@@ -29,6 +30,7 @@
});
}
+ @override
Widget build(BuildContext context) {
if (_child != null)
return child;
diff --git a/packages/flutter/lib/src/widgets/raw_keyboard_listener.dart b/packages/flutter/lib/src/widgets/raw_keyboard_listener.dart
index 3e3088f..399813a 100644
--- a/packages/flutter/lib/src/widgets/raw_keyboard_listener.dart
+++ b/packages/flutter/lib/src/widgets/raw_keyboard_listener.dart
@@ -23,10 +23,12 @@
final ValueChanged<mojom.InputEvent> onKey;
final Widget child;
+ @override
_RawKeyboardListenerState createState() => new _RawKeyboardListenerState();
}
class _RawKeyboardListenerState extends State<RawKeyboardListener> implements mojom.RawKeyboardListener {
+ @override
void initState() {
super.initState();
_attachOrDetachKeyboard();
@@ -34,10 +36,12 @@
mojom.RawKeyboardListenerStub _stub;
+ @override
void didUpdateConfig(RawKeyboardListener oldConfig) {
_attachOrDetachKeyboard();
}
+ @override
void dispose() {
_detachKeyboardIfAttached();
super.dispose();
@@ -65,11 +69,13 @@
_stub = null;
}
+ @override
void onKey(mojom.InputEvent event) {
if (config.onKey != null)
config.onKey(event);
}
+ @override
Widget build(BuildContext context) {
return config.child;
}
diff --git a/packages/flutter/lib/src/widgets/routes.dart b/packages/flutter/lib/src/widgets/routes.dart
index 0da4a7a..03939aa 100644
--- a/packages/flutter/lib/src/widgets/routes.dart
+++ b/packages/flutter/lib/src/widgets/routes.dart
@@ -21,9 +21,11 @@
List<WidgetBuilder> get builders;
/// The entries this route has placed in the overlay.
+ @override
List<OverlayEntry> get overlayEntries => _overlayEntries;
final List<OverlayEntry> _overlayEntries = <OverlayEntry>[];
+ @override
void install(OverlayEntry insertionPoint) {
assert(_overlayEntries.isEmpty);
for (WidgetBuilder builder in builders)
@@ -40,6 +42,7 @@
/// responsibility of the Route to later call dispose().
///
/// Subclasses shouldn't call this if they want to delay the finished() call.
+ @override
bool didPop(T result) {
finished();
return true;
@@ -58,6 +61,7 @@
_overlayEntries.clear();
}
+ @override
void dispose() {
finished();
}
@@ -145,6 +149,7 @@
Animation<double> get forwardAnimation => _forwardAnimation;
final ProxyAnimation _forwardAnimation = new ProxyAnimation(kAlwaysDismissedAnimation);
+ @override
void install(OverlayEntry insertionPoint) {
_controller = createAnimationController();
assert(_controller != null);
@@ -153,12 +158,14 @@
super.install(insertionPoint);
}
+ @override
void didPush() {
_animation.addStatusListener(_handleStatusChanged);
_controller.forward();
super.didPush();
}
+ @override
void didReplace(Route<dynamic> oldRoute) {
if (oldRoute is TransitionRoute<dynamic>)
_controller.value = oldRoute._controller.value;
@@ -166,6 +173,7 @@
super.didReplace(oldRoute);
}
+ @override
bool didPop(T result) {
_result = result;
_controller.reverse();
@@ -173,11 +181,13 @@
return true;
}
+ @override
void didPopNext(Route<dynamic> nextRoute) {
_updateForwardAnimation(nextRoute);
super.didPopNext(nextRoute);
}
+ @override
void didChangeNext(Route<dynamic> nextRoute) {
_updateForwardAnimation(nextRoute);
super.didChangeNext(nextRoute);
@@ -224,17 +234,21 @@
/// need to coordinate transitions with.
bool canTransitionFrom(TransitionRoute<dynamic> nextRoute) => true;
+ @override
void finished() {
super.finished();
_transitionCompleter?.complete(_result);
}
+ @override
void dispose() {
_controller.stop();
super.dispose();
}
String get debugLabel => '$runtimeType';
+
+ @override
String toString() => '$runtimeType(animation: $_controller)';
}
@@ -295,6 +309,8 @@
entry._owner = null;
entry._notifyRemoved();
}
+
+ @override
bool didPop(T result) {
if (_localHistory != null && _localHistory.length > 0) {
LocalHistoryEntry entry = _localHistory.removeLast();
@@ -305,6 +321,8 @@
}
return super.didPop(result);
}
+
+ @override
bool get willHandlePopInternally {
return _localHistory != null && _localHistory.length > 0;
}
@@ -325,11 +343,13 @@
final bool isCurrent;
final Route<dynamic> route;
+ @override
bool updateShouldNotify(_ModalScopeStatus old) {
return isCurrent != old.isCurrent ||
route != old.route;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('${isCurrent ? "active" : "inactive"}');
@@ -344,20 +364,24 @@
final ModalRoute<dynamic> route;
+ @override
_ModalScopeState createState() => new _ModalScopeState();
}
class _ModalScopeState extends State<_ModalScope> {
+ @override
void initState() {
super.initState();
config.route.animation?.addStatusListener(_animationStatusChanged);
config.route.forwardAnimation?.addStatusListener(_animationStatusChanged);
}
+ @override
void didUpdateConfig(_ModalScope oldConfig) {
assert(config.route == oldConfig.route);
}
+ @override
void dispose() {
config.route.animation?.removeStatusListener(_animationStatusChanged);
config.route.forwardAnimation?.removeStatusListener(_animationStatusChanged);
@@ -370,6 +394,7 @@
});
}
+ @override
Widget build(BuildContext context) {
Widget contents = new PageStorage(
key: config.route._subtreeKey,
@@ -486,6 +511,7 @@
return child;
}
+ @override
void didPush() {
Focus.moveScopeTo(new GlobalObjectKey(this), context: navigator.context);
super.didPush();
@@ -569,18 +595,24 @@
);
}
+ @override
List<WidgetBuilder> get builders => <WidgetBuilder>[
_buildModalBarrier,
_buildModalScope
];
+ @override
String toString() => '$runtimeType($settings, animation: $_animation)';
}
/// A modal route that overlays a widget over the current route.
abstract class PopupRoute<T> extends ModalRoute<T> {
PopupRoute({ Completer<T> completer }) : super(completer: completer);
+
+ @override
bool get opaque => false;
+
+ @override
void didChangeNext(Route<dynamic> nextRoute) {
assert(nextRoute is! PageRoute<dynamic>);
super.didChangeNext(nextRoute);
diff --git a/packages/flutter/lib/src/widgets/scroll_behavior.dart b/packages/flutter/lib/src/widgets/scroll_behavior.dart
index 01228d2..beca2da 100644
--- a/packages/flutter/lib/src/widgets/scroll_behavior.dart
+++ b/packages/flutter/lib/src/widgets/scroll_behavior.dart
@@ -36,6 +36,7 @@
/// Whether this scroll behavior currently permits scrolling
bool get isScrollable => true;
+ @override
String toString() {
List<String> description = <String>[];
debugFillDescription(description);
@@ -85,6 +86,7 @@
/// The maximum value the scroll offset can obtain.
double get maxScrollOffset;
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('content: ${contentExtent.toStringAsFixed(1)}');
@@ -104,6 +106,7 @@
double _minScrollOffset;
+ @override
double updateExtents({
double contentExtent,
double containerExtent,
@@ -121,9 +124,13 @@
);
}
+ @override
double get minScrollOffset => _minScrollOffset;
+
+ @override
double get maxScrollOffset => math.max(minScrollOffset, minScrollOffset + _contentExtent - _containerExtent);
+ @override
double applyCurve(double scrollOffset, double scrollDelta) {
return (scrollOffset + scrollDelta).clamp(minScrollOffset, maxScrollOffset);
}
@@ -145,6 +152,7 @@
UnboundedBehavior({ double contentExtent: 0.0, double containerExtent: 0.0 })
: super(contentExtent: contentExtent, containerExtent: containerExtent);
+ @override
Simulation createScrollSimulation(double position, double velocity) {
double velocityPerSecond = velocity * 1000.0;
return new BoundedFrictionSimulation(
@@ -152,13 +160,18 @@
);
}
+ @override
Simulation createSnapScrollSimulation(double startOffset, double endOffset, double startVelocity, double endVelocity) {
return _createSnapScrollSimulation(startOffset, endOffset, startVelocity, endVelocity);
}
+ @override
double get minScrollOffset => double.NEGATIVE_INFINITY;
+
+ @override
double get maxScrollOffset => double.INFINITY;
+ @override
double applyCurve(double scrollOffset, double scrollDelta) {
return scrollOffset + scrollDelta;
}
@@ -169,14 +182,17 @@
OverscrollBehavior({ double contentExtent: 0.0, double containerExtent: 0.0, double minScrollOffset: 0.0 })
: super(contentExtent: contentExtent, containerExtent: containerExtent, minScrollOffset: minScrollOffset);
+ @override
Simulation createScrollSimulation(double position, double velocity) {
return _createScrollSimulation(position, velocity, minScrollOffset, maxScrollOffset);
}
+ @override
Simulation createSnapScrollSimulation(double startOffset, double endOffset, double startVelocity, double endVelocity) {
return _createSnapScrollSimulation(startOffset, endOffset, startVelocity, endVelocity);
}
+ @override
double applyCurve(double scrollOffset, double scrollDelta) {
double newScrollOffset = scrollOffset + scrollDelta;
// If we're overscrolling, we want move the scroll offset 2x
@@ -199,14 +215,17 @@
OverscrollWhenScrollableBehavior({ double contentExtent: 0.0, double containerExtent: 0.0, double minScrollOffset: 0.0 })
: super(contentExtent: contentExtent, containerExtent: containerExtent, minScrollOffset: minScrollOffset);
+ @override
bool get isScrollable => contentExtent > containerExtent;
+ @override
Simulation createScrollSimulation(double position, double velocity) {
if (isScrollable || position < minScrollOffset || position > maxScrollOffset)
return super.createScrollSimulation(position, velocity);
return null;
}
+ @override
double applyCurve(double scrollOffset, double scrollDelta) {
if (isScrollable)
return super.applyCurve(scrollOffset, scrollDelta);
diff --git a/packages/flutter/lib/src/widgets/scrollable.dart b/packages/flutter/lib/src/widgets/scrollable.dart
index 065456e..4f606ff 100644
--- a/packages/flutter/lib/src/widgets/scrollable.dart
+++ b/packages/flutter/lib/src/widgets/scrollable.dart
@@ -175,6 +175,7 @@
return new Future<Null>.value();
}
+ @override
ScrollableState createState();
}
@@ -218,6 +219,7 @@
/// terms of the [pixelOffsetToScrollOffset] and
/// [scrollOffsetToPixelOffset] methods.
abstract class ScrollableState<T extends Scrollable> extends State<T> {
+ @override
void initState() {
super.initState();
_controller = new AnimationController.unbounded()..addListener(_handleAnimationChanged);
@@ -226,6 +228,7 @@
AnimationController _controller;
+ @override
void dispose() {
_controller.stop();
super.dispose();
@@ -518,6 +521,7 @@
final GlobalKey _gestureDetectorKey = new GlobalKey();
+ @override
Widget build(BuildContext context) {
return new RawGestureDetector(
key: _gestureDetectorKey,
@@ -629,11 +633,15 @@
final Widget child;
+ @override
ScrollableState createState() => new _ScrollableViewportState();
}
class _ScrollableViewportState extends ScrollableState<ScrollableViewport> {
+ @override
ScrollBehavior<double, double> createScrollBehavior() => new OverscrollWhenScrollableBehavior();
+
+ @override
OverscrollWhenScrollableBehavior get scrollBehavior => super.scrollBehavior;
double _viewportSize = 0.0;
@@ -655,6 +663,7 @@
return scrollOffsetToPixelDelta(scrollOffset);
}
+ @override
Widget buildContent(BuildContext context) {
return new Viewport(
paintOffset: scrollOffsetToPixelDelta(scrollOffset),
@@ -692,6 +701,7 @@
final ScrollListener onScroll;
final Key scrollableKey;
+ @override
Widget build(BuildContext context) {
Widget contents = new BlockBody(children: children, mainAxis: scrollDirection);
if (padding != null)
@@ -708,12 +718,14 @@
}
abstract class ScrollableListPainter extends RenderObjectPainter {
+ @override
void attach(RenderObject renderObject) {
assert(renderObject is RenderBox);
assert(renderObject is HasMainAxis);
super.attach(renderObject);
}
+ @override
RenderBox get renderObject => super.renderObject;
Axis get scrollDirection {
@@ -784,10 +796,12 @@
final Object token;
final InvalidatorAvailableCallback onInvalidatorAvailable;
+ @override
ScrollableMixedWidgetListState createState() => new ScrollableMixedWidgetListState();
}
class ScrollableMixedWidgetListState extends ScrollableState<ScrollableMixedWidgetList> {
+ @override
void initState() {
super.initState();
scrollBehavior.updateExtents(
@@ -795,7 +809,10 @@
);
}
+ @override
ScrollBehavior<double, double> createScrollBehavior() => new OverscrollBehavior();
+
+ @override
OverscrollBehavior get scrollBehavior => super.scrollBehavior;
Offset _handlePaintOffsetUpdateNeeded(ViewportDimensions dimensions) {
@@ -812,6 +829,7 @@
return scrollOffsetToPixelDelta(scrollOffset);
}
+ @override
Widget buildContent(BuildContext context) {
return new MixedViewport(
startOffset: scrollOffset,
diff --git a/packages/flutter/lib/src/widgets/scrollable_grid.dart b/packages/flutter/lib/src/widgets/scrollable_grid.dart
index 5999cad..d2008c3 100644
--- a/packages/flutter/lib/src/widgets/scrollable_grid.dart
+++ b/packages/flutter/lib/src/widgets/scrollable_grid.dart
@@ -37,11 +37,15 @@
final GridDelegate delegate;
final Iterable<Widget> children;
+ @override
ScrollableState createState() => new _ScrollableGridState();
}
class _ScrollableGridState extends ScrollableState<ScrollableGrid> {
+ @override
ScrollBehavior<double, double> createScrollBehavior() => new OverscrollBehavior();
+
+ @override
ExtentScrollBehavior get scrollBehavior => super.scrollBehavior;
void _handleExtentsChanged(double contentExtent, double containerExtent) {
@@ -54,6 +58,7 @@
});
}
+ @override
Widget buildContent(BuildContext context) {
return new GridViewport(
startOffset: scrollOffset,
@@ -72,38 +77,50 @@
this.children
});
+ @override
final double startOffset;
final GridDelegate delegate;
final ExtentsChangedCallback onExtentsChanged;
+
+ @override
final Iterable<Widget> children;
// TODO(abarth): Support horizontal grids.
Axis get mainAxis => Axis.vertical;
+ @override
RenderGrid createRenderObject(BuildContext context) => new RenderGrid(delegate: delegate);
+ @override
_GridViewportElement createElement() => new _GridViewportElement(this);
}
class _GridViewportElement extends VirtualViewportElement {
_GridViewportElement(GridViewport widget) : super(widget);
+ @override
GridViewport get widget => super.widget;
+ @override
RenderGrid get renderObject => super.renderObject;
+ @override
int get materializedChildBase => _materializedChildBase;
int _materializedChildBase;
+ @override
int get materializedChildCount => _materializedChildCount;
int _materializedChildCount;
+ @override
double get startOffsetBase => _startOffsetBase;
double _startOffsetBase;
+ @override
double get startOffsetLimit =>_startOffsetLimit;
double _startOffsetLimit;
+ @override
void updateRenderObject(GridViewport oldWidget) {
renderObject.delegate = widget.delegate;
super.updateRenderObject(oldWidget);
@@ -113,6 +130,7 @@
double _containerExtent;
GridSpecification _specification;
+ @override
void layout(BoxConstraints constraints) {
_specification = renderObject.specification;
double contentExtent = _specification.gridSize.height;
diff --git a/packages/flutter/lib/src/widgets/scrollable_list.dart b/packages/flutter/lib/src/widgets/scrollable_list.dart
index 5641b1e..2c8a915 100644
--- a/packages/flutter/lib/src/widgets/scrollable_list.dart
+++ b/packages/flutter/lib/src/widgets/scrollable_list.dart
@@ -41,11 +41,15 @@
final ScrollableListPainter scrollableListPainter;
final Iterable<Widget> children;
+ @override
ScrollableState createState() => new _ScrollableListState();
}
class _ScrollableListState extends ScrollableState<ScrollableList> {
- ScrollBehavior<double, double> createScrollBehavior() => new OverscrollBehavior();
+ @override
+ ScrollBehavior<double, double> createScrollBehavior() => new OverscrollWhenScrollableBehavior();
+
+ @override
ExtentScrollBehavior get scrollBehavior => super.scrollBehavior;
void _handleExtentsChanged(double contentExtent, double containerExtent) {
@@ -59,21 +63,25 @@
});
}
+ @override
void dispatchOnScrollStart() {
super.dispatchOnScrollStart();
config.scrollableListPainter?.scrollStarted();
}
+ @override
void dispatchOnScroll() {
super.dispatchOnScroll();
config.scrollableListPainter?.scrollOffset = scrollOffset;
}
+ @override
void dispatchOnScrollEnd() {
super.dispatchOnScrollEnd();
config.scrollableListPainter?.scrollEnded();
}
+ @override
Widget buildContent(BuildContext context) {
return new ListViewport(
onExtentsChanged: _handleExtentsChanged,
@@ -134,36 +142,46 @@
}
}
+ @override
double get startOffset {
if (padding == null)
return scrollOffset;
return scrollOffset - _leadingPadding;
}
+ @override
RenderList createRenderObject(BuildContext context) => new RenderList(itemExtent: itemExtent);
+ @override
_VirtualListViewportElement createElement() => new _VirtualListViewportElement(this);
}
class _VirtualListViewportElement extends VirtualViewportElement {
_VirtualListViewportElement(VirtualViewport widget) : super(widget);
+ @override
_VirtualListViewport get widget => super.widget;
+ @override
RenderList get renderObject => super.renderObject;
+ @override
int get materializedChildBase => _materializedChildBase;
int _materializedChildBase;
+ @override
int get materializedChildCount => _materializedChildCount;
int _materializedChildCount;
+ @override
double get startOffsetBase => _startOffsetBase;
double _startOffsetBase;
+ @override
double get startOffsetLimit =>_startOffsetLimit;
double _startOffsetLimit;
+ @override
void updateRenderObject(_VirtualListViewport oldWidget) {
renderObject
..mainAxis = widget.mainAxis
@@ -177,6 +195,7 @@
double _contentExtent;
double _containerExtent;
+ @override
void layout(BoxConstraints constraints) {
final int length = renderObject.virtualChildCount;
final double itemExtent = widget.itemExtent;
@@ -264,6 +283,7 @@
overlayPainter
);
+ @override
final Iterable<Widget> children;
}
@@ -304,11 +324,15 @@
final EdgeInsets padding;
final ScrollableListPainter scrollableListPainter;
+ @override
ScrollableState createState() => new _ScrollableLazyListState();
}
class _ScrollableLazyListState extends ScrollableState<ScrollableLazyList> {
+ @override
ScrollBehavior<double, double> createScrollBehavior() => new OverscrollBehavior();
+
+ @override
ExtentScrollBehavior get scrollBehavior => super.scrollBehavior;
void _handleExtentsChanged(double contentExtent, double containerExtent) {
@@ -322,21 +346,25 @@
});
}
+ @override
void dispatchOnScrollStart() {
super.dispatchOnScrollStart();
config.scrollableListPainter?.scrollStarted();
}
+ @override
void dispatchOnScroll() {
super.dispatchOnScroll();
config.scrollableListPainter?.scrollOffset = scrollOffset;
}
+ @override
void dispatchOnScrollEnd() {
super.dispatchOnScrollEnd();
config.scrollableListPainter?.scrollEnded();
}
+ @override
Widget buildContent(BuildContext context) {
return new LazyListViewport(
onExtentsChanged: _handleExtentsChanged,
@@ -374,6 +402,9 @@
overlayPainter
);
+ @override
final int itemCount;
+
+ @override
final ItemListBuilder itemBuilder;
}
diff --git a/packages/flutter/lib/src/widgets/semantics_debugger.dart b/packages/flutter/lib/src/widgets/semantics_debugger.dart
index e3f86be..7a09318 100644
--- a/packages/flutter/lib/src/widgets/semantics_debugger.dart
+++ b/packages/flutter/lib/src/widgets/semantics_debugger.dart
@@ -20,30 +20,37 @@
final Widget child;
+ @override
_SemanticsDebuggerState createState() => new _SemanticsDebuggerState();
}
class _SemanticsDebuggerState extends State<SemanticsDebugger> {
+ @override
void initState() {
super.initState();
_SemanticsDebuggerListener.ensureInstantiated();
_SemanticsDebuggerListener.instance.addListener(_update);
}
+
+ @override
void dispose() {
_SemanticsDebuggerListener.instance.removeListener(_update);
super.dispose();
}
+
void _update() {
setState(() {
// the generation of the _SemanticsDebuggerListener has changed
});
}
+
Point _lastPointerDownLocation;
void _handlePointerDown(PointerDownEvent event) {
setState(() {
_lastPointerDownLocation = event.position;
});
}
+
void _handleTap() {
assert(_lastPointerDownLocation != null);
_SemanticsDebuggerListener.instance.handleTap(_lastPointerDownLocation);
@@ -65,6 +72,8 @@
_lastPointerDownLocation = null;
});
}
+
+ @override
Widget build(BuildContext context) {
return new CustomPaint(
foregroundPainter: new _SemanticsDebuggerPainter(_SemanticsDebuggerListener.instance.generation, _lastPointerDownLocation),
@@ -104,6 +113,7 @@
Rect rect;
List<_SemanticsDebuggerEntry> children;
+ @override
String toString() {
return '_SemanticsDebuggerEntry($id; $rect; "$label"'
'${canBeTapped ? "; canBeTapped" : ""}'
@@ -311,6 +321,7 @@
int generation = 0;
+ @override
void updateSemanticsTree(List<mojom.SemanticsNode> nodes) {
generation += 1;
for (mojom.SemanticsNode node in nodes)
@@ -350,8 +361,11 @@
class _SemanticsDebuggerPainter extends CustomPainter {
const _SemanticsDebuggerPainter(this.generation, this.pointerPosition);
+
final int generation;
final Point pointerPosition;
+
+ @override
void paint(Canvas canvas, Size size) {
_SemanticsDebuggerListener.instance.nodes[0]?.paint(
canvas,
@@ -363,6 +377,8 @@
canvas.drawCircle(pointerPosition, 10.0, paint);
}
}
+
+ @override
bool shouldRepaint(_SemanticsDebuggerPainter oldDelegate) {
return generation != oldDelegate.generation
|| pointerPosition != oldDelegate.pointerPosition;
diff --git a/packages/flutter/lib/src/widgets/status_transitions.dart b/packages/flutter/lib/src/widgets/status_transitions.dart
index 211474e..d2a1961 100644
--- a/packages/flutter/lib/src/widgets/status_transitions.dart
+++ b/packages/flutter/lib/src/widgets/status_transitions.dart
@@ -19,15 +19,18 @@
Widget build(BuildContext context);
+ @override
_StatusTransitionState createState() => new _StatusTransitionState();
}
class _StatusTransitionState extends State<StatusTransitionWidget> {
+ @override
void initState() {
super.initState();
config.animation.addStatusListener(_animationStatusChanged);
}
+ @override
void didUpdateConfig(StatusTransitionWidget oldConfig) {
if (config.animation != oldConfig.animation) {
oldConfig.animation.removeStatusListener(_animationStatusChanged);
@@ -35,6 +38,7 @@
}
}
+ @override
void dispose() {
config.animation.removeStatusListener(_animationStatusChanged);
super.dispose();
@@ -46,6 +50,7 @@
});
}
+ @override
Widget build(BuildContext context) {
return config.build(context);
}
diff --git a/packages/flutter/lib/src/widgets/title.dart b/packages/flutter/lib/src/widgets/title.dart
index 74cda74..8e2f279 100644
--- a/packages/flutter/lib/src/widgets/title.dart
+++ b/packages/flutter/lib/src/widgets/title.dart
@@ -24,11 +24,13 @@
final Widget child;
+ @override
Widget build(BuildContext context) {
updateTaskDescription(label: title, color: color);
return child;
}
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
if (title != null)
diff --git a/packages/flutter/lib/src/widgets/transitions.dart b/packages/flutter/lib/src/widgets/transitions.dart
index 2223cda..ed4ad23 100644
--- a/packages/flutter/lib/src/widgets/transitions.dart
+++ b/packages/flutter/lib/src/widgets/transitions.dart
@@ -35,8 +35,10 @@
Widget build(BuildContext context);
/// Subclasses typically do not override this method.
+ @override
_AnimatedState createState() => new _AnimatedState();
+ @override
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
description.add('animation: $animation');
@@ -44,11 +46,13 @@
}
class _AnimatedState extends State<AnimatedWidget> {
+ @override
void initState() {
super.initState();
config.animation.addListener(_handleTick);
}
+ @override
void didUpdateConfig(AnimatedWidget oldConfig) {
if (config.animation != oldConfig.animation) {
oldConfig.animation.removeListener(_handleTick);
@@ -56,6 +60,7 @@
}
}
+ @override
void dispose() {
config.animation.removeListener(_handleTick);
super.dispose();
@@ -67,6 +72,7 @@
});
}
+ @override
Widget build(BuildContext context) {
return config.build(context);
}
@@ -99,6 +105,7 @@
final Widget child;
+ @override
Widget build(BuildContext context) {
return new FractionalTranslation(
translation: position.value,
@@ -132,6 +139,7 @@
final Widget child;
+ @override
Widget build(BuildContext context) {
double scaleValue = scale.value;
Matrix4 transform = new Matrix4.identity()
@@ -160,6 +168,7 @@
final Widget child;
+ @override
Widget build(BuildContext context) {
double turnsValue = turns.value;
Matrix4 transform = new Matrix4.rotationZ(turnsValue * math.PI * 2.0);
@@ -196,6 +205,7 @@
final Widget child;
+ @override
Widget build(BuildContext context) {
return new ClipRect(
child: new Align(
@@ -226,6 +236,7 @@
final Widget child;
+ @override
Widget build(BuildContext context) {
return new Opacity(opacity: opacity.value, child: child);
}
@@ -240,6 +251,7 @@
RelativeRectTween({ RelativeRect begin, RelativeRect end })
: super(begin: begin, end: end);
+ @override
RelativeRect lerp(double t) => RelativeRect.lerp(begin, end, t);
}
@@ -262,6 +274,7 @@
final Widget child;
+ @override
Widget build(BuildContext context) {
return new Positioned(
top: rect.value.top,
@@ -318,6 +331,7 @@
/// performance significantly in some cases and is therefore a good practice.
final Widget child;
+ @override
Widget build(BuildContext context) {
return builder(context, child);
}
diff --git a/packages/flutter/lib/src/widgets/unique_widget.dart b/packages/flutter/lib/src/widgets/unique_widget.dart
index ecf546b..b3c268f 100644
--- a/packages/flutter/lib/src/widgets/unique_widget.dart
+++ b/packages/flutter/lib/src/widgets/unique_widget.dart
@@ -10,6 +10,7 @@
assert(key != null);
}
+ @override
T createState();
/// The state for the unique inflated instance of this widget.
diff --git a/packages/flutter/lib/src/widgets/virtual_viewport.dart b/packages/flutter/lib/src/widgets/virtual_viewport.dart
index 447f3bc..453ea4c 100644
--- a/packages/flutter/lib/src/widgets/virtual_viewport.dart
+++ b/packages/flutter/lib/src/widgets/virtual_viewport.dart
@@ -34,6 +34,7 @@
abstract class VirtualViewportElement extends RenderObjectElement {
VirtualViewportElement(VirtualViewport widget) : super(widget);
+ @override
VirtualViewport get widget => super.widget;
/// The index of the first child to materialize.
@@ -72,8 +73,10 @@
List<Element> _materializedChildren = const <Element>[];
- RenderVirtualViewport<dynamic> get renderObject => super.renderObject;
+ @override
+ RenderVirtualViewport<ContainerBoxParentDataMixin<RenderBox>> get renderObject => super.renderObject;
+ @override
void visitChildren(ElementVisitor visitor) {
if (_materializedChildren == null)
return;
@@ -83,6 +86,7 @@
_WidgetProvider _widgetProvider;
+ @override
void mount(Element parent, dynamic newSlot) {
_widgetProvider = widget._createWidgetProvider();
_widgetProvider.didUpdateWidget(null, widget);
@@ -91,11 +95,13 @@
updateRenderObject(null);
}
+ @override
void unmount() {
renderObject.callback = null;
super.unmount();
}
+ @override
void update(VirtualViewport newWidget) {
VirtualViewport oldWidget = widget;
_widgetProvider.didUpdateWidget(oldWidget, newWidget);
@@ -169,15 +175,18 @@
_materializedChildren = updateChildren(_materializedChildren, newWidgets);
}
+ @override
void insertChildRenderObject(RenderObject child, Element slot) {
renderObject.insert(child, after: slot?.renderObject);
}
+ @override
void moveChildRenderObject(RenderObject child, Element slot) {
assert(child.parent == renderObject);
renderObject.move(child, after: slot?.renderObject);
}
+ @override
void removeChildRenderObject(RenderObject child) {
assert(child.parent == renderObject);
renderObject.remove(child);
@@ -192,6 +201,7 @@
/// The children, some of which might be materialized.
Iterable<Widget> get children;
+ @override
_IterableWidgetProvider _createWidgetProvider() => new _IterableWidgetProvider();
}
@@ -200,6 +210,7 @@
Iterator<Widget> _iterator;
List<Widget> _widgets;
+ @override
void didUpdateWidget(VirtualViewportFromIterable oldWidget, VirtualViewportFromIterable newWidget) {
if (oldWidget == null || newWidget.children != oldWidget.children) {
_iterator = null;
@@ -208,8 +219,10 @@
}
}
+ @override
int get virtualChildCount => _length;
+ @override
void prepareChildren(VirtualViewportElement context, int base, int count) {
int limit = base < 0 ? _length : math.min(_length, base + count);
if (limit <= _widgets.length)
@@ -229,6 +242,7 @@
}
}
+ @override
Widget getChild(int i) => _widgets[(i % _length).abs()];
}
@@ -249,6 +263,7 @@
/// determine which children are visible).
ItemListBuilder get itemBuilder;
+ @override
_LazyWidgetProvider _createWidgetProvider() => new _LazyWidgetProvider();
}
@@ -257,6 +272,7 @@
int _base;
List<Widget> _widgets;
+ @override
void didUpdateWidget(VirtualViewportFromBuilder oldWidget, VirtualViewportFromBuilder newWidget) {
// TODO(abarth): We shouldn't check the itemBuilder closure for equality with.
// instead, we should use the widget's identity to decide whether to rebuild.
@@ -267,8 +283,10 @@
}
}
+ @override
int get virtualChildCount => _length;
+ @override
void prepareChildren(VirtualViewportElement context, int base, int count) {
if (_widgets != null && _widgets.length == count && _base == base)
return;
@@ -277,6 +295,7 @@
_widgets = widget.itemBuilder(context, base, count);
}
+ @override
Widget getChild(int i) {
int n = _length ?? _widgets.length;
return _widgets[(i % n).abs()];
diff --git a/packages/flutter/test/gestures/arena_test.dart b/packages/flutter/test/gestures/arena_test.dart
index 6692f38..4f49ec6 100644
--- a/packages/flutter/test/gestures/arena_test.dart
+++ b/packages/flutter/test/gestures/arena_test.dart
@@ -11,11 +11,15 @@
class TestGestureArenaMember extends GestureArenaMember {
bool acceptRan = false;
+
+ @override
void acceptGesture(int key) {
expect(key, equals(primaryKey));
acceptRan = true;
}
bool rejectRan = false;
+
+ @override
void rejectGesture(int key) {
expect(key, equals(primaryKey));
rejectRan = true;
diff --git a/packages/flutter/test/gestures/double_tap_test.dart b/packages/flutter/test/gestures/double_tap_test.dart
index e080d2c..2f6d259 100644
--- a/packages/flutter/test/gestures/double_tap_test.dart
+++ b/packages/flutter/test/gestures/double_tap_test.dart
@@ -9,12 +9,16 @@
import 'gesture_tester.dart';
class TestGestureArenaMember extends GestureArenaMember {
+ @override
void acceptGesture(int key) {
accepted = true;
}
+
+ @override
void rejectGesture(int key) {
rejected = true;
}
+
bool accepted = false;
bool rejected = false;
}
diff --git a/packages/flutter/test/gestures/tap_test.dart b/packages/flutter/test/gestures/tap_test.dart
index 9b8382a..c81f368 100644
--- a/packages/flutter/test/gestures/tap_test.dart
+++ b/packages/flutter/test/gestures/tap_test.dart
@@ -9,7 +9,10 @@
import 'gesture_tester.dart';
class TestGestureArenaMember extends GestureArenaMember {
+ @override
void acceptGesture(int key) {}
+
+ @override
void rejectGesture(int key) {}
}
diff --git a/packages/flutter/test/painting/paint_image_test.dart b/packages/flutter/test/painting/paint_image_test.dart
index 078d30e..7b3f36e 100644
--- a/packages/flutter/test/painting/paint_image_test.dart
+++ b/packages/flutter/test/painting/paint_image_test.dart
@@ -11,15 +11,20 @@
class TestImage implements ui.Image {
TestImage({ this.width, this.height });
+ @override
final int width;
+
+ @override
final int height;
+ @override
void dispose() { }
}
class TestCanvas implements Canvas {
final List<Invocation> invocations = <Invocation>[];
+ @override
void noSuchMethod(Invocation invocation) {
invocations.add(invocation);
}
diff --git a/packages/flutter/test/rendering/block_test.dart b/packages/flutter/test/rendering/block_test.dart
index 9a67565..724fb52 100644
--- a/packages/flutter/test/rendering/block_test.dart
+++ b/packages/flutter/test/rendering/block_test.dart
@@ -9,6 +9,7 @@
import 'rendering_tester.dart';
class TestBlockPainter extends RenderObjectPainter {
+ @override
void paint(PaintingContext context, Offset offset) { }
}
diff --git a/packages/flutter/test/rendering/image_test.dart b/packages/flutter/test/rendering/image_test.dart
index 264d60d..f5e3061 100644
--- a/packages/flutter/test/rendering/image_test.dart
+++ b/packages/flutter/test/rendering/image_test.dart
@@ -10,20 +10,35 @@
import 'rendering_tester.dart';
class SquareImage implements ui.Image {
+ @override
int get width => 10;
+
+ @override
int get height => 10;
+
+ @override
void dispose() { }
}
class WideImage implements ui.Image {
+ @override
int get width => 20;
+
+ @override
int get height => 10;
+
+ @override
void dispose() { }
}
class TallImage implements ui.Image {
+ @override
int get width => 10;
+
+ @override
int get height => 20;
+
+ @override
void dispose() { }
}
diff --git a/packages/flutter/test/rendering/intrinsic_width_test.dart b/packages/flutter/test/rendering/intrinsic_width_test.dart
index 9f789e5..c740e7c 100644
--- a/packages/flutter/test/rendering/intrinsic_width_test.dart
+++ b/packages/flutter/test/rendering/intrinsic_width_test.dart
@@ -12,23 +12,30 @@
final BoxConstraints _intrinsicDimensions;
+ @override
double getMinIntrinsicWidth(BoxConstraints constraints) {
return constraints.constrainWidth(_intrinsicDimensions.minWidth);
}
+ @override
double getMaxIntrinsicWidth(BoxConstraints constraints) {
return constraints.constrainWidth(_intrinsicDimensions.maxWidth);
}
+ @override
double getMinIntrinsicHeight(BoxConstraints constraints) {
return constraints.constrainHeight(_intrinsicDimensions.minHeight);
}
+ @override
double getMaxIntrinsicHeight(BoxConstraints constraints) {
return constraints.constrainHeight(_intrinsicDimensions.maxHeight);
}
+ @override
bool get sizedByParent => true;
+
+ @override
void performResize() {
size = constraints.constrain(new Size(_intrinsicDimensions.minWidth + (_intrinsicDimensions.maxWidth-_intrinsicDimensions.minWidth) / 2.0,
_intrinsicDimensions.minHeight + (_intrinsicDimensions.maxHeight-_intrinsicDimensions.minHeight) / 2.0));
diff --git a/packages/flutter/test/rendering/mutations_test.dart b/packages/flutter/test/rendering/mutations_test.dart
index ce9a525..1a1a24f 100644
--- a/packages/flutter/test/rendering/mutations_test.dart
+++ b/packages/flutter/test/rendering/mutations_test.dart
@@ -10,7 +10,10 @@
class RenderLayoutTestBox extends RenderProxyBox {
RenderLayoutTestBox(this.onLayout);
+
final VoidCallback onLayout;
+
+ @override
void layout(Constraints constraints, { bool parentUsesSize: false }) {
// Doing this in tests is ok, but if you're writing your own
// render object, you want to override performLayout(), not
@@ -20,7 +23,11 @@
super.layout(constraints, parentUsesSize: parentUsesSize);
onLayout();
}
+
+ @override
bool get sizedByParent => true;
+
+ @override
void performLayout() { }
}
diff --git a/packages/flutter/test/rendering/rendering_tester.dart b/packages/flutter/test/rendering/rendering_tester.dart
index 6ac6287..7719a47 100644
--- a/packages/flutter/test/rendering/rendering_tester.dart
+++ b/packages/flutter/test/rendering/rendering_tester.dart
@@ -13,6 +13,8 @@
TestRenderView() {
configuration = new ViewConfiguration(size: _kTestViewSize);
}
+
+ @override
void scheduleInitialFrame() {
scheduleInitialLayout();
scheduleInitialPaint(new TransformLayer(transform: new Matrix4.identity()));
@@ -27,6 +29,7 @@
}
class TestRenderingFlutterBinding extends BindingBase with Scheduler, Services, Renderer, Gesturer {
+ @override
void initRenderView() {
if (renderView == null) {
renderView = new TestRenderView();
@@ -36,6 +39,7 @@
EnginePhase phase = EnginePhase.composite;
+ @override
void beginFrame() {
RenderObject.flushLayout();
if (phase == EnginePhase.layout)
@@ -83,9 +87,11 @@
final VoidCallback onPaint;
+ @override
void paint(Canvas canvas, Size size) {
onPaint();
}
+ @override
bool shouldRepaint(TestCallbackPainter oldPainter) => true;
}
diff --git a/packages/flutter/test/widget/asset_vendor_test.dart b/packages/flutter/test/widget/asset_vendor_test.dart
index 206b516..42e3775 100644
--- a/packages/flutter/test/widget/asset_vendor_test.dart
+++ b/packages/flutter/test/widget/asset_vendor_test.dart
@@ -15,8 +15,14 @@
class TestImage extends ui.Image {
TestImage(this.scale);
final double scale;
+
+ @override
int get width => (48*scale).floor();
+
+ @override
int get height => (48*scale).floor();
+
+ @override
void dispose() { }
}
@@ -38,12 +44,17 @@
class TestAssetBundle extends AssetBundle {
// Image loading logic routes through load(key)
+ @override
ImageResource loadImage(String key) => null;
+
+ @override
Future<String> loadString(String key) {
if (key == 'AssetManifest.json')
return (new Completer<String>()..complete(testManifest)).future;
return null;
}
+
+ @override
Future<core.MojoDataPipeConsumer> load(String key) {
core.MojoDataPipeConsumer pipe;
switch (key) {
@@ -65,6 +76,8 @@
}
return (new Completer<core.MojoDataPipeConsumer>()..complete(pipe)).future;
}
+
+ @override
String toString() => '$runtimeType@$hashCode()';
}
diff --git a/packages/flutter/test/widget/build_scope_test.dart b/packages/flutter/test/widget/build_scope_test.dart
index d95d2fb..12e35cb 100644
--- a/packages/flutter/test/widget/build_scope_test.dart
+++ b/packages/flutter/test/widget/build_scope_test.dart
@@ -10,21 +10,25 @@
import 'test_widgets.dart';
class ProbeWidget extends StatefulWidget {
+ @override
ProbeWidgetState createState() => new ProbeWidgetState();
}
class ProbeWidgetState extends State<ProbeWidget> {
static int buildCount = 0;
+ @override
void initState() {
super.initState();
setState(() {});
}
+ @override
void didUpdateConfig(ProbeWidget oldConfig) {
setState(() {});
}
+ @override
Widget build(BuildContext context) {
setState(() {});
buildCount++;
@@ -37,6 +41,7 @@
final State parentState;
+ @override
Widget build(BuildContext context) {
parentState.setState(() {});
return new Container();
@@ -44,24 +49,29 @@
}
class BadWidgetParent extends StatefulWidget {
+ @override
BadWidgetParentState createState() => new BadWidgetParentState();
}
class BadWidgetParentState extends State<BadWidgetParent> {
+ @override
Widget build(BuildContext context) {
return new BadWidget(this);
}
}
class BadDisposeWidget extends StatefulWidget {
+ @override
BadDisposeWidgetState createState() => new BadDisposeWidgetState();
}
class BadDisposeWidgetState extends State<BadDisposeWidget> {
+ @override
Widget build(BuildContext context) {
return new Container();
}
+ @override
void dispose() {
setState(() {});
super.dispose();
diff --git a/packages/flutter/test/widget/custom_multi_child_layout_test.dart b/packages/flutter/test/widget/custom_multi_child_layout_test.dart
index 9b741c8..00101dd 100644
--- a/packages/flutter/test/widget/custom_multi_child_layout_test.dart
+++ b/packages/flutter/test/widget/custom_multi_child_layout_test.dart
@@ -10,6 +10,7 @@
class TestMultiChildLayoutDelegate extends MultiChildLayoutDelegate {
BoxConstraints getSizeConstraints;
+ @override
Size getSize(BoxConstraints constraints) {
if (!RenderObject.debugCheckingIntrinsics)
getSizeConstraints = constraints;
@@ -21,6 +22,7 @@
Size performLayoutSize1;
bool performLayoutIsChild;
+ @override
void performLayout(Size size) {
assert(!RenderObject.debugCheckingIntrinsics);
expect(() {
@@ -34,6 +36,8 @@
bool shouldRelayoutCalled = false;
bool shouldRelayoutValue = false;
+
+ @override
bool shouldRelayout(_) {
assert(!RenderObject.debugCheckingIntrinsics);
shouldRelayoutCalled = true;
@@ -58,10 +62,13 @@
final Size preferredSize;
+ @override
Size getSize(BoxConstraints constraints) => preferredSize;
+ @override
void performLayout(Size size) { }
+ @override
bool shouldRelayout(PreferredSizeDelegate oldDelegate) {
return preferredSize != oldDelegate.preferredSize;
}
diff --git a/packages/flutter/test/widget/custom_one_child_layout_test.dart b/packages/flutter/test/widget/custom_one_child_layout_test.dart
index 71e1e94..bc88e8a 100644
--- a/packages/flutter/test/widget/custom_one_child_layout_test.dart
+++ b/packages/flutter/test/widget/custom_one_child_layout_test.dart
@@ -13,12 +13,14 @@
Size sizeFromGetPositionForChild;
Size childSizeFromGetPositionForChild;
+ @override
Size getSize(BoxConstraints constraints) {
if (!RenderObject.debugCheckingIntrinsics)
constraintsFromGetSize = constraints;
return new Size(200.0, 300.0);
}
+ @override
BoxConstraints getConstraintsForChild(BoxConstraints constraints) {
assert(!RenderObject.debugCheckingIntrinsics);
constraintsFromGetConstraintsForChild = constraints;
@@ -30,6 +32,7 @@
);
}
+ @override
Offset getPositionForChild(Size size, Size childSize) {
assert(!RenderObject.debugCheckingIntrinsics);
sizeFromGetPositionForChild = size;
@@ -39,6 +42,8 @@
bool shouldRelayoutCalled = false;
bool shouldRelayoutValue = false;
+
+ @override
bool shouldRelayout(_) {
assert(!RenderObject.debugCheckingIntrinsics);
shouldRelayoutCalled = true;
diff --git a/packages/flutter/test/widget/custom_paint_test.dart b/packages/flutter/test/widget/custom_paint_test.dart
index 7a34d85..b8371a0 100644
--- a/packages/flutter/test/widget/custom_paint_test.dart
+++ b/packages/flutter/test/widget/custom_paint_test.dart
@@ -12,10 +12,12 @@
List<String> log;
String name;
+ @override
void paint(Canvas canvas, Size size) {
log.add(name);
}
+ @override
bool shouldRepaint(TestCustomPainter oldPainter) => true;
}
diff --git a/packages/flutter/test/widget/dismissable_test.dart b/packages/flutter/test/widget/dismissable_test.dart
index 1aaf250..97a1e07 100644
--- a/packages/flutter/test/widget/dismissable_test.dart
+++ b/packages/flutter/test/widget/dismissable_test.dart
@@ -107,7 +107,10 @@
class Test1215DismissableWidget extends StatelessWidget {
Test1215DismissableWidget(this.text);
+
final String text;
+
+ @override
Widget build(BuildContext context) {
return new Dismissable(
key: new ObjectKey(text),
diff --git a/packages/flutter/test/widget/duplicate_key_test.dart b/packages/flutter/test/widget/duplicate_key_test.dart
index 0f4bd80..75a0da3 100644
--- a/packages/flutter/test/widget/duplicate_key_test.dart
+++ b/packages/flutter/test/widget/duplicate_key_test.dart
@@ -9,23 +9,32 @@
class Item {
GlobalKey key1 = new GlobalKey();
GlobalKey key2 = new GlobalKey();
+
+ @override
String toString() => "Item($key1, $key2)";
}
List<Item> items = <Item>[new Item(), new Item()];
class StatefulLeaf extends StatefulWidget {
StatefulLeaf({ GlobalKey key }) : super(key: key);
+
+ @override
StatefulLeafState createState() => new StatefulLeafState();
}
class StatefulLeafState extends State<StatefulLeaf> {
void test() { setState(() { }); }
+
+ @override
Widget build(BuildContext context) => new Text('leaf');
}
class KeyedWrapper extends StatelessWidget {
KeyedWrapper(this.key1, this.key2);
+
Key key1, key2;
+
+ @override
Widget build(BuildContext context) {
return new Container(
key: key1,
diff --git a/packages/flutter/test/widget/focus_test.dart b/packages/flutter/test/widget/focus_test.dart
index bfe82b8..6f206c8 100644
--- a/packages/flutter/test/widget/focus_test.dart
+++ b/packages/flutter/test/widget/focus_test.dart
@@ -18,6 +18,7 @@
final String yes;
final bool autofocus;
+ @override
Widget build(BuildContext context) {
bool focused = Focus.at(context, autofocus: autofocus);
return new GestureDetector(
diff --git a/packages/flutter/test/widget/init_state_test.dart b/packages/flutter/test/widget/init_state_test.dart
index 418f2ce..e0cd698 100644
--- a/packages/flutter/test/widget/init_state_test.dart
+++ b/packages/flutter/test/widget/init_state_test.dart
@@ -9,10 +9,12 @@
List<String> ancestors = <String>[];
class TestWidget extends StatefulWidget {
+ @override
TestWidgetState createState() => new TestWidgetState();
}
class TestWidgetState extends State<TestWidget> {
+ @override
void initState() {
super.initState();
context.visitAncestorElements((Element element) {
@@ -21,6 +23,7 @@
});
}
+ @override
Widget build(BuildContext context) => new Container();
}
diff --git a/packages/flutter/test/widget/input_test.dart b/packages/flutter/test/widget/input_test.dart
index bbccae3..5c6011e 100644
--- a/packages/flutter/test/widget/input_test.dart
+++ b/packages/flutter/test/widget/input_test.dart
@@ -11,14 +11,18 @@
class MockKeyboard implements mojom.Keyboard {
mojom.KeyboardClient client;
+ @override
void setClient(mojom.KeyboardClientStub client, mojom.KeyboardConfiguration configuraiton) {
this.client = client.impl;
}
+ @override
void show() {}
+ @override
void hide() {}
+ @override
void setEditingState(mojom.EditingState state) {}
}
diff --git a/packages/flutter/test/widget/modal_barrier_test.dart b/packages/flutter/test/widget/modal_barrier_test.dart
index c7b6d19..1d2138a 100644
--- a/packages/flutter/test/widget/modal_barrier_test.dart
+++ b/packages/flutter/test/widget/modal_barrier_test.dart
@@ -88,6 +88,7 @@
}
class FirstWidget extends StatelessWidget {
+ @override
Widget build(BuildContext context) {
return new GestureDetector(
onTap: () {
@@ -101,6 +102,7 @@
}
class SecondWidget extends StatelessWidget {
+ @override
Widget build(BuildContext context) {
return new ModalBarrier(
key: const ValueKey<String>('barrier'),
diff --git a/packages/flutter/test/widget/navigator_test.dart b/packages/flutter/test/widget/navigator_test.dart
index 221d4d9..df32bce 100644
--- a/packages/flutter/test/widget/navigator_test.dart
+++ b/packages/flutter/test/widget/navigator_test.dart
@@ -7,6 +7,7 @@
import 'package:test/test.dart';
class FirstWidget extends StatelessWidget {
+ @override
Widget build(BuildContext context) {
return new GestureDetector(
onTap: () {
@@ -23,10 +24,12 @@
}
class SecondWidget extends StatefulWidget {
+ @override
SecondWidgetState createState() => new SecondWidgetState();
}
class SecondWidgetState extends State<SecondWidget> {
+ @override
Widget build(BuildContext context) {
return new GestureDetector(
onTap: () => Navigator.pop(context),
@@ -48,6 +51,7 @@
final Key targetKey;
final ExceptionCallback onException;
+ @override
Widget build(BuildContext context) {
return new GestureDetector(
key: targetKey,
diff --git a/packages/flutter/test/widget/page_forward_transitions_test.dart b/packages/flutter/test/widget/page_forward_transitions_test.dart
index d350d31..a062eac 100644
--- a/packages/flutter/test/widget/page_forward_transitions_test.dart
+++ b/packages/flutter/test/widget/page_forward_transitions_test.dart
@@ -19,6 +19,7 @@
final Widget childFirstHalf;
final Widget childSecondHalf;
+ @override
Widget build(BuildContext context) {
final Animation<double> animation = this.animation;
if (animation.value >= 0.5)
@@ -29,9 +30,16 @@
class TestRoute<T> extends PageRoute<T> {
TestRoute({ this.child, RouteSettings settings}) : super(settings: settings);
+
final Widget child;
+
+ @override
Duration get transitionDuration => kMaterialPageRouteTransitionDuration;
+
+ @override
Color get barrierColor => null;
+
+ @override
Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> forwardAnimation) {
return child;
}
diff --git a/packages/flutter/test/widget/page_transitions_test.dart b/packages/flutter/test/widget/page_transitions_test.dart
index e3756c0..20ed70f 100644
--- a/packages/flutter/test/widget/page_transitions_test.dart
+++ b/packages/flutter/test/widget/page_transitions_test.dart
@@ -9,6 +9,7 @@
import 'test_matchers.dart';
class TestOverlayRoute extends OverlayRoute<Null> {
+ @override
List<WidgetBuilder> get builders => <WidgetBuilder>[ _build ];
Widget _build(BuildContext context) => new Text('Overlay');
}
diff --git a/packages/flutter/test/widget/remember_scroll_position_test.dart b/packages/flutter/test/widget/remember_scroll_position_test.dart
index 6e6b7e3..cb77013 100644
--- a/packages/flutter/test/widget/remember_scroll_position_test.dart
+++ b/packages/flutter/test/widget/remember_scroll_position_test.dart
@@ -7,6 +7,7 @@
import 'package:test/test.dart';
class ThePositiveNumbers extends StatelessWidget {
+ @override
Widget build(BuildContext context) {
return new ScrollableLazyList(
itemExtent: 100.0,
diff --git a/packages/flutter/test/widget/render_object_widget_test.dart b/packages/flutter/test/widget/render_object_widget_test.dart
index ed70615..f7301b6 100644
--- a/packages/flutter/test/widget/render_object_widget_test.dart
+++ b/packages/flutter/test/widget/render_object_widget_test.dart
@@ -13,7 +13,10 @@
class TestWidget extends StatelessWidget {
const TestWidget({ this.child });
+
final Widget child;
+
+ @override
Widget build(BuildContext context) => child;
}
diff --git a/packages/flutter/test/widget/reparent_state_test.dart b/packages/flutter/test/widget/reparent_state_test.dart
index 5bc5871..d20d035 100644
--- a/packages/flutter/test/widget/reparent_state_test.dart
+++ b/packages/flutter/test/widget/reparent_state_test.dart
@@ -11,12 +11,14 @@
final Widget child;
+ @override
StateMarkerState createState() => new StateMarkerState();
}
class StateMarkerState extends State<StateMarker> {
String marker;
+ @override
Widget build(BuildContext context) {
if (config.child != null)
return config.child;
diff --git a/packages/flutter/test/widget/routes_test.dart b/packages/flutter/test/widget/routes_test.dart
index 290ecb0..d6f0838 100644
--- a/packages/flutter/test/widget/routes_test.dart
+++ b/packages/flutter/test/widget/routes_test.dart
@@ -16,6 +16,7 @@
TestRoute(this.name);
final String name;
+ @override
List<OverlayEntry> get overlayEntries => _entries;
List<OverlayEntry> _entries = <OverlayEntry>[];
@@ -24,6 +25,7 @@
results.add('$name: $s');
}
+ @override
void install(OverlayEntry insertionPoint) {
log('install');
OverlayEntry entry = new OverlayEntry(
@@ -35,14 +37,17 @@
routes.add(this);
}
+ @override
void didPush() {
log('didPush');
}
+ @override
void didReplace(TestRoute oldRoute) {
log('didReplace ${oldRoute.name}');
}
+ @override
bool didPop(String result) {
log('didPop $result');
bool returnValue;
@@ -51,14 +56,17 @@
return returnValue;
}
+ @override
void didPopNext(TestRoute nextRoute) {
log('didPopNext ${nextRoute.name}');
}
+ @override
void didChangeNext(TestRoute nextRoute) {
log('didChangeNext ${nextRoute?.name}');
}
+ @override
void dispose() {
log('dispose');
_entries.forEach((OverlayEntry entry) { entry.remove(); });
diff --git a/packages/flutter/test/widget/scroll_events_test.dart b/packages/flutter/test/widget/scroll_events_test.dart
index ad08a14..7a12720 100644
--- a/packages/flutter/test/widget/scroll_events_test.dart
+++ b/packages/flutter/test/widget/scroll_events_test.dart
@@ -46,7 +46,7 @@
test('Scroll scrollTo animation', () {
testWidgets((WidgetTester tester) {
- GlobalKey<ScrollableState> scrollKey = new GlobalKey<ScrollableState>();
+ GlobalKey<ScrollableState<Scrollable>> scrollKey = new GlobalKey<ScrollableState<Scrollable>>();
List<String> log = <String>[];
tester.pumpWidget(_buildScroller(key: scrollKey, log: log));
@@ -64,7 +64,7 @@
test('Scroll scrollTo no animation', () {
testWidgets((WidgetTester tester) {
- GlobalKey<ScrollableState> scrollKey = new GlobalKey<ScrollableState>();
+ GlobalKey<ScrollableState<Scrollable>> scrollKey = new GlobalKey<ScrollableState<Scrollable>>();
List<String> log = <String>[];
tester.pumpWidget(_buildScroller(key: scrollKey, log: log));
@@ -76,7 +76,7 @@
test('Scroll during animation', () {
testWidgets((WidgetTester tester) {
- GlobalKey<ScrollableState> scrollKey = new GlobalKey<ScrollableState>();
+ GlobalKey<ScrollableState<Scrollable>> scrollKey = new GlobalKey<ScrollableState<Scrollable>>();
List<String> log = <String>[];
tester.pumpWidget(_buildScroller(key: scrollKey, log: log));
@@ -98,7 +98,7 @@
test('Scroll during animation', () {
testWidgets((WidgetTester tester) {
- GlobalKey<ScrollableState> scrollKey = new GlobalKey<ScrollableState>();
+ GlobalKey<ScrollableState<Scrollable>> scrollKey = new GlobalKey<ScrollableState<Scrollable>>();
List<String> log = <String>[];
tester.pumpWidget(_buildScroller(key: scrollKey, log: log));
@@ -120,7 +120,7 @@
test('fling, fling generates one start/end pair', () {
testWidgets((WidgetTester tester) {
- GlobalKey<ScrollableState> scrollKey = new GlobalKey<ScrollableState>();
+ GlobalKey<ScrollableState<Scrollable>> scrollKey = new GlobalKey<ScrollableState<Scrollable>>();
List<String> log = <String>[];
tester.pumpWidget(_buildScroller(key: scrollKey, log: log));
diff --git a/packages/flutter/test/widget/set_state_3_test.dart b/packages/flutter/test/widget/set_state_3_test.dart
index 0d8b221..78599de 100644
--- a/packages/flutter/test/widget/set_state_3_test.dart
+++ b/packages/flutter/test/widget/set_state_3_test.dart
@@ -13,12 +13,14 @@
final Widget child;
+ @override
ChangerState createState() => new ChangerState();
}
class ChangerState extends State<Changer> {
bool _state = false;
+ @override
void initState() {
super.initState();
changer = this;
@@ -26,6 +28,7 @@
void test() { setState(() { _state = true; }); }
+ @override
Widget build(BuildContext context) => _state ? new Wrapper(config.child) : config.child;
}
@@ -34,14 +37,17 @@
final Widget child;
+ @override
Widget build(BuildContext context) => child;
}
class Leaf extends StatefulWidget {
+ @override
LeafState createState() => new LeafState();
}
class LeafState extends State<Leaf> {
+ @override
Widget build(BuildContext context) => new Text("leaf");
}
diff --git a/packages/flutter/test/widget/set_state_test.dart b/packages/flutter/test/widget/set_state_test.dart
index c046ce8..91c6d44 100644
--- a/packages/flutter/test/widget/set_state_test.dart
+++ b/packages/flutter/test/widget/set_state_test.dart
@@ -7,10 +7,12 @@
import 'package:test/test.dart';
class Inside extends StatefulWidget {
+ @override
InsideState createState() => new InsideState();
}
class InsideState extends State<Inside> {
+ @override
Widget build(BuildContext context) {
return new Listener(
onPointerDown: _handlePointerDown,
@@ -28,10 +30,12 @@
final Inside child;
+ @override
MiddleState createState() => new MiddleState();
}
class MiddleState extends State<Middle> {
+ @override
Widget build(BuildContext context) {
return new Listener(
onPointerDown: _handlePointerDown,
@@ -45,10 +49,12 @@
}
class Outside extends StatefulWidget {
+ @override
OutsideState createState() => new OutsideState();
}
class OutsideState extends State<Outside> {
+ @override
Widget build(BuildContext context) {
return new Middle(child: new Inside());
}
diff --git a/packages/flutter/test/widget/stateful_components_test.dart b/packages/flutter/test/widget/stateful_components_test.dart
index 179e7e4..8233ef1 100644
--- a/packages/flutter/test/widget/stateful_components_test.dart
+++ b/packages/flutter/test/widget/stateful_components_test.dart
@@ -8,17 +8,21 @@
class InnerWidget extends StatefulWidget {
InnerWidget({ Key key }) : super(key: key);
+
+ @override
InnerWidgetState createState() => new InnerWidgetState();
}
class InnerWidgetState extends State<InnerWidget> {
bool _didInitState = false;
+ @override
void initState() {
super.initState();
_didInitState = true;
}
+ @override
Widget build(BuildContext context) {
return new Container();
}
@@ -29,10 +33,12 @@
final InnerWidget child;
+ @override
OuterContainerState createState() => new OuterContainerState();
}
class OuterContainerState extends State<OuterContainer> {
+ @override
Widget build(BuildContext context) {
return config.child;
}
diff --git a/packages/flutter/test/widget/syncing_test.dart b/packages/flutter/test/widget/syncing_test.dart
index b6fedcb..8723ebb 100644
--- a/packages/flutter/test/widget/syncing_test.dart
+++ b/packages/flutter/test/widget/syncing_test.dart
@@ -13,6 +13,7 @@
final int persistentState;
final int syncedState;
+ @override
TestWidgetState createState() => new TestWidgetState();
}
@@ -21,12 +22,14 @@
int syncedState;
int updates = 0;
+ @override
void initState() {
super.initState();
persistentState = config.persistentState;
syncedState = config.syncedState;
}
+ @override
void didUpdateConfig(TestWidget oldConfig) {
syncedState = config.syncedState;
// we explicitly do NOT sync the persistentState from the new instance
@@ -34,6 +37,7 @@
updates += 1;
}
+ @override
Widget build(BuildContext context) => config.child;
}
diff --git a/packages/flutter/test/widget/test_matchers.dart b/packages/flutter/test/widget/test_matchers.dart
index 2b395fa..d46bdde 100644
--- a/packages/flutter/test/widget/test_matchers.dart
+++ b/packages/flutter/test/widget/test_matchers.dart
@@ -20,25 +20,41 @@
class _IsOnStage extends Matcher {
const _IsOnStage();
+
+ @override
bool matches(Element item, Map<dynamic, dynamic> matchState) => !_hasAncestorOfType(item, OffStage);
+
+ @override
Description describe(Description description) => description.add('onstage');
}
class _IsOffStage extends Matcher {
const _IsOffStage();
+
+ @override
bool matches(Element item, Map<dynamic, dynamic> matchState) => _hasAncestorOfType(item, OffStage);
+
+ @override
Description describe(Description description) => description.add('offstage');
}
class _IsInCard extends Matcher {
const _IsInCard();
+
+ @override
bool matches(Element item, Map<dynamic, dynamic> matchState) => _hasAncestorOfType(item, Card);
+
+ @override
Description describe(Description description) => description.add('in card');
}
class _IsNotInCard extends Matcher {
const _IsNotInCard();
+
+ @override
bool matches(Element item, Map<dynamic, dynamic> matchState) => !_hasAncestorOfType(item, Card);
+
+ @override
Description describe(Description description) => description.add('not in card');
}
diff --git a/packages/flutter/test/widget/test_semantics.dart b/packages/flutter/test/widget/test_semantics.dart
index 9fa4a32..9f399a3 100644
--- a/packages/flutter/test/widget/test_semantics.dart
+++ b/packages/flutter/test/widget/test_semantics.dart
@@ -9,7 +9,10 @@
TestSemanticsListener() {
SemanticsNode.addListener(this);
}
+
final List<mojom.SemanticsNode> updates = <mojom.SemanticsNode>[];
+
+ @override
void updateSemanticsTree(List<mojom.SemanticsNode> nodes) {
assert(!nodes.any((mojom.SemanticsNode node) => node == null));
updates.addAll(nodes);
diff --git a/packages/flutter/test/widget/test_widgets.dart b/packages/flutter/test/widget/test_widgets.dart
index 4b6fa29..b48f38f 100644
--- a/packages/flutter/test/widget/test_widgets.dart
+++ b/packages/flutter/test/widget/test_widgets.dart
@@ -21,6 +21,7 @@
class TestBuildCounter extends StatelessWidget {
static int buildCount = 0;
+ @override
Widget build(BuildContext context) {
++buildCount;
return new DecoratedBox(decoration: kBoxDecorationA);
@@ -34,6 +35,7 @@
final Widget left;
final Widget right;
+ @override
FlipWidgetState createState() => new FlipWidgetState();
}
@@ -46,6 +48,7 @@
});
}
+ @override
Widget build(BuildContext context) {
return _showLeft ? config.left : config.right;
}
diff --git a/packages/flutter/test/widget/two_level_list_test.dart b/packages/flutter/test/widget/two_level_list_test.dart
index 762521f..f09c6c5 100644
--- a/packages/flutter/test/widget/two_level_list_test.dart
+++ b/packages/flutter/test/widget/two_level_list_test.dart
@@ -22,7 +22,7 @@
new TwoLevelListItem(title: new Text('Top'), key: topKey),
new TwoLevelSublist(
key: sublistKey,
- center: new Text('Sublist'),
+ title: new Text('Sublist'),
children: <Widget>[
new TwoLevelListItem(title: new Text('0')),
new TwoLevelListItem(title: new Text('1'))
diff --git a/packages/flutter_driver/lib/src/error.dart b/packages/flutter_driver/lib/src/error.dart
index ebb4be3..cba9e5d 100644
--- a/packages/flutter_driver/lib/src/error.dart
+++ b/packages/flutter_driver/lib/src/error.dart
@@ -15,6 +15,7 @@
final dynamic originalError;
final dynamic originalStackTrace;
+ @override
String toString() {
return '''DriverError: $message
Original error: $originalError
@@ -56,6 +57,7 @@
final String loggerName;
final String message;
+ @override
String toString() => '[${"$level".split(".").last}] $loggerName: $message';
}
diff --git a/packages/flutter_driver/lib/src/find.dart b/packages/flutter_driver/lib/src/find.dart
index efe7045..2b63a9c 100644
--- a/packages/flutter_driver/lib/src/find.dart
+++ b/packages/flutter_driver/lib/src/find.dart
@@ -13,12 +13,14 @@
/// Command to find an element.
class Find extends Command {
+ @override
final String kind = 'find';
Find(this.searchSpec);
final SearchSpecification searchSpec;
+ @override
Map<String, String> serialize() => searchSpec.serialize();
static Find deserialize(Map<String, String> json) {
@@ -47,6 +49,7 @@
/// Tells [Find] to search by tooltip text.
class ByTooltipMessage extends SearchSpecification {
+ @override
final String searchSpecType = 'ByTooltipMessage';
ByTooltipMessage(this.text);
@@ -54,6 +57,7 @@
/// Tooltip message text.
final String text;
+ @override
Map<String, String> serialize() => super.serialize()..addAll({
'text': text,
});
@@ -65,12 +69,14 @@
/// Tells [Find] to search for `Text` widget by text.
class ByText extends SearchSpecification {
+ @override
final String searchSpecType = 'ByText';
ByText(this.text);
final String text;
+ @override
Map<String, String> serialize() => super.serialize()..addAll({
'text': text,
});
@@ -82,6 +88,7 @@
/// Tells [Find] to search by `ValueKey`.
class ByValueKey extends SearchSpecification {
+ @override
final String searchSpecType = 'ByValueKey';
ByValueKey(dynamic keyValue)
@@ -103,6 +110,7 @@
/// May be one of "String", "int". The list of supported types may change.
final String keyValueType;
+ @override
Map<String, String> serialize() => super.serialize()..addAll({
'keyValueString': keyValueString,
'keyValueType': keyValueType,
@@ -127,12 +135,14 @@
/// [targetRef] identifies an element that contains a piece of text.
GetText(ObjectRef targetRef) : super(targetRef);
+ @override
final String kind = 'get_text';
static GetText deserialize(Map<String, String> json) {
return new GetText(new ObjectRef(json['targetRef']));
}
+ @override
Map<String, String> serialize() => super.serialize();
}
@@ -145,6 +155,7 @@
return new GetTextResult(json['text']);
}
+ @override
Map<String, dynamic> toJson() => {
'text': text,
};
diff --git a/packages/flutter_driver/lib/src/gesture.dart b/packages/flutter_driver/lib/src/gesture.dart
index 4cf0339..f040d64 100644
--- a/packages/flutter_driver/lib/src/gesture.dart
+++ b/packages/flutter_driver/lib/src/gesture.dart
@@ -5,6 +5,7 @@
import 'message.dart';
class Tap extends CommandWithTarget {
+ @override
final String kind = 'tap';
Tap(ObjectRef targetRef) : super(targetRef);
@@ -13,6 +14,7 @@
return new Tap(new ObjectRef(json['targetRef']));
}
+ @override
Map<String, String> serialize() => super.serialize();
}
@@ -21,12 +23,14 @@
return new TapResult();
}
+ @override
Map<String, dynamic> toJson() => {};
}
/// Command the driver to perform a scrolling action.
class Scroll extends CommandWithTarget {
+ @override
final String kind = 'scroll';
Scroll(
@@ -59,6 +63,7 @@
/// The frequency in Hz of the generated move events.
final int frequency;
+ @override
Map<String, String> serialize() => super.serialize()..addAll({
'dx': '$dx',
'dy': '$dy',
@@ -72,5 +77,6 @@
return new ScrollResult();
}
+ @override
Map<String, dynamic> toJson() => {};
}
diff --git a/packages/flutter_driver/lib/src/health.dart b/packages/flutter_driver/lib/src/health.dart
index 1fffbe9..2246f96 100644
--- a/packages/flutter_driver/lib/src/health.dart
+++ b/packages/flutter_driver/lib/src/health.dart
@@ -7,10 +7,12 @@
/// Requests an application health check.
class GetHealth implements Command {
+ @override
final String kind = 'get_health';
static GetHealth deserialize(Map<String, String> json) => new GetHealth();
+ @override
Map<String, String> serialize() => const {};
}
@@ -39,6 +41,7 @@
/// Health status
final HealthStatus status;
+ @override
Map<String, dynamic> toJson() => {
'status': _healthStatusIndex.toSimpleName(status)
};
diff --git a/packages/flutter_driver/lib/src/matcher_util.dart b/packages/flutter_driver/lib/src/matcher_util.dart
index 12ab680..3944381 100644
--- a/packages/flutter_driver/lib/src/matcher_util.dart
+++ b/packages/flutter_driver/lib/src/matcher_util.dart
@@ -36,19 +36,23 @@
class _TextDescription implements Description {
final StringBuffer _text = new StringBuffer();
+ @override
int get length => _text.length;
+ @override
Description add(String text) {
_text.write(text);
return this;
}
+ @override
Description replace(String text) {
_text.clear();
_text.write(text);
return this;
}
+ @override
Description addDescriptionOf(dynamic value) {
if (value is Matcher) {
value.describe(this);
@@ -58,6 +62,7 @@
}
}
+ @override
Description addAll(String start, String separator, String end, Iterable<dynamic> list) {
add(start);
if (list.isNotEmpty) {
@@ -71,5 +76,6 @@
return this;
}
+ @override
String toString() => '$_text';
}
diff --git a/packages/flutter_driver/lib/src/message.dart b/packages/flutter_driver/lib/src/message.dart
index 4788c0c..374d985 100644
--- a/packages/flutter_driver/lib/src/message.dart
+++ b/packages/flutter_driver/lib/src/message.dart
@@ -39,6 +39,7 @@
/// tests should not generate these keys.
final String objectReferenceKey;
+ @override
Map<String, dynamic> toJson() => {
'objectReferenceKey': objectReferenceKey,
};
@@ -69,6 +70,7 @@
/// Map<String, String> toJson() => super.toJson()..addAll({
/// 'foo': this.foo,
/// });
+ @override
Map<String, String> serialize() => <String, String>{
'targetRef': targetRef,
};
diff --git a/packages/flutter_markdown/lib/src/markdown.dart b/packages/flutter_markdown/lib/src/markdown.dart
index 5edfffd..3549ae4 100644
--- a/packages/flutter_markdown/lib/src/markdown.dart
+++ b/packages/flutter_markdown/lib/src/markdown.dart
@@ -34,6 +34,7 @@
onTapLink: onTapLink
);
+ @override
MarkdownBody createMarkdownBody({
String data,
MarkdownStyle markdownStyle,
@@ -84,6 +85,7 @@
onTapLink: onTapLink
);
+ @override
MarkdownStyle createDefaultStyle(BuildContext context) {
return new MarkdownStyle.defaultFromTheme(Theme.of(context));
}
diff --git a/packages/flutter_markdown/lib/src/markdown_raw.dart b/packages/flutter_markdown/lib/src/markdown_raw.dart
index a7414c9..adb2f72 100644
--- a/packages/flutter_markdown/lib/src/markdown_raw.dart
+++ b/packages/flutter_markdown/lib/src/markdown_raw.dart
@@ -48,6 +48,7 @@
/// Callback when a link is tapped
final MarkdownLinkCallback onTapLink;
+ @override
Widget build(BuildContext context) {
return new ScrollableViewport(
child: new Padding(
@@ -120,6 +121,7 @@
/// Callback when a link is tapped
final MarkdownLinkCallback onTapLink;
+ @override
_MarkdownBodyRawState createState() => new _MarkdownBodyRawState();
MarkdownStyleRaw createDefaultStyle(BuildContext context) => null;
@@ -127,16 +129,19 @@
class _MarkdownBodyRawState extends State<MarkdownBodyRaw> {
+ @override
void initState() {
super.initState();
_buildMarkdownCache();
}
+ @override
void dispose() {
_linkHandler.dispose();
super.dispose();
}
+ @override
void didUpdateConfig(MarkdownBodyRaw oldConfig) {
super.didUpdateConfig(oldConfig);
@@ -165,6 +170,7 @@
List<_Block> _cachedBlocks;
_LinkHandler _linkHandler;
+ @override
Widget build(BuildContext context) {
List<Widget> blocks = <Widget>[];
for (_Block block in _cachedBlocks) {
@@ -177,6 +183,7 @@
);
}
+ @override
void debugFillDescription(List<String> description) {
description.add('cached blocks identity: ${_cachedBlocks.hashCode}');
}
@@ -205,6 +212,7 @@
SyntaxHighlighter _syntaxHighlighter;
_LinkHandler _linkHandler;
+ @override
void visitText(md.Text text) {
_MarkdownNodeList topList = _currentBlock.stack.last;
List<_MarkdownNode> top = topList.list;
@@ -215,6 +223,7 @@
top.add(new _MarkdownNodeString(text.text));
}
+ @override
bool visitElementBefore(md.Element element) {
if (_isListTag(element.tag))
_listIndents.add(element.tag);
@@ -241,6 +250,7 @@
return true;
}
+ @override
void visitElementAfter(md.Element element) {
if (_isListTag(element.tag))
_listIndents.removeLast();
@@ -520,6 +530,7 @@
final TextStyle style;
+ @override
TextSpan format(String source) {
return new TextSpan(style: style, children: <TextSpan>[new TextSpan(text: source)]);
}
diff --git a/packages/flutter_sprites/lib/src/action.dart b/packages/flutter_sprites/lib/src/action.dart
index d0b6cf9..c77298f 100644
--- a/packages/flutter_sprites/lib/src/action.dart
+++ b/packages/flutter_sprites/lib/src/action.dart
@@ -47,6 +47,7 @@
/// The duration, in seconds, of the action.
///
/// double myTime = myAction.duration;
+ @override
double get duration => _duration;
double _duration;
@@ -58,6 +59,7 @@
bool _firstTick = true;
double _elapsed = 0.0;
+ @override
void step(double dt) {
if (_firstTick) {
_firstTick = false;
@@ -96,6 +98,7 @@
_duration = action.duration * numRepeats;
}
+ @override
void update(double t) {
int currentRepeat = math.min((t * numRepeats.toDouble()).toInt(), numRepeats - 1);
for (int i = math.max(_lastFinishedRepeat, 0); i < currentRepeat; i++) {
@@ -124,6 +127,7 @@
/// var myInifiniteLoop = new ActionRepeatForever(myAction);
ActionRepeatForever(this.action);
+ @override
void step(double dt) {
_elapsedInAction += dt;
while (_elapsedInAction > action.duration) {
@@ -176,6 +180,7 @@
}
}
+ @override
void update(double t) {
if (t < _split) {
// Play first action
@@ -225,6 +230,7 @@
action._finished = true;
}
+ @override
void _reset() {
super._reset();
_a._reset();
@@ -249,6 +255,7 @@
}
}
+ @override
void update(double t) {
if (t >= 1.0) {
// Finish all unfinished actions
@@ -289,6 +296,7 @@
}
}
+ @override
void _reset() {
for (Action action in _actions) {
action._reset();
@@ -307,9 +315,11 @@
/// create custom instant actions, only the [fire] method should be overriden.
abstract class ActionInstant extends Action {
+ @override
void step(double dt) {
}
+ @override
void update(double t) {
fire();
_finished = true;
@@ -327,6 +337,7 @@
/// var myAction = new ActionCallFunction(() { print("Hello!";) });
ActionCallFunction(this._function);
+ @override
void fire() {
_function();
}
@@ -341,6 +352,7 @@
/// var myAction = new ActionRemoveNode(myNode);
ActionRemoveNode(this._node);
+ @override
void fire() {
_node.removeFromParent();
}
@@ -423,6 +435,7 @@
}
}
+ @override
void update(double t) {
dynamic newVal;
diff --git a/packages/flutter_sprites/lib/src/action_spline.dart b/packages/flutter_sprites/lib/src/action_spline.dart
index beef314..c6abc13 100644
--- a/packages/flutter_sprites/lib/src/action_spline.dart
+++ b/packages/flutter_sprites/lib/src/action_spline.dart
@@ -42,6 +42,7 @@
double _dt;
+ @override
void update(double t) {
int p;
diff --git a/packages/flutter_sprites/lib/src/constraint.dart b/packages/flutter_sprites/lib/src/constraint.dart
index 99296cf..343cff5 100644
--- a/packages/flutter_sprites/lib/src/constraint.dart
+++ b/packages/flutter_sprites/lib/src/constraint.dart
@@ -48,10 +48,12 @@
Point _lastPosition;
+ @override
void preUpdate(Node node, double dt) {
_lastPosition = node.position;
}
+ @override
void constrain(Node node, double dt) {
if (_lastPosition == null) return;
if (_lastPosition == node.position) return;
@@ -83,6 +85,7 @@
/// values are in the range 0.0 to 1.0
final double dampening;
+ @override
void constrain(Node node, double dt) {
Offset offset;
@@ -117,6 +120,7 @@
final Offset offset;
final double dampening;
+ @override
void constrain(Node node, double dt) {
Point targetPosition;
diff --git a/packages/flutter_sprites/lib/src/effect_line.dart b/packages/flutter_sprites/lib/src/effect_line.dart
index 1f94fce..2c8af36 100644
--- a/packages/flutter_sprites/lib/src/effect_line.dart
+++ b/packages/flutter_sprites/lib/src/effect_line.dart
@@ -89,6 +89,7 @@
TexturedLinePainter _painter;
double _offset = 0.0;
+ @override
void update(double dt) {
// Update scrolling position
if (animationMode == EffectLineAnimationMode.scroll) {
@@ -121,6 +122,7 @@
}
}
+ @override
void paint(Canvas canvas) {
if (points.length < 2) return;
diff --git a/packages/flutter_sprites/lib/src/label.dart b/packages/flutter_sprites/lib/src/label.dart
index 0318cdc..218e509 100644
--- a/packages/flutter_sprites/lib/src/label.dart
+++ b/packages/flutter_sprites/lib/src/label.dart
@@ -33,6 +33,7 @@
TextPainter _painter;
double _width;
+ @override
void paint(Canvas canvas) {
if (_painter == null) {
_painter = new TextPainter(new TextSpan(style: _textStyle, text: _text));
diff --git a/packages/flutter_sprites/lib/src/layer.dart b/packages/flutter_sprites/lib/src/layer.dart
index 8c8e592..2c4bb1d 100644
--- a/packages/flutter_sprites/lib/src/layer.dart
+++ b/packages/flutter_sprites/lib/src/layer.dart
@@ -25,6 +25,7 @@
..filterQuality = FilterQuality.low
..isAntiAlias = false;
+ @override
void _prePaint(Canvas canvas, Matrix4 matrix) {
super._prePaint(canvas, matrix);
@@ -32,6 +33,7 @@
canvas.saveLayer(layerRect, _cachedPaint);
}
+ @override
void _postPaint(Canvas canvas, Matrix4 totalMatrix) {
canvas.restore();
super._postPaint(canvas, totalMatrix);
diff --git a/packages/flutter_sprites/lib/src/node3d.dart b/packages/flutter_sprites/lib/src/node3d.dart
index 1424a21..6cc7777 100644
--- a/packages/flutter_sprites/lib/src/node3d.dart
+++ b/packages/flutter_sprites/lib/src/node3d.dart
@@ -38,6 +38,7 @@
invalidateTransformMatrix();
}
+ @override
Matrix4 computeTransformMatrix() {
// Apply normal 2d transforms
Matrix4 matrix = super.computeTransformMatrix();
diff --git a/packages/flutter_sprites/lib/src/node_with_size.dart b/packages/flutter_sprites/lib/src/node_with_size.dart
index 7cba2e5..068d4be 100644
--- a/packages/flutter_sprites/lib/src/node_with_size.dart
+++ b/packages/flutter_sprites/lib/src/node_with_size.dart
@@ -49,6 +49,7 @@
}
}
+ @override
bool isPointInside (Point nodePoint) {
double minX = -size.width * pivot.x;
diff --git a/packages/flutter_sprites/lib/src/particle_system.dart b/packages/flutter_sprites/lib/src/particle_system.dart
index 3b8fb40..7f6c435 100644
--- a/packages/flutter_sprites/lib/src/particle_system.dart
+++ b/packages/flutter_sprites/lib/src/particle_system.dart
@@ -196,6 +196,7 @@
if (colorSequence == null) colorSequence = new ColorSequence.fromStartAndEndColor(new Color(0xffffffff), new Color(0x00ffffff));
}
+ @override
void update(double dt) {
// TODO: Fix this (it's a temp fix for low framerates)
if (dt > 0.1) dt = 0.1;
@@ -359,6 +360,7 @@
_numEmittedParticles++;
}
+ @override
void paint(Canvas canvas) {
if (opacity == 0.0) return;
diff --git a/packages/flutter_sprites/lib/src/physics_debug.dart b/packages/flutter_sprites/lib/src/physics_debug.dart
index 2461639..e254b40 100644
--- a/packages/flutter_sprites/lib/src/physics_debug.dart
+++ b/packages/flutter_sprites/lib/src/physics_debug.dart
@@ -16,6 +16,7 @@
Canvas canvas;
+ @override
void drawSegment(Vector2 p1, Vector2 p2, box2d.Color3i color) {
Paint paint = new Paint()
..color = _toColor(color)
@@ -23,6 +24,7 @@
canvas.drawLine(_toPoint(p1), _toPoint(p2), paint);
}
+ @override
void drawSolidPolygon(
List<Vector2> vertices,
int vertexCount,
@@ -40,6 +42,7 @@
canvas.drawPath(path, paint);
}
+ @override
void drawCircle(Vector2 center, num radius, box2d.Color3i color, [Vector2 axis]) {
Paint paint = new Paint()
..color = _toColor(color)
@@ -49,6 +52,7 @@
canvas.drawCircle(_toPoint(center), _scale(radius), paint);
}
+ @override
void drawSolidCircle(Vector2 center, num radius, Vector2 axis, box2d.Color3i color) {
Paint paint = new Paint()
..color = _toColor(color);
@@ -56,10 +60,12 @@
canvas.drawCircle(_toPoint(center), _scale(radius), paint);
}
+ @override
void drawPoint(Vector2 point, num radiusOnScreen, box2d.Color3i color) {
drawSolidCircle(point, radiusOnScreen, null, color);
}
+ @override
void drawParticles(
List<Vector2> centers,
double radius,
@@ -69,6 +75,7 @@
// TODO: Implement
}
+ @override
void drawParticlesWireframe(
List<Vector2> centers,
double radius,
@@ -78,11 +85,13 @@
// TODO: Implement
}
+ @override
void drawTransform(box2d.Transform xf, box2d.Color3i color) {
drawCircle(xf.p, 0.1, color);
// TODO: Improve
}
+ @override
void drawStringXY(num x, num y, String s, box2d.Color3i color) {
// TODO: Implement
}
diff --git a/packages/flutter_sprites/lib/src/physics_group.dart b/packages/flutter_sprites/lib/src/physics_group.dart
index 36cefa5..d6c361d 100644
--- a/packages/flutter_sprites/lib/src/physics_group.dart
+++ b/packages/flutter_sprites/lib/src/physics_group.dart
@@ -9,36 +9,44 @@
/// group.addChild(myNode);
class PhysicsGroup extends Node {
+ @override
void set scaleX(double scaleX) {
assert(false);
}
+ @override
void set scaleY(double scaleX) {
assert(false);
}
+ @override
void set skewX(double scaleX) {
assert(false);
}
+ @override
void set skewY(double scaleX) {
assert(false);
}
+ @override
void set physicsBody(PhysicsBody body) {
assert(false);
}
+ @override
void set position(Point position) {
super.position = position;
_invalidatePhysicsBodies(this);
}
+ @override
void set rotation(double rotation) {
super.rotation = rotation;
_invalidatePhysicsBodies(this);
}
+ @override
void set scale(double scale) {
super.scale = scale;
_invalidatePhysicsBodies(this);
@@ -57,6 +65,7 @@
}
}
+ @override
void addChild(Node node) {
super.addChild(node);
@@ -80,6 +89,7 @@
}
}
+ @override
void removeChild(Node node) {
super.removeChild(node);
diff --git a/packages/flutter_sprites/lib/src/physics_joint.dart b/packages/flutter_sprites/lib/src/physics_joint.dart
index f409f4d..865870a 100644
--- a/packages/flutter_sprites/lib/src/physics_joint.dart
+++ b/packages/flutter_sprites/lib/src/physics_joint.dart
@@ -183,6 +183,7 @@
}
}
+ @override
box2d.Joint _createB2Joint(PhysicsWorld physicsNode) {
// Create Joint Definition
Vector2 vecAnchor = new Vector2(
@@ -288,6 +289,7 @@
}
}
+ @override
box2d.Joint _createB2Joint(PhysicsWorld physicsNode) {
box2d.PrismaticJointDef b2Def = new box2d.PrismaticJointDef();
b2Def.initialize(bodyA._body, bodyB._body, bodyA._body.position, new Vector2(axis.dx, axis.dy));
@@ -318,6 +320,7 @@
final double dampening;
final double frequency;
+ @override
box2d.Joint _createB2Joint(PhysicsWorld physicsNode) {
box2d.WeldJointDef b2Def = new box2d.WeldJointDef();
Vector2 middle = new Vector2(
@@ -369,6 +372,7 @@
final Point anchorB;
final double ratio;
+ @override
box2d.Joint _createB2Joint(PhysicsWorld physicsNode) {
box2d.PulleyJointDef b2Def = new box2d.PulleyJointDef();
b2Def.initialize(
@@ -407,6 +411,7 @@
/// The ratio of the rotation for bodyA relative bodyB.
final double ratio;
+ @override
box2d.Joint _createB2Joint(PhysicsWorld physicsNode) {
box2d.GearJointDef b2Def = new box2d.GearJointDef();
b2Def.bodyA = bodyA._body;
@@ -452,6 +457,7 @@
/// Dampening frequency.
final double frequency;
+ @override
box2d.Joint _createB2Joint(PhysicsWorld physicsNode) {
box2d.DistanceJointDef b2Def = new box2d.DistanceJointDef();
b2Def.initialize(
@@ -498,6 +504,7 @@
/// Dampening frequency.
final double frequency;
+ @override
box2d.Joint _createB2Joint(PhysicsWorld physicsNode) {
box2d.WheelJointDef b2Def = new box2d.WheelJointDef();
b2Def.initialize(
@@ -533,6 +540,7 @@
final double maxForce;
final double maxTorque;
+ @override
box2d.Joint _createB2Joint(PhysicsWorld physicsNode) {
box2d.FrictionJointDef b2Def = new box2d.FrictionJointDef();
b2Def.initialize(
@@ -565,6 +573,7 @@
final double dampening;
final double frequency;
+ @override
box2d.Joint _createB2Joint(PhysicsWorld physicsNode) {
box2d.ConstantVolumeJointDef b2Def = new box2d.ConstantVolumeJointDef();
for (PhysicsBody body in bodies) {
diff --git a/packages/flutter_sprites/lib/src/physics_shape.dart b/packages/flutter_sprites/lib/src/physics_shape.dart
index 8f7eef9..2abbce5 100644
--- a/packages/flutter_sprites/lib/src/physics_shape.dart
+++ b/packages/flutter_sprites/lib/src/physics_shape.dart
@@ -30,6 +30,7 @@
final Point point;
final double radius;
+ @override
box2d.Shape _createB2Shape(PhysicsWorld node, double scale) {
box2d.CircleShape shape = new box2d.CircleShape();
shape.p.x = scale * point.x / node.b2WorldToNodeConversionFactor;
@@ -52,6 +53,7 @@
final List<Point> points;
+ @override
box2d.Shape _createB2Shape(PhysicsWorld node, double scale) {
List<Vector2> vectors = <Vector2>[];
for (Point point in points) {
@@ -84,6 +86,7 @@
final Point center;
final double rotation;
+ @override
box2d.Shape _createB2Shape(PhysicsWorld node, double scale) {
box2d.PolygonShape shape = new box2d.PolygonShape();
shape.setAsBox(
@@ -114,6 +117,7 @@
final List<Point> points;
final bool loop;
+ @override
box2d.Shape _createB2Shape(PhysicsWorld node, double scale) {
List<Vector2> vectors = <Vector2>[];
for (Point point in points) {
@@ -145,6 +149,7 @@
final Point pointA;
final Point pointB;
+ @override
box2d.Shape _createB2Shape(PhysicsWorld node, double scale) {
box2d.EdgeShape shape = new box2d.EdgeShape();
shape.set(
@@ -172,10 +177,12 @@
final List<PhysicsShape> shapes;
+ @override
box2d.Shape _createB2Shape(PhysicsWorld node, double scale) {
return null;
}
+ @override
void _invalidate() {
for (PhysicsShape shape in shapes) {
shape._invalidate();
diff --git a/packages/flutter_sprites/lib/src/physics_world.dart b/packages/flutter_sprites/lib/src/physics_world.dart
index df974e9..7a7ed57 100644
--- a/packages/flutter_sprites/lib/src/physics_world.dart
+++ b/packages/flutter_sprites/lib/src/physics_world.dart
@@ -229,6 +229,7 @@
}
}
+ @override
void addChild(Node node) {
super.addChild(node);
if (node.physicsBody != null) {
@@ -236,6 +237,7 @@
}
}
+ @override
void removeChild(Node node) {
super.removeChild(node);
if (node.physicsBody != null) {
@@ -267,6 +269,7 @@
_contactHandler.addContactCallback(callback, tagA, tagB, type);
}
+ @override
void paint(Canvas canvas) {
if (drawDebug) {
_debugDrawTransform = new Matrix4.fromFloat64List(canvas.getTotalMatrix());
@@ -423,17 +426,22 @@
}
}
+ @override
void beginContact(box2d.Contact contact) {
handleCallback(PhysicsContactType.begin, contact, null, null);
}
+ @override
void endContact(box2d.Contact contact) {
handleCallback(PhysicsContactType.end, contact, null, null);
}
+ @override
void preSolve(box2d.Contact contact, box2d.Manifold oldManifold) {
handleCallback(PhysicsContactType.preSolve, contact, oldManifold, null);
}
+
+ @override
void postSolve(box2d.Contact contact, box2d.ContactImpulse impulse) {
handleCallback(PhysicsContactType.postSolve, contact, null, impulse);
}
diff --git a/packages/flutter_sprites/lib/src/sprite.dart b/packages/flutter_sprites/lib/src/sprite.dart
index b770b9d..8ea0ef1 100644
--- a/packages/flutter_sprites/lib/src/sprite.dart
+++ b/packages/flutter_sprites/lib/src/sprite.dart
@@ -44,6 +44,7 @@
pivot = new Point(0.5, 0.5);
}
+ @override
void paint(Canvas canvas) {
// Account for pivot point
applyTransformForPivot(canvas);
diff --git a/packages/flutter_sprites/lib/src/sprite_box.dart b/packages/flutter_sprites/lib/src/sprite_box.dart
index 8595d80..51c126e 100644
--- a/packages/flutter_sprites/lib/src/sprite_box.dart
+++ b/packages/flutter_sprites/lib/src/sprite_box.dart
@@ -57,6 +57,7 @@
}
}
+ @override
void attach() {
super.attach();
_scheduleTick();
@@ -138,6 +139,7 @@
/// var rootNode = mySpriteBox.rootNode;
NodeWithSize get rootNode => _rootNode;
+ @override
void performLayout() {
size = constraints.biggest;
_invalidateTransformMatrix();
@@ -189,6 +191,7 @@
}
}
+ @override
void handleEvent(PointerEvent event, _SpriteBoxHitTestEntry entry) {
if (!attached)
return;
@@ -238,6 +241,7 @@
}
}
+ @override
bool hitTest(HitTestResult result, { Point position }) {
result.add(new _SpriteBoxHitTestEntry(this, position));
return true;
@@ -333,6 +337,7 @@
_rootNode._invalidateToBoxTransformMatrix();
}
+ @override
void paint(PaintingContext context, Offset offset) {
final Canvas canvas = context.canvas;
canvas.save();
diff --git a/packages/flutter_sprites/lib/src/sprite_widget.dart b/packages/flutter_sprites/lib/src/sprite_widget.dart
index 37336af..58ca2b0 100644
--- a/packages/flutter_sprites/lib/src/sprite_widget.dart
+++ b/packages/flutter_sprites/lib/src/sprite_widget.dart
@@ -24,8 +24,10 @@
/// var mySpriteWidget = new SpriteWidget(mySpriteTree, SpriteBoxTransformMode.fixedHeight);
SpriteWidget(this.rootNode, [this.transformMode = SpriteBoxTransformMode.letterbox]);
+ @override
SpriteBox createRenderObject(BuildContext context) => new SpriteBox(rootNode, transformMode);
+ @override
void updateRenderObject(BuildContext context, SpriteBox renderObject) {
renderObject
..rootNode = rootNode
diff --git a/packages/flutter_sprites/lib/src/textured_line.dart b/packages/flutter_sprites/lib/src/textured_line.dart
index 8a36eea..59d2c34 100644
--- a/packages/flutter_sprites/lib/src/textured_line.dart
+++ b/packages/flutter_sprites/lib/src/textured_line.dart
@@ -7,6 +7,7 @@
TexturedLinePainter painter;
+ @override
void paint(Canvas canvas) {
painter.paint(canvas);
}
diff --git a/packages/flutter_sprites/lib/src/virtual_joystick.dart b/packages/flutter_sprites/lib/src/virtual_joystick.dart
index d4a2695..612e5d2 100644
--- a/packages/flutter_sprites/lib/src/virtual_joystick.dart
+++ b/packages/flutter_sprites/lib/src/virtual_joystick.dart
@@ -30,6 +30,7 @@
Paint _paintHandle;
Paint _paintControl;
+ @override
bool handleEvent(SpriteBoxEvent event) {
if (event.type == PointerDownEvent) {
_pointerDownAt = event.boxPosition;
@@ -54,6 +55,7 @@
return true;
}
+ @override
void paint(Canvas canvas) {
applyTransformForPivot(canvas);
canvas.drawCircle(_handlePos, 25.0, _paintHandle);
diff --git a/packages/flutter_test/lib/src/widget_tester.dart b/packages/flutter_test/lib/src/widget_tester.dart
index 07647bc..a09562a 100644
--- a/packages/flutter_test/lib/src/widget_tester.dart
+++ b/packages/flutter_test/lib/src/widget_tester.dart
@@ -36,6 +36,7 @@
EnginePhase phase = EnginePhase.sendSemanticsTree;
// Pump the rendering pipeline up to the given phase.
+ @override
void beginFrame() {
buildDirtyElements();
_beginFrame();
@@ -123,6 +124,7 @@
async.flushMicrotasks();
}
+ @override
void dispatchEvent(PointerEvent event, HitTestResult result) {
super.dispatchEvent(event, result);
async.flushMicrotasks();
diff --git a/packages/flutter_tools/.analysis_options b/packages/flutter_tools/.analysis_options
index fb5be33..f1976ec 100644
--- a/packages/flutter_tools/.analysis_options
+++ b/packages/flutter_tools/.analysis_options
@@ -15,7 +15,6 @@
strong_mode_invalid_method_override: ignore
strong_mode_static_type_error: ignore
strong_mode_down_cast_composite: ignore
- type_argument_not_matching_bounds: ignore
# we allow having TODOs in the code
todo: ignore
linter:
@@ -23,19 +22,19 @@
- avoid_empty_else
- always_declare_return_types
- always_specify_types
- # - annotate_overrides # still a lot of work to do before enabling this one
+ - annotate_overrides
# - avoid_as # https://github.com/dart-lang/linter/issues/195
- avoid_init_to_null
- # - avoid_return_types_on_setters # still a lot of work to do before enabling this one
+ # - avoid_return_types_on_setters # https://github.com/dart-lang/linter/issues/202
- camel_case_types
- # - constant_identifier_names # still a lot of work to do before enabling this one
+ # - constant_identifier_names # https://github.com/dart-lang/linter/issues/204 (and 203)
- empty_constructor_bodies
- hash_and_equals
- # - implementation_imports # "// ignore:" isn't working yet
+ # - implementation_imports # https://github.com/dart-lang/linter/issues/203
- library_names
- library_prefixes
- non_constant_identifier_names
- # - one_member_abstracts # "// ignore:" isn't working yet
+ # - one_member_abstracts # https://github.com/dart-lang/linter/issues/203
- package_api_docs
- package_names
- package_prefixed_library_names
@@ -45,7 +44,7 @@
- sort_constructors_first
- sort_unnamed_constructors_first
- super_goes_last
- # - type_annotate_public_apis # see always_specify_types, which this is a subset of
+ - type_annotate_public_apis # subset of always_specify_types
- type_init_formals
- unnecessary_brace_in_string_interp
- unnecessary_getters_setters
diff --git a/packages/flutter_tools/lib/src/android/adb.dart b/packages/flutter_tools/lib/src/android/adb.dart
index 9d35daa2..afaf6a8 100644
--- a/packages/flutter_tools/lib/src/android/adb.dart
+++ b/packages/flutter_tools/lib/src/android/adb.dart
@@ -214,6 +214,7 @@
/// Device product; can be null. `peregrine_retus`, `nakasi`
String get productID => _info['product'];
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -223,8 +224,10 @@
return id == typedOther.id;
}
+ @override
int get hashCode => id.hashCode;
+ @override
String toString() {
if (modelID == null) {
return '$id ($status)';
diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart
index b1b1d50..bf9515d 100644
--- a/packages/flutter_tools/lib/src/android/android_device.dart
+++ b/packages/flutter_tools/lib/src/android/android_device.dart
@@ -32,7 +32,10 @@
class AndroidDevices extends PollingDeviceDiscovery {
AndroidDevices() : super('AndroidDevices');
+ @override
bool get supportsPlatform => true;
+
+ @override
List<Device> pollingGetDevices() => getAdbDevices();
}
@@ -50,6 +53,7 @@
bool _isLocalEmulator;
+ @override
bool get isLocalEmulator {
if (_isLocalEmulator == null) {
// http://developer.android.com/ndk/guides/abis.html (x86, armeabi-v7a, ...)
@@ -152,6 +156,7 @@
return shaFile.existsSync() ? shaFile.readAsStringSync() : '';
}
+ @override
String get name => modelID;
@override
@@ -279,6 +284,7 @@
}
}
+ @override
Future<bool> stopApp(ApplicationPackage app) {
List<String> command = adbCommandForDevice(<String>['shell', 'am', 'force-stop', app.id]);
return runCommandAndStreamOutput(command).then((int exitCode) => exitCode == 0);
@@ -288,16 +294,19 @@
@override
TargetPlatform get platform => TargetPlatform.android_arm;
+ @override
void clearLogs() {
runSync(adbCommandForDevice(<String>['logcat', '-c']));
}
+ @override
DeviceLogReader get logReader {
if (_logReader == null)
_logReader = new _AdbLogReader(this);
return _logReader;
}
+ @override
DevicePortForwarder get portForwarder {
if (_portForwarder == null)
_portForwarder = new _AndroidDevicePortForwarder(this);
@@ -382,6 +391,7 @@
return null;
}
+ @override
bool isSupported() => true;
Future<bool> refreshSnapshot(AndroidApk apk, String snapshotPath) async {
@@ -488,14 +498,19 @@
StreamSubscription<String> _stdoutSubscription;
StreamSubscription<String> _stderrSubscription;
+ @override
Stream<String> get lines => _linesStreamController.stream;
+ @override
String get name => device.name;
+ @override
bool get isReading => _process != null;
+ @override
Future<int> get finished => _process != null ? _process.exitCode : new Future<int>.value(0);
+ @override
Future<Null> start() async {
if (_process != null)
throw new StateError('_AdbLogReader must be stopped before it can be started.');
@@ -516,6 +531,7 @@
_process.exitCode.then(_onExit);
}
+ @override
Future<Null> stop() async {
if (_process == null)
throw new StateError('_AdbLogReader must be started before it can be stopped.');
@@ -540,8 +556,10 @@
_linesStreamController.add(line);
}
+ @override
int get hashCode => name.hashCode;
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -560,6 +578,7 @@
return int.parse(portString.trim(), onError: (_) => null);
}
+ @override
List<ForwardedPort> get forwardedPorts {
final List<ForwardedPort> ports = <ForwardedPort>[];
@@ -591,6 +610,7 @@
return ports;
}
+ @override
Future<int> forward(int devicePort, { int hostPort }) async {
if ((hostPort == null) || (hostPort == 0)) {
// Auto select host port.
@@ -604,6 +624,7 @@
return hostPort;
}
+ @override
Future<Null> unforward(ForwardedPort forwardedPort) async {
runCheckedSync(device.adbCommandForDevice(
<String>['forward', '--remove', 'tcp:${forwardedPort.hostPort}']
diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart
index 819f64f..0e605f4 100644
--- a/packages/flutter_tools/lib/src/android/android_sdk.dart
+++ b/packages/flutter_tools/lib/src/android/android_sdk.dart
@@ -175,6 +175,7 @@
_latestVersion = _sdkVersions.isEmpty ? null : _sdkVersions.last;
}
+ @override
String toString() => 'AndroidSdk: $directory';
}
@@ -211,10 +212,12 @@
return path.join(sdk.directory, 'build-tools', buildToolsVersion, binaryName);
}
+ @override
int compareTo(AndroidSdkVersion other) {
return sdkLevel - other.sdkLevel;
}
+ @override
String toString() => '[${sdk.directory}, SDK version $sdkLevel, build-tools $buildToolsVersion]';
bool _exists(String path, { bool complain: false }) {
diff --git a/packages/flutter_tools/lib/src/android/android_workflow.dart b/packages/flutter_tools/lib/src/android/android_workflow.dart
index 21a912b..9bccb0a 100644
--- a/packages/flutter_tools/lib/src/android/android_workflow.dart
+++ b/packages/flutter_tools/lib/src/android/android_workflow.dart
@@ -7,14 +7,19 @@
import 'android_sdk.dart';
class AndroidWorkflow extends Workflow {
+ @override
String get label => 'Android toolchain';
+ @override
bool get appliesToHostPlatform => true;
+ @override
bool get canListDevices => getAdbPath(androidSdk) != null;
+ @override
bool get canLaunchDevices => androidSdk != null && androidSdk.validateSdkWellFormed(complain: false);
+ @override
ValidationResult validate() {
Validator androidValidator = new Validator(
label,
@@ -36,5 +41,6 @@
return androidValidator.validate();
}
+ @override
void diagnose() => validate().print();
}
diff --git a/packages/flutter_tools/lib/src/application_package.dart b/packages/flutter_tools/lib/src/application_package.dart
index b5a5bac..d376905 100644
--- a/packages/flutter_tools/lib/src/application_package.dart
+++ b/packages/flutter_tools/lib/src/application_package.dart
@@ -8,7 +8,6 @@
import 'package:path/path.dart' as path;
import 'package:xml/xml.dart' as xml;
-import 'artifacts.dart';
import 'build_configuration.dart';
import 'ios/plist_utils.dart';
@@ -32,36 +31,28 @@
String get displayName => name;
+ @override
String toString() => displayName;
}
class AndroidApk extends ApplicationPackage {
- static const String _defaultName = 'SkyShell.apk';
- static const String _defaultId = 'org.domokit.sky.shell';
- static const String _defaultLaunchActivity = '$_defaultId/$_defaultId.SkyActivity';
- static const String _defaultManifestPath = 'android/AndroidManifest.xml';
- static const String _defaultOutputPath = 'build/app.apk';
-
/// The path to the activity that should be launched.
- /// Defaults to 'org.domokit.sky.shell/org.domokit.sky.shell.SkyActivity'
final String launchActivity;
AndroidApk({
String localPath,
- String id: _defaultId,
- this.launchActivity: _defaultLaunchActivity
+ String id,
+ this.launchActivity
}) : super(localPath: localPath, id: id) {
assert(launchActivity != null);
}
/// Creates a new AndroidApk based on the information in the Android manifest.
- static AndroidApk getCustomApk({
- String localPath: _defaultOutputPath,
- String manifest: _defaultManifestPath
- }) {
- if (!FileSystemEntity.isFileSync(manifest))
+ factory AndroidApk.fromBuildConfiguration(BuildConfiguration config) {
+ String manifestPath = path.join('android', 'AndroidManifest.xml');
+ if (!FileSystemEntity.isFileSync(manifestPath))
return null;
- String manifestString = new File(manifest).readAsStringSync();
+ String manifestString = new File(manifestPath).readAsStringSync();
xml.XmlDocument document = xml.parse(manifestString);
Iterable<xml.XmlElement> manifests = document.findElements('manifest');
@@ -81,6 +72,7 @@
if (id == null || launchActivity == null)
return null;
+ String localPath = path.join('build', 'app.apk');
return new AndroidApk(localPath: localPath, id: id, launchActivity: launchActivity);
}
}
@@ -95,15 +87,16 @@
if (getCurrentHostPlatform() != HostPlatform.mac)
return null;
- String plistPath = path.join("ios", "Info.plist");
+ String plistPath = path.join('ios', 'Info.plist');
String value = getValueFromFile(plistPath, kCFBundleIdentifierKey);
if (value == null)
return null;
- String projectDir = path.join("ios", ".generated");
+ String projectDir = path.join('ios', '.generated');
return new IOSApp(iosProjectDir: projectDir, iosProjectBundleId: value);
}
+ @override
String get displayName => id;
}
@@ -134,20 +127,7 @@
switch (config.targetPlatform) {
case TargetPlatform.android_arm:
assert(android == null);
- android = AndroidApk.getCustomApk();
- // Fall back to the prebuilt or engine-provided apk if we can't build
- // a custom one.
- // TODO(mpcomplete): we should remove both these fallbacks.
- if (android != null) {
- break;
- } else if (config.type != BuildType.prebuilt) {
- String localPath = path.join(config.buildDir, 'apks', AndroidApk._defaultName);
- android = new AndroidApk(localPath: localPath);
- } else {
- Artifact artifact = ArtifactStore.getArtifact(
- type: ArtifactType.shell, targetPlatform: TargetPlatform.android_arm);
- android = new AndroidApk(localPath: await ArtifactStore.getPath(artifact));
- }
+ android = new AndroidApk.fromBuildConfiguration(config);
break;
case TargetPlatform.ios_arm:
diff --git a/packages/flutter_tools/lib/src/artifacts.dart b/packages/flutter_tools/lib/src/artifacts.dart
index 19680d4..db27a19 100644
--- a/packages/flutter_tools/lib/src/artifacts.dart
+++ b/packages/flutter_tools/lib/src/artifacts.dart
@@ -74,13 +74,7 @@
class ArtifactStore {
static const List<Artifact> knownArtifacts = const <Artifact>[
const Artifact._(
- name: 'Sky Shell',
- fileName: 'SkyShell.apk',
- type: ArtifactType.shell,
- targetPlatform: TargetPlatform.android_arm
- ),
- const Artifact._(
- name: 'Sky Shell',
+ name: 'Flutter Tester',
fileName: 'sky_shell',
type: ArtifactType.shell,
targetPlatform: TargetPlatform.linux_x64
diff --git a/packages/flutter_tools/lib/src/base/logger.dart b/packages/flutter_tools/lib/src/base/logger.dart
index 46a3791..7f2842c 100644
--- a/packages/flutter_tools/lib/src/base/logger.dart
+++ b/packages/flutter_tools/lib/src/base/logger.dart
@@ -26,22 +26,28 @@
}
class StdoutLogger implements Logger {
+ @override
bool get isVerbose => false;
+ @override
void printError(String message, [StackTrace stackTrace]) {
stderr.writeln(message);
if (stackTrace != null)
stderr.writeln(stackTrace);
}
+ @override
void printStatus(String message) => print(message);
+ @override
void printTrace(String message) { }
+ @override
void flush() { }
}
class BufferLogger implements Logger {
+ @override
bool get isVerbose => false;
StringBuffer _error = new StringBuffer();
@@ -52,33 +58,44 @@
String get statusText => _status.toString();
String get traceText => _trace.toString();
+ @override
void printError(String message, [StackTrace stackTrace]) => _error.writeln(message);
+
+ @override
void printStatus(String message) => _status.writeln(message);
+
+ @override
void printTrace(String message) => _trace.writeln(message);
+ @override
void flush() { }
}
class VerboseLogger implements Logger {
_LogMessage lastMessage;
+ @override
bool get isVerbose => true;
+ @override
void printError(String message, [StackTrace stackTrace]) {
_emit();
lastMessage = new _LogMessage(_LogType.error, message, stackTrace);
}
+ @override
void printStatus(String message) {
_emit();
lastMessage = new _LogMessage(_LogType.status, message);
}
+ @override
void printTrace(String message) {
_emit();
lastMessage = new _LogMessage(_LogType.trace, message);
}
+ @override
void flush() => _emit();
void _emit() {
diff --git a/packages/flutter_tools/lib/src/base/os.dart b/packages/flutter_tools/lib/src/base/os.dart
index 973b421..99be5a8 100644
--- a/packages/flutter_tools/lib/src/base/os.dart
+++ b/packages/flutter_tools/lib/src/base/os.dart
@@ -38,12 +38,14 @@
class _PosixUtils extends OperatingSystemUtils {
_PosixUtils() : super._private();
+ @override
ProcessResult makeExecutable(File file) {
return Process.runSync('chmod', ['u+x', file.path]);
}
/// Return the path (with symlinks resolved) to the given executable, or `null`
/// if `which` was not able to locate the binary.
+ @override
File which(String execName) {
ProcessResult result = Process.runSync('which', <String>[execName]);
if (result.exitCode != 0)
@@ -57,10 +59,12 @@
_WindowsUtils() : super._private();
// This is a no-op.
+ @override
ProcessResult makeExecutable(File file) {
return new ProcessResult(0, 0, null, null);
}
+ @override
File which(String execName) {
throw new UnimplementedError('_WindowsUtils.which');
}
diff --git a/packages/flutter_tools/lib/src/base/process.dart b/packages/flutter_tools/lib/src/base/process.dart
index db37581..25b8bb3 100644
--- a/packages/flutter_tools/lib/src/base/process.dart
+++ b/packages/flutter_tools/lib/src/base/process.dart
@@ -136,8 +136,12 @@
}
class ProcessExit implements Exception {
- final int exitCode;
ProcessExit(this.exitCode);
+
+ final int exitCode;
+
String get message => 'ProcessExit: $exitCode';
+
+ @override
String toString() => message;
}
diff --git a/packages/flutter_tools/lib/src/commands/analyze.dart b/packages/flutter_tools/lib/src/commands/analyze.dart
index f1326c3..011ba0b 100644
--- a/packages/flutter_tools/lib/src/commands/analyze.dart
+++ b/packages/flutter_tools/lib/src/commands/analyze.dart
@@ -118,8 +118,13 @@
argParser.addFlag('watch', help: 'Run analysis continuously, watching the filesystem for changes.', negatable: false);
}
+ @override
String get name => 'analyze';
+
+ @override
String get description => 'Analyze the project\'s Dart code.';
+
+ @override
bool get requiresProjectRoot => false;
bool get isFlutterRepo {
@@ -327,8 +332,6 @@
'Analyzing [${mainFile.path}]...',
new RegExp('^\\[(hint|error)\\] Unused import \\(${mainFile.path},'),
new RegExp(r'^\[.+\] .+ \(.+/\.pub-cache/.+'),
- new RegExp('^\\[error\\] The argument type \'List<T>\' cannot be assigned to the parameter type \'List<.+>\''), // until we have generic methods, there's not much choice if you want to use map()
- new RegExp(r'^\[error\] Type check failed: .*\(dynamic\) is not of type'), // allow unchecked casts from dynamic
new RegExp('\\[warning\\] Missing concrete implementation of \'RenderObject\\.applyPaintTransform\''), // https://github.com/dart-lang/sdk/issues/25232
new RegExp(r'[0-9]+ (error|warning|hint|lint).+found\.'),
new RegExp(r'^$'),
@@ -760,6 +763,7 @@
int get startColumn => json['location']['startColumn'];
int get offset => json['location']['offset'];
+ @override
int compareTo(AnalysisError other) {
// Sort in order of file path, error location, severity, and message.
if (file != other.file)
@@ -775,6 +779,7 @@
return message.compareTo(other.message);
}
+ @override
String toString() {
String relativePath = path.relative(file);
return '${severity.toLowerCase().padLeft(7)} • $message • $relativePath:$startLine:$startColumn';
diff --git a/packages/flutter_tools/lib/src/commands/apk.dart b/packages/flutter_tools/lib/src/commands/apk.dart
index 43114e8..6b13c7e 100644
--- a/packages/flutter_tools/lib/src/commands/apk.dart
+++ b/packages/flutter_tools/lib/src/commands/apk.dart
@@ -136,7 +136,10 @@
}
class ApkCommand extends FlutterCommand {
+ @override
final String name = 'apk';
+
+ @override
final String description = 'Build an Android APK package.';
ApkCommand() {
@@ -242,7 +245,7 @@
if (!components.resources.existsSync()) {
// TODO(eseidel): This level should be higher when path is manually set.
- printStatus('Can not locate Resources: ${components.resources}, ignoring.');
+ printStatus('Cannot locate Resources: ${components.resources}, ignoring.');
components.resources = null;
}
@@ -250,7 +253,7 @@
components.manifest, components.icuData, components.libSkyShell, components.debugKeystore
]..addAll(components.jars)) {
if (!f.existsSync()) {
- printError('Can not locate file: ${f.path}');
+ printError('Cannot locate file: ${f.path}');
return null;
}
}
@@ -453,8 +456,8 @@
String target: ''
}) async {
if (!FileSystemEntity.isFileSync(_kDefaultAndroidManifestPath)) {
- printStatus('Using pre-built SkyShell.apk.');
- return 0;
+ printError('Cannot build APK. Missing $_kDefaultAndroidManifestPath.');
+ return 1;
}
int result = await buildAndroid(
diff --git a/packages/flutter_tools/lib/src/commands/build.dart b/packages/flutter_tools/lib/src/commands/build.dart
index 04d80ce..54a5447 100644
--- a/packages/flutter_tools/lib/src/commands/build.dart
+++ b/packages/flutter_tools/lib/src/commands/build.dart
@@ -11,7 +11,10 @@
import '../toolchain.dart';
class BuildCommand extends FlutterCommand {
+ @override
final String name = 'build';
+
+ @override
final String description = 'Package your Flutter app into an FLX.';
BuildCommand() {
@@ -42,6 +45,7 @@
return await super.run();
}
+ @override
Future<int> runInProject() async {
String compilerPath = argResults['compiler'];
diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart
index 4024580..0610177 100644
--- a/packages/flutter_tools/lib/src/commands/create.dart
+++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -16,8 +16,13 @@
import '../template.dart';
class CreateCommand extends Command {
+ @override
final String name = 'create';
+
+ @override
final String description = 'Create a new Flutter project.';
+
+ @override
final List<String> aliases = <String>['init'];
CreateCommand() {
@@ -38,6 +43,7 @@
);
}
+ @override
String get invocation => "${runner.executableName} $name <output directory>";
@override
diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart
index e2a477a..4f205e4 100644
--- a/packages/flutter_tools/lib/src/commands/daemon.dart
+++ b/packages/flutter_tools/lib/src/commands/daemon.dart
@@ -28,14 +28,20 @@
class DaemonCommand extends FlutterCommand {
DaemonCommand({ bool hideCommand: false }) : _hideCommand = hideCommand;
+ @override
final String name = 'daemon';
+
+ @override
final String description = 'Run a persistent, JSON-RPC based server to communicate with devices.';
final bool _hideCommand;
+ @override
bool get requiresProjectRoot => false;
+ @override
bool get hidden => _hideCommand;
+ @override
Future<int> runInProject() {
printStatus('Starting device daemon...');
@@ -155,6 +161,7 @@
FlutterCommand get command => daemon.daemonCommand;
+ @override
String toString() => name;
void handleCommand(String command, dynamic id, dynamic args) {
@@ -220,6 +227,7 @@
return new Future<Null>.value();
}
+ @override
void dispose() {
_subscription?.cancel();
}
@@ -371,6 +379,7 @@
return new Future<Null>.value();
}
+ @override
void dispose() {
for (PollingDeviceDiscovery discoverer in _discoverers) {
discoverer.dispose();
@@ -410,14 +419,17 @@
Stream<LogMessage> get onMessage => _messageController.stream;
+ @override
void printError(String message, [StackTrace stackTrace]) {
_messageController.add(new LogMessage('error', message, stackTrace));
}
+ @override
void printStatus(String message) {
_messageController.add(new LogMessage('status', message));
}
+ @override
void printTrace(String message) {
// This is a lot of traffic to send over the wire.
}
diff --git a/packages/flutter_tools/lib/src/commands/devices.dart b/packages/flutter_tools/lib/src/commands/devices.dart
index 1f3b071..dd94309 100644
--- a/packages/flutter_tools/lib/src/commands/devices.dart
+++ b/packages/flutter_tools/lib/src/commands/devices.dart
@@ -10,12 +10,19 @@
import '../runner/flutter_command.dart';
class DevicesCommand extends FlutterCommand {
+ @override
final String name = 'devices';
+
+ @override
final String description = 'List all connected devices.';
+
+ @override
final List<String> aliases = <String>['list'];
+ @override
bool get requiresProjectRoot => false;
+ @override
Future<int> runInProject() async {
if (!doctor.canListAnything) {
printError("Unable to locate a development device; please run 'flutter doctor' for "
diff --git a/packages/flutter_tools/lib/src/commands/doctor.dart b/packages/flutter_tools/lib/src/commands/doctor.dart
index dd30c60..188024d 100644
--- a/packages/flutter_tools/lib/src/commands/doctor.dart
+++ b/packages/flutter_tools/lib/src/commands/doctor.dart
@@ -10,11 +10,16 @@
import '../runner/version.dart';
class DoctorCommand extends FlutterCommand {
+ @override
final String name = 'doctor';
+
+ @override
final String description = 'Show information about the installed tooling.';
+ @override
bool get requiresProjectRoot => false;
+ @override
Future<int> runInProject() async {
// general info
String flutterRoot = ArtifactStore.flutterRoot;
diff --git a/packages/flutter_tools/lib/src/commands/drive.dart b/packages/flutter_tools/lib/src/commands/drive.dart
index 5cbbe6f..72e4e70 100644
--- a/packages/flutter_tools/lib/src/commands/drive.dart
+++ b/packages/flutter_tools/lib/src/commands/drive.dart
@@ -64,8 +64,13 @@
help: 'Listen to the given port for a debug connection.');
}
+ @override
final String name = 'drive';
+
+ @override
final String description = 'Runs Flutter Driver tests for the current project.';
+
+ @override
final List<String> aliases = <String>['driver'];
Device _device;
diff --git a/packages/flutter_tools/lib/src/commands/install.dart b/packages/flutter_tools/lib/src/commands/install.dart
index a801b22..3e68041 100644
--- a/packages/flutter_tools/lib/src/commands/install.dart
+++ b/packages/flutter_tools/lib/src/commands/install.dart
@@ -10,9 +10,13 @@
import '../runner/flutter_command.dart';
class InstallCommand extends FlutterCommand {
+ @override
final String name = 'install';
+
+ @override
final String description = 'Install a Flutter app on an attached device.';
+ @override
bool get requiresDevice => true;
@override
diff --git a/packages/flutter_tools/lib/src/commands/listen.dart b/packages/flutter_tools/lib/src/commands/listen.dart
index 14cc781..1550a08 100644
--- a/packages/flutter_tools/lib/src/commands/listen.dart
+++ b/packages/flutter_tools/lib/src/commands/listen.dart
@@ -10,9 +10,14 @@
import 'run.dart';
class ListenCommand extends RunCommandBase {
+ @override
final String name = 'listen';
+
+ @override
final String description =
'Listen for changes to files and reload the running app (Android only).';
+
+ @override
final String usageFooter =
'By default, only listens to "./" and "./lib/". To listen to additional directories, list them on\n'
'the command line.';
@@ -22,8 +27,10 @@
ListenCommand({ this.singleRun: false });
+ @override
bool get androidOnly => true;
+ @override
bool get requiresDevice => true;
@override
diff --git a/packages/flutter_tools/lib/src/commands/logs.dart b/packages/flutter_tools/lib/src/commands/logs.dart
index 9170c12..5190685 100644
--- a/packages/flutter_tools/lib/src/commands/logs.dart
+++ b/packages/flutter_tools/lib/src/commands/logs.dart
@@ -9,7 +9,10 @@
import '../runner/flutter_command.dart';
class LogsCommand extends FlutterCommand {
+ @override
final String name = 'logs';
+
+ @override
final String description = 'Show log output for running Flutter apps.';
LogsCommand() {
@@ -20,10 +23,13 @@
);
}
+ @override
bool get requiresProjectRoot => false;
+ @override
bool get requiresDevice => true;
+ @override
Future<int> runInProject() async {
Device device = deviceForCommand;
diff --git a/packages/flutter_tools/lib/src/commands/refresh.dart b/packages/flutter_tools/lib/src/commands/refresh.dart
index 7f7ced0..1c4b54b 100644
--- a/packages/flutter_tools/lib/src/commands/refresh.dart
+++ b/packages/flutter_tools/lib/src/commands/refresh.dart
@@ -12,15 +12,20 @@
import '../runner/flutter_command.dart';
class RefreshCommand extends FlutterCommand {
+ @override
final String name = 'refresh';
+
+ @override
final String description = 'Build and deploy the Dart code in a Flutter app (Android only).';
RefreshCommand() {
addTargetOption();
}
+ @override
bool get androidOnly => true;
+ @override
bool get requiresDevice => true;
@override
diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart
index 26c7dfc..eefe535 100644
--- a/packages/flutter_tools/lib/src/commands/run.dart
+++ b/packages/flutter_tools/lib/src/commands/run.dart
@@ -53,8 +53,13 @@
}
class RunCommand extends RunCommandBase {
+ @override
final String name = 'run';
+
+ @override
final String description = 'Run your Flutter app on an attached device.';
+
+ @override
final List<String> aliases = <String>['start'];
RunCommand() {
@@ -76,6 +81,7 @@
help: 'Listen to the given port for a debug connection.');
}
+ @override
bool get requiresDevice => true;
@override
@@ -129,6 +135,18 @@
}
}
+String _getMissingPackageHintForPlatform(TargetPlatform platform) {
+ switch (platform) {
+ case TargetPlatform.android_arm:
+ return 'Is your project missing an android/AndroidManifest.xml?';
+ case TargetPlatform.ios_arm:
+ case TargetPlatform.ios_x64:
+ return 'Is your project missing an ios/Info.plist?';
+ default:
+ return null;
+ }
+}
+
Future<int> startApp(
Device device,
ApplicationPackageStore applicationPackages,
@@ -157,7 +175,11 @@
ApplicationPackage package = applicationPackages.getPackageForPlatform(device.platform);
if (package == null) {
- printError('No application found for ${device.platform}.');
+ String message = 'No application found for ${device.platform}.';
+ String hint = _getMissingPackageHintForPlatform(device.platform);
+ if (hint != null)
+ message += '\n$hint';
+ printError(message);
return 1;
}
diff --git a/packages/flutter_tools/lib/src/commands/run_mojo.dart b/packages/flutter_tools/lib/src/commands/run_mojo.dart
index 3f9bde4..d7e1642 100644
--- a/packages/flutter_tools/lib/src/commands/run_mojo.dart
+++ b/packages/flutter_tools/lib/src/commands/run_mojo.dart
@@ -18,7 +18,10 @@
const String _kDefaultBundlePath = 'build/app.flx';
class RunMojoCommand extends FlutterCommand {
+ @override
final String name = 'run_mojo';
+
+ @override
final String description = 'Run a Flutter app in mojo (from github.com/domokit/mojo).';
final bool _hideCommand;
@@ -37,7 +40,10 @@
argParser.addOption('devtools-path', help: 'Path to mojo devtools\' mojo_run command.');
}
+ @override
bool get requiresProjectRoot => false;
+
+ @override
bool get hidden => _hideCommand;
// TODO(abarth): Why not use path.absolute?
diff --git a/packages/flutter_tools/lib/src/commands/stop.dart b/packages/flutter_tools/lib/src/commands/stop.dart
index fd38f38..9a4ad86 100644
--- a/packages/flutter_tools/lib/src/commands/stop.dart
+++ b/packages/flutter_tools/lib/src/commands/stop.dart
@@ -10,9 +10,13 @@
import '../runner/flutter_command.dart';
class StopCommand extends FlutterCommand {
+ @override
final String name = 'stop';
+
+ @override
final String description = 'Stop your Flutter app on an attached device.';
+ @override
bool get requiresDevice => true;
@override
diff --git a/packages/flutter_tools/lib/src/commands/test.dart b/packages/flutter_tools/lib/src/commands/test.dart
index c50cece..50d1e8e 100644
--- a/packages/flutter_tools/lib/src/commands/test.dart
+++ b/packages/flutter_tools/lib/src/commands/test.dart
@@ -23,8 +23,13 @@
);
}
+ @override
String get name => 'test';
+
+ @override
String get description => 'Run Flutter unit tests for the current project (Linux only).';
+
+ @override
bool get requiresProjectRoot => false;
@override
diff --git a/packages/flutter_tools/lib/src/commands/trace.dart b/packages/flutter_tools/lib/src/commands/trace.dart
index 4387a60..fe6a54f 100644
--- a/packages/flutter_tools/lib/src/commands/trace.dart
+++ b/packages/flutter_tools/lib/src/commands/trace.dart
@@ -10,8 +10,13 @@
import '../runner/flutter_command.dart';
class TraceCommand extends FlutterCommand {
+ @override
final String name = 'trace';
+
+ @override
final String description = 'Start and stop tracing for a running Flutter app (Android only).';
+
+ @override
final String usageFooter =
'\`trace\` called with no arguments will automatically start tracing, delay a set amount of\n'
'time (controlled by --duration), and stop tracing. To explicitly control tracing, call trace\n'
@@ -25,8 +30,10 @@
defaultsTo: '10', abbr: 'd', help: 'Duration in seconds to trace.');
}
+ @override
bool get androidOnly => true;
+ @override
bool get requiresDevice => true;
@override
diff --git a/packages/flutter_tools/lib/src/commands/update_packages.dart b/packages/flutter_tools/lib/src/commands/update_packages.dart
index e89c3da..4f08273 100644
--- a/packages/flutter_tools/lib/src/commands/update_packages.dart
+++ b/packages/flutter_tools/lib/src/commands/update_packages.dart
@@ -32,12 +32,17 @@
);
}
+ @override
final String name = 'update-packages';
+
+ @override
final String description = 'Update the packages inside the Flutter repo.';
+ @override
bool get hidden => _hideCommand;
final bool _hideCommand;
+ @override
bool get requiresProjectRoot => false;
@override
diff --git a/packages/flutter_tools/lib/src/commands/upgrade.dart b/packages/flutter_tools/lib/src/commands/upgrade.dart
index fbe67ee..a4b327f 100644
--- a/packages/flutter_tools/lib/src/commands/upgrade.dart
+++ b/packages/flutter_tools/lib/src/commands/upgrade.dart
@@ -11,7 +11,10 @@
import '../runner/version.dart';
class UpgradeCommand extends FlutterCommand {
+ @override
final String name = 'upgrade';
+
+ @override
final String description = 'Upgrade your copy of Flutter.';
@override
diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart
index feacb2b..1764dc1 100644
--- a/packages/flutter_tools/lib/src/device.dart
+++ b/packages/flutter_tools/lib/src/device.dart
@@ -111,6 +111,7 @@
_timer = null;
}
+ @override
List<Device> get devices {
if (_items == null)
_items = new ItemListNotifier<Device>.from(pollingGetDevices());
@@ -131,6 +132,7 @@
void dispose() => stopPolling();
+ @override
String toString() => '$name device discovery';
}
@@ -189,8 +191,10 @@
/// Stop an app package on the current device.
Future<bool> stopApp(ApplicationPackage app);
+ @override
int get hashCode => id.hashCode;
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -199,6 +203,7 @@
return id == other.id;
}
+ @override
String toString() => name;
static void printDevices(List<Device> devices) {
@@ -225,6 +230,7 @@
final int hostPort;
final int devicePort;
+ @override
String toString() => 'ForwardedPort HOST:$hostPort to DEVICE:$devicePort';
}
@@ -266,8 +272,12 @@
/// Completes when the log is finished.
Future<int> get finished;
+ @override
int get hashCode;
+
+ @override
bool operator ==(dynamic other);
+ @override
String toString() => name;
}
diff --git a/packages/flutter_tools/lib/src/doctor.dart b/packages/flutter_tools/lib/src/doctor.dart
index cbd9b03..41c75cb 100644
--- a/packages/flutter_tools/lib/src/doctor.dart
+++ b/packages/flutter_tools/lib/src/doctor.dart
@@ -228,8 +228,10 @@
: path.join(env['HOME'], '.atom');
}
+ @override
String get label => 'Atom development environment';
+ @override
ValidationResult validate() {
Validator atomValidator = new Validator(
label,
@@ -263,5 +265,6 @@
return atomValidator.validate();
}
+ @override
void diagnose() => validate().print();
}
diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart
index 6f91575..c7f84d3 100644
--- a/packages/flutter_tools/lib/src/ios/devices.dart
+++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -25,7 +25,10 @@
class IOSDevices extends PollingDeviceDiscovery {
IOSDevices() : super('IOSDevices');
+ @override
bool get supportsPlatform => Platform.isMacOS;
+
+ @override
List<Device> pollingGetDevices() => IOSDevice.getAttachedDevices();
}
@@ -62,14 +65,17 @@
String _pusherPath;
String get pusherPath => _pusherPath;
+ @override
final String name;
_IOSDeviceLogReader _logReader;
_IOSDevicePortForwarder _portForwarder;
+ @override
bool get isLocalEmulator => false;
+ @override
bool get supportsStartPaused => false;
static List<IOSDevice> getAttachedDevices([IOSDevice mockIOS]) {
@@ -226,6 +232,7 @@
@override
TargetPlatform get platform => TargetPlatform.ios_arm;
+ @override
DeviceLogReader get logReader {
if (_logReader == null)
_logReader = new _IOSDeviceLogReader(this);
@@ -233,6 +240,7 @@
return _logReader;
}
+ @override
DevicePortForwarder get portForwarder {
if (_portForwarder == null)
_portForwarder = new _IOSDevicePortForwarder(this);
@@ -240,6 +248,7 @@
return _portForwarder;
}
+ @override
void clearLogs() {
}
}
@@ -256,16 +265,21 @@
StreamSubscription<String> _stdoutSubscription;
StreamSubscription<String> _stderrSubscription;
+ @override
Stream<String> get lines => _linesStreamController.stream;
+ @override
String get name => device.name;
+ @override
bool get isReading => _process != null;
+ @override
Future<int> get finished {
return _process != null ? _process.exitCode : new Future<int>.value(0);
}
+ @override
Future<Null> start() async {
if (_process != null) {
throw new StateError(
@@ -282,6 +296,7 @@
_process.exitCode.then(_onExit);
}
+ @override
Future<Null> stop() async {
if (_process == null) {
throw new StateError(
@@ -313,8 +328,10 @@
_linesStreamController.add(line);
}
+ @override
int get hashCode => name.hashCode;
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -329,12 +346,14 @@
final IOSDevice device;
+ @override
List<ForwardedPort> get forwardedPorts {
final List<ForwardedPort> ports = <ForwardedPort>[];
// TODO(chinmaygarde): Implement.
return ports;
}
+ @override
Future<int> forward(int devicePort, {int hostPort: null}) async {
if ((hostPort == null) || (hostPort == 0)) {
// Auto select host port.
@@ -344,6 +363,7 @@
return hostPort;
}
+ @override
Future<Null> unforward(ForwardedPort forwardedPort) async {
// TODO(chinmaygarde): Implement.
}
diff --git a/packages/flutter_tools/lib/src/ios/ios_workflow.dart b/packages/flutter_tools/lib/src/ios/ios_workflow.dart
index 67eda8d..10b1447 100644
--- a/packages/flutter_tools/lib/src/ios/ios_workflow.dart
+++ b/packages/flutter_tools/lib/src/ios/ios_workflow.dart
@@ -9,17 +9,22 @@
import 'mac.dart';
class IOSWorkflow extends Workflow {
+ @override
String get label => 'iOS toolchain';
+ @override
bool get appliesToHostPlatform => Platform.isMacOS;
// We need xcode (+simctl) to list simulator devices, and idevice_id to list real devices.
+ @override
bool get canListDevices => XCode.instance.isInstalledAndMeetsVersionCheck;
// We need xcode to launch simulator devices, and ideviceinstaller and ios-deploy
// for real devices.
+ @override
bool get canLaunchDevices => XCode.instance.isInstalledAndMeetsVersionCheck;
+ @override
ValidationResult validate() {
Validator iosValidator = new Validator(
label,
@@ -101,6 +106,7 @@
return iosValidator.validate();
}
+ @override
void diagnose() => validate().print();
bool get hasIdeviceId => exitsHappy(<String>['idevice_id', '-h']);
diff --git a/packages/flutter_tools/lib/src/ios/simulators.dart b/packages/flutter_tools/lib/src/ios/simulators.dart
index 7cf761d..9623642 100644
--- a/packages/flutter_tools/lib/src/ios/simulators.dart
+++ b/packages/flutter_tools/lib/src/ios/simulators.dart
@@ -27,7 +27,10 @@
class IOSSimulators extends PollingDeviceDiscovery {
IOSSimulators() : super('IOSSimulators');
+ @override
bool get supportsPlatform => Platform.isMacOS;
+
+ @override
List<Device> pollingGetDevices() => IOSSimulatorUtils.instance.getAttachedDevices();
}
@@ -314,8 +317,10 @@
class IOSSimulator extends Device {
IOSSimulator(String id, { this.name }) : super(id);
+ @override
final String name;
+ @override
bool get isLocalEmulator => true;
_IOSSimulatorLogReader _logReader;
@@ -536,6 +541,7 @@
@override
TargetPlatform get platform => TargetPlatform.ios_x64;
+ @override
DeviceLogReader get logReader {
if (_logReader == null)
_logReader = new _IOSSimulatorLogReader(this);
@@ -543,6 +549,7 @@
return _logReader;
}
+ @override
DevicePortForwarder get portForwarder {
if (_portForwarder == null)
_portForwarder = new _IOSSimulatorDevicePortForwarder(this);
@@ -550,6 +557,7 @@
return _portForwarder;
}
+ @override
void clearLogs() {
File logFile = new File(logFilePath);
if (logFile.existsSync()) {
@@ -585,16 +593,21 @@
StreamSubscription<String> _systemStdoutSubscription;
StreamSubscription<String> _systemStderrSubscription;
+ @override
Stream<String> get lines => _linesStreamController.stream;
+ @override
String get name => device.name;
+ @override
bool get isReading => (_deviceProcess != null) && (_systemProcess != null);
+ @override
Future<int> get finished {
return (_deviceProcess != null) ? _deviceProcess.exitCode : new Future<int>.value(0);
}
+ @override
Future<Null> start() async {
if (isReading) {
throw new StateError(
@@ -630,6 +643,7 @@
_systemProcess.exitCode.then(_onSystemExit);
}
+ @override
Future<Null> stop() async {
if (!isReading) {
throw new StateError(
@@ -727,8 +741,10 @@
_linesStreamController.add(filteredLine);
}
+ @override
int get hashCode => device.logFilePath.hashCode;
+ @override
bool operator ==(dynamic other) {
if (identical(this, other))
return true;
@@ -789,10 +805,12 @@
final List<ForwardedPort> _ports = <ForwardedPort>[];
+ @override
List<ForwardedPort> get forwardedPorts {
return _ports;
}
+ @override
Future<int> forward(int devicePort, {int hostPort: null}) async {
if ((hostPort == null) || (hostPort == 0)) {
hostPort = devicePort;
@@ -802,6 +820,7 @@
return hostPort;
}
+ @override
Future<Null> unforward(ForwardedPort forwardedPort) async {
_ports.remove(forwardedPort);
}
diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart
index b763f8e..d20c7b2 100644
--- a/packages/flutter_tools/lib/src/runner/flutter_command.dart
+++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart
@@ -18,6 +18,7 @@
typedef bool Validator();
abstract class FlutterCommand extends Command {
+ @override
FlutterCommandRunner get runner => super.runner;
/// Whether this command needs to be run from the root of a project.
@@ -43,6 +44,7 @@
applicationPackages ??= await ApplicationPackageStore.forConfigs(buildConfigurations);
}
+ @override
Future<int> run() {
Stopwatch stopwatch = new Stopwatch()..start();
diff --git a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
index b89c9ec..630f01d 100644
--- a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
+++ b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
@@ -124,6 +124,7 @@
defaultsTo: 'out/ios_sim_Release/');
}
+ @override
String get usageFooter {
return 'Run "flutter -h -v" for verbose help output, including less commonly used options.\n'
'\n'
@@ -165,6 +166,7 @@
return '.';
}
+ @override
Future<dynamic> run(Iterable<String> args) {
return super.run(args).then((dynamic result) {
logger.flush();
@@ -172,6 +174,7 @@
});
}
+ @override
Future<int> runCommand(ArgResults globalResults) {
_globalResults = globalResults;
diff --git a/packages/flutter_tools/lib/src/test/flutter_platform.dart b/packages/flutter_tools/lib/src/test/flutter_platform.dart
index 61cbba0..f2db417 100644
--- a/packages/flutter_tools/lib/src/test/flutter_platform.dart
+++ b/packages/flutter_tools/lib/src/test/flutter_platform.dart
@@ -55,6 +55,7 @@
}
class FlutterPlatform extends PlatformPlugin {
+ @override
StreamChannel<String> loadChannel(String mainPath, TestPlatform platform) {
return StreamChannelCompleter.fromFuture(_startTest(mainPath));
}
diff --git a/packages/flutter_tools/lib/src/zip.dart b/packages/flutter_tools/lib/src/zip.dart
index fb6c28e..f607ed9 100644
--- a/packages/flutter_tools/lib/src/zip.dart
+++ b/packages/flutter_tools/lib/src/zip.dart
@@ -48,6 +48,7 @@
class _ArchiveZipBuilder extends ZipBuilder {
_ArchiveZipBuilder() : super._();
+ @override
void createZip(File outFile, Directory zipBuildDir) {
Archive archive = new Archive();
@@ -69,6 +70,7 @@
class _ZipToolBuilder extends ZipBuilder {
_ZipToolBuilder() : super._();
+ @override
void createZip(File outFile, Directory zipBuildDir) {
if (outFile.existsSync())
outFile.deleteSync();
diff --git a/packages/flutter_tools/templates/create/lib/main.dart.tmpl b/packages/flutter_tools/templates/create/lib/main.dart.tmpl
index 3acf224..618bc1f 100644
--- a/packages/flutter_tools/templates/create/lib/main.dart.tmpl
+++ b/packages/flutter_tools/templates/create/lib/main.dart.tmpl
@@ -20,6 +20,7 @@
}
class FlutterDemo extends StatefulWidget {
+ @override
_FlutterDemoState createState() => new _FlutterDemoState();
}
@@ -32,6 +33,7 @@
});
}
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
diff --git a/packages/flutter_tools/test/src/context.dart b/packages/flutter_tools/test/src/context.dart
index db5283c..c06c0b7 100644
--- a/packages/flutter_tools/test/src/context.dart
+++ b/packages/flutter_tools/test/src/context.dart
@@ -69,16 +69,22 @@
class MockDeviceManager implements DeviceManager {
List<Device> devices = <Device>[];
+ @override
String specifiedDeviceId;
+
+ @override
bool get hasSpecifiedDeviceId => specifiedDeviceId != null;
+ @override
Future<List<Device>> getAllConnectedDevices() => new Future<List<Device>>.value(devices);
+ @override
Future<Device> getDeviceById(String deviceId) {
Device device = devices.firstWhere((Device device) => device.id == deviceId, orElse: () => null);
return new Future<Device>.value(device);
}
+ @override
Future<List<Device>> getDevices() async {
if (specifiedDeviceId == null) {
return getAllConnectedDevices();
@@ -93,6 +99,7 @@
class MockDoctor extends Doctor {
// True for testing.
+ @override
bool get canLaunchAnything => true;
}
diff --git a/packages/flutter_tools/test/src/mocks.dart b/packages/flutter_tools/test/src/mocks.dart
index 62d6c36..dba59e9 100644
--- a/packages/flutter_tools/test/src/mocks.dart
+++ b/packages/flutter_tools/test/src/mocks.dart
@@ -16,7 +16,11 @@
class MockApplicationPackageStore extends ApplicationPackageStore {
MockApplicationPackageStore() : super(
- android: new AndroidApk(localPath: '/mock/path/to/android/SkyShell.apk'),
+ android: new AndroidApk(
+ localPath: '/mock/path/to/android/SkyShell.apk',
+ id: 'io.flutter.android.mock',
+ launchActivity: 'io.flutter.android.mock.MockActivity'
+ ),
iOS: new IOSApp(
iosProjectDir: '/mock/path/to/iOS/SkyShell.app',
iosProjectBundleId: 'io.flutter.ios.mock'
@@ -32,21 +36,31 @@
}
class MockAndroidDevice extends Mock implements AndroidDevice {
+ @override
TargetPlatform get platform => TargetPlatform.android_arm;
+
+ @override
bool isSupported() => true;
}
class MockIOSDevice extends Mock implements IOSDevice {
+ @override
TargetPlatform get platform => TargetPlatform.ios_arm;
+
+ @override
bool isSupported() => true;
}
class MockIOSSimulator extends Mock implements IOSSimulator {
+ @override
TargetPlatform get platform => TargetPlatform.ios_x64;
+
+ @override
bool isSupported() => true;
}
class MockDeviceLogReader extends DeviceLogReader {
+ @override
String get name => 'MockLogReader';
final StreamController<String> _linesStreamController =
@@ -54,6 +68,7 @@
final Completer<int> _finishedCompleter = new Completer<int>();
+ @override
Stream<String> get lines => _linesStreamController.stream;
void addLine(String line) {
@@ -62,19 +77,23 @@
bool _started = false;
+ @override
Future<Null> start() async {
assert(!_started);
_started = true;
}
+ @override
bool get isReading => _started;
+ @override
Future<Null> stop() {
assert(_started);
_started = false;
return new Future<Null>.value();
}
+ @override
Future<int> get finished => _finishedCompleter.future;
}
diff --git a/packages/flutter_tools/tool/daemon_client.dart b/packages/flutter_tools/tool/daemon_client.dart
index add1c4d..6918b17 100644
--- a/packages/flutter_tools/tool/daemon_client.dart
+++ b/packages/flutter_tools/tool/daemon_client.dart
@@ -15,7 +15,7 @@
// stopAll: stop any running app
// devices: list devices
-Future main() async {
+Future<Null> main() async {
daemon = await Process.start('flutter', ['daemon']);
print('daemon process started, pid: ${daemon.pid}');
@@ -23,7 +23,7 @@
.transform(UTF8.decoder)
.transform(const LineSplitter())
.listen((String line) => print('<== $line'));
- daemon.stderr.listen((data) => stderr.add(data));
+ daemon.stderr.listen((dynamic data) => stderr.add(data));
stdout.write('> ');
stdin.transform(UTF8.decoder).transform(const LineSplitter()).listen((String line) {
@@ -51,7 +51,7 @@
int id = 0;
-void _send(Map map) {
+void _send(Map<String, dynamic> map) {
map['id'] = id++;
String str = '[${JSON.encode(map)}]';
daemon.stdin.writeln(str);
diff --git a/packages/newton/lib/src/clamped_simulation.dart b/packages/newton/lib/src/clamped_simulation.dart
index b56abf7..daa172b 100644
--- a/packages/newton/lib/src/clamped_simulation.dart
+++ b/packages/newton/lib/src/clamped_simulation.dart
@@ -22,7 +22,12 @@
final double dxMin;
final double dxMax;
+ @override
double x(double time) => simulation.x(time).clamp(xMin, xMax);
+
+ @override
double dx(double time) => simulation.dx(time).clamp(dxMin, dxMax);
+
+ @override
bool isDone(double time) => simulation.isDone(time);
}
diff --git a/packages/newton/lib/src/friction_simulation.dart b/packages/newton/lib/src/friction_simulation.dart
index 9ab0af1..d663e66 100644
--- a/packages/newton/lib/src/friction_simulation.dart
+++ b/packages/newton/lib/src/friction_simulation.dart
@@ -40,8 +40,10 @@
return math.pow(math.E, (startVelocity - endVelocity) / (startPosition - endPosition));
}
+ @override
double x(double time) => _x + _v * math.pow(_drag, time) / _dragLog - _v / _dragLog;
+ @override
double dx(double time) => _v * math.pow(_drag, time);
@override
@@ -60,10 +62,12 @@
final double _minX;
final double _maxX;
+ @override
double x(double time) {
return super.x(time).clamp(_minX, _maxX);
}
+ @override
bool isDone(double time) {
return super.isDone(time) ||
(x(time) - _minX).abs() < tolerance.distance ||
diff --git a/packages/newton/lib/src/gravity_simulation.dart b/packages/newton/lib/src/gravity_simulation.dart
index 7a59a18..a53ad93 100644
--- a/packages/newton/lib/src/gravity_simulation.dart
+++ b/packages/newton/lib/src/gravity_simulation.dart
@@ -17,8 +17,10 @@
_v = velocity,
_end = endDistance;
+ @override
double x(double time) => _x + _v * time + 0.5 * _a * time * time;
+ @override
double dx(double time) => _v + time * _a;
@override
diff --git a/packages/newton/lib/src/scroll_simulation.dart b/packages/newton/lib/src/scroll_simulation.dart
index d73ae88..70efad2 100644
--- a/packages/newton/lib/src/scroll_simulation.dart
+++ b/packages/newton/lib/src/scroll_simulation.dart
@@ -68,6 +68,7 @@
return false;
}
+ @override
String toString() {
return 'ScrollSimulation(leadingExtent: $_leadingExtent, trailingExtent: $_trailingExtent)';
}
diff --git a/packages/newton/lib/src/simulation_group.dart b/packages/newton/lib/src/simulation_group.dart
index fe36d73..83269be 100644
--- a/packages/newton/lib/src/simulation_group.dart
+++ b/packages/newton/lib/src/simulation_group.dart
@@ -25,11 +25,13 @@
/// The result is whether the simulation was switched in this step.
bool step(double time);
+ @override
double x(double time) {
_stepIfNecessary(time);
return currentSimulation.x(time - currentIntervalOffset);
}
+ @override
double dx(double time) {
_stepIfNecessary(time);
return currentSimulation.dx(time - currentIntervalOffset);
diff --git a/packages/newton/lib/src/spring_simulation.dart b/packages/newton/lib/src/spring_simulation.dart
index 324a753..c205119 100644
--- a/packages/newton/lib/src/spring_simulation.dart
+++ b/packages/newton/lib/src/spring_simulation.dart
@@ -47,15 +47,18 @@
final double _r, _c1, _c2;
+ @override
double x(double time) {
return (_c1 + _c2 * time) * math.pow(math.E, _r * time);
}
+ @override
double dx(double time) {
final double power = math.pow(math.E, _r * time);
return _r * (_c1 + _c2 * time) * power + _c2 * power;
}
+ @override
SpringType get type => SpringType.criticallyDamped;
}
@@ -81,16 +84,19 @@
final double _r1, _r2, _c1, _c2;
+ @override
double x(double time) {
return _c1 * math.pow(math.E, _r1 * time) +
_c2 * math.pow(math.E, _r2 * time);
}
+ @override
double dx(double time) {
return _c1 * _r1 * math.pow(math.E, _r1 * time) +
_c2 * _r2 * math.pow(math.E, _r2 * time);
}
+ @override
SpringType get type => SpringType.overDamped;
}
@@ -116,11 +122,13 @@
final double _w, _r, _c1, _c2;
+ @override
double x(double time) {
return math.pow(math.E, _r * time) *
(_c1 * math.cos(_w * time) + _c2 * math.sin(_w * time));
}
+ @override
double dx(double time) {
final double power = math.pow(math.E, _r * time);
final double cosine = math.cos(_w * time);
@@ -129,6 +137,7 @@
_r * power * (_c2 * sine + _c1 * cosine);
}
+ @override
SpringType get type => SpringType.underDamped;
}
@@ -185,10 +194,13 @@
SpringType get type => _solution.type;
+ @override
double x(double time) => _endPosition + _solution.x(time);
+ @override
double dx(double time) => _solution.dx(time);
+ @override
bool isDone(double time) {
return nearZero(_solution.x(time), tolerance.distance) &&
nearZero(_solution.dx(time), tolerance.velocity);
@@ -205,5 +217,6 @@
double velocity
) : super(desc, start, end, velocity);
+ @override
double x(double time) => isDone(time) ? _endPosition : super.x(time);
}
diff --git a/packages/newton/lib/src/tolerance.dart b/packages/newton/lib/src/tolerance.dart
index 5b764d8..5ff48c7 100644
--- a/packages/newton/lib/src/tolerance.dart
+++ b/packages/newton/lib/src/tolerance.dart
@@ -10,6 +10,7 @@
const Tolerance({this.distance: epsilonDefault, this.time: epsilonDefault,
this.velocity: epsilonDefault});
+ @override
String toString() => 'Tolerance(distance: $distance, time=$time, velocity: $velocity)';
}