Commit b36ac833 authored by Ian Hickson's avatar Ian Hickson

Merge pull request #2641 from Hixie/revert-bad-commit

Revert "Merge pull request #2639 from Hixie/always_specify_types"
parents f41b3411 43b01041
...@@ -26,9 +26,9 @@ class CardCollectionState extends State<CardCollection> { ...@@ -26,9 +26,9 @@ class CardCollectionState extends State<CardCollection> {
const TextStyle(color: Colors.white, fontSize: 18.0, fontWeight: FontWeight.bold); const TextStyle(color: Colors.white, fontSize: 18.0, fontWeight: FontWeight.bold);
// TODO(hansmuller): need a local image asset // TODO(hansmuller): need a local image asset
static const String _sunshineURL = "http://www.walltor.com/images/wallpaper/good-morning-sunshine-58540.jpg"; static const _sunshineURL = "http://www.walltor.com/images/wallpaper/good-morning-sunshine-58540.jpg";
static const double kCardMargins = 8.0; static const kCardMargins = 8.0;
final TextStyle backgroundTextStyle = final TextStyle backgroundTextStyle =
Typography.white.title.copyWith(textAlign: TextAlign.center); Typography.white.title.copyWith(textAlign: TextAlign.center);
......
...@@ -23,7 +23,7 @@ class PageableListAppState extends State<PageableListApp> { ...@@ -23,7 +23,7 @@ class PageableListAppState extends State<PageableListApp> {
List<Size> cardSizes = [ List<Size> cardSizes = [
[100.0, 300.0], [300.0, 100.0], [200.0, 400.0], [400.0, 400.0], [300.0, 400.0] [100.0, 300.0], [300.0, 100.0], [200.0, 400.0], [400.0, 400.0], [300.0, 400.0]
] ]
.map((List<double> args) => new Size(args[0], args[1])) .map((args) => new Size(args[0], args[1]))
.toList(); .toList();
cardModels = new List<CardModel>.generate(cardSizes.length, (int i) { cardModels = new List<CardModel>.generate(cardSizes.length, (int i) {
......
...@@ -39,7 +39,7 @@ class PianoKey { ...@@ -39,7 +39,7 @@ class PianoKey {
player.ptr.pause(); player.ptr.pause();
} }
Future<Null> load(MediaServiceProxy mediaService) async { Future load(MediaServiceProxy mediaService) async {
try { try {
mediaService.ptr.createPlayer(player); mediaService.ptr.createPlayer(player);
UrlResponse response = await fetchUrl(soundUrl); UrlResponse response = await fetchUrl(soundUrl);
...@@ -61,11 +61,11 @@ class PianoApp extends StatelessComponent { ...@@ -61,11 +61,11 @@ class PianoApp extends StatelessComponent {
new PianoKey(Colors.purple[500], iLoveYou), new PianoKey(Colors.purple[500], iLoveYou),
]; ];
Future<Null> loadSounds() async { Future loadSounds() async {
MediaServiceProxy mediaService = new MediaServiceProxy.unbound(); MediaServiceProxy mediaService = new MediaServiceProxy.unbound();
try { try {
shell.connectToService("mojo:media_service", mediaService); shell.connectToService("mojo:media_service", mediaService);
List<Future<Null>> pending = <Future<Null>>[]; List<Future<MediaPlayerPrepareResponseParams>> pending = <Future<MediaPlayerPrepareResponseParams>>[];
for (PianoKey key in keys) for (PianoKey key in keys)
pending.add(key.load(mediaService)); pending.add(key.load(mediaService));
await Future.wait(pending); await Future.wait(pending);
...@@ -93,8 +93,8 @@ class PianoApp extends StatelessComponent { ...@@ -93,8 +93,8 @@ class PianoApp extends StatelessComponent {
} }
Widget statusBox(Widget child) { Widget statusBox(Widget child) {
const Color mediumGray = const Color(0xff555555); const mediumGray = const Color(0xff555555);
const Color darkGray = const Color(0xff222222); const darkGray = const Color(0xff222222);
return new Center( return new Center(
child: new Container( child: new Container(
decoration: const BoxDecoration( decoration: const BoxDecoration(
...@@ -121,7 +121,7 @@ Widget splashScreen() { ...@@ -121,7 +121,7 @@ Widget splashScreen() {
); );
} }
Future<Null> main() async { Future main() async {
runApp(splashScreen()); runApp(splashScreen());
PianoApp app = new PianoApp(); PianoApp app = new PianoApp();
......
...@@ -80,7 +80,7 @@ class _ButtonsDemoState extends State<ButtonsDemo> { ...@@ -80,7 +80,7 @@ class _ButtonsDemoState extends State<ButtonsDemo> {
tooltip: 'Open FAB demos', tooltip: 'Open FAB demos',
child: new Icon(icon: Icons.add), child: new Icon(icon: Icons.add),
onPressed: () { onPressed: () {
Navigator.push(context, new MaterialPageRoute<Null>( Navigator.push(context, new MaterialPageRoute(
builder: (BuildContext context) => new TabsFabDemo() builder: (BuildContext context) => new TabsFabDemo()
)); ));
} }
...@@ -97,7 +97,7 @@ class _ButtonsDemoState extends State<ButtonsDemo> { ...@@ -97,7 +97,7 @@ class _ButtonsDemoState extends State<ButtonsDemo> {
new RaisedButton( new RaisedButton(
child: new Text("Launch Demo"), child: new Text("Launch Demo"),
onPressed: () { onPressed: () {
Navigator.push(context, new MaterialPageRoute<Null>( Navigator.push(context, new MaterialPageRoute(
builder: (BuildContext context) => new SnackBarDemo() builder: (BuildContext context) => new SnackBarDemo()
)); ));
} }
...@@ -127,7 +127,7 @@ class _ButtonsDemoState extends State<ButtonsDemo> { ...@@ -127,7 +127,7 @@ class _ButtonsDemoState extends State<ButtonsDemo> {
new FlatButton( new FlatButton(
child: new Text("Launch Demo"), child: new Text("Launch Demo"),
onPressed: () { onPressed: () {
Navigator.push(context, new MaterialPageRoute<Null>( Navigator.push(context, new MaterialPageRoute(
builder: (_) => new DialogDemo() builder: (_) => new DialogDemo()
)); ));
} }
...@@ -200,10 +200,10 @@ class _ButtonsDemoState extends State<ButtonsDemo> { ...@@ -200,10 +200,10 @@ class _ButtonsDemoState extends State<ButtonsDemo> {
center: new Text("Buttons"), center: new Text("Buttons"),
tabBar: new TabBar<_ButtonDemo>( tabBar: new TabBar<_ButtonDemo>(
isScrollable: true, isScrollable: true,
labels: new Map<_ButtonDemo, TabLabel>.fromIterable(demos, value: (_ButtonDemo demo) => demo.tabLabel) labels: new Map.fromIterable(demos, value: (_ButtonDemo demo) => demo.tabLabel)
) )
), ),
body: new TabBarView<_ButtonDemo>( body: new TabBarView(
children: demos.map(buildTabView).toList() children: demos.map(buildTabView).toList()
) )
) )
......
...@@ -77,8 +77,8 @@ class ColorSwatchTabView extends StatelessComponent { ...@@ -77,8 +77,8 @@ class ColorSwatchTabView extends StatelessComponent {
} }
final ColorSwatch swatch; final ColorSwatch swatch;
final TextStyle blackTextStyle = Typography.black.body1; final blackTextStyle = Typography.black.body1;
final TextStyle whiteTextStyle = Typography.white.body1; final whiteTextStyle = Typography.white.body1;
Widget build(BuildContext context) { Widget build(BuildContext context) {
List<Widget> colorItems = swatch.colors.keys.map((int index) { List<Widget> colorItems = swatch.colors.keys.map((int index) {
...@@ -116,12 +116,12 @@ class ColorsDemo extends StatelessComponent { ...@@ -116,12 +116,12 @@ class ColorsDemo extends StatelessComponent {
center: new Text("Colors"), center: new Text("Colors"),
tabBar: new TabBar<ColorSwatch>( tabBar: new TabBar<ColorSwatch>(
isScrollable: true, isScrollable: true,
labels: new Map<ColorSwatch, TabLabel>.fromIterable(colorSwatches, value: (ColorSwatch swatch) { labels: new Map.fromIterable(colorSwatches, value: (ColorSwatch swatch) {
return new TabLabel(text: swatch.name); return new TabLabel(text: swatch.name);
}) })
) )
), ),
body: new TabBarView<ColorSwatch>( body: new TabBarView(
children: colorSwatches.map((ColorSwatch swatch) { children: colorSwatches.map((ColorSwatch swatch) {
return new ColorSwatchTabView(swatch: swatch); return new ColorSwatchTabView(swatch: swatch);
}) })
......
...@@ -14,7 +14,7 @@ class DatePickerDemo extends StatefulComponent { ...@@ -14,7 +14,7 @@ class DatePickerDemo extends StatefulComponent {
class _DatePickerDemoState extends State<DatePickerDemo> { class _DatePickerDemoState extends State<DatePickerDemo> {
DateTime _selectedDate = new DateTime.now(); DateTime _selectedDate = new DateTime.now();
Future<Null> _handleSelectDate() async { Future _handleSelectDate() async {
DateTime picked = await showDatePicker( DateTime picked = await showDatePicker(
context: context, context: context,
initialDate: _selectedDate, initialDate: _selectedDate,
......
...@@ -60,12 +60,12 @@ class DialogDemo extends StatefulComponent { ...@@ -60,12 +60,12 @@ class DialogDemo extends StatefulComponent {
class DialogDemoState extends State<DialogDemo> { class DialogDemoState extends State<DialogDemo> {
final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>(); final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();
void showDemoDialog/*<T>*/({ BuildContext context, Dialog dialog }) { void showDemoDialog({ BuildContext context, Dialog dialog }) {
showDialog/*<T>*/( showDialog(
context: context, context: context,
child: dialog child: dialog
) )
.then((dynamic/*=T*/ value) { // The value passed to Navigator.pop() or null. .then((dynamic value) { // The value passed to Navigator.pop() or null.
if (value != null) { if (value != null) {
scaffoldKey.currentState.showSnackBar(new SnackBar( scaffoldKey.currentState.showSnackBar(new SnackBar(
content: new Text('You selected: $value') content: new Text('You selected: $value')
...@@ -89,7 +89,7 @@ class DialogDemoState extends State<DialogDemo> { ...@@ -89,7 +89,7 @@ class DialogDemoState extends State<DialogDemo> {
new RaisedButton( new RaisedButton(
child: new Text('ALERT'), child: new Text('ALERT'),
onPressed: () { onPressed: () {
showDemoDialog/*<DialogDemoAction>*/( showDemoDialog(
context: context, context: context,
dialog: new Dialog( dialog: new Dialog(
content: new Text( content: new Text(
...@@ -113,7 +113,7 @@ class DialogDemoState extends State<DialogDemo> { ...@@ -113,7 +113,7 @@ class DialogDemoState extends State<DialogDemo> {
new RaisedButton( new RaisedButton(
child: new Text('ALERT WITH TITLE'), child: new Text('ALERT WITH TITLE'),
onPressed: () { onPressed: () {
showDemoDialog/*<DialogDemoAction>*/( showDemoDialog(
context: context, context: context,
dialog: new Dialog( dialog: new Dialog(
title: new Text("Use Google's location service?"), title: new Text("Use Google's location service?"),
...@@ -138,7 +138,7 @@ class DialogDemoState extends State<DialogDemo> { ...@@ -138,7 +138,7 @@ class DialogDemoState extends State<DialogDemo> {
new RaisedButton( new RaisedButton(
child: new Text('SIMPLE'), child: new Text('SIMPLE'),
onPressed: () { onPressed: () {
showDemoDialog/*<String>*/( showDemoDialog(
context: context, context: context,
dialog: new Dialog( dialog: new Dialog(
title: new Text('Set backup account'), title: new Text('Set backup account'),
...@@ -174,7 +174,7 @@ class DialogDemoState extends State<DialogDemo> { ...@@ -174,7 +174,7 @@ class DialogDemoState extends State<DialogDemo> {
context: context, context: context,
initialTime: const TimeOfDay(hour: 15, minute: 30) initialTime: const TimeOfDay(hour: 15, minute: 30)
) )
.then((TimeOfDay value) { // The value passed to Navigator.pop() or null. .then((value) { // The value passed to Navigator.pop() or null.
if (value != null) { if (value != null) {
scaffoldKey.currentState.showSnackBar(new SnackBar( scaffoldKey.currentState.showSnackBar(new SnackBar(
content: new Text('You selected: $value') content: new Text('You selected: $value')
...@@ -186,7 +186,7 @@ class DialogDemoState extends State<DialogDemo> { ...@@ -186,7 +186,7 @@ class DialogDemoState extends State<DialogDemo> {
new RaisedButton( new RaisedButton(
child: new Text('FULLSCREEN'), child: new Text('FULLSCREEN'),
onPressed: () { onPressed: () {
Navigator.push(context, new MaterialPageRoute<Null>( Navigator.push(context, new MaterialPageRoute(
builder: (BuildContext context) => new FullScreenDialogDemo() builder: (BuildContext context) => new FullScreenDialogDemo()
)); ));
} }
......
...@@ -33,7 +33,7 @@ class _FitnessDemoContents extends StatefulComponent { ...@@ -33,7 +33,7 @@ class _FitnessDemoContents extends StatefulComponent {
class _FitnessDemoContentsState extends State<_FitnessDemoContents> { class _FitnessDemoContentsState extends State<_FitnessDemoContents> {
Future<Null> _loadAssets(AssetBundle bundle) async { Future _loadAssets(AssetBundle bundle) async {
_images = new ImageMap(bundle); _images = new ImageMap(bundle);
await _images.load(<String>[ await _images.load(<String>[
'packages/flutter_gallery_assets/jumpingjack.png', 'packages/flutter_gallery_assets/jumpingjack.png',
...@@ -267,9 +267,9 @@ class _WorkoutAnimationNode extends NodeWithSize { ...@@ -267,9 +267,9 @@ class _WorkoutAnimationNode extends NodeWithSize {
class _ProgressCircle extends NodeWithSize { class _ProgressCircle extends NodeWithSize {
_ProgressCircle(Size size, [this.value = 0.0]) : super(size); _ProgressCircle(Size size, [this.value = 0.0]) : super(size);
static const double _kTwoPI = math.PI * 2.0; static const _kTwoPI = math.PI * 2.0;
static const double _kEpsilon = .0000001; static const _kEpsilon = .0000001;
static const double _kSweep = _kTwoPI - _kEpsilon; static const _kSweep = _kTwoPI - _kEpsilon;
double value; double value;
......
...@@ -38,7 +38,7 @@ class GridDemoPhotoItem extends StatelessComponent { ...@@ -38,7 +38,7 @@ class GridDemoPhotoItem extends StatelessComponent {
final GridDemoTileStyle tileStyle; final GridDemoTileStyle tileStyle;
void showPhoto(BuildContext context) { void showPhoto(BuildContext context) {
Navigator.push(context, new MaterialPageRoute<Null>( Navigator.push(context, new MaterialPageRoute(
builder: (BuildContext context) { builder: (BuildContext context) {
return new Scaffold( return new Scaffold(
toolBar: new ToolBar( toolBar: new ToolBar(
...@@ -138,7 +138,7 @@ class GridListDemoState extends State<GridListDemo> { ...@@ -138,7 +138,7 @@ class GridListDemoState extends State<GridListDemo> {
GridDemoTileStyle tileStyle = GridDemoTileStyle.twoLine; GridDemoTileStyle tileStyle = GridDemoTileStyle.twoLine;
void showTileStyleMenu(BuildContext context) { void showTileStyleMenu(BuildContext context) {
final List<PopupMenuItem<GridDemoTileStyle>> items = <PopupMenuItem<GridDemoTileStyle>>[ final List<PopupMenuItem> items = <PopupMenuItem<GridDemoTileStyle>>[
new PopupMenuItem<GridDemoTileStyle>( new PopupMenuItem<GridDemoTileStyle>(
value: GridDemoTileStyle.imageOnly, value: GridDemoTileStyle.imageOnly,
child: new Text('Image only') child: new Text('Image only')
......
...@@ -37,7 +37,7 @@ class LeaveBehindDemoState extends State<LeaveBehindDemo> { ...@@ -37,7 +37,7 @@ class LeaveBehindDemoState extends State<LeaveBehindDemo> {
List<LeaveBehindItem> leaveBehindItems; List<LeaveBehindItem> leaveBehindItems;
void initListItems() { void initListItems() {
leaveBehindItems = new List<LeaveBehindItem>.generate(16, (int index) { leaveBehindItems = new List.generate(16, (int index) {
return new LeaveBehindItem( return new LeaveBehindItem(
index: index, index: index,
name: 'Item $index Sender', name: 'Item $index Sender',
...@@ -130,7 +130,7 @@ class LeaveBehindDemoState extends State<LeaveBehindDemo> { ...@@ -130,7 +130,7 @@ class LeaveBehindDemoState extends State<LeaveBehindDemo> {
right: <Widget>[ right: <Widget>[
new PopupMenuButton<LeaveBehindDemoAction>( new PopupMenuButton<LeaveBehindDemoAction>(
onSelected: handleDemoAction, onSelected: handleDemoAction,
items: <PopupMenuEntry<LeaveBehindDemoAction>>[ items: <PopupMenuEntry>[
new PopupMenuItem<LeaveBehindDemoAction>( new PopupMenuItem<LeaveBehindDemoAction>(
value: LeaveBehindDemoAction.reset, value: LeaveBehindDemoAction.reset,
child: new Text('Reset the list') child: new Text('Reset the list')
......
...@@ -19,7 +19,7 @@ class ListDemo extends StatefulComponent { ...@@ -19,7 +19,7 @@ class ListDemo extends StatefulComponent {
class ListDemoState extends State<ListDemo> { class ListDemoState extends State<ListDemo> {
final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>(); final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();
PersistentBottomSheetController<Null> _bottomSheet; ScaffoldFeatureController _bottomSheet;
ListDemoItemSize _itemSize = ListDemoItemSize.threeLine; ListDemoItemSize _itemSize = ListDemoItemSize.threeLine;
bool _dense = false; bool _dense = false;
bool _showAvatars = true; bool _showAvatars = true;
......
...@@ -176,7 +176,7 @@ class MenuDemoState extends State<MenuDemo> { ...@@ -176,7 +176,7 @@ class MenuDemoState extends State<MenuDemo> {
right: new PopupMenuButton<String>( right: new PopupMenuButton<String>(
onSelected: showCheckedMenuSelections, onSelected: showCheckedMenuSelections,
items: <PopupMenuItem<String>>[ items: <PopupMenuItem<String>>[
new CheckedPopupMenuItem<String>( new CheckedPopupMenuItem(
value: _checkedValue1, value: _checkedValue1,
checked: isChecked(_checkedValue1), checked: isChecked(_checkedValue1),
child: new Text(_checkedValue1) child: new Text(_checkedValue1)
......
...@@ -21,7 +21,7 @@ class ModalBottomSheetDemo extends StatelessComponent { ...@@ -21,7 +21,7 @@ class ModalBottomSheetDemo extends StatelessComponent {
child: new RaisedButton( child: new RaisedButton(
child: new Text('Show the modal bottom sheet', style: textStyle), child: new Text('Show the modal bottom sheet', style: textStyle),
onPressed: () { onPressed: () {
showModalBottomSheet/*<Null>*/(context: context, builder: (BuildContext context) { showModalBottomSheet(context: context, builder: (_) {
return new Container( return new Container(
child: new Padding( child: new Padding(
padding: const EdgeDims.all(32.0), padding: const EdgeDims.all(32.0),
......
...@@ -7,7 +7,7 @@ import 'package:flutter/material.dart'; ...@@ -7,7 +7,7 @@ import 'package:flutter/material.dart';
class PageSelectorDemo extends StatelessComponent { class PageSelectorDemo extends StatelessComponent {
void _handleArrowButtonPress(BuildContext context, int delta) { void _handleArrowButtonPress(BuildContext context, int delta) {
final TabBarSelectionState<IconData> selection = TabBarSelection.of/*<IconData>*/(context); final TabBarSelectionState selection = TabBarSelection.of(context);
if (!selection.valueIsChanging) if (!selection.valueIsChanging)
selection.value = selection.values[(selection.index + delta).clamp(0, selection.values.length - 1)]; selection.value = selection.values[(selection.index + delta).clamp(0, selection.values.length - 1)];
} }
...@@ -53,7 +53,7 @@ class PageSelectorDemo extends StatelessComponent { ...@@ -53,7 +53,7 @@ class PageSelectorDemo extends StatelessComponent {
) )
), ),
new Flexible( new Flexible(
child: new TabBarView<IconData>( child: new TabBarView(
children: icons.map((IconData icon) { children: icons.map((IconData icon) {
return new Container( return new Container(
key: new ObjectKey(icon), key: new ObjectKey(icon),
......
...@@ -82,7 +82,7 @@ class _TechniqueItem extends StatelessComponent { ...@@ -82,7 +82,7 @@ class _TechniqueItem extends StatelessComponent {
final WidgetBuilder builder; final WidgetBuilder builder;
void showDemo(BuildContext context) { void showDemo(BuildContext context) {
Navigator.push(context, new MaterialPageRoute<Null>(builder: builder)); Navigator.push(context, new MaterialPageRoute(builder: builder));
} }
Widget build(BuildContext context) { Widget build(BuildContext context) {
......
...@@ -25,20 +25,20 @@ class TabsDemo extends StatelessComponent { ...@@ -25,20 +25,20 @@ class TabsDemo extends StatelessComponent {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final Color iconColor = Theme.of(context).accentColor; final Color iconColor = Theme.of(context).accentColor;
return new TabBarSelection<IconData>( return new TabBarSelection(
values: icons, values: icons,
child: new Scaffold( child: new Scaffold(
toolBar: new ToolBar( toolBar: new ToolBar(
center: new Text("Scrollable Tabs"), center: new Text("Scrollable Tabs"),
tabBar: new TabBar<IconData>( tabBar: new TabBar<String>(
isScrollable: true, isScrollable: true,
labels: new Map<IconData, TabLabel>.fromIterable( labels: new Map.fromIterable(
icons, icons,
value: (IconData icon) => new TabLabel(text: labels[icon], icon: icon) value: (IconData icon) => new TabLabel(text: labels[icon], icon: icon)
) )
) )
), ),
body: new TabBarView<IconData>( body: new TabBarView(
children: icons.map((IconData icon) { children: icons.map((IconData icon) {
return new Container( return new Container(
key: new ObjectKey(icon), key: new ObjectKey(icon),
......
...@@ -97,7 +97,7 @@ class _TabsFabDemoState extends State<TabsFabDemo> { ...@@ -97,7 +97,7 @@ class _TabsFabDemoState extends State<TabsFabDemo> {
toolBar: new ToolBar( toolBar: new ToolBar(
center: new Text("FAB per Tab"), center: new Text("FAB per Tab"),
tabBar: new TabBar<_Page>( tabBar: new TabBar<_Page>(
labels: new Map<_Page, TabLabel>.fromIterable(pages, value: (_Page page) => page.tabLabel) labels: new Map.fromIterable(pages, value: (_Page page) => page.tabLabel)
) )
), ),
floatingActionButton: !selectedPage.fabDefined ? null : new FloatingActionButton( floatingActionButton: !selectedPage.fabDefined ? null : new FloatingActionButton(
...@@ -107,7 +107,7 @@ class _TabsFabDemoState extends State<TabsFabDemo> { ...@@ -107,7 +107,7 @@ class _TabsFabDemoState extends State<TabsFabDemo> {
child: selectedPage.fabIcon, child: selectedPage.fabIcon,
onPressed: _showExplanatoryText onPressed: _showExplanatoryText
), ),
body: new TabBarView<_Page>(children: pages.map(buildTabView).toList()) body: new TabBarView(children: pages.map(buildTabView).toList())
) )
); );
} }
......
...@@ -13,7 +13,7 @@ class TimePickerDemo extends StatefulComponent { ...@@ -13,7 +13,7 @@ class TimePickerDemo extends StatefulComponent {
class _TimePickerDemoState extends State<TimePickerDemo> { class _TimePickerDemoState extends State<TimePickerDemo> {
TimeOfDay _selectedTime = const TimeOfDay(hour: 7, minute: 28); TimeOfDay _selectedTime = const TimeOfDay(hour: 7, minute: 28);
Future<Null> _handleSelectTime() async { Future _handleSelectTime() async {
TimeOfDay picked = await showTimePicker( TimeOfDay picked = await showTimePicker(
context: context, context: context,
initialTime: _selectedTime initialTime: _selectedTime
......
...@@ -24,7 +24,7 @@ class WeatherDemo extends StatefulComponent { ...@@ -24,7 +24,7 @@ class WeatherDemo extends StatefulComponent {
class _WeatherDemoState extends State<WeatherDemo> { class _WeatherDemoState extends State<WeatherDemo> {
Future<Null> _loadAssets(AssetBundle bundle) async { Future _loadAssets(AssetBundle bundle) async {
_images = new ImageMap(bundle); _images = new ImageMap(bundle);
await _images.load(<String>[ await _images.load(<String>[
'packages/flutter_gallery_assets/clouds-0.png', 'packages/flutter_gallery_assets/clouds-0.png',
......
...@@ -16,7 +16,7 @@ class GallerySection extends StatelessComponent { ...@@ -16,7 +16,7 @@ class GallerySection extends StatelessComponent {
final List<GalleryDemo> demos; final List<GalleryDemo> demos;
void showDemo(GalleryDemo demo, BuildContext context, ThemeData theme) { void showDemo(GalleryDemo demo, BuildContext context, ThemeData theme) {
Navigator.push(context, new MaterialPageRoute<Null>( Navigator.push(context, new MaterialPageRoute(
builder: (BuildContext context) { builder: (BuildContext context) {
Widget child = (demo.builder == null) ? null : demo.builder(); Widget child = (demo.builder == null) ? null : demo.builder();
return new Theme(data: theme, child: child); return new Theme(data: theme, child: child);
...@@ -31,7 +31,7 @@ class GallerySection extends StatelessComponent { ...@@ -31,7 +31,7 @@ class GallerySection extends StatelessComponent {
); );
final double appBarHeight = 200.0; final double appBarHeight = 200.0;
final Key scrollableKey = new ValueKey<String>(title); // assume section titles differ final Key scrollableKey = new ValueKey<String>(title); // assume section titles differ
Navigator.push(context, new MaterialPageRoute<Null>( Navigator.push(context, new MaterialPageRoute(
builder: (BuildContext context) { builder: (BuildContext context) {
return new Theme( return new Theme(
data: theme, data: theme,
......
...@@ -75,7 +75,7 @@ class StocksAppState extends State<StocksApp> { ...@@ -75,7 +75,7 @@ class StocksAppState extends State<StocksApp> {
} }
} }
Route<Null> _getRoute(RouteSettings settings) { Route _getRoute(RouteSettings settings) {
List<String> path = settings.name.split('/'); List<String> path = settings.name.split('/');
if (path[0] != '') if (path[0] != '')
return null; return null;
...@@ -83,7 +83,7 @@ class StocksAppState extends State<StocksApp> { ...@@ -83,7 +83,7 @@ class StocksAppState extends State<StocksApp> {
if (path.length != 3) if (path.length != 3)
return null; return null;
if (_stocks.containsKey(path[2])) { if (_stocks.containsKey(path[2])) {
return new MaterialPageRoute<Null>( return new MaterialPageRoute(
settings: settings, settings: settings,
builder: (BuildContext context) => new StockSymbolPage(stock: _stocks[path[2]]) builder: (BuildContext context) => new StockSymbolPage(stock: _stocks[path[2]])
); );
......
...@@ -53,7 +53,7 @@ class StockData { ...@@ -53,7 +53,7 @@ class StockData {
} }
typedef void StockDataCallback(StockData data); typedef void StockDataCallback(StockData data);
const int _kChunkCount = 30; const _kChunkCount = 30;
String _urlToFetch(int chunk) { String _urlToFetch(int chunk) {
return 'https://domokit.github.io/examples/stocks/data/stock_data_$chunk.json'; return 'https://domokit.github.io/examples/stocks/data/stock_data_$chunk.json';
......
...@@ -321,7 +321,7 @@ class StockHomeState extends State<StockHome> { ...@@ -321,7 +321,7 @@ class StockHomeState extends State<StockHome> {
} }
void _handleCreateCompany() { void _handleCreateCompany() {
showModalBottomSheet/*<int, double>*/( // XXXXXX DO NOT CHECK IN XXXXXX THIS IS A CHECK OF THE ANALYZER showModalBottomSheet(
context: context, context: context,
builder: (BuildContext context) => new _CreateCompanySheet() builder: (BuildContext context) => new _CreateCompanySheet()
); );
...@@ -344,7 +344,7 @@ class StockHomeState extends State<StockHome> { ...@@ -344,7 +344,7 @@ class StockHomeState extends State<StockHome> {
toolBar: _isSearching ? buildSearchBar() : buildToolBar(), toolBar: _isSearching ? buildSearchBar() : buildToolBar(),
floatingActionButton: buildFloatingActionButton(), floatingActionButton: buildFloatingActionButton(),
drawer: _buildDrawer(context), drawer: _buildDrawer(context),
body: new TabBarView<StockHomeTab>( body: new TabBarView(
children: <Widget>[ children: <Widget>[
_buildStockTab(context, StockHomeTab.market, config.symbols), _buildStockTab(context, StockHomeTab.market, config.symbols),
_buildStockTab(context, StockHomeTab.portfolio, portfolioSymbols), _buildStockTab(context, StockHomeTab.portfolio, portfolioSymbols),
......
...@@ -18,7 +18,7 @@ class StockList extends StatelessComponent { ...@@ -18,7 +18,7 @@ class StockList extends StatelessComponent {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return new ScrollableList( return new ScrollableList(
key: const ValueKey<String>('stock-list'), key: const ValueKey('stock-list'),
itemExtent: StockRow.kHeight, itemExtent: StockRow.kHeight,
children: stocks.map((Stock stock) { children: stocks.map((Stock stock) {
return new StockRow( return new StockRow(
......
...@@ -17,12 +17,11 @@ void main() { ...@@ -17,12 +17,11 @@ void main() {
tester.async.flushMicrotasks(); // see https://github.com/flutter/flutter/issues/1865 tester.async.flushMicrotasks(); // see https://github.com/flutter/flutter/issues/1865
tester.pump(); tester.pump();
Element tab = tester.findText('MARKET'); Element<Text> tab = tester.findText('MARKET');
expect(tab, isNotNull); expect(tab, isNotNull);
tester.setLocale("es", "US"); tester.setLocale("es", "US");
tester.pump(); tester.pump();
Text text = tab.widget; expect(tab.widget.data, equals("MERCADO"));
expect(text.data, equals("MERCADO"));
// TODO(abarth): We're leaking an animation. We should track down the leak // TODO(abarth): We're leaking an animation. We should track down the leak
// and plug it rather than waiting for the animation to end here. // and plug it rather than waiting for the animation to end here.
......
...@@ -27,13 +27,13 @@ void main() { ...@@ -27,13 +27,13 @@ void main() {
// Scroll down 5 times // Scroll down 5 times
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) {
await driver.scroll(stockList, 0.0, -300.0, new Duration(milliseconds: 300)); await driver.scroll(stockList, 0.0, -300.0, new Duration(milliseconds: 300));
await new Future<Null>.delayed(new Duration(milliseconds: 500)); await new Future.delayed(new Duration(milliseconds: 500));
} }
// Scroll up 5 times // Scroll up 5 times
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) {
await driver.scroll(stockList, 0.0, 300.0, new Duration(milliseconds: 300)); await driver.scroll(stockList, 0.0, 300.0, new Duration(milliseconds: 300));
await new Future<Null>.delayed(new Duration(milliseconds: 500)); await new Future.delayed(new Duration(milliseconds: 500));
} }
}); });
}); });
......
...@@ -18,121 +18,108 @@ class Expression extends _EquationMember { ...@@ -18,121 +18,108 @@ class Expression extends _EquationMember {
bool get isConstant => terms.length == 0; bool get isConstant => terms.length == 0;
@override @override
double get value => terms.fold(constant, (double value, Term term) => value + term.value); double get value => terms.fold(constant, (value, term) => value + term.value);
@override @override
Expression asExpression() => this; Expression asExpression() => this;
Constraint _createConstraint(_EquationMember /* rhs */ value, Relation relation) { Constraint _createConstraint(
_EquationMember /* rhs */ value, Relation relation) {
if (value is ConstantMember) { if (value is ConstantMember) {
return new Constraint( return new Constraint(
new Expression(new List<Term>.from(terms), constant - value.value), new Expression(new List.from(terms), constant - value.value),
relation relation);
);
} }
if (value is Param) { if (value is Param) {
List<Term> newTerms = new List<Term>.from(terms) var newTerms = new List<Term>.from(terms)
..add(new Term(value.variable, -1.0)); ..add(new Term(value.variable, -1.0));
return new Constraint(new Expression(newTerms, constant), relation); return new Constraint(new Expression(newTerms, constant), relation);
} }
if (value is Term) { if (value is Term) {
List<Term> newTerms = new List<Term>.from(terms) var newTerms = new List<Term>.from(terms)
..add(new Term(value.variable, -value.coefficient)); ..add(new Term(value.variable, -value.coefficient));
return new Constraint(new Expression(newTerms, constant), relation); return new Constraint(new Expression(newTerms, constant), relation);
} }
if (value is Expression) { if (value is Expression) {
List<Term> newTerms = value.terms.fold( var newTerms = value.terms.fold(new List<Term>.from(terms),
new List<Term>.from(terms), (list, t) => list..add(new Term(t.variable, -t.coefficient)));
(List<Term> list, Term t) {
return list..add(new Term(t.variable, -t.coefficient));
}
);
return new Constraint( return new Constraint(
new Expression(newTerms, constant - value.constant), new Expression(newTerms, constant - value.constant), relation);
relation
);
} }
assert(false); assert(false);
return null; return null;
} }
@override @override
Constraint operator >=(_EquationMember value) { Constraint operator >=(_EquationMember value) =>
return _createConstraint(value, Relation.greaterThanOrEqualTo); _createConstraint(value, Relation.greaterThanOrEqualTo);
}
@override @override
Constraint operator <=(_EquationMember value) { Constraint operator <=(_EquationMember value) =>
return _createConstraint(value, Relation.lessThanOrEqualTo); _createConstraint(value, Relation.lessThanOrEqualTo);
}
@override @override
Constraint equals(_EquationMember value) { Constraint equals(_EquationMember value) =>
return _createConstraint(value, Relation.equalTo); _createConstraint(value, Relation.equalTo);
}
@override @override
Expression operator +(_EquationMember m) { Expression operator +(_EquationMember m) {
if (m is ConstantMember) if (m is ConstantMember) {
return new Expression(new List<Term>.from(terms), constant + m.value); return new Expression(new List.from(terms), constant + m.value);
}
if (m is Param) { if (m is Param) {
return new Expression( return new Expression(
new List<Term>.from(terms)..add(new Term(m.variable, 1.0)), new List.from(terms)..add(new Term(m.variable, 1.0)), constant);
constant
);
} }
if (m is Term) if (m is Term) {
return new Expression(new List<Term>.from(terms)..add(m), constant); return new Expression(new List.from(terms)..add(m), constant);
}
if (m is Expression) { if (m is Expression) {
return new Expression( return new Expression(
new List<Term>.from(terms)..addAll(m.terms), new List.from(terms)..addAll(m.terms), constant + m.constant);
constant + m.constant
);
} }
assert(false); assert(false);
return null; return null;
} }
@override @override
Expression operator -(_EquationMember m) { Expression operator -(_EquationMember m) {
if (m is ConstantMember) if (m is ConstantMember) {
return new Expression(new List<Term>.from(terms), constant - m.value); return new Expression(new List.from(terms), constant - m.value);
}
if (m is Param) { if (m is Param) {
return new Expression( return new Expression(
new List<Term>.from(terms)..add(new Term(m.variable, -1.0)), new List.from(terms)..add(new Term(m.variable, -1.0)), constant);
constant
);
} }
if (m is Term) { if (m is Term) {
return new Expression(new List<Term>.from(terms) return new Expression(new List.from(terms)
..add(new Term(m.variable, -m.coefficient)), constant); ..add(new Term(m.variable, -m.coefficient)), constant);
} }
if (m is Expression) { if (m is Expression) {
List<Term> copiedTerms = new List<Term>.from(terms); var copiedTerms = new List<Term>.from(terms);
for (Term t in m.terms) m.terms.forEach(
copiedTerms.add(new Term(t.variable, -t.coefficient)); (t) => copiedTerms.add(new Term(t.variable, -t.coefficient)));
return new Expression(copiedTerms, constant - m.constant); return new Expression(copiedTerms, constant - m.constant);
} }
assert(false); assert(false);
return null; return null;
} }
_EquationMember _applyMultiplicand(double m) { _EquationMember _applyMultiplicand(double m) {
List<Term> newTerms = terms.fold( var newTerms = terms.fold(new List<Term>(), (list, term) => list
new List<Term>(), ..add(new Term(term.variable, term.coefficient * m)));
(List<Term> list, Term term) {
return list..add(new Term(term.variable, term.coefficient * m));
}
);
return new Expression(newTerms, constant * m); return new Expression(newTerms, constant * m);
} }
...@@ -140,14 +127,17 @@ class Expression extends _EquationMember { ...@@ -140,14 +127,17 @@ class Expression extends _EquationMember {
// At least on of the the two members must be constant for the resulting // At least on of the the two members must be constant for the resulting
// expression to be linear // expression to be linear
if (!this.isConstant && !m.isConstant) if (!this.isConstant && !m.isConstant) {
return null; return null;
}
if (this.isConstant) if (this.isConstant) {
return new _Pair<Expression, double>(m.asExpression(), this.value); return new _Pair(m.asExpression(), this.value);
}
if (m.isConstant) if (m.isConstant) {
return new _Pair<Expression, double>(this.asExpression(), m.value); return new _Pair(this.asExpression(), m.value);
}
assert(false); assert(false);
return null; return null;
...@@ -158,9 +148,8 @@ class Expression extends _EquationMember { ...@@ -158,9 +148,8 @@ class Expression extends _EquationMember {
if (args == null) { if (args == null) {
throw new ParserException( throw new ParserException(
'Could not find constant multiplicand or multiplier', 'Could not find constant multiplicand or multiplier', [this, m]);
<_EquationMember>[this, m] return null;
);
} }
return args.first._applyMultiplicand(args.second); return args.first._applyMultiplicand(args.second);
...@@ -179,7 +168,7 @@ class Expression extends _EquationMember { ...@@ -179,7 +168,7 @@ class Expression extends _EquationMember {
String toString() { String toString() {
StringBuffer buffer = new StringBuffer(); StringBuffer buffer = new StringBuffer();
terms.forEach((Term t) => buffer.write('$t')); terms.forEach((t) => buffer.write('$t'));
if (constant != 0.0) { if (constant != 0.0) {
buffer.write(constant.sign > 0.0 ? '+' : '-'); buffer.write(constant.sign > 0.0 ? '+' : '-');
......
...@@ -5,19 +5,19 @@ ...@@ -5,19 +5,19 @@
part of cassowary; part of cassowary;
class Param extends _EquationMember { class Param extends _EquationMember {
final Variable variable;
dynamic context;
Param([double value = 0.0]) : variable = new Variable(value) { Param([double value = 0.0]) : variable = new Variable(value) {
variable._owner = this; variable._owner = this;
} }
Param.withContext(dynamic context, [double value = 0.0])
Param.withContext(ctx, [double value = 0.0])
: variable = new Variable(value), : variable = new Variable(value),
context = context { context = ctx {
variable._owner = this; variable._owner = this;
} }
final Variable variable;
dynamic context;
bool get isConstant => false; bool get isConstant => false;
double get value => variable.value; double get value => variable.value;
...@@ -25,5 +25,5 @@ class Param extends _EquationMember { ...@@ -25,5 +25,5 @@ class Param extends _EquationMember {
String get name => variable.name; String get name => variable.name;
void set name(String name) { variable.name = name; } void set name(String name) { variable.name = name; }
Expression asExpression() => new Expression(<Term>[new Term(variable, 1.0)], 0.0); Expression asExpression() => new Expression([new Term(variable, 1.0)], 0.0);
} }
...@@ -27,7 +27,7 @@ class _Row { ...@@ -27,7 +27,7 @@ class _Row {
void insertRow(_Row other, [double coefficient = 1.0]) { void insertRow(_Row other, [double coefficient = 1.0]) {
constant += other.constant * coefficient; constant += other.constant * coefficient;
other.cells.forEach((_Symbol s, double v) => insertSymbol(s, v * coefficient)); other.cells.forEach((s, v) => insertSymbol(s, v * coefficient));
} }
void removeSymbol(_Symbol symbol) { void removeSymbol(_Symbol symbol) {
...@@ -36,7 +36,7 @@ class _Row { ...@@ -36,7 +36,7 @@ class _Row {
void reverseSign() { void reverseSign() {
constant = -constant; constant = -constant;
cells.forEach((_Symbol s, double v) => cells[s] = -v); cells.forEach((s, v) => cells[s] = -v);
} }
void solveForSymbol(_Symbol symbol) { void solveForSymbol(_Symbol symbol) {
...@@ -44,7 +44,7 @@ class _Row { ...@@ -44,7 +44,7 @@ class _Row {
double coefficient = -1.0 / cells[symbol]; double coefficient = -1.0 / cells[symbol];
cells.remove(symbol); cells.remove(symbol);
constant *= coefficient; constant *= coefficient;
cells.forEach((_Symbol s, double v) => cells[s] = v * coefficient); cells.forEach((s, v) => cells[s] = v * coefficient);
} }
void solveForSymbols(_Symbol lhs, _Symbol rhs) { void solveForSymbols(_Symbol lhs, _Symbol rhs) {
...@@ -70,9 +70,8 @@ class _Row { ...@@ -70,9 +70,8 @@ class _Row {
buffer.write(constant); buffer.write(constant);
cells.forEach((_Symbol symbol, double value) { cells.forEach((symbol, value) =>
buffer.write(" + " + value.toString() + " * " + symbol.toString()); buffer.write(" + " + value.toString() + " * " + symbol.toString()));
});
return buffer.toString(); return buffer.toString();
} }
......
...@@ -89,7 +89,7 @@ class Solver { ...@@ -89,7 +89,7 @@ class Solver {
_Symbol leaving = rowPair.first; _Symbol leaving = rowPair.first;
row = rowPair.second; row = rowPair.second;
_Row removed = _rows.remove(rowPair.first); var removed = _rows.remove(rowPair.first);
assert(removed != null); assert(removed != null);
row.solveForSymbols(leaving, tag.marker); row.solveForSymbols(leaving, tag.marker);
_substitute(tag.marker, row); _substitute(tag.marker, row);
...@@ -170,8 +170,8 @@ class Solver { ...@@ -170,8 +170,8 @@ class Solver {
return _dualOptimize(); return _dualOptimize();
} }
Set<dynamic> flushUpdates() { Set flushUpdates() {
Set<dynamic> updates = new HashSet<dynamic>(); Set updates = new HashSet<dynamic>();
for (Variable variable in _vars.keys) { for (Variable variable in _vars.keys) {
_Symbol symbol = _vars[variable]; _Symbol symbol = _vars[variable];
...@@ -189,12 +189,10 @@ class Solver { ...@@ -189,12 +189,10 @@ class Solver {
return updates; return updates;
} }
Result _bulkEdit( Result _bulkEdit(Iterable items,
Iterable<dynamic> items,
_SolverBulkUpdate applier, _SolverBulkUpdate applier,
_SolverBulkUpdate undoer _SolverBulkUpdate undoer) {
) { List applied = new List();
List<dynamic> applied = <dynamic>[];
bool needsCleanup = false; bool needsCleanup = false;
Result result = Result.success; Result result = Result.success;
...@@ -233,7 +231,7 @@ class Solver { ...@@ -233,7 +231,7 @@ class Solver {
Expression expr = new Expression.fromExpression(constraint.expression); Expression expr = new Expression.fromExpression(constraint.expression);
_Row row = new _Row(expr.constant); _Row row = new _Row(expr.constant);
expr.terms.forEach((Term term) { expr.terms.forEach((term) {
if (!_nearZero(term.coefficient)) { if (!_nearZero(term.coefficient)) {
_Symbol symbol = _symbolForVariable(term.variable); _Symbol symbol = _symbolForVariable(term.variable);
...@@ -399,9 +397,9 @@ class Solver { ...@@ -399,9 +397,9 @@ class Solver {
_Pair<_Symbol, _Row> _leavingRowForEnteringSymbol(_Symbol entering) { _Pair<_Symbol, _Row> _leavingRowForEnteringSymbol(_Symbol entering) {
double ratio = double.MAX_FINITE; double ratio = double.MAX_FINITE;
_Pair<_Symbol, _Row> result = new _Pair<_Symbol, _Row>(null, null); _Pair<_Symbol, _Row> result = new _Pair(null, null);
_rows.forEach((_Symbol symbol, _Row row) { _rows.forEach((symbol, row) {
if (symbol.type != _SymbolType.external) { if (symbol.type != _SymbolType.external) {
double temp = row.coefficientForSymbol(entering); double temp = row.coefficientForSymbol(entering);
...@@ -425,7 +423,7 @@ class Solver { ...@@ -425,7 +423,7 @@ class Solver {
} }
void _substitute(_Symbol symbol, _Row row) { void _substitute(_Symbol symbol, _Row row) {
_rows.forEach((_Symbol first, _Row second) { _rows.forEach((first, second) {
second.substitute(symbol, row); second.substitute(symbol, row);
if (first.type != _SymbolType.external && second.constant < 0.0) { if (first.type != _SymbolType.external && second.constant < 0.0) {
_infeasibleRows.add(first); _infeasibleRows.add(first);
...@@ -472,7 +470,7 @@ class Solver { ...@@ -472,7 +470,7 @@ class Solver {
_Pair<_Symbol, _Row> first, second, third; _Pair<_Symbol, _Row> first, second, third;
_rows.forEach((_Symbol symbol, _Row row) { _rows.forEach((symbol, row) {
double c = row.coefficientForSymbol(marker); double c = row.coefficientForSymbol(marker);
if (c == 0.0) { if (c == 0.0) {
...@@ -480,18 +478,18 @@ class Solver { ...@@ -480,18 +478,18 @@ class Solver {
} }
if (symbol.type == _SymbolType.external) { if (symbol.type == _SymbolType.external) {
third = new _Pair<_Symbol, _Row>(symbol, row); third = new _Pair(symbol, row);
} else if (c < 0.0) { } else if (c < 0.0) {
double r = -row.constant / c; double r = -row.constant / c;
if (r < r1) { if (r < r1) {
r1 = r; r1 = r;
first = new _Pair<_Symbol, _Row>(symbol, row); first = new _Pair(symbol, row);
} }
} else { } else {
double r = row.constant / c; double r = row.constant / c;
if (r < r2) { if (r < r2) {
r2 = r; r2 = r;
second = new _Pair<_Symbol, _Row>(symbol, row); second = new _Pair(symbol, row);
} }
} }
}); });
...@@ -598,33 +596,28 @@ class Solver { ...@@ -598,33 +596,28 @@ class Solver {
// Tableau // Tableau
buffer.writeln(separator + " Tableau"); buffer.writeln(separator + " Tableau");
_rows.forEach((_Symbol symbol, _Row row) { _rows.forEach((symbol, row) {
buffer.writeln('$symbol | $row'); buffer.write(symbol.toString());
buffer.write(" | ");
buffer.writeln(row.toString());
}); });
// Infeasible // Infeasible
buffer.writeln(separator + " Infeasible"); buffer.writeln(separator + " Infeasible");
_infeasibleRows.forEach((_Symbol symbol) { _infeasibleRows.forEach((symbol) => buffer.writeln(symbol.toString()));
buffer.writeln(symbol);
});
// Variables // Variables
buffer.writeln(separator + " Variables"); buffer.writeln(separator + " Variables");
_vars.forEach((Variable variable, _Symbol symbol) { _vars.forEach((variable, symbol) =>
buffer.writeln('$variable = $symbol'); buffer.writeln("${variable.toString()} = ${symbol.toString()}"));
});
// Edit Variables // Edit Variables
buffer.writeln(separator + " Edit Variables"); buffer.writeln(separator + " Edit Variables");
_edits.forEach((Variable variable, _EditInfo editinfo) { _edits.forEach((variable, editinfo) => buffer.writeln(variable));
buffer.writeln(variable);
});
// Constraints // Constraints
buffer.writeln(separator + " Constraints"); buffer.writeln(separator + " Constraints");
_constraints.forEach((Constraint constraint, _Tag tag) { _constraints.forEach((constraint, _) => buffer.writeln(constraint));
buffer.writeln(constraint);
});
return buffer.toString(); return buffer.toString();
} }
......
...@@ -10,34 +10,34 @@ import 'package:cassowary/cassowary.dart'; ...@@ -10,34 +10,34 @@ import 'package:cassowary/cassowary.dart';
void main() { void main() {
test('variable', () { test('variable', () {
Param v = new Param(22.0); var v = new Param(22.0);
expect(v.value, 22); expect(v.value, 22);
}); });
test('variable1', () { test('variable1', () {
Param v = new Param(22.0); var v = new Param(22.0);
expect((v + cm(22.0)).value, 44.0); expect((v + cm(22.0)).value, 44.0);
expect((v - cm(20.0)).value, 2.0); expect((v - cm(20.0)).value, 2.0);
}); });
test('term', () { test('term', () {
Term t = new Term(new Variable(22.0), 2.0); var t = new Term(new Variable(22.0), 2.0);
expect(t.value, 44); expect(t.value, 44);
}); });
test('expression', () { test('expression', () {
List<Term> terms = <Term>[ var terms = [
new Term(new Variable(22.0), 2.0), new Term(new Variable(22.0), 2.0),
new Term(new Variable(1.0), 1.0), new Term(new Variable(1.0), 1.0),
]; ];
Expression e = new Expression(terms, 40.0); var e = new Expression(terms, 40.0);
expect(e.value, 85.0); expect(e.value, 85.0);
}); });
test('expression1', () { test('expression1', () {
Param v1 = new Param(10.0); var v1 = new Param(10.0);
Param v2 = new Param(10.0); var v2 = new Param(10.0);
Param v3 = new Param(22.0); var v3 = new Param(22.0);
expect(v1 is Param, true); expect(v1 is Param, true);
expect(v1 + cm(20.0) is Expression, true); expect(v1 + cm(20.0) is Expression, true);
...@@ -51,7 +51,7 @@ void main() { ...@@ -51,7 +51,7 @@ void main() {
}); });
test('expression2', () { test('expression2', () {
Expression e = new Param(10.0) + cm(5.0); var e = new Param(10.0) + cm(5.0);
expect(e.value, 15.0); expect(e.value, 15.0);
expect(e is Expression, true); expect(e is Expression, true);
...@@ -64,7 +64,7 @@ void main() { ...@@ -64,7 +64,7 @@ void main() {
expect(e.value, 15.0); expect(e.value, 15.0);
// Param // Param
Param v = new Param(2.0); var v = new Param(2.0);
expect((e + v) is Expression, true); expect((e + v) is Expression, true);
expect((e + v).value, 17.0); expect((e + v).value, 17.0);
expect((e - v) is Expression, true); expect((e - v) is Expression, true);
...@@ -73,7 +73,7 @@ void main() { ...@@ -73,7 +73,7 @@ void main() {
expect(e.value, 15.0); expect(e.value, 15.0);
// Term // Term
Term t = new Term(v.variable, 2.0); var t = new Term(v.variable, 2.0);
expect((e + t) is Expression, true); expect((e + t) is Expression, true);
expect((e + t).value, 19.0); expect((e + t).value, 19.0);
expect((e - t) is Expression, true); expect((e - t) is Expression, true);
...@@ -82,7 +82,7 @@ void main() { ...@@ -82,7 +82,7 @@ void main() {
expect(e.value, 15.0); expect(e.value, 15.0);
// Expression // Expression
Expression e2 = new Param(7.0) + new Param(3.0); var e2 = new Param(7.0) + new Param(3.0);
expect((e + e2) is Expression, true); expect((e + e2) is Expression, true);
expect((e + e2).value, 25.0); expect((e + e2).value, 25.0);
expect((e - e2) is Expression, true); expect((e - e2) is Expression, true);
...@@ -92,31 +92,31 @@ void main() { ...@@ -92,31 +92,31 @@ void main() {
}); });
test('term2', () { test('term2', () {
Term t = new Term(new Variable(12.0), 1.0); var t = new Term(new Variable(12.0), 1.0);
// Constant // Constant
ConstantMember c = cm(2.0); var c = cm(2.0);
expect((t + c) is Expression, true); expect((t + c) is Expression, true);
expect((t + c).value, 14.0); expect((t + c).value, 14.0);
expect((t - c) is Expression, true); expect((t - c) is Expression, true);
expect((t - c).value, 10.0); expect((t - c).value, 10.0);
// Variable // Variable
Param v = new Param(2.0); var v = new Param(2.0);
expect((t + v) is Expression, true); expect((t + v) is Expression, true);
expect((t + v).value, 14.0); expect((t + v).value, 14.0);
expect((t - v) is Expression, true); expect((t - v) is Expression, true);
expect((t - v).value, 10.0); expect((t - v).value, 10.0);
// Term // Term
Term t2 = new Term(new Variable(1.0), 2.0); var t2 = new Term(new Variable(1.0), 2.0);
expect((t + t2) is Expression, true); expect((t + t2) is Expression, true);
expect((t + t2).value, 14.0); expect((t + t2).value, 14.0);
expect((t - t2) is Expression, true); expect((t - t2) is Expression, true);
expect((t - t2).value, 10.0); expect((t - t2).value, 10.0);
// Expression // Expression
Expression exp = new Param(1.0) + cm(1.0); var exp = new Param(1.0) + cm(1.0);
expect((t + exp) is Expression, true); expect((t + exp) is Expression, true);
expect((t + exp).value, 14.0); expect((t + exp).value, 14.0);
expect((t - exp) is Expression, true); expect((t - exp) is Expression, true);
...@@ -124,31 +124,31 @@ void main() { ...@@ -124,31 +124,31 @@ void main() {
}); });
test('variable3', () { test('variable3', () {
Param v = new Param(3.0); var v = new Param(3.0);
// Constant // Constant
ConstantMember c = cm(2.0); var c = cm(2.0);
expect((v + c) is Expression, true); expect((v + c) is Expression, true);
expect((v + c).value, 5.0); expect((v + c).value, 5.0);
expect((v - c) is Expression, true); expect((v - c) is Expression, true);
expect((v - c).value, 1.0); expect((v - c).value, 1.0);
// Variable // Variable
Param v2 = new Param(2.0); var v2 = new Param(2.0);
expect((v + v2) is Expression, true); expect((v + v2) is Expression, true);
expect((v + v2).value, 5.0); expect((v + v2).value, 5.0);
expect((v - v2) is Expression, true); expect((v - v2) is Expression, true);
expect((v - v2).value, 1.0); expect((v - v2).value, 1.0);
// Term // Term
Term t2 = new Term(new Variable(1.0), 2.0); var t2 = new Term(new Variable(1.0), 2.0);
expect((v + t2) is Expression, true); expect((v + t2) is Expression, true);
expect((v + t2).value, 5.0); expect((v + t2).value, 5.0);
expect((v - t2) is Expression, true); expect((v - t2) is Expression, true);
expect((v - t2).value, 1.0); expect((v - t2).value, 1.0);
// Expression // Expression
Expression exp = new Param(1.0) + cm(1.0); var exp = new Param(1.0) + cm(1.0);
expect(exp.terms.length, 1); expect(exp.terms.length, 1);
expect((v + exp) is Expression, true); expect((v + exp) is Expression, true);
...@@ -158,31 +158,31 @@ void main() { ...@@ -158,31 +158,31 @@ void main() {
}); });
test('constantmember', () { test('constantmember', () {
ConstantMember c = cm(3.0); var c = cm(3.0);
// Constant // Constant
ConstantMember c2 = cm(2.0); var c2 = cm(2.0);
expect((c + c2) is Expression, true); expect((c + c2) is Expression, true);
expect((c + c2).value, 5.0); expect((c + c2).value, 5.0);
expect((c - c2) is Expression, true); expect((c - c2) is Expression, true);
expect((c - c2).value, 1.0); expect((c - c2).value, 1.0);
// Variable // Variable
Param v2 = new Param(2.0); var v2 = new Param(2.0);
expect((c + v2) is Expression, true); expect((c + v2) is Expression, true);
expect((c + v2).value, 5.0); expect((c + v2).value, 5.0);
expect((c - v2) is Expression, true); expect((c - v2) is Expression, true);
expect((c - v2).value, 1.0); expect((c - v2).value, 1.0);
// Term // Term
Term t2 = new Term(new Variable(1.0), 2.0); var t2 = new Term(new Variable(1.0), 2.0);
expect((c + t2) is Expression, true); expect((c + t2) is Expression, true);
expect((c + t2).value, 5.0); expect((c + t2).value, 5.0);
expect((c - t2) is Expression, true); expect((c - t2) is Expression, true);
expect((c - t2).value, 1.0); expect((c - t2).value, 1.0);
// Expression // Expression
Expression exp = new Param(1.0) + cm(1.0); var exp = new Param(1.0) + cm(1.0);
expect((c + exp) is Expression, true); expect((c + exp) is Expression, true);
expect((c + exp).value, 5.0); expect((c + exp).value, 5.0);
...@@ -191,74 +191,74 @@ void main() { ...@@ -191,74 +191,74 @@ void main() {
}); });
test('constraint2', () { test('constraint2', () {
Param left = new Param(10.0); var left = new Param(10.0);
Param right = new Param(100.0); var right = new Param(100.0);
Constraint c = right - left >= cm(25.0); var c = right - left >= cm(25.0);
expect(c is Constraint, true); expect(c is Constraint, true);
}); });
test('simple_multiplication', () { test('simple_multiplication', () {
// Constant // Constant
ConstantMember c = cm(20.0); var c = cm(20.0);
expect((c * cm(2.0)).value, 40.0); expect((c * cm(2.0)).value, 40.0);
// Variable // Variable
Param v = new Param(20.0); var v = new Param(20.0);
expect((v * cm(2.0)).value, 40.0); expect((v * cm(2.0)).value, 40.0);
// Term // Term
Term t = new Term(v.variable, 1.0); var t = new Term(v.variable, 1.0);
expect((t * cm(2.0)).value, 40.0); expect((t * cm(2.0)).value, 40.0);
// Expression // Expression
Expression e = new Expression([t], 0.0); var e = new Expression([t], 0.0);
expect((e * cm(2.0)).value, 40.0); expect((e * cm(2.0)).value, 40.0);
}); });
test('simple_division', () { test('simple_division', () {
// Constant // Constant
ConstantMember c = cm(20.0); var c = cm(20.0);
expect((c / cm(2.0)).value, 10.0); expect((c / cm(2.0)).value, 10.0);
// Variable // Variable
Param v = new Param(20.0); var v = new Param(20.0);
expect((v / cm(2.0)).value, 10.0); expect((v / cm(2.0)).value, 10.0);
// Term // Term
Term t = new Term(v.variable, 1.0); var t = new Term(v.variable, 1.0);
expect((t / cm(2.0)).value, 10.0); expect((t / cm(2.0)).value, 10.0);
// Expression // Expression
Expression e = new Expression([t], 0.0); var e = new Expression([t], 0.0);
expect((e / cm(2.0)).value, 10.0); expect((e / cm(2.0)).value, 10.0);
}); });
test('full_constraints_setup', () { test('full_constraints_setup', () {
Param left = new Param(2.0); var left = new Param(2.0);
Param right = new Param(10.0); var right = new Param(10.0);
Constraint c1 = right - left >= cm(20.0); var c1 = right - left >= cm(20.0);
expect(c1 is Constraint, true); expect(c1 is Constraint, true);
expect(c1.expression.constant, -20.0); expect(c1.expression.constant, -20.0);
expect(c1.relation, Relation.greaterThanOrEqualTo); expect(c1.relation, Relation.greaterThanOrEqualTo);
Constraint c2 = (right - left).equals(cm(30.0)); var c2 = (right - left).equals(cm(30.0));
expect(c2 is Constraint, true); expect(c2 is Constraint, true);
expect(c2.expression.constant, -30.0); expect(c2.expression.constant, -30.0);
expect(c2.relation, Relation.equalTo); expect(c2.relation, Relation.equalTo);
Constraint c3 = right - left <= cm(30.0); var c3 = right - left <= cm(30.0);
expect(c3 is Constraint, true); expect(c3 is Constraint, true);
expect(c3.expression.constant, -30.0); expect(c3.expression.constant, -30.0);
expect(c3.relation, Relation.lessThanOrEqualTo); expect(c3.relation, Relation.lessThanOrEqualTo);
}); });
test('constraint_strength_update', () { test('constraint_strength_update', () {
Param left = new Param(2.0); var left = new Param(2.0);
Param right = new Param(10.0); var right = new Param(10.0);
Constraint c = (right - left >= cm(200.0)) | 750.0; var c = (right - left >= cm(200.0)) | 750.0;
expect(c is Constraint, true); expect(c is Constraint, true);
expect(c.expression.terms.length, 2); expect(c.expression.terms.length, 2);
expect(c.expression.constant, -200.0); expect(c.expression.constant, -200.0);
...@@ -266,12 +266,12 @@ void main() { ...@@ -266,12 +266,12 @@ void main() {
}); });
test('solver', () { test('solver', () {
Solver s = new Solver(); var s = new Solver();
Param left = new Param(2.0); var left = new Param(2.0);
Param right = new Param(100.0); var right = new Param(100.0);
Constraint c1 = right - left >= cm(200.0); var c1 = right - left >= cm(200.0);
expect((right >= left) is Constraint, true); expect((right >= left) is Constraint, true);
...@@ -279,28 +279,28 @@ void main() { ...@@ -279,28 +279,28 @@ void main() {
}); });
test('constraint_complex', () { test('constraint_complex', () {
Expression e = new Param(200.0) - new Param(100.0); var e = new Param(200.0) - new Param(100.0);
// Constant // Constant
Constraint c1 = e >= cm(50.0); var c1 = e >= cm(50.0);
expect(c1 is Constraint, true); expect(c1 is Constraint, true);
expect(c1.expression.terms.length, 2); expect(c1.expression.terms.length, 2);
expect(c1.expression.constant, -50.0); expect(c1.expression.constant, -50.0);
// Variable // Variable
Constraint c2 = e >= new Param(2.0); var c2 = e >= new Param(2.0);
expect(c2 is Constraint, true); expect(c2 is Constraint, true);
expect(c2.expression.terms.length, 3); expect(c2.expression.terms.length, 3);
expect(c2.expression.constant, 0.0); expect(c2.expression.constant, 0.0);
// Term // Term
Constraint c3 = e >= new Term(new Variable(2.0), 1.0); var c3 = e >= new Term(new Variable(2.0), 1.0);
expect(c3 is Constraint, true); expect(c3 is Constraint, true);
expect(c3.expression.terms.length, 3); expect(c3.expression.terms.length, 3);
expect(c3.expression.constant, 0.0); expect(c3.expression.constant, 0.0);
// Expression // Expression
Constraint c4 = e >= new Expression([new Term(new Variable(2.0), 1.0)], 20.0); var c4 = e >= new Expression([new Term(new Variable(2.0), 1.0)], 20.0);
expect(c4 is Constraint, true); expect(c4 is Constraint, true);
expect(c4.expression.terms.length, 3); expect(c4.expression.terms.length, 3);
expect(c4.expression.constant, -20.0); expect(c4.expression.constant, -20.0);
...@@ -308,40 +308,40 @@ void main() { ...@@ -308,40 +308,40 @@ void main() {
test('constraint_complex_non_exprs', () { test('constraint_complex_non_exprs', () {
// Constant // Constant
Constraint c1 = cm(100.0) >= cm(50.0); var c1 = cm(100.0) >= cm(50.0);
expect(c1 is Constraint, true); expect(c1 is Constraint, true);
expect(c1.expression.terms.length, 0); expect(c1.expression.terms.length, 0);
expect(c1.expression.constant, 50.0); expect(c1.expression.constant, 50.0);
// Variable // Variable
Constraint c2 = new Param(100.0) >= new Param(2.0); var c2 = new Param(100.0) >= new Param(2.0);
expect(c2 is Constraint, true); expect(c2 is Constraint, true);
expect(c2.expression.terms.length, 2); expect(c2.expression.terms.length, 2);
expect(c2.expression.constant, 0.0); expect(c2.expression.constant, 0.0);
// Term // Term
Term t = new Term(new Variable(100.0), 1.0); var t = new Term(new Variable(100.0), 1.0);
Constraint c3 = t >= new Term(new Variable(2.0), 1.0); var c3 = t >= new Term(new Variable(2.0), 1.0);
expect(c3 is Constraint, true); expect(c3 is Constraint, true);
expect(c3.expression.terms.length, 2); expect(c3.expression.terms.length, 2);
expect(c3.expression.constant, 0.0); expect(c3.expression.constant, 0.0);
// Expression // Expression
Expression e = new Expression([t], 0.0); var e = new Expression([t], 0.0);
Constraint c4 = e >= new Expression([new Term(new Variable(2.0), 1.0)], 20.0); var c4 = e >= new Expression([new Term(new Variable(2.0), 1.0)], 20.0);
expect(c4 is Constraint, true); expect(c4 is Constraint, true);
expect(c4.expression.terms.length, 2); expect(c4.expression.terms.length, 2);
expect(c4.expression.constant, -20.0); expect(c4.expression.constant, -20.0);
}); });
test('constraint_update_in_solver', () { test('constraint_update_in_solver', () {
Solver s = new Solver(); var s = new Solver();
Param left = new Param(2.0); var left = new Param(2.0);
Param right = new Param(100.0); var right = new Param(100.0);
Constraint c1 = right - left >= cm(200.0); var c1 = right - left >= cm(200.0);
Constraint c2 = right >= right; var c2 = right >= right;
expect(s.addConstraint(c1), Result.success); expect(s.addConstraint(c1), Result.success);
expect(s.addConstraint(c1), Result.duplicateConstraint); expect(s.addConstraint(c1), Result.duplicateConstraint);
...@@ -351,10 +351,10 @@ void main() { ...@@ -351,10 +351,10 @@ void main() {
}); });
test('test_multiplication_division_override', () { test('test_multiplication_division_override', () {
ConstantMember c = cm(10.0); var c = cm(10.0);
Param v = new Param(c.value); var v = new Param(c.value);
Term t = new Term(v.variable, 1.0); var t = new Term(v.variable, 1.0);
Expression e = new Expression([t], 0.0); var e = new Expression([t], 0.0);
// Constant // Constant
expect((c * cm(10.0)).value, 100); expect((c * cm(10.0)).value, 100);
...@@ -382,10 +382,10 @@ void main() { ...@@ -382,10 +382,10 @@ void main() {
}); });
test('test_multiplication_division_exceptions', () { test('test_multiplication_division_exceptions', () {
ConstantMember c = cm(10.0); var c = cm(10.0);
Param v = new Param(c.value); var v = new Param(c.value);
Term t = new Term(v.variable, 1.0); var t = new Term(v.variable, 1.0);
Expression e = new Expression([t], 0.0); var e = new Expression([t], 0.0);
expect((c * c).value, 100); expect((c * c).value, 100);
expect(() => v * v, throwsA(new isInstanceOf<ParserException>())); expect(() => v * v, throwsA(new isInstanceOf<ParserException>()));
...@@ -401,9 +401,9 @@ void main() { ...@@ -401,9 +401,9 @@ void main() {
test('edit_updates', () { test('edit_updates', () {
Solver s = new Solver(); Solver s = new Solver();
Param left = new Param(0.0); var left = new Param(0.0);
Param right = new Param(100.0); var right = new Param(100.0);
Param mid = new Param(0.0); var mid = new Param(0.0);
Constraint c = left + right >= cm(2.0) * mid; Constraint c = left + right >= cm(2.0) * mid;
expect(s.addConstraint(c), Result.success); expect(s.addConstraint(c), Result.success);
...@@ -416,15 +416,15 @@ void main() { ...@@ -416,15 +416,15 @@ void main() {
}); });
test('bug1', () { test('bug1', () {
Param left = new Param(0.0); var left = new Param(0.0);
Param right = new Param(100.0); var right = new Param(100.0);
Param mid = new Param(0.0); var mid = new Param(0.0);
expect(((left + right) >= (cm(2.0) * mid)) is Constraint, true); expect(((left + right) >= (cm(2.0) * mid)) is Constraint, true);
}); });
test('single_item', () { test('single_item', () {
Param left = new Param(-20.0); var left = new Param(-20.0);
Solver s = new Solver(); Solver s = new Solver();
s.addConstraint(left >= cm(0.0)); s.addConstraint(left >= cm(0.0));
s.flushUpdates(); s.flushUpdates();
...@@ -432,9 +432,9 @@ void main() { ...@@ -432,9 +432,9 @@ void main() {
}); });
test('midpoints', () { test('midpoints', () {
Param left = new Param(0.0)..name = "left"; var left = new Param(0.0)..name = "left";
Param right = new Param(0.0)..name = "right"; var right = new Param(0.0)..name = "right";
Param mid = new Param(0.0)..name = "mid"; var mid = new Param(0.0)..name = "mid";
Solver s = new Solver(); Solver s = new Solver();
...@@ -451,13 +451,13 @@ void main() { ...@@ -451,13 +451,13 @@ void main() {
}); });
test('addition_of_multiple', () { test('addition_of_multiple', () {
Param left = new Param(0.0); var left = new Param(0.0);
Param right = new Param(0.0); var right = new Param(0.0);
Param mid = new Param(0.0); var mid = new Param(0.0);
Solver s = new Solver(); Solver s = new Solver();
Constraint c = (left >= cm(0.0)); var c = (left >= cm(0.0));
expect(s.addConstraints([ expect(s.addConstraints([
(left + right).equals(cm(2.0) * mid), (left + right).equals(cm(2.0) * mid),
...@@ -470,9 +470,9 @@ void main() { ...@@ -470,9 +470,9 @@ void main() {
}); });
test('edit_constraints', () { test('edit_constraints', () {
Param left = new Param(0.0)..name = "left"; var left = new Param(0.0)..name = "left";
Param right = new Param(0.0)..name = "right"; var right = new Param(0.0)..name = "right";
Param mid = new Param(0.0)..name = "mid"; var mid = new Param(0.0)..name = "mid";
Solver s = new Solver(); Solver s = new Solver();
...@@ -492,11 +492,11 @@ void main() { ...@@ -492,11 +492,11 @@ void main() {
}); });
test('test_description', () { test('test_description', () {
Param left = new Param(0.0); var left = new Param(0.0);
Param right = new Param(100.0); var right = new Param(100.0);
Constraint c1 = right >= left; var c1 = right >= left;
Constraint c2 = right <= left; var c2 = right <= left;
Constraint c3 = right.equals(left); var c3 = right.equals(left);
Solver s = new Solver(); Solver s = new Solver();
expect(s.addConstraint(c1), Result.success); expect(s.addConstraint(c1), Result.success);
...@@ -547,7 +547,7 @@ void main() { ...@@ -547,7 +547,7 @@ void main() {
expect(s.suggestValueForVariable(mid.variable, 50.0), Result.success); expect(s.suggestValueForVariable(mid.variable, 50.0), Result.success);
Set<dynamic> updates = s.flushUpdates(); var updates = s.flushUpdates();
expect(updates.length, 2); expect(updates.length, 2);
...@@ -571,7 +571,7 @@ void main() { ...@@ -571,7 +571,7 @@ void main() {
expect(s.suggestValueForVariable(mid.variable, 50.0), Result.success); expect(s.suggestValueForVariable(mid.variable, 50.0), Result.success);
Set<dynamic> updates = s.flushUpdates(); var updates = s.flushUpdates();
expect(updates.length, 1); expect(updates.length, 1);
...@@ -581,7 +581,7 @@ void main() { ...@@ -581,7 +581,7 @@ void main() {
}); });
test('param_context_non_final', () { test('param_context_non_final', () {
Param p = new Param.withContext("a"); var p = new Param.withContext("a");
p.context = "b"; p.context = "b";
expect(p.context, "b"); expect(p.context, "b");
}); });
...@@ -596,9 +596,9 @@ void main() { ...@@ -596,9 +596,9 @@ void main() {
test('bulk_add_edit_variables', () { test('bulk_add_edit_variables', () {
Solver s = new Solver(); Solver s = new Solver();
Param left = new Param(0.0); var left = new Param(0.0);
Param right = new Param(100.0); var right = new Param(100.0);
Param mid = new Param(0.0); var mid = new Param(0.0);
expect(s.addEditVariables( expect(s.addEditVariables(
[left.variable, right.variable, mid.variable], 999.0), Result.success); [left.variable, right.variable, mid.variable], 999.0), Result.success);
...@@ -607,15 +607,15 @@ void main() { ...@@ -607,15 +607,15 @@ void main() {
test('bulk_remove_constraints_and_variables', () { test('bulk_remove_constraints_and_variables', () {
Solver s = new Solver(); Solver s = new Solver();
Param left = new Param(0.0); var left = new Param(0.0);
Param right = new Param(100.0); var right = new Param(100.0);
Param mid = new Param(0.0); var mid = new Param(0.0);
expect(s.addEditVariables( expect(s.addEditVariables(
[left.variable, right.variable, mid.variable], 999.0), Result.success); [left.variable, right.variable, mid.variable], 999.0), Result.success);
Constraint c1 = left <= mid; var c1 = left <= mid;
Constraint c2 = mid <= right; var c2 = mid <= right;
expect(s.addConstraints([c1, c2]), Result.success); expect(s.addConstraints([c1, c2]), Result.success);
......
...@@ -125,7 +125,7 @@ class AnimationController extends Animation<double> ...@@ -125,7 +125,7 @@ class AnimationController extends Animation<double>
} }
/// Starts running this animation forwards (towards the end). /// Starts running this animation forwards (towards the end).
Future<Null> forward({ double from }) { Future forward({ double from }) {
if (from != null) if (from != null)
value = from; value = from;
_direction = _AnimationDirection.forward; _direction = _AnimationDirection.forward;
...@@ -133,7 +133,7 @@ class AnimationController extends Animation<double> ...@@ -133,7 +133,7 @@ class AnimationController extends Animation<double>
} }
/// Starts running this animation in reverse (towards the beginning). /// Starts running this animation in reverse (towards the beginning).
Future<Null> reverse({ double from }) { Future reverse({ double from }) {
if (from != null) if (from != null)
value = from; value = from;
_direction = _AnimationDirection.reverse; _direction = _AnimationDirection.reverse;
...@@ -141,7 +141,7 @@ class AnimationController extends Animation<double> ...@@ -141,7 +141,7 @@ class AnimationController extends Animation<double>
} }
/// Drives the animation from its current value to target. /// Drives the animation from its current value to target.
Future<Null> animateTo(double target, { Duration duration, Curve curve: Curves.linear }) { Future animateTo(double target, { Duration duration, Curve curve: Curves.linear }) {
Duration simulationDuration = duration; Duration simulationDuration = duration;
if (simulationDuration == null) { if (simulationDuration == null) {
double range = upperBound - lowerBound; double range = upperBound - lowerBound;
...@@ -152,7 +152,7 @@ class AnimationController extends Animation<double> ...@@ -152,7 +152,7 @@ class AnimationController extends Animation<double>
if (simulationDuration == Duration.ZERO) { if (simulationDuration == Duration.ZERO) {
assert(value == target); assert(value == target);
_checkStatusChanged(); _checkStatusChanged();
return new Future<Null>.value(); return new Future.value();
} }
assert(simulationDuration > Duration.ZERO); assert(simulationDuration > Duration.ZERO);
assert(!isAnimating); assert(!isAnimating);
...@@ -163,7 +163,7 @@ class AnimationController extends Animation<double> ...@@ -163,7 +163,7 @@ class AnimationController extends Animation<double>
/// restarts the animation when it completes. /// restarts the animation when it completes.
/// ///
/// Defaults to repeating between the lower and upper bounds. /// Defaults to repeating between the lower and upper bounds.
Future<Null> repeat({ double min, double max, Duration period }) { Future repeat({ double min, double max, Duration period }) {
min ??= lowerBound; min ??= lowerBound;
max ??= upperBound; max ??= upperBound;
period ??= duration; period ??= duration;
...@@ -173,24 +173,24 @@ class AnimationController extends Animation<double> ...@@ -173,24 +173,24 @@ class AnimationController extends Animation<double>
/// Flings the timeline with an optional force (defaults to a critically /// Flings the timeline with an optional force (defaults to a critically
/// damped spring) and initial velocity. If velocity is positive, the /// damped spring) and initial velocity. If velocity is positive, the
/// animation will complete, otherwise it will dismiss. /// animation will complete, otherwise it will dismiss.
Future<Null> fling({ double velocity: 1.0, Force force }) { Future fling({ double velocity: 1.0, Force force }) {
force ??= kDefaultSpringForce; force ??= kDefaultSpringForce;
_direction = velocity < 0.0 ? _AnimationDirection.reverse : _AnimationDirection.forward; _direction = velocity < 0.0 ? _AnimationDirection.reverse : _AnimationDirection.forward;
return animateWith(force.release(value, velocity)); return animateWith(force.release(value, velocity));
} }
/// Drives the animation according to the given simulation. /// Drives the animation according to the given simulation.
Future<Null> animateWith(Simulation simulation) { Future animateWith(Simulation simulation) {
stop(); stop();
return _startSimulation(simulation); return _startSimulation(simulation);
} }
Future<Null> _startSimulation(Simulation simulation) { Future _startSimulation(Simulation simulation) {
assert(simulation != null); assert(simulation != null);
assert(!isAnimating); assert(!isAnimating);
_simulation = simulation; _simulation = simulation;
_value = simulation.x(0.0).clamp(lowerBound, upperBound); _value = simulation.x(0.0).clamp(lowerBound, upperBound);
Future<Null> result = _ticker.start(); Future result = _ticker.start();
_checkStatusChanged(); _checkStatusChanged();
return result; return result;
} }
......
...@@ -145,6 +145,6 @@ Future<Uint8List> readBytes(dynamic url, { Map<String, String> headers }) { ...@@ -145,6 +145,6 @@ Future<Uint8List> readBytes(dynamic url, { Map<String, String> headers }) {
return _withClient/*<Uint8List>*/((MojoClient client) => client.readBytes(url, headers: headers)); return _withClient/*<Uint8List>*/((MojoClient client) => client.readBytes(url, headers: headers));
} }
Future<dynamic/*=T*/> _withClient/*<T>*/(Future<dynamic/*=T*/> fn(MojoClient client)) { Future/*<T>*/ _withClient/*<T>*/(Future/*<T>*/ fn(MojoClient client)) {
return fn(new MojoClient()); return fn(new MojoClient());
} }
...@@ -45,7 +45,7 @@ class MaterialApp extends WidgetsApp { ...@@ -45,7 +45,7 @@ class MaterialApp extends WidgetsApp {
onGenerateRoute: (RouteSettings settings) { onGenerateRoute: (RouteSettings settings) {
RouteBuilder builder = routes[settings.name]; RouteBuilder builder = routes[settings.name];
if (builder != null) { if (builder != null) {
return new MaterialPageRoute<Null>( return new MaterialPageRoute(
builder: (BuildContext context) { builder: (BuildContext context) {
return builder(new RouteArguments(context: context)); return builder(new RouteArguments(context: context));
}, },
......
...@@ -44,7 +44,7 @@ class BottomSheet extends StatefulComponent { ...@@ -44,7 +44,7 @@ class BottomSheet extends StatefulComponent {
class _BottomSheetState extends State<BottomSheet> { class _BottomSheetState extends State<BottomSheet> {
final GlobalKey _childKey = new GlobalKey(debugLabel: 'BottomSheet child'); final _childKey = new GlobalKey(debugLabel: 'BottomSheet child');
double get _childHeight { double get _childHeight {
final RenderBox renderBox = _childKey.currentContext.findRenderObject(); final RenderBox renderBox = _childKey.currentContext.findRenderObject();
...@@ -117,15 +117,15 @@ class _ModalBottomSheetLayout extends OneChildLayoutDelegate { ...@@ -117,15 +117,15 @@ class _ModalBottomSheetLayout extends OneChildLayoutDelegate {
} }
} }
class _ModalBottomSheet<T> extends StatefulComponent { class _ModalBottomSheet extends StatefulComponent {
_ModalBottomSheet({ Key key, this.route }) : super(key: key); _ModalBottomSheet({ Key key, this.route }) : super(key: key);
final _ModalBottomSheetRoute<T> route; final _ModalBottomSheetRoute route;
_ModalBottomSheetState<T> createState() => new _ModalBottomSheetState<T>(); _ModalBottomSheetState createState() => new _ModalBottomSheetState();
} }
class _ModalBottomSheetState<T> extends State<_ModalBottomSheet<T>> { class _ModalBottomSheetState extends State<_ModalBottomSheet> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return new GestureDetector( return new GestureDetector(
onTap: () => Navigator.pop(context), onTap: () => Navigator.pop(context),
...@@ -165,15 +165,15 @@ class _ModalBottomSheetRoute<T> extends PopupRoute<T> { ...@@ -165,15 +165,15 @@ class _ModalBottomSheetRoute<T> extends PopupRoute<T> {
} }
Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> forwardAnimation) { Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> forwardAnimation) {
return new _ModalBottomSheet<T>(route: this); return new _ModalBottomSheet(route: this);
} }
} }
Future<dynamic/*=T*/> showModalBottomSheet/*<T>*/({ BuildContext context, WidgetBuilder builder }) { Future showModalBottomSheet({ BuildContext context, WidgetBuilder builder }) {
assert(context != null); assert(context != null);
assert(builder != null); assert(builder != null);
final Completer<dynamic/*=T*/> completer = new Completer<dynamic/*=T*/>(); final Completer completer = new Completer();
Navigator.push(context, new _ModalBottomSheetRoute<dynamic/*=T*/>( Navigator.push(context, new _ModalBottomSheetRoute(
completer: completer, completer: completer,
builder: builder builder: builder
)); ));
......
...@@ -9,20 +9,20 @@ import 'dart:ui' show Color; ...@@ -9,20 +9,20 @@ import 'dart:ui' show Color;
class Colors { class Colors {
Colors._(); Colors._();
static const Color transparent = const Color(0x00000000); static const transparent = const Color(0x00000000);
static const Color black = const Color(0xFF000000); static const black = const Color(0xFF000000);
static const Color black87 = const Color(0xDD000000); static const black87 = const Color(0xDD000000);
static const Color black54 = const Color(0x8A000000); static const black54 = const Color(0x8A000000);
static const Color black45 = const Color(0x73000000); // mask color static const black45 = const Color(0x73000000); // mask color
static const Color black26 = const Color(0x42000000); // disabled radio buttons and text of disabled flat buttons in light theme static const black26 = const Color(0x42000000); // disabled radio buttons and text of disabled flat buttons in light theme
static const Color black12 = const Color(0x1F000000); // background of disabled raised buttons in light theme static const black12 = const Color(0x1F000000); // background of disabled raised buttons in light theme
static const Color white = const Color(0xFFFFFFFF); static const white = const Color(0xFFFFFFFF);
static const Color white70 = const Color(0xB3FFFFFF); static const white70 = const Color(0xB3FFFFFF);
static const Color white30 = const Color(0x4DFFFFFF); // disabled radio buttons and text of disabled flat buttons in dark theme static const white30 = const Color(0x4DFFFFFF); // disabled radio buttons and text of disabled flat buttons in dark theme
static const Color white12 = const Color(0x1FFFFFFF); // background of disabled raised buttons in dark theme static const white12 = const Color(0x1FFFFFFF); // background of disabled raised buttons in dark theme
static const Color white10 = const Color(0x1AFFFFFF); static const white10 = const Color(0x1AFFFFFF);
static const Map<int, Color> red = const <int, Color>{ static const Map<int, Color> red = const <int, Color>{
50: const Color(0xFFFFEBEE), 50: const Color(0xFFFFEBEE),
......
...@@ -142,8 +142,8 @@ class _DialogRoute<T> extends PopupRoute<T> { ...@@ -142,8 +142,8 @@ class _DialogRoute<T> extends PopupRoute<T> {
} }
} }
Future<dynamic/*=T*/> showDialog/*<T>*/({ BuildContext context, Widget child }) { Future showDialog({ BuildContext context, Widget child }) {
Completer<dynamic/*=T*/> completer = new Completer<int>(); // XXXXXXX MORE ANALYZER CHECKS Completer completer = new Completer();
Navigator.push(context, new _DialogRoute<dynamic/*=T*/>(completer: completer, child: child)); Navigator.push(context, new _DialogRoute(completer: completer, child: child));
return completer.future; return completer.future;
} }
...@@ -86,7 +86,7 @@ class DrawerControllerState extends State<DrawerController> { ...@@ -86,7 +86,7 @@ class DrawerControllerState extends State<DrawerController> {
void _ensureHistoryEntry() { void _ensureHistoryEntry() {
if (_historyEntry == null) { if (_historyEntry == null) {
ModalRoute<dynamic> route = ModalRoute.of(context); ModalRoute route = ModalRoute.of(context);
if (route != null) { if (route != null) {
_historyEntry = new LocalHistoryEntry(onRemove: _handleHistoryEntryRemoved); _historyEntry = new LocalHistoryEntry(onRemove: _handleHistoryEntryRemoved);
route.addLocalHistoryEntry(_historyEntry); route.addLocalHistoryEntry(_historyEntry);
......
...@@ -154,7 +154,7 @@ class _DropDownRouteResult<T> { ...@@ -154,7 +154,7 @@ class _DropDownRouteResult<T> {
const _DropDownRouteResult(this.result); const _DropDownRouteResult(this.result);
final T result; final T result;
bool operator ==(dynamic other) { bool operator ==(dynamic other) {
if (other is! _DropDownRouteResult<T>) if (other is! _DropDownRouteResult)
return false; return false;
final _DropDownRouteResult<T> typedOther = other; final _DropDownRouteResult<T> typedOther = other;
return result == typedOther.result; return result == typedOther.result;
...@@ -193,7 +193,7 @@ class _DropDownRoute<T> extends PopupRoute<_DropDownRouteResult<T>> { ...@@ -193,7 +193,7 @@ class _DropDownRoute<T> extends PopupRoute<_DropDownRouteResult<T>> {
} }
Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> forwardAnimation) { Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> forwardAnimation) {
return new _DropDownMenu<T>(route: this); return new _DropDownMenu(route: this);
} }
} }
...@@ -269,7 +269,7 @@ class _DropDownButtonState<T> extends State<DropDownButton<T>> { ...@@ -269,7 +269,7 @@ class _DropDownButtonState<T> extends State<DropDownButton<T>> {
void _handleTap() { void _handleTap() {
final RenderBox renderBox = indexedStackKey.currentContext.findRenderObject(); final RenderBox renderBox = indexedStackKey.currentContext.findRenderObject();
final Rect rect = renderBox.localToGlobal(Point.origin) & renderBox.size; final Rect rect = renderBox.localToGlobal(Point.origin) & renderBox.size;
final Completer<_DropDownRouteResult<T>> completer = new Completer<_DropDownRouteResult<T>>(); final Completer completer = new Completer<_DropDownRouteResult<T>>();
Navigator.push(context, new _DropDownRoute<T>( Navigator.push(context, new _DropDownRoute<T>(
completer: completer, completer: completer,
items: config.items, items: config.items,
......
...@@ -44,7 +44,7 @@ class InkResponse extends StatefulComponent { ...@@ -44,7 +44,7 @@ class InkResponse extends StatefulComponent {
final bool containedInWell; final bool containedInWell;
final BoxShape highlightShape; final BoxShape highlightShape;
_InkResponseState<InkResponse> createState() => new _InkResponseState<InkResponse>(); _InkResponseState createState() => new _InkResponseState<InkResponse>();
} }
class _InkResponseState<T extends InkResponse> extends State<T> { class _InkResponseState<T extends InkResponse> extends State<T> {
......
...@@ -477,7 +477,7 @@ class _InkHighlight extends InkFeature implements InkHighlight { ...@@ -477,7 +477,7 @@ class _InkHighlight extends InkFeature implements InkHighlight {
super.dispose(); super.dispose();
} }
void _paintHighlight(Canvas canvas, Rect rect, Paint paint) { void _paintHighlight(Canvas canvas, Rect rect, paint) {
if (shape == BoxShape.rectangle) if (shape == BoxShape.rectangle)
canvas.drawRect(rect, paint); canvas.drawRect(rect, paint);
else else
......
...@@ -54,7 +54,7 @@ class MaterialPageRoute<T> extends PageRoute<T> { ...@@ -54,7 +54,7 @@ class MaterialPageRoute<T> extends PageRoute<T> {
Duration get transitionDuration => kMaterialPageRouteTransitionDuration; Duration get transitionDuration => kMaterialPageRouteTransitionDuration;
Color get barrierColor => null; Color get barrierColor => null;
bool canTransitionFrom(TransitionRoute<dynamic> nextRoute) => false; bool canTransitionFrom(TransitionRoute nextRoute) => false;
Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> forwardAnimation) { Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> forwardAnimation) {
Widget result = builder(context); Widget result = builder(context);
......
...@@ -65,7 +65,7 @@ class PopupMenuItem<T> extends PopupMenuEntry<T> { ...@@ -65,7 +65,7 @@ class PopupMenuItem<T> extends PopupMenuEntry<T> {
_PopupMenuItemState<PopupMenuItem<T>> createState() => new _PopupMenuItemState<PopupMenuItem<T>>(); _PopupMenuItemState<PopupMenuItem<T>> createState() => new _PopupMenuItemState<PopupMenuItem<T>>();
} }
class _PopupMenuItemState<T extends PopupMenuItem<dynamic>> extends State<T> { class _PopupMenuItemState<T extends PopupMenuItem> extends State<T> {
// Override this to put something else in the menu entry. // Override this to put something else in the menu entry.
Widget buildChild() => config.child; Widget buildChild() => config.child;
...@@ -318,7 +318,7 @@ class _PopupMenuRoute<T> extends PopupRoute<T> { ...@@ -318,7 +318,7 @@ class _PopupMenuRoute<T> extends PopupRoute<T> {
constraints: new BoxConstraints(maxWidth: screenSize.width, maxHeight: screenSize.height), constraints: new BoxConstraints(maxWidth: screenSize.width, maxHeight: screenSize.height),
child: new CustomOneChildLayout( child: new CustomOneChildLayout(
delegate: new _PopupMenuRouteLayout(position, selectedItemOffset), delegate: new _PopupMenuRouteLayout(position, selectedItemOffset),
child: new _PopupMenu<T>(route: this) child: new _PopupMenu(route: this)
) )
); );
} }
...@@ -329,17 +329,17 @@ class _PopupMenuRoute<T> extends PopupRoute<T> { ...@@ -329,17 +329,17 @@ class _PopupMenuRoute<T> extends PopupRoute<T> {
/// and the value of [position] implies where the left, center point of the /// and the value of [position] implies where the left, center point of the
/// highlighted item should appear. If [initialValue] is not specified then position /// highlighted item should appear. If [initialValue] is not specified then position
/// implies the menu's origin. /// implies the menu's origin.
Future<dynamic/*=T*/> showMenu/*<T>*/({ Future/*<T>*/ showMenu/*<T>*/({
BuildContext context, BuildContext context,
ModalPosition position, ModalPosition position,
List<PopupMenuEntry<dynamic/*=T*/>> items, List<PopupMenuEntry/*<T>*/> items,
dynamic/*=T*/ initialValue, dynamic/*=T*/ initialValue,
int elevation: 8 int elevation: 8
}) { }) {
assert(context != null); assert(context != null);
assert(items != null && items.length > 0); assert(items != null && items.length > 0);
Completer<dynamic/*=T*/> completer = new Completer<dynamic/*=T*/>(); Completer completer = new Completer/*<T>*/();
Navigator.push(context, new _PopupMenuRoute<dynamic/*=T*/>( Navigator.push(context, new _PopupMenuRoute/*<T>*/(
completer: completer, completer: completer,
position: position, position: position,
items: items, items: items,
......
...@@ -128,11 +128,11 @@ class _LinearProgressIndicatorState extends State<LinearProgressIndicator> { ...@@ -128,11 +128,11 @@ class _LinearProgressIndicatorState extends State<LinearProgressIndicator> {
} }
class _CircularProgressIndicatorPainter extends CustomPainter { class _CircularProgressIndicatorPainter extends CustomPainter {
static const double _kTwoPI = math.PI * 2.0; static const _kTwoPI = math.PI * 2.0;
static const double _kEpsilon = .001; static const _kEpsilon = .001;
// Canavs.drawArc(r, 0, 2*PI) doesn't draw anything, so just get close. // Canavs.drawArc(r, 0, 2*PI) doesn't draw anything, so just get close.
static const double _kSweep = _kTwoPI - _kEpsilon; static const _kSweep = _kTwoPI - _kEpsilon;
static const double _kStartAngle = -math.PI / 2.0; static const _kStartAngle = -math.PI / 2.0;
const _CircularProgressIndicatorPainter({ const _CircularProgressIndicatorPainter({
this.valueColor, this.valueColor,
......
...@@ -229,24 +229,24 @@ class ScaffoldState extends State<Scaffold> { ...@@ -229,24 +229,24 @@ class ScaffoldState extends State<Scaffold> {
// SNACKBAR API // SNACKBAR API
Queue<ScaffoldFeatureController<SnackBar, Null>> _snackBars = new Queue<ScaffoldFeatureController<SnackBar, Null>>(); Queue<ScaffoldFeatureController<SnackBar>> _snackBars = new Queue<ScaffoldFeatureController<SnackBar>>();
AnimationController _snackBarController; AnimationController _snackBarController;
Timer _snackBarTimer; Timer _snackBarTimer;
ScaffoldFeatureController<SnackBar, Null> showSnackBar(SnackBar snackbar) { ScaffoldFeatureController showSnackBar(SnackBar snackbar) {
_snackBarController ??= SnackBar.createAnimationController() _snackBarController ??= SnackBar.createAnimationController()
..addStatusListener(_handleSnackBarStatusChange); ..addStatusListener(_handleSnackBarStatusChange);
if (_snackBars.isEmpty) { if (_snackBars.isEmpty) {
assert(_snackBarController.isDismissed); assert(_snackBarController.isDismissed);
_snackBarController.forward(); _snackBarController.forward();
} }
ScaffoldFeatureController<SnackBar, Null> controller; ScaffoldFeatureController<SnackBar> controller;
controller = new ScaffoldFeatureController<SnackBar, Null>._( controller = new ScaffoldFeatureController<SnackBar>._(
// We provide a fallback key so that if back-to-back snackbars happen to // We provide a fallback key so that if back-to-back snackbars happen to
// match in structure, material ink splashes and highlights don't survive // match in structure, material ink splashes and highlights don't survive
// from one to the next. // from one to the next.
snackbar.withAnimation(_snackBarController, fallbackKey: new UniqueKey()), snackbar.withAnimation(_snackBarController, fallbackKey: new UniqueKey()),
new Completer<Null>(), new Completer(),
() { () {
assert(_snackBars.first == controller); assert(_snackBars.first == controller);
_hideSnackBar(); _hideSnackBar();
...@@ -294,14 +294,14 @@ class ScaffoldState extends State<Scaffold> { ...@@ -294,14 +294,14 @@ class ScaffoldState extends State<Scaffold> {
// PERSISTENT BOTTOM SHEET API // PERSISTENT BOTTOM SHEET API
List<Widget> _dismissedBottomSheets; List<Widget> _dismissedBottomSheets;
PersistentBottomSheetController<Null> _currentBottomSheet; ScaffoldFeatureController _currentBottomSheet;
PersistentBottomSheetController<dynamic/*=T*/> showBottomSheet/*<T>*/(WidgetBuilder builder) { ScaffoldFeatureController showBottomSheet(WidgetBuilder builder) {
if (_currentBottomSheet != null) { if (_currentBottomSheet != null) {
_currentBottomSheet.close(); _currentBottomSheet.close();
assert(_currentBottomSheet == null); assert(_currentBottomSheet == null);
} }
Completer<dynamic/*=T*/> completer = new Completer<dynamic/*=T*/>(); Completer completer = new Completer();
GlobalKey<_PersistentBottomSheetState> bottomSheetKey = new GlobalKey<_PersistentBottomSheetState>(); GlobalKey<_PersistentBottomSheetState> bottomSheetKey = new GlobalKey<_PersistentBottomSheetState>();
AnimationController controller = BottomSheet.createAnimationController() AnimationController controller = BottomSheet.createAnimationController()
..forward(); ..forward();
...@@ -334,7 +334,7 @@ class ScaffoldState extends State<Scaffold> { ...@@ -334,7 +334,7 @@ class ScaffoldState extends State<Scaffold> {
); );
ModalRoute.of(context).addLocalHistoryEntry(entry); ModalRoute.of(context).addLocalHistoryEntry(entry);
setState(() { setState(() {
_currentBottomSheet = new PersistentBottomSheetController<dynamic/*=T*/>._( _currentBottomSheet = new ScaffoldFeatureController._(
bottomSheet, bottomSheet,
completer, completer,
() => entry.remove(), () => entry.remove(),
...@@ -447,7 +447,7 @@ class ScaffoldState extends State<Scaffold> { ...@@ -447,7 +447,7 @@ class ScaffoldState extends State<Scaffold> {
} else if (_scrollOffset > appBarHeight) { } else if (_scrollOffset > appBarHeight) {
// scrolled down, show the "floating" toolbar // scrolled down, show the "floating" toolbar
_floatingAppBarHeight = (_floatingAppBarHeight + _scrollOffsetDelta).clamp(0.0, toolBarHeight); _floatingAppBarHeight = (_floatingAppBarHeight + _scrollOffsetDelta).clamp(0.0, toolBarHeight);
final double toolBarOpacity = _toolBarOpacity(_floatingAppBarHeight / toolBarHeight); final toolBarOpacity = _toolBarOpacity(_floatingAppBarHeight / toolBarHeight);
_appBarController.value = (appBarHeight - _floatingAppBarHeight) / appBarHeight; _appBarController.value = (appBarHeight - _floatingAppBarHeight) / appBarHeight;
appBar = new SizedBox( appBar = new SizedBox(
height: _floatingAppBarHeight, height: _floatingAppBarHeight,
...@@ -471,7 +471,7 @@ class ScaffoldState extends State<Scaffold> { ...@@ -471,7 +471,7 @@ class ScaffoldState extends State<Scaffold> {
EdgeDims padding = MediaQuery.of(context)?.padding ?? EdgeDims.zero; EdgeDims padding = MediaQuery.of(context)?.padding ?? EdgeDims.zero;
if (_snackBars.length > 0) { if (_snackBars.length > 0) {
ModalRoute<dynamic> route = ModalRoute.of(context); ModalRoute route = ModalRoute.of(context);
if (route == null || route.isCurrent) { if (route == null || route.isCurrent) {
if (_snackBarController.isCompleted && _snackBarTimer == null) if (_snackBarController.isCompleted && _snackBarTimer == null)
_snackBarTimer = new Timer(_snackBars.first._widget.duration, _hideSnackBar); _snackBarTimer = new Timer(_snackBars.first._widget.duration, _hideSnackBar);
...@@ -563,11 +563,11 @@ class ScaffoldState extends State<Scaffold> { ...@@ -563,11 +563,11 @@ class ScaffoldState extends State<Scaffold> {
} }
} }
class ScaffoldFeatureController<T extends Widget, U> { class ScaffoldFeatureController<T extends Widget> {
const ScaffoldFeatureController._(this._widget, this._completer, this.close, this.setState); const ScaffoldFeatureController._(this._widget, this._completer, this.close, this.setState);
final T _widget; final T _widget;
final Completer<U> _completer; final Completer _completer;
Future<U> get closed => _completer.future; Future get closed => _completer.future;
final VoidCallback close; // call this to close the bottom sheet or snack bar final VoidCallback close; // call this to close the bottom sheet or snack bar
final StateSetter setState; final StateSetter setState;
} }
...@@ -641,15 +641,3 @@ class _PersistentBottomSheetState extends State<_PersistentBottomSheet> { ...@@ -641,15 +641,3 @@ class _PersistentBottomSheetState extends State<_PersistentBottomSheet> {
} }
} }
/// A [ScaffoldFeatureController] for persistent bottom sheets.
///
/// This is the type of objects returned by [Scaffold.showBottomSheet].
class PersistentBottomSheetController<T> extends ScaffoldFeatureController<_PersistentBottomSheet, T> {
const PersistentBottomSheetController._(
_PersistentBottomSheet widget,
Completer<T> completer,
VoidCallback close,
StateSetter setState
) : super._(widget, completer, close, setState);
}
...@@ -60,7 +60,7 @@ class ScrollbarPainter extends ScrollableListPainter { ...@@ -60,7 +60,7 @@ class ScrollbarPainter extends ScrollableListPainter {
AnimationController _fade; AnimationController _fade;
Future<Null> scrollStarted() { Future scrollStarted() {
if (_fade == null) { if (_fade == null) {
_fade = new AnimationController(duration: _kScrollbarThumbFadeDuration); _fade = new AnimationController(duration: _kScrollbarThumbFadeDuration);
CurvedAnimation curve = new CurvedAnimation(parent: _fade, curve: Curves.ease); CurvedAnimation curve = new CurvedAnimation(parent: _fade, curve: Curves.ease);
...@@ -72,7 +72,7 @@ class ScrollbarPainter extends ScrollableListPainter { ...@@ -72,7 +72,7 @@ class ScrollbarPainter extends ScrollableListPainter {
return _fade.forward(); return _fade.forward();
} }
Future<Null> scrollEnded() { Future scrollEnded() {
return _fade.reverse(); return _fade.reverse();
} }
......
...@@ -24,7 +24,7 @@ class Switch extends StatelessComponent { ...@@ -24,7 +24,7 @@ class Switch extends StatelessComponent {
Widget build(BuildContext context) { Widget build(BuildContext context) {
assert(debugCheckHasMaterial(context)); assert(debugCheckHasMaterial(context));
ThemeData themeData = Theme.of(context); ThemeData themeData = Theme.of(context);
final bool isDark = themeData.brightness == ThemeBrightness.dark; final isDark = themeData.brightness == ThemeBrightness.dark;
Color activeThumbColor = activeColor ?? themeData.accentColor; Color activeThumbColor = activeColor ?? themeData.accentColor;
Color activeTrackColor = activeThumbColor.withAlpha(0x80); Color activeTrackColor = activeThumbColor.withAlpha(0x80);
......
...@@ -416,8 +416,8 @@ class TabBarSelection<T> extends StatefulComponent { ...@@ -416,8 +416,8 @@ class TabBarSelection<T> extends StatefulComponent {
TabBarSelectionState<T> createState() => new TabBarSelectionState<T>(); TabBarSelectionState<T> createState() => new TabBarSelectionState<T>();
static TabBarSelectionState<dynamic/*=T*/> of/*<T>*/(BuildContext context) { static TabBarSelectionState of(BuildContext context) {
return context.ancestorStateOfType(const TypeMatcher<TabBarSelectionState<dynamic/*=T*/>>()); return context.ancestorStateOfType(const TypeMatcher<TabBarSelectionState>());
} }
} }
...@@ -449,7 +449,7 @@ class TabBarSelectionState<T> extends State<TabBarSelection<T>> { ...@@ -449,7 +449,7 @@ class TabBarSelectionState<T> extends State<TabBarSelection<T>> {
_initValueToIndex(); _initValueToIndex();
} }
void didUpdateConfig(TabBarSelection<T> oldConfig) { void didUpdateConfig(TabBarSelection oldConfig) {
super.didUpdateConfig(oldConfig); super.didUpdateConfig(oldConfig);
if (values != oldConfig.values) if (values != oldConfig.values)
_initValueToIndex(); _initValueToIndex();
...@@ -564,12 +564,12 @@ class TabBar<T> extends Scrollable { ...@@ -564,12 +564,12 @@ class TabBar<T> extends Scrollable {
final Map<T, TabLabel> labels; final Map<T, TabLabel> labels;
final bool isScrollable; final bool isScrollable;
_TabBarState<T> createState() => new _TabBarState<T>(); _TabBarState createState() => new _TabBarState();
} }
class _TabBarState<T> extends ScrollableState<TabBar<T>> implements TabBarSelectionAnimationListener { class _TabBarState<T> extends ScrollableState<TabBar<T>> implements TabBarSelectionAnimationListener {
TabBarSelectionState<T> _selection; TabBarSelectionState _selection;
bool _valueIsChanging = false; bool _valueIsChanging = false;
void _initSelection(TabBarSelectionState<T> selection) { void _initSelection(TabBarSelectionState<T> selection) {
...@@ -584,7 +584,7 @@ class _TabBarState<T> extends ScrollableState<TabBar<T>> implements TabBarSelect ...@@ -584,7 +584,7 @@ class _TabBarState<T> extends ScrollableState<TabBar<T>> implements TabBarSelect
_initSelection(TabBarSelection.of(context)); _initSelection(TabBarSelection.of(context));
} }
void didUpdateConfig(TabBar<T> oldConfig) { void didUpdateConfig(TabBar oldConfig) {
super.didUpdateConfig(oldConfig); super.didUpdateConfig(oldConfig);
if (!config.isScrollable) if (!config.isScrollable)
scrollTo(0.0); scrollTo(0.0);
...@@ -666,7 +666,7 @@ class _TabBarState<T> extends ScrollableState<TabBar<T>> implements TabBarSelect ...@@ -666,7 +666,7 @@ class _TabBarState<T> extends ScrollableState<TabBar<T>> implements TabBarSelect
return new Rect.fromLTRB(r.left, r.bottom, r.right, r.bottom + _kTabIndicatorHeight); return new Rect.fromLTRB(r.left, r.bottom, r.right, r.bottom + _kTabIndicatorHeight);
} }
ScrollBehavior<double, double> createScrollBehavior() => new _TabsScrollBehavior(); ScrollBehavior createScrollBehavior() => new _TabsScrollBehavior();
_TabsScrollBehavior get scrollBehavior => super.scrollBehavior; _TabsScrollBehavior get scrollBehavior => super.scrollBehavior;
double _centeredTabScrollOffset(int tabIndex) { double _centeredTabScrollOffset(int tabIndex) {
...@@ -795,7 +795,7 @@ class _TabBarState<T> extends ScrollableState<TabBar<T>> implements TabBarSelect ...@@ -795,7 +795,7 @@ class _TabBarState<T> extends ScrollableState<TabBar<T>> implements TabBarSelect
} }
} }
class TabBarView<T> extends PageableList { class TabBarView extends PageableList {
TabBarView({ TabBarView({
Key key, Key key,
List<Widget> children List<Widget> children
...@@ -808,12 +808,12 @@ class TabBarView<T> extends PageableList { ...@@ -808,12 +808,12 @@ class TabBarView<T> extends PageableList {
assert(children.length > 1); assert(children.length > 1);
} }
_TabBarViewState<T> createState() => new _TabBarViewState<T>(); _TabBarViewState createState() => new _TabBarViewState();
} }
class _TabBarViewState<T> extends PageableListState<TabBarView<T>> implements TabBarSelectionAnimationListener { class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSelectionAnimationListener {
TabBarSelectionState<T> _selection; TabBarSelectionState _selection;
List<Widget> _items; List<Widget> _items;
int get _tabCount => config.children.length; int get _tabCount => config.children.length;
...@@ -825,7 +825,7 @@ class _TabBarViewState<T> extends PageableListState<TabBarView<T>> implements Ta ...@@ -825,7 +825,7 @@ class _TabBarViewState<T> extends PageableListState<TabBarView<T>> implements Ta
return _boundedBehavior; return _boundedBehavior;
} }
void _initSelection(TabBarSelectionState<T> selection) { void _initSelection(TabBarSelectionState selection) {
_selection = selection; _selection = selection;
if (_selection != null) { if (_selection != null) {
_selection.registerAnimationListener(this); _selection.registerAnimationListener(this);
...@@ -838,7 +838,7 @@ class _TabBarViewState<T> extends PageableListState<TabBarView<T>> implements Ta ...@@ -838,7 +838,7 @@ class _TabBarViewState<T> extends PageableListState<TabBarView<T>> implements Ta
_initSelection(TabBarSelection.of(context)); _initSelection(TabBarSelection.of(context));
} }
void didUpdateConfig(TabBarView<T> oldConfig) { void didUpdateConfig(TabBarView oldConfig) {
super.didUpdateConfig(oldConfig); super.didUpdateConfig(oldConfig);
if (_selection != null && config.children != oldConfig.children) if (_selection != null && config.children != oldConfig.children)
_updateItemsForSelectedIndex(_selection.index); _updateItemsForSelectedIndex(_selection.index);
...@@ -931,15 +931,15 @@ class _TabBarViewState<T> extends PageableListState<TabBarView<T>> implements Ta ...@@ -931,15 +931,15 @@ class _TabBarViewState<T> extends PageableListState<TabBarView<T>> implements Ta
controller.value = scrollOffset / 2.0; controller.value = scrollOffset / 2.0;
} }
Future<Null> fling(double scrollVelocity) { Future fling(double scrollVelocity) {
if (_selection == null || _selection.valueIsChanging) if (_selection == null || _selection.valueIsChanging)
return new Future<Null>.value(); return new Future.value();
if (scrollVelocity.abs() > _kMinFlingVelocity) { if (scrollVelocity.abs() > _kMinFlingVelocity) {
final int selectionDelta = scrollVelocity.sign.truncate(); final int selectionDelta = scrollVelocity.sign.truncate();
final int targetIndex = (_selection.index + selectionDelta).clamp(0, _tabCount - 1); final int targetIndex = (_selection.index + selectionDelta).clamp(0, _tabCount - 1);
_selection.value = _selection.values[targetIndex]; _selection.value = _selection.values[targetIndex];
return new Future<Null>.value(); return new Future.value();
} }
final int selectionIndex = _selection.index; final int selectionIndex = _selection.index;
...@@ -947,16 +947,16 @@ class _TabBarViewState<T> extends PageableListState<TabBarView<T>> implements Ta ...@@ -947,16 +947,16 @@ class _TabBarViewState<T> extends PageableListState<TabBarView<T>> implements Ta
if (selectionIndex > 0 && settleIndex != 1) { if (selectionIndex > 0 && settleIndex != 1) {
final int targetIndex = (selectionIndex + (settleIndex == 2 ? 1 : -1)).clamp(0, _tabCount - 1); final int targetIndex = (selectionIndex + (settleIndex == 2 ? 1 : -1)).clamp(0, _tabCount - 1);
_selection.value = _selection.values[targetIndex]; _selection.value = _selection.values[targetIndex];
return new Future<Null>.value(); return new Future.value();
} else if (selectionIndex == 0 && settleIndex == 1) { } else if (selectionIndex == 0 && settleIndex == 1) {
_selection.value = _selection.values[1]; _selection.value = _selection.values[1];
return new Future<Null>.value(); return new Future.value();
} }
return settleScrollOffset(); return settleScrollOffset();
} }
Widget buildContent(BuildContext context) { Widget buildContent(BuildContext context) {
TabBarSelectionState<T> newSelection = TabBarSelection.of(context); TabBarSelectionState newSelection = TabBarSelection.of(context);
if (_selection != newSelection) if (_selection != newSelection)
_initSelection(newSelection); _initSelection(newSelection);
return new PageViewport( return new PageViewport(
...@@ -972,7 +972,7 @@ class _TabBarViewState<T> extends PageableListState<TabBarView<T>> implements Ta ...@@ -972,7 +972,7 @@ class _TabBarViewState<T> extends PageableListState<TabBarView<T>> implements Ta
class TabPageSelector<T> extends StatelessComponent { class TabPageSelector<T> extends StatelessComponent {
const TabPageSelector({ Key key }) : super(key: key); const TabPageSelector({ Key key }) : super(key: key);
Widget _buildTabIndicator(TabBarSelectionState<T> selection, T tab, Animation<double> animation, ColorTween selectedColor, ColorTween previousColor) { Widget _buildTabIndicator(TabBarSelectionState<T> selection, T tab, Animation animation, ColorTween selectedColor, ColorTween previousColor) {
Color background; Color background;
if (selection.valueIsChanging) { if (selection.valueIsChanging) {
// The selection's animation is animating from previousValue to value. // The selection's animation is animating from previousValue to value.
...@@ -998,7 +998,7 @@ class TabPageSelector<T> extends StatelessComponent { ...@@ -998,7 +998,7 @@ class TabPageSelector<T> extends StatelessComponent {
} }
Widget build(BuildContext context) { Widget build(BuildContext context) {
final TabBarSelectionState<T> selection = TabBarSelection.of(context); final TabBarSelectionState selection = TabBarSelection.of(context);
final Color color = Theme.of(context).accentColor; final Color color = Theme.of(context).accentColor;
final ColorTween selectedColor = new ColorTween(begin: Colors.transparent, end: color); final ColorTween selectedColor = new ColorTween(begin: Colors.transparent, end: color);
final ColorTween previousColor = new ColorTween(begin: color, end: Colors.transparent); final ColorTween previousColor = new ColorTween(begin: color, end: Colors.transparent);
......
...@@ -8,7 +8,7 @@ import 'theme_data.dart'; ...@@ -8,7 +8,7 @@ import 'theme_data.dart';
export 'theme_data.dart' show ThemeData, ThemeBrightness; export 'theme_data.dart' show ThemeData, ThemeBrightness;
const Duration kThemeAnimationDuration = const Duration(milliseconds: 200); const kThemeAnimationDuration = const Duration(milliseconds: 200);
/// Applies a theme to descendant widgets. /// Applies a theme to descendant widgets.
class Theme extends InheritedWidget { class Theme extends InheritedWidget {
...@@ -73,7 +73,7 @@ class AnimatedTheme extends AnimatedWidgetBase { ...@@ -73,7 +73,7 @@ class AnimatedTheme extends AnimatedWidgetBase {
class _AnimatedThemeState extends AnimatedWidgetBaseState<AnimatedTheme> { class _AnimatedThemeState extends AnimatedWidgetBaseState<AnimatedTheme> {
ThemeDataTween _data; ThemeDataTween _data;
void forEachTween(TweenVisitor<dynamic> visitor) { void forEachTween(TweenVisitor visitor) {
// TODO(ianh): Use constructor tear-offs when it becomes possible // TODO(ianh): Use constructor tear-offs when it becomes possible
_data = visitor(_data, config.data, (dynamic value) => new ThemeDataTween(begin: value)); _data = visitor(_data, config.data, (dynamic value) => new ThemeDataTween(begin: value));
assert(_data != null); assert(_data != null);
......
...@@ -27,7 +27,7 @@ class BorderSide { ...@@ -27,7 +27,7 @@ class BorderSide {
final double width; final double width;
/// A black border side of zero width. /// A black border side of zero width.
static const BorderSide none = const BorderSide(width: 0.0); static const none = const BorderSide(width: 0.0);
BorderSide copyWith({ BorderSide copyWith({
Color color, Color color,
......
...@@ -197,7 +197,7 @@ class TextPainter { ...@@ -197,7 +197,7 @@ class TextPainter {
/// The minimum width at which to layout the text. /// The minimum width at which to layout the text.
double get minWidth => _paragraph.minWidth; double get minWidth => _paragraph.minWidth;
void set minWidth(double value) { void set minWidth(value) {
if (_paragraph.minWidth == value) if (_paragraph.minWidth == value)
return; return;
_paragraph.minWidth = value; _paragraph.minWidth = value;
...@@ -206,7 +206,7 @@ class TextPainter { ...@@ -206,7 +206,7 @@ class TextPainter {
/// The maximum width at which to layout the text. /// The maximum width at which to layout the text.
double get maxWidth => _paragraph.maxWidth; double get maxWidth => _paragraph.maxWidth;
void set maxWidth(double value) { void set maxWidth(value) {
if (_paragraph.maxWidth == value) if (_paragraph.maxWidth == value)
return; return;
_paragraph.maxWidth = value; _paragraph.maxWidth = value;
...@@ -215,7 +215,7 @@ class TextPainter { ...@@ -215,7 +215,7 @@ class TextPainter {
/// The minimum height at which to layout the text. /// The minimum height at which to layout the text.
double get minHeight => _paragraph.minHeight; double get minHeight => _paragraph.minHeight;
void set minHeight(double value) { void set minHeight(value) {
if (_paragraph.minHeight == value) if (_paragraph.minHeight == value)
return; return;
_paragraph.minHeight = value; _paragraph.minHeight = value;
...@@ -224,7 +224,7 @@ class TextPainter { ...@@ -224,7 +224,7 @@ class TextPainter {
/// The maximum height at which to layout the text. /// The maximum height at which to layout the text.
double get maxHeight => _paragraph.maxHeight; double get maxHeight => _paragraph.maxHeight;
void set maxHeight(double value) { void set maxHeight(value) {
if (_paragraph.maxHeight == value) if (_paragraph.maxHeight == value)
return; return;
_paragraph.maxHeight = value; _paragraph.maxHeight = value;
......
...@@ -7,9 +7,9 @@ typedef void ValueChanged<T>(T value); ...@@ -7,9 +7,9 @@ typedef void ValueChanged<T>(T value);
/// A BitField over an enum (or other class whose values implement "index"). /// A BitField over an enum (or other class whose values implement "index").
/// Only the first 63 values of the enum can be used as indices. /// Only the first 63 values of the enum can be used as indices.
class BitField<T extends dynamic> { class BitField<T extends dynamic> {
static const int _kSMIBits = 63; // see https://www.dartlang.org/articles/numeric-computation/#smis-and-mints static const _kSMIBits = 63; // see https://www.dartlang.org/articles/numeric-computation/#smis-and-mints
static const int _kAllZeros = 0; static const _kAllZeros = 0;
static const int _kAllOnes = 0x7FFFFFFFFFFFFFFF; // 2^(_kSMIBits+1)-1 static const _kAllOnes = 0x7FFFFFFFFFFFFFFF; // 2^(_kSMIBits+1)-1
BitField(this._length) : _bits = _kAllZeros { BitField(this._length) : _bits = _kAllZeros {
assert(_length <= _kSMIBits); assert(_length <= _kSMIBits);
} }
......
...@@ -11,9 +11,9 @@ import 'box.dart'; ...@@ -11,9 +11,9 @@ import 'box.dart';
import 'object.dart'; import 'object.dart';
import 'viewport.dart'; import 'viewport.dart';
const double _kCaretGap = 1.0; // pixels const _kCaretGap = 1.0; // pixels
const double _kCaretHeightOffset = 2.0; // pixels const _kCaretHeightOffset = 2.0; // pixels
const double _kCaretWidth = 1.0; // pixels const _kCaretWidth = 1.0; // pixels
final String _kZeroWidthSpace = new String.fromCharCode(0x200B); final String _kZeroWidthSpace = new String.fromCharCode(0x200B);
......
...@@ -561,7 +561,7 @@ class RenderFlex extends RenderBox with ContainerRenderObjectMixin<RenderBox, Fl ...@@ -561,7 +561,7 @@ class RenderFlex extends RenderBox with ContainerRenderObjectMixin<RenderBox, Fl
Paint markerPaint = new Paint()..color = const Color(0xE0FF0000); Paint markerPaint = new Paint()..color = const Color(0xE0FF0000);
Paint highlightPaint = new Paint()..color = const Color(0x7FFF0000); Paint highlightPaint = new Paint()..color = const Color(0x7FFF0000);
const double kMarkerSize = 0.1; const kMarkerSize = 0.1;
Rect markerRect, overflowRect; Rect markerRect, overflowRect;
switch(direction) { switch(direction) {
case FlexDirection.horizontal: case FlexDirection.horizontal:
......
...@@ -756,7 +756,7 @@ abstract class CustomClipper<T> { ...@@ -756,7 +756,7 @@ abstract class CustomClipper<T> {
Rect getApproximateClipRect(Size size) => Point.origin & size; Rect getApproximateClipRect(Size size) => Point.origin & size;
/// Returns true if the new instance will result in a different clip /// Returns true if the new instance will result in a different clip
/// than the oldClipper instance. /// than the oldClipper instance.
bool shouldRepaint(CustomClipper<T> oldClipper); bool shouldRepaint(CustomClipper oldClipper);
} }
abstract class _RenderCustomClip<T> extends RenderProxyBox { abstract class _RenderCustomClip<T> extends RenderProxyBox {
...@@ -1100,13 +1100,13 @@ class RenderTransform extends RenderProxyBox { ...@@ -1100,13 +1100,13 @@ class RenderTransform extends RenderProxyBox {
} }
/// Concatenates a translation by (x, y, z) into the transform. /// Concatenates a translation by (x, y, z) into the transform.
void translate(double x, [double y = 0.0, double z = 0.0]) { void translate(x, [double y = 0.0, double z = 0.0]) {
_transform.translate(x, y, z); _transform.translate(x, y, z);
markNeedsPaint(); markNeedsPaint();
} }
/// Concatenates a scale into the transform. /// Concatenates a scale into the transform.
void scale(double x, [double y, double z]) { void scale(x, [double y, double z]) {
_transform.scale(x, y, z); _transform.scale(x, y, z);
markNeedsPaint(); markNeedsPaint();
} }
......
...@@ -176,7 +176,7 @@ class RenderPadding extends RenderShiftedBox { ...@@ -176,7 +176,7 @@ class RenderPadding extends RenderShiftedBox {
context.canvas.drawPath(path, paint); context.canvas.drawPath(path, paint);
paint = new Paint() paint = new Paint()
..color = debugPaintPaddingInnerEdgeColor; ..color = debugPaintPaddingInnerEdgeColor;
const double kOutline = 2.0; const kOutline = 2.0;
path = new Path() path = new Path()
..moveTo(offset.dx + math.max(padding.left - kOutline, 0.0), offset.dy + math.max(padding.top - kOutline, 0.0)) ..moveTo(offset.dx + math.max(padding.left - kOutline, 0.0), offset.dy + math.max(padding.top - kOutline, 0.0))
..lineTo(offset.dx + math.min(size.width - padding.right + kOutline, size.width), offset.dy + math.max(padding.top - kOutline, 0.0)) ..lineTo(offset.dx + math.min(size.width - padding.right + kOutline, size.width), offset.dy + math.max(padding.top - kOutline, 0.0))
......
...@@ -198,7 +198,7 @@ abstract class RenderStackBase extends RenderBox ...@@ -198,7 +198,7 @@ abstract class RenderStackBase extends RenderBox
RenderBoxContainerDefaultsMixin<RenderBox, StackParentData> { RenderBoxContainerDefaultsMixin<RenderBox, StackParentData> {
RenderStackBase({ RenderStackBase({
List<RenderBox> children, List<RenderBox> children,
FractionalOffset alignment: const FractionalOffset(0.0, 0.0) alignment: const FractionalOffset(0.0, 0.0)
}) : _alignment = alignment { }) : _alignment = alignment {
addAll(children); addAll(children);
} }
...@@ -425,7 +425,7 @@ abstract class RenderStackBase extends RenderBox ...@@ -425,7 +425,7 @@ abstract class RenderStackBase extends RenderBox
class RenderStack extends RenderStackBase { class RenderStack extends RenderStackBase {
RenderStack({ RenderStack({
List<RenderBox> children, List<RenderBox> children,
FractionalOffset alignment: const FractionalOffset(0.0, 0.0) alignment: const FractionalOffset(0.0, 0.0)
}) : super( }) : super(
children: children, children: children,
alignment: alignment alignment: alignment
...@@ -444,7 +444,7 @@ class RenderStack extends RenderStackBase { ...@@ -444,7 +444,7 @@ class RenderStack extends RenderStackBase {
class RenderIndexedStack extends RenderStackBase { class RenderIndexedStack extends RenderStackBase {
RenderIndexedStack({ RenderIndexedStack({
List<RenderBox> children, List<RenderBox> children,
FractionalOffset alignment: const FractionalOffset(0.0, 0.0), alignment: const FractionalOffset(0.0, 0.0),
int index: 0 int index: 0
}) : _index = index, super( }) : _index = index, super(
children: children, children: children,
......
...@@ -106,7 +106,7 @@ abstract class Scheduler extends BindingBase { ...@@ -106,7 +106,7 @@ abstract class Scheduler extends BindingBase {
// Note that we inverse the priority. // Note that we inverse the priority.
return -e1.priority.compareTo(e2.priority); return -e1.priority.compareTo(e2.priority);
} }
final PriorityQueue<_TaskEntry> _taskQueue = new HeapPriorityQueue<_TaskEntry>(_taskSorter); final PriorityQueue _taskQueue = new HeapPriorityQueue<_TaskEntry>(_taskSorter);
/// Whether this scheduler already requested to be called from the event loop. /// Whether this scheduler already requested to be called from the event loop.
bool _hasRequestedAnEventLoopCallback = false; bool _hasRequestedAnEventLoopCallback = false;
......
...@@ -16,17 +16,17 @@ class Ticker { ...@@ -16,17 +16,17 @@ class Ticker {
final TickerCallback _onTick; final TickerCallback _onTick;
Completer<Null> _completer; Completer _completer;
int _animationId; int _animationId;
Duration _startTime; Duration _startTime;
/// Starts calling onTick once per animation frame. /// Starts calling onTick once per animation frame.
/// ///
/// The returned future resolves once the ticker stops ticking. /// The returned future resolves once the ticker stops ticking.
Future<Null> start() { Future start() {
assert(!isTicking); assert(!isTicking);
assert(_startTime == null); assert(_startTime == null);
_completer = new Completer<Null>(); _completer = new Completer();
_scheduleTick(); _scheduleTick();
return _completer.future; return _completer.future;
} }
...@@ -48,7 +48,7 @@ class Ticker { ...@@ -48,7 +48,7 @@ class Ticker {
// We take the _completer into a local variable so that isTicking is false // We take the _completer into a local variable so that isTicking is false
// when we actually complete the future (isTicking uses _completer // when we actually complete the future (isTicking uses _completer
// to determine its state). // to determine its state).
Completer<Null> localCompleter = _completer; Completer localCompleter = _completer;
_completer = null; _completer = null;
assert(!isTicking); assert(!isTicking);
localCompleter.complete(); localCompleter.complete();
......
...@@ -80,7 +80,7 @@ class MojoAssetBundle extends CachingAssetBundle { ...@@ -80,7 +80,7 @@ class MojoAssetBundle extends CachingAssetBundle {
return new MojoAssetBundle(bundle); return new MojoAssetBundle(bundle);
} }
static Future<Null> _fetchAndUnpackBundle(String relativeUrl, AssetBundleProxy bundle) async { static Future _fetchAndUnpackBundle(String relativeUrl, AssetBundleProxy bundle) async {
core.MojoDataPipeConsumer bundleData = (await fetchUrl(relativeUrl)).body; core.MojoDataPipeConsumer bundleData = (await fetchUrl(relativeUrl)).body;
AssetUnpackerProxy unpacker = new AssetUnpackerProxy.unbound(); AssetUnpackerProxy unpacker = new AssetUnpackerProxy.unbound();
shell.connectToService("mojo:asset_bundle", unpacker); shell.connectToService("mojo:asset_bundle", unpacker);
......
...@@ -36,11 +36,8 @@ class _UrlFetcher implements ImageProvider { ...@@ -36,11 +36,8 @@ class _UrlFetcher implements ImageProvider {
); );
} }
bool operator ==(dynamic other) { bool operator ==(other) {
if (other is! _UrlFetcher) return other is _UrlFetcher && _url == other._url && _scale == other._scale;
return false;
final _UrlFetcher typedOther = other;
return _url == typedOther._url && _scale == typedOther._scale;
} }
int get hashCode => hashValues(_url, _scale); int get hashCode => hashValues(_url, _scale);
......
...@@ -24,12 +24,7 @@ typedef void ImageListener(ImageInfo image); ...@@ -24,12 +24,7 @@ typedef void ImageListener(ImageInfo image);
/// or because the underlying image resource was mutated. /// or because the underlying image resource was mutated.
class ImageResource { class ImageResource {
ImageResource(this._futureImage) { ImageResource(this._futureImage) {
_futureImage.then( _futureImage.then(_handleImageLoaded, onError: (exception, stack) => _handleImageError('Failed to load image:', exception, stack));
_handleImageLoaded,
onError: (dynamic exception, dynamic stack) {
_handleImageError('Failed to load image:', exception, stack);
}
);
} }
bool _resolved = false; bool _resolved = false;
......
...@@ -86,9 +86,9 @@ abstract class _VariantAssetResolver extends _AssetResolver { ...@@ -86,9 +86,9 @@ abstract class _VariantAssetResolver extends _AssetResolver {
// one. // one.
Map<String, List<String>> _assetManifest; Map<String, List<String>> _assetManifest;
Future<Null> _initializer; Future _initializer;
Future<Null> _loadManifest() async { Future _loadManifest() async {
String json = await bundle.loadString("AssetManifest.json"); String json = await bundle.loadString("AssetManifest.json");
_assetManifest = JSON.decode(json); _assetManifest = JSON.decode(json);
} }
......
...@@ -419,7 +419,7 @@ class Align extends OneChildRenderObjectWidget { ...@@ -419,7 +419,7 @@ class Align extends OneChildRenderObjectWidget {
/// Centers its child within itself. /// Centers its child within itself.
class Center extends Align { class Center extends Align {
Center({ Key key, double widthFactor, double heightFactor, Widget child }) Center({ Key key, widthFactor, heightFactor, Widget child })
: super(key: key, widthFactor: widthFactor, heightFactor: heightFactor, child: child); : super(key: key, widthFactor: widthFactor, heightFactor: heightFactor, child: child);
} }
...@@ -453,7 +453,7 @@ class LayoutId extends ParentDataWidget<CustomMultiChildLayout> { ...@@ -453,7 +453,7 @@ class LayoutId extends ParentDataWidget<CustomMultiChildLayout> {
Key key, Key key,
Widget child, Widget child,
Object id Object id
}) : id = id, super(key: key ?? new ValueKey<Object>(id), child: child) { }) : id = id, super(key: key ?? new ValueKey(id), child: child) {
assert(child != null); assert(child != null);
assert(id != null); assert(id != null);
} }
...@@ -1388,9 +1388,9 @@ class Row extends Flex { ...@@ -1388,9 +1388,9 @@ class Row extends Flex {
Row({ Row({
Key key, Key key,
List<Widget> children: _emptyWidgetList, List<Widget> children: _emptyWidgetList,
FlexJustifyContent justifyContent: FlexJustifyContent.start, justifyContent: FlexJustifyContent.start,
FlexAlignItems alignItems: FlexAlignItems.center, alignItems: FlexAlignItems.center,
TextBaseline textBaseline textBaseline
}) : super( }) : super(
children: children, children: children,
key: key, key: key,
...@@ -1409,9 +1409,9 @@ class Column extends Flex { ...@@ -1409,9 +1409,9 @@ class Column extends Flex {
Column({ Column({
Key key, Key key,
List<Widget> children: _emptyWidgetList, List<Widget> children: _emptyWidgetList,
FlexJustifyContent justifyContent: FlexJustifyContent.start, justifyContent: FlexJustifyContent.start,
FlexAlignItems alignItems: FlexAlignItems.center, alignItems: FlexAlignItems.center,
TextBaseline textBaseline textBaseline
}) : super( }) : super(
children: children, children: children,
key: key, key: key,
......
...@@ -222,11 +222,9 @@ class RenderObjectToWidgetAdapter<T extends RenderObject> extends RenderObjectWi ...@@ -222,11 +222,9 @@ class RenderObjectToWidgetAdapter<T extends RenderObject> extends RenderObjectWi
class RenderObjectToWidgetElement<T extends RenderObject> extends RenderObjectElement { class RenderObjectToWidgetElement<T extends RenderObject> extends RenderObjectElement {
RenderObjectToWidgetElement(RenderObjectToWidgetAdapter<T> widget) : super(widget); RenderObjectToWidgetElement(RenderObjectToWidgetAdapter<T> widget) : super(widget);
RenderObjectToWidgetAdapter<T> get widget => super.widget;
Element _child; Element _child;
static const Object _rootChildSlot = const Object(); static const _rootChildSlot = const Object();
void visitChildren(ElementVisitor visitor) { void visitChildren(ElementVisitor visitor) {
if (_child != null) if (_child != null)
......
...@@ -10,12 +10,12 @@ import 'framework.dart'; ...@@ -10,12 +10,12 @@ import 'framework.dart';
class _CheckedModeBannerPainter extends CustomPainter { class _CheckedModeBannerPainter extends CustomPainter {
const _CheckedModeBannerPainter(); const _CheckedModeBannerPainter();
static const Color kColor = const Color(0xA0B71C1C); static const kColor = const Color(0xA0B71C1C);
static const double kOffset = 40.0; // distance to bottom of banner, at a 45 degree angle inwards from the top right corner static const kOffset = 40.0; // distance to bottom of banner, at a 45 degree angle inwards from the top right corner
static const double kHeight = 12.0; // height of banner static const kHeight = 12.0; // height of banner
static const Offset kTextAlign = const Offset(0.0, -3.0); // offset to move text up static const kTextAlign = const Offset(0.0, -3.0); // offset to move text up
static const double kFontSize = kHeight * 0.85; static const kFontSize = kHeight * 0.85;
static const double kShadowBlur = 4.0; // shadow blur sigma static const kShadowBlur = 4.0; // shadow blur sigma
static final Rect kRect = new Rect.fromLTWH(-kOffset, kOffset-kHeight, kOffset * 2.0, kHeight); static final Rect kRect = new Rect.fromLTWH(-kOffset, kOffset-kHeight, kOffset * 2.0, kHeight);
static const TextStyle kTextStyles = const TextStyle( static const TextStyle kTextStyles = const TextStyle(
color: const Color(0xFFFFFFFF), color: const Color(0xFFFFFFFF),
......
...@@ -80,7 +80,7 @@ abstract class DraggableBase<T> extends StatefulComponent { ...@@ -80,7 +80,7 @@ abstract class DraggableBase<T> extends StatefulComponent {
/// Should return a new MultiDragGestureRecognizer instance /// Should return a new MultiDragGestureRecognizer instance
/// constructed with the given arguments. /// constructed with the given arguments.
MultiDragGestureRecognizer<dynamic> createRecognizer(GestureMultiDragStartCallback onStart); MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart);
_DraggableState<T> createState() => new _DraggableState<T>(); _DraggableState<T> createState() => new _DraggableState<T>();
} }
...@@ -107,7 +107,7 @@ class Draggable<T> extends DraggableBase<T> { ...@@ -107,7 +107,7 @@ class Draggable<T> extends DraggableBase<T> {
maxSimultaneousDrags: maxSimultaneousDrags maxSimultaneousDrags: maxSimultaneousDrags
); );
ImmediateMultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) { MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new ImmediateMultiDragGestureRecognizer()..onStart = onStart; return new ImmediateMultiDragGestureRecognizer()..onStart = onStart;
} }
} }
...@@ -135,7 +135,7 @@ class HorizontalDraggable<T> extends DraggableBase<T> { ...@@ -135,7 +135,7 @@ class HorizontalDraggable<T> extends DraggableBase<T> {
maxSimultaneousDrags: maxSimultaneousDrags maxSimultaneousDrags: maxSimultaneousDrags
); );
HorizontalMultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) { MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new HorizontalMultiDragGestureRecognizer()..onStart = onStart; return new HorizontalMultiDragGestureRecognizer()..onStart = onStart;
} }
} }
...@@ -163,7 +163,7 @@ class VerticalDraggable<T> extends DraggableBase<T> { ...@@ -163,7 +163,7 @@ class VerticalDraggable<T> extends DraggableBase<T> {
maxSimultaneousDrags: maxSimultaneousDrags maxSimultaneousDrags: maxSimultaneousDrags
); );
VerticalMultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) { MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new VerticalMultiDragGestureRecognizer()..onStart = onStart; return new VerticalMultiDragGestureRecognizer()..onStart = onStart;
} }
} }
...@@ -190,7 +190,7 @@ class LongPressDraggable<T> extends DraggableBase<T> { ...@@ -190,7 +190,7 @@ class LongPressDraggable<T> extends DraggableBase<T> {
maxSimultaneousDrags: maxSimultaneousDrags maxSimultaneousDrags: maxSimultaneousDrags
); );
DelayedMultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) { MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new DelayedMultiDragGestureRecognizer() return new DelayedMultiDragGestureRecognizer()
..onStart = (Point position) { ..onStart = (Point position) {
Drag result = onStart(position); Drag result = onStart(position);
...@@ -217,7 +217,7 @@ class _DraggableState<T> extends State<DraggableBase<T>> { ...@@ -217,7 +217,7 @@ class _DraggableState<T> extends State<DraggableBase<T>> {
_recognizer.addPointer(event); _recognizer.addPointer(event);
} }
_DragAvatar<T> _startDrag(Point position) { _DragAvatar _startDrag(Point position) {
if (config.maxSimultaneousDrags != null && _activeCount >= config.maxSimultaneousDrags) if (config.maxSimultaneousDrags != null && _activeCount >= config.maxSimultaneousDrags)
return null; return null;
Point dragStartPoint; Point dragStartPoint;
...@@ -361,7 +361,7 @@ class _DragAvatar<T> extends Drag { ...@@ -361,7 +361,7 @@ class _DragAvatar<T> extends Drag {
final Offset feedbackOffset; final Offset feedbackOffset;
final VoidCallback onDragEnd; final VoidCallback onDragEnd;
_DragTargetState<T> _activeTarget; _DragTargetState _activeTarget;
bool _activeTargetWillAcceptDrop = false; bool _activeTargetWillAcceptDrop = false;
Point _position; Point _position;
Offset _lastOffset; Offset _lastOffset;
...@@ -384,7 +384,7 @@ class _DragAvatar<T> extends Drag { ...@@ -384,7 +384,7 @@ class _DragAvatar<T> extends Drag {
_entry.markNeedsBuild(); _entry.markNeedsBuild();
HitTestResult result = new HitTestResult(); HitTestResult result = new HitTestResult();
WidgetFlutterBinding.instance.hitTest(result, globalPosition + feedbackOffset); WidgetFlutterBinding.instance.hitTest(result, globalPosition + feedbackOffset);
_DragTargetState<T> target = _getDragTarget(result.path); _DragTargetState target = _getDragTarget(result.path);
if (target == _activeTarget) if (target == _activeTarget)
return; return;
if (_activeTarget != null) if (_activeTarget != null)
...@@ -393,13 +393,13 @@ class _DragAvatar<T> extends Drag { ...@@ -393,13 +393,13 @@ class _DragAvatar<T> extends Drag {
_activeTargetWillAcceptDrop = _activeTarget != null && _activeTarget.didEnter(data); _activeTargetWillAcceptDrop = _activeTarget != null && _activeTarget.didEnter(data);
} }
_DragTargetState<T> _getDragTarget(List<HitTestEntry> path) { _DragTargetState _getDragTarget(List<HitTestEntry> path) {
// Look for the RenderBox that corresponds to the hit target (the hit target // Look for the RenderBox that corresponds to the hit target (the hit target
// widget builds a RenderMetadata box for us for this purpose). // widget builds a RenderMetadata box for us for this purpose).
for (HitTestEntry entry in path) { for (HitTestEntry entry in path) {
if (entry.target is RenderMetaData) { if (entry.target is RenderMetaData) {
RenderMetaData renderMetaData = entry.target; RenderMetaData renderMetaData = entry.target;
if (renderMetaData.metaData is _DragTargetState<T>) if (renderMetaData.metaData is _DragTargetState)
return renderMetaData.metaData; return renderMetaData.metaData;
} }
} }
......
...@@ -192,7 +192,7 @@ class RawInputLineState extends ScrollableState<RawInputLine> { ...@@ -192,7 +192,7 @@ class RawInputLineState extends ScrollableState<RawInputLine> {
_KeyboardClientImpl _keyboardClient; _KeyboardClientImpl _keyboardClient;
KeyboardHandle _keyboardHandle; KeyboardHandle _keyboardHandle;
ScrollBehavior<double, double> createScrollBehavior() => new BoundedBehavior(); ScrollBehavior createScrollBehavior() => new BoundedBehavior();
BoundedBehavior get scrollBehavior => super.scrollBehavior; BoundedBehavior get scrollBehavior => super.scrollBehavior;
void initState() { void initState() {
......
...@@ -119,8 +119,8 @@ abstract class GlobalKey<T extends State<StatefulComponent>> extends Key { ...@@ -119,8 +119,8 @@ abstract class GlobalKey<T extends State<StatefulComponent>> extends Key {
Widget get currentWidget => _currentElement?.widget; Widget get currentWidget => _currentElement?.widget;
T get currentState { T get currentState {
Element element = _currentElement; Element element = _currentElement;
if (element is StatefulComponentElement) { if (element is StatefulComponentElement<StatefulComponent, T>) {
StatefulComponentElement statefulElement = element; StatefulComponentElement<StatefulComponent, T> statefulElement = element;
return statefulElement.state; return statefulElement.state;
} }
return null; return null;
...@@ -304,7 +304,7 @@ abstract class State<T extends StatefulComponent> { ...@@ -304,7 +304,7 @@ abstract class State<T extends StatefulComponent> {
/// Verifies that the State that was created is one that expects to be created /// Verifies that the State that was created is one that expects to be created
/// for that particular Widget. /// for that particular Widget.
bool _debugTypesAreRight(Widget widget) => widget is T; bool _debugTypesAreRight(widget) => widget is T;
/// Pointer to the owner Element object /// Pointer to the owner Element object
StatefulComponentElement _element; StatefulComponentElement _element;
...@@ -420,7 +420,7 @@ abstract class ParentDataWidget<T extends RenderObjectWidget> extends _ProxyComp ...@@ -420,7 +420,7 @@ abstract class ParentDataWidget<T extends RenderObjectWidget> extends _ProxyComp
const ParentDataWidget({ Key key, Widget child }) const ParentDataWidget({ Key key, Widget child })
: super(key: key, child: child); : super(key: key, child: child);
ParentDataElement<T> createElement() => new ParentDataElement<T>(this); ParentDataElement createElement() => new ParentDataElement(this);
/// Subclasses should override this function to return true if the given /// Subclasses should override this function to return true if the given
/// ancestor is a RenderObjectWidget that wraps a RenderObject that can handle /// ancestor is a RenderObjectWidget that wraps a RenderObject that can handle
...@@ -612,8 +612,8 @@ abstract class BuildContext { ...@@ -612,8 +612,8 @@ abstract class BuildContext {
/// ///
/// Elements can, in principle, have children. Only subclasses of /// Elements can, in principle, have children. Only subclasses of
/// RenderObjectElement are allowed to have more than one child. /// RenderObjectElement are allowed to have more than one child.
abstract class Element implements BuildContext { abstract class Element<T extends Widget> implements BuildContext {
Element(Widget widget) : _widget = widget { Element(T widget) : _widget = widget {
assert(widget != null); assert(widget != null);
} }
...@@ -633,8 +633,8 @@ abstract class Element implements BuildContext { ...@@ -633,8 +633,8 @@ abstract class Element implements BuildContext {
int _depth; int _depth;
/// The configuration for this element. /// The configuration for this element.
Widget get widget => _widget; T get widget => _widget;
Widget _widget; T _widget;
bool _active = false; bool _active = false;
...@@ -744,7 +744,7 @@ abstract class Element implements BuildContext { ...@@ -744,7 +744,7 @@ abstract class Element implements BuildContext {
} }
/// Called when an Element receives a new configuration widget. /// Called when an Element receives a new configuration widget.
void update(Widget newWidget) { void update(T newWidget) {
assert(_debugLifecycleState == _ElementLifecycle.active); assert(_debugLifecycleState == _ElementLifecycle.active);
assert(widget != null); assert(widget != null);
assert(newWidget != null); assert(newWidget != null);
...@@ -1040,8 +1040,8 @@ typedef void BuildScheduler(BuildableElement element); ...@@ -1040,8 +1040,8 @@ typedef void BuildScheduler(BuildableElement element);
/// Base class for instantiations of widgets that have builders and can be /// Base class for instantiations of widgets that have builders and can be
/// marked dirty. /// marked dirty.
abstract class BuildableElement extends Element { abstract class BuildableElement<T extends Widget> extends Element<T> {
BuildableElement(Widget widget) : super(widget); BuildableElement(T widget) : super(widget);
/// Returns true if the element has been marked as needing rebuilding. /// Returns true if the element has been marked as needing rebuilding.
bool get dirty => _dirty; bool get dirty => _dirty;
...@@ -1197,8 +1197,8 @@ typedef Widget WidgetBuilder(BuildContext context); ...@@ -1197,8 +1197,8 @@ typedef Widget WidgetBuilder(BuildContext context);
/// Base class for the instantiation of StatelessComponent, StatefulComponent, /// Base class for the instantiation of StatelessComponent, StatefulComponent,
/// and ProxyComponent widgets. /// and ProxyComponent widgets.
abstract class ComponentElement extends BuildableElement { abstract class ComponentElement<T extends Widget> extends BuildableElement<T> {
ComponentElement(Widget widget) : super(widget); ComponentElement(T widget) : super(widget);
WidgetBuilder _builder; WidgetBuilder _builder;
Element _child; Element _child;
...@@ -1271,14 +1271,12 @@ abstract class ComponentElement extends BuildableElement { ...@@ -1271,14 +1271,12 @@ abstract class ComponentElement extends BuildableElement {
} }
/// Instantiation of StatelessComponent widgets. /// Instantiation of StatelessComponent widgets.
class StatelessComponentElement extends ComponentElement { class StatelessComponentElement<T extends StatelessComponent> extends ComponentElement<T> {
StatelessComponentElement(StatelessComponent widget) : super(widget) { StatelessComponentElement(T widget) : super(widget) {
_builder = widget.build; _builder = widget.build;
} }
StatelessComponent get widget => super.widget; void update(T newWidget) {
void update(StatelessComponent newWidget) {
super.update(newWidget); super.update(newWidget);
assert(widget == newWidget); assert(widget == newWidget);
_builder = widget.build; _builder = widget.build;
...@@ -1288,10 +1286,10 @@ class StatelessComponentElement extends ComponentElement { ...@@ -1288,10 +1286,10 @@ class StatelessComponentElement extends ComponentElement {
} }
/// Instantiation of StatefulComponent widgets. /// Instantiation of StatefulComponent widgets.
class StatefulComponentElement extends ComponentElement { class StatefulComponentElement<T extends StatefulComponent, U extends State<T>> extends ComponentElement<T> {
StatefulComponentElement(StatefulComponent widget) StatefulComponentElement(T widget)
: _state = widget.createState(), super(widget) { : _state = widget.createState(), super(widget) {
assert(_state._debugTypesAreRight(widget)); assert(_state._debugTypesAreRight(widget)); // can't use T and U, since normally we don't actually set those
assert(_state._element == null); assert(_state._element == null);
_state._element = this; _state._element = this;
assert(_builder == null); assert(_builder == null);
...@@ -1301,8 +1299,8 @@ class StatefulComponentElement extends ComponentElement { ...@@ -1301,8 +1299,8 @@ class StatefulComponentElement extends ComponentElement {
assert(_state._debugLifecycleState == _StateLifecycle.created); assert(_state._debugLifecycleState == _StateLifecycle.created);
} }
State<StatefulComponent> get state => _state; U get state => _state;
State<StatefulComponent> _state; U _state;
void _firstBuild() { void _firstBuild() {
assert(_state._debugLifecycleState == _StateLifecycle.created); assert(_state._debugLifecycleState == _StateLifecycle.created);
...@@ -1325,7 +1323,7 @@ class StatefulComponentElement extends ComponentElement { ...@@ -1325,7 +1323,7 @@ class StatefulComponentElement extends ComponentElement {
super._firstBuild(); super._firstBuild();
} }
void update(StatefulComponent newWidget) { void update(T newWidget) {
super.update(newWidget); super.update(newWidget);
assert(widget == newWidget); assert(widget == newWidget);
StatefulComponent oldConfig = _state._config; StatefulComponent oldConfig = _state._config;
...@@ -1377,17 +1375,15 @@ class StatefulComponentElement extends ComponentElement { ...@@ -1377,17 +1375,15 @@ class StatefulComponentElement extends ComponentElement {
} }
} }
abstract class _ProxyElement extends ComponentElement { abstract class _ProxyElement<T extends _ProxyComponent> extends ComponentElement<T> {
_ProxyElement(_ProxyComponent widget) : super(widget) { _ProxyElement(T widget) : super(widget) {
_builder = _build; _builder = _build;
} }
_ProxyComponent get widget => super.widget;
Widget _build(BuildContext context) => widget.child; Widget _build(BuildContext context) => widget.child;
void update(_ProxyComponent newWidget) { void update(T newWidget) {
_ProxyComponent oldWidget = widget; T oldWidget = widget;
assert(widget != null); assert(widget != null);
assert(widget != newWidget); assert(widget != newWidget);
super.update(newWidget); super.update(newWidget);
...@@ -1397,20 +1393,18 @@ abstract class _ProxyElement extends ComponentElement { ...@@ -1397,20 +1393,18 @@ abstract class _ProxyElement extends ComponentElement {
rebuild(); rebuild();
} }
void notifyDescendants(_ProxyComponent oldWidget); void notifyDescendants(T oldWidget);
} }
class ParentDataElement<T extends RenderObjectWidget> extends _ProxyElement { class ParentDataElement extends _ProxyElement<ParentDataWidget> {
ParentDataElement(ParentDataWidget<T> widget) : super(widget); ParentDataElement(ParentDataWidget widget) : super(widget);
ParentDataWidget<T> get widget => super.widget;
void mount(Element parent, dynamic slot) { void mount(Element parent, dynamic slot) {
assert(() { assert(() {
List<Widget> badAncestors = <Widget>[]; List<Widget> badAncestors = <Widget>[];
Element ancestor = parent; Element ancestor = parent;
while (ancestor != null) { while (ancestor != null) {
if (ancestor is ParentDataElement<dynamic>) { if (ancestor is ParentDataElement) {
badAncestors.add(ancestor.widget); badAncestors.add(ancestor.widget);
} else if (ancestor is RenderObjectElement) { } else if (ancestor is RenderObjectElement) {
if (widget.debugIsValidAncestor(ancestor.widget)) if (widget.debugIsValidAncestor(ancestor.widget))
...@@ -1434,26 +1428,22 @@ class ParentDataElement<T extends RenderObjectWidget> extends _ProxyElement { ...@@ -1434,26 +1428,22 @@ class ParentDataElement<T extends RenderObjectWidget> extends _ProxyElement {
super.mount(parent, slot); super.mount(parent, slot);
} }
void notifyDescendants(ParentDataWidget<T> oldWidget) { void notifyDescendants(ParentDataWidget oldWidget) {
void notifyChildren(Element child) { void notifyChildren(Element child) {
if (child is RenderObjectElement) { if (child is RenderObjectElement)
child.updateParentData(widget); child.updateParentData(widget);
} else { else if (child is! ParentDataElement)
assert(child is! ParentDataElement<dynamic>);
child.visitChildren(notifyChildren); child.visitChildren(notifyChildren);
} }
}
visitChildren(notifyChildren); visitChildren(notifyChildren);
} }
} }
class InheritedElement extends _ProxyElement { class InheritedElement extends _ProxyElement<InheritedWidget> {
InheritedElement(InheritedWidget widget) : super(widget); InheritedElement(InheritedWidget widget) : super(widget);
InheritedWidget get widget => super.widget;
final Set<Element> _dependants = new HashSet<Element>(); final Set<Element> _dependants = new HashSet<Element>();
void _updateInheritance() { void _updateInheritance() {
...@@ -1491,10 +1481,8 @@ class InheritedElement extends _ProxyElement { ...@@ -1491,10 +1481,8 @@ class InheritedElement extends _ProxyElement {
} }
/// Base class for instantiations of RenderObjectWidget subclasses /// Base class for instantiations of RenderObjectWidget subclasses
abstract class RenderObjectElement extends BuildableElement { abstract class RenderObjectElement<T extends RenderObjectWidget> extends BuildableElement<T> {
RenderObjectElement(RenderObjectWidget widget) : super(widget); RenderObjectElement(T widget) : super(widget);
RenderObjectWidget get widget => super.widget;
/// The underlying [RenderObject] for this element /// The underlying [RenderObject] for this element
RenderObject get renderObject => _renderObject; RenderObject get renderObject => _renderObject;
...@@ -1509,10 +1497,10 @@ abstract class RenderObjectElement extends BuildableElement { ...@@ -1509,10 +1497,10 @@ abstract class RenderObjectElement extends BuildableElement {
return ancestor; return ancestor;
} }
ParentDataElement<dynamic> _findAncestorParentDataElement() { ParentDataElement _findAncestorParentDataElement() {
Element ancestor = _parent; Element ancestor = _parent;
while (ancestor != null && ancestor is! RenderObjectElement) { while (ancestor != null && ancestor is! RenderObjectElement) {
if (ancestor is ParentDataElement<dynamic>) if (ancestor is ParentDataElement)
return ancestor; return ancestor;
ancestor = ancestor._parent; ancestor = ancestor._parent;
} }
...@@ -1528,7 +1516,7 @@ abstract class RenderObjectElement extends BuildableElement { ...@@ -1528,7 +1516,7 @@ abstract class RenderObjectElement extends BuildableElement {
_dirty = false; _dirty = false;
} }
void update(RenderObjectWidget newWidget) { void update(T newWidget) {
super.update(newWidget); super.update(newWidget);
assert(widget == newWidget); assert(widget == newWidget);
assert(() { debugUpdateRenderObjectOwner(); return true; }); assert(() { debugUpdateRenderObjectOwner(); return true; });
...@@ -1714,7 +1702,7 @@ abstract class RenderObjectElement extends BuildableElement { ...@@ -1714,7 +1702,7 @@ abstract class RenderObjectElement extends BuildableElement {
widget.didUnmountRenderObject(renderObject); widget.didUnmountRenderObject(renderObject);
} }
void updateParentData(ParentDataWidget<dynamic> parentData) { void updateParentData(ParentDataWidget parentData) {
parentData.applyParentData(renderObject); parentData.applyParentData(renderObject);
} }
...@@ -1730,7 +1718,7 @@ abstract class RenderObjectElement extends BuildableElement { ...@@ -1730,7 +1718,7 @@ abstract class RenderObjectElement extends BuildableElement {
_slot = newSlot; _slot = newSlot;
_ancestorRenderObjectElement = _findAncestorRenderObjectElement(); _ancestorRenderObjectElement = _findAncestorRenderObjectElement();
_ancestorRenderObjectElement?.insertChildRenderObject(renderObject, newSlot); _ancestorRenderObjectElement?.insertChildRenderObject(renderObject, newSlot);
ParentDataElement<dynamic> parentDataElement = _findAncestorParentDataElement(); ParentDataElement parentDataElement = _findAncestorParentDataElement();
if (parentDataElement != null) if (parentDataElement != null)
updateParentData(parentDataElement.widget); updateParentData(parentDataElement.widget);
} }
...@@ -1755,8 +1743,8 @@ abstract class RenderObjectElement extends BuildableElement { ...@@ -1755,8 +1743,8 @@ abstract class RenderObjectElement extends BuildableElement {
} }
/// Instantiation of RenderObjectWidgets that have no children /// Instantiation of RenderObjectWidgets that have no children
class LeafRenderObjectElement extends RenderObjectElement { class LeafRenderObjectElement<T extends RenderObjectWidget> extends RenderObjectElement<T> {
LeafRenderObjectElement(LeafRenderObjectWidget widget): super(widget); LeafRenderObjectElement(T widget): super(widget);
void insertChildRenderObject(RenderObject child, dynamic slot) { void insertChildRenderObject(RenderObject child, dynamic slot) {
assert(false); assert(false);
...@@ -1772,10 +1760,8 @@ class LeafRenderObjectElement extends RenderObjectElement { ...@@ -1772,10 +1760,8 @@ class LeafRenderObjectElement extends RenderObjectElement {
} }
/// Instantiation of RenderObjectWidgets that have up to one child /// Instantiation of RenderObjectWidgets that have up to one child
class OneChildRenderObjectElement extends RenderObjectElement { class OneChildRenderObjectElement<T extends OneChildRenderObjectWidget> extends RenderObjectElement<T> {
OneChildRenderObjectElement(OneChildRenderObjectWidget widget) : super(widget); OneChildRenderObjectElement(T widget) : super(widget);
OneChildRenderObjectWidget get widget => super.widget;
Element _child; Element _child;
...@@ -1796,14 +1782,14 @@ class OneChildRenderObjectElement extends RenderObjectElement { ...@@ -1796,14 +1782,14 @@ class OneChildRenderObjectElement extends RenderObjectElement {
_child = updateChild(_child, widget.child, null); _child = updateChild(_child, widget.child, null);
} }
void update(OneChildRenderObjectWidget newWidget) { void update(T newWidget) {
super.update(newWidget); super.update(newWidget);
assert(widget == newWidget); assert(widget == newWidget);
_child = updateChild(_child, widget.child, null); _child = updateChild(_child, widget.child, null);
} }
void insertChildRenderObject(RenderObject child, dynamic slot) { void insertChildRenderObject(RenderObject child, dynamic slot) {
final RenderObjectWithChildMixin<dynamic> renderObject = this.renderObject; final RenderObjectWithChildMixin renderObject = this.renderObject;
assert(slot == null); assert(slot == null);
renderObject.child = child; renderObject.child = child;
assert(renderObject == this.renderObject); assert(renderObject == this.renderObject);
...@@ -1814,7 +1800,7 @@ class OneChildRenderObjectElement extends RenderObjectElement { ...@@ -1814,7 +1800,7 @@ class OneChildRenderObjectElement extends RenderObjectElement {
} }
void removeChildRenderObject(RenderObject child) { void removeChildRenderObject(RenderObject child) {
final RenderObjectWithChildMixin<dynamic> renderObject = this.renderObject; final RenderObjectWithChildMixin renderObject = this.renderObject;
assert(renderObject.child == child); assert(renderObject.child == child);
renderObject.child = null; renderObject.child = null;
assert(renderObject == this.renderObject); assert(renderObject == this.renderObject);
...@@ -1822,39 +1808,37 @@ class OneChildRenderObjectElement extends RenderObjectElement { ...@@ -1822,39 +1808,37 @@ class OneChildRenderObjectElement extends RenderObjectElement {
} }
/// Instantiation of RenderObjectWidgets that can have a list of children /// Instantiation of RenderObjectWidgets that can have a list of children
class MultiChildRenderObjectElement extends RenderObjectElement { class MultiChildRenderObjectElement<T extends MultiChildRenderObjectWidget> extends RenderObjectElement<T> {
MultiChildRenderObjectElement(MultiChildRenderObjectWidget widget) : super(widget) { MultiChildRenderObjectElement(T widget) : super(widget) {
assert(!_debugHasDuplicateIds()); assert(!_debugHasDuplicateIds());
} }
MultiChildRenderObjectWidget get widget => super.widget;
List<Element> _children; List<Element> _children;
// We keep a set of detached children to avoid O(n^2) work walking _children // We keep a set of detached children to avoid O(n^2) work walking _children
// repeatedly to remove children. // repeatedly to remove children.
final Set<Element> _detachedChildren = new HashSet<Element>(); final Set<Element> _detachedChildren = new HashSet<Element>();
void insertChildRenderObject(RenderObject child, Element slot) { void insertChildRenderObject(RenderObject child, Element slot) {
final ContainerRenderObjectMixin<dynamic, dynamic> renderObject = this.renderObject; final ContainerRenderObjectMixin renderObject = this.renderObject;
renderObject.insert(child, after: slot?.renderObject); renderObject.insert(child, after: slot?.renderObject);
assert(renderObject == this.renderObject); assert(renderObject == this.renderObject);
} }
void moveChildRenderObject(RenderObject child, dynamic slot) { void moveChildRenderObject(RenderObject child, dynamic slot) {
final ContainerRenderObjectMixin<dynamic, dynamic> renderObject = this.renderObject; final ContainerRenderObjectMixin renderObject = this.renderObject;
renderObject.move(child, after: slot?.renderObject); renderObject.move(child, after: slot?.renderObject);
assert(renderObject == this.renderObject); assert(renderObject == this.renderObject);
} }
void removeChildRenderObject(RenderObject child) { void removeChildRenderObject(RenderObject child) {
final ContainerRenderObjectMixin<dynamic, dynamic> renderObject = this.renderObject; final ContainerRenderObjectMixin renderObject = this.renderObject;
assert(child.parent == renderObject); assert(child.parent == renderObject);
renderObject.remove(child); renderObject.remove(child);
assert(renderObject == this.renderObject); assert(renderObject == this.renderObject);
} }
bool _debugHasDuplicateIds() { bool _debugHasDuplicateIds() {
Set<Key> idSet = new HashSet<Key>(); var idSet = new HashSet<Key>();
for (Widget child in widget.children) { for (Widget child in widget.children) {
assert(child != null); assert(child != null);
if (child.key == null) if (child.key == null)
...@@ -1895,7 +1879,7 @@ class MultiChildRenderObjectElement extends RenderObjectElement { ...@@ -1895,7 +1879,7 @@ class MultiChildRenderObjectElement extends RenderObjectElement {
} }
} }
void update(MultiChildRenderObjectWidget newWidget) { void update(T newWidget) {
super.update(newWidget); super.update(newWidget);
assert(widget == newWidget); assert(widget == newWidget);
_children = updateChildren(_children, widget.children, detachedChildren: _detachedChildren); _children = updateChildren(_children, widget.children, detachedChildren: _detachedChildren);
......
...@@ -104,11 +104,10 @@ class Hero extends StatefulComponent { ...@@ -104,11 +104,10 @@ class Hero extends StatefulComponent {
Map<Object, Map<Key, HeroState>> heroes = <Object, Map<Key, HeroState>>{}; Map<Object, Map<Key, HeroState>> heroes = <Object, Map<Key, HeroState>>{};
void visitor(Element element) { void visitor(Element element) {
if (element.widget is Hero) { if (element.widget is Hero) {
StatefulComponentElement hero = element; StatefulComponentElement<Hero, HeroState> hero = element;
Hero heroWidget = element.widget; Object tag = hero.widget.tag;
Object tag = heroWidget.tag;
assert(tag != null); assert(tag != null);
Key key = heroWidget.key; Key key = hero.widget.key;
final Map<Key, HeroState> tagHeroes = heroes.putIfAbsent(tag, () => <Key, HeroState>{}); final Map<Key, HeroState> tagHeroes = heroes.putIfAbsent(tag, () => <Key, HeroState>{});
assert(() { assert(() {
if (tagHeroes.containsKey(key)) { if (tagHeroes.containsKey(key)) {
...@@ -396,17 +395,17 @@ class HeroController extends NavigatorObserver { ...@@ -396,17 +395,17 @@ class HeroController extends NavigatorObserver {
HeroParty _party; HeroParty _party;
Animation<double> _animation; Animation<double> _animation;
PageRoute<dynamic> _from; PageRoute _from;
PageRoute<dynamic> _to; PageRoute _to;
final List<OverlayEntry> _overlayEntries = new List<OverlayEntry>(); final List<OverlayEntry> _overlayEntries = new List<OverlayEntry>();
void didPush(Route<dynamic> route, Route<dynamic> previousRoute) { void didPush(Route route, Route previousRoute) {
assert(navigator != null); assert(navigator != null);
assert(route != null); assert(route != null);
if (route is PageRoute<dynamic>) { if (route is PageRoute) {
assert(route.animation != null); assert(route.animation != null);
if (previousRoute is PageRoute<dynamic>) // could be null if (previousRoute is PageRoute) // could be null
_from = previousRoute; _from = previousRoute;
_to = route; _to = route;
_animation = route.animation; _animation = route.animation;
...@@ -414,12 +413,12 @@ class HeroController extends NavigatorObserver { ...@@ -414,12 +413,12 @@ class HeroController extends NavigatorObserver {
} }
} }
void didPop(Route<dynamic> route, Route<dynamic> previousRoute) { void didPop(Route route, Route previousRoute) {
assert(navigator != null); assert(navigator != null);
assert(route != null); assert(route != null);
if (route is PageRoute<dynamic>) { if (route is PageRoute) {
assert(route.animation != null); assert(route.animation != null);
if (previousRoute is PageRoute<dynamic>) { if (previousRoute is PageRoute) {
_to = previousRoute; _to = previousRoute;
_from = route; _from = route;
_animation = route.animation; _animation = route.animation;
......
...@@ -68,7 +68,7 @@ abstract class AnimatedWidgetBase extends StatefulComponent { ...@@ -68,7 +68,7 @@ abstract class AnimatedWidgetBase extends StatefulComponent {
/// The duration over which to animate the parameters of this container. /// The duration over which to animate the parameters of this container.
final Duration duration; final Duration duration;
AnimatedWidgetBaseState<AnimatedWidgetBase> createState(); AnimatedWidgetBaseState createState();
void debugFillDescription(List<String> description) { void debugFillDescription(List<String> description) {
super.debugFillDescription(description); super.debugFillDescription(description);
...@@ -105,7 +105,7 @@ abstract class AnimatedWidgetBaseState<T extends AnimatedWidgetBase> extends Sta ...@@ -105,7 +105,7 @@ abstract class AnimatedWidgetBaseState<T extends AnimatedWidgetBase> extends Sta
_updateCurve(); _updateCurve();
_controller.duration = config.duration; _controller.duration = config.duration;
if (_constructTweens()) { if (_constructTweens()) {
forEachTween((Tween<dynamic> tween, dynamic targetValue, TweenConstructor<dynamic> constructor) { forEachTween((Tween tween, dynamic targetValue, TweenConstructor<T> constructor) {
_updateTween(tween, targetValue); _updateTween(tween, targetValue);
return tween; return tween;
}); });
...@@ -131,11 +131,11 @@ abstract class AnimatedWidgetBaseState<T extends AnimatedWidgetBase> extends Sta ...@@ -131,11 +131,11 @@ abstract class AnimatedWidgetBaseState<T extends AnimatedWidgetBase> extends Sta
setState(() { }); setState(() { });
} }
bool _shouldAnimateTween(Tween<dynamic> tween, dynamic targetValue) { bool _shouldAnimateTween(Tween tween, dynamic targetValue) {
return targetValue != (tween.end ?? tween.begin); return targetValue != (tween.end ?? tween.begin);
} }
void _updateTween(Tween<dynamic> tween, dynamic targetValue) { void _updateTween(Tween tween, dynamic targetValue) {
if (tween == null) if (tween == null)
return; return;
tween tween
...@@ -145,7 +145,7 @@ abstract class AnimatedWidgetBaseState<T extends AnimatedWidgetBase> extends Sta ...@@ -145,7 +145,7 @@ abstract class AnimatedWidgetBaseState<T extends AnimatedWidgetBase> extends Sta
bool _constructTweens() { bool _constructTweens() {
bool shouldStartAnimation = false; bool shouldStartAnimation = false;
forEachTween((Tween<dynamic> tween, dynamic targetValue, TweenConstructor<T> constructor) { forEachTween((Tween tween, dynamic targetValue, TweenConstructor<T> constructor) {
if (targetValue != null) { if (targetValue != null) {
tween ??= constructor(targetValue); tween ??= constructor(targetValue);
if (_shouldAnimateTween(tween, targetValue)) if (_shouldAnimateTween(tween, targetValue))
...@@ -173,7 +173,7 @@ abstract class AnimatedWidgetBaseState<T extends AnimatedWidgetBase> extends Sta ...@@ -173,7 +173,7 @@ abstract class AnimatedWidgetBaseState<T extends AnimatedWidgetBase> extends Sta
/// 2. Take the value returned from the callback, and store it. This is the /// 2. Take the value returned from the callback, and store it. This is the
/// value to use as the current value the next time that the forEachTween() /// value to use as the current value the next time that the forEachTween()
/// method is called. /// method is called.
void forEachTween(TweenVisitor<dynamic> visitor); void forEachTween(TweenVisitor visitor);
} }
/// A container that gradually changes its values over a period of time. /// A container that gradually changes its values over a period of time.
...@@ -262,7 +262,7 @@ class _AnimatedContainerState extends AnimatedWidgetBaseState<AnimatedContainer> ...@@ -262,7 +262,7 @@ class _AnimatedContainerState extends AnimatedWidgetBaseState<AnimatedContainer>
Tween<double> _width; Tween<double> _width;
Tween<double> _height; Tween<double> _height;
void forEachTween(TweenVisitor<dynamic> visitor) { void forEachTween(TweenVisitor visitor) {
// TODO(ianh): Use constructor tear-offs when it becomes possible // TODO(ianh): Use constructor tear-offs when it becomes possible
_constraints = visitor(_constraints, config.constraints, (dynamic value) => new BoxConstraintsTween(begin: value)); _constraints = visitor(_constraints, config.constraints, (dynamic value) => new BoxConstraintsTween(begin: value));
_decoration = visitor(_decoration, config.decoration, (dynamic value) => new DecorationTween(begin: value)); _decoration = visitor(_decoration, config.decoration, (dynamic value) => new DecorationTween(begin: value));
...@@ -381,7 +381,7 @@ class _AnimatedPositionedState extends AnimatedWidgetBaseState<AnimatedPositione ...@@ -381,7 +381,7 @@ class _AnimatedPositionedState extends AnimatedWidgetBaseState<AnimatedPositione
Tween<double> _width; Tween<double> _width;
Tween<double> _height; Tween<double> _height;
void forEachTween(TweenVisitor<dynamic> visitor) { void forEachTween(TweenVisitor visitor) {
// TODO(ianh): Use constructor tear-offs when it becomes possible // TODO(ianh): Use constructor tear-offs when it becomes possible
_left = visitor(_left, config.left, (dynamic value) => new Tween<double>(begin: value)); _left = visitor(_left, config.left, (dynamic value) => new Tween<double>(begin: value));
_top = visitor(_top, config.top, (dynamic value) => new Tween<double>(begin: value)); _top = visitor(_top, config.top, (dynamic value) => new Tween<double>(begin: value));
......
...@@ -5,10 +5,10 @@ ...@@ -5,10 +5,10 @@
import 'framework.dart'; import 'framework.dart';
/// Superclass for locale-specific data provided by the application. /// Superclass for locale-specific data provided by the application.
class LocaleQueryData { } // TODO(ianh): We need a better type here. This doesn't really make sense. class LocaleQueryData { }
/// Establishes a subtree in which locale queries resolve to the given data. /// Establishes a subtree in which locale queries resolve to the given data.
class LocaleQuery extends InheritedWidget { class LocaleQuery<T extends LocaleQueryData> extends InheritedWidget {
LocaleQuery({ LocaleQuery({
Key key, Key key,
this.data, this.data,
...@@ -18,7 +18,7 @@ class LocaleQuery extends InheritedWidget { ...@@ -18,7 +18,7 @@ class LocaleQuery extends InheritedWidget {
} }
/// The locale data for this subtree. /// The locale data for this subtree.
final LocaleQueryData data; final T data;
/// The data from the closest instance of this class that encloses the given context. /// The data from the closest instance of this class that encloses the given context.
static LocaleQueryData of(BuildContext context) { static LocaleQueryData of(BuildContext context) {
......
...@@ -48,7 +48,7 @@ class MimicOverlayEntry { ...@@ -48,7 +48,7 @@ class MimicOverlayEntry {
/// given curve. /// given curve.
/// ///
/// This function can only be called once per overlay entry. /// This function can only be called once per overlay entry.
Future<Null> animateTo({ Future animateTo({
GlobalKey targetKey, GlobalKey targetKey,
Duration duration, Duration duration,
Curve curve: Curves.linear Curve curve: Curves.linear
......
...@@ -68,14 +68,12 @@ class _ChildKey { ...@@ -68,14 +68,12 @@ class _ChildKey {
String toString() => "_ChildKey(type: $type, key: $key)"; String toString() => "_ChildKey(type: $type, key: $key)";
} }
class _MixedViewportElement extends RenderObjectElement { class _MixedViewportElement extends RenderObjectElement<MixedViewport> {
_MixedViewportElement(MixedViewport widget) : super(widget) { _MixedViewportElement(MixedViewport widget) : super(widget) {
if (widget.onInvalidatorAvailable != null) if (widget.onInvalidatorAvailable != null)
widget.onInvalidatorAvailable(invalidate); widget.onInvalidatorAvailable(invalidate);
} }
MixedViewport get widget => super.widget;
/// _childExtents contains the extents of each child from the top of the list /// _childExtents contains the extents of each child from the top of the list
/// up to the last one we've ever created. /// up to the last one we've ever created.
final List<double> _childExtents = <double>[]; final List<double> _childExtents = <double>[];
......
...@@ -33,7 +33,7 @@ abstract class Route<T> { ...@@ -33,7 +33,7 @@ abstract class Route<T> {
void didPush() { } void didPush() { }
/// Called after install() when the route replaced another in the navigator. /// Called after install() when the route replaced another in the navigator.
void didReplace(Route<dynamic> oldRoute) { } void didReplace(Route oldRoute) { }
/// A request was made to pop this route. If the route can handle it /// A request was made to pop this route. If the route can handle it
/// internally (e.g. because it has its own stack of internal state) then /// internally (e.g. because it has its own stack of internal state) then
...@@ -49,13 +49,13 @@ abstract class Route<T> { ...@@ -49,13 +49,13 @@ abstract class Route<T> {
/// The given route, which came after this one, has been popped off the /// The given route, which came after this one, has been popped off the
/// navigator. /// navigator.
void didPopNext(Route<dynamic> nextRoute) { } void didPopNext(Route nextRoute) { }
/// This route's next route has changed to the given new route. This is called /// This route's next route has changed to the given new route. This is called
/// on a route whenever the next route changes for any reason, except for /// on a route whenever the next route changes for any reason, except for
/// cases when didPopNext() would be called, so long as it is in the history. /// cases when didPopNext() would be called, so long as it is in the history.
/// nextRoute will be null if there's no next route. /// nextRoute will be null if there's no next route.
void didChangeNext(Route<dynamic> nextRoute) { } void didChangeNext(Route nextRoute) { }
/// The route should remove its overlays and free any other resources. /// The route should remove its overlays and free any other resources.
/// ///
...@@ -109,7 +109,7 @@ class RouteSettings { ...@@ -109,7 +109,7 @@ class RouteSettings {
} }
/// Creates a route for the given route settings. /// Creates a route for the given route settings.
typedef Route<dynamic> RouteFactory(RouteSettings settings); typedef Route RouteFactory(RouteSettings settings);
/// A callback in during which you can perform a number of navigator operations (e.g., pop, push) that happen atomically. /// A callback in during which you can perform a number of navigator operations (e.g., pop, push) that happen atomically.
typedef void NavigatorTransactionCallback(NavigatorTransaction transaction); typedef void NavigatorTransactionCallback(NavigatorTransaction transaction);
...@@ -121,10 +121,10 @@ class NavigatorObserver { ...@@ -121,10 +121,10 @@ class NavigatorObserver {
NavigatorState _navigator; NavigatorState _navigator;
/// The [Navigator] pushed the given route. /// The [Navigator] pushed the given route.
void didPush(Route<dynamic> route, Route<dynamic> previousRoute) { } void didPush(Route route, Route previousRoute) { }
/// THe [Navigator] popped the given route. /// THe [Navigator] popped the given route.
void didPop(Route<dynamic> route, Route<dynamic> previousRoute) { } void didPop(Route route, Route previousRoute) { }
} }
/// Manages a set of child widgets with a stack discipline. /// Manages a set of child widgets with a stack discipline.
...@@ -189,7 +189,7 @@ class Navigator extends StatefulComponent { ...@@ -189,7 +189,7 @@ class Navigator extends StatefulComponent {
/// Navigator observer, if any, will have didPush() called on it. /// Navigator observer, if any, will have didPush() called on it.
/// ///
/// Uses [openTransaction()]. Only one transaction will be executed per frame. /// Uses [openTransaction()]. Only one transaction will be executed per frame.
static void push(BuildContext context, Route<dynamic> route) { static void push(BuildContext context, Route route) {
openTransaction(context, (NavigatorTransaction transaction) { openTransaction(context, (NavigatorTransaction transaction) {
transaction.push(route); transaction.push(route);
}); });
...@@ -224,7 +224,7 @@ class Navigator extends StatefulComponent { ...@@ -224,7 +224,7 @@ class Navigator extends StatefulComponent {
/// If it is already the current route, nothing happens. /// If it is already the current route, nothing happens.
/// ///
/// Uses [openTransaction()]. Only one transaction will be executed per frame. /// Uses [openTransaction()]. Only one transaction will be executed per frame.
static void popUntil(BuildContext context, Route<dynamic> targetRoute) { static void popUntil(BuildContext context, Route targetRoute) {
openTransaction(context, (NavigatorTransaction transaction) { openTransaction(context, (NavigatorTransaction transaction) {
transaction.popUntil(targetRoute); transaction.popUntil(targetRoute);
}); });
...@@ -277,7 +277,7 @@ class Navigator extends StatefulComponent { ...@@ -277,7 +277,7 @@ class Navigator extends StatefulComponent {
/// The state for a [Navigator] widget. /// The state for a [Navigator] widget.
class NavigatorState extends State<Navigator> { class NavigatorState extends State<Navigator> {
final GlobalKey<OverlayState> _overlayKey = new GlobalKey<OverlayState>(); final GlobalKey<OverlayState> _overlayKey = new GlobalKey<OverlayState>();
final List<Route<dynamic>> _history = new List<Route<dynamic>>(); final List<Route> _history = new List<Route>();
void initState() { void initState() {
super.initState(); super.initState();
...@@ -301,7 +301,7 @@ class NavigatorState extends State<Navigator> { ...@@ -301,7 +301,7 @@ class NavigatorState extends State<Navigator> {
assert(!_debugLocked); assert(!_debugLocked);
assert(() { _debugLocked = true; return true; }); assert(() { _debugLocked = true; return true; });
config.observer?._navigator = null; config.observer?._navigator = null;
for (Route<dynamic> route in _history) { for (Route route in _history) {
route.dispose(); route.dispose();
route._navigator = null; route._navigator = null;
} }
...@@ -313,7 +313,7 @@ class NavigatorState extends State<Navigator> { ...@@ -313,7 +313,7 @@ class NavigatorState extends State<Navigator> {
OverlayState get overlay => _overlayKey.currentState; OverlayState get overlay => _overlayKey.currentState;
OverlayEntry get _currentOverlayEntry { OverlayEntry get _currentOverlayEntry {
for (Route<dynamic> route in _history.reversed) { for (Route route in _history.reversed) {
if (route.overlayEntries.isNotEmpty) if (route.overlayEntries.isNotEmpty)
return route.overlayEntries.last; return route.overlayEntries.last;
} }
...@@ -329,7 +329,7 @@ class NavigatorState extends State<Navigator> { ...@@ -329,7 +329,7 @@ class NavigatorState extends State<Navigator> {
name: name, name: name,
mostValuableKeys: mostValuableKeys mostValuableKeys: mostValuableKeys
); );
Route<dynamic> route = config.onGenerateRoute(settings); Route route = config.onGenerateRoute(settings);
if (route == null) { if (route == null) {
assert(config.onUnknownRoute != null); assert(config.onUnknownRoute != null);
route = config.onUnknownRoute(settings); route = config.onUnknownRoute(settings);
...@@ -338,13 +338,13 @@ class NavigatorState extends State<Navigator> { ...@@ -338,13 +338,13 @@ class NavigatorState extends State<Navigator> {
_push(route); _push(route);
} }
void _push(Route<dynamic> route) { void _push(Route route) {
assert(!_debugLocked); assert(!_debugLocked);
assert(() { _debugLocked = true; return true; }); assert(() { _debugLocked = true; return true; });
assert(route != null); assert(route != null);
assert(route._navigator == null); assert(route._navigator == null);
setState(() { setState(() {
Route<dynamic> oldRoute = _history.isNotEmpty ? _history.last : null; Route oldRoute = _history.isNotEmpty ? _history.last : null;
route._navigator = this; route._navigator = this;
route.install(_currentOverlayEntry); route.install(_currentOverlayEntry);
_history.add(route); _history.add(route);
...@@ -357,7 +357,7 @@ class NavigatorState extends State<Navigator> { ...@@ -357,7 +357,7 @@ class NavigatorState extends State<Navigator> {
assert(() { _debugLocked = false; return true; }); assert(() { _debugLocked = false; return true; });
} }
void _replace({ Route<dynamic> oldRoute, Route<dynamic> newRoute }) { void _replace({ Route oldRoute, Route newRoute }) {
assert(!_debugLocked); assert(!_debugLocked);
assert(oldRoute != null); assert(oldRoute != null);
assert(newRoute != null); assert(newRoute != null);
...@@ -388,25 +388,25 @@ class NavigatorState extends State<Navigator> { ...@@ -388,25 +388,25 @@ class NavigatorState extends State<Navigator> {
assert(() { _debugLocked = false; return true; }); assert(() { _debugLocked = false; return true; });
} }
void _replaceRouteBefore({ Route<dynamic> anchorRoute, Route<dynamic> newRoute }) { void _replaceRouteBefore({ Route anchorRoute, Route newRoute }) {
assert(anchorRoute != null); assert(anchorRoute != null);
assert(anchorRoute._navigator == this); assert(anchorRoute._navigator == this);
assert(_history.indexOf(anchorRoute) > 0); assert(_history.indexOf(anchorRoute) > 0);
_replace(oldRoute: _history[_history.indexOf(anchorRoute)-1], newRoute: newRoute); _replace(oldRoute: _history[_history.indexOf(anchorRoute)-1], newRoute: newRoute);
} }
void _removeRouteBefore(Route<dynamic> anchorRoute) { void _removeRouteBefore(Route anchorRoute) {
assert(!_debugLocked); assert(!_debugLocked);
assert(() { _debugLocked = true; return true; }); assert(() { _debugLocked = true; return true; });
assert(anchorRoute._navigator == this); assert(anchorRoute._navigator == this);
int index = _history.indexOf(anchorRoute) - 1; int index = _history.indexOf(anchorRoute) - 1;
assert(index >= 0); assert(index >= 0);
Route<dynamic> targetRoute = _history[index]; Route targetRoute = _history[index];
assert(targetRoute._navigator == this); assert(targetRoute._navigator == this);
assert(targetRoute.overlayEntries.isEmpty || !overlay.debugIsVisible(targetRoute.overlayEntries.last)); assert(targetRoute.overlayEntries.isEmpty || !overlay.debugIsVisible(targetRoute.overlayEntries.last));
setState(() { setState(() {
_history.removeAt(index); _history.removeAt(index);
Route<dynamic> newRoute = index < _history.length ? _history[index] : null; Route newRoute = index < _history.length ? _history[index] : null;
if (index > 0) if (index > 0)
_history[index - 1].didChangeNext(newRoute); _history[index - 1].didChangeNext(newRoute);
targetRoute.dispose(); targetRoute.dispose();
...@@ -418,7 +418,7 @@ class NavigatorState extends State<Navigator> { ...@@ -418,7 +418,7 @@ class NavigatorState extends State<Navigator> {
bool _pop([dynamic result]) { bool _pop([dynamic result]) {
assert(!_debugLocked); assert(!_debugLocked);
assert(() { _debugLocked = true; return true; }); assert(() { _debugLocked = true; return true; });
Route<dynamic> route = _history.last; Route route = _history.last;
assert(route._navigator == this); assert(route._navigator == this);
bool debugPredictedWouldPop; bool debugPredictedWouldPop;
assert(() { debugPredictedWouldPop = !route.willHandlePopInternally; return true; }); assert(() { debugPredictedWouldPop = !route.willHandlePopInternally; return true; });
...@@ -445,7 +445,7 @@ class NavigatorState extends State<Navigator> { ...@@ -445,7 +445,7 @@ class NavigatorState extends State<Navigator> {
return true; return true;
} }
void _popUntil(Route<dynamic> targetRoute) { void _popUntil(Route targetRoute) {
assert(_history.contains(targetRoute)); assert(_history.contains(targetRoute));
while (!targetRoute.isCurrent) while (!targetRoute.isCurrent)
_pop(); _pop();
...@@ -512,7 +512,7 @@ class NavigatorTransaction { ...@@ -512,7 +512,7 @@ class NavigatorTransaction {
/// The route will have didPush() and didChangeNext() called on it; the /// The route will have didPush() and didChangeNext() called on it; the
/// previous route, if any, will have didChangeNext() called on it; and the /// previous route, if any, will have didChangeNext() called on it; and the
/// Navigator observer, if any, will have didPush() called on it. /// Navigator observer, if any, will have didPush() called on it.
void push(Route<dynamic> route) { void push(Route route) {
assert(_debugOpen); assert(_debugOpen);
_navigator._push(route); _navigator._push(route);
} }
...@@ -528,7 +528,7 @@ class NavigatorTransaction { ...@@ -528,7 +528,7 @@ class NavigatorTransaction {
/// ///
/// It is safe to call this redundantly (replacing a route with itself). Such /// It is safe to call this redundantly (replacing a route with itself). Such
/// calls are ignored. /// calls are ignored.
void replace({ Route<dynamic> oldRoute, Route<dynamic> newRoute }) { void replace({ Route oldRoute, Route newRoute }) {
assert(_debugOpen); assert(_debugOpen);
_navigator._replace(oldRoute: oldRoute, newRoute: newRoute); _navigator._replace(oldRoute: oldRoute, newRoute: newRoute);
} }
...@@ -541,14 +541,14 @@ class NavigatorTransaction { ...@@ -541,14 +541,14 @@ class NavigatorTransaction {
/// ///
/// The conditions described for [replace()] apply; for instance, the route /// The conditions described for [replace()] apply; for instance, the route
/// before anchorRoute must have overlay entries. /// before anchorRoute must have overlay entries.
void replaceRouteBefore({ Route<dynamic> anchorRoute, Route<dynamic> newRoute }) { void replaceRouteBefore({ Route anchorRoute, Route newRoute }) {
assert(_debugOpen); assert(_debugOpen);
_navigator._replaceRouteBefore(anchorRoute: anchorRoute, newRoute: newRoute); _navigator._replaceRouteBefore(anchorRoute: anchorRoute, newRoute: newRoute);
} }
/// Removes the route prior to the given anchorRoute, and calls didChangeNext /// Removes the route prior to the given anchorRoute, and calls didChangeNext
/// on the route prior to that one, if any. The observer is not notified. /// on the route prior to that one, if any. The observer is not notified.
void removeRouteBefore(Route<dynamic> anchorRoute) { void removeRouteBefore(Route anchorRoute) {
assert(_debugOpen); assert(_debugOpen);
_navigator._removeRouteBefore(anchorRoute); _navigator._removeRouteBefore(anchorRoute);
} }
...@@ -573,7 +573,7 @@ class NavigatorTransaction { ...@@ -573,7 +573,7 @@ class NavigatorTransaction {
/// Calls pop() repeatedly until the given route is the current route. /// Calls pop() repeatedly until the given route is the current route.
/// If it is already the current route, nothing happens. /// If it is already the current route, nothing happens.
void popUntil(Route<dynamic> targetRoute) { void popUntil(Route targetRoute) {
assert(_debugOpen); assert(_debugOpen);
_navigator._popUntil(targetRoute); _navigator._popUntil(targetRoute);
} }
......
...@@ -13,9 +13,9 @@ abstract class Notification { ...@@ -13,9 +13,9 @@ abstract class Notification {
void dispatch(BuildContext target) { void dispatch(BuildContext target) {
target.visitAncestorElements((Element element) { target.visitAncestorElements((Element element) {
if (element is StatelessComponentElement && if (element is StatelessComponentElement &&
element.widget is NotificationListener<dynamic>) { element.widget is NotificationListener) {
final NotificationListener<dynamic> widget = element.widget; final NotificationListener widget = element.widget;
if (widget._dispatch(this)) // that function checks the type dynamically if (widget._dispatch(this))
return false; return false;
} }
return true; return true;
......
...@@ -71,7 +71,7 @@ class PageableList extends Scrollable { ...@@ -71,7 +71,7 @@ class PageableList extends Scrollable {
/// The list of pages themselves. /// The list of pages themselves.
final Iterable<Widget> children; final Iterable<Widget> children;
PageableListState<PageableList> createState() => new PageableListState<PageableList>(); PageableListState createState() => new PageableListState();
} }
/// State for a [PageableList] widget. /// State for a [PageableList] widget.
...@@ -185,7 +185,7 @@ class PageableListState<T extends PageableList> extends ScrollableState<T> { ...@@ -185,7 +185,7 @@ class PageableListState<T extends PageableList> extends ScrollableState<T> {
return _overscrollBehavior; return _overscrollBehavior;
} }
ScrollBehavior<double, double> createScrollBehavior() => scrollBehavior; ScrollBehavior createScrollBehavior() => scrollBehavior;
bool get shouldSnapScrollOffset => config.itemsSnapAlignment == ItemsSnapAlignment.item; bool get shouldSnapScrollOffset => config.itemsSnapAlignment == ItemsSnapAlignment.item;
...@@ -196,14 +196,14 @@ class PageableListState<T extends PageableList> extends ScrollableState<T> { ...@@ -196,14 +196,14 @@ class PageableListState<T extends PageableList> extends ScrollableState<T> {
.clamp(scrollBehavior.minScrollOffset, scrollBehavior.maxScrollOffset); .clamp(scrollBehavior.minScrollOffset, scrollBehavior.maxScrollOffset);
} }
Future<Null> _flingToAdjacentItem(double scrollVelocity) { Future _flingToAdjacentItem(double scrollVelocity) {
final double newScrollOffset = snapScrollOffset(scrollOffset + scrollVelocity.sign) final double newScrollOffset = snapScrollOffset(scrollOffset + scrollVelocity.sign)
.clamp(snapScrollOffset(scrollOffset - 0.5), snapScrollOffset(scrollOffset + 0.5)); .clamp(snapScrollOffset(scrollOffset - 0.5), snapScrollOffset(scrollOffset + 0.5));
return scrollTo(newScrollOffset, duration: config.duration, curve: config.curve) return scrollTo(newScrollOffset, duration: config.duration, curve: config.curve)
.then(_notifyPageChanged); .then(_notifyPageChanged);
} }
Future<Null> fling(double scrollVelocity) { Future fling(double scrollVelocity) {
switch(config.itemsSnapAlignment) { switch(config.itemsSnapAlignment) {
case ItemsSnapAlignment.adjacentItem: case ItemsSnapAlignment.adjacentItem:
return _flingToAdjacentItem(scrollVelocity); return _flingToAdjacentItem(scrollVelocity);
...@@ -212,7 +212,7 @@ class PageableListState<T extends PageableList> extends ScrollableState<T> { ...@@ -212,7 +212,7 @@ class PageableListState<T extends PageableList> extends ScrollableState<T> {
} }
} }
Future<Null> settleScrollOffset() { Future settleScrollOffset() {
return scrollTo(snapScrollOffset(scrollOffset), duration: config.duration, curve: config.curve) return scrollTo(snapScrollOffset(scrollOffset), duration: config.duration, curve: config.curve)
.then(_notifyPageChanged); .then(_notifyPageChanged);
} }
...@@ -247,11 +247,9 @@ class PageViewport extends VirtualViewportFromIterable { ...@@ -247,11 +247,9 @@ class PageViewport extends VirtualViewportFromIterable {
_PageViewportElement createElement() => new _PageViewportElement(this); _PageViewportElement createElement() => new _PageViewportElement(this);
} }
class _PageViewportElement extends VirtualViewportElement { class _PageViewportElement extends VirtualViewportElement<PageViewport> {
_PageViewportElement(PageViewport widget) : super(widget); _PageViewportElement(PageViewport widget) : super(widget);
PageViewport get widget => super.widget;
RenderList get renderObject => super.renderObject; RenderList get renderObject => super.renderObject;
int get materializedChildBase => _materializedChildBase; int get materializedChildBase => _materializedChildBase;
......
...@@ -17,8 +17,8 @@ abstract class PageRoute<T> extends ModalRoute<T> { ...@@ -17,8 +17,8 @@ abstract class PageRoute<T> extends ModalRoute<T> {
}) : super(completer: completer, settings: settings); }) : super(completer: completer, settings: settings);
bool get opaque => true; bool get opaque => true;
bool get barrierDismissable => false; bool get barrierDismissable => false;
bool canTransitionTo(TransitionRoute<dynamic> nextRoute) => nextRoute is PageRoute<dynamic>; bool canTransitionTo(TransitionRoute nextRoute) => nextRoute is PageRoute;
bool canTransitionFrom(TransitionRoute<dynamic> nextRoute) => nextRoute is PageRoute<dynamic>; bool canTransitionFrom(TransitionRoute nextRoute) => nextRoute is PageRoute;
AnimationController createAnimationController() { AnimationController createAnimationController() {
AnimationController controller = super.createAnimationController(); AnimationController controller = super.createAnimationController();
......
...@@ -13,7 +13,7 @@ import 'overlay.dart'; ...@@ -13,7 +13,7 @@ import 'overlay.dart';
import 'page_storage.dart'; import 'page_storage.dart';
import 'pages.dart'; import 'pages.dart';
const Color _kTransparent = const Color(0x00000000); const _kTransparent = const Color(0x00000000);
/// A route that displays widgets in the [Navigator]'s [Overlay]. /// A route that displays widgets in the [Navigator]'s [Overlay].
abstract class OverlayRoute<T> extends Route<T> { abstract class OverlayRoute<T> extends Route<T> {
...@@ -159,8 +159,8 @@ abstract class TransitionRoute<T> extends OverlayRoute<T> { ...@@ -159,8 +159,8 @@ abstract class TransitionRoute<T> extends OverlayRoute<T> {
super.didPush(); super.didPush();
} }
void didReplace(Route<dynamic> oldRoute) { void didReplace(Route oldRoute) {
if (oldRoute is TransitionRoute<dynamic>) if (oldRoute is TransitionRoute)
_controller.value = oldRoute._controller.value; _controller.value = oldRoute._controller.value;
_animation.addStatusListener(_handleStatusChanged); _animation.addStatusListener(_handleStatusChanged);
super.didReplace(oldRoute); super.didReplace(oldRoute);
...@@ -173,18 +173,18 @@ abstract class TransitionRoute<T> extends OverlayRoute<T> { ...@@ -173,18 +173,18 @@ abstract class TransitionRoute<T> extends OverlayRoute<T> {
return true; return true;
} }
void didPopNext(Route<dynamic> nextRoute) { void didPopNext(Route nextRoute) {
_updateForwardAnimation(nextRoute); _updateForwardAnimation(nextRoute);
super.didPopNext(nextRoute); super.didPopNext(nextRoute);
} }
void didChangeNext(Route<dynamic> nextRoute) { void didChangeNext(Route nextRoute) {
_updateForwardAnimation(nextRoute); _updateForwardAnimation(nextRoute);
super.didChangeNext(nextRoute); super.didChangeNext(nextRoute);
} }
void _updateForwardAnimation(Route<dynamic> nextRoute) { void _updateForwardAnimation(Route nextRoute) {
if (nextRoute is TransitionRoute<dynamic> && canTransitionTo(nextRoute) && nextRoute.canTransitionFrom(this)) { if (nextRoute is TransitionRoute && canTransitionTo(nextRoute) && nextRoute.canTransitionFrom(this)) {
Animation<double> current = _forwardAnimation.parent; Animation<double> current = _forwardAnimation.parent;
if (current != null) { if (current != null) {
if (current is TrainHoppingAnimation) { if (current is TrainHoppingAnimation) {
...@@ -216,13 +216,13 @@ abstract class TransitionRoute<T> extends OverlayRoute<T> { ...@@ -216,13 +216,13 @@ abstract class TransitionRoute<T> extends OverlayRoute<T> {
/// ///
/// Subclasses can override this function to restrict the set of routes they /// Subclasses can override this function to restrict the set of routes they
/// need to coordinate transitions with. /// need to coordinate transitions with.
bool canTransitionTo(TransitionRoute<dynamic> nextRoute) => true; bool canTransitionTo(TransitionRoute nextRoute) => true;
/// Whether this route can perform a transition from the given route. /// Whether this route can perform a transition from the given route.
/// ///
/// Subclasses can override this function to restrict the set of routes they /// Subclasses can override this function to restrict the set of routes they
/// need to coordinate transitions with. /// need to coordinate transitions with.
bool canTransitionFrom(TransitionRoute<dynamic> nextRoute) => true; bool canTransitionFrom(TransitionRoute nextRoute) => true;
void finished() { void finished() {
super.finished(); super.finished();
...@@ -245,7 +245,7 @@ class LocalHistoryEntry { ...@@ -245,7 +245,7 @@ class LocalHistoryEntry {
/// Called when this entry is removed from the history of its associated [LocalHistoryRoute]. /// Called when this entry is removed from the history of its associated [LocalHistoryRoute].
final VoidCallback onRemove; final VoidCallback onRemove;
LocalHistoryRoute<dynamic> _owner; LocalHistoryRoute _owner;
/// Remove this entry from the history of its associated [LocalHistoryRoute]. /// Remove this entry from the history of its associated [LocalHistoryRoute].
void remove() { void remove() {
...@@ -323,7 +323,7 @@ class _ModalScopeStatus extends InheritedWidget { ...@@ -323,7 +323,7 @@ class _ModalScopeStatus extends InheritedWidget {
} }
final bool isCurrent; final bool isCurrent;
final Route<dynamic> route; final Route route;
bool updateShouldNotify(_ModalScopeStatus old) { bool updateShouldNotify(_ModalScopeStatus old) {
return isCurrent != old.isCurrent || return isCurrent != old.isCurrent ||
...@@ -342,7 +342,7 @@ class _ModalScope extends StatefulComponent { ...@@ -342,7 +342,7 @@ class _ModalScope extends StatefulComponent {
this.route this.route
}) : super(key: key); }) : super(key: key);
final ModalRoute<dynamic> route; final ModalRoute route;
_ModalScopeState createState() => new _ModalScopeState(); _ModalScopeState createState() => new _ModalScopeState();
} }
...@@ -444,7 +444,7 @@ abstract class ModalRoute<T> extends TransitionRoute<T> with LocalHistoryRoute<T ...@@ -444,7 +444,7 @@ abstract class ModalRoute<T> extends TransitionRoute<T> with LocalHistoryRoute<T
/// Returns the modal route most closely associated with the given context. /// Returns the modal route most closely associated with the given context.
/// ///
/// Returns null if the given context is not associated with a modal route. /// Returns null if the given context is not associated with a modal route.
static ModalRoute<dynamic> of(BuildContext context) { static ModalRoute of(BuildContext context) {
_ModalScopeStatus widget = context.inheritFromWidgetOfExactType(_ModalScopeStatus); _ModalScopeStatus widget = context.inheritFromWidgetOfExactType(_ModalScopeStatus);
return widget?.route; return widget?.route;
} }
...@@ -581,8 +581,8 @@ abstract class ModalRoute<T> extends TransitionRoute<T> with LocalHistoryRoute<T ...@@ -581,8 +581,8 @@ abstract class ModalRoute<T> extends TransitionRoute<T> with LocalHistoryRoute<T
abstract class PopupRoute<T> extends ModalRoute<T> { abstract class PopupRoute<T> extends ModalRoute<T> {
PopupRoute({ Completer<T> completer }) : super(completer: completer); PopupRoute({ Completer<T> completer }) : super(completer: completer);
bool get opaque => false; bool get opaque => false;
void didChangeNext(Route<dynamic> nextRoute) { void didChangeNext(Route nextRoute) {
assert(nextRoute is! PageRoute<dynamic>); assert(nextRoute is! PageRoute);
super.didChangeNext(nextRoute); super.didChangeNext(nextRoute);
} }
} }
...@@ -112,13 +112,13 @@ abstract class Scrollable extends StatefulComponent { ...@@ -112,13 +112,13 @@ abstract class Scrollable extends StatefulComponent {
} }
/// Scrolls the closest enclosing scrollable to make the given context visible. /// Scrolls the closest enclosing scrollable to make the given context visible.
static Future<Null> ensureVisible(BuildContext context, { Duration duration, Curve curve: Curves.ease }) { static Future ensureVisible(BuildContext context, { Duration duration, Curve curve: Curves.ease }) {
assert(context.findRenderObject() is RenderBox); assert(context.findRenderObject() is RenderBox);
// TODO(abarth): This function doesn't handle nested scrollable widgets. // TODO(abarth): This function doesn't handle nested scrollable widgets.
ScrollableState scrollable = Scrollable.of(context); ScrollableState scrollable = Scrollable.of(context);
if (scrollable == null) if (scrollable == null)
return new Future<Null>.value(); return new Future.value();
RenderBox targetBox = context.findRenderObject(); RenderBox targetBox = context.findRenderObject();
assert(targetBox.attached); assert(targetBox.attached);
...@@ -162,7 +162,7 @@ abstract class Scrollable extends StatefulComponent { ...@@ -162,7 +162,7 @@ abstract class Scrollable extends StatefulComponent {
} else if (targetMax > scrollableMax) { } else if (targetMax > scrollableMax) {
scrollOffsetDelta = targetMax - scrollableMax; scrollOffsetDelta = targetMax - scrollableMax;
} else { } else {
return new Future<Null>.value(); return new Future.value();
} }
ExtentScrollBehavior scrollBehavior = scrollable.scrollBehavior; ExtentScrollBehavior scrollBehavior = scrollable.scrollBehavior;
...@@ -172,14 +172,13 @@ abstract class Scrollable extends StatefulComponent { ...@@ -172,14 +172,13 @@ abstract class Scrollable extends StatefulComponent {
if (scrollOffset != scrollable.scrollOffset) if (scrollOffset != scrollable.scrollOffset)
return scrollable.scrollTo(scrollOffset, duration: duration, curve: curve); return scrollable.scrollTo(scrollOffset, duration: duration, curve: curve);
return new Future<Null>.value(); return new Future.value();
} }
ScrollableState createState(); ScrollableState createState();
} }
/// Contains the state for common scrolling widgets that scroll only /// Contains the state for common scrolling widgets.
/// along one axis.
/// ///
/// Widgets that subclass [Scrollable] typically use state objects /// Widgets that subclass [Scrollable] typically use state objects
/// that subclass [ScrollableState]. /// that subclass [ScrollableState].
...@@ -300,14 +299,14 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> { ...@@ -300,14 +299,14 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> {
/// Scroll behaviors control where the boundaries of the scrollable are placed /// Scroll behaviors control where the boundaries of the scrollable are placed
/// and how the scrolling physics should behave near those boundaries and /// and how the scrolling physics should behave near those boundaries and
/// after the user stops directly manipulating the scrollable. /// after the user stops directly manipulating the scrollable.
ScrollBehavior<double, double> get scrollBehavior { ScrollBehavior get scrollBehavior {
return _scrollBehavior ??= createScrollBehavior(); return _scrollBehavior ??= createScrollBehavior();
} }
ScrollBehavior<double, double> _scrollBehavior; ScrollBehavior _scrollBehavior;
/// Subclasses should override this function to create the [ScrollBehavior] /// Subclasses should override this function to create the [ScrollBehavior]
/// they desire. /// they desire.
ScrollBehavior<double, double> createScrollBehavior(); ScrollBehavior createScrollBehavior();
bool _scrollOffsetIsInBounds(double scrollOffset) { bool _scrollOffsetIsInBounds(double scrollOffset) {
if (scrollBehavior is! ExtentScrollBehavior) if (scrollBehavior is! ExtentScrollBehavior)
...@@ -337,7 +336,7 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> { ...@@ -337,7 +336,7 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> {
/// ///
/// If a non-null [duration] is provided, the widget will animate to the new /// If a non-null [duration] is provided, the widget will animate to the new
/// scroll offset over the given duration with the given curve. /// scroll offset over the given duration with the given curve.
Future<Null> scrollBy(double scrollDelta, { Duration duration, Curve curve: Curves.ease }) { Future scrollBy(double scrollDelta, { Duration duration, Curve curve: Curves.ease }) {
double newScrollOffset = scrollBehavior.applyCurve(_scrollOffset, scrollDelta); double newScrollOffset = scrollBehavior.applyCurve(_scrollOffset, scrollDelta);
return scrollTo(newScrollOffset, duration: duration, curve: curve); return scrollTo(newScrollOffset, duration: duration, curve: curve);
} }
...@@ -350,21 +349,21 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> { ...@@ -350,21 +349,21 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> {
/// This function does not accept a zero duration. To jump-scroll to /// This function does not accept a zero duration. To jump-scroll to
/// the new offset, do not provide a duration, rather than providing /// the new offset, do not provide a duration, rather than providing
/// a zero duration. /// a zero duration.
Future<Null> scrollTo(double newScrollOffset, { Duration duration, Curve curve: Curves.ease }) { Future scrollTo(double newScrollOffset, { Duration duration, Curve curve: Curves.ease }) {
if (newScrollOffset == _scrollOffset) if (newScrollOffset == _scrollOffset)
return new Future<Null>.value(); return new Future.value();
if (duration == null) { if (duration == null) {
_controller.stop(); _controller.stop();
_setScrollOffset(newScrollOffset); _setScrollOffset(newScrollOffset);
return new Future<Null>.value(); return new Future.value();
} }
assert(duration > Duration.ZERO); assert(duration > Duration.ZERO);
return _animateTo(newScrollOffset, duration, curve); return _animateTo(newScrollOffset, duration, curve);
} }
Future<Null> _animateTo(double newScrollOffset, Duration duration, Curve curve) { Future _animateTo(double newScrollOffset, Duration duration, Curve curve) {
_controller.stop(); _controller.stop();
_controller.value = scrollOffset; _controller.value = scrollOffset;
_startScroll(); _startScroll();
...@@ -376,10 +375,10 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> { ...@@ -376,10 +375,10 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> {
/// Calling this function starts a physics-based animation of the scroll /// Calling this function starts a physics-based animation of the scroll
/// offset with the given value as the initial velocity. The physics /// offset with the given value as the initial velocity. The physics
/// simulation used is determined by the scroll behavior. /// simulation used is determined by the scroll behavior.
Future<Null> fling(double scrollVelocity) { Future fling(double scrollVelocity) {
if (scrollVelocity != 0.0 || !_controller.isAnimating) if (scrollVelocity != 0.0 || !_controller.isAnimating)
return _startToEndAnimation(scrollVelocity); return _startToEndAnimation(scrollVelocity);
return new Future<Null>.value(); return new Future.value();
} }
/// Animate the scroll offset to a value with a local minima of energy. /// Animate the scroll offset to a value with a local minima of energy.
...@@ -387,15 +386,15 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> { ...@@ -387,15 +386,15 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> {
/// Calling this function starts a physics-based animation of the scroll /// Calling this function starts a physics-based animation of the scroll
/// offset either to a snap point or to within the scrolling bounds. The /// offset either to a snap point or to within the scrolling bounds. The
/// physics simulation used is determined by the scroll behavior. /// physics simulation used is determined by the scroll behavior.
Future<Null> settleScrollOffset() { Future settleScrollOffset() {
return _startToEndAnimation(0.0); return _startToEndAnimation(0.0);
} }
Future<Null> _startToEndAnimation(double scrollVelocity) { Future _startToEndAnimation(double scrollVelocity) {
_controller.stop(); _controller.stop();
Simulation simulation = _createSnapSimulation(scrollVelocity) ?? _createFlingSimulation(scrollVelocity); Simulation simulation = _createSnapSimulation(scrollVelocity) ?? _createFlingSimulation(scrollVelocity);
if (simulation == null) if (simulation == null)
return new Future<Null>.value(); return new Future.value();
_startScroll(); _startScroll();
return _controller.animateWith(simulation).then(_endScroll); return _controller.animateWith(simulation).then(_endScroll);
} }
...@@ -494,7 +493,7 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> { ...@@ -494,7 +493,7 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> {
scrollBy(pixelOffsetToScrollOffset(delta)); scrollBy(pixelOffsetToScrollOffset(delta));
} }
Future<Null> _handleDragEnd(Velocity velocity) { Future _handleDragEnd(Velocity velocity) {
double scrollVelocity = pixelDeltaToScrollOffset(velocity.pixelsPerSecond) / Duration.MILLISECONDS_PER_SECOND; double scrollVelocity = pixelDeltaToScrollOffset(velocity.pixelsPerSecond) / Duration.MILLISECONDS_PER_SECOND;
// The gesture velocity properties are pixels/second, config min,max limits are pixels/ms // The gesture velocity properties are pixels/second, config min,max limits are pixels/ms
return fling(scrollVelocity.clamp(-kMaxFlingVelocity, kMaxFlingVelocity)).then(_endScroll); return fling(scrollVelocity.clamp(-kMaxFlingVelocity, kMaxFlingVelocity)).then(_endScroll);
...@@ -632,7 +631,7 @@ class ScrollableViewport extends Scrollable { ...@@ -632,7 +631,7 @@ class ScrollableViewport extends Scrollable {
} }
class _ScrollableViewportState extends ScrollableState<ScrollableViewport> { class _ScrollableViewportState extends ScrollableState<ScrollableViewport> {
ScrollBehavior<double, double> createScrollBehavior() => new OverscrollWhenScrollableBehavior(); ScrollBehavior createScrollBehavior() => new OverscrollWhenScrollableBehavior();
OverscrollWhenScrollableBehavior get scrollBehavior => super.scrollBehavior; OverscrollWhenScrollableBehavior get scrollBehavior => super.scrollBehavior;
double _viewportSize = 0.0; double _viewportSize = 0.0;
...@@ -746,13 +745,13 @@ abstract class ScrollableListPainter extends Painter { ...@@ -746,13 +745,13 @@ abstract class ScrollableListPainter extends Painter {
/// Called when a scroll starts. Subclasses may override this method to /// Called when a scroll starts. Subclasses may override this method to
/// initialize some state or to play an animation. The returned Future should /// initialize some state or to play an animation. The returned Future should
/// complete when the computation triggered by this method has finished. /// complete when the computation triggered by this method has finished.
Future<Null> scrollStarted() => new Future<Null>.value(); Future scrollStarted() => new Future.value();
/// Similar to scrollStarted(). Called when a scroll ends. For fling scrolls /// Similar to scrollStarted(). Called when a scroll ends. For fling scrolls
/// "ended" means that the scroll animation either stopped of its own accord /// "ended" means that the scroll animation either stopped of its own accord
/// or was canceled by the user. /// or was canceled by the user.
Future<Null> scrollEnded() => new Future<Null>.value(); Future scrollEnded() => new Future.value();
} }
/// A general scrollable list for a large number of children that might not all /// A general scrollable list for a large number of children that might not all
...@@ -794,7 +793,7 @@ class ScrollableMixedWidgetListState extends ScrollableState<ScrollableMixedWidg ...@@ -794,7 +793,7 @@ class ScrollableMixedWidgetListState extends ScrollableState<ScrollableMixedWidg
); );
} }
ScrollBehavior<double, double> createScrollBehavior() => new OverscrollBehavior(); ScrollBehavior createScrollBehavior() => new OverscrollBehavior();
OverscrollBehavior get scrollBehavior => super.scrollBehavior; OverscrollBehavior get scrollBehavior => super.scrollBehavior;
Offset _handlePaintOffsetUpdateNeeded(ViewportDimensions dimensions) { Offset _handlePaintOffsetUpdateNeeded(ViewportDimensions dimensions) {
......
...@@ -41,7 +41,7 @@ class ScrollableGrid extends Scrollable { ...@@ -41,7 +41,7 @@ class ScrollableGrid extends Scrollable {
} }
class _ScrollableGridState extends ScrollableState<ScrollableGrid> { class _ScrollableGridState extends ScrollableState<ScrollableGrid> {
ScrollBehavior<double, double> createScrollBehavior() => new OverscrollBehavior(); ScrollBehavior createScrollBehavior() => new OverscrollBehavior();
ExtentScrollBehavior get scrollBehavior => super.scrollBehavior; ExtentScrollBehavior get scrollBehavior => super.scrollBehavior;
void _handleExtentsChanged(double contentExtent, double containerExtent) { void _handleExtentsChanged(double contentExtent, double containerExtent) {
...@@ -85,11 +85,9 @@ class GridViewport extends VirtualViewportFromIterable { ...@@ -85,11 +85,9 @@ class GridViewport extends VirtualViewportFromIterable {
_GridViewportElement createElement() => new _GridViewportElement(this); _GridViewportElement createElement() => new _GridViewportElement(this);
} }
class _GridViewportElement extends VirtualViewportElement { class _GridViewportElement extends VirtualViewportElement<GridViewport> {
_GridViewportElement(GridViewport widget) : super(widget); _GridViewportElement(GridViewport widget) : super(widget);
GridViewport get widget => super.widget;
RenderGrid get renderObject => super.renderObject; RenderGrid get renderObject => super.renderObject;
int get materializedChildBase => _materializedChildBase; int get materializedChildBase => _materializedChildBase;
......
...@@ -45,7 +45,7 @@ class ScrollableList extends Scrollable { ...@@ -45,7 +45,7 @@ class ScrollableList extends Scrollable {
} }
class _ScrollableListState extends ScrollableState<ScrollableList> { class _ScrollableListState extends ScrollableState<ScrollableList> {
ScrollBehavior<double, double> createScrollBehavior() => new OverscrollBehavior(); ScrollBehavior createScrollBehavior() => new OverscrollBehavior();
ExtentScrollBehavior get scrollBehavior => super.scrollBehavior; ExtentScrollBehavior get scrollBehavior => super.scrollBehavior;
void _handleExtentsChanged(double contentExtent, double containerExtent) { void _handleExtentsChanged(double contentExtent, double containerExtent) {
...@@ -145,11 +145,9 @@ class _VirtualListViewport extends VirtualViewport { ...@@ -145,11 +145,9 @@ class _VirtualListViewport extends VirtualViewport {
_VirtualListViewportElement createElement() => new _VirtualListViewportElement(this); _VirtualListViewportElement createElement() => new _VirtualListViewportElement(this);
} }
class _VirtualListViewportElement extends VirtualViewportElement { class _VirtualListViewportElement extends VirtualViewportElement<_VirtualListViewport> {
_VirtualListViewportElement(VirtualViewport widget) : super(widget); _VirtualListViewportElement(VirtualViewport widget) : super(widget);
_VirtualListViewport get widget => super.widget;
RenderList get renderObject => super.renderObject; RenderList get renderObject => super.renderObject;
int get materializedChildBase => _materializedChildBase; int get materializedChildBase => _materializedChildBase;
...@@ -308,7 +306,7 @@ class ScrollableLazyList extends Scrollable { ...@@ -308,7 +306,7 @@ class ScrollableLazyList extends Scrollable {
} }
class _ScrollableLazyListState extends ScrollableState<ScrollableLazyList> { class _ScrollableLazyListState extends ScrollableState<ScrollableLazyList> {
ScrollBehavior<double, double> createScrollBehavior() => new OverscrollBehavior(); ScrollBehavior createScrollBehavior() => new OverscrollBehavior();
ExtentScrollBehavior get scrollBehavior => super.scrollBehavior; ExtentScrollBehavior get scrollBehavior => super.scrollBehavior;
void _handleExtentsChanged(double contentExtent, double containerExtent) { void _handleExtentsChanged(double contentExtent, double containerExtent) {
......
...@@ -296,12 +296,12 @@ class _SemanticsDebuggerListener implements mojom.SemanticsListener { ...@@ -296,12 +296,12 @@ class _SemanticsDebuggerListener implements mojom.SemanticsListener {
} }
entry.updateMessage(); entry.updateMessage();
if (node.children != null) { if (node.children != null) {
Set<_SemanticsDebuggerEntry> oldChildren = new Set<_SemanticsDebuggerEntry>.from(entry.children ?? const <_SemanticsDebuggerEntry>[]); Set oldChildren = new Set<_SemanticsDebuggerEntry>.from(entry.children ?? const <_SemanticsDebuggerEntry>[]);
entry.children?.clear(); entry.children?.clear();
entry.children ??= new List<_SemanticsDebuggerEntry>(); entry.children ??= new List<_SemanticsDebuggerEntry>();
for (mojom.SemanticsNode child in node.children) for (mojom.SemanticsNode child in node.children)
entry.children.add(_updateNode(child)); entry.children.add(_updateNode(child));
Set<_SemanticsDebuggerEntry> newChildren = new Set<_SemanticsDebuggerEntry>.from(entry.children); Set newChildren = new Set<_SemanticsDebuggerEntry>.from(entry.children);
Set<_SemanticsDebuggerEntry> removedChildren = oldChildren.difference(newChildren); Set<_SemanticsDebuggerEntry> removedChildren = oldChildren.difference(newChildren);
for (_SemanticsDebuggerEntry oldChild in removedChildren) for (_SemanticsDebuggerEntry oldChild in removedChildren)
nodes.remove(oldChild.id); nodes.remove(oldChild.id);
......
...@@ -31,10 +31,8 @@ abstract class _WidgetProvider { ...@@ -31,10 +31,8 @@ abstract class _WidgetProvider {
/// This class is a building block for building a widget that has more children /// This class is a building block for building a widget that has more children
/// than it wishes to display at any given time. For example, [ScrollableList] /// than it wishes to display at any given time. For example, [ScrollableList]
/// uses this element to materialize only those children that are visible. /// uses this element to materialize only those children that are visible.
abstract class VirtualViewportElement extends RenderObjectElement { abstract class VirtualViewportElement<T extends VirtualViewport> extends RenderObjectElement<T> {
VirtualViewportElement(VirtualViewport widget) : super(widget); VirtualViewportElement(T widget) : super(widget);
VirtualViewport get widget => super.widget;
/// The index of the first child to materialize. /// The index of the first child to materialize.
int get materializedChildBase; int get materializedChildBase;
...@@ -72,7 +70,7 @@ abstract class VirtualViewportElement extends RenderObjectElement { ...@@ -72,7 +70,7 @@ abstract class VirtualViewportElement extends RenderObjectElement {
List<Element> _materializedChildren = const <Element>[]; List<Element> _materializedChildren = const <Element>[];
RenderVirtualViewport<dynamic> get renderObject => super.renderObject; RenderVirtualViewport get renderObject => super.renderObject;
void visitChildren(ElementVisitor visitor) { void visitChildren(ElementVisitor visitor) {
if (_materializedChildren == null) if (_materializedChildren == null)
...@@ -96,8 +94,8 @@ abstract class VirtualViewportElement extends RenderObjectElement { ...@@ -96,8 +94,8 @@ abstract class VirtualViewportElement extends RenderObjectElement {
super.unmount(); super.unmount();
} }
void update(VirtualViewport newWidget) { void update(T newWidget) {
VirtualViewport oldWidget = widget; T oldWidget = widget;
_widgetProvider.didUpdateWidget(oldWidget, newWidget); _widgetProvider.didUpdateWidget(oldWidget, newWidget);
super.update(newWidget); super.update(newWidget);
updateRenderObject(oldWidget); updateRenderObject(oldWidget);
...@@ -109,7 +107,7 @@ abstract class VirtualViewportElement extends RenderObjectElement { ...@@ -109,7 +107,7 @@ abstract class VirtualViewportElement extends RenderObjectElement {
renderObject.paintOffset = scrollOffsetToPixelDelta(widget.startOffset - startOffsetBase); renderObject.paintOffset = scrollOffsetToPixelDelta(widget.startOffset - startOffsetBase);
} }
void updateRenderObject(VirtualViewport oldWidget) { void updateRenderObject(T oldWidget) {
renderObject.virtualChildCount = _widgetProvider.virtualChildCount; renderObject.virtualChildCount = _widgetProvider.virtualChildCount;
if (startOffsetBase != null) { if (startOffsetBase != null) {
...@@ -163,7 +161,7 @@ abstract class VirtualViewportElement extends RenderObjectElement { ...@@ -163,7 +161,7 @@ abstract class VirtualViewportElement extends RenderObjectElement {
for (int i = 0; i < count; ++i) { for (int i = 0; i < count; ++i) {
int childIndex = base + i; int childIndex = base + i;
Widget child = _widgetProvider.getChild(childIndex); Widget child = _widgetProvider.getChild(childIndex);
Key key = new ValueKey<Key>(child.key) ?? new ValueKey<int>(childIndex); Key key = new ValueKey(child.key ?? childIndex);
newWidgets[i] = new RepaintBoundary(key: key, child: child); newWidgets[i] = new RepaintBoundary(key: key, child: child);
} }
_materializedChildren = updateChildren(_materializedChildren, newWidgets); _materializedChildren = updateChildren(_materializedChildren, newWidgets);
......
...@@ -64,10 +64,10 @@ void main() { ...@@ -64,10 +64,10 @@ void main() {
}); });
test("should not have a 0 sized colored Box", () { test("should not have a 0 sized colored Box", () {
RenderBox coloredBox = new RenderDecoratedBox( var coloredBox = new RenderDecoratedBox(
decoration: new BoxDecoration() decoration: new BoxDecoration()
); );
RenderBox paddingBox = new RenderPadding(padding: const EdgeDims.all(10.0), var paddingBox = new RenderPadding(padding: const EdgeDims.all(10.0),
child: coloredBox); child: coloredBox);
RenderBox root = new RenderDecoratedBox( RenderBox root = new RenderDecoratedBox(
decoration: new BoxDecoration(), decoration: new BoxDecoration(),
......
...@@ -107,11 +107,11 @@ Widget buildImageAtRatio(String image, Key key, double ratio, bool inferSize) { ...@@ -107,11 +107,11 @@ Widget buildImageAtRatio(String image, Key key, double ratio, bool inferSize) {
); );
} }
RenderImage getRenderImage(WidgetTester tester, Key key) { RenderImage getRenderImage(tester, Key key) {
return tester.findElementByKey(key).renderObject; return tester.findElementByKey(key).renderObject;
} }
TestImage getTestImage(WidgetTester tester, Key key) { TestImage getTestImage(tester, Key key) {
return getRenderImage(tester, key).image; return getRenderImage(tester, key).image;
} }
......
...@@ -10,7 +10,7 @@ void main() { ...@@ -10,7 +10,7 @@ void main() {
test('Verify that a BottomSheet can be rebuilt with ScaffoldFeatureController.setState()', () { test('Verify that a BottomSheet can be rebuilt with ScaffoldFeatureController.setState()', () {
testWidgets((WidgetTester tester) { testWidgets((WidgetTester tester) {
final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>(); final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();
PersistentBottomSheetController<Null> bottomSheet; ScaffoldFeatureController bottomSheet;
int buildCount = 0; int buildCount = 0;
tester.pumpWidget(new MaterialApp( tester.pumpWidget(new MaterialApp(
...@@ -24,7 +24,7 @@ void main() { ...@@ -24,7 +24,7 @@ void main() {
} }
)); ));
bottomSheet = scaffoldKey.currentState.showBottomSheet/*<Null>*/((_) { bottomSheet = scaffoldKey.currentState.showBottomSheet((_) {
return new Builder( return new Builder(
builder: (_) { builder: (_) {
buildCount += 1; buildCount += 1;
......
...@@ -25,11 +25,10 @@ void main() { ...@@ -25,11 +25,10 @@ void main() {
tester.pump(); tester.pump();
expect(tester.findText('BottomSheet'), isNull); expect(tester.findText('BottomSheet'), isNull);
showModalBottomSheet/*<Null>*/( showModalBottomSheet(
context: context, context: context,
builder: (BuildContext context) => new Text('BottomSheet') builder: (BuildContext context) => new Text('BottomSheet')
).then((Null result) { ).then((_) {
expect(result, isNull);
showBottomSheetThenCalled = true; showBottomSheetThenCalled = true;
}); });
...@@ -46,7 +45,7 @@ void main() { ...@@ -46,7 +45,7 @@ void main() {
tester.pump(new Duration(seconds: 1)); // frame after the animation (sheet has been removed) tester.pump(new Duration(seconds: 1)); // frame after the animation (sheet has been removed)
expect(tester.findText('BottomSheet'), isNull); expect(tester.findText('BottomSheet'), isNull);
showModalBottomSheet/*<Null>*/(context: context, builder: (BuildContext context) => new Text('BottomSheet')); showModalBottomSheet(context: context, builder: (BuildContext context) => new Text('BottomSheet'));
tester.pump(); // bottom sheet show animation starts tester.pump(); // bottom sheet show animation starts
tester.pump(new Duration(seconds: 1)); // animation done tester.pump(new Duration(seconds: 1)); // animation done
expect(tester.findText('BottomSheet'), isNotNull); expect(tester.findText('BottomSheet'), isNotNull);
......
...@@ -46,7 +46,7 @@ class TestOneChildLayoutDelegate extends OneChildLayoutDelegate { ...@@ -46,7 +46,7 @@ class TestOneChildLayoutDelegate extends OneChildLayoutDelegate {
} }
} }
Widget buildFrame(OneChildLayoutDelegate delegate) { Widget buildFrame(delegate) {
return new Center(child: new CustomOneChildLayout(delegate: delegate, child: new Container())); return new Center(child: new CustomOneChildLayout(delegate: delegate, child: new Container()));
} }
......
...@@ -15,19 +15,19 @@ void main() { ...@@ -15,19 +15,19 @@ void main() {
routes: <String, RouteBuilder>{ routes: <String, RouteBuilder>{
'/': (RouteArguments args) { return new Column( '/': (RouteArguments args) { return new Column(
children: <Widget>[ children: <Widget>[
new Draggable<int>( new Draggable(
data: 1, data: 1,
child: new Text('Source'), child: new Text('Source'),
feedback: new Text('Dragging') feedback: new Text('Dragging')
), ),
new DragTarget<int>( new DragTarget(
builder: (BuildContext context, List<int> data, List<dynamic> rejects) { builder: (context, data, rejects) {
return new Container( return new Container(
height: 100.0, height: 100.0,
child: new Text('Target') child: new Text('Target')
); );
}, },
onAccept: (int data) { onAccept: (data) {
accepted.add(data); accepted.add(data);
} }
), ),
...@@ -78,7 +78,7 @@ void main() { ...@@ -78,7 +78,7 @@ void main() {
routes: <String, RouteBuilder>{ routes: <String, RouteBuilder>{
'/': (RouteArguments args) { return new Column( '/': (RouteArguments args) { return new Column(
children: <Widget>[ children: <Widget>[
new Draggable<int>( new Draggable(
data: 1, data: 1,
child: new Text('Source'), child: new Text('Source'),
feedback: new Text('Dragging') feedback: new Text('Dragging')
...@@ -94,15 +94,15 @@ void main() { ...@@ -94,15 +94,15 @@ void main() {
child: new Text('Button') child: new Text('Button')
) )
), ),
new DragTarget<int>( new DragTarget(
builder: (BuildContext context, List<int> data, List<dynamic> rejects) { builder: (context, data, rejects) {
return new IgnorePointer( return new IgnorePointer(
child: new Container( child: new Container(
child: new Text('Target') child: new Text('Target')
) )
); );
}, },
onAccept: (int data) { onAccept: (data) {
events.add('drop'); events.add('drop');
} }
), ),
...@@ -176,7 +176,7 @@ void main() { ...@@ -176,7 +176,7 @@ void main() {
routes: <String, RouteBuilder>{ routes: <String, RouteBuilder>{
'/': (RouteArguments args) { return new Column( '/': (RouteArguments args) { return new Column(
children: <Widget>[ children: <Widget>[
new Draggable<int>( new Draggable(
data: 1, data: 1,
child: new GestureDetector( child: new GestureDetector(
behavior: HitTestBehavior.opaque, behavior: HitTestBehavior.opaque,
...@@ -189,11 +189,11 @@ void main() { ...@@ -189,11 +189,11 @@ void main() {
), ),
feedback: new Text('Dragging') feedback: new Text('Dragging')
), ),
new DragTarget<int>( new DragTarget(
builder: (BuildContext context, List<int> data, List<dynamic> rejects) { builder: (context, data, rejects) {
return new Text('Target'); return new Text('Target');
}, },
onAccept: (int data) { onAccept: (data) {
events.add('drop'); events.add('drop');
} }
), ),
...@@ -237,16 +237,16 @@ void main() { ...@@ -237,16 +237,16 @@ void main() {
routes: <String, RouteBuilder>{ routes: <String, RouteBuilder>{
'/': (RouteArguments args) { return new Column( '/': (RouteArguments args) { return new Column(
children: <Widget>[ children: <Widget>[
new LongPressDraggable<int>( new LongPressDraggable(
data: 1, data: 1,
child: new Text('Source'), child: new Text('Source'),
feedback: new Text('Dragging') feedback: new Text('Dragging')
), ),
new DragTarget<int>( new DragTarget(
builder: (BuildContext context, List<int> data, List<dynamic> rejects) { builder: (context, data, rejects) {
return new Text('Target'); return new Text('Target');
}, },
onAccept: (int data) { onAccept: (data) {
events.add('drop'); events.add('drop');
} }
), ),
...@@ -288,16 +288,16 @@ void main() { ...@@ -288,16 +288,16 @@ void main() {
routes: <String, RouteBuilder>{ routes: <String, RouteBuilder>{
'/': (RouteArguments args) { return new Column( '/': (RouteArguments args) { return new Column(
children: <Widget>[ children: <Widget>[
new Draggable<int>( new Draggable(
data: 1, data: 1,
child: new Text('Source'), child: new Text('Source'),
feedback: new Text('Dragging') feedback: new Text('Dragging')
), ),
new DragTarget<int>( new DragTarget(
builder: (BuildContext context, List<int> data, List<dynamic> rejects) { builder: (context, data, rejects) {
return new Text('Target'); return new Text('Target');
}, },
onAccept: (int data) { onAccept: (data) {
events.add('drop'); events.add('drop');
} }
), ),
...@@ -341,21 +341,21 @@ void main() { ...@@ -341,21 +341,21 @@ void main() {
'/': (RouteArguments args) { '/': (RouteArguments args) {
return new Block( return new Block(
children: <Widget>[ children: <Widget>[
new DragTarget<int>( new DragTarget(
builder: (BuildContext context, List<int> data, List<dynamic> rejects) { builder: (context, data, rejects) {
return new Text('Target'); return new Text('Target');
}, },
onAccept: (int data) { onAccept: (data) {
events.add('drop $data'); events.add('drop $data');
} }
), ),
new Container(height: 400.0), new Container(height: 400.0),
new HorizontalDraggable<int>( new HorizontalDraggable(
data: 1, data: 1,
child: new Text('H'), child: new Text('H'),
feedback: new Text('Dragging') feedback: new Text('Dragging')
), ),
new VerticalDraggable<int>( new VerticalDraggable(
data: 2, data: 2,
child: new Text('V'), child: new Text('V'),
feedback: new Text('Dragging') feedback: new Text('Dragging')
...@@ -453,21 +453,21 @@ void main() { ...@@ -453,21 +453,21 @@ void main() {
return new Block( return new Block(
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
children: <Widget>[ children: <Widget>[
new DragTarget<int>( new DragTarget(
builder: (BuildContext context, List<int> data, List<dynamic> rejects) { builder: (context, data, rejects) {
return new Text('Target'); return new Text('Target');
}, },
onAccept: (int data) { onAccept: (data) {
events.add('drop $data'); events.add('drop $data');
} }
), ),
new Container(width: 400.0), new Container(width: 400.0),
new HorizontalDraggable<int>( new HorizontalDraggable(
data: 1, data: 1,
child: new Text('H'), child: new Text('H'),
feedback: new Text('Dragging') feedback: new Text('Dragging')
), ),
new VerticalDraggable<int>( new VerticalDraggable(
data: 2, data: 2,
child: new Text('V'), child: new Text('V'),
feedback: new Text('Dragging') feedback: new Text('Dragging')
......
...@@ -31,7 +31,7 @@ final Map<String, RouteBuilder> routes = <String, RouteBuilder>{ ...@@ -31,7 +31,7 @@ final Map<String, RouteBuilder> routes = <String, RouteBuilder>{
), ),
}; };
class ThreeRoute extends MaterialPageRoute<Null> { class ThreeRoute extends MaterialPageRoute {
ThreeRoute() : super(builder: (BuildContext context) { ThreeRoute() : super(builder: (BuildContext context) {
return new Material( return new Material(
child: new Block(children: <Widget>[ child: new Block(children: <Widget>[
......
...@@ -69,7 +69,7 @@ void main() { ...@@ -69,7 +69,7 @@ void main() {
tester.pumpWidget(new MaterialApp(routes: routes)); tester.pumpWidget(new MaterialApp(routes: routes));
// Initially the barrier is not visible // Initially the barrier is not visible
expect(tester.findElementByKey(const ValueKey<String>('barrier')), isNull); expect(tester.findElementByKey(const ValueKey('barrier')), isNull);
// Tapping on X routes to the barrier // Tapping on X routes to the barrier
tester.tap(tester.findText('X')); tester.tap(tester.findText('X'));
...@@ -77,11 +77,11 @@ void main() { ...@@ -77,11 +77,11 @@ void main() {
tester.pump(const Duration(seconds: 1)); // end transition tester.pump(const Duration(seconds: 1)); // end transition
// Tap on the barrier to dismiss it // Tap on the barrier to dismiss it
tester.tap(tester.findElementByKey(const ValueKey<String>('barrier'))); tester.tap(tester.findElementByKey(const ValueKey('barrier')));
tester.pump(); // begin transition tester.pump(); // begin transition
tester.pump(const Duration(seconds: 1)); // end transition tester.pump(const Duration(seconds: 1)); // end transition
expect(tester.findElementByKey(const ValueKey<String>('barrier')), isNull, expect(tester.findElementByKey(const ValueKey('barrier')), isNull,
reason: 'because the barrier was dismissed'); reason: 'because the barrier was dismissed');
}); });
}); });
...@@ -103,7 +103,7 @@ class FirstComponent extends StatelessComponent { ...@@ -103,7 +103,7 @@ class FirstComponent extends StatelessComponent {
class SecondComponent extends StatelessComponent { class SecondComponent extends StatelessComponent {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return new ModalBarrier( return new ModalBarrier(
key: const ValueKey<String>('barrier'), key: const ValueKey('barrier'),
dismissable: true dismissable: true
); );
} }
......
...@@ -40,7 +40,7 @@ class SecondComponentState extends State<SecondComponent> { ...@@ -40,7 +40,7 @@ class SecondComponentState extends State<SecondComponent> {
} }
} }
typedef void ExceptionCallback(dynamic exception); typedef void ExceptionCallback(exception);
class ThirdComponent extends StatelessComponent { class ThirdComponent extends StatelessComponent {
ThirdComponent({ this.targetKey, this.onException }); ThirdComponent({ this.targetKey, this.onException });
...@@ -103,7 +103,7 @@ void main() { ...@@ -103,7 +103,7 @@ void main() {
dynamic exception; dynamic exception;
Widget widget = new ThirdComponent( Widget widget = new ThirdComponent(
targetKey: targetKey, targetKey: targetKey,
onException: (dynamic e) { onException: (e) {
exception = e; exception = e;
} }
); );
......
...@@ -70,12 +70,12 @@ void main() { ...@@ -70,12 +70,12 @@ void main() {
onGenerateRoute: (RouteSettings settings) { onGenerateRoute: (RouteSettings settings) {
switch (settings.name) { switch (settings.name) {
case '/': case '/':
return new TestRoute<Null>( return new TestRoute(
settings: settings, settings: settings,
child: new Builder( child: new Builder(
key: insideKey, key: insideKey,
builder: (BuildContext context) { builder: (BuildContext context) {
PageRoute<Null> route = ModalRoute.of(context); PageRoute route = ModalRoute.of(context);
return new Column( return new Column(
children: <Widget>[ children: <Widget>[
new TestTransition( new TestTransition(
...@@ -93,9 +93,9 @@ void main() { ...@@ -93,9 +93,9 @@ void main() {
} }
) )
); );
case '/2': return new TestRoute<Null>(settings: settings, child: new Text('E')); case '/2': return new TestRoute(settings: settings, child: new Text('E'));
case '/3': return new TestRoute<Null> (settings: settings, child: new Text('F')); case '/3': return new TestRoute(settings: settings, child: new Text('F'));
case '/4': return new TestRoute<Null> (settings: settings, child: new Text('G')); case '/4': return new TestRoute(settings: settings, child: new Text('G'));
} }
} }
) )
......
...@@ -8,7 +8,7 @@ import 'package:test/test.dart'; ...@@ -8,7 +8,7 @@ import 'package:test/test.dart';
import 'test_matchers.dart'; import 'test_matchers.dart';
class TestOverlayRoute extends OverlayRoute<Null> { class TestOverlayRoute extends OverlayRoute {
List<WidgetBuilder> get builders => <WidgetBuilder>[ _build ]; List<WidgetBuilder> get builders => <WidgetBuilder>[ _build ];
Widget _build(BuildContext context) => new Text('Overlay'); Widget _build(BuildContext context) => new Text('Overlay');
} }
......
...@@ -28,9 +28,9 @@ void main() { ...@@ -28,9 +28,9 @@ void main() {
key: navigatorKey, key: navigatorKey,
onGenerateRoute: (RouteSettings settings) { onGenerateRoute: (RouteSettings settings) {
if (settings.name == '/') if (settings.name == '/')
return new MaterialPageRoute<Null>(builder: (_) => new Container(child: new ThePositiveNumbers())); return new MaterialPageRoute(builder: (_) => new Container(child: new ThePositiveNumbers()));
else if (settings.name == '/second') else if (settings.name == '/second')
return new MaterialPageRoute<Null>(builder: (_) => new Container(child: new ThePositiveNumbers())); return new MaterialPageRoute(builder: (_) => new Container(child: new ThePositiveNumbers()));
return null; return null;
} }
)); ));
...@@ -47,10 +47,9 @@ void main() { ...@@ -47,10 +47,9 @@ void main() {
expect(tester.findText('10'), isNull); expect(tester.findText('10'), isNull);
expect(tester.findText('100'), isNull); expect(tester.findText('100'), isNull);
StatefulComponentElement target = StatefulComponentElement<ScrollableLazyList, ScrollableState<ScrollableLazyList>> target =
tester.findElement((Element element) => element.widget is ScrollableLazyList); tester.findElement((Element element) => element.widget is ScrollableLazyList);
ScrollableState targetState = target.state; target.state.scrollTo(1000.0);
targetState.scrollTo(1000.0);
tester.pump(new Duration(seconds: 1)); tester.pump(new Duration(seconds: 1));
// we're 600 pixels high, each item is 100 pixels high, scroll position is // we're 600 pixels high, each item is 100 pixels high, scroll position is
......
...@@ -144,7 +144,7 @@ void main() { ...@@ -144,7 +144,7 @@ void main() {
int snackBarCount = 0; int snackBarCount = 0;
Key tapTarget = new Key('tap-target'); Key tapTarget = new Key('tap-target');
int time; int time;
ScaffoldFeatureController<SnackBar, Null> lastController; ScaffoldFeatureController<SnackBar> lastController;
tester.pumpWidget(new MaterialApp( tester.pumpWidget(new MaterialApp(
routes: <String, RouteBuilder>{ routes: <String, RouteBuilder>{
'/': (RouteArguments args) { '/': (RouteArguments args) {
...@@ -176,7 +176,7 @@ void main() { ...@@ -176,7 +176,7 @@ void main() {
expect(tester.findText('bar2'), isNull); expect(tester.findText('bar2'), isNull);
time = 1000; time = 1000;
tester.tap(tester.findElementByKey(tapTarget)); // queue bar1 tester.tap(tester.findElementByKey(tapTarget)); // queue bar1
ScaffoldFeatureController<SnackBar, Null> firstController = lastController; ScaffoldFeatureController<SnackBar> firstController = lastController;
time = 2; time = 2;
tester.tap(tester.findElementByKey(tapTarget)); // queue bar2 tester.tap(tester.findElementByKey(tapTarget)); // queue bar2
expect(tester.findText('bar1'), isNull); expect(tester.findText('bar1'), isNull);
......
...@@ -47,7 +47,7 @@ void set scrollOffset(double value) { ...@@ -47,7 +47,7 @@ void set scrollOffset(double value) {
scrollableState.scrollTo(value); scrollableState.scrollTo(value);
} }
Future<Null> fling(double velocity) { Future fling(double velocity) {
return scrollableState.fling(velocity); return scrollableState.fling(velocity);
} }
......
...@@ -155,7 +155,7 @@ void main() { ...@@ -155,7 +155,7 @@ void main() {
Widget buildFrame(int index) { Widget buildFrame(int index) {
itemsPainted = <int>[]; itemsPainted = <int>[];
List<Widget> items = new List<Widget>.generate(itemCount, (int i) { List<Widget> items = new List<Widget>.generate(itemCount, (i) {
return new CustomPaint( return new CustomPaint(
child: new Text('$i'), child: new Text('$i'),
painter: new TestCallbackPainter( painter: new TestCallbackPainter(
...@@ -188,7 +188,7 @@ void main() { ...@@ -188,7 +188,7 @@ void main() {
Widget buildFrame(int index) { Widget buildFrame(int index) {
itemsTapped = <int>[]; itemsTapped = <int>[];
List<Widget> items = new List<Widget>.generate(itemCount, (int i) { List<Widget> items = new List<Widget>.generate(itemCount, (i) {
return new GestureDetector(child: new Text('$i'), onTap: () { itemsTapped.add(i); }); return new GestureDetector(child: new Text('$i'), onTap: () { itemsTapped.add(i); });
}); });
return new Center(child: new IndexedStack(children: items, key: key, index: index)); return new Center(child: new IndexedStack(children: items, key: key, index: index));
......
...@@ -20,25 +20,25 @@ bool _hasAncestorOfType(Element element, Type targetType) { ...@@ -20,25 +20,25 @@ bool _hasAncestorOfType(Element element, Type targetType) {
class _IsOnStage extends Matcher { class _IsOnStage extends Matcher {
const _IsOnStage(); const _IsOnStage();
bool matches(Element item, Map<dynamic, dynamic> matchState) => !_hasAncestorOfType(item, OffStage); bool matches(item, Map matchState) => !_hasAncestorOfType(item, OffStage);
Description describe(Description description) => description.add('onstage'); Description describe(Description description) => description.add('onstage');
} }
class _IsOffStage extends Matcher { class _IsOffStage extends Matcher {
const _IsOffStage(); const _IsOffStage();
bool matches(Element item, Map<dynamic, dynamic> matchState) => _hasAncestorOfType(item, OffStage); bool matches(item, Map matchState) => _hasAncestorOfType(item, OffStage);
Description describe(Description description) => description.add('offstage'); Description describe(Description description) => description.add('offstage');
} }
class _IsInCard extends Matcher { class _IsInCard extends Matcher {
const _IsInCard(); const _IsInCard();
bool matches(Element item, Map<dynamic, dynamic> matchState) => _hasAncestorOfType(item, Card); bool matches(item, Map matchState) => _hasAncestorOfType(item, Card);
Description describe(Description description) => description.add('in card'); Description describe(Description description) => description.add('in card');
} }
class _IsNotInCard extends Matcher { class _IsNotInCard extends Matcher {
const _IsNotInCard(); const _IsNotInCard();
bool matches(Element item, Map<dynamic, dynamic> matchState) => !_hasAncestorOfType(item, Card); bool matches(item, Map matchState) => !_hasAncestorOfType(item, Card);
Description describe(Description description) => description.add('not in card'); Description describe(Description description) => description.add('not in card');
} }
......
...@@ -55,7 +55,7 @@ class FlutterDriver { ...@@ -55,7 +55,7 @@ class FlutterDriver {
// //
// See: https://github.com/dart-lang/sdk/issues/25902 // See: https://github.com/dart-lang/sdk/issues/25902
if (isolate.pauseEvent is VMResumeEvent) { if (isolate.pauseEvent is VMResumeEvent) {
await new Future<Null>.delayed(new Duration(milliseconds: 300)); await new Future.delayed(new Duration(milliseconds: 300));
isolate = await vm.isolates.first.loadRunnable(); isolate = await vm.isolates.first.loadRunnable();
} }
...@@ -64,10 +64,10 @@ class FlutterDriver { ...@@ -64,10 +64,10 @@ class FlutterDriver {
// Attempts to resume the isolate, but does not crash if it fails because // Attempts to resume the isolate, but does not crash if it fails because
// the isolate is already resumed. There could be a race with other tools, // the isolate is already resumed. There could be a race with other tools,
// such as a debugger, any of which could have resumed the isolate. // such as a debugger, any of which could have resumed the isolate.
Future<Null> resumeLeniently() { Future resumeLeniently() {
_log.trace('Attempting to resume isolate'); _log.trace('Attempting to resume isolate');
return isolate.resume().catchError((dynamic e) { return isolate.resume().catchError((e) {
const int vmMustBePausedCode = 101; const vmMustBePausedCode = 101;
if (e is rpc.RpcException && e.code == vmMustBePausedCode) { if (e is rpc.RpcException && e.code == vmMustBePausedCode) {
// No biggie; something else must have resumed the isolate // No biggie; something else must have resumed the isolate
_log.warning( _log.warning(
...@@ -87,7 +87,7 @@ class FlutterDriver { ...@@ -87,7 +87,7 @@ class FlutterDriver {
_log.trace('Isolate is paused at start.'); _log.trace('Isolate is paused at start.');
// Waits for a signal from the VM service that the extension is registered // Waits for a signal from the VM service that the extension is registered
Future<Null> waitForServiceExtension() { Future waitForServiceExtension() {
return isolate.onExtensionAdded.firstWhere((String extension) { return isolate.onExtensionAdded.firstWhere((String extension) {
return extension == _kFlutterExtensionMethod; return extension == _kFlutterExtensionMethod;
}); });
...@@ -96,8 +96,8 @@ class FlutterDriver { ...@@ -96,8 +96,8 @@ class FlutterDriver {
// If the isolate is paused at the start, e.g. via the --start-paused // If the isolate is paused at the start, e.g. via the --start-paused
// option, then the VM service extension is not registered yet. Wait for // option, then the VM service extension is not registered yet. Wait for
// it to be registered. // it to be registered.
Future<Null> whenResumed = resumeLeniently(); Future whenResumed = resumeLeniently();
Future<Null> whenServiceExtensionReady = Future.any(<Future<dynamic>>[ Future whenServiceExtensionReady = Future.any(<Future>[
waitForServiceExtension(), waitForServiceExtension(),
// We will never receive the extension event if the user does not // We will never receive the extension event if the user does not
// register it. If that happens time out. // register it. If that happens time out.
...@@ -150,7 +150,7 @@ class FlutterDriver { ...@@ -150,7 +150,7 @@ class FlutterDriver {
Map<String, String> parameters = <String, String>{'command': command.kind} Map<String, String> parameters = <String, String>{'command': command.kind}
..addAll(command.serialize()); ..addAll(command.serialize());
return _appIsolate.invokeExtension(_kFlutterExtensionMethod, parameters) return _appIsolate.invokeExtension(_kFlutterExtensionMethod, parameters)
.then((Map<String, dynamic> result) => result, onError: (dynamic error, dynamic stackTrace) { .then((Map<String, dynamic> result) => result, onError: (error, stackTrace) {
throw new DriverError( throw new DriverError(
'Failed to fulfill ${command.runtimeType} due to remote error', 'Failed to fulfill ${command.runtimeType} due to remote error',
error, error,
...@@ -217,7 +217,7 @@ class FlutterDriver { ...@@ -217,7 +217,7 @@ class FlutterDriver {
dynamic value = await evaluator(); dynamic value = await evaluator();
MatchResult matchResult = match(value, matcher); MatchResult matchResult = match(value, matcher);
if (!matchResult.hasMatched) { if (!matchResult.hasMatched) {
return new Future<Null>.error(matchResult.mismatchDescription); return new Future.error(matchResult.mismatchDescription);
} }
return value; return value;
}, timeout, pauseBetweenRetries); }, timeout, pauseBetweenRetries);
...@@ -227,7 +227,7 @@ class FlutterDriver { ...@@ -227,7 +227,7 @@ class FlutterDriver {
/// ///
/// Returns a [Future] that fires once the connection has been closed. /// Returns a [Future] that fires once the connection has been closed.
// TODO(yjbanov): cleanup object references // TODO(yjbanov): cleanup object references
Future<Null> close() => _serviceClient.close().then((_) { Future close() => _serviceClient.close().then((_) {
// Don't leak vm_service_client-specific objects, if any // Don't leak vm_service_client-specific objects, if any
return null; return null;
}); });
...@@ -255,10 +255,10 @@ Future<VMServiceClient> _waitAndConnect(String url) async { ...@@ -255,10 +255,10 @@ Future<VMServiceClient> _waitAndConnect(String url) async {
Stopwatch timer = new Stopwatch(); Stopwatch timer = new Stopwatch();
Future<VMServiceClient> attemptConnection() { Future<VMServiceClient> attemptConnection() {
return VMServiceClient.connect(url) return VMServiceClient.connect(url)
.catchError((dynamic e) async { .catchError((e) async {
if (timer.elapsed < const Duration(seconds: 30)) { if (timer.elapsed < const Duration(seconds: 30)) {
_log.info('Waiting for application to start'); _log.info('Waiting for application to start');
await new Future<Null>.delayed(const Duration(seconds: 1)); await new Future.delayed(const Duration(seconds: 1));
return attemptConnection(); return attemptConnection();
} else { } else {
_log.critical( _log.critical(
......
...@@ -49,7 +49,7 @@ class _TextDescription implements Description { ...@@ -49,7 +49,7 @@ class _TextDescription implements Description {
return this; return this;
} }
Description addDescriptionOf(dynamic value) { Description addDescriptionOf(value) {
if (value is Matcher) { if (value is Matcher) {
value.describe(this); value.describe(this);
return this; return this;
...@@ -58,7 +58,7 @@ class _TextDescription implements Description { ...@@ -58,7 +58,7 @@ class _TextDescription implements Description {
} }
} }
Description addAll(String start, String separator, String end, Iterable<dynamic> list) { Description addAll(String start, String separator, String end, Iterable list) {
add(start); add(start);
if (list.isNotEmpty) { if (list.isNotEmpty) {
addDescriptionOf(list.first); addDescriptionOf(list.first);
......
...@@ -48,9 +48,9 @@ Future<dynamic> retry(Action action, Duration timeout, ...@@ -48,9 +48,9 @@ Future<dynamic> retry(Action action, Duration timeout,
if (success) if (success)
return result; return result;
else if (lastError != null) else if (lastError != null)
return new Future<Null>.error(lastError, lastStackTrace); return new Future.error(lastError, lastStackTrace);
else else
return new Future<Null>.error('Retry timed out'); return new Future.error('Retry timed out');
} }
/// A function that produces a [Stopwatch]. /// A function that produces a [Stopwatch].
......
...@@ -424,7 +424,7 @@ class ActionTween extends ActionInterval { ...@@ -424,7 +424,7 @@ class ActionTween extends ActionInterval {
} }
void update(double t) { void update(double t) {
dynamic newVal; var newVal;
if (startVal is Point) { if (startVal is Point) {
// Point // Point
......
...@@ -35,8 +35,8 @@ class PhysicsBody { ...@@ -35,8 +35,8 @@ class PhysicsBody {
bool bullet: false, bool bullet: false,
bool active: true, bool active: true,
this.gravityScale: 1.0, this.gravityScale: 1.0,
String collisionCategory: "Default", collisionCategory: "Default",
List<Object> collisionMask collisionMask: null
}) { }) {
this.density = density; this.density = density;
this.friction = friction; this.friction = friction;
......
...@@ -314,7 +314,7 @@ class PhysicsContact { ...@@ -314,7 +314,7 @@ class PhysicsContact {
final PhysicsShape shapeB; final PhysicsShape shapeB;
/// True if the two nodes are touching. /// True if the two nodes are touching.
final bool isTouching; final isTouching;
/// To ignore the collision to take place, you can set isEnabled to false /// To ignore the collision to take place, you can set isEnabled to false
/// during the preSolve phase. /// during the preSolve phase.
......
...@@ -164,7 +164,7 @@ class SpriteBox extends RenderBox { ...@@ -164,7 +164,7 @@ class SpriteBox extends RenderBox {
// Event handling // Event handling
void _addEventTargets(Node node, List<Node> eventTargets) { void _addEventTargets(Node node, List<Node> eventTargets) {
List<Node> children = node.children; List children = node.children;
int i = 0; int i = 0;
// Add childrens that are behind this node // Add childrens that are behind this node
......
...@@ -19,12 +19,12 @@ class SpriteSheet { ...@@ -19,12 +19,12 @@ class SpriteSheet {
assert(jsonDefinition != null); assert(jsonDefinition != null);
JsonDecoder decoder = new JsonDecoder(); JsonDecoder decoder = new JsonDecoder();
Map<dynamic, dynamic> file = decoder.convert(jsonDefinition); Map file = decoder.convert(jsonDefinition);
assert(file != null); assert(file != null);
List<dynamic> frames = file["frames"]; List frames = file["frames"];
for (Map<dynamic, dynamic> frameInfo in frames) { for (Map frameInfo in frames) {
String fileName = frameInfo["filename"]; String fileName = frameInfo["filename"];
Rect frame = _readJsonRect(frameInfo["frame"]); Rect frame = _readJsonRect(frameInfo["frame"]);
bool rotated = frameInfo["rotated"]; bool rotated = frameInfo["rotated"];
...@@ -33,13 +33,13 @@ class SpriteSheet { ...@@ -33,13 +33,13 @@ class SpriteSheet {
Size sourceSize = _readJsonSize(frameInfo["sourceSize"]); Size sourceSize = _readJsonSize(frameInfo["sourceSize"]);
Point pivot = _readJsonPoint(frameInfo["pivot"]); Point pivot = _readJsonPoint(frameInfo["pivot"]);
Texture texture = new Texture._fromSpriteFrame(_image, fileName, sourceSize, rotated, trimmed, frame, var texture = new Texture._fromSpriteFrame(_image, fileName, sourceSize, rotated, trimmed, frame,
spriteSourceSize, pivot); spriteSourceSize, pivot);
_textures[fileName] = texture; _textures[fileName] = texture;
} }
} }
Rect _readJsonRect(Map<dynamic, dynamic> data) { Rect _readJsonRect(Map data) {
num x = data["x"]; num x = data["x"];
num y = data["y"]; num y = data["y"];
num w = data["w"]; num w = data["w"];
...@@ -48,14 +48,14 @@ class SpriteSheet { ...@@ -48,14 +48,14 @@ class SpriteSheet {
return new Rect.fromLTRB(x.toDouble(), y.toDouble(), (x + w).toDouble(), (y + h).toDouble()); return new Rect.fromLTRB(x.toDouble(), y.toDouble(), (x + w).toDouble(), (y + h).toDouble());
} }
Size _readJsonSize(Map<dynamic, dynamic> data) { Size _readJsonSize(Map data) {
num w = data["w"]; num w = data["w"];
num h = data["h"]; num h = data["h"];
return new Size(w.toDouble(), h.toDouble()); return new Size(w.toDouble(), h.toDouble());
} }
Point _readJsonPoint(Map<dynamic, dynamic> data) { Point _readJsonPoint(Map data) {
num x = data["x"]; num x = data["x"];
num y = data["y"]; num y = data["y"];
......
...@@ -39,7 +39,7 @@ class VirtualJoystick extends NodeWithSize { ...@@ -39,7 +39,7 @@ class VirtualJoystick extends NodeWithSize {
else if (event.type == PointerUpEvent || event.type == PointerCancelEvent) { else if (event.type == PointerUpEvent || event.type == PointerCancelEvent) {
_pointerDownAt = null; _pointerDownAt = null;
_value = Point.origin; _value = Point.origin;
ActionTween moveToCenter = new ActionTween((Point a) => _handlePos = a, _handlePos, _center, 0.4, Curves.elasticOut); ActionTween moveToCenter = new ActionTween((a) => _handlePos = a, _handlePos, _center, 0.4, Curves.elasticOut);
actions.run(moveToCenter); actions.run(moveToCenter);
_isDown = false; _isDown = false;
} else if (event.type == PointerMoveEvent) { } else if (event.type == PointerMoveEvent) {
......
...@@ -72,10 +72,7 @@ class Instrumentation { ...@@ -72,10 +72,7 @@ class Instrumentation {
/// element. /// element.
Element findText(String text) { Element findText(String text) {
return findElement((Element element) { return findElement((Element element) {
if (element.widget is! Text) return element.widget is Text && element.widget.data == text;
return false;
Text textWidget = element.widget;
return textWidget.data == text;
}); });
} }
......
...@@ -37,7 +37,7 @@ import 'src/runner/flutter_command_runner.dart'; ...@@ -37,7 +37,7 @@ import 'src/runner/flutter_command_runner.dart';
/// Main entry point for commands. /// Main entry point for commands.
/// ///
/// This function is intended to be used from the [flutter] command line tool. /// This function is intended to be used from the [flutter] command line tool.
Future<Null> main(List<String> args) async { Future main(List<String> args) async {
bool help = args.contains('-h') || args.contains('--help'); bool help = args.contains('-h') || args.contains('--help');
bool verbose = args.contains('-v') || args.contains('--verbose'); bool verbose = args.contains('-v') || args.contains('--verbose');
bool verboseHelp = help && verbose; bool verboseHelp = help && verbose;
...@@ -73,7 +73,7 @@ Future<Null> main(List<String> args) async { ...@@ -73,7 +73,7 @@ Future<Null> main(List<String> args) async {
if (result is int) if (result is int)
exit(result); exit(result);
}, onError: (dynamic error, Chain chain) { }, onError: (error, Chain chain) {
if (error is UsageException) { if (error is UsageException) {
stderr.writeln(error); stderr.writeln(error);
// Argument error exit code. // Argument error exit code.
......
...@@ -336,7 +336,6 @@ class AnalyzeCommand extends FlutterCommand { ...@@ -336,7 +336,6 @@ class AnalyzeCommand extends FlutterCommand {
RegExp generalPattern = new RegExp(r'^\[(error|warning|hint|lint)\] (.+) \(([^(),]+), line ([0-9]+), col ([0-9]+)\)$'); RegExp generalPattern = new RegExp(r'^\[(error|warning|hint|lint)\] (.+) \(([^(),]+), line ([0-9]+), col ([0-9]+)\)$');
RegExp allowedIdentifiersPattern = new RegExp(r'_?([A-Z]|_+)\b'); RegExp allowedIdentifiersPattern = new RegExp(r'_?([A-Z]|_+)\b');
RegExp classesWithOptionalTypeArgumentsPattern = new RegExp(r'\b(GlobalKey|State|ScrollableState|Element|StatelessComponentElement|TypeMatcher)\b');
RegExp constructorTearOffsPattern = new RegExp('.+#.+// analyzer doesn\'t like constructor tear-offs'); RegExp constructorTearOffsPattern = new RegExp('.+#.+// analyzer doesn\'t like constructor tear-offs');
RegExp conflictingNamesPattern = new RegExp('^The imported libraries \'([^\']+)\' and \'([^\']+)\' cannot have the same name \'([^\']+)\'\$'); RegExp conflictingNamesPattern = new RegExp('^The imported libraries \'([^\']+)\' and \'([^\']+)\' cannot have the same name \'([^\']+)\'\$');
RegExp missingFilePattern = new RegExp('^Target of URI does not exist: \'([^\')]+)\'\$'); RegExp missingFilePattern = new RegExp('^Target of URI does not exist: \'([^\')]+)\'\$');
...@@ -389,11 +388,6 @@ class AnalyzeCommand extends FlutterCommand { ...@@ -389,11 +388,6 @@ class AnalyzeCommand extends FlutterCommand {
} else if (level == 'lint' && errorMessage == 'Name non-constant identifiers using lowerCamelCase.') { } else if (level == 'lint' && errorMessage == 'Name non-constant identifiers using lowerCamelCase.') {
if (allowedIdentifiersPattern.matchAsPrefix(sourceLine, colNumber-1) != null) if (allowedIdentifiersPattern.matchAsPrefix(sourceLine, colNumber-1) != null)
shouldIgnore = true; shouldIgnore = true;
} else if (level == 'lint' && errorMessage == 'Specify type annotations.') {
// we want the type annotations on certain classes to be optional.
// see https://github.com/dart-lang/linter/issues/196
if (classesWithOptionalTypeArgumentsPattern.matchAsPrefix(sourceLine, colNumber-1) != null)
shouldIgnore = true;
} else if (constructorTearOffsPattern.allMatches(sourceLine).isNotEmpty) { } else if (constructorTearOffsPattern.allMatches(sourceLine).isNotEmpty) {
shouldIgnore = true; shouldIgnore = true;
} }
......
...@@ -10,7 +10,7 @@ import 'package:newton/newton.dart'; ...@@ -10,7 +10,7 @@ import 'package:newton/newton.dart';
void main() { void main() {
test('test_friction', () { test('test_friction', () {
FrictionSimulation friction = new FrictionSimulation(0.3, 100.0, 400.0); var friction = new FrictionSimulation(0.3, 100.0, 400.0);
friction.tolerance = const Tolerance(velocity: 1.0); friction.tolerance = const Tolerance(velocity: 1.0);
...@@ -32,18 +32,18 @@ void main() { ...@@ -32,18 +32,18 @@ void main() {
test('test_friction_through', () { test('test_friction_through', () {
// Use a normal FrictionSimulation to generate start and end // Use a normal FrictionSimulation to generate start and end
// velocity and positions with drag = 0.025. // velocity and positions with drag = 0.025.
double startPosition = 10.0; var startPosition = 10.0;
double startVelocity = 600.0; var startVelocity = 600.0;
FrictionSimulation f = new FrictionSimulation(0.025, startPosition, startVelocity); var f = new FrictionSimulation(0.025, startPosition, startVelocity);
double endPosition = f.x(1.0); var endPosition = f.x(1.0);
double endVelocity = f.dx(1.0); var endVelocity = f.dx(1.0);
expect(endPosition, greaterThan(startPosition)); expect(endPosition, greaterThan(startPosition));
expect(endVelocity, lessThan(startVelocity)); expect(endVelocity, lessThan(startVelocity));
// Verify that that the "through" FrictionSimulation ends up at // Verify that that the "through" FrictionSimulation ends up at
// endPosition and endVelocity; implies that it computed the right // endPosition and endVelocity; implies that it computed the right
// value for _drag. // value for _drag.
FrictionSimulation friction = new FrictionSimulation.through( var friction = new FrictionSimulation.through(
startPosition, endPosition, startVelocity, endVelocity); startPosition, endPosition, startVelocity, endVelocity);
expect(friction.isDone(0.0), false); expect(friction.isDone(0.0), false);
expect(friction.x(0.0), 10.0); expect(friction.x(0.0), 10.0);
...@@ -72,7 +72,7 @@ void main() { ...@@ -72,7 +72,7 @@ void main() {
}); });
test('test_gravity', () { test('test_gravity', () {
GravitySimulation gravity = new GravitySimulation(200.0, 100.0, 600.0, 0.0); var gravity = new GravitySimulation(200.0, 100.0, 600.0, 0.0);
expect(gravity.isDone(0.0), false); expect(gravity.isDone(0.0), false);
expect(gravity.x(0.0), 100.0); expect(gravity.x(0.0), 100.0);
...@@ -102,7 +102,7 @@ void main() { ...@@ -102,7 +102,7 @@ void main() {
}); });
test('spring_types', () { test('spring_types', () {
SpringSimulation crit = new SpringSimulation(new SpringDescription.withDampingRatio( var crit = new SpringSimulation(new SpringDescription.withDampingRatio(
mass: 1.0, springConstant: 100.0), 0.0, 300.0, 0.0); mass: 1.0, springConstant: 100.0), 0.0, 300.0, 0.0);
expect(crit.type, SpringType.criticallyDamped); expect(crit.type, SpringType.criticallyDamped);
...@@ -110,23 +110,23 @@ void main() { ...@@ -110,23 +110,23 @@ void main() {
mass: 1.0, springConstant: 100.0, ratio: 1.0), 0.0, 300.0, 0.0); mass: 1.0, springConstant: 100.0, ratio: 1.0), 0.0, 300.0, 0.0);
expect(crit.type, SpringType.criticallyDamped); expect(crit.type, SpringType.criticallyDamped);
SpringSimulation under = new SpringSimulation(new SpringDescription.withDampingRatio( var under = new SpringSimulation(new SpringDescription.withDampingRatio(
mass: 1.0, springConstant: 100.0, ratio: 0.75), 0.0, 300.0, 0.0); mass: 1.0, springConstant: 100.0, ratio: 0.75), 0.0, 300.0, 0.0);
expect(under.type, SpringType.underDamped); expect(under.type, SpringType.underDamped);
SpringSimulation over = new SpringSimulation(new SpringDescription.withDampingRatio( var over = new SpringSimulation(new SpringDescription.withDampingRatio(
mass: 1.0, springConstant: 100.0, ratio: 1.25), 0.0, 300.0, 0.0); mass: 1.0, springConstant: 100.0, ratio: 1.25), 0.0, 300.0, 0.0);
expect(over.type, SpringType.overDamped); expect(over.type, SpringType.overDamped);
// Just so we don't forget how to create a desc without the ratio. // Just so we don't forget how to create a desc without the ratio.
SpringSimulation other = new SpringSimulation( var other = new SpringSimulation(
new SpringDescription(mass: 1.0, springConstant: 100.0, damping: 20.0), new SpringDescription(mass: 1.0, springConstant: 100.0, damping: 20.0),
0.0, 20.0, 20.0); 0.0, 20.0, 20.0);
expect(other.type, SpringType.criticallyDamped); expect(other.type, SpringType.criticallyDamped);
}); });
test('crit_spring', () { test('crit_spring', () {
SpringSimulation crit = new SpringSimulation(new SpringDescription.withDampingRatio( var crit = new SpringSimulation(new SpringDescription.withDampingRatio(
mass: 1.0, springConstant: 100.0, ratio: 1.0), 0.0, 500.0, 0.0); mass: 1.0, springConstant: 100.0, ratio: 1.0), 0.0, 500.0, 0.0);
crit.tolerance = const Tolerance(distance: 0.01, velocity: 0.01); crit.tolerance = const Tolerance(distance: 0.01, velocity: 0.01);
...@@ -151,7 +151,7 @@ void main() { ...@@ -151,7 +151,7 @@ void main() {
}); });
test('overdamped_spring', () { test('overdamped_spring', () {
SpringSimulation over = new SpringSimulation(new SpringDescription.withDampingRatio( var over = new SpringSimulation(new SpringDescription.withDampingRatio(
mass: 1.0, springConstant: 100.0, ratio: 1.25), 0.0, 500.0, 0.0); mass: 1.0, springConstant: 100.0, ratio: 1.25), 0.0, 500.0, 0.0);
over.tolerance = const Tolerance(distance: 0.01, velocity: 0.01); over.tolerance = const Tolerance(distance: 0.01, velocity: 0.01);
...@@ -173,7 +173,7 @@ void main() { ...@@ -173,7 +173,7 @@ void main() {
}); });
test('underdamped_spring', () { test('underdamped_spring', () {
SpringSimulation under = new SpringSimulation(new SpringDescription.withDampingRatio( var under = new SpringSimulation(new SpringDescription.withDampingRatio(
mass: 1.0, springConstant: 100.0, ratio: 0.25), 0.0, 300.0, 0.0); mass: 1.0, springConstant: 100.0, ratio: 0.25), 0.0, 300.0, 0.0);
expect(under.type, SpringType.underDamped); expect(under.type, SpringType.underDamped);
...@@ -190,16 +190,16 @@ void main() { ...@@ -190,16 +190,16 @@ void main() {
}); });
test('test_kinetic_scroll', () { test('test_kinetic_scroll', () {
SpringDescription spring = new SpringDescription.withDampingRatio( var spring = new SpringDescription.withDampingRatio(
mass: 1.0, springConstant: 50.0, ratio: 0.5); mass: 1.0, springConstant: 50.0, ratio: 0.5);
ScrollSimulation scroll = new ScrollSimulation(100.0, 800.0, 0.0, 300.0, spring, 0.3); var scroll = new ScrollSimulation(100.0, 800.0, 0.0, 300.0, spring, 0.3);
scroll.tolerance = const Tolerance(velocity: 0.5, distance: 0.1); scroll.tolerance = const Tolerance(velocity: 0.5, distance: 0.1);
expect(scroll.isDone(0.0), false); expect(scroll.isDone(0.0), false);
expect(scroll.isDone(0.5), false); // switch from friction to spring expect(scroll.isDone(0.5), false); // switch from friction to spring
expect(scroll.isDone(3.5), true); expect(scroll.isDone(3.5), true);
ScrollSimulation scroll2 = new ScrollSimulation(100.0, -800.0, 0.0, 300.0, spring, 0.3); var scroll2 = new ScrollSimulation(100.0, -800.0, 0.0, 300.0, spring, 0.3);
scroll2.tolerance = const Tolerance(velocity: 0.5, distance: 0.1); scroll2.tolerance = const Tolerance(velocity: 0.5, distance: 0.1);
expect(scroll2.isDone(0.0), false); expect(scroll2.isDone(0.0), false);
expect(scroll2.isDone(0.5), false); // switch from friction to spring expect(scroll2.isDone(0.5), false); // switch from friction to spring
...@@ -207,10 +207,10 @@ void main() { ...@@ -207,10 +207,10 @@ void main() {
}); });
test('scroll_with_inf_edge_ends', () { test('scroll_with_inf_edge_ends', () {
SpringDescription spring = new SpringDescription.withDampingRatio( var spring = new SpringDescription.withDampingRatio(
mass: 1.0, springConstant: 50.0, ratio: 0.5); mass: 1.0, springConstant: 50.0, ratio: 0.5);
ScrollSimulation scroll = var scroll =
new ScrollSimulation(100.0, 400.0, 0.0, double.INFINITY, spring, 0.3); new ScrollSimulation(100.0, 400.0, 0.0, double.INFINITY, spring, 0.3);
scroll.tolerance = const Tolerance(velocity: 1.0); scroll.tolerance = const Tolerance(velocity: 1.0);
...@@ -233,8 +233,8 @@ void main() { ...@@ -233,8 +233,8 @@ void main() {
}); });
test('over/under scroll spring', () { test('over/under scroll spring', () {
SpringDescription spring = new SpringDescription.withDampingRatio(mass: 1.0, springConstant: 170.0, ratio: 1.1); var spring = new SpringDescription.withDampingRatio(mass: 1.0, springConstant: 170.0, ratio: 1.1);
ScrollSimulation scroll = new ScrollSimulation(500.0, -7500.0, 0.0, 1000.0, spring, 0.025); var scroll = new ScrollSimulation(500.0, -7500.0, 0.0, 1000.0, spring, 0.025);
scroll.tolerance = new Tolerance(velocity: 45.0, distance: 1.5); scroll.tolerance = new Tolerance(velocity: 45.0, distance: 1.5);
expect(scroll.isDone(0.0), false); expect(scroll.isDone(0.0), false);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment