我有一个对话框小部件,那里有一个按钮和文本字段。按下按钮后,会出现一个 setState()
和变量发生变化的函数。我没有立即在屏幕上的文本字段中看到这些更改,我需要再次关闭并打开对话框。为什么以及如何才能实现它(因此整个类/父级将被重建?(这是关于“获取位置”按钮和下一个字段)
class MyDialog extends StatefulWidget {
MyDialogState createState() => MyDialogState();
}
class MyDialogState extends State<MyDialog> {
String userLocation;
double sleepLength;
@override
Widget build(BuildContext context) {
return FloatingActionButton(
onPressed: () {
showDialog(
context: context,
builder: (context) {
return Dialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30)
),
elevation: 20,
child: ListView(
children: <Widget>[
FlatButton(
child: Text("Get location $userLocation"),
onPressed: () {
final Geolocator geolocator = Geolocator();
geolocator
.getCurrentPosition()
.then((Position position) async {
List<Placemark> place = await geolocator
.placemarkFromCoordinates(position.latitude, position.longitude);
Placemark p = place[0];
setState(() {
//userLocation = "${p.locality}, ${p.country}";
userLocation = Random().nextInt(10).toString();
print("A");
});
}).catchError((e) {
print("------------");
print(e);
print("------------");
});
},
),
Padding(
padding: EdgeInsets.all(10),
child: Center(child: Text("$userLocation"))
),
Divider(),
FlatButton(
child: Text("Set sleep length"),
onPressed: () {
//TODO
},
),
Padding(
padding: EdgeInsets.all(10),
child: Center(child: Text("$sleepLength"))
),
Divider(),
],
)
);
}
);
},
child: Icon(
Icons.settings
),
backgroundColor: Colors.black12,
);
}
}
最佳答案
就我而言,StatefulBuilder
有效。
StatefulBuilder
最适合您拥有中型/大型部件树并且需要为该树的一小部分引入状态的情况。
用StatefulBuilder
包裹你的 child 希望它有帮助..
关于android - Flutter - 在一个 Widget 中调用 setState() 后更新同级 Widget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59293125/