Flutter 如何在flatter中使用switch语句在侧导航栏上执行注销?

Flutter 如何在flatter中使用switch语句在侧导航栏上执行注销?,flutter,dart,statefulwidget,Flutter,Dart,Statefulwidget,我不熟悉flifter,我正在尝试在侧导航栏上执行signOut()函数。我陷入了一个代码段。经过几次尝试后,我得到了如下错误: 类型Future不是类型Widget的子类型 我有以下代码在我的案例0:statement中,我应该如何调用_logOutUser()函数? 任何帮助都将不胜感激 final FirebaseAuth _firebaseAuth = FirebaseAuth.instance; class Homepage extends StatelessWidget { @

我不熟悉flifter,我正在尝试在
侧导航栏上执行signOut()函数。我陷入了一个代码段。经过几次尝试后,我得到了如下错误:

类型Future不是类型Widget的子类型

我有以下代码在我的案例0:statement中,我应该如何调用_logOutUser()函数? 任何帮助都将不胜感激

final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

class Homepage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      routes: {
        '/login': (context) => Login(),
      },
      title: 'NavigationDrawer Demo',
      theme: new ThemeData(
        primarySwatch: Colors.red,
      ),
      home: new HomePage(),
    );
  }
}

class DrawerItem {
  String title;
  IconData icon;
  DrawerItem(this.title, this.icon);
}

class HomePage extends StatefulWidget {
  HomePage({
    this.auth,
    this.onSignedOut,
  });
  final AuthImplementation auth;
  final VoidCallback onSignedOut;
  final drawerItems = [
    new DrawerItem("Logout", Icons.exit_to_app),
  ];

  @override
  State<StatefulWidget> createState() {
    return new HomePageState();
  }
}

class HomePageState extends State<HomePage> {
  void _logOutUser() async {
    try {
      await widget.auth.signOut();
      widget.onSignedOut();
    } catch (e) {
      print(e.toString());
    }
  }

  int _selectedDrawerIndex = 0;
  _getDrawerItemWidget(int pos) {
    switch (pos) {
      case 0:
        return HomePageState()._logOutUser();
      default:
        return new Text("Error");
    }
  }

  _onSelectItem(int index) {
    setState(() => _selectedDrawerIndex = index);
    Navigator.of(context).pop();
  }

  @override
  Widget build(BuildContext context) {
    var drawerOptions = <Widget>[];
    for (var i = 0; i < widget.drawerItems.length; i++) {
      var d = widget.drawerItems[i];
      drawerOptions.add(
          new ListTile(
            leading: new Icon(d.icon),
            title: new Text(d.title),
            selected: i == _selectedDrawerIndex,
            onTap: () => _onSelectItem(i),
          )
      );
    }

  }
}
final FirebaseAuth\u FirebaseAuth=FirebaseAuth.instance;
类主页扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
路线:{
“/login”:(上下文)=>login(),
},
标题:“NavigationDrawer演示”,
主题:新主题数据(
主样本:颜色。红色,
),
主页:新主页(),
);
}
}
阶级仪式{
字符串标题;
Iconda图标;
DroperItem(this.title,this.icon);
}
类主页扩展了StatefulWidget{
主页({
这个.auth,
这是我的名字,
});
最终授权执行授权;
最终作废回拨至已签出;
最终付款日期=[
新抽屉图标(“注销”,图标。退出到应用程序),
];
@凌驾
状态createState(){
返回新的HomePageState();
}
}
类HomePageState扩展了状态{
void\u logOutUser()异步{
试一试{
等待widget.auth.signOut();
widget.onSignedOut();
}捕获(e){
打印(如toString());
}
}
int _selectedDrawerIndex=0;
_getDrawerItemWidget(内部位置){
开关(pos){
案例0:
返回HomePageState();
违约:
返回新文本(“错误”);
}
}
_onSelectItem(整数索引){
设置状态(()=>_selectedDrawerIndex=索引);
Navigator.of(context.pop();
}
@凌驾
小部件构建(构建上下文){
var Droproptions=[];
对于(var i=0;i(i),
)
);
}
}
}

我对你的问题有点困惑,但如果我没弄错的话,你为什么不这样做:

开关(pos){
案例0:
HomePageState();
返回文本(“注销”);
//或者,如果您不想显示任何内容,您可以返回一个空白容器,或者
//如果您想导航到登录屏幕,只需使用Navigator.push()并返回容器
违约:
返回新文本(“错误”);
}

出现错误
type Future的原因不是Widget
的子类型,因为函数
\u logOutUser()
没有返回Widget。如果我没有回答您的问题,请在下面进行评论。

您可以提供更多信息,例如错误指向的位置或其他信息吗?我尝试调用此选项:return HomePageState()。\u logOutUser();在我的例子中,0语句导致错误:“type Future不是Widget的子类型”