Verschachteln von Routen mit flattern

Ich versuche herauszufinden, eine gute architektonische Lösung für Folgendes problem: ich habe folgende Ersten Ebene Routen, die auch bezeichnet werden als layouts:

/onboarding/* -> Shows onboarding layout
/dashboard/* -> Shows dashboard layout
/overlay/* -> shows slide up overlay layout
/modal/* -> shows modal layout

Benutzer weitergeleitet wird, um jede dieser je nach seinen/Ihren auth-Status, Aktionen etc.. ich habe diese Phase richtig.

Probleme entstehen, wenn ich Sie benutzen will Sekundarstufe Routen, die genannt werden kann Seiten, zum Beispiel

/onboarding/signin -> Shows onboarding layout, that displays signin route
/onboarding/plan -> Shows onboarding layout, that displays plan options
/modal/plan-info -> Shows modal layout, over previous page (/onboarding/plan) and displays plan-information page.

Wie kann ich am besten definieren /organisieren diese in einer Weise, wo kann ich effizient route, die den layouts, und die Seiten, die Sie anzeigen? Beachten Sie, dass immer wenn ich route-Seiten in einem layout, das layout ist nicht zu ändern, aber ich möchte Sie animieren, Inhalte (Seiten) ändern sich innerhalb es basiert auf der route.

Bisher konnte ich folgende

import "package:flutter/widgets.dart";
import "package:skimitar/layouts/Onboarding.dart";
import "package:skimitar/layouts/Dashboard.dart";

Route generate(RouteSettings settings) {
  Route page;
  switch (settings.name) {
    case "/onboarding":
      page = new PageRouteBuilder(pageBuilder: (BuildContext context,
          Animation<double> animation, Animation<double> secondaryAnimation) {
        return new Onboarding();
      });
      break;
      case "/dashboard":
      page = new PageRouteBuilder(pageBuilder: (BuildContext context,
          Animation<double> animation, Animation<double> secondaryAnimation) {
        return new Dashboard();
      });
      break;
  }
  return page;
}

/* Main */
void main() {
  runApp(new WidgetsApp(
      onGenerateRoute: generate, color: const Color(0xFFFFFFFFF)));
}

Diese Routen auf das boarding und den dashboard-layouts (jetzt nur einfache Behälter, Umhüllung text). Ich glaube auch, dass ich verwenden können PageRouteBuilder letztere zu animieren, übergänge zwischen den Routen? Jetzt muss ich herausfinden, wie so etwas wie verschachtelte Sekundär-router innen auf das boarding und dashboard.

Unten ist so etwas wie eine visuelle Darstellung von dem, was ich erreichen möchte, ich muss in der Lage sein, um erfolgreich zu route blau und rot bits. In diesem Beispiel solange wir unter /dashboard blue bit (layout) ändern sich nicht, aber als wir die Navigation von sagen /dashboard/home zu /dashboard/stats den roten bit (Seite) sollte fade-out und fade-in " mit neuen Inhalten. Wenn wir navigieren Weg von /dashboard/home zu sagen /onboarding/home, die rote bit (layout) sollte verschwinden, zusammen mit der gerade aktiven Seite und zeigen neue layout für das onboarding und die Geschichte geht weiter.

Verschachteln von Routen mit flattern

BEARBEITEN ich ein wenig den Fortschritt mit der Annäherung unten beschrieben, im wesentlichen werde ich bestimmen, das layout in meinem runApp und erklären neue WidgetsApp und Routen, die innerhalb jedes der layouts. Es scheint zu funktionieren, aber es gibt ein Problem, Wenn ich auf "Anmelden" ich bin Weiterleitung zur richtigen Seite, aber ich kann auch sehen, alte Seite unten.

main.dart

import "package:flutter/widgets.dart";
import "package:myProject/containers/layouts/Onboarding.dart";

/* Main */
void main() {
  runApp(new Onboarding());
}

Onboarding.dart

import "package:flutter/widgets.dart";
import "package:myProject/containers/pages/SignIn.dart";
import "package:myProject/containers/pages/SignUp.dart";
import "package:myProject/services/helpers.dart";

/* Onboarding router */
Route onboardingRouter(RouteSettings settings) {
  Route page;
  switch (settings.name) {
    case "/":
      page = buildOnboardingRoute(new SignIn());
      break;
    case "/sign-up":
      page = buildOnboardingRoute(new SignUp());
      break;
    default:
      page = buildOnboardingRoute(new SignIn());
  }
  return page;
}

class Onboarding extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Container(
      decoration: new BoxDecoration(
          color: const Color(0xFF000000),
          image: new DecorationImage(
              image: new AssetImage("assets/images/background-fire.jpg"),
              fit: BoxFit.cover)),
      child: new WidgetsApp(
          onGenerateRoute: onboardingRouter, color: const Color(0xFF000000)),
    );
  }
}

Anmeldung.dart

import "package:flutter/widgets.dart";

class SignUp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Center(
        child: new Text("Sign Up",
            style: new TextStyle(color: const Color(0xFFFFFFFF))));
  }
}

Helfer.dart

import "package:flutter/widgets.dart";

Route buildOnboardingRoute(Widget page) {
  return new PageRouteBuilder(
      opaque: true,
      pageBuilder: (BuildContext context, _, __) {
        return page;
      });
}
  • Was versuchen Sie zu erreichen, genau durch die Verschachtelung Router ? Wie würden Sie es verwenden ? Es gibt mehrere Wege, um zu erhalten das gleiche layout, ohne verschachtelte router. So ist es schwer, eine Antwort zu geben, dass werden erfüllen Ihre Bedürfnisse
  • Meine app hat mehrere layouts, die jeweils diese layouts können anzeigen von Inhalten basierend auf der Strecke. Ich brauche nicht diese Inhalte werden, fullscreen, nur besetzen bestimmter Raum in einem layout. Ich dachte, es wäre auch schön, um zu entscheiden, welches layout angezeigt wird, über die Routen in der oberen Ebene.
  • Es kann sein ungewöhnliches Ding an zu flattern, nehme ich von diesem Konzept reagieren-native, es ist super einfach zu tun, aber ich habe Schwierigkeiten, es herauszufinden hier. Wie, Sie davon ausgehen, öffnen Sie ein modales über die route, und diese modalen Verknüpfungen innerhalb der es weitere verschachtelte routing erfolgt innerhalb von es.
InformationsquelleAutor Ilja | 2018-01-04
Schreibe einen Kommentar