Flutter 当使用控制器作为TextEditingController(文本:“输入值”)时,如何使TextField小部件可编辑?
我一直试图使初始文本通过Flutter 当使用控制器作为TextEditingController(文本:“输入值”)时,如何使TextField小部件可编辑?,flutter,dart,datepicker,textfield,provider,Flutter,Dart,Datepicker,Textfield,Provider,我一直试图使初始文本通过controller:TextEditingController(text:“Enter DOB”)传递到TextField小部件中的flatter可编辑,但我找不到任何解决方案(目前) 我想在文本字段内的showDatePicker方法中选择日期后,使selectedDate(或初始文本)可编辑 所以我需要一些帮助。有办法吗 下面是我的代码。我想使控制器中的文本可编辑 TextField( // This controller wi
controller:TextEditingController(text:“Enter DOB”)
传递到TextField
小部件中的flatter
可编辑,但我找不到任何解决方案(目前)
我想在文本字段
内的showDatePicker
方法中选择日期后,使selectedDate
(或初始文本)可编辑
所以我需要一些帮助。有办法吗
下面是我的代码。我想使控制器中的文本可编辑
TextField(
// This controller will show the initial value as 'Enter DOB'
// and when the Date is selected from the showDatePicker it will
// get updated.
controller: TextEditingController(
// the text: property will check if the current value is null or not.
// if null it will show the "Enter your DOB" text, else the selected## Heading ##Date
// will get updated.
text: validator.selectedDate == null
? "Enter your DOB"
: "${validator.selectedDate}".split(' ')[0],
),
decoration: InputDecoration(
suffixIcon: IconButton(
icon: Icon(Icons.calendar_today_rounded),
onPressed: () {
validator.selectDate(context);
},
),
labelText: "yyyy-mm-dd",
),
onChanged: (String value) {
validator.changeDOB(value);
},
);
在哪里,
是类型为selectedDate
的变量,其初始值为DateTime
null
是带有selectDate(BuildContext上下文)
方法的方法showDatePicker(BuildContext上下文)
是一种将changeDOB(字符串值)
值更新为selectedDate
的方法TextField
注意:我使用
提供程序
作为状态管理方法。我认为您必须将文本编辑控制器
作为局部变量,然后使用设置状态()
是这样的:
import 'package:flutter/material.dart';
class DateTimeExample extends StatefulWidget {
@override
_DateTimeExampleState createState() => _DateTimeExampleState();
}
class _DateTimeExampleState extends State<DateTimeExample> {
TextEditingController _dobController; // Local variable to store TextFiled text
@override
void initState() {
// Initialize TextEditingController object with default text.
_dobController = TextEditingController(text: "Enter your DOB: ");
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body:Container(
child: Center(
child: TextField(
controller: _dobController,
decoration: InputDecoration(
suffixIcon: IconButton(
icon: Icon(Icons.calendar_today_rounded),
onPressed: () {
String selectedDate= validator.selectDate(context);
setState(() {
_dobController.text = selectedDate; // Change the text and refersh UI
});
},
),
labelText: "YYYY-MM-DD",
),
onChanged: (value) {
validator.changeDOB(value);
},
),
),
),
);
}
}
导入“包装:颤振/材料.省道”;
类DateTimeExample扩展StatefulWidget{
@凌驾
_DateTimeExampleState createState()=>\u DateTimeExampleState();
}
类_DateTimeExampleState扩展状态{
TextEditingController _dobController;//用于存储TextField文本的局部变量
@凌驾
void initState(){
//使用默认文本初始化TextEditingController对象。
_dobController=TextEditingController(文本:“输入您的DOB:”);
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
儿童:中心(
孩子:TextField(
控制器:\ u控制器,
装饰:输入装饰(
后缀:图标按钮(
图标:图标(图标。日历\u今天\u四舍五入),
已按下:(){
字符串selectedDate=validator.selectDate(上下文);
设置状态(){
_dobController.text=selectedDate;//更改文本并引用UI
});
},
),
标签文本:“YYYY-MM-DD”,
),
一旦更改:(值){
验证程序.changeDOB(值);
},
),
),
),
);
}
}
注意:您的验证器。selecteDate(Context)
函数必须返回字符串
,以便刷新您的状态。已解决
我已经解决了我的问题。上面的答案给了我一个解决问题的想法
- 我刚刚声明了一个
TextEditingController()…text=“Enter DOB”
变量,并将其传递给showDatePicker(BuildContext)
方法
- 从那里,我将
selectedDate.toString().split(“”)[0]
的值输入控制器.text
- 也可以调用
changeDOB(controller.text)
,并将controller.text
作为参数
- 以下是我的代码:
非常感谢你。。。你的回答给了我一个解决问题的办法。谢谢你,请接受我的回答,以提高我的声誉
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
class MyClass with ChangeNotifier {
// passing the initial text to the textField through controller.
var controller = TextEditingController()..text = "Enter DOB";
DateTime selectedDate; // initial value = null;
selectDate(BuildContext context) async {
var picked = await showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(1800),
lastDate: DateTime.now(),
);
if (picked != null && picked != selectedDate) {
selectedDate = picked;
// passing the selectedDate to the controller.
controller.text = selectedDate.toString().split(' ')[0];
changeDOB(controller.text);
}
notifyListeners();
}
void changeDOB(String value){
//TODO: Your validation logic here.
}
}