什么是控制器抖动?

Tar*_*lla 4 flutter

我有点困惑。大多数小部件没有控制器。很少有人(相机,文本框...)

使用相应控制器的目的是什么?我们为什么用它?

Gün*_*uer 9

控制器可用于自定义小部件的行为。您可以传递控制器的自定义实现。

有时,控制器持有的状态与其关联的小部件具有不同的生命周期,例如https://docs.flutter.io/flutter/widgets/TextEditingController-class.html


Tob*_*gen 7

我喜欢将控制器视为一种以编程方式在您的应用程序中应用更改的方法,这些更改通常来自用户交互。控制器是您可以附加到某些 Widget 的对象,然后使用这些对象来控制该 Widget 的行为。让我们看一些例子:

使用 时ListView,您可以附加ScrollController以编程方式与 ListView 交互。也许您想在有人按下按钮时将 ListView 滚动到某个位置,或者您需要有关列表中当前偏移量的信息。

另一个类似的例子是将 a 附加PageController到 a PageView。也许您的应用程序中发生了一些事情,您希望自动移动到 PageView 中的第一页。使用附加的 PageController,您可以调用myPageController.animateToPage()来执行此操作。

第三个示例是在使用 Google Maps 库时,您可以附加一个GoogleMapController并使用它来执行各种操作,例如将地图移动到新坐标、缩放、旋转、添加标记等。

最后,查看您给出的示例之一,在使用 a 时,TextFormField您可以附加 aTextEditingController以获取有关当前值的信息,或者在按下“重置”按钮时自动清除文本字段。

使用控制器时,推荐的方法是将它们保持在您的状态。下面的代码示例并不完整,但希望能让您了解如何启动、附加和使用控制器,在本例中为 PageController。

class _ControllerDemoState extends State<ControllerDemo> {
  /// Declare the variable to use.
  PageController pageController;

  @override
  void initState() {
    super.initState();
    /// Instantiate the PageController in initState.
    pageController = PageController();
  }

  /// When this method is called, we can use the pageController to automatically
  /// animate the PageView to the first page.
  void onButtonPress() {
    pageController.animateToPage(
      0,
      curve: Curves.easeInOut,
      duration: Duration(milliseconds: 200),
    );
  }

  return PageView(
    /// Attach the controller to the PageView.
    controller: pageController,
    children: [
      ...
    ]
  ),
}
Run Code Online (Sandbox Code Playgroud)

正确使用控制器是控制应用行为的一种非常强大的方式,值得进一步了解。祝你好运!

  • 代码不应该也有一个 dispose() 函数来防止内存泄漏吗? (3认同)
  • @MarufHassan,作为一个刚接触 flutter 的人,出于好奇,上面代码中的内存泄漏在哪里? (2认同)

Rém*_*let 6

在颤动中,控制器是一种控制父窗口小部件的子状态的方法。

控制器的主要卖点是,它们消除了GlobalKey访问小部件状态的需求。反过来,这使得做反图案工作和提高性能变得更加困难。

控制器还允许具有复杂的API,而无需在小部件上进行数千次回调。他们还允许不要 “抬高国家”,因为国家仍由孩子管理。