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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden AutomaticKeepAliveClientMixin zu zwingen, Ihren Reiter Inhalte nicht entsorgt werden.
Stellen Sie sicher, dass Sie Ihr tab nicht entsorgt, wenn es nicht erforderlich ist, beibehalten werden, machen
wantKeepAlive
Gegenzug eine Klassenvariable. Rufen SieupdateKeepAlive()
zum aktualisieren der keep-alive-status.Beispiel mit dynamischen lebendig zu halten:
AutomaticKeepAliveClientMixin
das übergeordnete widget oder das widget angezeigt werden soll, wenn die Taste gedrückt wird?Anstatt neue Instanz jedes mal, wenn Sie
pageChooser
, eine Instanz erstellt und zurück das gleiche.Beispiel:
Oder Sie können Gebrauch machen von widgets wie
Angezeigten
oderStack
, um das gleiche zu erreichen.Hoffe, das hilft!
Der bequemste Weg, die ich gefunden habe, das zu tun, ist mit PageStorage widget zusammen mit PageStorageBucket, das wirkt wie ein Schlüssel-Wert-beständigen Schicht.
Gehen Sie durch diesen Artikel eine schöne Erklärung -> https://steemit.com/utopian-io/@tensor/persisting-user-interface-state-and-building-bottom-navigation-bars-in-dart-s-flutter-framework