我在学扑翼,我很困惑。
我想做一个超级简单的文本表单和一个按钮。用户在表单中输入文本,点击按钮,文本就会打印到控制台上。这能有多难呢?:-)
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
void main() => runApp(const Kabbalah());
class Kabbalah extends StatelessWidget {
const Kabbalah({Key? key}) : super(key: key);
static const String _title = 'Kabbalistic Numerology';
@override
Widget build(BuildContext context) {
return MaterialApp(
title: _title,
home: Scaffold(
appBar: AppBar(
title: const Text(_title),
),
body: const Center(
child: const FullNameField(),
)
),
);
}
}
class FullNameField extends StatefulWidget {
const FullNameField({Key? key}) : super(key: key);
@override
State<StatefulWidget> createState() {
return _FullNameState();
}
}
class _FullNameState extends State<FullNameField> {
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Container(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16),
child: TextFormField(
decoration: const InputDecoration(
border: UnderlineInputBorder(),
labelText: 'Enter your full name (First Middle Last)',
),
onSaved: (String? fullName) {
debugPrint(fullName);
// This optional block of code can be used to run
// code when the user saves the form.
},
),
),
ElevatedButton(
style: ElevatedButton.styleFrom(textStyle: const TextStyle(fontSize: 20)),
onPressed: () {
debugPrint('Clicked!');
setState(() {
_FullNameState.save(); // <-- problem is here
});
},
child: const Text('Get Fortune'),
),
],
);
}
}
我的代码生成了一个漂亮的小窗体和一个可爱的按钮。
当输入名称并单击按钮时,我在控制台中看到Clicked!
。
我的计划是在用户单击按钮后保存表单状态,然后onSaved()
将执行并将输入的文本打印到控制台。
问题似乎出在用户单击按钮后保存表单状态。_fullNameState.save();
不起作用,因为_fullNameState
没有.save
成员。我们不是从扩展StatefulWidget
得到.save
吗?
先谢谢你的帮助。
3条答案
按热度按时间fdbelqdn1#
我已经完成了你的工作。我附上了我的代码片段下面。请检查和尝试自己。希望它会有所帮助。我还附上截图下面。
main.dart代码段--〉〉
文本表单字段编码--〉
放置文本值之前--〉〉x1c 0d1x
放入文本值后--〉〉
72qzrwbm2#
为什么不直接使用TextEditingController呢?
只需像这样初始化一个:
然后在textform字段中使用它:
单击该按钮时,执行:
avwztpqn3#
现在,我们在这里使用TextEditingController,因为它赋予父小部件对其子状态的控制权。
现在,.text包含了在TextField中输入的值。因此,当按钮被按下时,该值被打印,表单被清除。