将从共享首选项获取的初始值设置为控制器
Setting initial value gotten from Shared Preferences to controller
我想为表单域设置一个初始值。我在 this answer 中读到可以这样做
TextEditingController _controller = TextEditingController(text: 'initial value');
但我想从共享首选项中获取初始值,这是异步的。
我该怎么做?
我尝试在初始状态下设置控制器值,但这不起作用
你有两种方式:
1 ) 在导航或构造小部件之前从首选项获取文本。这样就可以得到final变量了。
2 ) 在 initState
之后加载文本
class Foo extends StatefulWidget {
@override
_FooState createState() {
return _FooState();
}
}
class _FooState extends State<Foo> {
TextEditingController _controller;
//For check text loaded. bool textLoaded;
bool textLoaded;
String text;
@override
void initState() {
textLoaded = false;
super.initState();
}
Future<void> setText() async {
setState(() {
text = "GET TEXT FROM PREF";
_controller = TextEditingController(text: text);
textLoaded = true;
});
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
textLoaded
? TextField(
controller: _controller,
)
: const CircularProgressIndicator(),
RaisedButton(
onPressed: () {
_controller.clear();
},
child: const Text('CLEAR'),
),
],
);
}
}
我想为表单域设置一个初始值。我在 this answer 中读到可以这样做
TextEditingController _controller = TextEditingController(text: 'initial value');
但我想从共享首选项中获取初始值,这是异步的。
我该怎么做?
我尝试在初始状态下设置控制器值,但这不起作用
你有两种方式:
1 ) 在导航或构造小部件之前从首选项获取文本。这样就可以得到final变量了。
2 ) 在 initState
之后加载文本class Foo extends StatefulWidget {
@override
_FooState createState() {
return _FooState();
}
}
class _FooState extends State<Foo> {
TextEditingController _controller;
//For check text loaded. bool textLoaded;
bool textLoaded;
String text;
@override
void initState() {
textLoaded = false;
super.initState();
}
Future<void> setText() async {
setState(() {
text = "GET TEXT FROM PREF";
_controller = TextEditingController(text: text);
textLoaded = true;
});
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
textLoaded
? TextField(
controller: _controller,
)
: const CircularProgressIndicator(),
RaisedButton(
onPressed: () {
_controller.clear();
},
child: const Text('CLEAR'),
),
],
);
}
}