我有此代码:
class HomePage extends StatefulWidget {
HomePage({this.auth, this.onSignedOut});
final BaseAuth auth;
final VoidCallback onSignedOut;
State<StatefulWidget> createState() => new _HomePageState();
}
class _HomePageState extends State<HomePage> {
@override
void initState() {
// TODO: implement initState
super.initState();
}
void signOut() async {
try {
await widget.auth.signOut();
widget.onSignedOut();
} catch (e) {
print(e);
}
}
按下按钮时会触发以下内容:
Container(
child: new RaisedButton(
child: new Text('Sign Out'),
onPressed: signOut,
),
)
但是,我通过onPressed: signOut
收到此错误:
Only static members can be accessed in initializers.
我想要这样,以便在按钮按下时调用该功能signOut()
来运行其中的代码。有什么办法可以做到吗?我认为这与我如何初始化auth
和onSignedOut
方法有关。
非常感谢您。
答案 0 :(得分:1)
您正在使用
Container(
child: new RaisedButton(
child: new Text('Sign Out'),
onPressed: signOut,
),
)
在类主体声明中,您有两种解决方法。
使用signOut()
方法static
在build
内的方法中使用上述小部件
@override
Widget build(BuildContext context) {
var container = Container(
child: new RaisedButton(
child: new Text('Sign Out'),
onPressed: signOut,
),
);
return container;
}
更新
This是一个非常基本的示例。因此,为简单起见,他们使用了List<Widgets>
,我用我的示例更新了该示例,您可以看到如何使用_getWidget()
方法来解决同一示例。
int _selectedIndex = 0;
static const TextStyle optionStyle = TextStyle(fontSize: 30, fontWeight: FontWeight.bold);
Widget _getWidget(int index) {
switch(index) {
case 0: return Text(
'Index 0: Home',
style: optionStyle,
);
case 1:
return Text(
'Index 1: Business',
style: optionStyle,
);
case 2:
return Text(
'Index 2: School',
style: optionStyle,
);
}
return Container();
}
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('BottomNavigationBar Sample')),
body: Center(child: _getWidget(_selectedIndex)),
bottomNavigationBar: BottomNavigationBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
title: Text('Home'),
),
BottomNavigationBarItem(
icon: Icon(Icons.business),
title: Text('Business'),
),
BottomNavigationBarItem(
icon: Icon(Icons.school),
title: Text('School'),
),
],
currentIndex: _selectedIndex,
selectedItemColor: Colors.amber[800],
onTap: _onItemTapped,
),
);
}