【问题标题】:How to listen to a FocusNode with GetX in Flutter如何在 Flutter 中使用 GetX 监听 FocusNode
【发布时间】:2021-08-25 15:37:35
【问题描述】:

我刚刚发现了GetX,我喜欢它!有没有一种使用 GetX 而不是使用 StatefulWidget 来监听 FocusNode 的简洁方法?

class CustomTextField extends StatefulWidget {
  const CustomTextField({Key? key}) : super(key: key);

  @override
  _CustomTextFieldState createState() => _CustomTextFieldState();
}

class _CustomTextFieldState extends State<CustomTextField> {
  final FocusNode _focusNode = FocusNode();

  @override
  void initState() {
    _focusNode.addListener(() => setState(() {}));
    super.initState();
  }

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

  @override
  Widget build(BuildContext context) {
    return CustomContainer(
      isFocused: _focusNode.hasFocus,
      child: TextField(
        focusNode: _focusNode,
      ),
    );
  }
}

【问题讨论】:

    标签: flutter dart flutter-getx


    【解决方案1】:

    您可以创建StatelessWidget 或GetView&lt;MyController&gt; 并在控制器中添加焦点节点

    class MyController extends GetXController {
       final FocusNode focusNode = FocusNode();
       
       @override
       void onInit() {
            focusNode.addListener((){ ...do some stuff }));
            super.onInit();
       }
    
       @override
       onClose() {
         focusNode.dispose();
         super.onClose();
       }
    }
    

    然后你可以在你的小部件中使用它

    ...     
      @override
      Widget build(BuildContext context) {
        return CustomContainer(
          isFocused: controller.focusNode.hasFocus,
          child: TextField(
            focusNode: controller.focusNode.focusNode,
          ),
        );
      }
    

    【讨论】:

      猜你喜欢
      • 2021-01-07
      • 2021-04-21
      • 2019-01-25
      • 2021-11-11
      • 2020-06-24
      • 2020-11-22
      • 1970-01-01
      • 2021-07-06
      • 2021-03-06
      相关资源
      最近更新 更多