我正试图在Ffltter中更新一个void
方法中的变量值,try 使用StatefulBuilder
,但该值没有改变.
以下是我的代码:
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final user = FirebaseAuth.instance.currentUser;
String type = "";
void checkUser() async {
await FirebaseFirestore.instance
.collection('users')
.doc(user!.uid)
.get()
.then(
(DocumentSnapshot documentSnapshot) {
if (documentSnapshot.exists) {
var data = documentSnapshot.data();
var res = data as Map<String, dynamic>;
if (res["type"] == "Salarié") {
print('Salarié');
} else if (res["type"] == "Auto entrepreneur") {
print('Auto entrrepreneu');
} else {
showDialog<String>(
context: context,
builder: (_) => StatefulBuilder(
builder: (modalContext, modalSetState) => AlertDialog(
title: const Text('Choissisez votre type'),
content: const Text('Choisir votre type de user'),
actions: <Widget>[
TextButton(
onPressed: () {
setState(() {
type = "Salarié";
});
Navigator.pop(context, 'Cancel');
},
child: const Text('Salarié'),
),
TextButton(
onPressed: () {
setState(() {
type = "Auto entrepreneur";
});
Navigator.pop(context, 'OK');
},
child: const Text('Auto-entrepreneur'),
),
],
),
));
return FirebaseFirestore.instance
.collection("users")
.doc(user!.uid)
.update({
"type": type,
});
}
} else {}
},
);
}
@override
void initState() {
super.initState();
checkUser();
}
@override
Widget build(BuildContext context) {
return Scaffold(...);
不过,所有值都在StatefulWidget
以内,我不确定这样做是否正确,因为值不会改变!我很感谢你的帮助.
编辑:我在initState()
内调用此方法