Доступ к функции виджета с состоянием в своем классе состояний? флаттер
Я пытаюсь вызвать функцию _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.