diff --git a/analysis_options.yaml b/analysis_options.yaml index d51b2bffaf..91d7df8267 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -20,6 +20,7 @@ analyzer: strong-mode: + implicit-casts: false implicit-dynamic: false errors: # treat missing required parameters as a warning (not a hint) diff --git a/dev/devicelab/bin/tasks/fast_scroll_large_images__memory.dart b/dev/devicelab/bin/tasks/fast_scroll_large_images__memory.dart index b3e2c9eac4..7cc7cd2b61 100644 --- a/dev/devicelab/bin/tasks/fast_scroll_large_images__memory.dart +++ b/dev/devicelab/bin/tasks/fast_scroll_large_images__memory.dart @@ -20,7 +20,7 @@ class FastScrollLargeImagesMemoryTest extends MemoryTest { ); @override - AndroidDevice get device => super.device; + AndroidDevice get device => super.device as AndroidDevice; @override int get iterationCount => 5; diff --git a/dev/integration_tests/flutter_driver_screenshot_test/test_driver/driver_screenshot_tester.dart b/dev/integration_tests/flutter_driver_screenshot_test/test_driver/driver_screenshot_tester.dart index 93b2063cdb..a08c862f96 100644 --- a/dev/integration_tests/flutter_driver_screenshot_test/test_driver/driver_screenshot_tester.dart +++ b/dev/integration_tests/flutter_driver_screenshot_test/test_driver/driver_screenshot_tester.dart @@ -4,10 +4,11 @@ import 'dart:async'; import 'dart:io' show File; + +import 'package:flutter/foundation.dart'; +import 'package:flutter_driver/flutter_driver.dart'; import 'package:meta/meta.dart'; import 'package:path/path.dart' as path; -import 'package:flutter_driver/flutter_driver.dart'; -import 'package:collection/collection.dart'; const String _kPathParent = 'test_driver/goldens/'; @@ -43,8 +44,7 @@ class DriverScreenShotTester { Future compareScreenshots(List screenshot) async { final File file = File(_getImageFilePath()); final List matcher = await file.readAsBytes(); - final Function listEquals = const ListEquality().equals; - return listEquals(screenshot, matcher); + return listEquals(screenshot, matcher); } /// Returns a bytes representation of a screenshot on the current screen. diff --git a/dev/tools/localization/bin/gen_l10n.dart b/dev/tools/localization/bin/gen_l10n.dart index 06a46db6c1..31fb572e18 100644 --- a/dev/tools/localization/bin/gen_l10n.dart +++ b/dev/tools/localization/bin/gen_l10n.dart @@ -53,10 +53,10 @@ Future main(List arguments) async { exit(0); } - final String arbPathString = results['arb-dir']; - final String outputFileString = results['output-localization-file']; - final String templateArbFileName = results['template-arb-file']; - final String classNameString = results['output-class']; + final String arbPathString = results['arb-dir'] as String; + final String outputFileString = results['output-localization-file'] as String; + final String templateArbFileName = results['template-arb-file'] as String; + final String classNameString = results['output-class'] as String; const local.LocalFileSystem fs = local.LocalFileSystem(); final LocalizationsGenerator localizationsGenerator = LocalizationsGenerator(fs); diff --git a/dev/tools/localization/gen_l10n.dart b/dev/tools/localization/gen_l10n.dart index 3bab7be608..7c6944fc78 100644 --- a/dev/tools/localization/gen_l10n.dart +++ b/dev/tools/localization/gen_l10n.dart @@ -214,10 +214,7 @@ const Set allowableDateFormats = { 's', }; -bool _isDateParameter(dynamic placeholderValue) { - return placeholderValue is Map && - placeholderValue['type'] == 'DateTime'; -} +bool _isDateParameter(Map placeholderValue) => placeholderValue['type'] == 'DateTime'; bool _dateParameterIsValid(Map placeholderValue, String placeholder) { if (allowableDateFormats.contains(placeholderValue['format'])) @@ -260,6 +257,7 @@ String generateDateFormattingLogic(Map bundle, String key) { for (String placeholder in placeholders.keys) { final dynamic value = placeholders[placeholder]; if ( + value is Map && _isDateParameter(value) && _containsFormatKey(value, placeholder) && _dateParameterIsValid(value, placeholder) @@ -291,6 +289,7 @@ List genIntlMethodArgs(Map bundle, String key) { for (String placeholder in placeholders.keys) { final dynamic value = placeholders[placeholder]; if ( + value is Map && _isDateParameter(value) && _containsFormatKey(value, placeholder) && _dateParameterIsValid(value, placeholder) @@ -315,7 +314,7 @@ String genSimpleMethod(Map bundle, String key) { final Map placeholders = attributesMap['placeholders'] as Map; for (String placeholder in placeholders.keys) { final dynamic value = placeholders[placeholder]; - if (_isDateParameter(value)) { + if (value is Map && _isDateParameter(value)) { message = message.replaceAll('{$placeholder}', '\$${placeholder}String'); } else { message = message.replaceAll('{$placeholder}', '\$$placeholder'); @@ -599,8 +598,8 @@ class LocalizationsGenerator { for (File file in fileSystemEntityList) { final String filePath = file.path; if (arbFilenameRE.hasMatch(filePath)) { - final Map arbContents = json.decode(file.readAsStringSync()); - String localeString = arbContents['@@locale']; + final Map arbContents = json.decode(file.readAsStringSync()) as Map; + String localeString = arbContents['@@locale'] as String; if (localeString == null) { final RegExpMatch arbFileMatch = arbFilenameLocaleRE.firstMatch(filePath); if (arbFileMatch == null) { @@ -653,7 +652,7 @@ class LocalizationsGenerator { void generateClassMethods() { Map bundle; try { - bundle = json.decode(templateArbFile.readAsStringSync()); + bundle = json.decode(templateArbFile.readAsStringSync()) as Map; } on FileSystemException catch (e) { throw FileSystemException('Unable to read input arb file: $e'); } on FormatException catch (e) { @@ -669,7 +668,7 @@ class LocalizationsGenerator { 'Invalid key format: $key \n It has to be in camel case, cannot start ' 'with a number, and cannot contain non-alphanumeric characters.' ); - if (pluralValueRE.hasMatch(bundle[key])) + if (pluralValueRE.hasMatch(bundle[key] as String)) classMethods.add(genPluralMethod(bundle, key)); else classMethods.add(genSimpleMethod(bundle, key)); diff --git a/packages/flutter/lib/src/gestures/mouse_tracking.dart b/packages/flutter/lib/src/gestures/mouse_tracking.dart index ba309bfe46..563b12ba83 100644 --- a/packages/flutter/lib/src/gestures/mouse_tracking.dart +++ b/packages/flutter/lib/src/gestures/mouse_tracking.dart @@ -314,7 +314,7 @@ class MouseTracker extends ChangeNotifier { final int device = state.device; return (_mouseStates.containsKey(device) && _trackedAnnotations.isNotEmpty) ? LinkedHashSet.from(annotationFinder(globalPosition)) - : {}; + : {} as LinkedHashSet; } static bool get _duringBuildPhase { diff --git a/packages/flutter/lib/src/material/reorderable_list.dart b/packages/flutter/lib/src/material/reorderable_list.dart index 8dba05be32..6b261cf56e 100644 --- a/packages/flutter/lib/src/material/reorderable_list.dart +++ b/packages/flutter/lib/src/material/reorderable_list.dart @@ -530,7 +530,7 @@ class _ReorderableListContentState extends State<_ReorderableListContent> with T return _dragging == toAccept && toAccept != toWrap.key; }, onAccept: (Key accepted) { }, - onLeave: (Key leaving) { }, + onLeave: (Object leaving) { }, ); }); } diff --git a/packages/flutter/lib/src/painting/edge_insets.dart b/packages/flutter/lib/src/painting/edge_insets.dart index 4c2b61a059..63504c863e 100644 --- a/packages/flutter/lib/src/painting/edge_insets.dart +++ b/packages/flutter/lib/src/painting/edge_insets.dart @@ -162,12 +162,12 @@ abstract class EdgeInsetsGeometry { /// or equal to `min`, and less than or equal to `max`. EdgeInsetsGeometry clamp(EdgeInsetsGeometry min, EdgeInsetsGeometry max) { return _MixedEdgeInsets.fromLRSETB( - _left.clamp(min._left, max._left), - _right.clamp(min._right, max._right), - _start.clamp(min._start, max._start), - _end.clamp(min._end, max._end), - _top.clamp(min._top, max._top), - _bottom.clamp(min._bottom, max._bottom), + _left.clamp(min._left, max._left) as double, + _right.clamp(min._right, max._right) as double, + _start.clamp(min._start, max._start) as double, + _end.clamp(min._end, max._end) as double, + _top.clamp(min._top, max._top) as double, + _bottom.clamp(min._bottom, max._bottom) as double, ); } diff --git a/packages/flutter/lib/src/rendering/layer.dart b/packages/flutter/lib/src/rendering/layer.dart index a9bde83422..0a7cba2fcf 100644 --- a/packages/flutter/lib/src/rendering/layer.dart +++ b/packages/flutter/lib/src/rendering/layer.dart @@ -672,9 +672,9 @@ class PlatformViewLayer extends Layer { if (hoverAnnotation == null || !rect.contains(localPosition)) { return false; } - if (MouseTrackerAnnotation == S) { + if (S == MouseTrackerAnnotation) { final Object untypedValue = hoverAnnotation; - final S typedValue = untypedValue; + final S typedValue = untypedValue as S; result.add(AnnotationEntry( annotation: typedValue, localPosition: localPosition, diff --git a/packages/flutter/lib/src/rendering/proxy_sliver.dart b/packages/flutter/lib/src/rendering/proxy_sliver.dart index ad1f7a15ae..4c1ac249ec 100644 --- a/packages/flutter/lib/src/rendering/proxy_sliver.dart +++ b/packages/flutter/lib/src/rendering/proxy_sliver.dart @@ -7,6 +7,7 @@ import 'dart:ui' as ui show Color; import 'package:flutter/foundation.dart'; import 'package:vector_math/vector_math_64.dart'; +import 'layer.dart'; import 'object.dart'; import 'sliver.dart'; @@ -71,7 +72,7 @@ abstract class RenderProxySliver extends RenderSliver with RenderObjectWithChild @override void applyPaintTransform(RenderObject child, Matrix4 transform) { assert(child != null); - final SliverPhysicalParentData childParentData = child.parentData; + final SliverPhysicalParentData childParentData = child.parentData as SliverPhysicalParentData; childParentData.applyPaintTransform(transform); } } @@ -169,7 +170,7 @@ class RenderSliverOpacity extends RenderProxySliver { offset, _alpha, _paintWithOpacity, - oldLayer: layer, + oldLayer: layer as OpacityLayer, ); } } diff --git a/packages/flutter/lib/src/widgets/binding.dart b/packages/flutter/lib/src/widgets/binding.dart index 4965249ed5..1fba2f5479 100644 --- a/packages/flutter/lib/src/widgets/binding.dart +++ b/packages/flutter/lib/src/widgets/binding.dart @@ -332,7 +332,7 @@ mixin WidgetsBinding on BindingBase, ServicesBinding, SchedulerBinding, GestureB registerServiceExtension( name: 'fastReassemble', callback: (Map params) async { - final String className = params['class']; + final String className = params['class'] as String; void markElementsDirty(Element element) { if (element == null) { return; diff --git a/packages/flutter/lib/src/widgets/drag_target.dart b/packages/flutter/lib/src/widgets/drag_target.dart index f504e9b08e..1365be2e64 100644 --- a/packages/flutter/lib/src/widgets/drag_target.dart +++ b/packages/flutter/lib/src/widgets/drag_target.dart @@ -48,7 +48,7 @@ typedef DragEndCallback = void Function(DraggableDetails details); /// Signature for when a [Draggable] leaves a [DragTarget]. /// /// Used by [DragTarget.onLeave]. -typedef DragTargetLeave = void Function(T data); +typedef DragTargetLeave = void Function(Object data); /// Where the [Draggable] should be anchored during a drag. enum DragAnchor { @@ -502,7 +502,7 @@ class DragTarget extends StatefulWidget { /// Called when a given piece of data being dragged over this target leaves /// the target. - final DragTargetLeave onLeave; + final DragTargetLeave onLeave; @override _DragTargetState createState() => _DragTargetState(); @@ -514,13 +514,12 @@ List _mapAvatarsToData(List<_DragAvatar> avatars) { class _DragTargetState extends State> { final List<_DragAvatar> _candidateAvatars = <_DragAvatar>[]; - final List<_DragAvatar> _rejectedAvatars = <_DragAvatar>[]; + final List<_DragAvatar> _rejectedAvatars = <_DragAvatar>[]; - bool didEnter(_DragAvatar avatar) { + bool didEnter(_DragAvatar avatar) { assert(!_candidateAvatars.contains(avatar)); assert(!_rejectedAvatars.contains(avatar)); - final dynamic data = avatar.data; - if (data is T && (widget.onWillAccept == null || widget.onWillAccept(data))) { + if (avatar is _DragAvatar && (widget.onWillAccept == null || widget.onWillAccept(avatar.data))) { setState(() { _candidateAvatars.add(avatar); }); @@ -533,7 +532,7 @@ class _DragTargetState extends State> { } } - void didLeave(_DragAvatar avatar) { + void didLeave(_DragAvatar avatar) { assert(_candidateAvatars.contains(avatar) || _rejectedAvatars.contains(avatar)); if (!mounted) return; @@ -545,7 +544,7 @@ class _DragTargetState extends State> { widget.onLeave(avatar.data); } - void didDrop(_DragAvatar avatar) { + void didDrop(_DragAvatar avatar) { assert(_candidateAvatars.contains(avatar)); if (!mounted) return; @@ -553,7 +552,7 @@ class _DragTargetState extends State> { _candidateAvatars.remove(avatar); }); if (widget.onAccept != null) - widget.onAccept(avatar.data); + widget.onAccept(avatar.data as T); } @override @@ -562,7 +561,7 @@ class _DragTargetState extends State> { return MetaData( metaData: this, behavior: HitTestBehavior.translucent, - child: widget.builder(context, _mapAvatarsToData(_candidateAvatars), _mapAvatarsToData(_rejectedAvatars)), + child: widget.builder(context, _mapAvatarsToData(_candidateAvatars), _mapAvatarsToData(_rejectedAvatars)), ); } } diff --git a/packages/flutter/test/widgets/draggable_test.dart b/packages/flutter/test/widgets/draggable_test.dart index 2c0032473b..3a9023a2ce 100644 --- a/packages/flutter/test/widgets/draggable_test.dart +++ b/packages/flutter/test/widgets/draggable_test.dart @@ -90,13 +90,21 @@ void main() { builder: (BuildContext context, List data, List rejects) { return Container(height: 100.0, child: const Text('Target 1')); }, - onLeave: (int data) => leftBehind['Target 1'] = leftBehind['Target 1'] + data, + onLeave: (Object data) { + if (data is int) { + leftBehind['Target 1'] = leftBehind['Target 1'] + data; + } + }, ), DragTarget( builder: (BuildContext context, List data, List rejects) { return Container(height: 100.0, child: const Text('Target 2')); }, - onLeave: (int data) => leftBehind['Target 2'] = leftBehind['Target 2'] + data, + onLeave: (Object data) { + if (data is int) { + leftBehind['Target 2'] = leftBehind['Target 2'] + data; + } + }, ), ], ), diff --git a/packages/flutter_driver/analysis_options.yaml b/packages/flutter_driver/analysis_options.yaml deleted file mode 100644 index a08bda2904..0000000000 --- a/packages/flutter_driver/analysis_options.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Override the parent analysis_options until all the repo has implicit-casts: false - -include: ../analysis_options.yaml - -analyzer: - strong-mode: - implicit-casts: false - implicit-dynamic: false diff --git a/packages/flutter_goldens/analysis_options.yaml b/packages/flutter_goldens/analysis_options.yaml index b9d57a9e11..b8591ca6db 100644 --- a/packages/flutter_goldens/analysis_options.yaml +++ b/packages/flutter_goldens/analysis_options.yaml @@ -2,8 +2,3 @@ # the ones from above, which include the `public_member_api_docs` rule). include: ../../analysis_options.yaml - -analyzer: - strong-mode: - implicit-casts: false - implicit-dynamic: false diff --git a/packages/flutter_goldens_client/analysis_options.yaml b/packages/flutter_goldens_client/analysis_options.yaml index b9d57a9e11..b8591ca6db 100644 --- a/packages/flutter_goldens_client/analysis_options.yaml +++ b/packages/flutter_goldens_client/analysis_options.yaml @@ -2,8 +2,3 @@ # the ones from above, which include the `public_member_api_docs` rule). include: ../../analysis_options.yaml - -analyzer: - strong-mode: - implicit-casts: false - implicit-dynamic: false diff --git a/packages/flutter_localizations/analysis_options.yaml b/packages/flutter_localizations/analysis_options.yaml deleted file mode 100644 index 2344f5ab1f..0000000000 --- a/packages/flutter_localizations/analysis_options.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Override the parent analysis_options until all the repo has implicit-casts: false - -include: ../analysis_options.yaml - -analyzer: - strong-mode: - implicit-casts: false - implicit-dynamic: false - -linter: - rules: - avoid_as: false diff --git a/packages/flutter_test/analysis_options.yaml b/packages/flutter_test/analysis_options.yaml deleted file mode 100644 index 3de2cb2e1a..0000000000 --- a/packages/flutter_test/analysis_options.yaml +++ /dev/null @@ -1,6 +0,0 @@ -include: ../analysis_options.yaml - -analyzer: - strong-mode: - implicit-casts: false - implicit-dynamic: false diff --git a/packages/flutter_tools/analysis_options.yaml b/packages/flutter_tools/analysis_options.yaml index 9d30761275..525929f5b0 100644 --- a/packages/flutter_tools/analysis_options.yaml +++ b/packages/flutter_tools/analysis_options.yaml @@ -3,11 +3,6 @@ include: ../../analysis_options.yaml -analyzer: - strong-mode: - implicit-casts: false - implicit-dynamic: false - linter: rules: unawaited_futures: true diff --git a/packages/flutter_web_plugins/analysis_options.yaml b/packages/flutter_web_plugins/analysis_options.yaml deleted file mode 100644 index a08bda2904..0000000000 --- a/packages/flutter_web_plugins/analysis_options.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Override the parent analysis_options until all the repo has implicit-casts: false - -include: ../analysis_options.yaml - -analyzer: - strong-mode: - implicit-casts: false - implicit-dynamic: false diff --git a/packages/fuchsia_remote_debug_protocol/analysis_options.yaml b/packages/fuchsia_remote_debug_protocol/analysis_options.yaml deleted file mode 100644 index a08bda2904..0000000000 --- a/packages/fuchsia_remote_debug_protocol/analysis_options.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Override the parent analysis_options until all the repo has implicit-casts: false - -include: ../analysis_options.yaml - -analyzer: - strong-mode: - implicit-casts: false - implicit-dynamic: false