Доступ к функции виджета с состоянием в своем классе состояний? флаттер

Я пытаюсь вызвать функцию _signOut после метода onPressed для кнопки выхода. Однако он не может (распознает функцию или позволяет мне вызывать ее), однако я могу сделать виджет вызова. Signsoutedout, обратный вызов к нему родителя, и все работает как задумано. кроме того, что я выхожу из системы на 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 {
      new 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 new Scaffold(
      appBar: new AppBar(
        title: new Text('Homepage'),
        actions: <Widget>[
          new FlatButton(

            child: new Text('Logout',
                style: new TextStyle(fontSize: 17.0, color: Colors.white)),
            onPressed: widget.onSignedOut,
          )
        ],
      ),
      body: new Container(
          child: new Center(
            child: new Text(
              'Welcome',
              style: new TextStyle(fontSize: 32.0),
            ),
          )),
    );
  }
}

2 ответа

Вы должны сделать свой метод публичным. Щас из-за подчеркивания (_) перед именем метод закрыт, и вы не можете получить к нему доступ.

Просто измените имя с _signOut в signOut и тогда вы сможете позвонить по widget.signOut(),

Во-первых, измените свой _signOutк signOutчтобы к нему мог получить доступ другой файл. ИЛИ более простое решение, переместите свою функцию внутрь stateвашей домашней страницыstatefulWidget.

Другие вопросы по тегам