diff --git a/analysis_options.yaml b/analysis_options.yaml index 91d7df8267..d51b2bffaf 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -20,7 +20,6 @@ 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 7cc7cd2b61..b3e2c9eac4 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 as AndroidDevice; + AndroidDevice get device => super.device; @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 a08c862f96..93b2063cdb 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,11 +4,10 @@ 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/'; @@ -44,7 +43,8 @@ class DriverScreenShotTester { Future compareScreenshots(List screenshot) async { final File file = File(_getImageFilePath()); final List matcher = await file.readAsBytes(); - return listEquals(screenshot, matcher); + final Function listEquals = const ListEquality().equals; + 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 31fb572e18..06a46db6c1 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'] 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; + 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']; 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 f9ff3a3b9a..3bab7be608 100644 --- a/dev/tools/localization/gen_l10n.dart +++ b/dev/tools/localization/gen_l10n.dart @@ -599,8 +599,8 @@ class LocalizationsGenerator { for (File file in fileSystemEntityList) { final String filePath = file.path; if (arbFilenameRE.hasMatch(filePath)) { - final Map arbContents = json.decode(file.readAsStringSync()) as Map; - String localeString = arbContents['@@locale'] as String; + final Map arbContents = json.decode(file.readAsStringSync()); + String localeString = arbContents['@@locale']; if (localeString == null) { final RegExpMatch arbFileMatch = arbFilenameLocaleRE.firstMatch(filePath); if (arbFileMatch == null) { @@ -653,7 +653,7 @@ class LocalizationsGenerator { void generateClassMethods() { Map bundle; try { - bundle = json.decode(templateArbFile.readAsStringSync()) as Map; + bundle = json.decode(templateArbFile.readAsStringSync()); } on FileSystemException catch (e) { throw FileSystemException('Unable to read input arb file: $e'); } on FormatException catch (e) { @@ -669,7 +669,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] as String)) + if (pluralValueRE.hasMatch(bundle[key])) 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 563b12ba83..ba309bfe46 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 6b261cf56e..8dba05be32 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: (Object leaving) { }, + onLeave: (Key leaving) { }, ); }); } diff --git a/packages/flutter/lib/src/painting/edge_insets.dart b/packages/flutter/lib/src/painting/edge_insets.dart index 63504c863e..4c2b61a059 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) 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, + _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), ); } diff --git a/packages/flutter/lib/src/rendering/layer.dart b/packages/flutter/lib/src/rendering/layer.dart index 0a7cba2fcf..a9bde83422 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 (S == MouseTrackerAnnotation) { + if (MouseTrackerAnnotation == S) { final Object untypedValue = hoverAnnotation; - final S typedValue = untypedValue as S; + final S typedValue = untypedValue; 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 4c1ac249ec..ad1f7a15ae 100644 --- a/packages/flutter/lib/src/rendering/proxy_sliver.dart +++ b/packages/flutter/lib/src/rendering/proxy_sliver.dart @@ -7,7 +7,6 @@ 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'; @@ -72,7 +71,7 @@ abstract class RenderProxySliver extends RenderSliver with RenderObjectWithChild @override void applyPaintTransform(RenderObject child, Matrix4 transform) { assert(child != null); - final SliverPhysicalParentData childParentData = child.parentData as SliverPhysicalParentData; + final SliverPhysicalParentData childParentData = child.parentData; childParentData.applyPaintTransform(transform); } } @@ -170,7 +169,7 @@ class RenderSliverOpacity extends RenderProxySliver { offset, _alpha, _paintWithOpacity, - oldLayer: layer as OpacityLayer, + oldLayer: layer, ); } } diff --git a/packages/flutter/lib/src/widgets/binding.dart b/packages/flutter/lib/src/widgets/binding.dart index 1fba2f5479..4965249ed5 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'] as String; + final String className = params['class']; 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 1365be2e64..f504e9b08e 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(Object data); +typedef DragTargetLeave = void Function(T 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,12 +514,13 @@ 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)); - if (avatar is _DragAvatar && (widget.onWillAccept == null || widget.onWillAccept(avatar.data))) { + final dynamic data = avatar.data; + if (data is T && (widget.onWillAccept == null || widget.onWillAccept(data))) { setState(() { _candidateAvatars.add(avatar); }); @@ -532,7 +533,7 @@ class _DragTargetState extends State> { } } - void didLeave(_DragAvatar avatar) { + void didLeave(_DragAvatar avatar) { assert(_candidateAvatars.contains(avatar) || _rejectedAvatars.contains(avatar)); if (!mounted) return; @@ -544,7 +545,7 @@ class _DragTargetState extends State> { widget.onLeave(avatar.data); } - void didDrop(_DragAvatar avatar) { + void didDrop(_DragAvatar avatar) { assert(_candidateAvatars.contains(avatar)); if (!mounted) return; @@ -552,7 +553,7 @@ class _DragTargetState extends State> { _candidateAvatars.remove(avatar); }); if (widget.onAccept != null) - widget.onAccept(avatar.data as T); + widget.onAccept(avatar.data); } @override @@ -561,7 +562,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 3a9023a2ce..2c0032473b 100644 --- a/packages/flutter/test/widgets/draggable_test.dart +++ b/packages/flutter/test/widgets/draggable_test.dart @@ -90,21 +90,13 @@ void main() { builder: (BuildContext context, List data, List rejects) { return Container(height: 100.0, child: const Text('Target 1')); }, - onLeave: (Object data) { - if (data is int) { - leftBehind['Target 1'] = leftBehind['Target 1'] + data; - } - }, + onLeave: (int data) => 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: (Object data) { - if (data is int) { - leftBehind['Target 2'] = leftBehind['Target 2'] + data; - } - }, + onLeave: (int data) => leftBehind['Target 2'] = leftBehind['Target 2'] + data, ), ], ), diff --git a/packages/flutter_driver/analysis_options.yaml b/packages/flutter_driver/analysis_options.yaml new file mode 100644 index 0000000000..a08bda2904 --- /dev/null +++ b/packages/flutter_driver/analysis_options.yaml @@ -0,0 +1,8 @@ +# 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 b8591ca6db..b9d57a9e11 100644 --- a/packages/flutter_goldens/analysis_options.yaml +++ b/packages/flutter_goldens/analysis_options.yaml @@ -2,3 +2,8 @@ # 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 b8591ca6db..b9d57a9e11 100644 --- a/packages/flutter_goldens_client/analysis_options.yaml +++ b/packages/flutter_goldens_client/analysis_options.yaml @@ -2,3 +2,8 @@ # 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 new file mode 100644 index 0000000000..2344f5ab1f --- /dev/null +++ b/packages/flutter_localizations/analysis_options.yaml @@ -0,0 +1,12 @@ +# 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 new file mode 100644 index 0000000000..3de2cb2e1a --- /dev/null +++ b/packages/flutter_test/analysis_options.yaml @@ -0,0 +1,6 @@ +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 525929f5b0..9d30761275 100644 --- a/packages/flutter_tools/analysis_options.yaml +++ b/packages/flutter_tools/analysis_options.yaml @@ -3,6 +3,11 @@ 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 new file mode 100644 index 0000000000..a08bda2904 --- /dev/null +++ b/packages/flutter_web_plugins/analysis_options.yaml @@ -0,0 +1,8 @@ +# 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 new file mode 100644 index 0000000000..a08bda2904 --- /dev/null +++ b/packages/fuchsia_remote_debug_protocol/analysis_options.yaml @@ -0,0 +1,8 @@ +# 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