我正在通过学习Flutter摸索自己的方式,到目前为止,我已经很成功地完成了我想做的事情,但是这个问题已经困扰了。
我有一个项目的ListView,我希望能够让用户长按一个,然后从一对命令中进行选择。我找不到真正喜欢的弹出菜单解决方案,所以我想,为什么不把两个RaisedButtons放在SubTitle中,因为它需要一个Widget。
我已经在其中找到了所需的按钮,但是我希望在页面首次加载时隐藏字幕,然后在用户长按时使其可见。
下面的当前代码:
new ListTile(
title: new Text(
_players[index].name,
style: regularTextStyle,
),
subtitle: new Visibility(
child: new Row(children: <Widget>[
new RaisedButton.icon(
icon: new Icon(Icons.delete),
label: new Text(Constants.DeletePlayer),
onPressed: null),
new Padding(padding: EdgeInsets.fromLTRB(10, 0, 0, 0)),
new RaisedButton.icon(
icon: new Icon(Icons.edit),
label: new Text(Constants.EditPlayer),
onPressed: null)
]),
visible: false,
),
trailing: new Icon(
_players[index].selected
? Icons.check_box
: Icons.check_box_outline_blank,
color: _players[index].selected ? Colors.blue : null,
),
onTap: () {
setState(() {
_players[index].toggle();
});
},
onLongPress: () {
setState(() {
});
},
如何从onLongPress处理程序中访问ListTile的Subtitle属性?
任何帮助将不胜感激!
答案 0 :(得分:1)
您可以只使用StatefulWidget
,然后长按ListTile
,然后使用setState
重建小部件。
检查此示例:
class MyApp extends StatefulWidget {
@override
MyAppState createState() => MyAppState();
}
class MyAppState extends State<MyApp> {
bool isVisible = false;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: ListTile(
title: Text("Title"),
onLongPress: () {
setState(() {
isVisible = !isVisible;
});
},
subtitle: isVisible ? Text("Subtitle sample") : null,
)));
}
}