Coder Social home page Coder Social logo

lukepighetti / fluro Goto Github PK

View Code? Open in Web Editor NEW
3.7K 51.0 416.0 1.1 MB

Fluro is a Flutter routing library that adds flexible routing options like wildcards, named parameters and clear route definitions.

Home Page: https://pub.dev/packages/fluro

License: MIT License

Dart 95.17% Objective-C 0.09% Kotlin 0.29% Swift 0.92% HTML 2.54% Makefile 0.99%
flutter router routing parameters flutter-routing

fluro's Introduction

English | Português



The brightest, hippest, coolest router for Flutter.

Version Build Status

Features

  • Simple route navigation
  • Function handlers (map to a function instead of a route)
  • Wildcard parameter matching
  • Querystring parameter parsing
  • Common transitions built-in
  • Simple custom transition creation
  • Follows stable Flutter channel
  • Null-safety

Example Project

There is a pretty sweet example project in the example folder. Check it out. Otherwise, keep reading to get up and running.

Getting started

First, you should define a new FluroRouter object by initializing it as such:

final router = FluroRouter();

It may be convenient for you to store the router globally/statically so that you can access the router in other areas in your application.

After instantiating the router, you will need to define your routes and your route handlers:

var usersHandler = Handler(handlerFunc: (BuildContext context, Map<String, dynamic> params) {
  return UsersScreen(params["id"][0]);
});

void defineRoutes(FluroRouter router) {
  router.define("/users/:id", handler: usersHandler);

  // it is also possible to define the route transition to use
  // router.define("users/:id", handler: usersHandler, transitionType: TransitionType.inFromLeft);
}

In the above example, the router will intercept a route such as /users/1234 and route the application to the UsersScreen passing the value 1234 as a parameter to that screen.

Navigating

You can use FluroRouter with the MaterialApp.onGenerateRoute parameter via FluroRouter.generator. To do so, pass the function reference to the onGenerate parameter like: onGenerateRoute: router.generator.

You can then use Navigator.push and the flutter routing mechanism will match the routes for you.

You can also manually push to a route yourself. To do so:

router.navigateTo(context, "/users/1234", transition: TransitionType.fadeIn);

Class arguments

Don't want to use strings for params? No worries.

After pushing a route with a custom RouteSettings you can use the BuildContext.settings extension to extract the settings. Typically this would be done in Handler.handlerFunc so you can pass RouteSettings.arguments to your screen widgets.

/// Push a route with custom RouteSettings if you don't want to use path params
FluroRouter.appRouter.navigateTo(
  context,
  'home',
  routeSettings: RouteSettings(
    arguments: MyArgumentsDataClass('foo!'),
  ),
);

/// Extract the arguments using [BuildContext.settings.arguments] or [BuildContext.arguments] for short
var homeHandler = Handler(
  handlerFunc: (context, params) {
    final args = context.settings.arguments as MyArgumentsDataClass;

    return HomeComponent(args);
  },
);

fluro's People

Contributors

alardizabal avatar alexays avatar andryfailli avatar bbb avatar bcko avatar chichina avatar collinjackson avatar hamberluo avatar idanaiziknissim avatar jalpedersen avatar jb-solar avatar jngbng avatar jonsamwell avatar kevinthegray avatar lsalazarm99 avatar lucamtudor avatar lukef avatar lukepighetti avatar miolin avatar mit-mit avatar namiwang avatar pinpong avatar robsonsilv4 avatar sethladd avatar svenschoene avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fluro's Issues

Support for array parameters

Currently a route like /main/example?test=a&test=b&test=c will give parameters test=c i.e. it will take the last seen value for a key.

It would be nice if the parameters given would be test=[a,b,c], allowing us to pass an array of values through.

navigateTo was called on null

Example app works, but when identical app structure with different routes is run, I get this error.

[✓] Flutter (Channel beta, v0.8.2, on Mac OS X 10.13.6 17G65, locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK 27.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.0)
[✓] Android Studio (version 3.1)
[✓] IntelliJ IDEA Community Edition (version 2018.2.4)
[✓] Connected devices (1 available)

flutter: ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════ flutter: The following NoSuchMethodError was thrown while handling a gesture: flutter: The method 'navigateTo' was called on null. flutter: Receiver: null flutter: Tried calling: navigateTo(Instance of 'StatefulElement', "/demo") flutter: flutter: When the exception was thrown, this was the stack: flutter: #0 Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:48:5) flutter: #1 LandingComponentState.build.<anonymous closure> (package:egc/components/landing/landing_component.dart:23:38) flutter: #2 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:503:14) flutter: #3 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:558:30) flutter: #4 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24) flutter: #5 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9) flutter: #6 TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7) flutter: #7 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9) flutter: #8 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12) flutter: #9 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11) flutter: #10 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:143:19) flutter: #11 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:121:22) flutter: #12 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:101:7) flutter: #13 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:64:7) flutter: #14 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:48:7) flutter: #15 _invoke1 (dart:ui/hooks.dart:142:13) flutter: #16 _dispatchPointerDataPacket (dart:ui/hooks.dart:99:5)

type 'List<String>' is not a subtype of type 'String'

When trying to navigate to a new route with _navigateTo() it throws the exception below.

This is my router class

`import "package:fluro/fluro.dart";
import "package:flutter/material.dart";
import "package:school_visit_app/UI/Form/FormPage.dart";

class Routes {
static final Router _router = new Router();

//Navigate to form page
static Handler formHandler = new Handler(
handlerFunc: (BuildContext context, Map<String, dynamic> params) {
print(params);
return new FormPage(params['id']);
}
);

static void initRoutes() {
_router.define("/form/:id", handler: formHandler);
}

static void navigateTo(context, String route, {TransitionType transition}) {
_router.navigateTo(context, route, transition: transition);
}

}`

this is the exception given.

I/flutter (28860): Another exception was thrown: type 'List<String>' is not a subtype of type 'String' I/flutter (28860): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════ I/flutter (28860): The following assertion was thrown building Builder(dirty): I/flutter (28860): type 'List<String>' is not a subtype of type 'String' I/flutter (28860): Either the assertion indicates an error in the framework itself, or we should provide substantially I/flutter (28860): more information in this error message to help you determine and fix the underlying cause. I/flutter (28860): In either case, please report this assertion by filing a bug on GitHub: I/flutter (28860): https://github.com/flutter/flutter/issues/new I/flutter (28860): When the exception was thrown, this was the stack: I/flutter (28860): #0 Routes.formHandler.<anonymous closure> (package:school_visit_app/Routes.dart:11:33) I/flutter (28860): #1 Router.matchRoute.<anonymous closure>.<anonymous closure> (package:fluro/src/router.dart:140:28) I/flutter (28860): #2 PageRouteBuilder.buildPage (package:flutter/src/widgets/pages.dart:107:12) I/flutter (28860): #3 _ModalScopeState.build.<anonymous closure> (package:flutter/src/widgets/routes.dart:615:43) I/flutter (28860): #4 Builder.build (package:flutter/src/widgets/basic.dart:5590:41) I/flutter (28860): #5 StatelessElement.build (package:flutter/src/widgets/framework.dart:3707:28) I/flutter (28860): #6 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3654:15) I/flutter (28860): #7 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5) I/flutter (28860): #8 StatelessElement.update (package:flutter/src/widgets/framework.dart:3714:5) I/flutter (28860): #9 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15) I/flutter (28860): #10 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14) I/flutter (28860): #11 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15) I/flutter (28860): #12 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14) I/flutter (28860): #13 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15) I/flutter (28860): #14 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14) I/flutter (28860): #15 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15) I/flutter (28860): #16 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16) I/flutter (28860): #17 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5) I/flutter (28860): #18 StatefulElement.update (package:flutter/src/widgets/framework.dart:3811:5) I/flutter (28860): #19 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15) I/flutter (28860): #20 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16) I/flutter (28860): #21 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5) I/flutter (28860): #22 StatefulElement.update (package:flutter/src/widgets/framework.dart:3811:5) I/flutter (28860): #23 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15) I/flutter (28860): #24 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14) I/flutter (28860): #25 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15) I/flutter (28860): #26 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16) I/flutter (28860): #27 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5) I/flutter (28860): #28 ProxyElement.update (package:flutter/src/widgets/framework.dart:3921:5) I/flutter (28860): #29 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15) I/flutter (28860): #30 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14) I/flutter (28860): #31 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15) I/flutter (28860): #32 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16) I/flutter (28860): #33 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5) I/flutter (28860): #34 StatefulElement.update (package:flutter/src/widgets/framework.dart:3811:5) I/flutter (28860): #35 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15) I/flutter (28860): #36 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16) I/flutter (28860): #37 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5) I/flutter (28860): #38 StatelessElement.update (package:flutter/src/widgets/framework.dart:3714:5) I/flutter (28860): #39 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15) I/flutter (28860): #40 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14) I/flutter (28860): #41 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15) I/flutter (28860): #42 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16) I/flutter (28860): #43 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5) I/flutter (28860): #44 ProxyElement.update (package:flutter/src/widgets/framework.dart:3921:5) I/flutter (28860): #45 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15) I/flutter (28860): #46 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16) I/flutter (28860): #47 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5) I/flutter (28860): #48 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2255:33) I/flutter (28860): #49 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:653:20) I/flutter (28860): #50 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208:5) I/flutter (28860): #51 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15) I/flutter (28860): #52 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9) I/flutter (28860): #53 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:751:7) I/flutter (28860): #55 _Timer._runTimers (dart:isolate/runtime/libtimer_impl.dart:382:19) I/flutter (28860): #56 _Timer._handleMessage (dart:isolate/runtime/libtimer_impl.dart:416:5) I/flutter (28860): #57 _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12) I/flutter (28860): (elided one frame from package dart:async) I/flutter (28860): ════════════════════════════════════════════════════════════════════════════════════════════════════

Ive tried troubleshooting with no luck, any ideas?

Saving/restoring route stack when the app is paused/resumed.

Flutter doesn't implicitly persist the current route, which is annoying because every single app at some point will (or even should) do this.

Fluro could take care of this by saving the current route and, maybe, the entire current route stack when the app is paused and then restoring it when the application is resumed.

No back button in AppBar

Navigating to a page as below:

Application.router.navigateTo(
                            context, "/forgot?data=test");

But next page does not show back button in AppBar.

ios --release build TransitionType.native error

I am using Flutter SDK v0.4.4 and have just done a release build and am getting a fairly serious error when using the native transition type with iOS (Android is fine).

the device screen goes black when the transition starts and an error is thrown
flutter: ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
flutter: The following NoSuchMethodError was thrown during paint():
flutter: Class '_CupertinoEdgeShadowPainter' has no instance method 'paint'.
flutter: Receiver: Instance of '_CupertinoEdgeShadowPainter'
flutter: Tried calling: paint(Instance of 'Canvas', Instance of 'Offset', Instance of 'ImageConfiguration')

If I set the-transition type to TransitionType.inFromRight, the navigation works fine.

Weirdly, this works fine in the debug mode.

iPhone 5s, iOS 11(.3.1)

Unable to pass url as a param using Fluro

Hi,
I just started using Fluro and I noticed that I am unable to pass an URL as a param to my route object. Below is my route handler:
var mediaViewerRouteHandler = new Handler(handlerFunc: (BuildContext context, Map<String, List<String>> params) {
String mediaUrl = params["mediaUrl"].first;
return new MediaViewerPage(mediaUrl: mediaUrl);
});
router.define("/mediaviewer", handler: mediaViewerRouteHandler);

This is my caller:
var url = 'https://zdnet3.cbsistatic.com/hub/i/2012/11/26/278e55cc-1d11-11e4-8c7f-00505685119a/0d90f1dfd278e8f2e4ad4cf56f90455b/cloud-horizon.jpg';
String route = "/mediaviewer?mediaUrl={$url}";
router.navigateTo(context, route, transition: TransitionType.fadeIn);

Below is my error:
No registered route was found to handle '/mediaviewer?mediaUrl=https://zdnet3.cbsistatic.com/hub/i/2012/11/26/278e55cc-1d11-11e4-8c7f-00505685119a/0d90f1dfd278e8f2e4ad4cf56f90455b/cloud-horizon.jpg'.
[VERBOSE-2:dart_error.cc(16)] Unhandled exception:
No registered route was found to handle '/mediaviewer?mediaUrl=https://zdnet3.cbsistatic.com/hub/i/2012/11/26/278e55cc-1d11-11e4-8c7f-00505685119a/0d90f1dfd278e8f2e4ad4cf56f90455b/cloud-horizon.jpg'.
#0 _rootHandleUncaughtError. (dart:async/zone.dart:1114)

Please let me know how to pass a URL as a param.

cannot run the example

When I try to run the example on ios, I get this error

 clang: error: no such file or directory: '/Users/arash/source/flutter-projects/fluro/example/ios/Runner/PluginRegistry.m'
    clang: error: no input files

popUntil?

Hey there,

Is there way to pop multiple times until a specific route or "root" route is reached?

Thanks,

Routes not persisted when switching tabs

I'm using a bottomNavigation TabView as my bottom navigator. Each tab has an independent navigation stack. When I navigate to a route on Tab1, then switch to Tab2, then navigate back to Tab1, it resets to the home route for Tab1.

Passing in contextual params

Hello there,

I have a class that I'd like to navigate to, defined by a Flurio handler, like so:

...
myFluroRouter.define('/foobars/:id/edit', handler: new Handler(
        handlerFunc: (BuildContext context, Map<String, dynamic> params) {
      final String id = params['id']?.first;

      return new FoobarEdit(new Key(id), int.parse(id));
    }));

What I'd like to do now is be able to pass in a callback to FoobarEdit. This callback is contextual and depends on the class that is invoking the constructor for this class, like so:

...
myFluroRouter.define('/foobars/:id/edit', handler: new Handler(
       handlerFunc: (BuildContext context, Map<String, dynamic> params) {
     final String id = params['id']?.first;

     return new FoobarEdit(new Key(id), int.parse(id), myFoobarCallbackFunc);
   }));

What do you think the best approach for this is? It seems like for now, I'm forced to use the traditional
Flutter Navigate class like so:

Navigator.push(
        context, new MaterialPageRoute(builder: (context) => new FoobarEdit(...));

Is there a better way to do this?

Automatic navigation to / route, when opening a keyboard

When I open a keyboard to type into a TextFormField, I get navigated to the target of the / route.

main.dart

class ImmoMatchApp extends StatelessWidget {
  final ImmoNavigator _navigator = new ImmoNavigator();

  @override
  Widget build(BuildContext context) {
    _navigator.initRoutes();
    return new MaterialApp(
      title: "ImmoMatch",
      onGenerateRoute: _navigator.router.generator,
    );
  }
}

ImmoNavigator:

class ImmoNavigator {
  static final ImmoNavigator _navigator = new ImmoNavigator._internal();
  factory ImmoNavigator() {
    return _navigator;
  }
  ImmoNavigator._internal();

  final Logger _logger = new Logger('ImmoNavigator');
  final Router router = new Router();

  initRoutes() {
    if (router.match('/') == null) {
      print('initializing routes');
      router.define(
        "/",
        handler: new Handler(
          handlerFunc: (BuildContext context, Map<String, dynamic> params) {
            print("Navigating to Boot");
            return new BootView();
          },
        ),
      );
      router.define(
        "/login",
        handler: new Handler(
          handlerFunc: (BuildContext context, Map<String, dynamic> params) {
            print("Navigating to Login");
            return new LoginView();
          },
        ),
      );
      router.define(
        "/signin",
        handler: new Handler(
          handlerFunc: (BuildContext context, Map<String, dynamic> params) {
            return new SignInView();
          },
        ),
      );
    }
  }
}

The TextFormField is in the LoginView and when I click on it, "Navigating to Boot" gets printed out.

route path with params bug

if defined routes has route with params, when this route executed, all defined route handle will be executed.

Version 1.2.2 unreleased

Hi guys

In the readme and everywhere states to use 1.2.2 but it looks like this version is not release, latest on https://pub.dartlang.org/packages/fluro is 1.2.1

Was it released? Was a fail release? Or you just bumped the version for the next development iteration? Should bump the version in readme?

Sorry for the poor issue, but I guess you got me :-)

Listening to Route events

I'd like to register to Route events using didChangeNext for example but they can only be accessed by overriding. Is there a way to configure and pass my own routes ?
If I understand clearly, currently RouteCreator constrain to only MaterialPageRoute or PageRouteBuilder so I cannot override Route listeners.
Thank you for any clarification.

Route handler is called three times

I use router.navigateTo(context, _routeName, transition: TransitionType.fadeIn);

My Handler is called three times. 2 times before the screen shows and than another time when I use the back button.

Route:
router.define(invitePeopleScreen, handler: invitePeopleScreenHandler);

Handler:
var invitePeopleScreenHandler = new Handler( handlerFunc: (BuildContext context, Map<String, dynamic> params) { appController.changeActiveScreenState(Routes.invitePeopleScreen); return new InvitePeopleScreen(); });

The documentation is pretty slim !!!

'

Async HandlerFunc

On some of my routes I'd like to load some data from a server based on the ID in the URL, I was thinking of doing that via an async handler but that doesn't seem possible. Am I missing another way to do it?

Thanks!

Route Guard and Rerouting

Is there a way to implement a simple route guard?
For example if the user is not logged in (I can get the info from an inherited widget out of the context)
I want to go to the /login page and in the other hand if I am on /login but the user is logged in I want to go to the root of the app.
I can't reroute during a Handler or I will get the error, which make sense:

I/flutter ( 3387): The following assertion was thrown building Builder(dirty):
I/flutter ( 3387): setState() or markNeedsBuild() called during build.
I/flutter ( 3387): This Overlay widget cannot be marked as needing to build because the framework is already in the
I/flutter ( 3387): process of building widgets. A widget can be marked as needing to be built during the build phase
I/flutter ( 3387): only if one of its ancestors is currently building. This exception is allowed because the framework
I/flutter ( 3387): builds parent widgets before children, which means a dirty descendant will always be built.
I/flutter ( 3387): Otherwise, the framework might not visit this widget during this build phase.
I/flutter ( 3387): The widget on which setState() or markNeedsBuild() was called was:
I/flutter ( 3387):   Overlay-[LabeledGlobalKey<OverlayState>#46a1c](state: OverlayState#29c46(entries:

I could return the Login page instead of any other page but this looks weird as my Login page will be on the route / or any other route. I can clear the stack after logging in, but still a bit stange no?

How would you manage redirection?

version not correct

The current Dart SDK version is 2.0.0-dev.58.0.flutter-f981f09760.

Because xx depends on fluro >=1.3.2 which requires SDK version >=2.0.0-dev.61.0 <3.0.0, version solving failed.
pub get failed (1)

after I run flutter upgrade it's still the same.

Push route without BuildContext

Hey, I've been trying to dig into this for a bit now. What happens if I want to push a route programmatically, say from a listener setup in my main widget constructor.

class Global {
  static Router router;
}

void main() {
  runApp(new App());
}

class App extends StatelessWidget {
  Router router;

  App() {
    Global.router = new Router()
      ..define("home",
          handler: new Handler(handlerFunc: (BuildContext context, params) {
        return new HomePage();
      }))
      ..define("auth",
          handler: new Handler(handlerFunc: (BuildContext context, params) {
        return new AuthPage();
      }));

    someListener.listen((user) {
      if (user == null) {
        // Do logout, navigate to "auth"
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      onGenerateRoute: Global.router.generator,
    );
  }
}

I'm trying to find a way to access the root navigator from my listener, and push directly from there.

This is probably also related to Flutter's built-in navigation.

What would be a solution?

flutter packages get

pubspec.yaml
===>

name: helloword
description: A new Flutter project.

environment:
sdk: ">=2.0.0-dev.68.0 <3.0.0"

dependencies:
fluro:
git: git://github.com/theyakka/fluro.git
flutter:
sdk: flutter,

cupertino_icons: ^0.1.2

dev_dependencies:
flutter_test:
sdk: flutter

flutter:

uses-material-design: true

==========================================================================

flutter packages upgrade
Running "flutter packages upgrade" in helloword...
Could not find a file named "pubspec.yaml" in git://github.com/theyakka/fluro.git a68b03e9cefa549d70885fe5390dee9d2c0ad30b.

pub upgrade failed (1)

There are multiple heroes that share the same tag within a subtree

When I try to start a new page with:

Application.get().router.navigateTo(context, "/contract?contract-uuid=$contractUUID");

I get this error:

I/flutter (13538): ══╡ EXCEPTION CAUGHT BY SCHEDULER LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter (13538): The following assertion was thrown during a scheduler callback:
I/flutter (13538): There are multiple heroes that share the same tag within a subtree.
I/flutter (13538): Within each subtree for which heroes are to be animated (typically a PageRoute subtree), each Hero
I/flutter (13538): must have a unique non-null tag.
I/flutter (13538): In this case, multiple heroes had the tag "Instance of 'Object'".
I/flutter (13538):
I/flutter (13538): When the exception was thrown, this was the stack:
I/flutter (13538): #0      Hero._allHeroesFor.visitor.<anonymous closure> (package:flutter/src/widgets/heroes.dart:114:13)
I/flutter (13538): #2      Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:112:16)
I/flutter (13538): #3      ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #4      Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #5      MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4506:16)
I/flutter (13538): #6      Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #7      ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #8      Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #9      SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #10     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #11     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #12     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #13     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #14     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #15     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #16     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #17     List.forEach (dart:core-patch/growable_array.dart:267)
I/flutter (13538): #18     SliverMultiBoxAdaptorElement.visitChildren (package:flutter/src/widgets/sliver.dart:866:36)
I/flutter (13538): #19     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #20     MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4506:16)
I/flutter (13538): #21     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #22     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #23     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #24     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #25     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #26     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #27     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #28     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #29     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #30     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #31     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #32     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #33     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #34     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #35     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #36     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #37     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #38     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #39     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #40     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #41     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #42     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #43     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #44     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #45     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #46     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #47     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #48     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #49     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #50     MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4506:16)
I/flutter (13538): #51     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #52     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #53     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #54     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #55     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #56     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #57     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #58     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #59     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #60     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #61     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #62     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #63     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #64     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #65     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #66     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #67     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #68     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #69     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #70     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #71     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #72     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #73     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #74     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #75     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #76     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #77     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #78     List.forEach (dart:core-patch/growable_array.dart:267)
I/flutter (13538): #79     SliverMultiBoxAdaptorElement.visitChildren (package:flutter/src/widgets/sliver.dart:866:36)
I/flutter (13538): #80     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #81     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #82     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #83     MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4506:16)
I/flutter (13538): #84     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #85     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #86     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #87     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #88     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #89     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #90     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #91     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #92     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #93     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #94     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #95     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #96     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #97     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #98     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #99     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #100    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #101    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #102    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #103    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #104    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #105    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #106    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #107    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #108    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #109    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #110    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #111    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #112    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #113    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #114    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #115    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #116    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #117    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #118    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #119    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #120    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #121    MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4506:16)
I/flutter (13538): #122    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #123    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #124    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #125    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #126    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #127    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #128    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #129    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #130    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #131    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #132    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #133    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #134    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #135    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #136    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #137    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #138    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #139    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #140    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #141    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #142    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #143    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #144    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #145    MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4506:16)
I/flutter (13538): #146    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #147    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #148    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #149    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #150    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #151    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #152    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #153    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #154    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #155    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #156    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #157    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #158    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #159    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #160    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #161    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #162    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #163    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #164    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #165    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #166    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #167    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #168    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #169    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #170    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #171    MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4506:16)
I/flutter (13538): #172    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #173    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #174    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #175    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #176    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #177    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #178    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #179    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #180    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #181    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4406:14)
I/flutter (13538): #182    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #183    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #184    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #185    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #186    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #187    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #188    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #189    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #190    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #191    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #192    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #193    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #194    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #195    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #196    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126:15)
I/flutter (13538): #197    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3470:14)
I/flutter (13538): #198    Element.visitChildElements (package:flutter/src/widgets/framework.dart:2528:5)
I/flutter (13538): #199    Hero._allHeroesFor (package:flutter/src/widgets/heroes.dart:128:13)
I/flutter (13538): #200    HeroController._startHeroTransition (package:flutter/src/widgets/heroes.dart:480:53)
I/flutter (13538): #201    HeroController._maybeStartHeroTransition.<anonymous closure> (package:flutter/src/widgets/heroes.dart:462:9)
I/flutter (13538): #202    BindingBase&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:688:15)
I/flutter (13538): #203    BindingBase&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:644:9)
I/flutter (13538): #204    _invoke (file:///b/build/slave/Linux_Engine/build/src/flutter/lib/ui/hooks.dart:86)
I/flutter (13538): #205    _drawFrame (file:///b/build/slave/Linux_Engine/build/src/flutter/lib/ui/hooks.dart:75)
I/flutter (13538): (elided one frame from class _AssertionError)
I/flutter (13538): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter (13538): Another exception was thrown: There are multiple heroes that share the same tag within a subtree.

But when I start it from another place in the app I won't get this error

Support Chinese characters in routes

error:
flutter: /demo?message=测试&color_hex=#F76F00
flutter: ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
flutter: The following ArgumentError was thrown while handling a gesture:
flutter: Invalid argument(s): Illegal percent encoding in URI
flutter:
flutter: When the exception was thrown, this was the stack:
flutter: #0 _Uri._uriDecode (dart:core/uri.dart:2835:11)
flutter: #1 Uri.decodeComponent (dart:core/uri.dart:1109:17)

Reset Stack Navigation After push

Hi guys,
thank you for this project that it's useful and very clear. So I need to reset the stack after loaded screen. If you think to iOS enviroment, reset a rootviewcontroller with the current VC.

router failed in latest flutter

I've got some code involving fluro which works fine until I upgrade flutter to Flutter (Channel master, v0.2.3-pre.41, on Mac OS X 10.13.3 17D102, locale en-US)

import 'package:flutter/material.dart';

import 'package:fluro/fluro.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    final router = new Router();
    router.define("/users/:id", handler: new Handler(handlerFunc: (BuildContext context, Map<String, dynamic> params) {
      return new PagesUser(userId: params["id"][0]);
    }));

    return new MaterialApp(
      title: 'title',
      initialRoute: 'users/a',
      onGenerateRoute: router.generator,
    );
  }
}

will produce


I/flutter (15772): ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
I/flutter (15772): The following assertion was thrown while handling a gesture:
I/flutter (15772): type 'PageRouteBuilder' is not a subtype of type 'Route<Null>' where
I/flutter (15772):   PageRouteBuilder is from package:flutter/src/widgets/pages.dart
I/flutter (15772):   Route is from package:flutter/src/widgets/navigator.dart
I/flutter (15772):   Null is from dart:core
I/flutter (15772):
I/flutter (15772): Either the assertion indicates an error in the framework itself, or we should provide substantially
I/flutter (15772): more information in this error message to help you determine and fix the underlying cause.
I/flutter (15772): In either case, please report this assertion by filing a bug on GitHub:
I/flutter (15772):   https://github.com/flutter/flutter/issues/new
I/flutter (15772):
I/flutter (15772): When the exception was thrown, this was the stack:
I/flutter (15772): #0      Router.generator (file:///Users/nano/.pub-cache/hosted/pub.dartlang.org/fluro-1.3.0/lib/src/router.dart:165:18)
I/flutter (15772): #1      _MaterialAppState._onGenerateRoute (package:flutter/src/material/app.dart:621:21)
I/flutter (15772): #2      NavigatorState._routeNamed (package:flutter/src/widgets/navigator.dart:857:35)
I/flutter (15772): #3      NavigatorState.pushNamed (package:flutter/src/widgets/navigator.dart:902:17)
I/flutter (15772): #4      StatusItem._buildStatusTitle.<anonymous closure> (file:///Users/nano/workspace/uraaka/app/lib/views/statuses/item.dart:51:41)
I/flutter (15772): #5      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
I/flutter (15772): #6      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:161:9)
I/flutter (15772): #7      TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:123:7)
I/flutter (15772): #8      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
I/flutter (15772): #9      _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:147:20)
I/flutter (15772): #10     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:121:22)
I/flutter (15772): #11     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:101:7)
I/flutter (15772): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:64:7)
I/flutter (15772): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:48:7)
I/flutter (15772): #14     _invoke1 (dart:ui/hooks.dart:134:13)
I/flutter (15772): #15     _dispatchPointerDataPacket (dart:ui/hooks.dart:91:5)

Still not sure if this is an issue of fluro or flutter.

Screen image shifted up/left when using transitions

I'm not sure what changed (likely a Flutter upgrade) but suddenly earlier today, routing to a screen using a Fluro transition causes the screen image to be shifted once it settles from the transition, so that the bottom left corner of the image is drawn at the center of the screen, with the remainder of the screen remaining black.

Default TransitionType for route

Since the transition for a page is often the same, a default TransitionType could be given when defining routes.

_router.define(path,  handler: new Handler(handlerFunc: (c,p) => new Page()), transition: TransitionType.inFromLeft);

Context of use

Hi Luke,
I've started working on my Flutter app and GenerateRoute is not an obvious choice.
Can I start using your router which seems to be a perfect match.

Also what strategy do you advise to pass the Router to Widget ?

I'd like to see an example dir with basics use cases.

Thank you for this repo,
Robert

Configuring Routes in Every Screen

Should I use the below code in constructor of every screen?

final appRouter = new AppRouter();
appRouter.configureRoutes();

I would like to know the best approach suggested by Fluro team.

Sometime it's necessary pass to Route Object no only String

Hi guy,

I'm using some this framework so now i need in general use pass Object no only String.
Look this library, i think there are some cod to change but i think start from this definition:

typedef Widget HandlerFunc(BuildContext context, Map<String, List<Object>> parameters);

What do you think it ?

J

Can not pass Vietnamese to the "path" parameter

Everything works well with English.
When I switch to Vietnamese, the Home page show Vietnamese already. But when tapping on the button, I need to open next screen with Vietnamese. So I have to add Vietnamese to path as a parameter.
Unfortunately, I got error:

Another exception was thrown: Invalid argument(s): Illegal percent encoding in URI

Any suggestion? Thanks!

Hi,I have a problem,this is my code

1.Application.router.navigateTo(context, Routes.loginRoute(1,2));

2.static String login = '/login';
static String loginRoute(id, value) => '$login?id=$id&value=$value';

3.router.define(login, handler: Handler(
handlerFunc: (BuildContext context, Map<String, List> params) {
String id = params['id']?.first;
String value = params['value']?.first;
return LoginPage(id, value);
},
));

i think Routes.loginRoute(1,2)==LoginPage(id, value),can you help me?

error: Unsupported tag at this point: 2

Hello, I have just started using Fluro, but I can't use it with Hot Reloading for some reason. Every time I make a change while I am on a route that I have navigated to, it just gives me this error. Here is some more information.

Unless I'm missing something, I have no idea what could be causing this issue.

Note this happens only when a hot reload is performed.

I have also gotten the error message Unsupported tag at this point: 0.

I/flutter (15498): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (15498): The following _CompileTimeError was thrown building
I/flutter (15498): _OverlayEntry-[LabeledGlobalKey<_OverlayEntryState>#5973d](dirty, state: _OverlayEntryState#352c7):
I/flutter (15498): error: Unsupported tag at this point: 2.
I/flutter (15498): 
I/flutter (15498): When the exception was thrown, this was the stack:
I/flutter (15498): #0      Router.matchRoute.<anonymous closure>.<anonymous closure> (file:///Users/g33kidd/.pub-cache/hosted/pub.dartlang.org/fluro-1.3.0/lib/src/router.dart:118:28)
I/flutter (15498): #1      PageRouteBuilder.buildPage (package:flutter/src/widgets/pages.dart:120:12)
I/flutter (15498): #2      ModalRoute._buildModalScope (package:flutter/src/widgets/routes.dart:1027:13)
I/flutter (15498): #3      _OverlayEntryState.build (package:flutter/src/widgets/overlay.dart:170:25)
I/flutter (15498): #4      StatefulElement.build (package:flutter/src/widgets/framework.dart:3713:27)
I/flutter (15498): #5      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3625:15)
I/flutter (15498): #6      Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #7      StatefulElement.update (package:flutter/src/widgets/framework.dart:3760:5)
I/flutter (15498): #8      Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #9      RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4340:32)
I/flutter (15498): #10     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4726:17)
I/flutter (15498): #11     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #12     _TheatreElement.update (package:flutter/src/widgets/overlay.dart:507:16)
I/flutter (15498): #13     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #14     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #15     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #16     StatefulElement.update (package:flutter/src/widgets/framework.dart:3760:5)
I/flutter (15498): #17     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #18     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #19     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #20     ProxyElement.update (package:flutter/src/widgets/framework.dart:3870:5)
I/flutter (15498): #21     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #22     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4618:14)
I/flutter (15498): #23     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #24     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #25     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #26     StatefulElement.update (package:flutter/src/widgets/framework.dart:3760:5)
I/flutter (15498): #27     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #28     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4618:14)
I/flutter (15498): #29     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #30     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4618:14)
I/flutter (15498): #31     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #32     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #33     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #34     StatefulElement.update (package:flutter/src/widgets/framework.dart:3760:5)
I/flutter (15498): #35     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #36     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #37     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #38     ProxyElement.update (package:flutter/src/widgets/framework.dart:3870:5)
I/flutter (15498): #39     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #40     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #41     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #42     StatelessElement.update (package:flutter/src/widgets/framework.dart:3685:5)
I/flutter (15498): #43     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #44     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #45     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #46     ProxyElement.update (package:flutter/src/widgets/framework.dart:3870:5)
I/flutter (15498): #47     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #48     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #49     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #50     ProxyElement.update (package:flutter/src/widgets/framework.dart:3870:5)
I/flutter (15498): #51     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #52     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #53     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #54     StatefulElement.update (package:flutter/src/widgets/framework.dart:3760:5)
I/flutter (15498): #55     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #56     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #57     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #58     ProxyElement.update (package:flutter/src/widgets/framework.dart:3870:5)
I/flutter (15498): #59     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #60     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #61     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #62     StatefulElement.update (package:flutter/src/widgets/framework.dart:3760:5)
I/flutter (15498): #63     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #64     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #65     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #66     ProxyElement.update (package:flutter/src/widgets/framework.dart:3870:5)
I/flutter (15498): #67     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #68     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #69     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #70     ProxyElement.update (package:flutter/src/widgets/framework.dart:3870:5)
I/flutter (15498): #71     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #72     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #73     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #74     StatelessElement.update (package:flutter/src/widgets/framework.dart:3685:5)
I/flutter (15498): #75     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #76     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #77     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #78     StatefulElement.update (package:flutter/src/widgets/framework.dart:3760:5)
I/flutter (15498): #79     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #80     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #81     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #82     ProxyElement.update (package:flutter/src/widgets/framework.dart:3870:5)
I/flutter (15498): #83     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #84     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #85     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #86     StatefulElement.update (package:flutter/src/widgets/framework.dart:3760:5)
I/flutter (15498): #87     Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
I/flutter (15498): #88     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
I/flutter (15498): #89     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
I/flutter (15498): #90     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2225:33)
I/flutter (15498): #91     ______BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:621:20)
I/flutter (15498): #92     _____BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208:5)
I/flutter (15498): #93     ___BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter (15498): #94     ___BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
I/flutter (15498): #95     ___BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:751:7)
I/flutter (15498): #97     _Timer._runTimers (dart:isolate/timer_impl.dart:382:19)
I/flutter (15498): #98     _Timer._handleMessage (dart:isolate/timer_impl.dart:416:5)
I/flutter (15498): #99     _RawReceivePortImpl._handleMessage (dart:isolate/isolate_patch.dart:165:12)
I/flutter (15498): (elided one frame from package dart:async)
I/flutter (15498): ════════════════════════════════════════════════════════════════════════════════════════════════════

EDIT: Here is my flutter version information.

Flutter 0.1.9-pre.36 • channel master • https://github.com/flutter/flutter.git
Framework • revision fe334e1652 (2 weeks ago) • 2018-03-02 17:54:51 -0800
Engine • revision 97b22348c8
Tools • Dart 2.0.0-dev.32.0.flutter-ee15c8eb68

Dart 2 generator

Currently, router.generator returns a Route<Null>, however MaterialApp is expecting a RouteFactory. This doesn't cause issues on Dart 1, but does when enabling the Dart 2 preview.

This will need to be fixed to make Fluro compatible with Dart 2.

Transition type fadeIn animation type works, inFromLeft does not

this works:
router.navigateTo(context, _routeName, transition: TransitionType.fadeIn);

this does not:
router.navigateTo(context, _routeName, transition: TransitionType.inFromLeft);

[+3999 ms] I/flutter (20265): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
[  +18 ms] I/flutter (20265): The following assertion was thrown building
[   +1 ms] I/flutter (20265): _ModalScope-[LabeledGlobalKey<_ModalScopeState>#a7c09](dirty, state: _ModalScopeState#805cf):
[        ] I/flutter (20265): type '_AnimatedEvaluation<Offset>' is not a subtype of type 'Animation<FractionalOffsetGeometry>' of
[        ] I/flutter (20265): 'position' where
[        ] I/flutter (20265):   _AnimatedEvaluation is from package:flutter/src/animation/tween.dart
[        ] I/flutter (20265):   Offset is from dart:ui
[        ] I/flutter (20265):   double is from dart:core
[        ] I/flutter (20265):   Offset is from dart:ui
[        ] I/flutter (20265):   Animation is from package:flutter/src/animation/animation.dart
[        ] I/flutter (20265):   FractionalOffsetGeometry is from package:flutter/src/painting/fractional_offset.dart
[  +23 ms] I/flutter (20265): Either the assertion indicates an error in the framework itself, or we should provide substantially
[        ] I/flutter (20265): more information in this error message to help you determine and fix the underlying cause.
[        ] I/flutter (20265): In either case, please report this assertion by filing a bug on GitHub:
[        ] I/flutter (20265):   https://github.com/flutter/flutter/issues/new
[        ] I/flutter (20265): When the exception was thrown, this was the stack:
[  +18 ms] I/flutter (20265): #0      new SlideTransition (package:flutter/src/widgets/transitions.dart:106)
[   +1 ms] I/flutter (20265): #1      Router._standardTransitionsBuilder.<anonymous closure> (package:fluro/src/router.dart:138)
[        ] I/flutter (20265): #2      PageRouteBuilder.buildTransitions (package:flutter/src/widgets/pages.dart:121)
[        ] I/flutter (20265): #3      _ModalScopeState.build (package:flutter/src/widgets/routes.dart:469)
[        ] I/flutter (20265): #4      StatefulElement.build (package:flutter/src/widgets/framework.dart:3646)
[        ] I/flutter (20265): #5      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3556)
[        ] I/flutter (20265): #6      Element.rebuild (package:flutter/src/widgets/framework.dart:3457)
[        ] I/flutter (20265): #7      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3536)
[        ] I/flutter (20265): #8      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3674)
[        ] I/flutter (20265): #9      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3531)
[        ] I/flutter (20265): #10     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2900)
[        ] I/flutter (20265): #11     Element.updateChild (package:flutter/src/widgets/framework.dart:2703)
[        ] I/flutter (20265): #12     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3568)
[        ] I/flutter (20265): #13     Element.rebuild (package:flutter/src/widgets/framework.dart:3457)
[   +6 ms] I/flutter (20265): #14     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3536)
[        ] I/flutter (20265): #15     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3674)
[        ] I/flutter (20265): #16     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3531)
[        ] I/flutter (20265): #17     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2900)
[        ] I/flutter (20265): #18     Element.updateChild (package:flutter/src/widgets/framework.dart:2703)
[        ] I/flutter (20265): #19     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4330)
[        ] I/flutter (20265): #20     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4653)
[        ] I/flutter (20265): #21     Element.updateChild (package:flutter/src/widgets/framework.dart:2692)
[        ] I/flutter (20265): #22     _TheatreElement.update (package:flutter/src/widgets/overlay.dart:507)
[        ] I/flutter (20265): #23     Element.updateChild (package:flutter/src/widgets/framework.dart:2692)
[        ] I/flutter (20265): #24     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3568)
[        ] I/flutter (20265): #25     Element.rebuild (package:flutter/src/widgets/framework.dart:3457)
[        ] I/flutter (20265): #26     StatefulElement.update (package:flutter/src/widgets/framework.dart:3693)
[        ] I/flutter (20265): #27     Element.updateChild (package:flutter/src/widgets/framework.dart:2692)
[        ] I/flutter (20265): #28     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3568)
[        ] I/flutter (20265): #29     Element.rebuild (package:flutter/src/widgets/framework.dart:3457)
[        ] I/flutter (20265): #30     ProxyElement.update (package:flutter/src/widgets/framework.dart:3803)
[        ] I/flutter (20265): #31     Element.updateChild (package:flutter/src/widgets/framework.dart:2692)
[        ] I/flutter (20265): #32     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4545)
[        ] I/flutter (20265): #33     Element.updateChild (package:flutter/src/widgets/framework.dart:2692)
[        ] I/flutter (20265): #34     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3568)
[        ] I/flutter (20265): #35     Element.rebuild (package:flutter/src/widgets/framework.dart:3457)
[        ] I/flutter (20265): #36     StatefulElement.update (package:flutter/src/widgets/framework.dart:3693)
[        ] I/flutter (20265): #37     Element.updateChild (package:flutter/src/widgets/framework.dart:2692)
[        ] I/flutter (20265): #38     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4545)
[        ] I/flutter (20265): #39     Element.updateChild (package:flutter/src/widgets/framework.dart:2692)
[        ] I/flutter (20265): #40     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4545)
[        ] I/flutter (20265): #41     Element.updateChild (package:flutter/src/widgets/framework.dart:2692)
[        ] I/flutter (20265): #42     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3568)
[        ] I/flutter (20265): #43     Element.rebuild (package:flutter/src/widgets/framework.dart:3457)
[        ] I/flutter (20265): #44     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2261)
[        ] I/flutter (20265): #45     BindingBase&SchedulerBinding&GestureBinding&ServicesBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:530)
[        ] I/flutter (20265): #46     BindingBase&SchedulerBinding&GestureBinding&ServicesBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:194)
[        ] I/flutter (20265): #47     BindingBase&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:713)
[        ] I/flutter (20265): #48     BindingBase&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:649)
[        ] I/flutter (20265): #49     _invoke (file:///b/build/slave/Linux_Engine/build/src/flutter/lib/ui/hooks.dart:86)
[        ] I/flutter (20265): #50     _drawFrame (file:///b/build/slave/Linux_Engine/build/src/flutter/lib/ui/hooks.dart:75)
[        ] I/flutter (20265): ════════════════════════════════════════════════════════════════════════════════════════════════════
[ +216 ms] I/flutter (20265): 4 2017-10-10 15:13:26.535204 FINE rx.logging_middleware RxAppActions-activeScreenChanged: /switchFamilyScreen
[  +22 ms] I/flutter (20265): Another exception was thrown: type '_AnimatedEvaluation<Offset>' is not a subtype of type 'Animation<FractionalOffsetGeometry>' of 'position' where
[ +262 ms] I/flutter (20265): 5 2017-10-10 15:13:26.821407 FINE rx.logging_middleware RxAppActions-activeScreenChanged: /switchFamilyScreen

No registered route was found to handle '/videos/1234'.

I tried to implement routing in my application with fluro, however I had several problems following the 'getting started' guide on Github.

My implementation is rather simple, since the new GestureDetector( onTap: () { _handleTap(context); }, .... )
is supposed to manually push the route with void _handleTap(BuildContext context) { router.navigateTo(context, "/videos/1234", transition: TransitionType.native); }.

The router is initialized according to the getting started example, but once I test the app the error

No registered route was found to handle '/videos/1234'.

What else is needed in order to push the route, or am I doing something wrong?

Better docs

We need better documentation. We're working on it :)

Extend RouteHandler parameters value type

Current definition is :

typedef Widget RouteHandler(Map<String, String> parameters);

Thus only String can be passed as parameter but in some cases we may be required to pass arrays or other complex objects. Can we use Map<String, dynamic> instead ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.