Flutter 如何从颤振中的initState()块中获取变量的值?
我使用widget.storage.readCounter()函数获得了initState()中存储在Documents目录中的值。我想获取该值并将其作为初始值存储在TextEditingController中。但是我无法从initState()块中获取值。如何从initState()块中获取值?这是我的全部代码:Flutter 如何从颤振中的initState()块中获取变量的值?,flutter,dart,Flutter,Dart,我使用widget.storage.readCounter()函数获得了initState()中存储在Documents目录中的值。我想获取该值并将其作为初始值存储在TextEditingController中。但是我无法从initState()块中获取值。如何从initState()块中获取值?这是我的全部代码: class _UserForm extends State<UserForm> { TextEditingController uid; static St
class _UserForm extends State<UserForm> {
TextEditingController uid;
static String userid;
@override
void initState() {
super.initState();
widget.storage.readCounter().then((int value) {
userid = value.toString();
/*setState(() => {
userid = value.toString(),
});*/
});
uid = TextEditingController(text: userid);
}
final _formKey = GlobalKey<FormState>();
//TextEditingController uid = TextEditingController(text: userid);
final TextEditingController myController = TextEditingController();
final TextEditingController myController2 = TextEditingController();
final TextEditingController myController3 = TextEditingController();
final TextEditingController myController4 = TextEditingController();
final TextEditingController myController5 = TextEditingController();
final TextEditingController myController6 = TextEditingController();
@override
void dispose() {
// Clean up the controller when the widget is disposed.
uid.dispose();
myController.dispose();
myController2.dispose();
myController3.dispose();
myController4.dispose();
myController5.dispose();
myController6.dispose();
super.dispose();
}
Future<SubmitData> _futureSubmitData;
@override
Widget build(BuildContext context) {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
content: Text('uid:' + uid.text),
);
},
);
return Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Column(
children: <Widget>[
/*Visibility(
visible: false,
child: TextFormField(
controller: uid,
),
),*/
TextFormField(
controller: myController,
keyboardType: TextInputType.numberWithOptions(decimal: true),
decoration:
InputDecoration(hintText: 'Sale amount as per party'),
validator: (value) {
if (value.isEmpty) {
return 'Please enter amount.';
}
return null;
},
),
TextFormField(
controller: myController2,
keyboardType: TextInputType.number,
decoration: InputDecoration(hintText: 'Item quantity'),
validator: (value) {
if (value.isEmpty) {
return 'Please enter quantity.';
}
return null;
},
),
TextFormField(
controller: myController3,
keyboardType: TextInputType.numberWithOptions(decimal: true),
decoration: InputDecoration(hintText: 'Rate'),
validator: (value) {
if (value.isEmpty) {
return 'Please enter rate.';
}
return null;
},
),
TextFormField(
controller: myController4,
decoration: InputDecoration(hintText: 'Broker name'),
validator: (value) {
if (value.isEmpty) {
return 'Please enter broker name.';
}
return null;
},
),
TextFormField(
controller: myController5,
decoration: InputDecoration(hintText: 'Party name'),
validator: (value) {
if (value.isEmpty) {
return 'Please enter party name.';
}
return null;
},
),
TextFormField(
controller: myController6,
keyboardType: TextInputType.numberWithOptions(decimal: true),
decoration: InputDecoration(
hintText: 'Amount receivable as per party'),
validator: (value) {
if (value.isEmpty) {
return 'Please enter amount.';
}
return null;
},
),
Container(
margin: EdgeInsets.only(top: 10),
child: RaisedButton(
color: Colors.purple[400],
padding: EdgeInsets.only(
left: 110, top: 10, right: 110, bottom: 10),
textColor: Colors.white,
onPressed: () {
if (_formKey.currentState.validate()) {
setState(() {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
content: Text('uid:' + uid.text),
);
},
);
/*_futureSubmitData = userData(
uid.text,
myController.text,
myController2.text,
myController3.text,
myController4.text,
myController5.text,
myController6.text);*/
});
Scaffold.of(context).removeCurrentSnackBar();
}
},
child: Text('Submit', style: TextStyle(fontSize: 18.0)),
),
),
],
),
(_futureSubmitData != null)
? FutureBuilder<SubmitData>(
future: _futureSubmitData,
builder: (context, snapshot) {
if (snapshot.hasData) {
if (snapshot.data.type == '1') {
/*showDialog(
context: context,
builder: (context) {
return AlertDialog(
content: Text('Data submitted successfully.'),
);
},
);*/
Scaffold.of(context)
..removeCurrentSnackBar()
..showSnackBar(SnackBar(
content: Text('Data submitted successfully.',
style:
TextStyle(color: Colors.green[100]))));
return Text('');
} else {
Scaffold.of(context)
..removeCurrentSnackBar()
..showSnackBar(SnackBar(
content: Text(
'Data not submitted. You have already submitted for today.',
style: TextStyle(color: Colors.red[100]))));
return Text('');
}
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
return Center(child: CircularProgressIndicator());
},
)
: Text(''),
],
));
}
}
class\u用户表单扩展状态{
文本编辑控制器uid;
静态字符串用户标识;
@凌驾
void initState(){
super.initState();
widget.storage.readCounter().then((int值){
userid=value.toString();
/*设置状态(()=>{
userid=value.toString(),
});*/
});
uid=文本编辑控制器(文本:userid);
}
final _formKey=GlobalKey();
//TextEditingController uid=TextEditingController(文本:userid);
final TextEditingController myController=TextEditingController();
final TextEditingController myController2=TextEditingController();
final TextEditingController myController3=TextEditingController();
final TextEditingController myController4=TextEditingController();
final TextEditingController myController5=TextEditingController();
final TextEditingController myController6=TextEditingController();
@凌驾
无效处置(){
//处置小部件时清理控制器。
uid.dispose();
myController.dispose();
myController2.dispose();
myController3.dispose();
myController4.dispose();
myController5.dispose();
myController6.dispose();
super.dispose();
}
未来提交数据;
@凌驾
小部件构建(构建上下文){
显示对话框(
上下文:上下文,
生成器:(上下文){
返回警报对话框(
内容:Text('uid:'+uid.Text),
);
},
);
报税表(
键:_formKey,
子:列(
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
纵队(
儿童:[
/*可见度(
可见:假,
子项:TextFormField(
控制器:uid,
),
),*/
TextFormField(
控制器:myController,
键盘类型:TextInputType.numberWithOptions(十进制:true),
装饰:
输入装饰(hintText:“按协议方的销售金额”),
验证器:(值){
if(value.isEmpty){
返回“请输入金额”;
}
返回null;
},
),
TextFormField(
控制器:myController2,
键盘类型:TextInputType.number,
装饰:输入装饰(hintText:“项目数量”),
验证器:(值){
if(value.isEmpty){
返回“请输入数量”;
}
返回null;
},
),
TextFormField(
控制器:myController3,
键盘类型:TextInputType.numberWithOptions(十进制:true),
装饰:输入装饰(hintText:“费率”),
验证器:(值){
if(value.isEmpty){
返回“请输入费率”;
}
返回null;
},
),
TextFormField(
控制器:myController4,
装饰:输入装饰(hintText:“经纪人名称”),
验证器:(值){
if(value.isEmpty){
返回“请输入经纪人名称”;
}
返回null;
},
),
TextFormField(
控制器:myController5,
装饰:输入装饰(hintText:“当事人名称”),
验证器:(值){
if(value.isEmpty){
返回“请输入参与方名称”;
}
返回null;
},
),
TextFormField(
控制器:myController6,
键盘类型:TextInputType.numberWithOptions(十进制:true),
装饰:输入装饰(
hintText:“各方应收金额”),
验证器:(值){
if(value.isEmpty){
返回“请输入金额”;
}
返回null;
},
),
容器(
页边空白:仅限边集(前10页),
孩子:升起按钮(
颜色:颜色。紫色[400],
填充:仅限边缘设置(
左:110,顶部:10,右:110,底部:10),
textColor:Colors.white,
已按下:(){
if(_formKey.currentState.validate()){
设置状态(){
显示对话框(
上下文:上下文,
生成器:(上下文){
返回警报对话框(
内容:Text('uid:'+uid.Text),
);
},
);
/*_futureSubmitData=用户数据(
uid.text,
myController.text,
myController2.text,
myController3.text,
myController4.text,
@override
void initState() {
super.initState();
widget.storage.readCounter().then((int value) {
setState( () => {
userid = value.toString();
});
});
}
TextEditingController uid;
String userid;
@override
void initState() {
super.initState();
widget.storage.readCounter().then((int value) {
userid = value.toString();
uid = TextEditingController(text: userid);
});
print(userid); // This is to make sure you're actually getting a value back. Check your console.
}