flutter - 如何在Flutter中通过提供者使用textEditiing Controller

标签 flutter dart flutter-provider

我正在使用提供程序进行状态管理。我处于表单中存在多种类型的字段的情况。问题在于文本字段
每当我更改“文本”时,它的行为就很奇怪,就像输入的文本以相反的顺序显示一样。

class MyProvider with ChangeNotifier{
  String _name;
  String get name => _name;
  setname(String name) {
    _name = name;
    notifyListeners();
  }
}

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final MyProvider myProvider = Provider.of<MyProvider>(context);

    final TextEditingController _nameController = TextEditingController(
        text: myProvider.name,
    );

    return TextField(
        controller: _nameController,
        onChanged: myProvider.setname,
    );

}

最佳答案

发生这种情况是因为在每个小部件构建中都会创建新的TextEditingController实例,并且有关当前光标位置的信息(TextEditingValue)会丢失。

initState方法中创建一个 Controller ,然后在dispose方法中将其处理。


class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  TextEditingController _nameController;

  @override
  void initState() {
    final MyProvider myProvider = Provider.of<MyProvider>(context, listen: false);

    super.initState();
    _nameController = TextEditingController(text: myProvider.name);
  }

  @override
  void dispose() {
    _nameController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    final MyProvider myProvider = Provider.of<MyProvider>(context);

    return TextField(
        controller: _nameController,
        onChanged: myProvider.setname,
    );
  }
}

关于flutter - 如何在Flutter中通过提供者使用textEditiing Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61863224/

相关文章:

azure - 如何在flutter中使用azure ad获取用户个人资料

android - flutter : How to Debug which widgets re-rendered on state change

flutter - BLoC:如何通过呢?

android - 如何为图标勾勒颜色,但您也可以填充颜色 [Flutter]

flutter - 从dart/flutter中的异步方法生成静态列表

flutter - 如何使用 flutter 文本小部件进行文本换行?

dart - 在Dart中使用int.parse()的问题

android - Flutter - initState() 中的复杂函数会降低导航和性能

flutter - ChangeNotifier挂载等效吗?

flutter - 未处理的异常 : type 'Null' is not a subtype of type 'List<dynamic>' in type cast