nubank / nuvigator

A powerful routing abstraction over Flutter Navigator, with nested Navigator and Deeplinks
Apache License 2.0
272 stars 33 forks source link

Flutter Dev channel compatibility #48

Closed diefferson closed 3 years ago

diefferson commented 4 years ago

Hello,

To make some tests with Flutter Desktop I changed to Flutter Dev Channel, and in this version has a new Flutter class called Router that conflicts with Router of Nuvigator. I think that this versão will merge to Flutter release soon, you know this changes?

Maybe be better prepared for these changes.

leoiacovini commented 4 years ago

@lubritto About what we were discussing on Friday (looks like it's already in the dev branch)

@diefferson If nothing more breaks, I think the easiest fix right now is to hide the import from the Flutter library, we are still going through the new Navigation 2.0 API on Flutter and there probably are going to have some impactful changes on Nuvigator. We will keep you posted as soon as we have something decided regarding it

stwonary commented 3 years ago

1.22.0 is on stable release now.

leoiacovini commented 3 years ago

Sorry for not being able to prepare a proper arrangement for this before the stable release, but our schedule was pretty tight during the last months. We are organizing internally to make Nuvigator able to leverage the new changes and improvements of the new API. We expect to have some news in the following weeks

stwonary commented 3 years ago

just migrated to version 0.7.0 and it's working great! thank you

stwonary commented 3 years ago

After the migration, the generated code run perfect. But the generator isn't working. Even with the example code.

➜ flutter pub run build_runner build --delete-conflicting-outputs
[INFO] Generating build script...
[INFO] Generating build script completed, took 360ms

[INFO] Creating build script snapshot......
[INFO] Creating build script snapshot... completed, took 10.3s

[INFO] Initializing inputs
[INFO] Building new asset graph...
[INFO] Building new asset graph completed, took 565ms

[INFO] Checking for unexpected pre-existing outputs....
[INFO] Deleting 3 declared outputs which already existed on disk.
[INFO] Checking for unexpected pre-existing outputs. completed, took 3ms

[INFO] Running build...
[INFO] Generating SDK summary...
[INFO] 3.3s elapsed, 0/11 actions completed.
[INFO] Generating SDK summary completed, took 3.3s

[INFO] 4.4s elapsed, 0/11 actions completed.
[INFO] 5.5s elapsed, 0/11 actions completed.
[INFO] 6.5s elapsed, 0/11 actions completed.
[INFO] 9.3s elapsed, 0/11 actions completed.
[INFO] 13.8s elapsed, 1/11 actions completed.
[WARNING] nuvigator:nuvigator on lib/samples/navigation/samples_router.dart:
Unsuported type `int*` for route argument `numberOfRequests` in route `friendRequests` that generates a deep link.
This will throw a runtime error when calling the deep link as the argument will be passed as a `String` to a route that expects a `int*`.
[SEVERE] nuvigator:nuvigator on lib/samples/navigation/samples_router.dart:

Could not format because the source could not be parsed:

line 1, column 1384: Expected to find '}'.
  ╷
1 │ Future<void> toHome() { return nuvigator.pushNamed<void>(SamplesRoutes.home,); } Future<void> pushReplacementToHome<TO extends Object>({TO result}) { return nuvigator.pushReplacementNamed<void, TO>(SamplesRoutes.home, result: result,); } Future<void> pushAndRemoveUntilToHome<TO extends Object>({@required RoutePredicate predicate}) { return nuvigator.pushNamedAndRemoveUntil<void>(SamplesRoutes.home, predicate,); } Future<void> popAndPushToHome<TO extends Object>({TO result}) { return nuvigator.popAndPushNamed<void, TO>(SamplesRoutes.home, result: result,); } Future<String> toFriendRequests({@required int* numberOfRequests}) { return nuvigator.pushNamed<String>(SamplesRoutes.friendRequests, arguments: {'numberOfRequests': numberOfRequests,},); } Future<String> pushReplacementToFriendRequests<TO extends Object>({@required int* numberOfRequests, TO result}) { return nuvigator.pushReplacementNamed<String, TO>(SamplesRoutes.friendRequests, arguments: {'numberOfRequests': numberOfRequests,}, result: result,); } Future<String> pushAndRemoveUntilToFriendRequests<TO extends Object>({@required int* numberOfRequests, @required RoutePredicate predicate}) { return nuvigator.pushNamedAndRemoveUntil<String>(SamplesRoutes.friendRequests, predicate, arguments: {'numberOfRequests': numberOfRequests,},); } Future<String> popAndPushToFriendRequests<TO extends Object>({@required int* numberOfRequests, TO result}) { return nuvigator.popAndPushNamed<String, TO>(SamplesRoutes.friendRequests, arguments: {'numberOfRequests': numberOfRequests,}, result: result,); } ComposerRouter get composerRouter => getRouter<ComposerRouter>();
  │                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ^
  ╵
line 1, column 1104: Expected to find '}'.
  ╷
1 │ Future<void> toHome() { return nuvigator.pushNamed<void>(SamplesRoutes.home,); } Future<void> pushReplacementToHome<TO extends Object>({TO result}) { return nuvigator.pushReplacementNamed<void, TO>(SamplesRoutes.home, result: result,); } Future<void> pushAndRemoveUntilToHome<TO extends Object>({@required RoutePredicate predicate}) { return nuvigator.pushNamedAndRemoveUntil<void>(SamplesRoutes.home, predicate,); } Future<void> popAndPushToHome<TO extends Object>({TO result}) { return nuvigator.popAndPushNamed<void, TO>(SamplesRoutes.home, result: result,); } Future<String> toFriendRequests({@required int* numberOfRequests}) { return nuvigator.pushNamed<String>(SamplesRoutes.friendRequests, arguments: {'numberOfRequests': numberOfRequests,},); } Future<String> pushReplacementToFriendRequests<TO extends Object>({@required int* numberOfRequests, TO result}) { return nuvigator.pushReplacementNamed<String, TO>(SamplesRoutes.friendRequests, arguments: {'numberOfRequests': numberOfRequests,}, result: result,); } Future<String> pushAndRemoveUntilToFriendRequests<TO extends Object>({@required int* numberOfRequests, @required RoutePredicate predicate}) { return nuvigator.pushNamedAndRemoveUntil<String>(SamplesRoutes.friendRequests, predicate, arguments: {'numberOfRequests': numberOfRequests,},); } Future<String> popAndPushToFriendRequests<TO extends Object>({@required int* numberOfRequests, TO result}) { return nuvigator.popAndPushNamed<String, TO>(SamplesRoutes.friendRequests, arguments: {'numberOfRequests': numberOfRequests,}, result: result,); } ComposerRouter get composerRouter => getRouter<ComposerRouter>();
  │                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ^
  ╵
line 1, column 835: Expected to find '}'.
  ╷
1 │ Future<void> toHome() { return nuvigator.pushNamed<void>(SamplesRoutes.home,); } Future<void> pushReplacementToHome<TO extends Object>({TO result}) { return nuvigator.pushReplacementNamed<void, TO>(SamplesRoutes.home, result: result,); } Future<void> pushAndRemoveUntilToHome<TO extends Object>({@required RoutePredicate predicate}) { return nuvigator.pushNamedAndRemoveUntil<void>(SamplesRoutes.home, predicate,); } Future<void> popAndPushToHome<TO extends Object>({TO result}) { return nuvigator.popAndPushNamed<void, TO>(SamplesRoutes.home, result: result,); } Future<String> toFriendRequests({@required int* numberOfRequests}) { return nuvigator.pushNamed<String>(SamplesRoutes.friendRequests, arguments: {'numberOfRequests': numberOfRequests,},); } Future<String> pushReplacementToFriendRequests<TO extends Object>({@required int* numberOfRequests, TO result}) { return nuvigator.pushReplacementNamed<String, TO>(SamplesRoutes.friendRequests, arguments: {'numberOfRequests': numberOfRequests,}, result: result,); } Future<String> pushAndRemoveUntilToFriendRequests<TO extends Object>({@required int* numberOfRequests, @required RoutePredicate predicate}) { return nuvigator.pushNamedAndRemoveUntil<String>(SamplesRoutes.friendRequests, predicate, arguments: {'numberOfRequests': numberOfRequests,},); } Future<String> popAndPushToFriendRequests<TO extends Object>({@required int* numberOfRequests, TO result}) { return nuvigator.popAndPushNamed<String, TO>(SamplesRoutes.friendRequests, arguments: {'numberOfRequests': numberOfRequests,}, result: result,); } ComposerRouter get composerRouter => getRouter<ComposerRouter>();
  │                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ^
  ╵
line 1, column 611: Expected to find '}'.
  ╷
1 │ Future<void> toHome() { return nuvigator.pushNamed<void>(SamplesRoutes.home,); } Future<void> pushReplacementToHome<TO extends Object>({TO result}) { return nuvigator.pushReplacementNamed<void, TO>(SamplesRoutes.home, result: result,); } Future<void> pushAndRemoveUntilToHome<TO extends Object>({@required RoutePredicate predicate}) { return nuvigator.pushNamedAndRemoveUntil<void>(SamplesRoutes.home, predicate,); } Future<void> popAndPushToHome<TO extends Object>({TO result}) { return nuvigator.popAndPushNamed<void, TO>(SamplesRoutes.home, result: result,); } Future<String> toFriendRequests({@required int* numberOfRequests}) { return nuvigator.pushNamed<String>(SamplesRoutes.friendRequests, arguments: {'numberOfRequests': numberOfRequests,},); } Future<String> pushReplacementToFriendRequests<TO extends Object>({@required int* numberOfRequests, TO result}) { return nuvigator.pushReplacementNamed<String, TO>(SamplesRoutes.friendRequests, arguments: {'numberOfRequests': numberOfRequests,}, result: result,); } Future<String> pushAndRemoveUntilToFriendRequests<TO extends Object>({@required int* numberOfRequests, @required RoutePredicate predicate}) { return nuvigator.pushNamedAndRemoveUntil<String>(SamplesRoutes.friendRequests, predicate, arguments: {'numberOfRequests': numberOfRequests,},); } Future<String> popAndPushToFriendRequests<TO extends Object>({@required int* numberOfRequests, TO result}) { return nuvigator.popAndPushNamed<String, TO>(SamplesRoutes.friendRequests, arguments: {'numberOfRequests': numberOfRequests,}, result: result,); } ComposerRouter get composerRouter => getRouter<ComposerRouter>();
  │                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ^
  ╵
[WARNING] nuvigator:nuvigator on lib/samples/modules/composer/navigation/composer_routes.dart:
Unsuported type `String*` for route argument `initialText` in route `composeText` that generates a deep link.
This will throw a runtime error when calling the deep link as the argument will be passed as a `String` to a route that expects a `String*`.
[SEVERE] nuvigator:nuvigator on lib/samples/modules/composer/navigation/composer_routes.dart:

Could not format because the source could not be parsed:

line 1, column 37: Expected to find '}'.
  ╷
1 │ Future<String> toComposeText({String* initialText}) { return nuvigator.pushNamed<String>(ComposerRoutes.composeText, arguments: {'initialText': initialText,},); } Future<String> pushReplacementToComposeText<TO extends Object>({String* initialText, TO result}) { return nuvigator.pushReplacementNamed<String, TO>(ComposerRoutes.composeText, arguments: {'initialText': initialText,}, result: result,); } Future<void> toHelp() { return nuvigator.pushNamed<void>(ComposerRoutes.help,); } Future<void> pushReplacementToHelp<TO extends Object>({TO result}) { return nuvigator.pushReplacementNamed<void, TO>(ComposerRoutes.help, result: result,); } Future<void> pushAndRemoveUntilToHelp<TO extends Object>({@required RoutePredicate predicate}) { return nuvigator.pushNamedAndRemoveUntil<void>(ComposerRoutes.help, predicate,); } Future<void> popAndPushToHelp<TO extends Object>({TO result}) { return nuvigator.popAndPushNamed<void, TO>(ComposerRoutes.help, result: result,); } 
  │                                     ^
  ╵
line 1, column 234: Expected to find '}'.
  ╷
1 │ Future<String> toComposeText({String* initialText}) { return nuvigator.pushNamed<String>(ComposerRoutes.composeText, arguments: {'initialText': initialText,},); } Future<String> pushReplacementToComposeText<TO extends Object>({String* initialText, TO result}) { return nuvigator.pushReplacementNamed<String, TO>(ComposerRoutes.composeText, arguments: {'initialText': initialText,}, result: result,); } Future<void> toHelp() { return nuvigator.pushNamed<void>(ComposerRoutes.help,); } Future<void> pushReplacementToHelp<TO extends Object>({TO result}) { return nuvigator.pushReplacementNamed<void, TO>(ComposerRoutes.help, result: result,); } Future<void> pushAndRemoveUntilToHelp<TO extends Object>({@required RoutePredicate predicate}) { return nuvigator.pushNamedAndRemoveUntil<void>(ComposerRoutes.help, predicate,); } Future<void> popAndPushToHelp<TO extends Object>({TO result}) { return nuvigator.popAndPushNamed<void, TO>(ComposerRoutes.help, result: result,); } 
  │                                                                                                                                                                                                                                          ^
  ╵
[INFO] Running build completed, took 14.3s

[INFO] Caching finalized dependency graph...
[INFO] Caching finalized dependency graph completed, took 26ms

[SEVERE] Failed after 14.3s
pub finished with exit code 1
➜ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 1.22.2, on Mac OS X 10.15.7 19H2)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
[✓] Xcode - develop for iOS and macOS (Xcode 12.0.1)
[!] Android Studio (version 4.1)
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
[✓] IntelliJ IDEA Ultimate Edition (version 2020.1.1)
[✓] VS Code (version 1.50.1)
[✓] Connected device (1 available)

! Doctor found issues in 1 category.
leoiacovini commented 3 years ago

🤔 Looks like it is inserting an * after the type name. Maybe this can be related to a bump in the analyzer? I will take a look thanks for reporting

leoiacovini commented 3 years ago

@stwonary Can you confirm this only happens in the 0.7.1 and not on 0.7.0 ?

stwonary commented 3 years ago

You are right. Working fine on 0.7.0.
0.7.1 is broken

leoiacovini commented 3 years ago

You can keep on 0.7.0 for now, the only changes in 0.7.1 were README updates and the range increase of the analyzer dependency (that should not be a breaking change in theory). I am going to investigate why this happened

leoiacovini commented 3 years ago

Closing here and tracking the new issue on https://github.com/nubank/nuvigator/issues/53