Solución:
Puedes usar funciones de devolución de llamada lograr esto. Consulte el siguiente código.
import 'package:flutter/material.dart';
class RootPage extends StatefulWidget {
@override
_RootPageState createState() => new _RootPageState();
}
class _RootPageState extends State<RootPage> {
FeedPage feedPage;
Widget currentPage;
@override
void initState() {
super.initState();
feedPage = FeedPage(this.callback);
currentPage = feedPage;
}
void callback(Widget nextPage) {
setState(() {
this.currentPage = nextPage;
});
}
@override
Widget build(BuildContext context) {
return new Scaffold(
//Current page to be changed from other classes too?
body: currentPage
);
}
}
class FeedPage extends StatefulWidget {
Function callback;
FeedPage(this.callback);
@override
_feedPageState createState() => new _feedPageState();
}
class _feedPageState extends State<FeedPage> {
@override
Widget build(BuildContext context) {
return new FlatButton(
onPressed: () {
this.widget.callback(new NextPage());
// setState(() {
// //change the currentPage in RootPage so it switches FeedPage away and gets a new class that I'll make
// });
},
child: new Text('Go to a new page but keep root, just replace this feed part'),
);
}
}
Esto es muy similar a este problema y podría referirse al tercer punto en mi respuesta.
Captura de pantalla:
Código completo:
Este es el ParentPage
:
class ParentPage extends StatefulWidget {
@override
_ParentPageState createState() => _ParentPageState();
}
class _ParentPageState extends State<ParentPage> {
int _count = 0;
// Pass this method to the child page.
void _update(int count) {
setState(() => _count = count);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
Text('Value (in parent) = $_count'),
ChildPage(update: _update),
],
),
);
}
}
Este es el ChildPage
:
class ChildPage extends StatelessWidget {
final ValueChanged<int> update;
ChildPage({this.update});
@override
Widget build(BuildContext context) {
return RaisedButton(
onPressed: () => update(1), // Passing value to the parent widget.
child: Text('Update (in child)'),
);
}
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)