From 06c6942df620e9986d8e8802e0a788aac145c63b Mon Sep 17 00:00:00 2001 From: Leonardo Iacovini Date: Mon, 26 Oct 2020 14:36:28 -0300 Subject: [PATCH] Fix problems when using recent versions of analyzer New versions of analyzer includes changes to accommodate non-nullable types, this was breaking the build --- analysis_options.yaml | 1 + example/pubspec.yaml | 1 - lib/builder.dart | 2 +- lib/builder/args_class.dart | 4 +-- lib/builder/helpers.dart | 4 +-- lib/builder/navigation_extension.dart | 12 ++++--- lib/src/nurouter.dart | 7 ++-- lib/src/nuvigator.dart | 49 ++++++++++++++------------- pubspec.yaml | 1 + test/fixtures/test_router.g.dart | 3 +- test/navigation_test.dart | 2 ++ test/router_test.dart | 4 +-- test/wrapper_test.dart | 1 + 13 files changed, 51 insertions(+), 40 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 54aa5624..cf2583d1 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -17,6 +17,7 @@ # # This file contains the analysis options used by Flutter tools, such as IntelliJ, # Android Studio, and the `flutter analyze` command. +include: package:pedantic/analysis_options.yaml analyzer: strong-mode: diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 652df710..21c5cf04 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -20,5 +20,4 @@ dev_dependencies: sdk: flutter flutter: - uses-material-design: true diff --git a/lib/builder.dart b/lib/builder.dart index 612b647c..48d0bde0 100644 --- a/lib/builder.dart +++ b/lib/builder.dart @@ -14,7 +14,7 @@ class NuvigatorGenerator extends GeneratorForAnnotation { FutureOr generateForAnnotatedElement( Element element, ConstantReader annotation, BuildStep buildStep) { if (element is ClassElement) { - final ClassElement classElement = element; + final classElement = element; final lib = BuilderLibrary(classElement).build(); return DartFormatter().format(lib.accept(DartEmitter()).toString()); } diff --git a/lib/builder/args_class.dart b/lib/builder/args_class.dart index a5c5f84d..7df7c7aa 100644 --- a/lib/builder/args_class.dart +++ b/lib/builder/args_class.dart @@ -125,7 +125,7 @@ class ArgsClass extends BaseBuilder { String _safelyCastArg(ParameterElement arg, MethodElement method) { final varName = arg.name.toString(); - final typeName = arg.type.toString(); + final typeName = arg.type.getDisplayString(withNullability: false); final nuRouteFieldAnnotation = nuRouteChecker.firstAnnotationOfExact(method); @@ -166,7 +166,7 @@ class ArgsClass extends BaseBuilder { for (final arg in method.parameters) { final varName = arg.name.toString(); - final typeName = arg.type.toString(); + final typeName = arg.type.getDisplayString(withNullability: false); argsParserBuffer.write('$varName: ${_safelyCastArg(arg, method)},\n'); diff --git a/lib/builder/helpers.dart b/lib/builder/helpers.dart index 17a14f34..d5c45b60 100644 --- a/lib/builder/helpers.dart +++ b/lib/builder/helpers.dart @@ -29,13 +29,13 @@ String getRouterName(Element element) { } String getRouteString(ClassElement routerElement, MethodElement element) { - String prefix = nuRouterChecker + var prefix = nuRouterChecker .firstAnnotationOfExact(routerElement) ?.getField('routeNamePrefix') ?.toStringValue(); prefix = prefix != null && prefix.isNotEmpty ? lowerCamelCase(prefix) : ''; - String routerName = getRouterName(routerElement); + var routerName = getRouterName(routerElement); final needsFormat = prefix.isEmpty || prefix.endsWith('/'); routerName = needsFormat ? lowerCamelCase(routerName) : routerName; diff --git a/lib/builder/navigation_extension.dart b/lib/builder/navigation_extension.dart index 6b2c69c1..a4b5ca65 100644 --- a/lib/builder/navigation_extension.dart +++ b/lib/builder/navigation_extension.dart @@ -16,14 +16,15 @@ class NavigationExtension extends BaseBuilder { for (final arg in method.parameters) { final argName = arg.name.toString(); final isRequired = arg.metadata.isNotEmpty && - arg.metadata.firstWhere((e) => e.isRequired, orElse: null) != null; + arg.metadata.firstWhere((e) => e.isRequired, orElse: () => null) != + null; parameters.add( Parameter( (p) => p ..name = argName ..annotations.addAll(isRequired ? [refer('required')] : []) ..named = true - ..type = refer(arg.type.toString()), + ..type = refer(arg.type.getDisplayString(withNullability: false)), ), ); argumentsMapBuffer.write("'$argName': $argName,"); @@ -178,8 +179,9 @@ class NavigationExtension extends BaseBuilder { if (nuRouteFieldAnnotation != null) { final generics = getGenericTypes(method.returnType); - final screenReturn = - generics.length > 1 ? generics[1].name : generics.first.name; + final screenReturn = generics.length > 1 + ? generics[1].getDisplayString(withNullability: false) + : generics.first.getDisplayString(withNullability: false); final pushMethods = nuRouteFieldAnnotation.getField('pushMethods').toListValue(); if (pushMethods != null) { @@ -222,7 +224,7 @@ class NavigationExtension extends BaseBuilder { nuRouterChecker.firstAnnotationOfExact(field); if (nuSubRouterAnnotation != null) { methods.add( - _subRouterMethod(field.type.name), + _subRouterMethod(field.type.getDisplayString(withNullability: false)), ); } } diff --git a/lib/src/nurouter.dart b/lib/src/nurouter.dart index dc65967a..67dff9fd 100644 --- a/lib/src/nurouter.dart +++ b/lib/src/nurouter.dart @@ -93,7 +93,7 @@ abstract class NuRouter { final screen = _getScreen(settings); if (screen != null) return screen; - for (NuRouter router in routers) { + for (final router in routers) { final screen = router.getScreen(settings); if (screen != null) return screen.wrapWith(screensWrapper); } @@ -107,7 +107,7 @@ abstract class NuRouter { if (prefixRegex.hasMatch(deepLink)) { final routeEntry = _getRouteEntryForDeepLink(deepLink); if (routeEntry != null) return routeEntry; - for (final NuRouter router in routers) { + for (final router in routers) { final newDeepLink = deepLink.replaceFirst(thisDeepLinkPrefix, ''); final subRouterEntry = router.getRouteEntryForDeepLink(newDeepLink); if (subRouterEntry != null) { @@ -137,8 +137,9 @@ abstract class NuRouter { final routeEntry = getRouteEntryForDeepLink(deepLinkString(url)); if (routeEntry == null) { - if (onDeepLinkNotFound != null) + if (onDeepLinkNotFound != null) { return await onDeepLinkNotFound(this, url, isFromNative, arguments); + } return null; } diff --git a/lib/src/nuvigator.dart b/lib/src/nuvigator.dart index 8f90e221..854f3a53 100644 --- a/lib/src/nuvigator.dart +++ b/lib/src/nuvigator.dart @@ -11,8 +11,10 @@ NuvigatorState _tryToFindNuvigatorForRouter( if (nuvigatorState == null) return null; final nuvigatorRouterForType = nuvigatorState.router.getRouter(); if (nuvigatorRouterForType != null) return nuvigatorState; - if (nuvigatorState != nuvigatorState.parent && nuvigatorState.parent != null) + if (nuvigatorState != nuvigatorState.parent && + nuvigatorState.parent != null) { return _tryToFindNuvigatorForRouter(nuvigatorState.parent); + } return null; } @@ -143,8 +145,7 @@ class Nuvigator extends Navigator { } static NuvigatorState ofRouter(BuildContext context) { - final NuvigatorState closestNuvigator = - context.findAncestorStateOfType(); + final closestNuvigator = context.findAncestorStateOfType(); return _tryToFindNuvigatorForRouter(closestNuvigator); } @@ -153,8 +154,9 @@ class Nuvigator extends Navigator { bool rootNuvigator = false, bool nullOk = false, }) { - if (rootNuvigator) + if (rootNuvigator) { return context.findRootAncestorStateOfType>(); + } final nuvigatorState = ofRouter(context); if (nuvigatorState is NuvigatorState) return nuvigatorState; assert(() { @@ -250,84 +252,85 @@ class NuvigatorState extends NavigatorState @override Future didPushRoute(String route) async { assert(mounted); + // ignore: unawaited_futures pushNamed(route); return true; } @override - Future pushNamed(String routeName, {Object arguments}) { + Future pushNamed(String routeName, {Object arguments}) { final possibleRoute = router.getScreen(RouteSettings(name: routeName, arguments: arguments)); if (possibleRoute == null && parent != null) { - return parent.pushNamed(routeName, arguments: arguments); + return parent.pushNamed(routeName, arguments: arguments); } - return super.pushNamed(routeName, arguments: arguments); + return super.pushNamed(routeName, arguments: arguments); } @override - Future pushReplacementNamed( + Future pushReplacementNamed( String routeName, {Object arguments, TO result}) { final possibleRoute = router.getScreen(RouteSettings(name: routeName, arguments: arguments)); if (possibleRoute == null) { - return parent.pushReplacementNamed(routeName, + return parent.pushReplacementNamed(routeName, arguments: arguments, result: result); } - return super.pushReplacementNamed(routeName, + return super.pushReplacementNamed(routeName, arguments: arguments, result: result); } @override - Future pushNamedAndRemoveUntil( + Future pushNamedAndRemoveUntil( String newRouteName, RoutePredicate predicate, {Object arguments}) { final possibleRoute = router .getScreen(RouteSettings(name: newRouteName, arguments: arguments)); if (possibleRoute == null) { - return parent.pushNamedAndRemoveUntil(newRouteName, predicate, + return parent.pushNamedAndRemoveUntil(newRouteName, predicate, arguments: arguments); } - return super.pushNamedAndRemoveUntil(newRouteName, predicate, + return super.pushNamedAndRemoveUntil(newRouteName, predicate, arguments: arguments); } @override - Future popAndPushNamed( + Future popAndPushNamed( String routeName, {Object arguments, TO result}) { final possibleRoute = router.getScreen(RouteSettings(name: routeName, arguments: arguments)); if (possibleRoute == null) { - return parent.popAndPushNamed(routeName, + return parent.popAndPushNamed(routeName, arguments: arguments, result: result); } - return super.popAndPushNamed(routeName, + return super.popAndPushNamed(routeName, arguments: arguments, result: result); } @override - void pop([T result]) { + void pop([R result]) { var isPopped = false; if (canPop()) { isPopped = super.canPop(); - super.pop(result); + super.pop(result); } else if (widget.shouldPopRoot && this == rootNuvigator) { isPopped = true; SystemNavigator.pop(); } if (!isPopped && this != rootNuvigator && parent != null) { - parentPop(result); + parentPop(result); } } - void parentPop([T result]) => parent.pop(result); + void parentPop([R result]) => parent.pop(result); - void rootPop([T result]) => rootNuvigator.pop(result); + void rootPop([R result]) => rootNuvigator.pop(result); - void closeFlow([T result]) { + void closeFlow([R result]) { if (isNested) { parentPop(result); } @@ -347,7 +350,7 @@ class NuvigatorState extends NavigatorState @override Widget build(BuildContext context) { - Widget child = super.build(context); + var child = super.build(context); if (widget.wrapper != null) { child = widget.wrapper(context, child); } diff --git a/pubspec.yaml b/pubspec.yaml index 17c5219f..0e67c23a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -21,6 +21,7 @@ dependencies: dev_dependencies: mockito: ^4.1.1 + pedantic: ^1.9.0 build_runner: ^1.6.5 flutter_test: sdk: flutter diff --git a/test/fixtures/test_router.g.dart b/test/fixtures/test_router.g.dart index 0ea5c7c3..5276c44e 100644 --- a/test/fixtures/test_router.g.dart +++ b/test/fixtures/test_router.g.dart @@ -76,8 +76,9 @@ class TestArgsArgs { final nuvigator = Nuvigator.of(context); if (routeSettings?.name == TestRoutes.testArgs) { final args = routeSettings?.arguments; - if (args == null) + if (args == null) { throw FlutterError('TestArgsArgs requires Route arguments'); + } if (args is TestArgsArgs) return args; if (args is Map) return parse(args); } else if (nuvigator != null) { diff --git a/test/navigation_test.dart b/test/navigation_test.dart index 5d359058..0f0c289c 100644 --- a/test/navigation_test.dart +++ b/test/navigation_test.dart @@ -7,6 +7,7 @@ void main() { (WidgetTester tester) async { final router = TestRouter(); await helpers.pumpApp(tester, router, TestRoutes.home); + // ignore: unawaited_futures router.openDeepLink(Uri.parse('exapp://testargs')); await tester.pumpAndSettle(); expect(find.text('intArg: null'), findsOneWidget); @@ -16,6 +17,7 @@ void main() { (WidgetTester tester) async { final router = TestRouter(); await helpers.pumpApp(tester, router, TestRoutes.home); + // ignore: unawaited_futures router.openDeepLink(Uri.parse( 'exapp://testargs?intArg=42&doubleArg=-4.2&boolArg=true&dateTimeArg=2020-07-07T12:34:00.000Z&dateArg=2020-08-07&stringArg=testing')); await tester.pumpAndSettle(); diff --git a/test/router_test.dart b/test/router_test.dart index 457fb014..e044656d 100644 --- a/test/router_test.dart +++ b/test/router_test.dart @@ -14,7 +14,7 @@ void main() { test('router onScreenNotFound', () { final testRouter = TestRouter(); - bool notFound = false; + var notFound = false; testRouter.onScreenNotFound = (settings) { notFound = true; return ScreenRoute(debugKey: 'screenNotFound', builder: (_) => null); @@ -44,7 +44,7 @@ void main() { test('router on deepLinkNotFound', () async { final testRouter = TestRouter(); - bool notFound = false; + var notFound = false; final mockNuvigator = MockNuvigator(testRouter); testRouter.nuvigator = mockNuvigator; testRouter.onDeepLinkNotFound = (router, deepLink, [_, dynamic __]) async { diff --git a/test/wrapper_test.dart b/test/wrapper_test.dart index 2782e5da..aaef6b54 100644 --- a/test/wrapper_test.dart +++ b/test/wrapper_test.dart @@ -20,6 +20,7 @@ void main() { final router = TestRouter(); await helpers.pumpApp(tester, router, TestRoutes.home); + // ignore: unawaited_futures router.openDeepLink(Uri.parse('exapp://testargs')); await tester.pumpAndSettle();