【发布时间】:2021-07-19 01:22:38
【问题描述】:
我想根据 'flag' 变量中存储的值禁用图标按钮。
这是我的代码:
class PlaceTile extends StatelessWidget {
final Place place;
PlaceTile({ this.place });
getUserById(String id) {
DatabaseService().placesCollection.document(id).get().then((DocumentSnapshot doc) {
print(doc.data);
});
}
checkUserStatus() async {
String flag='inactive';
final FirebaseAuth auth = FirebaseAuth.instance;
final FirebaseUser user = await auth.currentUser();
String uid = user.uid;
UserDatabaseService().userCollection.getDocuments().then((QuerySnapshot snapshot) {
snapshot.documents.forEach((DocumentSnapshot doc) {
if(doc.documentID == uid)
{
if(doc.data['status']=='true')
{
flag = 'active';
}
}
});
});
return flag;
}
String value;
@override
Widget build(BuildContext context) {
void showQueueDetailsPanel() {
showModalBottomSheet(context: context, builder: (context) {
return Container(
padding: EdgeInsets.symmetric(vertical: 20.0, horizontal: 60.0),
child: QueueDetails(value: place.name),
);
});
}
return Padding(
padding: EdgeInsets.only(top: 8.0),
child: Card(
margin: EdgeInsets.fromLTRB(20.0, 6.0, 20.0, 0.0),
child: ListTile(
isThreeLine: true,
leading: CircleAvatar(
radius: 25.0,
backgroundColor: Colors.white,
),
title: Text(place.name),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
//Text("People "+place.totalPeople.toString()),
Text(""),
Text("Token "+place.tokenAvailable.toString()),
],
),
trailing: FlatButton.icon(
icon: Icon(Icons.add_box_rounded),
label: Text('Join'),
onPressed: checkUserStatus()=='inactive' ?
() async => showQueueDetailsPanel() : null,
),
),
)
);
}
}
但是,即使onPressed 条件为“非活动”,所有“加入”按钮都被禁用。我尝试通过单独运行这两个函数来调试代码,看起来还不错。但是,每当我使用onPressed 条件来检查flag 变量时,所有按钮似乎都被禁用了,即使条件显然是正确的。
编辑 1
class PlaceTile extends StatelessWidget {
final Place place;
PlaceTile({ this.place });
getUserById(String id) {
DatabaseService().placesCollection.document(id).get().then((DocumentSnapshot doc) {
print(doc.data);
});
}
String checkUserStatus() {
String flag='inactive';
final FirebaseAuth auth = FirebaseAuth.instance;
//final FirebaseUser user = await auth.currentUser();
auth.currentUser().then((user) {
String uid = user.uid;
UserDatabaseService().userCollection.getDocuments().then((QuerySnapshot snapshot) {
snapshot.documents.forEach((DocumentSnapshot doc) {
if(doc.documentID == uid)
{
if(doc.data['status']=='true')
{
flag = 'active';
}
}
});
});
});
return flag;
}
String value;
@override
Widget build(BuildContext context) {
void showQueueDetailsPanel() {
showModalBottomSheet(context: context, builder: (context) {
return Container(
padding: EdgeInsets.symmetric(vertical: 20.0, horizontal: 60.0),
child: QueueDetails(value: place.name),
);
});
}
return Padding(
padding: EdgeInsets.only(top: 8.0),
child: Card(
margin: EdgeInsets.fromLTRB(20.0, 6.0, 20.0, 0.0),
child: ListTile(
isThreeLine: true,
leading: CircleAvatar(
radius: 25.0,
backgroundColor: Colors.white,
),
title: Text(place.name),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
//Text("People "+place.totalPeople.toString()),
Text(""),
Text("Token "+place.tokenAvailable.toString()),
],
),
trailing: FlatButton.icon(
icon: Icon(Icons.add_box_rounded),
label: Text('Join'),
onPressed: checkUserStatus()=='inactive' ?
() async => showQueueDetailsPanel() : null,
),
),
)
);
}
}
【问题讨论】:
标签: flutter google-cloud-firestore