Skip to main content

已淘汰的 ExpansionTileController

`ExpansionTileController` 已被淘汰,並由 `ExpansibleController` 取代。

摘要

#

ExpansionTileController 已被淘汰。相同的功能現在可以透過 ExpansibleController 來實現。

背景

#

ExpansionTileController 可用於以程式方式展開與收合 ExpansionTile。元件 (Widget) 函式庫中新增了一個新的 Expansible 元件,其包含展開與收合的邏輯,且不再綁定於 Material 函式庫。ExpansibleController 補足了 Expansible,並且擁有與 ExpansionTileController 相同的功能。此外,ExpansibleController 也支援在展開狀態 (state) 變更時新增與通知監聽器。

當應用程式在 debug 模式下使用 ExpansionTileController 時,會顯示以下錯誤訊息:「請改用 ExpansibleController。」。具體來說,這表示使用者應將 ExpansionTileController 的用法替換為 ExpansibleController

遷移指南

#

要進行遷移,請將 ExpansionTilecontroller 參數,從 ExpansionTileController 替換為 ExpansibleController。與 ExpansionTileController 不同,ExpansibleController 是一個 ChangeNotifier,因此請記得在不需要時釋放(dispose)新的 ExpansibleController

遷移前的程式碼:

dart
class _MyWidgetState extends State<MyWidget> {
  final ExpansionTileController controller = ExpansionTileController();

  @override
  Widget build(BuildContext context) {
    return ExpansionTile(
      controller: controller,
    );
  }
}

遷移後的程式碼:

dart
class _MyWidgetState extends State<MyWidget> {
  final ExpansibleController controller = ExpansibleController();

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

  @override
  Widget build(BuildContext context) {
    return ExpansionTile(
      controller: controller,
    );
  }
}

時程

#

合併於版本:3.31.0-0.1.pre
正式版發佈於:3.32

參考資料

#

API 文件:

相關議題:

相關 PR: