什么是控制器抖动?

时间:2018-12-07 10:37:06

标签: flutter

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

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

3 个答案:

答案 0 :(得分:4)

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

控制器的主要卖点是,它们无需使用GlobalKey即可访问小部件状态。反过来,这使得做反模式工作和提高性能变得更加困难。

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

答案 1 :(得分:2)

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

有时候,控制器所保持的状态与其所关联的小部件具有不同的生命周期,例如docs

答案 2 :(得分:0)

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

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

另一个类似的示例是将PageController附加到PageView上。也许您的应用程序中发生了一些事情,您希望自动将其移至PageView的第一页。使用附加的PageController,您可以调用myPageController.animateToPage()来做到这一点。

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

最后,要查看您提供的示例之一,在使用TextFormField时,您可以附加TextEditingController以获得有关当前值的信息,或者当“重置”按钮。

使用控制器时,建议的方法是将其保持在您的状态。下面的代码示例尚不完整,但是希望可以使您对如何初始化,附加和使用控制器(在本例中为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: [
      ...
    ]
  ),
}

正确使用Controllers是控制应用程序行为的非常有效的方法,值得进一步了解。祝你好运!