flutter - 如何使用 Getx 在 Controller 层内检索 TextEditingController?

标签 flutter dart flutter-getx

我的 View 层中有这个语句

TextEditingController controllerDestino = TextEditingController();
我想恢复这个 controllerDestino,以在我的 Controller 层中的方法中使用。
 statusUberNaoChamado() {
showBoxAdress = true;

changeMainButton("Chamar", Color(0xFF1ebbd8), () {
  callUber("I need pass the controller here");
});

update();}
预先感谢您的关注:)

最佳答案

将 TextEditingController 定义/实例化为您用来控制表单/实现业务逻辑的 GetxController 中的字段。

class DestinoFormControllerX extends GetxController {
  static DestinoFormControllerX get i => Get.find();
  final GlobalKey<FormBuilderState> key = GlobalKey<FormBuilderState>();

  // ↓ place the text editing controller inside your... controller :)
  var controllerDestino = TextEditingController();
并在 GetxController 中任何需要的地方使用 TextEditingController 值
  void resetForm() {
    key.currentState.reset();
    controllerDestino.text = '';
    focusNode.requestFocus();
  }
在您的 View 层中,注入(inject)您的 GetxController,并获取文本编辑 Controller 并访问您需要的任何其他方法/字段。
class DestinoForm extends StatelessWidget {
  final void Function() submitHandler;

  DestinoForm({this.submitHandler});

  @override
  Widget build(BuildContext context) {
    final dcx = Get.put(DestinoFormControllerX());
    // ↑ inject GetxController, be careful to put *inside* build method

    return FormBuilder(
      key: dcx.key,
      child: Column(
        children: [
          FormBuilderTextField(
            name: 'destino',
            controller: dcx.controllerDestino,
            decoration: InputDecoration(
              labelText: 'Destino',
            ),
大多数表单都有重置和提交按钮。在那里您可以调用 GetxController 上的方法....
      actions: [
        FlatButton(
          child: Text('Reset'),
          onPressed: () => DestinoFormControllerX.i.resetForm(),
        ),
边注
如果您正在使用 Get.put() 在您的表单小部件中实例化/注入(inject)您的 GetxController , 这样做 build方法 您的表单小部件。
否则,您可能会收到 TextEditingController电话 setState在不再安装在小部件树中的 StatefulWidget(文本字段)上:
════════ Exception caught by foundation library ════════════════════════════════════════════════════
The following assertion was thrown while dispatching notifications for TextEditingController:
setState() called after dispose(): _FormBuilderTextFieldState#96390(lifecycle state: defunct, not mounted)
好的
class DestinoForm extends StatelessWidget {
  final void Function() submitHandler;

  DestinoForm({this.submitHandler});

  @override
  Widget build(BuildContext context) {
    final dcx = Get.put(DestinoFormControllerX());
    // ↑ inject GetxController, be careful to put *inside* build method

坏的
class DestinoForm extends StatelessWidget {
  final void Function() submitHandler;
  final dcx = Get.put(DestinoFormControllerX());
  // ↑ wrong place, DestinoFormControllerX gets linked to previous route

  DestinoForm({this.submitHandler});

  @override
  Widget build(BuildContext context) {

More detail on Github ,提到 GetX 的正确注入(inject)/使用。

关于flutter - 如何使用 Getx 在 Controller 层内检索 TextEditingController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65912295/

相关文章:

flutter - 如何在 flutter 中圆弧边?

flutter - 如何在 Flutter 的 Dismissible 小部件中禁用向左或向右滑动?

flutter - 如何从 Flutter Hive 中检索 HiveList

json - InternalLinkedHashMap<String, dynamic >' is not a subtype of type ' FutureOr<List<dynamic> 尝试解析 JSON 时

flutter - 如何在 FutureBuilder Future.wait 函数中缓存 Future,以便在每次状态更改时不重建

具有 .obs 和 hive 字段的 flutter 模型

flutter - 即使使用 ScrollPhysics 也无法滚动 ListView

android - 为什么我的 flutter http 网络调用很慢?

firebase - Flutter-Firestore :- Unable to upload image to firestore. 其表示未找到引用对象

Flutter:替换 '.jpg' 之后的特定字符串