我在“彩虹”应用中拥有以下<代码>StatefulWidget:
class EditProfilePage extends StatefulWidget {
const EditProfilePage({super.key});
@override
State<EditProfilePage> createState() => _EditProfilePageState();
}
class _EditProfilePageState extends State<EditProfilePage> {
ProfileClient client = ProfileClient();
TextEditingController usernameController = TextEditingController();
Future<ProfileResponse>? futureProfileResponse;
@override
void initState() {
super.initState();
futureProfileResponse = fetch();
}
Future<ProfileResponse> fetch() async {
String key = await Utils.getKey();
return client.get(key);
}
@override
void dispose() {
usernameController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text( Edit profile ),
),
body: SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(
maxHeight: MediaQuery.of(context).size.height),
child: buildPage())));
}
FutureBuilder<ProfileResponse> buildPage() {
return FutureBuilder<ProfileResponse>(
future: futureProfileResponse,
builder: (context, snapshot) {
if (snapshot.hasData) {
ProfileResponse profileResponse = snapshot.data!;
if (profileResponse.code == 200) {
usernameController.text = profileResponse.profile.username;
return Padding(
padding: const EdgeInsets.all(24),
child: Column(
children: [
TextField(
controller: usernameController,
decoration: const InputDecoration(
labelText: Username ,
),
),
],
),
);
}
}
return const Center(child: CircularProgressIndicator());
});
}
}
我有意理解为什么在用户名称<代码>Text Field内写字,然后将背纽扣,<代码>Text< Field/code>的内容又回到原来的价值。
This is a demo to make better understand my problem: Demo GIF
确切地说,这个问题在我用<代码>Constraining Box widget对
”方法进行总结后即开始出现。 我之所以这样做,是因为在我的原始网页上,我有更多的<代码>Text Field widgets,我需要他们在打开钥匙板时“搬上”。 为了简单起见,我删除了与这一具体问题无关的部分法典。