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> {
const TextStyle(color: Colors.white, fontSize: 18.0, fontWeight: FontWeight.bold);
// 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 =
Typography.white.title.copyWith(textAlign: TextAlign.center);
......
......@@ -23,7 +23,7 @@ class PageableListAppState extends State<PageableListApp> {
List<Size> cardSizes = [
[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();
cardModels = new List<CardModel>.generate(cardSizes.length, (int i) {
......
......@@ -39,7 +39,7 @@ class PianoKey {
player.ptr.pause();
}
Future load(MediaServiceProxy mediaService) async {
Future<Null> load(MediaServiceProxy mediaService) async {
try {
mediaService.ptr.createPlayer(player);
UrlResponse response = await fetchUrl(soundUrl);
......@@ -61,11 +61,11 @@ class PianoApp extends StatelessComponent {
new PianoKey(Colors.purple[500], iLoveYou),
];
Future loadSounds() async {
Future<Null> loadSounds() async {
MediaServiceProxy mediaService = new MediaServiceProxy.unbound();
try {
shell.connectToService("mojo:media_service", mediaService);
List<Future<MediaPlayerPrepareResponseParams>> pending = <Future<MediaPlayerPrepareResponseParams>>[];
List<Future<Null>> pending = <Future<Null>>[];
for (PianoKey key in keys)
pending.add(key.load(mediaService));
await Future.wait(pending);
......@@ -93,8 +93,8 @@ class PianoApp extends StatelessComponent {
}
Widget statusBox(Widget child) {
const mediumGray = const Color(0xff555555);
const darkGray = const Color(0xff222222);
const Color mediumGray = const Color(0xff555555);
const Color darkGray = const Color(0xff222222);
return new Center(
child: new Container(
decoration: const BoxDecoration(
......@@ -121,7 +121,7 @@ Widget splashScreen() {
);
}
Future main() async {
Future<Null> main() async {
runApp(splashScreen());
PianoApp app = new PianoApp();
......
......@@ -80,7 +80,7 @@ class _ButtonsDemoState extends State<ButtonsDemo> {
tooltip: 'Open FAB demos',
child: new Icon(icon: Icons.add),
onPressed: () {
Navigator.push(context, new MaterialPageRoute(
Navigator.push(context, new MaterialPageRoute<Null>(
builder: (BuildContext context) => new TabsFabDemo()
));
}
......@@ -97,7 +97,7 @@ class _ButtonsDemoState extends State<ButtonsDemo> {
new RaisedButton(
child: new Text("Launch Demo"),
onPressed: () {
Navigator.push(context, new MaterialPageRoute(
Navigator.push(context, new MaterialPageRoute<Null>(
builder: (BuildContext context) => new SnackBarDemo()
));
}
......@@ -127,7 +127,7 @@ class _ButtonsDemoState extends State<ButtonsDemo> {
new FlatButton(
child: new Text("Launch Demo"),
onPressed: () {
Navigator.push(context, new MaterialPageRoute(
Navigator.push(context, new MaterialPageRoute<Null>(
builder: (_) => new DialogDemo()
));
}
......@@ -200,10 +200,10 @@ class _ButtonsDemoState extends State<ButtonsDemo> {
center: new Text("Buttons"),
tabBar: new TabBar<_ButtonDemo>(
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()
)
)
......
......@@ -77,8 +77,8 @@ class ColorSwatchTabView extends StatelessComponent {
}
final ColorSwatch swatch;
final blackTextStyle = Typography.black.body1;
final whiteTextStyle = Typography.white.body1;
final TextStyle blackTextStyle = Typography.black.body1;
final TextStyle whiteTextStyle = Typography.white.body1;
Widget build(BuildContext context) {
List<Widget> colorItems = swatch.colors.keys.map((int index) {
......@@ -116,12 +116,12 @@ class ColorsDemo extends StatelessComponent {
center: new Text("Colors"),
tabBar: new TabBar<ColorSwatch>(
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);
})
)
),
body: new TabBarView(
body: new TabBarView<ColorSwatch>(
children: colorSwatches.map((ColorSwatch swatch) {
return new ColorSwatchTabView(swatch: swatch);
})
......
......@@ -14,7 +14,7 @@ class DatePickerDemo extends StatefulComponent {
class _DatePickerDemoState extends State<DatePickerDemo> {
DateTime _selectedDate = new DateTime.now();
Future _handleSelectDate() async {
Future<Null> _handleSelectDate() async {
DateTime picked = await showDatePicker(
context: context,
initialDate: _selectedDate,
......
......@@ -60,12 +60,12 @@ class DialogDemo extends StatefulComponent {
class DialogDemoState extends State<DialogDemo> {
final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();
void showDemoDialog({ BuildContext context, Dialog dialog }) {
showDialog(
void showDemoDialog/*<T>*/({ BuildContext context, Dialog dialog }) {
showDialog/*<T>*/(
context: context,
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) {
scaffoldKey.currentState.showSnackBar(new SnackBar(
content: new Text('You selected: $value')
......@@ -89,7 +89,7 @@ class DialogDemoState extends State<DialogDemo> {
new RaisedButton(
child: new Text('ALERT'),
onPressed: () {
showDemoDialog(
showDemoDialog/*<DialogDemoAction>*/(
context: context,
dialog: new Dialog(
content: new Text(
......@@ -113,7 +113,7 @@ class DialogDemoState extends State<DialogDemo> {
new RaisedButton(
child: new Text('ALERT WITH TITLE'),
onPressed: () {
showDemoDialog(
showDemoDialog/*<DialogDemoAction>*/(
context: context,
dialog: new Dialog(
title: new Text("Use Google's location service?"),
......@@ -138,7 +138,7 @@ class DialogDemoState extends State<DialogDemo> {
new RaisedButton(
child: new Text('SIMPLE'),
onPressed: () {
showDemoDialog(
showDemoDialog/*<String>*/(
context: context,
dialog: new Dialog(
title: new Text('Set backup account'),
......@@ -174,7 +174,7 @@ class DialogDemoState extends State<DialogDemo> {
context: context,
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) {
scaffoldKey.currentState.showSnackBar(new SnackBar(
content: new Text('You selected: $value')
......@@ -186,7 +186,7 @@ class DialogDemoState extends State<DialogDemo> {
new RaisedButton(
child: new Text('FULLSCREEN'),
onPressed: () {
Navigator.push(context, new MaterialPageRoute(
Navigator.push(context, new MaterialPageRoute<Null>(
builder: (BuildContext context) => new FullScreenDialogDemo()
));
}
......
......@@ -33,7 +33,7 @@ class _FitnessDemoContents extends StatefulComponent {
class _FitnessDemoContentsState extends State<_FitnessDemoContents> {
Future _loadAssets(AssetBundle bundle) async {
Future<Null> _loadAssets(AssetBundle bundle) async {
_images = new ImageMap(bundle);
await _images.load(<String>[
'packages/flutter_gallery_assets/jumpingjack.png',
......@@ -267,9 +267,9 @@ class _WorkoutAnimationNode extends NodeWithSize {
class _ProgressCircle extends NodeWithSize {
_ProgressCircle(Size size, [this.value = 0.0]) : super(size);
static const _kTwoPI = math.PI * 2.0;
static const _kEpsilon = .0000001;
static const _kSweep = _kTwoPI - _kEpsilon;
static const double _kTwoPI = math.PI * 2.0;
static const double _kEpsilon = .0000001;
static const double _kSweep = _kTwoPI - _kEpsilon;
double value;
......
......@@ -38,7 +38,7 @@ class GridDemoPhotoItem extends StatelessComponent {
final GridDemoTileStyle tileStyle;
void showPhoto(BuildContext context) {
Navigator.push(context, new MaterialPageRoute(
Navigator.push(context, new MaterialPageRoute<Null>(
builder: (BuildContext context) {
return new Scaffold(
toolBar: new ToolBar(
......@@ -138,7 +138,7 @@ class GridListDemoState extends State<GridListDemo> {
GridDemoTileStyle tileStyle = GridDemoTileStyle.twoLine;
void showTileStyleMenu(BuildContext context) {
final List<PopupMenuItem> items = <PopupMenuItem<GridDemoTileStyle>>[
final List<PopupMenuItem<GridDemoTileStyle>> items = <PopupMenuItem<GridDemoTileStyle>>[
new PopupMenuItem<GridDemoTileStyle>(
value: GridDemoTileStyle.imageOnly,
child: new Text('Image only')
......
......@@ -37,7 +37,7 @@ class LeaveBehindDemoState extends State<LeaveBehindDemo> {
List<LeaveBehindItem> leaveBehindItems;
void initListItems() {
leaveBehindItems = new List.generate(16, (int index) {
leaveBehindItems = new List<LeaveBehindItem>.generate(16, (int index) {
return new LeaveBehindItem(
index: index,
name: 'Item $index Sender',
......@@ -130,7 +130,7 @@ class LeaveBehindDemoState extends State<LeaveBehindDemo> {
right: <Widget>[
new PopupMenuButton<LeaveBehindDemoAction>(
onSelected: handleDemoAction,
items: <PopupMenuEntry>[
items: <PopupMenuEntry<LeaveBehindDemoAction>>[
new PopupMenuItem<LeaveBehindDemoAction>(
value: LeaveBehindDemoAction.reset,
child: new Text('Reset the list')
......
......@@ -19,7 +19,7 @@ class ListDemo extends StatefulComponent {
class ListDemoState extends State<ListDemo> {
final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();
ScaffoldFeatureController _bottomSheet;
PersistentBottomSheetController<Null> _bottomSheet;
ListDemoItemSize _itemSize = ListDemoItemSize.threeLine;
bool _dense = false;
bool _showAvatars = true;
......
......@@ -176,7 +176,7 @@ class MenuDemoState extends State<MenuDemo> {
right: new PopupMenuButton<String>(
onSelected: showCheckedMenuSelections,
items: <PopupMenuItem<String>>[
new CheckedPopupMenuItem(
new CheckedPopupMenuItem<String>(
value: _checkedValue1,
checked: isChecked(_checkedValue1),
child: new Text(_checkedValue1)
......
......@@ -21,7 +21,7 @@ class ModalBottomSheetDemo extends StatelessComponent {
child: new RaisedButton(
child: new Text('Show the modal bottom sheet', style: textStyle),
onPressed: () {
showModalBottomSheet(context: context, builder: (_) {
showModalBottomSheet/*<Null>*/(context: context, builder: (BuildContext context) {
return new Container(
child: new Padding(
padding: const EdgeDims.all(32.0),
......
......@@ -7,7 +7,7 @@ import 'package:flutter/material.dart';
class PageSelectorDemo extends StatelessComponent {
void _handleArrowButtonPress(BuildContext context, int delta) {
final TabBarSelectionState selection = TabBarSelection.of(context);
final TabBarSelectionState<IconData> selection = TabBarSelection.of/*<IconData>*/(context);
if (!selection.valueIsChanging)
selection.value = selection.values[(selection.index + delta).clamp(0, selection.values.length - 1)];
}
......@@ -53,7 +53,7 @@ class PageSelectorDemo extends StatelessComponent {
)
),
new Flexible(
child: new TabBarView(
child: new TabBarView<IconData>(
children: icons.map((IconData icon) {
return new Container(
key: new ObjectKey(icon),
......
......@@ -82,7 +82,7 @@ class _TechniqueItem extends StatelessComponent {
final WidgetBuilder builder;
void showDemo(BuildContext context) {
Navigator.push(context, new MaterialPageRoute(builder: builder));
Navigator.push(context, new MaterialPageRoute<Null>(builder: builder));
}
Widget build(BuildContext context) {
......
......@@ -25,20 +25,20 @@ class TabsDemo extends StatelessComponent {
Widget build(BuildContext context) {
final Color iconColor = Theme.of(context).accentColor;
return new TabBarSelection(
return new TabBarSelection<IconData>(
values: icons,
child: new Scaffold(
toolBar: new ToolBar(
center: new Text("Scrollable Tabs"),
tabBar: new TabBar<String>(
tabBar: new TabBar<IconData>(
isScrollable: true,
labels: new Map.fromIterable(
labels: new Map<IconData, TabLabel>.fromIterable(
icons,
value: (IconData icon) => new TabLabel(text: labels[icon], icon: icon)
)
)
),
body: new TabBarView(
body: new TabBarView<IconData>(
children: icons.map((IconData icon) {
return new Container(
key: new ObjectKey(icon),
......
......@@ -97,7 +97,7 @@ class _TabsFabDemoState extends State<TabsFabDemo> {
toolBar: new ToolBar(
center: new Text("FAB per Tab"),
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(
......@@ -107,7 +107,7 @@ class _TabsFabDemoState extends State<TabsFabDemo> {
child: selectedPage.fabIcon,
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 {
class _TimePickerDemoState extends State<TimePickerDemo> {
TimeOfDay _selectedTime = const TimeOfDay(hour: 7, minute: 28);
Future _handleSelectTime() async {
Future<Null> _handleSelectTime() async {
TimeOfDay picked = await showTimePicker(
context: context,
initialTime: _selectedTime
......
......@@ -24,7 +24,7 @@ class WeatherDemo extends StatefulComponent {
class _WeatherDemoState extends State<WeatherDemo> {
Future _loadAssets(AssetBundle bundle) async {
Future<Null> _loadAssets(AssetBundle bundle) async {
_images = new ImageMap(bundle);
await _images.load(<String>[
'packages/flutter_gallery_assets/clouds-0.png',
......
......@@ -16,7 +16,7 @@ class GallerySection extends StatelessComponent {
final List<GalleryDemo> demos;
void showDemo(GalleryDemo demo, BuildContext context, ThemeData theme) {
Navigator.push(context, new MaterialPageRoute(
Navigator.push(context, new MaterialPageRoute<Null>(
builder: (BuildContext context) {
Widget child = (demo.builder == null) ? null : demo.builder();
return new Theme(data: theme, child: child);
......@@ -31,7 +31,7 @@ class GallerySection extends StatelessComponent {
);
final double appBarHeight = 200.0;
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) {
return new Theme(
data: theme,
......
......@@ -75,7 +75,7 @@ class StocksAppState extends State<StocksApp> {
}
}
Route _getRoute(RouteSettings settings) {
Route<Null> _getRoute(RouteSettings settings) {
List<String> path = settings.name.split('/');
if (path[0] != '')
return null;
......@@ -83,7 +83,7 @@ class StocksAppState extends State<StocksApp> {
if (path.length != 3)
return null;
if (_stocks.containsKey(path[2])) {
return new MaterialPageRoute(
return new MaterialPageRoute<Null>(
settings: settings,
builder: (BuildContext context) => new StockSymbolPage(stock: _stocks[path[2]])
);
......
......@@ -53,7 +53,7 @@ class StockData {
}
typedef void StockDataCallback(StockData data);
const _kChunkCount = 30;
const int _kChunkCount = 30;
String _urlToFetch(int chunk) {
return 'https://domokit.github.io/examples/stocks/data/stock_data_$chunk.json';
......
......@@ -321,7 +321,7 @@ class StockHomeState extends State<StockHome> {
}
void _handleCreateCompany() {
showModalBottomSheet(
showModalBottomSheet/*<int, double>*/( // XXXXXX DO NOT CHECK IN XXXXXX THIS IS A CHECK OF THE ANALYZER
context: context,
builder: (BuildContext context) => new _CreateCompanySheet()
);
......@@ -344,7 +344,7 @@ class StockHomeState extends State<StockHome> {
toolBar: _isSearching ? buildSearchBar() : buildToolBar(),
floatingActionButton: buildFloatingActionButton(),
drawer: _buildDrawer(context),
body: new TabBarView(
body: new TabBarView<StockHomeTab>(
children: <Widget>[
_buildStockTab(context, StockHomeTab.market, config.symbols),
_buildStockTab(context, StockHomeTab.portfolio, portfolioSymbols),
......
......@@ -18,7 +18,7 @@ class StockList extends StatelessComponent {
Widget build(BuildContext context) {
return new ScrollableList(
key: const ValueKey('stock-list'),
key: const ValueKey<String>('stock-list'),
itemExtent: StockRow.kHeight,
children: stocks.map((Stock stock) {
return new StockRow(
......
......@@ -17,11 +17,12 @@ void main() {
tester.async.flushMicrotasks(); // see https://github.com/flutter/flutter/issues/1865
tester.pump();
Element<Text> tab = tester.findText('MARKET');
Element tab = tester.findText('MARKET');
expect(tab, isNotNull);
tester.setLocale("es", "US");
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
// and plug it rather than waiting for the animation to end here.
......
......@@ -27,13 +27,13 @@ void main() {
// Scroll down 5 times
for (int i = 0; i < 5; i++) {
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
for (int i = 0; i < 5; i++) {
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 {
bool get isConstant => terms.length == 0;
@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
Expression asExpression() => this;
Constraint _createConstraint(
_EquationMember /* rhs */ value, Relation relation) {
Constraint _createConstraint(_EquationMember /* rhs */ value, Relation relation) {
if (value is ConstantMember) {
return new Constraint(
new Expression(new List.from(terms), constant - value.value),
relation);
new Expression(new List<Term>.from(terms), constant - value.value),
relation
);
}
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));
return new Constraint(new Expression(newTerms, constant), relation);
}
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));
return new Constraint(new Expression(newTerms, constant), relation);
}
if (value is Expression) {
var newTerms = value.terms.fold(new List<Term>.from(terms),
(list, t) => list..add(new Term(t.variable, -t.coefficient)));
List<Term> newTerms = value.terms.fold(
new List<Term>.from(terms),
(List<Term> list, Term t) {
return list..add(new Term(t.variable, -t.coefficient));
}
);
return new Constraint(
new Expression(newTerms, constant - value.constant), relation);
new Expression(newTerms, constant - value.constant),
relation
);
}
assert(false);
return null;
}
@override
Constraint operator >=(_EquationMember value) =>
_createConstraint(value, Relation.greaterThanOrEqualTo);
Constraint operator >=(_EquationMember value) {
return _createConstraint(value, Relation.greaterThanOrEqualTo);
}
@override
Constraint operator <=(_EquationMember value) =>
_createConstraint(value, Relation.lessThanOrEqualTo);
Constraint operator <=(_EquationMember value) {
return _createConstraint(value, Relation.lessThanOrEqualTo);
}
@override
Constraint equals(_EquationMember value) =>
_createConstraint(value, Relation.equalTo);
Constraint equals(_EquationMember value) {
return _createConstraint(value, Relation.equalTo);
}
@override
Expression operator +(_EquationMember m) {
if (m is ConstantMember) {
return new Expression(new List.from(terms), constant + m.value);
}
if (m is ConstantMember)
return new Expression(new List<Term>.from(terms), constant + m.value);
if (m is Param) {
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) {
return new Expression(new List.from(terms)..add(m), constant);
}
if (m is Term)
return new Expression(new List<Term>.from(terms)..add(m), constant);
if (m is 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);
return null;
}
@override
Expression operator -(_EquationMember m) {
if (m is ConstantMember) {
return new Expression(new List.from(terms), constant - m.value);
}
if (m is ConstantMember)
return new Expression(new List<Term>.from(terms), constant - m.value);
if (m is Param) {
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) {
return new Expression(new List.from(terms)
return new Expression(new List<Term>.from(terms)
..add(new Term(m.variable, -m.coefficient)), constant);
}
if (m is Expression) {
var copiedTerms = new List<Term>.from(terms);
m.terms.forEach(
(t) => copiedTerms.add(new Term(t.variable, -t.coefficient)));
List<Term> copiedTerms = new List<Term>.from(terms);
for (Term t in m.terms)
copiedTerms.add(new Term(t.variable, -t.coefficient));
return new Expression(copiedTerms, constant - m.constant);
}
assert(false);
return null;
}
_EquationMember _applyMultiplicand(double m) {
var newTerms = terms.fold(new List<Term>(), (list, term) => list
..add(new Term(term.variable, term.coefficient * m)));
List<Term> newTerms = terms.fold(
new List<Term>(),
(List<Term> list, Term term) {
return list..add(new Term(term.variable, term.coefficient * m));
}
);
return new Expression(newTerms, constant * m);
}
......@@ -127,17 +140,14 @@ class Expression extends _EquationMember {
// At least on of the the two members must be constant for the resulting
// expression to be linear
if (!this.isConstant && !m.isConstant) {
if (!this.isConstant && !m.isConstant)
return null;
}
if (this.isConstant) {
return new _Pair(m.asExpression(), this.value);
}
if (this.isConstant)
return new _Pair<Expression, double>(m.asExpression(), this.value);
if (m.isConstant) {
return new _Pair(this.asExpression(), m.value);
}
if (m.isConstant)
return new _Pair<Expression, double>(this.asExpression(), m.value);
assert(false);
return null;
......@@ -148,8 +158,9 @@ class Expression extends _EquationMember {
if (args == null) {
throw new ParserException(
'Could not find constant multiplicand or multiplier', [this, m]);
return null;
'Could not find constant multiplicand or multiplier',
<_EquationMember>[this, m]
);
}
return args.first._applyMultiplicand(args.second);
......@@ -168,7 +179,7 @@ class Expression extends _EquationMember {
String toString() {
StringBuffer buffer = new StringBuffer();
terms.forEach((t) => buffer.write('$t'));
terms.forEach((Term t) => buffer.write('$t'));
if (constant != 0.0) {
buffer.write(constant.sign > 0.0 ? '+' : '-');
......
......@@ -5,19 +5,19 @@
part of cassowary;
class Param extends _EquationMember {
final Variable variable;
dynamic context;
Param([double value = 0.0]) : variable = new Variable(value) {
variable._owner = this;
}
Param.withContext(ctx, [double value = 0.0])
: variable = new Variable(value),
context = ctx {
Param.withContext(dynamic context, [double value = 0.0])
: variable = new Variable(value),
context = context {
variable._owner = this;
}
final Variable variable;
dynamic context;
bool get isConstant => false;
double get value => variable.value;
......@@ -25,5 +25,5 @@ class Param extends _EquationMember {
String get name => variable.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 {
void insertRow(_Row other, [double coefficient = 1.0]) {
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) {
......@@ -36,7 +36,7 @@ class _Row {
void reverseSign() {
constant = -constant;
cells.forEach((s, v) => cells[s] = -v);
cells.forEach((_Symbol s, double v) => cells[s] = -v);
}
void solveForSymbol(_Symbol symbol) {
......@@ -44,7 +44,7 @@ class _Row {
double coefficient = -1.0 / cells[symbol];
cells.remove(symbol);
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) {
......@@ -70,8 +70,9 @@ class _Row {
buffer.write(constant);
cells.forEach((symbol, value) =>
buffer.write(" + " + value.toString() + " * " + symbol.toString()));
cells.forEach((_Symbol symbol, double value) {
buffer.write(" + " + value.toString() + " * " + symbol.toString());
});
return buffer.toString();
}
......
......@@ -89,7 +89,7 @@ class Solver {
_Symbol leaving = rowPair.first;
row = rowPair.second;
var removed = _rows.remove(rowPair.first);
_Row removed = _rows.remove(rowPair.first);
assert(removed != null);
row.solveForSymbols(leaving, tag.marker);
_substitute(tag.marker, row);
......@@ -170,8 +170,8 @@ class Solver {
return _dualOptimize();
}
Set flushUpdates() {
Set updates = new HashSet<dynamic>();
Set<dynamic> flushUpdates() {
Set<dynamic> updates = new HashSet<dynamic>();
for (Variable variable in _vars.keys) {
_Symbol symbol = _vars[variable];
......@@ -189,10 +189,12 @@ class Solver {
return updates;
}
Result _bulkEdit(Iterable items,
_SolverBulkUpdate applier,
_SolverBulkUpdate undoer) {
List applied = new List();
Result _bulkEdit(
Iterable<dynamic> items,
_SolverBulkUpdate applier,
_SolverBulkUpdate undoer
) {
List<dynamic> applied = <dynamic>[];
bool needsCleanup = false;
Result result = Result.success;
......@@ -231,7 +233,7 @@ class Solver {
Expression expr = new Expression.fromExpression(constraint.expression);
_Row row = new _Row(expr.constant);
expr.terms.forEach((term) {
expr.terms.forEach((Term term) {
if (!_nearZero(term.coefficient)) {
_Symbol symbol = _symbolForVariable(term.variable);
......@@ -397,9 +399,9 @@ class Solver {
_Pair<_Symbol, _Row> _leavingRowForEnteringSymbol(_Symbol entering) {
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) {
double temp = row.coefficientForSymbol(entering);
......@@ -423,7 +425,7 @@ class Solver {
}
void _substitute(_Symbol symbol, _Row row) {
_rows.forEach((first, second) {
_rows.forEach((_Symbol first, _Row second) {
second.substitute(symbol, row);
if (first.type != _SymbolType.external && second.constant < 0.0) {
_infeasibleRows.add(first);
......@@ -470,7 +472,7 @@ class Solver {
_Pair<_Symbol, _Row> first, second, third;
_rows.forEach((symbol, row) {
_rows.forEach((_Symbol symbol, _Row row) {
double c = row.coefficientForSymbol(marker);
if (c == 0.0) {
......@@ -478,18 +480,18 @@ class Solver {
}
if (symbol.type == _SymbolType.external) {
third = new _Pair(symbol, row);
third = new _Pair<_Symbol, _Row>(symbol, row);
} else if (c < 0.0) {
double r = -row.constant / c;
if (r < r1) {
r1 = r;
first = new _Pair(symbol, row);
first = new _Pair<_Symbol, _Row>(symbol, row);
}
} else {
double r = row.constant / c;
if (r < r2) {
r2 = r;
second = new _Pair(symbol, row);
second = new _Pair<_Symbol, _Row>(symbol, row);
}
}
});
......@@ -596,28 +598,33 @@ class Solver {
// Tableau
buffer.writeln(separator + " Tableau");
_rows.forEach((symbol, row) {
buffer.write(symbol.toString());
buffer.write(" | ");
buffer.writeln(row.toString());
_rows.forEach((_Symbol symbol, _Row row) {
buffer.writeln('$symbol | $row');
});
// Infeasible
buffer.writeln(separator + " Infeasible");
_infeasibleRows.forEach((symbol) => buffer.writeln(symbol.toString()));
_infeasibleRows.forEach((_Symbol symbol) {
buffer.writeln(symbol);
});
// Variables
buffer.writeln(separator + " Variables");
_vars.forEach((variable, symbol) =>
buffer.writeln("${variable.toString()} = ${symbol.toString()}"));
_vars.forEach((Variable variable, _Symbol symbol) {
buffer.writeln('$variable = $symbol');
});
// Edit Variables
buffer.writeln(separator + " Edit Variables");
_edits.forEach((variable, editinfo) => buffer.writeln(variable));
_edits.forEach((Variable variable, _EditInfo editinfo) {
buffer.writeln(variable);
});
// Constraints
buffer.writeln(separator + " Constraints");
_constraints.forEach((constraint, _) => buffer.writeln(constraint));
_constraints.forEach((Constraint constraint, _Tag tag) {
buffer.writeln(constraint);
});
return buffer.toString();
}
......
This diff is collapsed.
......@@ -125,7 +125,7 @@ class AnimationController extends Animation<double>
}
/// Starts running this animation forwards (towards the end).
Future forward({ double from }) {
Future<Null> forward({ double from }) {
if (from != null)
value = from;
_direction = _AnimationDirection.forward;
......@@ -133,7 +133,7 @@ class AnimationController extends Animation<double>
}
/// Starts running this animation in reverse (towards the beginning).
Future reverse({ double from }) {
Future<Null> reverse({ double from }) {
if (from != null)
value = from;
_direction = _AnimationDirection.reverse;
......@@ -141,7 +141,7 @@ class AnimationController extends Animation<double>
}
/// 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;
if (simulationDuration == null) {
double range = upperBound - lowerBound;
......@@ -152,7 +152,7 @@ class AnimationController extends Animation<double>
if (simulationDuration == Duration.ZERO) {
assert(value == target);
_checkStatusChanged();
return new Future.value();
return new Future<Null>.value();
}
assert(simulationDuration > Duration.ZERO);
assert(!isAnimating);
......@@ -163,7 +163,7 @@ class AnimationController extends Animation<double>
/// restarts the animation when it completes.
///
/// 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;
max ??= upperBound;
period ??= duration;
......@@ -173,24 +173,24 @@ class AnimationController extends Animation<double>
/// Flings the timeline with an optional force (defaults to a critically
/// damped spring) and initial velocity. If velocity is positive, the
/// 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;
_direction = velocity < 0.0 ? _AnimationDirection.reverse : _AnimationDirection.forward;
return animateWith(force.release(value, velocity));
}
/// Drives the animation according to the given simulation.
Future animateWith(Simulation simulation) {
Future<Null> animateWith(Simulation simulation) {
stop();
return _startSimulation(simulation);
}
Future _startSimulation(Simulation simulation) {
Future<Null> _startSimulation(Simulation simulation) {
assert(simulation != null);
assert(!isAnimating);
_simulation = simulation;
_value = simulation.x(0.0).clamp(lowerBound, upperBound);
Future result = _ticker.start();
Future<Null> result = _ticker.start();
_checkStatusChanged();
return result;
}
......
......@@ -145,6 +145,6 @@ Future<Uint8List> readBytes(dynamic url, { Map<String, String> 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());
}
......@@ -45,7 +45,7 @@ class MaterialApp extends WidgetsApp {
onGenerateRoute: (RouteSettings settings) {
RouteBuilder builder = routes[settings.name];
if (builder != null) {
return new MaterialPageRoute(
return new MaterialPageRoute<Null>(
builder: (BuildContext context) {
return builder(new RouteArguments(context: context));
},
......
......@@ -44,7 +44,7 @@ class BottomSheet extends StatefulComponent {
class _BottomSheetState extends State<BottomSheet> {
final _childKey = new GlobalKey(debugLabel: 'BottomSheet child');
final GlobalKey _childKey = new GlobalKey(debugLabel: 'BottomSheet child');
double get _childHeight {
final RenderBox renderBox = _childKey.currentContext.findRenderObject();
......@@ -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);
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) {
return new GestureDetector(
onTap: () => Navigator.pop(context),
......@@ -165,15 +165,15 @@ class _ModalBottomSheetRoute<T> extends PopupRoute<T> {
}
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(builder != null);
final Completer completer = new Completer();
Navigator.push(context, new _ModalBottomSheetRoute(
final Completer<dynamic/*=T*/> completer = new Completer<dynamic/*=T*/>();
Navigator.push(context, new _ModalBottomSheetRoute<dynamic/*=T*/>(
completer: completer,
builder: builder
));
......
......@@ -9,20 +9,20 @@ import 'dart:ui' show Color;
class Colors {
Colors._();
static const transparent = const Color(0x00000000);
static const black = const Color(0xFF000000);
static const black87 = const Color(0xDD000000);
static const black54 = const Color(0x8A000000);
static const 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 black12 = const Color(0x1F000000); // background of disabled raised buttons in light theme
static const white = const Color(0xFFFFFFFF);
static const white70 = const Color(0xB3FFFFFF);
static const 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 white10 = const Color(0x1AFFFFFF);
static const Color transparent = const Color(0x00000000);
static const Color black = const Color(0xFF000000);
static const Color black87 = const Color(0xDD000000);
static const Color black54 = const Color(0x8A000000);
static const Color black45 = const Color(0x73000000); // mask color
static const Color black26 = const Color(0x42000000); // disabled radio buttons and text of disabled flat buttons in light theme
static const Color black12 = const Color(0x1F000000); // background of disabled raised buttons in light theme
static const Color white = const Color(0xFFFFFFFF);
static const Color white70 = const Color(0xB3FFFFFF);
static const Color white30 = const Color(0x4DFFFFFF); // disabled radio buttons and text of disabled flat buttons in dark theme
static const Color white12 = const Color(0x1FFFFFFF); // background of disabled raised buttons in dark theme
static const Color white10 = const Color(0x1AFFFFFF);
static const Map<int, Color> red = const <int, Color>{
50: const Color(0xFFFFEBEE),
......
......@@ -142,8 +142,8 @@ class _DialogRoute<T> extends PopupRoute<T> {
}
}
Future showDialog({ BuildContext context, Widget child }) {
Completer completer = new Completer();
Navigator.push(context, new _DialogRoute(completer: completer, child: child));
Future<dynamic/*=T*/> showDialog/*<T>*/({ BuildContext context, Widget child }) {
Completer<dynamic/*=T*/> completer = new Completer<int>(); // XXXXXXX MORE ANALYZER CHECKS
Navigator.push(context, new _DialogRoute<dynamic/*=T*/>(completer: completer, child: child));
return completer.future;
}
......@@ -86,7 +86,7 @@ class DrawerControllerState extends State<DrawerController> {
void _ensureHistoryEntry() {
if (_historyEntry == null) {
ModalRoute route = ModalRoute.of(context);
ModalRoute<dynamic> route = ModalRoute.of(context);
if (route != null) {
_historyEntry = new LocalHistoryEntry(onRemove: _handleHistoryEntryRemoved);
route.addLocalHistoryEntry(_historyEntry);
......
......@@ -154,7 +154,7 @@ class _DropDownRouteResult<T> {
const _DropDownRouteResult(this.result);
final T result;
bool operator ==(dynamic other) {
if (other is! _DropDownRouteResult)
if (other is! _DropDownRouteResult<T>)
return false;
final _DropDownRouteResult<T> typedOther = other;
return result == typedOther.result;
......@@ -193,7 +193,7 @@ class _DropDownRoute<T> extends PopupRoute<_DropDownRouteResult<T>> {
}
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>> {
void _handleTap() {
final RenderBox renderBox = indexedStackKey.currentContext.findRenderObject();
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>(
completer: completer,
items: config.items,
......
......@@ -44,7 +44,7 @@ class InkResponse extends StatefulComponent {
final bool containedInWell;
final BoxShape highlightShape;
_InkResponseState createState() => new _InkResponseState<InkResponse>();
_InkResponseState<InkResponse> createState() => new _InkResponseState<InkResponse>();
}
class _InkResponseState<T extends InkResponse> extends State<T> {
......
......@@ -477,7 +477,7 @@ class _InkHighlight extends InkFeature implements InkHighlight {
super.dispose();
}
void _paintHighlight(Canvas canvas, Rect rect, paint) {
void _paintHighlight(Canvas canvas, Rect rect, Paint paint) {
if (shape == BoxShape.rectangle)
canvas.drawRect(rect, paint);
else
......
......@@ -54,7 +54,7 @@ class MaterialPageRoute<T> extends PageRoute<T> {
Duration get transitionDuration => kMaterialPageRouteTransitionDuration;
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 result = builder(context);
......
......@@ -65,7 +65,7 @@ class PopupMenuItem<T> extends PopupMenuEntry<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.
Widget buildChild() => config.child;
......@@ -318,7 +318,7 @@ class _PopupMenuRoute<T> extends PopupRoute<T> {
constraints: new BoxConstraints(maxWidth: screenSize.width, maxHeight: screenSize.height),
child: new CustomOneChildLayout(
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> {
/// and the value of [position] implies where the left, center point of the
/// highlighted item should appear. If [initialValue] is not specified then position
/// implies the menu's origin.
Future/*<T>*/ showMenu/*<T>*/({
Future<dynamic/*=T*/> showMenu/*<T>*/({
BuildContext context,
ModalPosition position,
List<PopupMenuEntry/*<T>*/> items,
List<PopupMenuEntry<dynamic/*=T*/>> items,
dynamic/*=T*/ initialValue,
int elevation: 8
}) {
assert(context != null);
assert(items != null && items.length > 0);
Completer completer = new Completer/*<T>*/();
Navigator.push(context, new _PopupMenuRoute/*<T>*/(
Completer<dynamic/*=T*/> completer = new Completer<dynamic/*=T*/>();
Navigator.push(context, new _PopupMenuRoute<dynamic/*=T*/>(
completer: completer,
position: position,
items: items,
......
......@@ -128,11 +128,11 @@ class _LinearProgressIndicatorState extends State<LinearProgressIndicator> {
}
class _CircularProgressIndicatorPainter extends CustomPainter {
static const _kTwoPI = math.PI * 2.0;
static const _kEpsilon = .001;
static const double _kTwoPI = math.PI * 2.0;
static const double _kEpsilon = .001;
// Canavs.drawArc(r, 0, 2*PI) doesn't draw anything, so just get close.
static const _kSweep = _kTwoPI - _kEpsilon;
static const _kStartAngle = -math.PI / 2.0;
static const double _kSweep = _kTwoPI - _kEpsilon;
static const double _kStartAngle = -math.PI / 2.0;
const _CircularProgressIndicatorPainter({
this.valueColor,
......
......@@ -229,24 +229,24 @@ class ScaffoldState extends State<Scaffold> {
// SNACKBAR API
Queue<ScaffoldFeatureController<SnackBar>> _snackBars = new Queue<ScaffoldFeatureController<SnackBar>>();
Queue<ScaffoldFeatureController<SnackBar, Null>> _snackBars = new Queue<ScaffoldFeatureController<SnackBar, Null>>();
AnimationController _snackBarController;
Timer _snackBarTimer;
ScaffoldFeatureController showSnackBar(SnackBar snackbar) {
ScaffoldFeatureController<SnackBar, Null> showSnackBar(SnackBar snackbar) {
_snackBarController ??= SnackBar.createAnimationController()
..addStatusListener(_handleSnackBarStatusChange);
if (_snackBars.isEmpty) {
assert(_snackBarController.isDismissed);
_snackBarController.forward();
}
ScaffoldFeatureController<SnackBar> controller;
controller = new ScaffoldFeatureController<SnackBar>._(
ScaffoldFeatureController<SnackBar, Null> controller;
controller = new ScaffoldFeatureController<SnackBar, Null>._(
// 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
// from one to the next.
snackbar.withAnimation(_snackBarController, fallbackKey: new UniqueKey()),
new Completer(),
new Completer<Null>(),
() {
assert(_snackBars.first == controller);
_hideSnackBar();
......@@ -294,14 +294,14 @@ class ScaffoldState extends State<Scaffold> {
// PERSISTENT BOTTOM SHEET API
List<Widget> _dismissedBottomSheets;
ScaffoldFeatureController _currentBottomSheet;
PersistentBottomSheetController<Null> _currentBottomSheet;
ScaffoldFeatureController showBottomSheet(WidgetBuilder builder) {
PersistentBottomSheetController<dynamic/*=T*/> showBottomSheet/*<T>*/(WidgetBuilder builder) {
if (_currentBottomSheet != null) {
_currentBottomSheet.close();
assert(_currentBottomSheet == null);
}
Completer completer = new Completer();
Completer<dynamic/*=T*/> completer = new Completer<dynamic/*=T*/>();
GlobalKey<_PersistentBottomSheetState> bottomSheetKey = new GlobalKey<_PersistentBottomSheetState>();
AnimationController controller = BottomSheet.createAnimationController()
..forward();
......@@ -334,7 +334,7 @@ class ScaffoldState extends State<Scaffold> {
);
ModalRoute.of(context).addLocalHistoryEntry(entry);
setState(() {
_currentBottomSheet = new ScaffoldFeatureController._(
_currentBottomSheet = new PersistentBottomSheetController<dynamic/*=T*/>._(
bottomSheet,
completer,
() => entry.remove(),
......@@ -447,7 +447,7 @@ class ScaffoldState extends State<Scaffold> {
} else if (_scrollOffset > appBarHeight) {
// scrolled down, show the "floating" toolbar
_floatingAppBarHeight = (_floatingAppBarHeight + _scrollOffsetDelta).clamp(0.0, toolBarHeight);
final toolBarOpacity = _toolBarOpacity(_floatingAppBarHeight / toolBarHeight);
final double toolBarOpacity = _toolBarOpacity(_floatingAppBarHeight / toolBarHeight);
_appBarController.value = (appBarHeight - _floatingAppBarHeight) / appBarHeight;
appBar = new SizedBox(
height: _floatingAppBarHeight,
......@@ -471,7 +471,7 @@ class ScaffoldState extends State<Scaffold> {
EdgeDims padding = MediaQuery.of(context)?.padding ?? EdgeDims.zero;
if (_snackBars.length > 0) {
ModalRoute route = ModalRoute.of(context);
ModalRoute<dynamic> route = ModalRoute.of(context);
if (route == null || route.isCurrent) {
if (_snackBarController.isCompleted && _snackBarTimer == null)
_snackBarTimer = new Timer(_snackBars.first._widget.duration, _hideSnackBar);
......@@ -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);
final T _widget;
final Completer _completer;
Future get closed => _completer.future;
final Completer<U> _completer;
Future<U> get closed => _completer.future;
final VoidCallback close; // call this to close the bottom sheet or snack bar
final StateSetter setState;
}
......@@ -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 {
AnimationController _fade;
Future scrollStarted() {
Future<Null> scrollStarted() {
if (_fade == null) {
_fade = new AnimationController(duration: _kScrollbarThumbFadeDuration);
CurvedAnimation curve = new CurvedAnimation(parent: _fade, curve: Curves.ease);
......@@ -72,7 +72,7 @@ class ScrollbarPainter extends ScrollableListPainter {
return _fade.forward();
}
Future scrollEnded() {
Future<Null> scrollEnded() {
return _fade.reverse();
}
......
......@@ -24,7 +24,7 @@ class Switch extends StatelessComponent {
Widget build(BuildContext context) {
assert(debugCheckHasMaterial(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 activeTrackColor = activeThumbColor.withAlpha(0x80);
......
......@@ -416,8 +416,8 @@ class TabBarSelection<T> extends StatefulComponent {
TabBarSelectionState<T> createState() => new TabBarSelectionState<T>();
static TabBarSelectionState of(BuildContext context) {
return context.ancestorStateOfType(const TypeMatcher<TabBarSelectionState>());
static TabBarSelectionState<dynamic/*=T*/> of/*<T>*/(BuildContext context) {
return context.ancestorStateOfType(const TypeMatcher<TabBarSelectionState<dynamic/*=T*/>>());
}
}
......@@ -449,7 +449,7 @@ class TabBarSelectionState<T> extends State<TabBarSelection<T>> {
_initValueToIndex();
}
void didUpdateConfig(TabBarSelection oldConfig) {
void didUpdateConfig(TabBarSelection<T> oldConfig) {
super.didUpdateConfig(oldConfig);
if (values != oldConfig.values)
_initValueToIndex();
......@@ -564,12 +564,12 @@ class TabBar<T> extends Scrollable {
final Map<T, TabLabel> labels;
final bool isScrollable;
_TabBarState createState() => new _TabBarState();
_TabBarState<T> createState() => new _TabBarState<T>();
}
class _TabBarState<T> extends ScrollableState<TabBar<T>> implements TabBarSelectionAnimationListener {
TabBarSelectionState _selection;
TabBarSelectionState<T> _selection;
bool _valueIsChanging = false;
void _initSelection(TabBarSelectionState<T> selection) {
......@@ -584,7 +584,7 @@ class _TabBarState<T> extends ScrollableState<TabBar<T>> implements TabBarSelect
_initSelection(TabBarSelection.of(context));
}
void didUpdateConfig(TabBar oldConfig) {
void didUpdateConfig(TabBar<T> oldConfig) {
super.didUpdateConfig(oldConfig);
if (!config.isScrollable)
scrollTo(0.0);
......@@ -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);
}
ScrollBehavior createScrollBehavior() => new _TabsScrollBehavior();
ScrollBehavior<double, double> createScrollBehavior() => new _TabsScrollBehavior();
_TabsScrollBehavior get scrollBehavior => super.scrollBehavior;
double _centeredTabScrollOffset(int tabIndex) {
......@@ -795,7 +795,7 @@ class _TabBarState<T> extends ScrollableState<TabBar<T>> implements TabBarSelect
}
}
class TabBarView extends PageableList {
class TabBarView<T> extends PageableList {
TabBarView({
Key key,
List<Widget> children
......@@ -808,12 +808,12 @@ class TabBarView extends PageableList {
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;
int get _tabCount => config.children.length;
......@@ -825,7 +825,7 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
return _boundedBehavior;
}
void _initSelection(TabBarSelectionState selection) {
void _initSelection(TabBarSelectionState<T> selection) {
_selection = selection;
if (_selection != null) {
_selection.registerAnimationListener(this);
......@@ -838,7 +838,7 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
_initSelection(TabBarSelection.of(context));
}
void didUpdateConfig(TabBarView oldConfig) {
void didUpdateConfig(TabBarView<T> oldConfig) {
super.didUpdateConfig(oldConfig);
if (_selection != null && config.children != oldConfig.children)
_updateItemsForSelectedIndex(_selection.index);
......@@ -931,15 +931,15 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
controller.value = scrollOffset / 2.0;
}
Future fling(double scrollVelocity) {
Future<Null> fling(double scrollVelocity) {
if (_selection == null || _selection.valueIsChanging)
return new Future.value();
return new Future<Null>.value();
if (scrollVelocity.abs() > _kMinFlingVelocity) {
final int selectionDelta = scrollVelocity.sign.truncate();
final int targetIndex = (_selection.index + selectionDelta).clamp(0, _tabCount - 1);
_selection.value = _selection.values[targetIndex];
return new Future.value();
return new Future<Null>.value();
}
final int selectionIndex = _selection.index;
......@@ -947,16 +947,16 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
if (selectionIndex > 0 && settleIndex != 1) {
final int targetIndex = (selectionIndex + (settleIndex == 2 ? 1 : -1)).clamp(0, _tabCount - 1);
_selection.value = _selection.values[targetIndex];
return new Future.value();
return new Future<Null>.value();
} else if (selectionIndex == 0 && settleIndex == 1) {
_selection.value = _selection.values[1];
return new Future.value();
return new Future<Null>.value();
}
return settleScrollOffset();
}
Widget buildContent(BuildContext context) {
TabBarSelectionState newSelection = TabBarSelection.of(context);
TabBarSelectionState<T> newSelection = TabBarSelection.of(context);
if (_selection != newSelection)
_initSelection(newSelection);
return new PageViewport(
......@@ -972,7 +972,7 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
class TabPageSelector<T> extends StatelessComponent {
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;
if (selection.valueIsChanging) {
// The selection's animation is animating from previousValue to value.
......@@ -998,7 +998,7 @@ class TabPageSelector<T> extends StatelessComponent {
}
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 ColorTween selectedColor = new ColorTween(begin: Colors.transparent, end: color);
final ColorTween previousColor = new ColorTween(begin: color, end: Colors.transparent);
......
......@@ -8,7 +8,7 @@ import 'theme_data.dart';
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.
class Theme extends InheritedWidget {
......@@ -73,7 +73,7 @@ class AnimatedTheme extends AnimatedWidgetBase {
class _AnimatedThemeState extends AnimatedWidgetBaseState<AnimatedTheme> {
ThemeDataTween _data;
void forEachTween(TweenVisitor visitor) {
void forEachTween(TweenVisitor<dynamic> visitor) {
// TODO(ianh): Use constructor tear-offs when it becomes possible
_data = visitor(_data, config.data, (dynamic value) => new ThemeDataTween(begin: value));
assert(_data != null);
......
......@@ -27,7 +27,7 @@ class BorderSide {
final double 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({
Color color,
......
......@@ -197,7 +197,7 @@ class TextPainter {
/// The minimum width at which to layout the text.
double get minWidth => _paragraph.minWidth;
void set minWidth(value) {
void set minWidth(double value) {
if (_paragraph.minWidth == value)
return;
_paragraph.minWidth = value;
......@@ -206,7 +206,7 @@ class TextPainter {
/// The maximum width at which to layout the text.
double get maxWidth => _paragraph.maxWidth;
void set maxWidth(value) {
void set maxWidth(double value) {
if (_paragraph.maxWidth == value)
return;
_paragraph.maxWidth = value;
......@@ -215,7 +215,7 @@ class TextPainter {
/// The minimum height at which to layout the text.
double get minHeight => _paragraph.minHeight;
void set minHeight(value) {
void set minHeight(double value) {
if (_paragraph.minHeight == value)
return;
_paragraph.minHeight = value;
......@@ -224,7 +224,7 @@ class TextPainter {
/// The maximum height at which to layout the text.
double get maxHeight => _paragraph.maxHeight;
void set maxHeight(value) {
void set maxHeight(double value) {
if (_paragraph.maxHeight == value)
return;
_paragraph.maxHeight = value;
......
......@@ -7,9 +7,9 @@ typedef void ValueChanged<T>(T value);
/// 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.
class BitField<T extends dynamic> {
static const _kSMIBits = 63; // see https://www.dartlang.org/articles/numeric-computation/#smis-and-mints
static const _kAllZeros = 0;
static const _kAllOnes = 0x7FFFFFFFFFFFFFFF; // 2^(_kSMIBits+1)-1
static const int _kSMIBits = 63; // see https://www.dartlang.org/articles/numeric-computation/#smis-and-mints
static const int _kAllZeros = 0;
static const int _kAllOnes = 0x7FFFFFFFFFFFFFFF; // 2^(_kSMIBits+1)-1
BitField(this._length) : _bits = _kAllZeros {
assert(_length <= _kSMIBits);
}
......
......@@ -11,9 +11,9 @@ import 'box.dart';
import 'object.dart';
import 'viewport.dart';
const _kCaretGap = 1.0; // pixels
const _kCaretHeightOffset = 2.0; // pixels
const _kCaretWidth = 1.0; // pixels
const double _kCaretGap = 1.0; // pixels
const double _kCaretHeightOffset = 2.0; // pixels
const double _kCaretWidth = 1.0; // pixels
final String _kZeroWidthSpace = new String.fromCharCode(0x200B);
......
......@@ -561,7 +561,7 @@ class RenderFlex extends RenderBox with ContainerRenderObjectMixin<RenderBox, Fl
Paint markerPaint = new Paint()..color = const Color(0xE0FF0000);
Paint highlightPaint = new Paint()..color = const Color(0x7FFF0000);
const kMarkerSize = 0.1;
const double kMarkerSize = 0.1;
Rect markerRect, overflowRect;
switch(direction) {
case FlexDirection.horizontal:
......
......@@ -756,7 +756,7 @@ abstract class CustomClipper<T> {
Rect getApproximateClipRect(Size size) => Point.origin & size;
/// Returns true if the new instance will result in a different clip
/// than the oldClipper instance.
bool shouldRepaint(CustomClipper oldClipper);
bool shouldRepaint(CustomClipper<T> oldClipper);
}
abstract class _RenderCustomClip<T> extends RenderProxyBox {
......@@ -1100,13 +1100,13 @@ class RenderTransform extends RenderProxyBox {
}
/// 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);
markNeedsPaint();
}
/// 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);
markNeedsPaint();
}
......
......@@ -176,7 +176,7 @@ class RenderPadding extends RenderShiftedBox {
context.canvas.drawPath(path, paint);
paint = new Paint()
..color = debugPaintPaddingInnerEdgeColor;
const kOutline = 2.0;
const double kOutline = 2.0;
path = new Path()
..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))
......
......@@ -198,7 +198,7 @@ abstract class RenderStackBase extends RenderBox
RenderBoxContainerDefaultsMixin<RenderBox, StackParentData> {
RenderStackBase({
List<RenderBox> children,
alignment: const FractionalOffset(0.0, 0.0)
FractionalOffset alignment: const FractionalOffset(0.0, 0.0)
}) : _alignment = alignment {
addAll(children);
}
......@@ -425,7 +425,7 @@ abstract class RenderStackBase extends RenderBox
class RenderStack extends RenderStackBase {
RenderStack({
List<RenderBox> children,
alignment: const FractionalOffset(0.0, 0.0)
FractionalOffset alignment: const FractionalOffset(0.0, 0.0)
}) : super(
children: children,
alignment: alignment
......@@ -444,7 +444,7 @@ class RenderStack extends RenderStackBase {
class RenderIndexedStack extends RenderStackBase {
RenderIndexedStack({
List<RenderBox> children,
alignment: const FractionalOffset(0.0, 0.0),
FractionalOffset alignment: const FractionalOffset(0.0, 0.0),
int index: 0
}) : _index = index, super(
children: children,
......
......@@ -106,7 +106,7 @@ abstract class Scheduler extends BindingBase {
// Note that we inverse the 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.
bool _hasRequestedAnEventLoopCallback = false;
......
......@@ -16,17 +16,17 @@ class Ticker {
final TickerCallback _onTick;
Completer _completer;
Completer<Null> _completer;
int _animationId;
Duration _startTime;
/// Starts calling onTick once per animation frame.
///
/// The returned future resolves once the ticker stops ticking.
Future start() {
Future<Null> start() {
assert(!isTicking);
assert(_startTime == null);
_completer = new Completer();
_completer = new Completer<Null>();
_scheduleTick();
return _completer.future;
}
......@@ -48,7 +48,7 @@ class Ticker {
// We take the _completer into a local variable so that isTicking is false
// when we actually complete the future (isTicking uses _completer
// to determine its state).
Completer localCompleter = _completer;
Completer<Null> localCompleter = _completer;
_completer = null;
assert(!isTicking);
localCompleter.complete();
......
......@@ -80,7 +80,7 @@ class MojoAssetBundle extends CachingAssetBundle {
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;
AssetUnpackerProxy unpacker = new AssetUnpackerProxy.unbound();
shell.connectToService("mojo:asset_bundle", unpacker);
......
......@@ -36,8 +36,11 @@ class _UrlFetcher implements ImageProvider {
);
}
bool operator ==(other) {
return other is _UrlFetcher && _url == other._url && _scale == other._scale;
bool operator ==(dynamic other) {
if (other is! _UrlFetcher)
return false;
final _UrlFetcher typedOther = other;
return _url == typedOther._url && _scale == typedOther._scale;
}
int get hashCode => hashValues(_url, _scale);
......
......@@ -24,7 +24,12 @@ typedef void ImageListener(ImageInfo image);
/// or because the underlying image resource was mutated.
class ImageResource {
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;
......
......@@ -86,9 +86,9 @@ abstract class _VariantAssetResolver extends _AssetResolver {
// one.
Map<String, List<String>> _assetManifest;
Future _initializer;
Future<Null> _initializer;
Future _loadManifest() async {
Future<Null> _loadManifest() async {
String json = await bundle.loadString("AssetManifest.json");
_assetManifest = JSON.decode(json);
}
......
......@@ -419,7 +419,7 @@ class Align extends OneChildRenderObjectWidget {
/// Centers its child within itself.
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);
}
......@@ -453,7 +453,7 @@ class LayoutId extends ParentDataWidget<CustomMultiChildLayout> {
Key key,
Widget child,
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(id != null);
}
......@@ -1388,9 +1388,9 @@ class Row extends Flex {
Row({
Key key,
List<Widget> children: _emptyWidgetList,
justifyContent: FlexJustifyContent.start,
alignItems: FlexAlignItems.center,
textBaseline
FlexJustifyContent justifyContent: FlexJustifyContent.start,
FlexAlignItems alignItems: FlexAlignItems.center,
TextBaseline textBaseline
}) : super(
children: children,
key: key,
......@@ -1409,9 +1409,9 @@ class Column extends Flex {
Column({
Key key,
List<Widget> children: _emptyWidgetList,
justifyContent: FlexJustifyContent.start,
alignItems: FlexAlignItems.center,
textBaseline
FlexJustifyContent justifyContent: FlexJustifyContent.start,
FlexAlignItems alignItems: FlexAlignItems.center,
TextBaseline textBaseline
}) : super(
children: children,
key: key,
......
......@@ -222,9 +222,11 @@ class RenderObjectToWidgetAdapter<T extends RenderObject> extends RenderObjectWi
class RenderObjectToWidgetElement<T extends RenderObject> extends RenderObjectElement {
RenderObjectToWidgetElement(RenderObjectToWidgetAdapter<T> widget) : super(widget);
RenderObjectToWidgetAdapter<T> get widget => super.widget;
Element _child;
static const _rootChildSlot = const Object();
static const Object _rootChildSlot = const Object();
void visitChildren(ElementVisitor visitor) {
if (_child != null)
......
......@@ -10,12 +10,12 @@ import 'framework.dart';
class _CheckedModeBannerPainter extends CustomPainter {
const _CheckedModeBannerPainter();
static const 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 kHeight = 12.0; // height of banner
static const kTextAlign = const Offset(0.0, -3.0); // offset to move text up
static const kFontSize = kHeight * 0.85;
static const kShadowBlur = 4.0; // shadow blur sigma
static const Color kColor = const Color(0xA0B71C1C);
static const double kOffset = 40.0; // distance to bottom of banner, at a 45 degree angle inwards from the top right corner
static const double kHeight = 12.0; // height of banner
static const Offset kTextAlign = const Offset(0.0, -3.0); // offset to move text up
static const double kFontSize = kHeight * 0.85;
static const double kShadowBlur = 4.0; // shadow blur sigma
static final Rect kRect = new Rect.fromLTWH(-kOffset, kOffset-kHeight, kOffset * 2.0, kHeight);
static const TextStyle kTextStyles = const TextStyle(
color: const Color(0xFFFFFFFF),
......
......@@ -80,7 +80,7 @@ abstract class DraggableBase<T> extends StatefulComponent {
/// Should return a new MultiDragGestureRecognizer instance
/// constructed with the given arguments.
MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart);
MultiDragGestureRecognizer<dynamic> createRecognizer(GestureMultiDragStartCallback onStart);
_DraggableState<T> createState() => new _DraggableState<T>();
}
......@@ -107,7 +107,7 @@ class Draggable<T> extends DraggableBase<T> {
maxSimultaneousDrags: maxSimultaneousDrags
);
MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
ImmediateMultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new ImmediateMultiDragGestureRecognizer()..onStart = onStart;
}
}
......@@ -135,7 +135,7 @@ class HorizontalDraggable<T> extends DraggableBase<T> {
maxSimultaneousDrags: maxSimultaneousDrags
);
MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
HorizontalMultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new HorizontalMultiDragGestureRecognizer()..onStart = onStart;
}
}
......@@ -163,7 +163,7 @@ class VerticalDraggable<T> extends DraggableBase<T> {
maxSimultaneousDrags: maxSimultaneousDrags
);
MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
VerticalMultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new VerticalMultiDragGestureRecognizer()..onStart = onStart;
}
}
......@@ -190,7 +190,7 @@ class LongPressDraggable<T> extends DraggableBase<T> {
maxSimultaneousDrags: maxSimultaneousDrags
);
MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
DelayedMultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new DelayedMultiDragGestureRecognizer()
..onStart = (Point position) {
Drag result = onStart(position);
......@@ -217,7 +217,7 @@ class _DraggableState<T> extends State<DraggableBase<T>> {
_recognizer.addPointer(event);
}
_DragAvatar _startDrag(Point position) {
_DragAvatar<T> _startDrag(Point position) {
if (config.maxSimultaneousDrags != null && _activeCount >= config.maxSimultaneousDrags)
return null;
Point dragStartPoint;
......@@ -361,7 +361,7 @@ class _DragAvatar<T> extends Drag {
final Offset feedbackOffset;
final VoidCallback onDragEnd;
_DragTargetState _activeTarget;
_DragTargetState<T> _activeTarget;
bool _activeTargetWillAcceptDrop = false;
Point _position;
Offset _lastOffset;
......@@ -384,7 +384,7 @@ class _DragAvatar<T> extends Drag {
_entry.markNeedsBuild();
HitTestResult result = new HitTestResult();
WidgetFlutterBinding.instance.hitTest(result, globalPosition + feedbackOffset);
_DragTargetState target = _getDragTarget(result.path);
_DragTargetState<T> target = _getDragTarget(result.path);
if (target == _activeTarget)
return;
if (_activeTarget != null)
......@@ -393,13 +393,13 @@ class _DragAvatar<T> extends Drag {
_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
// widget builds a RenderMetadata box for us for this purpose).
for (HitTestEntry entry in path) {
if (entry.target is RenderMetaData) {
RenderMetaData renderMetaData = entry.target;
if (renderMetaData.metaData is _DragTargetState)
if (renderMetaData.metaData is _DragTargetState<T>)
return renderMetaData.metaData;
}
}
......
......@@ -192,7 +192,7 @@ class RawInputLineState extends ScrollableState<RawInputLine> {
_KeyboardClientImpl _keyboardClient;
KeyboardHandle _keyboardHandle;
ScrollBehavior createScrollBehavior() => new BoundedBehavior();
ScrollBehavior<double, double> createScrollBehavior() => new BoundedBehavior();
BoundedBehavior get scrollBehavior => super.scrollBehavior;
void initState() {
......
......@@ -104,10 +104,11 @@ class Hero extends StatefulComponent {
Map<Object, Map<Key, HeroState>> heroes = <Object, Map<Key, HeroState>>{};
void visitor(Element element) {
if (element.widget is Hero) {
StatefulComponentElement<Hero, HeroState> hero = element;
Object tag = hero.widget.tag;
StatefulComponentElement hero = element;
Hero heroWidget = element.widget;
Object tag = heroWidget.tag;
assert(tag != null);
Key key = hero.widget.key;
Key key = heroWidget.key;
final Map<Key, HeroState> tagHeroes = heroes.putIfAbsent(tag, () => <Key, HeroState>{});
assert(() {
if (tagHeroes.containsKey(key)) {
......@@ -395,17 +396,17 @@ class HeroController extends NavigatorObserver {
HeroParty _party;
Animation<double> _animation;
PageRoute _from;
PageRoute _to;
PageRoute<dynamic> _from;
PageRoute<dynamic> _to;
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(route != null);
if (route is PageRoute) {
if (route is PageRoute<dynamic>) {
assert(route.animation != null);
if (previousRoute is PageRoute) // could be null
if (previousRoute is PageRoute<dynamic>) // could be null
_from = previousRoute;
_to = route;
_animation = route.animation;
......@@ -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(route != null);
if (route is PageRoute) {
if (route is PageRoute<dynamic>) {
assert(route.animation != null);
if (previousRoute is PageRoute) {
if (previousRoute is PageRoute<dynamic>) {
_to = previousRoute;
_from = route;
_animation = route.animation;
......
......@@ -68,7 +68,7 @@ abstract class AnimatedWidgetBase extends StatefulComponent {
/// The duration over which to animate the parameters of this container.
final Duration duration;
AnimatedWidgetBaseState createState();
AnimatedWidgetBaseState<AnimatedWidgetBase> createState();
void debugFillDescription(List<String> description) {
super.debugFillDescription(description);
......@@ -105,7 +105,7 @@ abstract class AnimatedWidgetBaseState<T extends AnimatedWidgetBase> extends Sta
_updateCurve();
_controller.duration = config.duration;
if (_constructTweens()) {
forEachTween((Tween tween, dynamic targetValue, TweenConstructor<T> constructor) {
forEachTween((Tween<dynamic> tween, dynamic targetValue, TweenConstructor<dynamic> constructor) {
_updateTween(tween, targetValue);
return tween;
});
......@@ -131,11 +131,11 @@ abstract class AnimatedWidgetBaseState<T extends AnimatedWidgetBase> extends Sta
setState(() { });
}
bool _shouldAnimateTween(Tween tween, dynamic targetValue) {
bool _shouldAnimateTween(Tween<dynamic> tween, dynamic targetValue) {
return targetValue != (tween.end ?? tween.begin);
}
void _updateTween(Tween tween, dynamic targetValue) {
void _updateTween(Tween<dynamic> tween, dynamic targetValue) {
if (tween == null)
return;
tween
......@@ -145,7 +145,7 @@ abstract class AnimatedWidgetBaseState<T extends AnimatedWidgetBase> extends Sta
bool _constructTweens() {
bool shouldStartAnimation = false;
forEachTween((Tween tween, dynamic targetValue, TweenConstructor<T> constructor) {
forEachTween((Tween<dynamic> tween, dynamic targetValue, TweenConstructor<T> constructor) {
if (targetValue != null) {
tween ??= constructor(targetValue);
if (_shouldAnimateTween(tween, targetValue))
......@@ -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
/// value to use as the current value the next time that the forEachTween()
/// method is called.
void forEachTween(TweenVisitor visitor);
void forEachTween(TweenVisitor<dynamic> visitor);
}
/// A container that gradually changes its values over a period of time.
......@@ -262,7 +262,7 @@ class _AnimatedContainerState extends AnimatedWidgetBaseState<AnimatedContainer>
Tween<double> _width;
Tween<double> _height;
void forEachTween(TweenVisitor visitor) {
void forEachTween(TweenVisitor<dynamic> visitor) {
// TODO(ianh): Use constructor tear-offs when it becomes possible
_constraints = visitor(_constraints, config.constraints, (dynamic value) => new BoxConstraintsTween(begin: value));
_decoration = visitor(_decoration, config.decoration, (dynamic value) => new DecorationTween(begin: value));
......@@ -381,7 +381,7 @@ class _AnimatedPositionedState extends AnimatedWidgetBaseState<AnimatedPositione
Tween<double> _width;
Tween<double> _height;
void forEachTween(TweenVisitor visitor) {
void forEachTween(TweenVisitor<dynamic> visitor) {
// TODO(ianh): Use constructor tear-offs when it becomes possible
_left = visitor(_left, config.left, (dynamic value) => new Tween<double>(begin: value));
_top = visitor(_top, config.top, (dynamic value) => new Tween<double>(begin: value));
......
......@@ -5,10 +5,10 @@
import 'framework.dart';
/// 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.
class LocaleQuery<T extends LocaleQueryData> extends InheritedWidget {
class LocaleQuery extends InheritedWidget {
LocaleQuery({
Key key,
this.data,
......@@ -18,7 +18,7 @@ class LocaleQuery<T extends LocaleQueryData> extends InheritedWidget {
}
/// 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.
static LocaleQueryData of(BuildContext context) {
......
......@@ -48,7 +48,7 @@ class MimicOverlayEntry {
/// given curve.
///
/// This function can only be called once per overlay entry.
Future animateTo({
Future<Null> animateTo({
GlobalKey targetKey,
Duration duration,
Curve curve: Curves.linear
......
......@@ -68,12 +68,14 @@ class _ChildKey {
String toString() => "_ChildKey(type: $type, key: $key)";
}
class _MixedViewportElement extends RenderObjectElement<MixedViewport> {
class _MixedViewportElement extends RenderObjectElement {
_MixedViewportElement(MixedViewport widget) : super(widget) {
if (widget.onInvalidatorAvailable != null)
widget.onInvalidatorAvailable(invalidate);
}
MixedViewport get widget => super.widget;
/// _childExtents contains the extents of each child from the top of the list
/// up to the last one we've ever created.
final List<double> _childExtents = <double>[];
......
......@@ -33,7 +33,7 @@ abstract class Route<T> {
void didPush() { }
/// 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
/// internally (e.g. because it has its own stack of internal state) then
......@@ -49,13 +49,13 @@ abstract class Route<T> {
/// The given route, which came after this one, has been popped off the
/// 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
/// 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.
/// 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.
///
......@@ -109,7 +109,7 @@ class RouteSettings {
}
/// 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.
typedef void NavigatorTransactionCallback(NavigatorTransaction transaction);
......@@ -121,10 +121,10 @@ class NavigatorObserver {
NavigatorState _navigator;
/// 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.
void didPop(Route route, Route previousRoute) { }
void didPop(Route<dynamic> route, Route<dynamic> previousRoute) { }
}
/// Manages a set of child widgets with a stack discipline.
......@@ -189,7 +189,7 @@ class Navigator extends StatefulComponent {
/// Navigator observer, if any, will have didPush() called on it.
///
/// 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) {
transaction.push(route);
});
......@@ -224,7 +224,7 @@ class Navigator extends StatefulComponent {
/// If it is already the current route, nothing happens.
///
/// 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) {
transaction.popUntil(targetRoute);
});
......@@ -277,7 +277,7 @@ class Navigator extends StatefulComponent {
/// The state for a [Navigator] widget.
class NavigatorState extends State<Navigator> {
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() {
super.initState();
......@@ -301,7 +301,7 @@ class NavigatorState extends State<Navigator> {
assert(!_debugLocked);
assert(() { _debugLocked = true; return true; });
config.observer?._navigator = null;
for (Route route in _history) {
for (Route<dynamic> route in _history) {
route.dispose();
route._navigator = null;
}
......@@ -313,7 +313,7 @@ class NavigatorState extends State<Navigator> {
OverlayState get overlay => _overlayKey.currentState;
OverlayEntry get _currentOverlayEntry {
for (Route route in _history.reversed) {
for (Route<dynamic> route in _history.reversed) {
if (route.overlayEntries.isNotEmpty)
return route.overlayEntries.last;
}
......@@ -329,7 +329,7 @@ class NavigatorState extends State<Navigator> {
name: name,
mostValuableKeys: mostValuableKeys
);
Route route = config.onGenerateRoute(settings);
Route<dynamic> route = config.onGenerateRoute(settings);
if (route == null) {
assert(config.onUnknownRoute != null);
route = config.onUnknownRoute(settings);
......@@ -338,13 +338,13 @@ class NavigatorState extends State<Navigator> {
_push(route);
}
void _push(Route route) {
void _push(Route<dynamic> route) {
assert(!_debugLocked);
assert(() { _debugLocked = true; return true; });
assert(route != null);
assert(route._navigator == null);
setState(() {
Route oldRoute = _history.isNotEmpty ? _history.last : null;
Route<dynamic> oldRoute = _history.isNotEmpty ? _history.last : null;
route._navigator = this;
route.install(_currentOverlayEntry);
_history.add(route);
......@@ -357,7 +357,7 @@ class NavigatorState extends State<Navigator> {
assert(() { _debugLocked = false; return true; });
}
void _replace({ Route oldRoute, Route newRoute }) {
void _replace({ Route<dynamic> oldRoute, Route<dynamic> newRoute }) {
assert(!_debugLocked);
assert(oldRoute != null);
assert(newRoute != null);
......@@ -388,25 +388,25 @@ class NavigatorState extends State<Navigator> {
assert(() { _debugLocked = false; return true; });
}
void _replaceRouteBefore({ Route anchorRoute, Route newRoute }) {
void _replaceRouteBefore({ Route<dynamic> anchorRoute, Route<dynamic> newRoute }) {
assert(anchorRoute != null);
assert(anchorRoute._navigator == this);
assert(_history.indexOf(anchorRoute) > 0);
_replace(oldRoute: _history[_history.indexOf(anchorRoute)-1], newRoute: newRoute);
}
void _removeRouteBefore(Route anchorRoute) {
void _removeRouteBefore(Route<dynamic> anchorRoute) {
assert(!_debugLocked);
assert(() { _debugLocked = true; return true; });
assert(anchorRoute._navigator == this);
int index = _history.indexOf(anchorRoute) - 1;
assert(index >= 0);
Route targetRoute = _history[index];
Route<dynamic> targetRoute = _history[index];
assert(targetRoute._navigator == this);
assert(targetRoute.overlayEntries.isEmpty || !overlay.debugIsVisible(targetRoute.overlayEntries.last));
setState(() {
_history.removeAt(index);
Route newRoute = index < _history.length ? _history[index] : null;
Route<dynamic> newRoute = index < _history.length ? _history[index] : null;
if (index > 0)
_history[index - 1].didChangeNext(newRoute);
targetRoute.dispose();
......@@ -418,7 +418,7 @@ class NavigatorState extends State<Navigator> {
bool _pop([dynamic result]) {
assert(!_debugLocked);
assert(() { _debugLocked = true; return true; });
Route route = _history.last;
Route<dynamic> route = _history.last;
assert(route._navigator == this);
bool debugPredictedWouldPop;
assert(() { debugPredictedWouldPop = !route.willHandlePopInternally; return true; });
......@@ -445,7 +445,7 @@ class NavigatorState extends State<Navigator> {
return true;
}
void _popUntil(Route targetRoute) {
void _popUntil(Route<dynamic> targetRoute) {
assert(_history.contains(targetRoute));
while (!targetRoute.isCurrent)
_pop();
......@@ -512,7 +512,7 @@ class NavigatorTransaction {
/// The route will have didPush() and didChangeNext() called on it; the
/// previous route, if any, will have didChangeNext() called on it; and the
/// Navigator observer, if any, will have didPush() called on it.
void push(Route route) {
void push(Route<dynamic> route) {
assert(_debugOpen);
_navigator._push(route);
}
......@@ -528,7 +528,7 @@ class NavigatorTransaction {
///
/// It is safe to call this redundantly (replacing a route with itself). Such
/// calls are ignored.
void replace({ Route oldRoute, Route newRoute }) {
void replace({ Route<dynamic> oldRoute, Route<dynamic> newRoute }) {
assert(_debugOpen);
_navigator._replace(oldRoute: oldRoute, newRoute: newRoute);
}
......@@ -541,14 +541,14 @@ class NavigatorTransaction {
///
/// The conditions described for [replace()] apply; for instance, the route
/// before anchorRoute must have overlay entries.
void replaceRouteBefore({ Route anchorRoute, Route newRoute }) {
void replaceRouteBefore({ Route<dynamic> anchorRoute, Route<dynamic> newRoute }) {
assert(_debugOpen);
_navigator._replaceRouteBefore(anchorRoute: anchorRoute, newRoute: newRoute);
}
/// 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.
void removeRouteBefore(Route anchorRoute) {
void removeRouteBefore(Route<dynamic> anchorRoute) {
assert(_debugOpen);
_navigator._removeRouteBefore(anchorRoute);
}
......@@ -573,7 +573,7 @@ class NavigatorTransaction {
/// Calls pop() repeatedly until the given route is the current route.
/// If it is already the current route, nothing happens.
void popUntil(Route targetRoute) {
void popUntil(Route<dynamic> targetRoute) {
assert(_debugOpen);
_navigator._popUntil(targetRoute);
}
......
......@@ -13,9 +13,9 @@ abstract class Notification {
void dispatch(BuildContext target) {
target.visitAncestorElements((Element element) {
if (element is StatelessComponentElement &&
element.widget is NotificationListener) {
final NotificationListener widget = element.widget;
if (widget._dispatch(this))
element.widget is NotificationListener<dynamic>) {
final NotificationListener<dynamic> widget = element.widget;
if (widget._dispatch(this)) // that function checks the type dynamically
return false;
}
return true;
......
......@@ -71,7 +71,7 @@ class PageableList extends Scrollable {
/// The list of pages themselves.
final Iterable<Widget> children;
PageableListState createState() => new PageableListState();
PageableListState<PageableList> createState() => new PageableListState<PageableList>();
}
/// State for a [PageableList] widget.
......@@ -185,7 +185,7 @@ class PageableListState<T extends PageableList> extends ScrollableState<T> {
return _overscrollBehavior;
}
ScrollBehavior createScrollBehavior() => scrollBehavior;
ScrollBehavior<double, double> createScrollBehavior() => scrollBehavior;
bool get shouldSnapScrollOffset => config.itemsSnapAlignment == ItemsSnapAlignment.item;
......@@ -196,14 +196,14 @@ class PageableListState<T extends PageableList> extends ScrollableState<T> {
.clamp(scrollBehavior.minScrollOffset, scrollBehavior.maxScrollOffset);
}
Future _flingToAdjacentItem(double scrollVelocity) {
Future<Null> _flingToAdjacentItem(double scrollVelocity) {
final double newScrollOffset = snapScrollOffset(scrollOffset + scrollVelocity.sign)
.clamp(snapScrollOffset(scrollOffset - 0.5), snapScrollOffset(scrollOffset + 0.5));
return scrollTo(newScrollOffset, duration: config.duration, curve: config.curve)
.then(_notifyPageChanged);
}
Future fling(double scrollVelocity) {
Future<Null> fling(double scrollVelocity) {
switch(config.itemsSnapAlignment) {
case ItemsSnapAlignment.adjacentItem:
return _flingToAdjacentItem(scrollVelocity);
......@@ -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)
.then(_notifyPageChanged);
}
......@@ -247,9 +247,11 @@ class PageViewport extends VirtualViewportFromIterable {
_PageViewportElement createElement() => new _PageViewportElement(this);
}
class _PageViewportElement extends VirtualViewportElement<PageViewport> {
class _PageViewportElement extends VirtualViewportElement {
_PageViewportElement(PageViewport widget) : super(widget);
PageViewport get widget => super.widget;
RenderList get renderObject => super.renderObject;
int get materializedChildBase => _materializedChildBase;
......
......@@ -17,8 +17,8 @@ abstract class PageRoute<T> extends ModalRoute<T> {
}) : super(completer: completer, settings: settings);
bool get opaque => true;
bool get barrierDismissable => false;
bool canTransitionTo(TransitionRoute nextRoute) => nextRoute is PageRoute;
bool canTransitionFrom(TransitionRoute nextRoute) => nextRoute is PageRoute;
bool canTransitionTo(TransitionRoute<dynamic> nextRoute) => nextRoute is PageRoute<dynamic>;
bool canTransitionFrom(TransitionRoute<dynamic> nextRoute) => nextRoute is PageRoute<dynamic>;
AnimationController createAnimationController() {
AnimationController controller = super.createAnimationController();
......
......@@ -13,7 +13,7 @@ import 'overlay.dart';
import 'page_storage.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].
abstract class OverlayRoute<T> extends Route<T> {
......@@ -159,8 +159,8 @@ abstract class TransitionRoute<T> extends OverlayRoute<T> {
super.didPush();
}
void didReplace(Route oldRoute) {
if (oldRoute is TransitionRoute)
void didReplace(Route<dynamic> oldRoute) {
if (oldRoute is TransitionRoute<dynamic>)
_controller.value = oldRoute._controller.value;
_animation.addStatusListener(_handleStatusChanged);
super.didReplace(oldRoute);
......@@ -173,18 +173,18 @@ abstract class TransitionRoute<T> extends OverlayRoute<T> {
return true;
}
void didPopNext(Route nextRoute) {
void didPopNext(Route<dynamic> nextRoute) {
_updateForwardAnimation(nextRoute);
super.didPopNext(nextRoute);
}
void didChangeNext(Route nextRoute) {
void didChangeNext(Route<dynamic> nextRoute) {
_updateForwardAnimation(nextRoute);
super.didChangeNext(nextRoute);
}
void _updateForwardAnimation(Route nextRoute) {
if (nextRoute is TransitionRoute && canTransitionTo(nextRoute) && nextRoute.canTransitionFrom(this)) {
void _updateForwardAnimation(Route<dynamic> nextRoute) {
if (nextRoute is TransitionRoute<dynamic> && canTransitionTo(nextRoute) && nextRoute.canTransitionFrom(this)) {
Animation<double> current = _forwardAnimation.parent;
if (current != null) {
if (current is TrainHoppingAnimation) {
......@@ -216,13 +216,13 @@ abstract class TransitionRoute<T> extends OverlayRoute<T> {
///
/// Subclasses can override this function to restrict the set of routes they
/// 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.
///
/// Subclasses can override this function to restrict the set of routes they
/// need to coordinate transitions with.
bool canTransitionFrom(TransitionRoute nextRoute) => true;
bool canTransitionFrom(TransitionRoute<dynamic> nextRoute) => true;
void finished() {
super.finished();
......@@ -245,7 +245,7 @@ class LocalHistoryEntry {
/// Called when this entry is removed from the history of its associated [LocalHistoryRoute].
final VoidCallback onRemove;
LocalHistoryRoute _owner;
LocalHistoryRoute<dynamic> _owner;
/// Remove this entry from the history of its associated [LocalHistoryRoute].
void remove() {
......@@ -323,7 +323,7 @@ class _ModalScopeStatus extends InheritedWidget {
}
final bool isCurrent;
final Route route;
final Route<dynamic> route;
bool updateShouldNotify(_ModalScopeStatus old) {
return isCurrent != old.isCurrent ||
......@@ -342,7 +342,7 @@ class _ModalScope extends StatefulComponent {
this.route
}) : super(key: key);
final ModalRoute route;
final ModalRoute<dynamic> route;
_ModalScopeState createState() => new _ModalScopeState();
}
......@@ -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 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);
return widget?.route;
}
......@@ -581,8 +581,8 @@ abstract class ModalRoute<T> extends TransitionRoute<T> with LocalHistoryRoute<T
abstract class PopupRoute<T> extends ModalRoute<T> {
PopupRoute({ Completer<T> completer }) : super(completer: completer);
bool get opaque => false;
void didChangeNext(Route nextRoute) {
assert(nextRoute is! PageRoute);
void didChangeNext(Route<dynamic> nextRoute) {
assert(nextRoute is! PageRoute<dynamic>);
super.didChangeNext(nextRoute);
}
}
......@@ -112,13 +112,13 @@ abstract class Scrollable extends StatefulComponent {
}
/// 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);
// TODO(abarth): This function doesn't handle nested scrollable widgets.
ScrollableState scrollable = Scrollable.of(context);
if (scrollable == null)
return new Future.value();
return new Future<Null>.value();
RenderBox targetBox = context.findRenderObject();
assert(targetBox.attached);
......@@ -162,7 +162,7 @@ abstract class Scrollable extends StatefulComponent {
} else if (targetMax > scrollableMax) {
scrollOffsetDelta = targetMax - scrollableMax;
} else {
return new Future.value();
return new Future<Null>.value();
}
ExtentScrollBehavior scrollBehavior = scrollable.scrollBehavior;
......@@ -172,13 +172,14 @@ abstract class Scrollable extends StatefulComponent {
if (scrollOffset != scrollable.scrollOffset)
return scrollable.scrollTo(scrollOffset, duration: duration, curve: curve);
return new Future.value();
return new Future<Null>.value();
}
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
/// that subclass [ScrollableState].
......@@ -299,14 +300,14 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> {
/// Scroll behaviors control where the boundaries of the scrollable are placed
/// and how the scrolling physics should behave near those boundaries and
/// after the user stops directly manipulating the scrollable.
ScrollBehavior get scrollBehavior {
ScrollBehavior<double, double> get scrollBehavior {
return _scrollBehavior ??= createScrollBehavior();
}
ScrollBehavior _scrollBehavior;
ScrollBehavior<double, double> _scrollBehavior;
/// Subclasses should override this function to create the [ScrollBehavior]
/// they desire.
ScrollBehavior createScrollBehavior();
ScrollBehavior<double, double> createScrollBehavior();
bool _scrollOffsetIsInBounds(double scrollOffset) {
if (scrollBehavior is! ExtentScrollBehavior)
......@@ -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
/// 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);
return scrollTo(newScrollOffset, duration: duration, curve: curve);
}
......@@ -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
/// the new offset, do not provide a duration, rather than providing
/// 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)
return new Future.value();
return new Future<Null>.value();
if (duration == null) {
_controller.stop();
_setScrollOffset(newScrollOffset);
return new Future.value();
return new Future<Null>.value();
}
assert(duration > Duration.ZERO);
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.value = scrollOffset;
_startScroll();
......@@ -375,10 +376,10 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> {
/// Calling this function starts a physics-based animation of the scroll
/// offset with the given value as the initial velocity. The physics
/// simulation used is determined by the scroll behavior.
Future fling(double scrollVelocity) {
Future<Null> fling(double scrollVelocity) {
if (scrollVelocity != 0.0 || !_controller.isAnimating)
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.
......@@ -386,15 +387,15 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> {
/// Calling this function starts a physics-based animation of the scroll
/// offset either to a snap point or to within the scrolling bounds. The
/// physics simulation used is determined by the scroll behavior.
Future settleScrollOffset() {
Future<Null> settleScrollOffset() {
return _startToEndAnimation(0.0);
}
Future _startToEndAnimation(double scrollVelocity) {
Future<Null> _startToEndAnimation(double scrollVelocity) {
_controller.stop();
Simulation simulation = _createSnapSimulation(scrollVelocity) ?? _createFlingSimulation(scrollVelocity);
if (simulation == null)
return new Future.value();
return new Future<Null>.value();
_startScroll();
return _controller.animateWith(simulation).then(_endScroll);
}
......@@ -493,7 +494,7 @@ abstract class ScrollableState<T extends Scrollable> extends State<T> {
scrollBy(pixelOffsetToScrollOffset(delta));
}
Future _handleDragEnd(Velocity velocity) {
Future<Null> _handleDragEnd(Velocity velocity) {
double scrollVelocity = pixelDeltaToScrollOffset(velocity.pixelsPerSecond) / Duration.MILLISECONDS_PER_SECOND;
// The gesture velocity properties are pixels/second, config min,max limits are pixels/ms
return fling(scrollVelocity.clamp(-kMaxFlingVelocity, kMaxFlingVelocity)).then(_endScroll);
......@@ -631,7 +632,7 @@ class ScrollableViewport extends Scrollable {
}
class _ScrollableViewportState extends ScrollableState<ScrollableViewport> {
ScrollBehavior createScrollBehavior() => new OverscrollWhenScrollableBehavior();
ScrollBehavior<double, double> createScrollBehavior() => new OverscrollWhenScrollableBehavior();
OverscrollWhenScrollableBehavior get scrollBehavior => super.scrollBehavior;
double _viewportSize = 0.0;
......@@ -745,13 +746,13 @@ abstract class ScrollableListPainter extends Painter {
/// Called when a scroll starts. Subclasses may override this method to
/// initialize some state or to play an animation. The returned Future should
/// 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
/// "ended" means that the scroll animation either stopped of its own accord
/// 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
......@@ -793,7 +794,7 @@ class ScrollableMixedWidgetListState extends ScrollableState<ScrollableMixedWidg
);
}
ScrollBehavior createScrollBehavior() => new OverscrollBehavior();
ScrollBehavior<double, double> createScrollBehavior() => new OverscrollBehavior();
OverscrollBehavior get scrollBehavior => super.scrollBehavior;
Offset _handlePaintOffsetUpdateNeeded(ViewportDimensions dimensions) {
......
......@@ -41,7 +41,7 @@ class ScrollableGrid extends Scrollable {
}
class _ScrollableGridState extends ScrollableState<ScrollableGrid> {
ScrollBehavior createScrollBehavior() => new OverscrollBehavior();
ScrollBehavior<double, double> createScrollBehavior() => new OverscrollBehavior();
ExtentScrollBehavior get scrollBehavior => super.scrollBehavior;
void _handleExtentsChanged(double contentExtent, double containerExtent) {
......@@ -85,9 +85,11 @@ class GridViewport extends VirtualViewportFromIterable {
_GridViewportElement createElement() => new _GridViewportElement(this);
}
class _GridViewportElement extends VirtualViewportElement<GridViewport> {
class _GridViewportElement extends VirtualViewportElement {
_GridViewportElement(GridViewport widget) : super(widget);
GridViewport get widget => super.widget;
RenderGrid get renderObject => super.renderObject;
int get materializedChildBase => _materializedChildBase;
......
......@@ -45,7 +45,7 @@ class ScrollableList extends Scrollable {
}
class _ScrollableListState extends ScrollableState<ScrollableList> {
ScrollBehavior createScrollBehavior() => new OverscrollBehavior();
ScrollBehavior<double, double> createScrollBehavior() => new OverscrollBehavior();
ExtentScrollBehavior get scrollBehavior => super.scrollBehavior;
void _handleExtentsChanged(double contentExtent, double containerExtent) {
......@@ -145,9 +145,11 @@ class _VirtualListViewport extends VirtualViewport {
_VirtualListViewportElement createElement() => new _VirtualListViewportElement(this);
}
class _VirtualListViewportElement extends VirtualViewportElement<_VirtualListViewport> {
class _VirtualListViewportElement extends VirtualViewportElement {
_VirtualListViewportElement(VirtualViewport widget) : super(widget);
_VirtualListViewport get widget => super.widget;
RenderList get renderObject => super.renderObject;
int get materializedChildBase => _materializedChildBase;
......@@ -306,7 +308,7 @@ class ScrollableLazyList extends Scrollable {
}
class _ScrollableLazyListState extends ScrollableState<ScrollableLazyList> {
ScrollBehavior createScrollBehavior() => new OverscrollBehavior();
ScrollBehavior<double, double> createScrollBehavior() => new OverscrollBehavior();
ExtentScrollBehavior get scrollBehavior => super.scrollBehavior;
void _handleExtentsChanged(double contentExtent, double containerExtent) {
......
......@@ -296,12 +296,12 @@ class _SemanticsDebuggerListener implements mojom.SemanticsListener {
}
entry.updateMessage();
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 ??= new List<_SemanticsDebuggerEntry>();
for (mojom.SemanticsNode child in node.children)
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);
for (_SemanticsDebuggerEntry oldChild in removedChildren)
nodes.remove(oldChild.id);
......
......@@ -31,8 +31,10 @@ abstract class _WidgetProvider {
/// 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]
/// uses this element to materialize only those children that are visible.
abstract class VirtualViewportElement<T extends VirtualViewport> extends RenderObjectElement<T> {
VirtualViewportElement(T widget) : super(widget);
abstract class VirtualViewportElement extends RenderObjectElement {
VirtualViewportElement(VirtualViewport widget) : super(widget);
VirtualViewport get widget => super.widget;
/// The index of the first child to materialize.
int get materializedChildBase;
......@@ -70,7 +72,7 @@ abstract class VirtualViewportElement<T extends VirtualViewport> extends RenderO
List<Element> _materializedChildren = const <Element>[];
RenderVirtualViewport get renderObject => super.renderObject;
RenderVirtualViewport<dynamic> get renderObject => super.renderObject;
void visitChildren(ElementVisitor visitor) {
if (_materializedChildren == null)
......@@ -94,8 +96,8 @@ abstract class VirtualViewportElement<T extends VirtualViewport> extends RenderO
super.unmount();
}
void update(T newWidget) {
T oldWidget = widget;
void update(VirtualViewport newWidget) {
VirtualViewport oldWidget = widget;
_widgetProvider.didUpdateWidget(oldWidget, newWidget);
super.update(newWidget);
updateRenderObject(oldWidget);
......@@ -107,7 +109,7 @@ abstract class VirtualViewportElement<T extends VirtualViewport> extends RenderO
renderObject.paintOffset = scrollOffsetToPixelDelta(widget.startOffset - startOffsetBase);
}
void updateRenderObject(T oldWidget) {
void updateRenderObject(VirtualViewport oldWidget) {
renderObject.virtualChildCount = _widgetProvider.virtualChildCount;
if (startOffsetBase != null) {
......@@ -161,7 +163,7 @@ abstract class VirtualViewportElement<T extends VirtualViewport> extends RenderO
for (int i = 0; i < count; ++i) {
int childIndex = base + i;
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);
}
_materializedChildren = updateChildren(_materializedChildren, newWidgets);
......
......@@ -64,10 +64,10 @@ void main() {
});
test("should not have a 0 sized colored Box", () {
var coloredBox = new RenderDecoratedBox(
RenderBox coloredBox = new RenderDecoratedBox(
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);
RenderBox root = new RenderDecoratedBox(
decoration: new BoxDecoration(),
......
......@@ -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;
}
TestImage getTestImage(tester, Key key) {
TestImage getTestImage(WidgetTester tester, Key key) {
return getRenderImage(tester, key).image;
}
......
......@@ -10,7 +10,7 @@ void main() {
test('Verify that a BottomSheet can be rebuilt with ScaffoldFeatureController.setState()', () {
testWidgets((WidgetTester tester) {
final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();
ScaffoldFeatureController bottomSheet;
PersistentBottomSheetController<Null> bottomSheet;
int buildCount = 0;
tester.pumpWidget(new MaterialApp(
......@@ -24,7 +24,7 @@ void main() {
}
));
bottomSheet = scaffoldKey.currentState.showBottomSheet((_) {
bottomSheet = scaffoldKey.currentState.showBottomSheet/*<Null>*/((_) {
return new Builder(
builder: (_) {
buildCount += 1;
......
......@@ -25,10 +25,11 @@ void main() {
tester.pump();
expect(tester.findText('BottomSheet'), isNull);
showModalBottomSheet(
showModalBottomSheet/*<Null>*/(
context: context,
builder: (BuildContext context) => new Text('BottomSheet')
).then((_) {
).then((Null result) {
expect(result, isNull);
showBottomSheetThenCalled = true;
});
......@@ -45,7 +46,7 @@ void main() {
tester.pump(new Duration(seconds: 1)); // frame after the animation (sheet has been removed)
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(new Duration(seconds: 1)); // animation done
expect(tester.findText('BottomSheet'), isNotNull);
......
......@@ -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()));
}
......
......@@ -15,19 +15,19 @@ void main() {
routes: <String, RouteBuilder>{
'/': (RouteArguments args) { return new Column(
children: <Widget>[
new Draggable(
new Draggable<int>(
data: 1,
child: new Text('Source'),
feedback: new Text('Dragging')
),
new DragTarget(
builder: (context, data, rejects) {
new DragTarget<int>(
builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return new Container(
height: 100.0,
child: new Text('Target')
);
},
onAccept: (data) {
onAccept: (int data) {
accepted.add(data);
}
),
......@@ -78,7 +78,7 @@ void main() {
routes: <String, RouteBuilder>{
'/': (RouteArguments args) { return new Column(
children: <Widget>[
new Draggable(
new Draggable<int>(
data: 1,
child: new Text('Source'),
feedback: new Text('Dragging')
......@@ -94,15 +94,15 @@ void main() {
child: new Text('Button')
)
),
new DragTarget(
builder: (context, data, rejects) {
new DragTarget<int>(
builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return new IgnorePointer(
child: new Container(
child: new Text('Target')
)
);
},
onAccept: (data) {
onAccept: (int data) {
events.add('drop');
}
),
......@@ -176,7 +176,7 @@ void main() {
routes: <String, RouteBuilder>{
'/': (RouteArguments args) { return new Column(
children: <Widget>[
new Draggable(
new Draggable<int>(
data: 1,
child: new GestureDetector(
behavior: HitTestBehavior.opaque,
......@@ -189,11 +189,11 @@ void main() {
),
feedback: new Text('Dragging')
),
new DragTarget(
builder: (context, data, rejects) {
new DragTarget<int>(
builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return new Text('Target');
},
onAccept: (data) {
onAccept: (int data) {
events.add('drop');
}
),
......@@ -237,16 +237,16 @@ void main() {
routes: <String, RouteBuilder>{
'/': (RouteArguments args) { return new Column(
children: <Widget>[
new LongPressDraggable(
new LongPressDraggable<int>(
data: 1,
child: new Text('Source'),
feedback: new Text('Dragging')
),
new DragTarget(
builder: (context, data, rejects) {
new DragTarget<int>(
builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return new Text('Target');
},
onAccept: (data) {
onAccept: (int data) {
events.add('drop');
}
),
......@@ -288,16 +288,16 @@ void main() {
routes: <String, RouteBuilder>{
'/': (RouteArguments args) { return new Column(
children: <Widget>[
new Draggable(
new Draggable<int>(
data: 1,
child: new Text('Source'),
feedback: new Text('Dragging')
),
new DragTarget(
builder: (context, data, rejects) {
new DragTarget<int>(
builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return new Text('Target');
},
onAccept: (data) {
onAccept: (int data) {
events.add('drop');
}
),
......@@ -341,21 +341,21 @@ void main() {
'/': (RouteArguments args) {
return new Block(
children: <Widget>[
new DragTarget(
builder: (context, data, rejects) {
new DragTarget<int>(
builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return new Text('Target');
},
onAccept: (data) {
onAccept: (int data) {
events.add('drop $data');
}
),
new Container(height: 400.0),
new HorizontalDraggable(
new HorizontalDraggable<int>(
data: 1,
child: new Text('H'),
feedback: new Text('Dragging')
),
new VerticalDraggable(
new VerticalDraggable<int>(
data: 2,
child: new Text('V'),
feedback: new Text('Dragging')
......@@ -453,21 +453,21 @@ void main() {
return new Block(
scrollDirection: Axis.horizontal,
children: <Widget>[
new DragTarget(
builder: (context, data, rejects) {
new DragTarget<int>(
builder: (BuildContext context, List<int> data, List<dynamic> rejects) {
return new Text('Target');
},
onAccept: (data) {
onAccept: (int data) {
events.add('drop $data');
}
),
new Container(width: 400.0),
new HorizontalDraggable(
new HorizontalDraggable<int>(
data: 1,
child: new Text('H'),
feedback: new Text('Dragging')
),
new VerticalDraggable(
new VerticalDraggable<int>(
data: 2,
child: new Text('V'),
feedback: new Text('Dragging')
......
......@@ -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) {
return new Material(
child: new Block(children: <Widget>[
......
......@@ -69,7 +69,7 @@ void main() {
tester.pumpWidget(new MaterialApp(routes: routes));
// 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
tester.tap(tester.findText('X'));
......@@ -77,11 +77,11 @@ void main() {
tester.pump(const Duration(seconds: 1)); // end transition
// 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(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');
});
});
......@@ -103,7 +103,7 @@ class FirstComponent extends StatelessComponent {
class SecondComponent extends StatelessComponent {
Widget build(BuildContext context) {
return new ModalBarrier(
key: const ValueKey('barrier'),
key: const ValueKey<String>('barrier'),
dismissable: true
);
}
......
......@@ -40,7 +40,7 @@ class SecondComponentState extends State<SecondComponent> {
}
}
typedef void ExceptionCallback(exception);
typedef void ExceptionCallback(dynamic exception);
class ThirdComponent extends StatelessComponent {
ThirdComponent({ this.targetKey, this.onException });
......@@ -103,7 +103,7 @@ void main() {
dynamic exception;
Widget widget = new ThirdComponent(
targetKey: targetKey,
onException: (e) {
onException: (dynamic e) {
exception = e;
}
);
......
......@@ -70,12 +70,12 @@ void main() {
onGenerateRoute: (RouteSettings settings) {
switch (settings.name) {
case '/':
return new TestRoute(
return new TestRoute<Null>(
settings: settings,
child: new Builder(
key: insideKey,
builder: (BuildContext context) {
PageRoute route = ModalRoute.of(context);
PageRoute<Null> route = ModalRoute.of(context);
return new Column(
children: <Widget>[
new TestTransition(
......@@ -93,9 +93,9 @@ void main() {
}
)
);
case '/2': return new TestRoute(settings: settings, child: new Text('E'));
case '/3': return new TestRoute(settings: settings, child: new Text('F'));
case '/4': return new TestRoute(settings: settings, child: new Text('G'));
case '/2': return new TestRoute<Null>(settings: settings, child: new Text('E'));
case '/3': return new TestRoute<Null> (settings: settings, child: new Text('F'));
case '/4': return new TestRoute<Null> (settings: settings, child: new Text('G'));
}
}
)
......
......@@ -8,7 +8,7 @@ import 'package:test/test.dart';
import 'test_matchers.dart';
class TestOverlayRoute extends OverlayRoute {
class TestOverlayRoute extends OverlayRoute<Null> {
List<WidgetBuilder> get builders => <WidgetBuilder>[ _build ];
Widget _build(BuildContext context) => new Text('Overlay');
}
......
......@@ -28,9 +28,9 @@ void main() {
key: navigatorKey,
onGenerateRoute: (RouteSettings settings) {
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')
return new MaterialPageRoute(builder: (_) => new Container(child: new ThePositiveNumbers()));
return new MaterialPageRoute<Null>(builder: (_) => new Container(child: new ThePositiveNumbers()));
return null;
}
));
......@@ -47,9 +47,10 @@ void main() {
expect(tester.findText('10'), isNull);
expect(tester.findText('100'), isNull);
StatefulComponentElement<ScrollableLazyList, ScrollableState<ScrollableLazyList>> target =
StatefulComponentElement target =
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));
// we're 600 pixels high, each item is 100 pixels high, scroll position is
......
......@@ -144,7 +144,7 @@ void main() {
int snackBarCount = 0;
Key tapTarget = new Key('tap-target');
int time;
ScaffoldFeatureController<SnackBar> lastController;
ScaffoldFeatureController<SnackBar, Null> lastController;
tester.pumpWidget(new MaterialApp(
routes: <String, RouteBuilder>{
'/': (RouteArguments args) {
......@@ -176,7 +176,7 @@ void main() {
expect(tester.findText('bar2'), isNull);
time = 1000;
tester.tap(tester.findElementByKey(tapTarget)); // queue bar1
ScaffoldFeatureController<SnackBar> firstController = lastController;
ScaffoldFeatureController<SnackBar, Null> firstController = lastController;
time = 2;
tester.tap(tester.findElementByKey(tapTarget)); // queue bar2
expect(tester.findText('bar1'), isNull);
......
......@@ -47,7 +47,7 @@ void set scrollOffset(double value) {
scrollableState.scrollTo(value);
}
Future fling(double velocity) {
Future<Null> fling(double velocity) {
return scrollableState.fling(velocity);
}
......
......@@ -155,7 +155,7 @@ void main() {
Widget buildFrame(int index) {
itemsPainted = <int>[];
List<Widget> items = new List<Widget>.generate(itemCount, (i) {
List<Widget> items = new List<Widget>.generate(itemCount, (int i) {
return new CustomPaint(
child: new Text('$i'),
painter: new TestCallbackPainter(
......@@ -188,7 +188,7 @@ void main() {
Widget buildFrame(int index) {
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 Center(child: new IndexedStack(children: items, key: key, index: index));
......
......@@ -20,25 +20,25 @@ bool _hasAncestorOfType(Element element, Type targetType) {
class _IsOnStage extends Matcher {
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');
}
class _IsOffStage extends Matcher {
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');
}
class _IsInCard extends Matcher {
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');
}
class _IsNotInCard extends Matcher {
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');
}
......
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