Summary

#

ExpansionTileController is deprecated. The same functionality can be achieved by using ExpansibleController instead.

Background

#

ExpansionTileController programmatically expands and collapses an ExpansionTile. A new Expansible widget has been added to the widgets library, which contains logic for expanding and collapsing behavior without being tied to the Material library. ExpansibleController complements Expansible and has the same functionality as ExpansionTileController. Additionally, ExpansibleController also supports adding and notifying listeners when its expansion state changes.

Apps that use ExpansionTileController display the following error when run in debug mode: "Use ExpansibleController instead.". Specifically, this means that users should replace usage of ExpansionTileController with ExpansibleController.

Migration guide

#

To migrate, replace the controller parameter of an ExpansionTile from an ExpansionTileController to an ExpansibleController. Unlike ExpansionTileController, ExpansibleController is a ChangeNotifier, so remember to dispose the new ExpansibleController.

Code before migration:

dart
class _MyWidgetState extends State<MyWidget> {
  final ExpansionTileController controller = ExpansionTileController();
  
  @override
  Widget build(BuildContext context) {
    return ExpansionTile(
      controller: controller,
    );
  }
}

Code after migration:

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,
    );
  }
}

Timeline

#

Landed in version: 3.31.0-0.1.pre
In stable release: not yet

References

#

API documentation:

Relevant issues:

Relevant PRs: