Commit f41b3411 authored by Ian Hickson's avatar Ian Hickson

Merge pull request #2639 from Hixie/always_specify_types

Almost enable always_specify_types lint
parents e33d8d96 d162d98c
...@@ -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 _sunshineURL = "http://www.walltor.com/images/wallpaper/good-morning-sunshine-58540.jpg"; static const String _sunshineURL = "http://www.walltor.com/images/wallpaper/good-morning-sunshine-58540.jpg";
static const kCardMargins = 8.0; static const double 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((args) => new Size(args[0], args[1])) .map((List<double> 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 load(MediaServiceProxy mediaService) async { Future<Null> 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 loadSounds() async { Future<Null> 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<MediaPlayerPrepareResponseParams>> pending = <Future<MediaPlayerPrepareResponseParams>>[]; List<Future<Null>> pending = <Future<Null>>[];
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 mediumGray = const Color(0xff555555); const Color mediumGray = const Color(0xff555555);
const darkGray = const Color(0xff222222); const Color 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 main() async { Future<Null> 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( Navigator.push(context, new MaterialPageRoute<Null>(
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( Navigator.push(context, new MaterialPageRoute<Null>(
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( Navigator.push(context, new MaterialPageRoute<Null>(
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.fromIterable(demos, value: (_ButtonDemo demo) => demo.tabLabel) labels: new Map<_ButtonDemo, TabLabel>.fromIterable(demos, value: (_ButtonDemo demo) => demo.tabLabel)
) )
), ),
body: new TabBarView( body: new TabBarView<_ButtonDemo>(
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 blackTextStyle = Typography.black.body1; final TextStyle blackTextStyle = Typography.black.body1;
final whiteTextStyle = Typography.white.body1; final TextStyle 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.fromIterable(colorSwatches, value: (ColorSwatch swatch) { labels: new Map<ColorSwatch, TabLabel>.fromIterable(colorSwatches, value: (ColorSwatch swatch) {
return new TabLabel(text: swatch.name); return new TabLabel(text: swatch.name);
}) })
) )
), ),
body: new TabBarView( body: new TabBarView<ColorSwatch>(
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 _handleSelectDate() async { Future<Null> _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({ BuildContext context, Dialog dialog }) { void showDemoDialog/*<T>*/({ BuildContext context, Dialog dialog }) {
showDialog( showDialog/*<T>*/(
context: context, context: context,
child: dialog child: dialog
) )
.then((dynamic value) { // The value passed to Navigator.pop() or null. .then((dynamic/*=T*/ 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( showDemoDialog/*<DialogDemoAction>*/(
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( showDemoDialog/*<DialogDemoAction>*/(
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( showDemoDialog/*<String>*/(
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((value) { // The value passed to Navigator.pop() or null. .then((TimeOfDay 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( Navigator.push(context, new MaterialPageRoute<Null>(
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 _loadAssets(AssetBundle bundle) async { Future<Null> _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 _kTwoPI = math.PI * 2.0; static const double _kTwoPI = math.PI * 2.0;
static const _kEpsilon = .0000001; static const double _kEpsilon = .0000001;
static const _kSweep = _kTwoPI - _kEpsilon; static const double _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( Navigator.push(context, new MaterialPageRoute<Null>(
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> items = <PopupMenuItem<GridDemoTileStyle>>[ final List<PopupMenuItem<GridDemoTileStyle>> 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.generate(16, (int index) { leaveBehindItems = new List<LeaveBehindItem>.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>[ items: <PopupMenuEntry<LeaveBehindDemoAction>>[
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>();
ScaffoldFeatureController _bottomSheet; PersistentBottomSheetController<Null> _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( new CheckedPopupMenuItem<String>(
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(context: context, builder: (_) { showModalBottomSheet/*<Null>*/(context: context, builder: (BuildContext context) {
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 selection = TabBarSelection.of(context); final TabBarSelectionState<IconData> selection = TabBarSelection.of/*<IconData>*/(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( child: new TabBarView<IconData>(
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(builder: builder)); Navigator.push(context, new MaterialPageRoute<Null>(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( return new TabBarSelection<IconData>(
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<String>( tabBar: new TabBar<IconData>(
isScrollable: true, isScrollable: true,
labels: new Map.fromIterable( labels: new Map<IconData, TabLabel>.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( body: new TabBarView<IconData>(
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.fromIterable(pages, value: (_Page page) => page.tabLabel) labels: new Map<_Page, TabLabel>.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(children: pages.map(buildTabView).toList()) body: new TabBarView<_Page>(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 _handleSelectTime() async { Future<Null> _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 _loadAssets(AssetBundle bundle) async { Future<Null> _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( Navigator.push(context, new MaterialPageRoute<Null>(
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( Navigator.push(context, new MaterialPageRoute<Null>(
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 _getRoute(RouteSettings settings) { Route<Null> _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( return new MaterialPageRoute<Null>(
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 _kChunkCount = 30; const int _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( showModalBottomSheet/*<int, double>*/( // XXXXXX DO NOT CHECK IN XXXXXX THIS IS A CHECK OF THE ANALYZER
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( body: new TabBarView<StockHomeTab>(
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('stock-list'), key: const ValueKey<String>('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,11 +17,12 @@ void main() { ...@@ -17,11 +17,12 @@ 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<Text> tab = tester.findText('MARKET'); Element tab = tester.findText('MARKET');
expect(tab, isNotNull); expect(tab, isNotNull);
tester.setLocale("es", "US"); tester.setLocale("es", "US");
tester.pump(); tester.pump();
expect(tab.widget.data, equals("MERCADO")); Text text = tab.widget;
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.delayed(new Duration(milliseconds: 500)); await new Future<Null>.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.delayed(new Duration(milliseconds: 500)); await new Future<Null>.delayed(new Duration(milliseconds: 500));
} }
}); });
}); });
......
...@@ -18,108 +18,121 @@ class Expression extends _EquationMember { ...@@ -18,108 +18,121 @@ class Expression extends _EquationMember {
bool get isConstant => terms.length == 0; bool get isConstant => terms.length == 0;
@override @override
double get value => terms.fold(constant, (value, term) => value + term.value); double get value => terms.fold(constant, (double value, Term term) => value + term.value);
@override @override
Expression asExpression() => this; Expression asExpression() => this;
Constraint _createConstraint( Constraint _createConstraint(_EquationMember /* rhs */ value, Relation relation) {
_EquationMember /* rhs */ value, Relation relation) {
if (value is ConstantMember) { if (value is ConstantMember) {
return new Constraint( return new Constraint(
new Expression(new List.from(terms), constant - value.value), new Expression(new List<Term>.from(terms), constant - value.value),
relation); relation
);
} }
if (value is Param) { if (value is Param) {
var newTerms = new List<Term>.from(terms) List<Term> 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) {
var newTerms = new List<Term>.from(terms) List<Term> 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) {
var newTerms = value.terms.fold(new List<Term>.from(terms), List<Term> newTerms = value.terms.fold(
(list, t) => list..add(new Term(t.variable, -t.coefficient))); new List<Term>.from(terms),
(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), relation); new Expression(newTerms, constant - value.constant),
relation
);
} }
assert(false); assert(false);
return null; return null;
} }
@override @override
Constraint operator >=(_EquationMember value) => Constraint operator >=(_EquationMember value) {
_createConstraint(value, Relation.greaterThanOrEqualTo); return _createConstraint(value, Relation.greaterThanOrEqualTo);
}
@override @override
Constraint operator <=(_EquationMember value) => Constraint operator <=(_EquationMember value) {
_createConstraint(value, Relation.lessThanOrEqualTo); return _createConstraint(value, Relation.lessThanOrEqualTo);
}
@override @override
Constraint equals(_EquationMember value) => Constraint equals(_EquationMember value) {
_createConstraint(value, Relation.equalTo); return _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.from(terms), constant + m.value); return new Expression(new List<Term>.from(terms), constant + m.value);
}
if (m is Param) { if (m is Param) {
return new Expression( return new Expression(
new List.from(terms)..add(new Term(m.variable, 1.0)), constant); new List<Term>.from(terms)..add(new Term(m.variable, 1.0)),
constant
);
} }
if (m is Term) { if (m is Term)
return new Expression(new List.from(terms)..add(m), constant); return new Expression(new List<Term>.from(terms)..add(m), constant);
}
if (m is Expression) { if (m is Expression) {
return new Expression( return new Expression(
new List.from(terms)..addAll(m.terms), constant + m.constant); new List<Term>.from(terms)..addAll(m.terms),
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.from(terms), constant - m.value); return new Expression(new List<Term>.from(terms), constant - m.value);
}
if (m is Param) { if (m is Param) {
return new Expression( return new Expression(
new List.from(terms)..add(new Term(m.variable, -1.0)), constant); new List<Term>.from(terms)..add(new Term(m.variable, -1.0)),
constant
);
} }
if (m is Term) { if (m is Term) {
return new Expression(new List.from(terms) return new Expression(new List<Term>.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) {
var copiedTerms = new List<Term>.from(terms); List<Term> copiedTerms = new List<Term>.from(terms);
m.terms.forEach( for (Term t in m.terms)
(t) => copiedTerms.add(new Term(t.variable, -t.coefficient))); 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) {
var newTerms = terms.fold(new List<Term>(), (list, term) => list List<Term> newTerms = terms.fold(
..add(new Term(term.variable, term.coefficient * m))); new List<Term>(),
(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);
} }
...@@ -127,17 +140,14 @@ class Expression extends _EquationMember { ...@@ -127,17 +140,14 @@ 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(m.asExpression(), this.value); return new _Pair<Expression, double>(m.asExpression(), this.value);
}
if (m.isConstant) { if (m.isConstant)
return new _Pair(this.asExpression(), m.value); return new _Pair<Expression, double>(this.asExpression(), m.value);
}
assert(false); assert(false);
return null; return null;
...@@ -148,8 +158,9 @@ class Expression extends _EquationMember { ...@@ -148,8 +158,9 @@ class Expression extends _EquationMember {
if (args == null) { if (args == null) {
throw new ParserException( throw new ParserException(
'Could not find constant multiplicand or multiplier', [this, m]); 'Could not find constant multiplicand or multiplier',
return null; <_EquationMember>[this, m]
);
} }
return args.first._applyMultiplicand(args.second); return args.first._applyMultiplicand(args.second);
...@@ -168,7 +179,7 @@ class Expression extends _EquationMember { ...@@ -168,7 +179,7 @@ class Expression extends _EquationMember {
String toString() { String toString() {
StringBuffer buffer = new StringBuffer(); StringBuffer buffer = new StringBuffer();
terms.forEach((t) => buffer.write('$t')); terms.forEach((Term 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([new Term(variable, 1.0)], 0.0); Expression asExpression() => new Expression(<Term>[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((s, v) => insertSymbol(s, v * coefficient)); other.cells.forEach((_Symbol s, double 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((s, v) => cells[s] = -v); cells.forEach((_Symbol s, double 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((s, v) => cells[s] = v * coefficient); cells.forEach((_Symbol s, double v) => cells[s] = v * coefficient);
} }
void solveForSymbols(_Symbol lhs, _Symbol rhs) { void solveForSymbols(_Symbol lhs, _Symbol rhs) {
...@@ -70,8 +70,9 @@ class _Row { ...@@ -70,8 +70,9 @@ class _Row {
buffer.write(constant); buffer.write(constant);
cells.forEach((symbol, value) => cells.forEach((_Symbol symbol, double 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;
var removed = _rows.remove(rowPair.first); _Row 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 flushUpdates() { Set<dynamic> flushUpdates() {
Set updates = new HashSet<dynamic>(); Set<dynamic> 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,10 +189,12 @@ class Solver { ...@@ -189,10 +189,12 @@ class Solver {
return updates; return updates;
} }
Result _bulkEdit(Iterable items, Result _bulkEdit(
_SolverBulkUpdate applier, Iterable<dynamic> items,
_SolverBulkUpdate undoer) { _SolverBulkUpdate applier,
List applied = new List(); _SolverBulkUpdate undoer
) {
List<dynamic> applied = <dynamic>[];
bool needsCleanup = false; bool needsCleanup = false;
Result result = Result.success; Result result = Result.success;
...@@ -231,7 +233,7 @@ class Solver { ...@@ -231,7 +233,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) { expr.terms.forEach((Term term) {
if (!_nearZero(term.coefficient)) { if (!_nearZero(term.coefficient)) {
_Symbol symbol = _symbolForVariable(term.variable); _Symbol symbol = _symbolForVariable(term.variable);
...@@ -397,9 +399,9 @@ class Solver { ...@@ -397,9 +399,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(null, null); _Pair<_Symbol, _Row> result = new _Pair<_Symbol, _Row>(null, null);
_rows.forEach((symbol, row) { _rows.forEach((_Symbol symbol, _Row row) {
if (symbol.type != _SymbolType.external) { if (symbol.type != _SymbolType.external) {
double temp = row.coefficientForSymbol(entering); double temp = row.coefficientForSymbol(entering);
...@@ -423,7 +425,7 @@ class Solver { ...@@ -423,7 +425,7 @@ class Solver {
} }
void _substitute(_Symbol symbol, _Row row) { void _substitute(_Symbol symbol, _Row row) {
_rows.forEach((first, second) { _rows.forEach((_Symbol first, _Row 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);
...@@ -470,7 +472,7 @@ class Solver { ...@@ -470,7 +472,7 @@ class Solver {
_Pair<_Symbol, _Row> first, second, third; _Pair<_Symbol, _Row> first, second, third;
_rows.forEach((symbol, row) { _rows.forEach((_Symbol symbol, _Row row) {
double c = row.coefficientForSymbol(marker); double c = row.coefficientForSymbol(marker);
if (c == 0.0) { if (c == 0.0) {
...@@ -478,18 +480,18 @@ class Solver { ...@@ -478,18 +480,18 @@ class Solver {
} }
if (symbol.type == _SymbolType.external) { if (symbol.type == _SymbolType.external) {
third = new _Pair(symbol, row); third = new _Pair<_Symbol, _Row>(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); first = new _Pair<_Symbol, _Row>(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); second = new _Pair<_Symbol, _Row>(symbol, row);
} }
} }
}); });
...@@ -596,28 +598,33 @@ class Solver { ...@@ -596,28 +598,33 @@ class Solver {
// Tableau // Tableau
buffer.writeln(separator + " Tableau"); buffer.writeln(separator + " Tableau");
_rows.forEach((symbol, row) { _rows.forEach((_Symbol symbol, _Row row) {
buffer.write(symbol.toString()); buffer.writeln('$symbol | $row');
buffer.write(" | ");
buffer.writeln(row.toString());
}); });
// Infeasible // Infeasible
buffer.writeln(separator + " Infeasible"); buffer.writeln(separator + " Infeasible");
_infeasibleRows.forEach((symbol) => buffer.writeln(symbol.toString())); _infeasibleRows.forEach((_Symbol symbol) {
buffer.writeln(symbol);
});
// Variables // Variables
buffer.writeln(separator + " Variables"); buffer.writeln(separator + " Variables");
_vars.forEach((variable, symbol) => _vars.forEach((Variable variable, _Symbol symbol) {
buffer.writeln("${variable.toString()} = ${symbol.toString()}")); buffer.writeln('$variable = $symbol');
});
// Edit Variables // Edit Variables
buffer.writeln(separator + " Edit Variables"); buffer.writeln(separator + " Edit Variables");
_edits.forEach((variable, editinfo) => buffer.writeln(variable)); _edits.forEach((Variable variable, _EditInfo editinfo) {
buffer.writeln(variable);
});
// Constraints // Constraints
buffer.writeln(separator + " Constraints"); buffer.writeln(separator + " Constraints");
_constraints.forEach((constraint, _) => buffer.writeln(constraint)); _constraints.forEach((Constraint constraint, _Tag tag) {
buffer.writeln(constraint);
});
return buffer.toString(); return buffer.toString();
} }
......
This diff is collapsed.
...@@ -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 forward({ double from }) { Future<Null> 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 reverse({ double from }) { Future<Null> 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 animateTo(double target, { Duration duration, Curve curve: Curves.linear }) { Future<Null> 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.value(); return new Future<Null>.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 repeat({ double min, double max, Duration period }) { Future<Null> 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 fling({ double velocity: 1.0, Force force }) { Future<Null> 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 animateWith(Simulation simulation) { Future<Null> animateWith(Simulation simulation) {
stop(); stop();
return _startSimulation(simulation); return _startSimulation(simulation);
} }
Future _startSimulation(Simulation simulation) { Future<Null> _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 result = _ticker.start(); Future<Null> 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/*<T>*/ _withClient/*<T>*/(Future/*<T>*/ fn(MojoClient client)) { Future<dynamic/*=T*/> _withClient/*<T>*/(Future<dynamic/*=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( return new MaterialPageRoute<Null>(
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 _childKey = new GlobalKey(debugLabel: 'BottomSheet child'); final GlobalKey _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 extends StatefulComponent { class _ModalBottomSheet<T> extends StatefulComponent {
_ModalBottomSheet({ Key key, this.route }) : super(key: key); _ModalBottomSheet({ Key key, this.route }) : super(key: key);
final _ModalBottomSheetRoute route; final _ModalBottomSheetRoute<T> route;
_ModalBottomSheetState createState() => new _ModalBottomSheetState(); _ModalBottomSheetState<T> createState() => new _ModalBottomSheetState<T>();
} }
class _ModalBottomSheetState extends State<_ModalBottomSheet> { class _ModalBottomSheetState<T> extends State<_ModalBottomSheet<T>> {
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(route: this); return new _ModalBottomSheet<T>(route: this);
} }
} }
Future showModalBottomSheet({ BuildContext context, WidgetBuilder builder }) { Future<dynamic/*=T*/> showModalBottomSheet/*<T>*/({ BuildContext context, WidgetBuilder builder }) {
assert(context != null); assert(context != null);
assert(builder != null); assert(builder != null);
final Completer completer = new Completer(); final Completer<dynamic/*=T*/> completer = new Completer<dynamic/*=T*/>();
Navigator.push(context, new _ModalBottomSheetRoute( Navigator.push(context, new _ModalBottomSheetRoute<dynamic/*=T*/>(
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 transparent = const Color(0x00000000); static const Color transparent = const Color(0x00000000);
static const black = const Color(0xFF000000); static const Color black = const Color(0xFF000000);
static const black87 = const Color(0xDD000000); static const Color black87 = const Color(0xDD000000);
static const black54 = const Color(0x8A000000); static const Color black54 = const Color(0x8A000000);
static const black45 = const Color(0x73000000); // mask color static const Color black45 = const Color(0x73000000); // mask color
static const black26 = const Color(0x42000000); // disabled radio buttons and text of disabled flat buttons in light theme static const Color black26 = const Color(0x42000000); // disabled radio buttons and text of disabled flat buttons in light theme
static const black12 = const Color(0x1F000000); // background of disabled raised buttons in light theme static const Color black12 = const Color(0x1F000000); // background of disabled raised buttons in light theme
static const white = const Color(0xFFFFFFFF); static const Color white = const Color(0xFFFFFFFF);
static const white70 = const Color(0xB3FFFFFF); static const Color white70 = const Color(0xB3FFFFFF);
static const white30 = const Color(0x4DFFFFFF); // disabled radio buttons and text of disabled flat buttons in dark theme static const Color white30 = const Color(0x4DFFFFFF); // disabled radio buttons and text of disabled flat buttons in dark theme
static const white12 = const Color(0x1FFFFFFF); // background of disabled raised buttons in dark theme static const Color white12 = const Color(0x1FFFFFFF); // background of disabled raised buttons in dark theme
static const white10 = const Color(0x1AFFFFFF); static const Color 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 showDialog({ BuildContext context, Widget child }) { Future<dynamic/*=T*/> showDialog/*<T>*/({ BuildContext context, Widget child }) {
Completer completer = new Completer(); Completer<dynamic/*=T*/> completer = new Completer<int>(); // XXXXXXX MORE ANALYZER CHECKS
Navigator.push(context, new _DialogRoute(completer: completer, child: child)); Navigator.push(context, new _DialogRoute<dynamic/*=T*/>(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 route = ModalRoute.of(context); ModalRoute<dynamic> 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) if (other is! _DropDownRouteResult<T>)
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(route: this); return new _DropDownMenu<T>(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 completer = new Completer<_DropDownRouteResult<T>>(); final Completer<_DropDownRouteResult<T>> 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 createState() => new _InkResponseState<InkResponse>(); _InkResponseState<InkResponse> 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) { void _paintHighlight(Canvas canvas, Rect rect, Paint 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 nextRoute) => false; bool canTransitionFrom(TransitionRoute<dynamic> 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> extends State<T> { class _PopupMenuItemState<T extends PopupMenuItem<dynamic>> 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(route: this) child: new _PopupMenu<T>(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/*<T>*/ showMenu/*<T>*/({ Future<dynamic/*=T*/> showMenu/*<T>*/({
BuildContext context, BuildContext context,
ModalPosition position, ModalPosition position,
List<PopupMenuEntry/*<T>*/> items, List<PopupMenuEntry<dynamic/*=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 completer = new Completer/*<T>*/(); Completer<dynamic/*=T*/> completer = new Completer<dynamic/*=T*/>();
Navigator.push(context, new _PopupMenuRoute/*<T>*/( Navigator.push(context, new _PopupMenuRoute<dynamic/*=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 _kTwoPI = math.PI * 2.0; static const double _kTwoPI = math.PI * 2.0;
static const _kEpsilon = .001; static const double _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 _kSweep = _kTwoPI - _kEpsilon; static const double _kSweep = _kTwoPI - _kEpsilon;
static const _kStartAngle = -math.PI / 2.0; static const double _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>> _snackBars = new Queue<ScaffoldFeatureController<SnackBar>>(); Queue<ScaffoldFeatureController<SnackBar, Null>> _snackBars = new Queue<ScaffoldFeatureController<SnackBar, Null>>();
AnimationController _snackBarController; AnimationController _snackBarController;
Timer _snackBarTimer; Timer _snackBarTimer;
ScaffoldFeatureController showSnackBar(SnackBar snackbar) { ScaffoldFeatureController<SnackBar, Null> 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> controller; ScaffoldFeatureController<SnackBar, Null> controller;
controller = new ScaffoldFeatureController<SnackBar>._( controller = new ScaffoldFeatureController<SnackBar, Null>._(
// 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(), new Completer<Null>(),
() { () {
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;
ScaffoldFeatureController _currentBottomSheet; PersistentBottomSheetController<Null> _currentBottomSheet;
ScaffoldFeatureController showBottomSheet(WidgetBuilder builder) { PersistentBottomSheetController<dynamic/*=T*/> showBottomSheet/*<T>*/(WidgetBuilder builder) {
if (_currentBottomSheet != null) { if (_currentBottomSheet != null) {
_currentBottomSheet.close(); _currentBottomSheet.close();
assert(_currentBottomSheet == null); assert(_currentBottomSheet == null);
} }
Completer completer = new Completer(); Completer<dynamic/*=T*/> completer = new Completer<dynamic/*=T*/>();
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 ScaffoldFeatureController._( _currentBottomSheet = new PersistentBottomSheetController<dynamic/*=T*/>._(
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 toolBarOpacity = _toolBarOpacity(_floatingAppBarHeight / toolBarHeight); final double 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 route = ModalRoute.of(context); ModalRoute<dynamic> 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> { class ScaffoldFeatureController<T extends Widget, U> {
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 _completer; final Completer<U> _completer;
Future get closed => _completer.future; Future<U> 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,3 +641,15 @@ class _PersistentBottomSheetState extends State<_PersistentBottomSheet> { ...@@ -641,3 +641,15 @@ 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 scrollStarted() { Future<Null> 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 scrollEnded() { Future<Null> 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 isDark = themeData.brightness == ThemeBrightness.dark; final bool 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 of(BuildContext context) { static TabBarSelectionState<dynamic/*=T*/> of/*<T>*/(BuildContext context) {
return context.ancestorStateOfType(const TypeMatcher<TabBarSelectionState>()); return context.ancestorStateOfType(const TypeMatcher<TabBarSelectionState<dynamic/*=T*/>>());
} }
} }
...@@ -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 oldConfig) { void didUpdateConfig(TabBarSelection<T> 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 createState() => new _TabBarState(); _TabBarState<T> createState() => new _TabBarState<T>();
} }
class _TabBarState<T> extends ScrollableState<TabBar<T>> implements TabBarSelectionAnimationListener { class _TabBarState<T> extends ScrollableState<TabBar<T>> implements TabBarSelectionAnimationListener {
TabBarSelectionState _selection; TabBarSelectionState<T> _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 oldConfig) { void didUpdateConfig(TabBar<T> 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 createScrollBehavior() => new _TabsScrollBehavior(); ScrollBehavior<double, double> 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 extends PageableList { class TabBarView<T> extends PageableList {
TabBarView({ TabBarView({
Key key, Key key,
List<Widget> children List<Widget> children
...@@ -808,12 +808,12 @@ class TabBarView extends PageableList { ...@@ -808,12 +808,12 @@ class TabBarView extends PageableList {
assert(children.length > 1); assert(children.length > 1);
} }
_TabBarViewState createState() => new _TabBarViewState(); _TabBarViewState<T> createState() => new _TabBarViewState<T>();
} }
class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSelectionAnimationListener { class _TabBarViewState<T> extends PageableListState<TabBarView<T>> implements TabBarSelectionAnimationListener {
TabBarSelectionState _selection; TabBarSelectionState<T> _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 extends PageableListState<TabBarView> implements TabBarSe ...@@ -825,7 +825,7 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
return _boundedBehavior; return _boundedBehavior;
} }
void _initSelection(TabBarSelectionState selection) { void _initSelection(TabBarSelectionState<T> selection) {
_selection = selection; _selection = selection;
if (_selection != null) { if (_selection != null) {
_selection.registerAnimationListener(this); _selection.registerAnimationListener(this);
...@@ -838,7 +838,7 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe ...@@ -838,7 +838,7 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
_initSelection(TabBarSelection.of(context)); _initSelection(TabBarSelection.of(context));
} }
void didUpdateConfig(TabBarView oldConfig) { void didUpdateConfig(TabBarView<T> 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 extends PageableListState<TabBarView> implements TabBarSe ...@@ -931,15 +931,15 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
controller.value = scrollOffset / 2.0; controller.value = scrollOffset / 2.0;
} }
Future fling(double scrollVelocity) { Future<Null> fling(double scrollVelocity) {
if (_selection == null || _selection.valueIsChanging) if (_selection == null || _selection.valueIsChanging)
return new Future.value(); return new Future<Null>.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.value(); return new Future<Null>.value();
} }
final int selectionIndex = _selection.index; final int selectionIndex = _selection.index;
...@@ -947,16 +947,16 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe ...@@ -947,16 +947,16 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
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.value(); return new Future<Null>.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.value(); return new Future<Null>.value();
} }
return settleScrollOffset(); return settleScrollOffset();
} }
Widget buildContent(BuildContext context) { Widget buildContent(BuildContext context) {
TabBarSelectionState newSelection = TabBarSelection.of(context); TabBarSelectionState<T> 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 extends PageableListState<TabBarView> implements TabBarSe ...@@ -972,7 +972,7 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
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 animation, ColorTween selectedColor, ColorTween previousColor) { Widget _buildTabIndicator(TabBarSelectionState<T> selection, T tab, Animation<double> 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 selection = TabBarSelection.of(context); final TabBarSelectionState<T> 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 kThemeAnimationDuration = const Duration(milliseconds: 200); const Duration 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 visitor) { void forEachTween(TweenVisitor<dynamic> 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 none = const BorderSide(width: 0.0); static const BorderSide 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(value) { void set minWidth(double 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(value) { void set maxWidth(double 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(value) { void set minHeight(double 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(value) { void set maxHeight(double 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 _kSMIBits = 63; // see https://www.dartlang.org/articles/numeric-computation/#smis-and-mints static const int _kSMIBits = 63; // see https://www.dartlang.org/articles/numeric-computation/#smis-and-mints
static const _kAllZeros = 0; static const int _kAllZeros = 0;
static const _kAllOnes = 0x7FFFFFFFFFFFFFFF; // 2^(_kSMIBits+1)-1 static const int _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 _kCaretGap = 1.0; // pixels const double _kCaretGap = 1.0; // pixels
const _kCaretHeightOffset = 2.0; // pixels const double _kCaretHeightOffset = 2.0; // pixels
const _kCaretWidth = 1.0; // pixels const double _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 kMarkerSize = 0.1; const double 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 oldClipper); bool shouldRepaint(CustomClipper<T> 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(x, [double y = 0.0, double z = 0.0]) { void translate(double 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(x, [double y, double z]) { void scale(double 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 kOutline = 2.0; const double 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,
alignment: const FractionalOffset(0.0, 0.0) FractionalOffset 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,
alignment: const FractionalOffset(0.0, 0.0) FractionalOffset 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,
alignment: const FractionalOffset(0.0, 0.0), FractionalOffset 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 _taskQueue = new HeapPriorityQueue<_TaskEntry>(_taskSorter); final PriorityQueue<_TaskEntry> _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 _completer; Completer<Null> _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 start() { Future<Null> start() {
assert(!isTicking); assert(!isTicking);
assert(_startTime == null); assert(_startTime == null);
_completer = new Completer(); _completer = new Completer<Null>();
_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 localCompleter = _completer; Completer<Null> 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 _fetchAndUnpackBundle(String relativeUrl, AssetBundleProxy bundle) async { static Future<Null> _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,8 +36,11 @@ class _UrlFetcher implements ImageProvider { ...@@ -36,8 +36,11 @@ class _UrlFetcher implements ImageProvider {
); );
} }
bool operator ==(other) { bool operator ==(dynamic other) {
return other is _UrlFetcher && _url == other._url && _scale == other._scale; if (other is! _UrlFetcher)
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,7 +24,12 @@ typedef void ImageListener(ImageInfo image); ...@@ -24,7 +24,12 @@ 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(_handleImageLoaded, onError: (exception, stack) => _handleImageError('Failed to load image:', exception, stack)); _futureImage.then(
_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 _initializer; Future<Null> _initializer;
Future _loadManifest() async { Future<Null> _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, widthFactor, heightFactor, Widget child }) Center({ Key key, double widthFactor, double 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(id), child: child) { }) : id = id, super(key: key ?? new ValueKey<Object>(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,
justifyContent: FlexJustifyContent.start, FlexJustifyContent justifyContent: FlexJustifyContent.start,
alignItems: FlexAlignItems.center, FlexAlignItems 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,
justifyContent: FlexJustifyContent.start, FlexJustifyContent justifyContent: FlexJustifyContent.start,
alignItems: FlexAlignItems.center, FlexAlignItems alignItems: FlexAlignItems.center,
textBaseline TextBaseline textBaseline
}) : super( }) : super(
children: children, children: children,
key: key, key: key,
......
...@@ -222,9 +222,11 @@ class RenderObjectToWidgetAdapter<T extends RenderObject> extends RenderObjectWi ...@@ -222,9 +222,11 @@ 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 _rootChildSlot = const Object(); static const Object _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 kColor = const Color(0xA0B71C1C); static const Color kColor = const Color(0xA0B71C1C);
static const kOffset = 40.0; // distance to bottom of banner, at a 45 degree angle inwards from the top right corner static const double kOffset = 40.0; // distance to bottom of banner, at a 45 degree angle inwards from the top right corner
static const kHeight = 12.0; // height of banner static const double kHeight = 12.0; // height of banner
static const kTextAlign = const Offset(0.0, -3.0); // offset to move text up static const Offset kTextAlign = const Offset(0.0, -3.0); // offset to move text up
static const kFontSize = kHeight * 0.85; static const double kFontSize = kHeight * 0.85;
static const kShadowBlur = 4.0; // shadow blur sigma static const double 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 createRecognizer(GestureMultiDragStartCallback onStart); MultiDragGestureRecognizer<dynamic> 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
); );
MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) { ImmediateMultiDragGestureRecognizer 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
); );
MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) { HorizontalMultiDragGestureRecognizer 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
); );
MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) { VerticalMultiDragGestureRecognizer 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
); );
MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) { DelayedMultiDragGestureRecognizer 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 _startDrag(Point position) { _DragAvatar<T> _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 _activeTarget; _DragTargetState<T> _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 target = _getDragTarget(result.path); _DragTargetState<T> 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 _getDragTarget(List<HitTestEntry> path) { _DragTargetState<T> _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) if (renderMetaData.metaData is _DragTargetState<T>)
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 createScrollBehavior() => new BoundedBehavior(); ScrollBehavior<double, double> createScrollBehavior() => new BoundedBehavior();
BoundedBehavior get scrollBehavior => super.scrollBehavior; BoundedBehavior get scrollBehavior => super.scrollBehavior;
void initState() { void initState() {
......
...@@ -104,10 +104,11 @@ class Hero extends StatefulComponent { ...@@ -104,10 +104,11 @@ 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, HeroState> hero = element; StatefulComponentElement hero = element;
Object tag = hero.widget.tag; Hero heroWidget = element.widget;
Object tag = heroWidget.tag;
assert(tag != null); assert(tag != null);
Key key = hero.widget.key; Key key = heroWidget.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)) {
...@@ -395,17 +396,17 @@ class HeroController extends NavigatorObserver { ...@@ -395,17 +396,17 @@ class HeroController extends NavigatorObserver {
HeroParty _party; HeroParty _party;
Animation<double> _animation; Animation<double> _animation;
PageRoute _from; PageRoute<dynamic> _from;
PageRoute _to; PageRoute<dynamic> _to;
final List<OverlayEntry> _overlayEntries = new List<OverlayEntry>(); final List<OverlayEntry> _overlayEntries = new List<OverlayEntry>();
void didPush(Route route, Route previousRoute) { void didPush(Route<dynamic> route, Route<dynamic> previousRoute) {
assert(navigator != null); assert(navigator != null);
assert(route != null); assert(route != null);
if (route is PageRoute) { if (route is PageRoute<dynamic>) {
assert(route.animation != null); assert(route.animation != null);
if (previousRoute is PageRoute) // could be null if (previousRoute is PageRoute<dynamic>) // could be null
_from = previousRoute; _from = previousRoute;
_to = route; _to = route;
_animation = route.animation; _animation = route.animation;
...@@ -413,12 +414,12 @@ class HeroController extends NavigatorObserver { ...@@ -413,12 +414,12 @@ class HeroController extends NavigatorObserver {
} }
} }
void didPop(Route route, Route previousRoute) { void didPop(Route<dynamic> route, Route<dynamic> previousRoute) {
assert(navigator != null); assert(navigator != null);
assert(route != null); assert(route != null);
if (route is PageRoute) { if (route is PageRoute<dynamic>) {
assert(route.animation != null); assert(route.animation != null);
if (previousRoute is PageRoute) { if (previousRoute is PageRoute<dynamic>) {
_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 createState(); AnimatedWidgetBaseState<AnimatedWidgetBase> 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 tween, dynamic targetValue, TweenConstructor<T> constructor) { forEachTween((Tween<dynamic> tween, dynamic targetValue, TweenConstructor<dynamic> 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 tween, dynamic targetValue) { bool _shouldAnimateTween(Tween<dynamic> tween, dynamic targetValue) {
return targetValue != (tween.end ?? tween.begin); return targetValue != (tween.end ?? tween.begin);
} }
void _updateTween(Tween tween, dynamic targetValue) { void _updateTween(Tween<dynamic> 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 tween, dynamic targetValue, TweenConstructor<T> constructor) { forEachTween((Tween<dynamic> 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 visitor); void forEachTween(TweenVisitor<dynamic> 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 visitor) { void forEachTween(TweenVisitor<dynamic> 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 visitor) { void forEachTween(TweenVisitor<dynamic> 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 { } class LocaleQueryData { } // TODO(ianh): We need a better type here. This doesn't really make sense.
/// 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<T extends LocaleQueryData> extends InheritedWidget { class LocaleQuery extends InheritedWidget {
LocaleQuery({ LocaleQuery({
Key key, Key key,
this.data, this.data,
...@@ -18,7 +18,7 @@ class LocaleQuery<T extends LocaleQueryData> extends InheritedWidget { ...@@ -18,7 +18,7 @@ class LocaleQuery<T extends LocaleQueryData> extends InheritedWidget {
} }
/// The locale data for this subtree. /// The locale data for this subtree.
final T data; final LocaleQueryData 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 animateTo({ Future<Null> animateTo({
GlobalKey targetKey, GlobalKey targetKey,
Duration duration, Duration duration,
Curve curve: Curves.linear Curve curve: Curves.linear
......
...@@ -68,12 +68,14 @@ class _ChildKey { ...@@ -68,12 +68,14 @@ class _ChildKey {
String toString() => "_ChildKey(type: $type, key: $key)"; String toString() => "_ChildKey(type: $type, key: $key)";
} }
class _MixedViewportElement extends RenderObjectElement<MixedViewport> { class _MixedViewportElement extends RenderObjectElement {
_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 oldRoute) { } void didReplace(Route<dynamic> 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 nextRoute) { } void didPopNext(Route<dynamic> 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 nextRoute) { } void didChangeNext(Route<dynamic> 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 RouteFactory(RouteSettings settings); typedef Route<dynamic> 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 route, Route previousRoute) { } void didPush(Route<dynamic> route, Route<dynamic> previousRoute) { }
/// THe [Navigator] popped the given route. /// THe [Navigator] popped the given route.
void didPop(Route route, Route previousRoute) { } void didPop(Route<dynamic> route, Route<dynamic> 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 route) { static void push(BuildContext context, Route<dynamic> 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 targetRoute) { static void popUntil(BuildContext context, Route<dynamic> 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> _history = new List<Route>(); final List<Route<dynamic>> _history = new List<Route<dynamic>>();
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 route in _history) { for (Route<dynamic> 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 route in _history.reversed) { for (Route<dynamic> 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 route = config.onGenerateRoute(settings); Route<dynamic> 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 route) { void _push(Route<dynamic> 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 oldRoute = _history.isNotEmpty ? _history.last : null; Route<dynamic> 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 oldRoute, Route newRoute }) { void _replace({ Route<dynamic> oldRoute, Route<dynamic> 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 anchorRoute, Route newRoute }) { void _replaceRouteBefore({ Route<dynamic> anchorRoute, Route<dynamic> 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 anchorRoute) { void _removeRouteBefore(Route<dynamic> 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 targetRoute = _history[index]; Route<dynamic> 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 newRoute = index < _history.length ? _history[index] : null; Route<dynamic> 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 route = _history.last; Route<dynamic> 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 targetRoute) { void _popUntil(Route<dynamic> 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 route) { void push(Route<dynamic> 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 oldRoute, Route newRoute }) { void replace({ Route<dynamic> oldRoute, Route<dynamic> 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 anchorRoute, Route newRoute }) { void replaceRouteBefore({ Route<dynamic> anchorRoute, Route<dynamic> 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 anchorRoute) { void removeRouteBefore(Route<dynamic> 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 targetRoute) { void popUntil(Route<dynamic> 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) { element.widget is NotificationListener<dynamic>) {
final NotificationListener widget = element.widget; final NotificationListener<dynamic> widget = element.widget;
if (widget._dispatch(this)) if (widget._dispatch(this)) // that function checks the type dynamically
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 createState() => new PageableListState(); PageableListState<PageableList> createState() => new PageableListState<PageableList>();
} }
/// 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 createScrollBehavior() => scrollBehavior; ScrollBehavior<double, double> 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 _flingToAdjacentItem(double scrollVelocity) { Future<Null> _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 fling(double scrollVelocity) { Future<Null> 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 settleScrollOffset() { Future<Null> 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,9 +247,11 @@ class PageViewport extends VirtualViewportFromIterable { ...@@ -247,9 +247,11 @@ class PageViewport extends VirtualViewportFromIterable {
_PageViewportElement createElement() => new _PageViewportElement(this); _PageViewportElement createElement() => new _PageViewportElement(this);
} }
class _PageViewportElement extends VirtualViewportElement<PageViewport> { class _PageViewportElement extends VirtualViewportElement {
_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 nextRoute) => nextRoute is PageRoute; bool canTransitionTo(TransitionRoute<dynamic> nextRoute) => nextRoute is PageRoute<dynamic>;
bool canTransitionFrom(TransitionRoute nextRoute) => nextRoute is PageRoute; bool canTransitionFrom(TransitionRoute<dynamic> nextRoute) => nextRoute is PageRoute<dynamic>;
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 _kTransparent = const Color(0x00000000); const Color _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 oldRoute) { void didReplace(Route<dynamic> oldRoute) {
if (oldRoute is TransitionRoute) if (oldRoute is TransitionRoute<dynamic>)
_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 nextRoute) { void didPopNext(Route<dynamic> nextRoute) {
_updateForwardAnimation(nextRoute); _updateForwardAnimation(nextRoute);
super.didPopNext(nextRoute); super.didPopNext(nextRoute);
} }
void didChangeNext(Route nextRoute) { void didChangeNext(Route<dynamic> nextRoute) {
_updateForwardAnimation(nextRoute); _updateForwardAnimation(nextRoute);
super.didChangeNext(nextRoute); super.didChangeNext(nextRoute);
} }
void _updateForwardAnimation(Route nextRoute) { void _updateForwardAnimation(Route<dynamic> nextRoute) {
if (nextRoute is TransitionRoute && canTransitionTo(nextRoute) && nextRoute.canTransitionFrom(this)) { if (nextRoute is TransitionRoute<dynamic> && 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 nextRoute) => true; bool canTransitionTo(TransitionRoute<dynamic> 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 nextRoute) => true; bool canTransitionFrom(TransitionRoute<dynamic> 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 _owner; LocalHistoryRoute<dynamic> _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 route; final Route<dynamic> 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 route; final ModalRoute<dynamic> 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 of(BuildContext context) { static ModalRoute<dynamic> 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 nextRoute) { void didChangeNext(Route<dynamic> nextRoute) {
assert(nextRoute is! PageRoute); assert(nextRoute is! PageRoute<dynamic>);
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 ensureVisible(BuildContext context, { Duration duration, Curve curve: Curves.ease }) { static Future<Null> 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.value(); return new Future<Null>.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.value(); return new Future<Null>.value();
} }
ExtentScrollBehavior scrollBehavior = scrollable.scrollBehavior; ExtentScrollBehavior scrollBehavior = scrollable.scrollBehavior;
...@@ -172,13 +172,14 @@ abstract class Scrollable extends StatefulComponent { ...@@ -172,13 +172,14 @@ 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.value(); return new Future<Null>.value();
} }
ScrollableState createState(); ScrollableState createState();
} }
/// Contains the state for common scrolling widgets. /// Contains the state for common scrolling widgets that scroll only
/// 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].
...@@ -299,14 +300,14 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> { ...@@ -299,14 +300,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 get scrollBehavior { ScrollBehavior<double, double> get scrollBehavior {
return _scrollBehavior ??= createScrollBehavior(); return _scrollBehavior ??= createScrollBehavior();
} }
ScrollBehavior _scrollBehavior; ScrollBehavior<double, double> _scrollBehavior;
/// Subclasses should override this function to create the [ScrollBehavior] /// Subclasses should override this function to create the [ScrollBehavior]
/// they desire. /// they desire.
ScrollBehavior createScrollBehavior(); ScrollBehavior<double, double> createScrollBehavior();
bool _scrollOffsetIsInBounds(double scrollOffset) { bool _scrollOffsetIsInBounds(double scrollOffset) {
if (scrollBehavior is! ExtentScrollBehavior) if (scrollBehavior is! ExtentScrollBehavior)
...@@ -336,7 +337,7 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> { ...@@ -336,7 +337,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 scrollBy(double scrollDelta, { Duration duration, Curve curve: Curves.ease }) { Future<Null> 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);
} }
...@@ -349,21 +350,21 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> { ...@@ -349,21 +350,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 scrollTo(double newScrollOffset, { Duration duration, Curve curve: Curves.ease }) { Future<Null> scrollTo(double newScrollOffset, { Duration duration, Curve curve: Curves.ease }) {
if (newScrollOffset == _scrollOffset) if (newScrollOffset == _scrollOffset)
return new Future.value(); return new Future<Null>.value();
if (duration == null) { if (duration == null) {
_controller.stop(); _controller.stop();
_setScrollOffset(newScrollOffset); _setScrollOffset(newScrollOffset);
return new Future.value(); return new Future<Null>.value();
} }
assert(duration > Duration.ZERO); assert(duration > Duration.ZERO);
return _animateTo(newScrollOffset, duration, curve); return _animateTo(newScrollOffset, duration, curve);
} }
Future _animateTo(double newScrollOffset, Duration duration, Curve curve) { Future<Null> _animateTo(double newScrollOffset, Duration duration, Curve curve) {
_controller.stop(); _controller.stop();
_controller.value = scrollOffset; _controller.value = scrollOffset;
_startScroll(); _startScroll();
...@@ -375,10 +376,10 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> { ...@@ -375,10 +376,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 fling(double scrollVelocity) { Future<Null> fling(double scrollVelocity) {
if (scrollVelocity != 0.0 || !_controller.isAnimating) if (scrollVelocity != 0.0 || !_controller.isAnimating)
return _startToEndAnimation(scrollVelocity); return _startToEndAnimation(scrollVelocity);
return new Future.value(); return new Future<Null>.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.
...@@ -386,15 +387,15 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> { ...@@ -386,15 +387,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 settleScrollOffset() { Future<Null> settleScrollOffset() {
return _startToEndAnimation(0.0); return _startToEndAnimation(0.0);
} }
Future _startToEndAnimation(double scrollVelocity) { Future<Null> _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.value(); return new Future<Null>.value();
_startScroll(); _startScroll();
return _controller.animateWith(simulation).then(_endScroll); return _controller.animateWith(simulation).then(_endScroll);
} }
...@@ -493,7 +494,7 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> { ...@@ -493,7 +494,7 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> {
scrollBy(pixelOffsetToScrollOffset(delta)); scrollBy(pixelOffsetToScrollOffset(delta));
} }
Future _handleDragEnd(Velocity velocity) { Future<Null> _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);
...@@ -631,7 +632,7 @@ class ScrollableViewport extends Scrollable { ...@@ -631,7 +632,7 @@ class ScrollableViewport extends Scrollable {
} }
class _ScrollableViewportState extends ScrollableState<ScrollableViewport> { class _ScrollableViewportState extends ScrollableState<ScrollableViewport> {
ScrollBehavior createScrollBehavior() => new OverscrollWhenScrollableBehavior(); ScrollBehavior<double, double> createScrollBehavior() => new OverscrollWhenScrollableBehavior();
OverscrollWhenScrollableBehavior get scrollBehavior => super.scrollBehavior; OverscrollWhenScrollableBehavior get scrollBehavior => super.scrollBehavior;
double _viewportSize = 0.0; double _viewportSize = 0.0;
...@@ -745,13 +746,13 @@ abstract class ScrollableListPainter extends Painter { ...@@ -745,13 +746,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 scrollStarted() => new Future.value(); Future<Null> scrollStarted() => new Future<Null>.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 scrollEnded() => new Future.value(); Future<Null> scrollEnded() => new Future<Null>.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
...@@ -793,7 +794,7 @@ class ScrollableMixedWidgetListState extends ScrollableState<ScrollableMixedWidg ...@@ -793,7 +794,7 @@ class ScrollableMixedWidgetListState extends ScrollableState<ScrollableMixedWidg
); );
} }
ScrollBehavior createScrollBehavior() => new OverscrollBehavior(); ScrollBehavior<double, double> 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 createScrollBehavior() => new OverscrollBehavior(); ScrollBehavior<double, double> 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,9 +85,11 @@ class GridViewport extends VirtualViewportFromIterable { ...@@ -85,9 +85,11 @@ class GridViewport extends VirtualViewportFromIterable {
_GridViewportElement createElement() => new _GridViewportElement(this); _GridViewportElement createElement() => new _GridViewportElement(this);
} }
class _GridViewportElement extends VirtualViewportElement<GridViewport> { class _GridViewportElement extends VirtualViewportElement {
_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 createScrollBehavior() => new OverscrollBehavior(); ScrollBehavior<double, double> 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,9 +145,11 @@ class _VirtualListViewport extends VirtualViewport { ...@@ -145,9 +145,11 @@ class _VirtualListViewport extends VirtualViewport {
_VirtualListViewportElement createElement() => new _VirtualListViewportElement(this); _VirtualListViewportElement createElement() => new _VirtualListViewportElement(this);
} }
class _VirtualListViewportElement extends VirtualViewportElement<_VirtualListViewport> { class _VirtualListViewportElement extends VirtualViewportElement {
_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;
...@@ -306,7 +308,7 @@ class ScrollableLazyList extends Scrollable { ...@@ -306,7 +308,7 @@ class ScrollableLazyList extends Scrollable {
} }
class _ScrollableLazyListState extends ScrollableState<ScrollableLazyList> { class _ScrollableLazyListState extends ScrollableState<ScrollableLazyList> {
ScrollBehavior createScrollBehavior() => new OverscrollBehavior(); ScrollBehavior<double, double> 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 oldChildren = new Set<_SemanticsDebuggerEntry>.from(entry.children ?? const <_SemanticsDebuggerEntry>[]); Set<_SemanticsDebuggerEntry> 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 newChildren = new Set<_SemanticsDebuggerEntry>.from(entry.children); Set<_SemanticsDebuggerEntry> 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,8 +31,10 @@ abstract class _WidgetProvider { ...@@ -31,8 +31,10 @@ 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<T extends VirtualViewport> extends RenderObjectElement<T> { abstract class VirtualViewportElement extends RenderObjectElement {
VirtualViewportElement(T widget) : super(widget); VirtualViewportElement(VirtualViewport 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;
...@@ -70,7 +72,7 @@ abstract class VirtualViewportElement<T extends VirtualViewport> extends RenderO ...@@ -70,7 +72,7 @@ abstract class VirtualViewportElement<T extends VirtualViewport> extends RenderO
List<Element> _materializedChildren = const <Element>[]; List<Element> _materializedChildren = const <Element>[];
RenderVirtualViewport get renderObject => super.renderObject; RenderVirtualViewport<dynamic> get renderObject => super.renderObject;
void visitChildren(ElementVisitor visitor) { void visitChildren(ElementVisitor visitor) {
if (_materializedChildren == null) if (_materializedChildren == null)
...@@ -94,8 +96,8 @@ abstract class VirtualViewportElement<T extends VirtualViewport> extends RenderO ...@@ -94,8 +96,8 @@ abstract class VirtualViewportElement<T extends VirtualViewport> extends RenderO
super.unmount(); super.unmount();
} }
void update(T newWidget) { void update(VirtualViewport newWidget) {
T oldWidget = widget; VirtualViewport oldWidget = widget;
_widgetProvider.didUpdateWidget(oldWidget, newWidget); _widgetProvider.didUpdateWidget(oldWidget, newWidget);
super.update(newWidget); super.update(newWidget);
updateRenderObject(oldWidget); updateRenderObject(oldWidget);
...@@ -107,7 +109,7 @@ abstract class VirtualViewportElement<T extends VirtualViewport> extends RenderO ...@@ -107,7 +109,7 @@ abstract class VirtualViewportElement<T extends VirtualViewport> extends RenderO
renderObject.paintOffset = scrollOffsetToPixelDelta(widget.startOffset - startOffsetBase); renderObject.paintOffset = scrollOffsetToPixelDelta(widget.startOffset - startOffsetBase);
} }
void updateRenderObject(T oldWidget) { void updateRenderObject(VirtualViewport oldWidget) {
renderObject.virtualChildCount = _widgetProvider.virtualChildCount; renderObject.virtualChildCount = _widgetProvider.virtualChildCount;
if (startOffsetBase != null) { if (startOffsetBase != null) {
...@@ -161,7 +163,7 @@ abstract class VirtualViewportElement<T extends VirtualViewport> extends RenderO ...@@ -161,7 +163,7 @@ abstract class VirtualViewportElement<T extends VirtualViewport> extends RenderO
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(child.key ?? childIndex); Key key = new ValueKey<Key>(child.key) ?? new ValueKey<int>(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", () {
var coloredBox = new RenderDecoratedBox( RenderBox coloredBox = new RenderDecoratedBox(
decoration: new BoxDecoration() decoration: new BoxDecoration()
); );
var paddingBox = new RenderPadding(padding: const EdgeDims.all(10.0), RenderBox 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(tester, Key key) { RenderImage getRenderImage(WidgetTester tester, Key key) {
return tester.findElementByKey(key).renderObject; return tester.findElementByKey(key).renderObject;
} }
TestImage getTestImage(tester, Key key) { TestImage getTestImage(WidgetTester 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>();
ScaffoldFeatureController bottomSheet; PersistentBottomSheetController<Null> 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((_) { bottomSheet = scaffoldKey.currentState.showBottomSheet/*<Null>*/((_) {
return new Builder( return new Builder(
builder: (_) { builder: (_) {
buildCount += 1; buildCount += 1;
......
...@@ -25,10 +25,11 @@ void main() { ...@@ -25,10 +25,11 @@ void main() {
tester.pump(); tester.pump();
expect(tester.findText('BottomSheet'), isNull); expect(tester.findText('BottomSheet'), isNull);
showModalBottomSheet( showModalBottomSheet/*<Null>*/(
context: context, context: context,
builder: (BuildContext context) => new Text('BottomSheet') builder: (BuildContext context) => new Text('BottomSheet')
).then((_) { ).then((Null result) {
expect(result, isNull);
showBottomSheetThenCalled = true; showBottomSheetThenCalled = true;
}); });
...@@ -45,7 +46,7 @@ void main() { ...@@ -45,7 +46,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(context: context, builder: (BuildContext context) => new Text('BottomSheet')); showModalBottomSheet/*<Null>*/(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(delegate) { Widget buildFrame(OneChildLayoutDelegate 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( new Draggable<int>(
data: 1, data: 1,
child: new Text('Source'), child: new Text('Source'),
feedback: new Text('Dragging') feedback: new Text('Dragging')
), ),
new DragTarget( new DragTarget<int>(
builder: (context, data, rejects) { builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return new Container( return new Container(
height: 100.0, height: 100.0,
child: new Text('Target') child: new Text('Target')
); );
}, },
onAccept: (data) { onAccept: (int 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( new Draggable<int>(
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( new DragTarget<int>(
builder: (context, data, rejects) { builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return new IgnorePointer( return new IgnorePointer(
child: new Container( child: new Container(
child: new Text('Target') child: new Text('Target')
) )
); );
}, },
onAccept: (data) { onAccept: (int 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( new Draggable<int>(
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( new DragTarget<int>(
builder: (context, data, rejects) { builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return new Text('Target'); return new Text('Target');
}, },
onAccept: (data) { onAccept: (int 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( new LongPressDraggable<int>(
data: 1, data: 1,
child: new Text('Source'), child: new Text('Source'),
feedback: new Text('Dragging') feedback: new Text('Dragging')
), ),
new DragTarget( new DragTarget<int>(
builder: (context, data, rejects) { builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return new Text('Target'); return new Text('Target');
}, },
onAccept: (data) { onAccept: (int 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( new Draggable<int>(
data: 1, data: 1,
child: new Text('Source'), child: new Text('Source'),
feedback: new Text('Dragging') feedback: new Text('Dragging')
), ),
new DragTarget( new DragTarget<int>(
builder: (context, data, rejects) { builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return new Text('Target'); return new Text('Target');
}, },
onAccept: (data) { onAccept: (int 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( new DragTarget<int>(
builder: (context, data, rejects) { builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return new Text('Target'); return new Text('Target');
}, },
onAccept: (data) { onAccept: (int data) {
events.add('drop $data'); events.add('drop $data');
} }
), ),
new Container(height: 400.0), new Container(height: 400.0),
new HorizontalDraggable( new HorizontalDraggable<int>(
data: 1, data: 1,
child: new Text('H'), child: new Text('H'),
feedback: new Text('Dragging') feedback: new Text('Dragging')
), ),
new VerticalDraggable( new VerticalDraggable<int>(
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( new DragTarget<int>(
builder: (context, data, rejects) { builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return new Text('Target'); return new Text('Target');
}, },
onAccept: (data) { onAccept: (int data) {
events.add('drop $data'); events.add('drop $data');
} }
), ),
new Container(width: 400.0), new Container(width: 400.0),
new HorizontalDraggable( new HorizontalDraggable<int>(
data: 1, data: 1,
child: new Text('H'), child: new Text('H'),
feedback: new Text('Dragging') feedback: new Text('Dragging')
), ),
new VerticalDraggable( new VerticalDraggable<int>(
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 { class ThreeRoute extends MaterialPageRoute<Null> {
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('barrier')), isNull); expect(tester.findElementByKey(const ValueKey<String>('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('barrier'))); tester.tap(tester.findElementByKey(const ValueKey<String>('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('barrier')), isNull, expect(tester.findElementByKey(const ValueKey<String>('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('barrier'), key: const ValueKey<String>('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(exception); typedef void ExceptionCallback(dynamic 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: (e) { onException: (dynamic 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( return new TestRoute<Null>(
settings: settings, settings: settings,
child: new Builder( child: new Builder(
key: insideKey, key: insideKey,
builder: (BuildContext context) { builder: (BuildContext context) {
PageRoute route = ModalRoute.of(context); PageRoute<Null> 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(settings: settings, child: new Text('E')); case '/2': return new TestRoute<Null>(settings: settings, child: new Text('E'));
case '/3': return new TestRoute(settings: settings, child: new Text('F')); case '/3': return new TestRoute<Null> (settings: settings, child: new Text('F'));
case '/4': return new TestRoute(settings: settings, child: new Text('G')); case '/4': return new TestRoute<Null> (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 { class TestOverlayRoute extends OverlayRoute<Null> {
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(builder: (_) => new Container(child: new ThePositiveNumbers())); return new MaterialPageRoute<Null>(builder: (_) => new Container(child: new ThePositiveNumbers()));
else if (settings.name == '/second') else if (settings.name == '/second')
return new MaterialPageRoute(builder: (_) => new Container(child: new ThePositiveNumbers())); return new MaterialPageRoute<Null>(builder: (_) => new Container(child: new ThePositiveNumbers()));
return null; return null;
} }
)); ));
...@@ -47,9 +47,10 @@ void main() { ...@@ -47,9 +47,10 @@ void main() {
expect(tester.findText('10'), isNull); expect(tester.findText('10'), isNull);
expect(tester.findText('100'), isNull); expect(tester.findText('100'), isNull);
StatefulComponentElement<ScrollableLazyList, ScrollableState<ScrollableLazyList>> target = StatefulComponentElement target =
tester.findElement((Element element) => element.widget is ScrollableLazyList); tester.findElement((Element element) => element.widget is ScrollableLazyList);
target.state.scrollTo(1000.0); ScrollableState targetState = target.state;
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> lastController; ScaffoldFeatureController<SnackBar, Null> 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> firstController = lastController; ScaffoldFeatureController<SnackBar, Null> 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 fling(double velocity) { Future<Null> 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, (i) { List<Widget> items = new List<Widget>.generate(itemCount, (int 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, (i) { List<Widget> items = new List<Widget>.generate(itemCount, (int 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(item, Map matchState) => !_hasAncestorOfType(item, OffStage); bool matches(Element item, Map<dynamic, dynamic> 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(item, Map matchState) => _hasAncestorOfType(item, OffStage); bool matches(Element item, Map<dynamic, dynamic> 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(item, Map matchState) => _hasAncestorOfType(item, Card); bool matches(Element item, Map<dynamic, dynamic> 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(item, Map matchState) => !_hasAncestorOfType(item, Card); bool matches(Element item, Map<dynamic, dynamic> matchState) => !_hasAncestorOfType(item, Card);
Description describe(Description description) => description.add('not in card'); Description describe(Description description) => description.add('not in card');
} }
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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