将从共享首选项获取的初始值设置为控制器

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'),
        ),
      ],
    );
  }
}