【发布时间】:2019-01-29 07:36:44
【问题描述】:
我到处搜索,找不到简单的解决方案。我是编码新手,也是 Flutter/Dart 的新手。
我怀疑这是一个非常基本的问题。我需要通过中间小部件将回调传递给最终小部件。
问题概述:
RootPage > TabNavigator > SearchPage > ProfilePage(ProfilePage 上有注销按钮)。不工作。
在RootPage 中,违规代码是:
@override
Widget build(BuildContext context) {
switch (authStatus) {
case AuthStatus.notDetermined:
return _buildWaitingScreen();
case AuthStatus.notSignedIn:
return LoginPage(
onSignedIn: _signedIn,
);
case AuthStatus.signedIn:
return TabNavigation(
ProfilePage(onSignedOut: _signedOut,)
);
}
return null;
}
RootPage > SearchPage(此SearchPage 上的注销按钮)。是否可以使用此代码:
@override
Widget build(BuildContext context) {
switch (authStatus) {
case AuthStatus.notDetermined:
return _buildWaitingScreen();
case AuthStatus.notSignedIn:
return LoginPage(
onSignedIn: _signedIn,
);
case AuthStatus.signedIn:
return SearchPage(
onSignedOut: _signedOut,
);
}
return null;
}
代码sn-p:
class ProfilePage extends StatelessWidget {
ProfilePage({this.onSignedOut});
final VoidCallback onSignedOut;
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('Manage Profile'),
actions: <Widget> [
new FlatButton(
child: new Text('Logout', style: new TextStyle(fontSize: 17.0, color: Colors.white)),
onPressed: () => _signOut(context)
.....
....
class _RootPageState extends State<RootPage> {
AuthStatus authStatus = AuthStatus.notDetermined;
@override
Widget build(BuildContext context) {
switch (authStatus) {
case AuthStatus.notDetermined:
return _buildWaitingScreen();
case AuthStatus.notSignedIn:
return LoginPage(
onSignedIn: _signedIn,
);
case AuthStatus.signedIn:
return TabNavigation(
ProfilePage(onSignedOut: _signedOut),
);
}
return null;
}
我的应用主页是RootPage,管理用户的登录状态。登录后,RootPage 返回TabNavigation,这是一个管理bottomNavigationbar 的实用程序,默认返回SearchPage(即setState 返回currentPage = SearchPage)。
我现在希望在ProfilePage 上有注销按钮。
我不知道如何让onPressed 回调函数将其输出传回RootPage。
如果不粘贴完整的代码很难解释,但我希望你明白这个概念。
【问题讨论】:
-
您是否在控制台中遇到任何错误?
-
不,控制台中没有错误