Wie zu bewahren widget Staaten flattern, beim navigieren mit BottomNavigationBar?

Derzeit arbeite ich am Aufbau der Flutter-app, die beibehalten wird, die Staaten bei der Navigation von einem Bildschirm zum anderen und wieder zurück, wenn die Nutzung BottomNavigationBar. Nur wie funktioniert es in der Spotify mobile Anwendung; wenn Sie eine Navigation gestartet haben, bis zu einer bestimmten Ebene in der navigationshierarchie auf einem der hauptbildschirme, änderung der Bildschirm über der unteren Navigationsleiste, und später Wechsel zurück auf den alten screen, beibehalten wird, wobei der Benutzer in der Hierarchie, einschließlich der Erhaltung des Staates ist.

Habe ich meinen Kopf gegen die Wand, versucht, verschiedene Dinge ohne Erfolg.

Möchte ich wissen, wie kann ich verhindern, dass die Seiten in pageChooser(), wenn umgeschaltet wird, sobald der Benutzer tippt auf die BottomNavigationBar Element, vom Umbau selbst, und statt dessen Erhaltung der Staat Sie schon gefunden, sich in (die Seiten sind alle stateful-Widgets).

import 'package:flutter/material.dart';
import './page_plan.dart';
import './page_profile.dart';
import './page_startup_namer.dart';

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

class Recipher extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Pages();
  }
}

class Pages extends StatefulWidget {
  @override
  createState() => new PagesState();
}

class PagesState extends State<Pages> {
  int pageIndex = 0;


  pageChooser() {
    switch (this.pageIndex) {
      case 0:
        return new ProfilePage();
        break;

      case 1:
        return new PlanPage();
        break;

      case 2:
        return new StartUpNamerPage(); 
        break;  

      default:
        return new Container(
          child: new Center(
            child: new Text(
              'No page found by page chooser.',
              style: new TextStyle(fontSize: 30.0)
              )
            ),
          );     
    }
  }

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new Scaffold(
        body: pageChooser(),
        bottomNavigationBar: new BottomNavigationBar(
          currentIndex: pageIndex,
          onTap: (int tappedIndex) { //Toggle pageChooser and rebuild state with the index that was tapped in bottom navbar
            setState(
              (){ this.pageIndex = tappedIndex; }
              ); 
            },
          items: <BottomNavigationBarItem>[
            new BottomNavigationBarItem(
              title: new Text('Profile'),
              icon: new Icon(Icons.account_box)
              ),
              new BottomNavigationBarItem(
                title: new Text('Plan'),
                icon: new Icon(Icons.calendar_today)
              ),
                new BottomNavigationBarItem(
                title: new Text('Startup'),
                icon: new Icon(Icons.alarm_on)
              )
            ],
          )
      )
    );
  }
}
  • halten Sie die einzelnen Seiten mithilfe von Stapel. Dies könnte hilfreich sein: stackoverflow.com/questions/45235570/...
  • Nett, danke. Dieser arbeitete. Habe ich eigentlich schon versucht, eine IndexedStack, aber ich sehe jetzt, dass dies nicht die gleiche Weise funktionieren wie auf der Bühne und Tickermode.
InformationsquelleAutor ArtBelch | 2018-03-22
Schreibe einen Kommentar