TextEditingController returns me null ,不考虑我在文本字段中键入的输入
TextEditingController returns me null , not considered the input I typed inside text field
questionController.text 总是 returns 我是空值。而不是我在 textformfield 中插入的任何内容。
class _AddQuestionState extends State<AddQuestion> {
TextEditingController questionController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextFormField(
controller: questionController,
decoration: InputDecoration(
hintText: 'description',
hintStyle: TextStyle(
color: Colors.grey
),
border: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20.0)),
),
),),
AddUser(questionController.text),]
}}
当我调用此 class 并打印输出时,它 returns 我为空。
使用 AddUser(questionController.text);
我使用 print(question) 打印输出,但它 returns 我是空字符串。
class AddUser extends StatelessWidget {
final String question;
AddUser(this.question);
@override
Widget build(BuildContext context) {
// Create a CollectionReference called users that references the firestore collection
CollectionReference users = FirebaseFirestore.instance.collection('Questions').doc("cse").collection("CSE");
Future<void> addUser() {
print(question);
// Call the user's CollectionReference to add a new user
return users
.add({
'question': question, // John Doe
})
.then((value) => print("User Added"))
.catchError((error) => print("Failed to add user: $error"));
}
当它第一次构建屏幕时,您的 AddQuestion
小部件 questionController 被设置为空字符串,该字符串被传递给 AddUser() 小部件。
If [controller] is null, then a [TextEditingController] will be constructed automatically and its text will be initialized to [initialValue] or the empty string.
当您更改 questionController 中的值时,您的 AddUser() 小部件不知道更改。通过添加 setState 它将重建整个 AddQuestion 小部件并将新值传递给您的 AddUser 小部件。
试试这个例子来理解一下
class MyWidget extends StatefulWidget {
const MyWidget({Key? key}) : super(key: key);
@override
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
TextEditingController questionController = TextEditingController();
String? questionValue;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
children: [
TextFormField(
controller: questionController,
decoration: InputDecoration(
hintText: 'description',
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20.0)),
),
),
),
SizedBox(height: 20),
TextButton(
onPressed: () {
print("questionController: ${questionController.text}");
setState(() {
questionValue = questionController.text;
});
},
child: Text("SETSTATE BUTTON"),
),
SizedBox(height: 20),
Text("questionValue: $questionValue"),
SizedBox(height: 20),
AddUser(questionController.text),
],
),
),
);
}
}
class AddUser extends StatelessWidget {
final String question;
AddUser(this.question);
@override
Widget build(BuildContext context) {
return Text("question: $question");
}
}
questionController.text 总是 returns 我是空值。而不是我在 textformfield 中插入的任何内容。
class _AddQuestionState extends State<AddQuestion> {
TextEditingController questionController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextFormField(
controller: questionController,
decoration: InputDecoration(
hintText: 'description',
hintStyle: TextStyle(
color: Colors.grey
),
border: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20.0)),
),
),),
AddUser(questionController.text),]
}}
当我调用此 class 并打印输出时,它 returns 我为空。
使用 AddUser(questionController.text);
我使用 print(question) 打印输出,但它 returns 我是空字符串。
class AddUser extends StatelessWidget {
final String question;
AddUser(this.question);
@override
Widget build(BuildContext context) {
// Create a CollectionReference called users that references the firestore collection
CollectionReference users = FirebaseFirestore.instance.collection('Questions').doc("cse").collection("CSE");
Future<void> addUser() {
print(question);
// Call the user's CollectionReference to add a new user
return users
.add({
'question': question, // John Doe
})
.then((value) => print("User Added"))
.catchError((error) => print("Failed to add user: $error"));
}
当它第一次构建屏幕时,您的 AddQuestion
小部件 questionController 被设置为空字符串,该字符串被传递给 AddUser() 小部件。
If [controller] is null, then a [TextEditingController] will be constructed automatically and its text will be initialized to [initialValue] or the empty string.
当您更改 questionController 中的值时,您的 AddUser() 小部件不知道更改。通过添加 setState 它将重建整个 AddQuestion 小部件并将新值传递给您的 AddUser 小部件。
试试这个例子来理解一下
class MyWidget extends StatefulWidget {
const MyWidget({Key? key}) : super(key: key);
@override
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
TextEditingController questionController = TextEditingController();
String? questionValue;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
children: [
TextFormField(
controller: questionController,
decoration: InputDecoration(
hintText: 'description',
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20.0)),
),
),
),
SizedBox(height: 20),
TextButton(
onPressed: () {
print("questionController: ${questionController.text}");
setState(() {
questionValue = questionController.text;
});
},
child: Text("SETSTATE BUTTON"),
),
SizedBox(height: 20),
Text("questionValue: $questionValue"),
SizedBox(height: 20),
AddUser(questionController.text),
],
),
),
);
}
}
class AddUser extends StatelessWidget {
final String question;
AddUser(this.question);
@override
Widget build(BuildContext context) {
return Text("question: $question");
}
}