Nullable CupertinoThemeData.brightness

Summary

#

CupertinoThemeData.brightness is now nullable.

Context

#

CupertinoThemeData.brightness is now used to override MediaQuery.platformBrightness for Cupertino widgets. Before this change, the CupertinoThemeData.brightness getter returned Brightness.light when it was set to null.

Description of change

#

Previously CupertinoThemeData.brightness was implemented as a getter:

dart
Brightness get brightness => _brightness ?? Brightness.light;
final Brightness _brightness;

It is now a stored property:

dart
final Brightness brightness;

Migration guide

#

Generally CupertinoThemeData.brightness is rarely useful outside of the Flutter framework. To retrieve the brightness for Cupertino widgets, now use CupertinoTheme.brightnessOf instead.

With this change, it is now possible to override CupertinoThemeData.brightness in a CupertinoThemeData subclass to change the brightness override. For example:

dart
class AlwaysDarkCupertinoThemeData extends CupertinoThemeData {
  Brightness brightness => Brightness.dark;
}

When a CupertinoTheme uses the above CupertinoThemeData, dark mode is enabled for all its Cupertino descendants that are affected by this CupertinoTheme.

Timeline

#

Landed in version: 1.16.3
In stable release: 1.17

References

#

Design doc:

API documentation:

Relevant issue:

Relevant PR: