From f7cf0d97ca90f52fd4cd31254ce0dde2493c2640 Mon Sep 17 00:00:00 2001 From: Hans Muller Date: Fri, 15 Apr 2016 16:21:38 -0700 Subject: [PATCH] Fix the progress indicator demo (#3367) --- .../lib/demo/progress_indicator_demo.dart | 39 ++++++----- .../material/progress_indicator_test.dart | 70 +++++++++++++++++++ .../test/widget/progress_indicator_test.dart | 23 ------ 3 files changed, 92 insertions(+), 40 deletions(-) create mode 100644 packages/flutter/test/material/progress_indicator_test.dart delete mode 100644 packages/flutter/test/widget/progress_indicator_test.dart diff --git a/examples/material_gallery/lib/demo/progress_indicator_demo.dart b/examples/material_gallery/lib/demo/progress_indicator_demo.dart index 0b75ad0ceb..2040ddb00f 100644 --- a/examples/material_gallery/lib/demo/progress_indicator_demo.dart +++ b/examples/material_gallery/lib/demo/progress_indicator_demo.dart @@ -10,43 +10,48 @@ class ProgressIndicatorDemo extends StatefulWidget { } class _ProgressIndicatorDemoState extends State { + AnimationController _controller; + Animation _animation; @override void initState() { super.initState(); - controller = new AnimationController( + _controller = new AnimationController( duration: const Duration(milliseconds: 1500) )..forward(); - animation = new CurvedAnimation( - parent: controller, + _animation = new CurvedAnimation( + parent: _controller, curve: new Interval(0.0, 0.9, curve: Curves.ease), reverseCurve: Curves.ease )..addStatusListener((AnimationStatus status) { if (status == AnimationStatus.dismissed) - controller.forward(); + _controller.forward(); else if (status == AnimationStatus.completed) - controller.reverse(); + _controller.reverse(); }); } - Animation animation; - AnimationController controller; + @override + void dispose() { + _controller.stop(); + super.dispose(); + } void _handleTap() { setState(() { // valueAnimation.isAnimating is part of our build state - if (controller.isAnimating) { - controller.stop(); + if (_controller.isAnimating) { + _controller.stop(); } else { - switch (controller.status) { + switch (_controller.status) { case AnimationStatus.dismissed: case AnimationStatus.forward: - controller.forward(); + _controller.forward(); break; case AnimationStatus.reverse: case AnimationStatus.completed: - controller.reverse(); + _controller.reverse(); break; } } @@ -61,19 +66,19 @@ class _ProgressIndicatorDemoState extends State { ), new LinearProgressIndicator(), new LinearProgressIndicator(), - new LinearProgressIndicator(value: animation.value), + new LinearProgressIndicator(value: _animation.value), new CircularProgressIndicator(), new SizedBox( width: 20.0, height: 20.0, - child: new CircularProgressIndicator(value: animation.value) + child: new CircularProgressIndicator(value: _animation.value) ), new SizedBox( width: 50.0, height: 30.0, - child: new CircularProgressIndicator(value: animation.value) + child: new CircularProgressIndicator(value: _animation.value) ), - new Text('${(animation.value * 100.0).toStringAsFixed(1)}%${ controller.isAnimating ? "" : " (paused)" }') + new Text('${(_animation.value * 100.0).toStringAsFixed(1)}%${ _controller.isAnimating ? "" : " (paused)" }') ]; return new Column( children: indicators @@ -95,7 +100,7 @@ class _ProgressIndicatorDemoState extends State { child: new Container( padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 8.0), child: new AnimatedBuilder( - animation: animation, + animation: _animation, builder: _buildIndicators ) ) diff --git a/packages/flutter/test/material/progress_indicator_test.dart b/packages/flutter/test/material/progress_indicator_test.dart new file mode 100644 index 0000000000..8455921d2f --- /dev/null +++ b/packages/flutter/test/material/progress_indicator_test.dart @@ -0,0 +1,70 @@ +// 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. + +import 'package:flutter_test/flutter_test.dart'; +import 'package:flutter/rendering.dart'; +import 'package:flutter/material.dart'; +import 'package:test/test.dart'; + +void main() { + + // The "can be constructed" tests that follow are primarily to ensure that any + // animations started by the progress indicators are stopped at dispose() time. + + test('LinearProgressIndicator(value: 0.0) can be constructed', () { + testWidgets((WidgetTester tester) { + tester.pumpWidget( + new Center( + child: new SizedBox( + width: 200.0, + child: new LinearProgressIndicator(value: 0.0) + ) + ) + ); + }); + }); + + test('LinearProgressIndicator(value: null) can be constructed', () { + testWidgets((WidgetTester tester) { + tester.pumpWidget( + new Center( + child: new SizedBox( + width: 200.0, + child: new LinearProgressIndicator(value: null) + ) + ) + ); + }); + }); + + test('CircularProgressIndicator(value: 0.0) can be constructed', () { + testWidgets((WidgetTester tester) { + tester.pumpWidget( + new Center( + child: new CircularProgressIndicator(value: 0.0) + ) + ); + }); + }); + + test('CircularProgressIndicator(value: null) can be constructed', () { + testWidgets((WidgetTester tester) { + tester.pumpWidget( + new Center( + child: new CircularProgressIndicator(value: null) + ) + ); + }); + }); + + test('LinearProgressIndicator changes when its value changes', () { + testElementTree((ElementTreeTester tester) { + tester.pumpWidget(new Block(children: [new LinearProgressIndicator(value: 0.0)])); + List layers1 = tester.layers; + tester.pumpWidget(new Block(children: [new LinearProgressIndicator(value: 0.5)])); + List layers2 = tester.layers; + expect(layers1, isNot(equals(layers2))); + }); + }); +} diff --git a/packages/flutter/test/widget/progress_indicator_test.dart b/packages/flutter/test/widget/progress_indicator_test.dart deleted file mode 100644 index 184b48ed15..0000000000 --- a/packages/flutter/test/widget/progress_indicator_test.dart +++ /dev/null @@ -1,23 +0,0 @@ -// 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. - -import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter/material.dart'; -import 'package:test/test.dart'; - -void main() { - test('LinearProgressIndicator changes when its value changes', () { - testElementTree((ElementTreeTester tester) { - tester.pumpWidget(new Block(children: [new LinearProgressIndicator(value: 0.0)])); - - List layers1 = tester.layers; - - tester.pumpWidget(new Block(children: [new LinearProgressIndicator(value: 0.5)])); - - List layers2 = tester.layers; - expect(layers1, isNot(equals(layers2))); - }); - }); -}