Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振中的控制器是什么?_Flutter - Fatal编程技术网

Flutter 颤振中的控制器是什么?

Flutter 颤振中的控制器是什么?,flutter,Flutter,我有点困惑。大多数小部件都没有控制器。很少有人有(摄像头、文本字段…) 使用相应控制器的目的是什么?我们为什么要使用它?控制器可用于自定义小部件的行为。 您可以传递控制器的自定义实现 class _ControllerDemoState extends State<ControllerDemo> { /// Declare the variable to use. PageController pageController; @override void initS

我有点困惑。大多数小部件都没有控制器。很少有人有(摄像头、文本字段…)


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

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

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: [
      ...
    ]
  ),
}

有时,控制器持有的状态与它关联的小部件具有不同的生命周期,比如在flift中,控制器是一种让父小部件控制其子状态的方法

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

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

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

使用
列表视图
时,可以附加
滚动控制器
,以编程方式与列表视图交互。当有人按下按钮时,可能需要将ListView滚动到某个位置,或者需要列表中当前偏移量的信息

另一个类似的例子是将
页面控制器
附加到
页面视图
。也许你的应用程序中发生了一些事情,你想自动移动到页面视图中的第一页。使用附加的PageController,您可以调用
myPageController.animateToPage()

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

最后,看看您给出的一个示例,在使用
TextFormField
时,您可以附加
TextEditingController
以获取有关当前值的信息,或者在按下“重置”按钮时自动清除textfield

使用控制器时,建议将其保持在您的状态。下面的代码示例并不完整,但希望能让您了解如何启动、连接和使用控制器,在本例中是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: [
      ...
    ]
  ),
}
class\u ControllerDemoState扩展状态{
///声明要使用的变量。
页面控制器;
@凌驾
void initState(){
super.initState();
///在initState中实例化PageController。
pageController=pageController();
}
///调用此方法时,我们可以使用pageController自动
///将页面视图设置为第一页的动画。
void onButtonPress(){
pageController.animateToPage(
0,
曲线:Curves.easeInOut,
持续时间:持续时间(毫秒:200),
);
}
返回页面视图(
///将控制器连接到页面视图。
控制器:页面控制器,
儿童:[
...
]
),
}

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

代码不应该也有一个dispose()函数来防止内存泄漏。@MarufHassan,作为一个新手,出于好奇,上面的代码中内存泄漏在哪里?