5

我试图在注销按钮的 onPressed 方法之后调用 _signOut 函数。但是它没有(识别函数或让我调用它)但是我可以调用widget.Onsignedout,回调它的父级,一切都按预期工作。除了我在 auth.signout 上注销用户并回电只是为了更新表单。如何从状态类访问 _signOut()?谢谢你

import 'package:flutter/material.dart';
import 'package:login_demo/auth.dart';
import 'package:login_demo/root_page.dart';

class HomePage extends StatefulWidget {
  HomePage({this.auth, this.onSignedOut});
  final BaseAuth auth;
  //To call a function of a parent, you can use the callback pattern
  final VoidCallback onSignedOut;

  void _signOut() async {
    try {
      Text('Signing Out here');
      await auth.signOut();
      onSignedOut;
    } catch (e) {
      print(e);
    }
  }

  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Homepage'),
        actions: <Widget>[
          FlatButton(
            child: Text(
              'Logout',
              style: TextStyle(fontSize: 17.0, color: Colors.white)
            ),
            onPressed: widget.onSignedOut,
          ),
        ],
      ),
      body: Container(
        child: Center(
          child: Text(
            'Welcome',
            style: TextStyle(fontSize: 32.0),
          ),
        ),
      ),
    );
  }
}
4

2 回答 2

5

您需要公开您的方法。现在由于_名称前的下划线(),该方法是私有的,您无法访问它。

只需将名称从 更改_signOutsignOut,然后您应该可以通过widget.signOut().

于 2018-08-07T07:22:00.223 回答
0

首先,将您的更改_signOut为,signOut以便其他文件可以访问它。或者更简单的解决方案,将你的函数移动到state你的 homepagestate statefulWidget 中。

于 2021-12-22T18:10:40.480 回答