copyWith method

  1. @useResult
FThemeData copyWith({
  1. String? debugLabel,
  2. FBreakpoints? breakpoints,
  3. FColors? colors,
  4. FTypography? typography,
  5. FStyleDelta? style,
  6. FAccordionStyleDelta? accordionStyle,
  7. FAutocompleteStyleDelta? autocompleteStyle,
  8. FVariantsDelta<FAlertVariantConstraint, FAlertVariant, FAlertStyle, FAlertStyleDelta>? alertStyles,
  9. FAvatarStyleDelta? avatarStyle,
  10. FVariantsDelta<FBadgeVariantConstraint, FBadgeVariant, FBadgeStyle, FBadgeStyleDelta>? badgeStyles,
  11. FBottomNavigationBarStyleDelta? bottomNavigationBarStyle,
  12. FBreadcrumbStyleDelta? breadcrumbStyle,
  13. FVariantsDelta<FButtonVariantConstraint, FButtonVariant, FButtonSizes, FButtonSizesDelta>? buttonStyles,
  14. FCalendarStyleDelta? calendarStyle,
  15. FCardStyleDelta? cardStyle,
  16. FCheckboxStyleDelta? checkboxStyle,
  17. FCircularProgressStyleDelta? circularProgressStyle,
  18. FDateFieldStyleDelta? dateFieldStyle,
  19. FDeterminateProgressStyleDelta? determinateProgressStyle,
  20. FDialogRouteStyleDelta? dialogRouteStyle,
  21. FDialogStyleDelta? dialogStyle,
  22. FVariantsDelta<FDividerAxisVariantConstraint, FDividerAxisVariant, FDividerStyle, FDividerStyleDelta>? dividerStyles,
  23. FVariantsDelta<FHeaderVariantConstraint, FHeaderVariant, FHeaderStyle, FHeaderStyleDelta>? headerStyles,
  24. FVariantsDelta<FItemVariantConstraint, FItemVariant, FItemStyle, FItemStyleDelta>? itemStyles,
  25. FItemGroupStyleDelta? itemGroupStyle,
  26. FLabelStylesDelta? labelStyles,
  27. FLineCalendarStyleDelta? lineCalendarStyle,
  28. FMultiSelectStyleDelta? multiSelectStyle,
  29. FModalSheetStyleDelta? modalSheetStyle,
  30. FPaginationStyleDelta? paginationStyle,
  31. FPersistentSheetStyleDelta? persistentSheetStyle,
  32. FPickerStyleDelta? pickerStyle,
  33. FPopoverStyleDelta? popoverStyle,
  34. FPopoverMenuStyleDelta? popoverMenuStyle,
  35. FProgressStyleDelta? progressStyle,
  36. FRadioStyleDelta? radioStyle,
  37. FVariantsDelta<FResizableAxisVariantConstraint, FResizableAxisVariant, FResizableDividerStyle, FResizableDividerStyleDelta>? resizableStyles,
  38. FScaffoldStyleDelta? scaffoldStyle,
  39. FSelectStyleDelta? selectStyle,
  40. FSelectGroupStyleDelta? selectGroupStyle,
  41. FSelectMenuTileStyleDelta? selectMenuTileStyle,
  42. FSidebarStyleDelta? sidebarStyle,
  43. FVariantsDelta<FSliderAxisVariantConstraint, FSliderAxisVariant, FSliderStyle, FSliderStyleDelta>? sliderStyles,
  44. FToasterStyleDelta? toasterStyle,
  45. FSwitchStyleDelta? switchStyle,
  46. FTabsStyleDelta? tabsStyle,
  47. FTappableStyleDelta? tappableStyle,
  48. FTextFieldStyleDelta? textFieldStyle,
  49. FVariantsDelta<FItemVariantConstraint, FItemVariant, FTileStyle, FTileStyleDelta>? tileStyles,
  50. FTileGroupStyleDelta? tileGroupStyle,
  51. FTimeFieldStyleDelta? timeFieldStyle,
  52. FTimePickerStyleDelta? timePickerStyle,
  53. FTooltipStyleDelta? tooltipStyle,
  54. Iterable<ThemeExtension>? extensions,
})

Returns a copy of this FThemeData with the given properties replaced.

final theme = FThemeData(
  alertStyles: ...,
  avatarStyle: ...,
);

final copy = theme.copyWith(avatarStyle: bar);

print(theme.alertStyles == copy.alertStyles); // true
print(theme.avatarStyle == copy.avatarStyle); // false

To modify colors, typography, and/or style, create a new FThemeData using FThemeData first. This allows the global theme data to propagate to widget-specific theme data.

@override
Widget build(BuildContext context) {
  final theme = FThemeData(
    colors: FThemes.neutral.light.colors.copyWith(
      primary: const Color(0xFF0D47A1), // dark blue
      primaryForeground: const Color(0xFFFFFFFF), // white
    ),
    typography: FThemes.neutral.light.typography.copyWith(
      // ...
    ).scale(sizeScalar: 0.8),
    style: FThemes.neutral.light.style.copyWith(
      borderRadius: .zero,
    ),
  );

  return FTheme(
    data: theme.copyWith(
      cardStyle: theme.cardStyle.copyWith(
        decoration: .delta(borderRadius: const .all(.circular(8))),
      ),
    ),
    child: const FScaffold(...),
  );
}

Alternatively, consider using the CLI.

Implementation

@useResult
FThemeData copyWith({
  String? debugLabel,
  FBreakpoints? breakpoints,
  FColors? colors,
  FTypography? typography,
  FStyleDelta? style,
  FAccordionStyleDelta? accordionStyle,
  FAutocompleteStyleDelta? autocompleteStyle,
  FVariantsDelta<FAlertVariantConstraint, FAlertVariant, FAlertStyle, FAlertStyleDelta>? alertStyles,
  FAvatarStyleDelta? avatarStyle,
  FVariantsDelta<FBadgeVariantConstraint, FBadgeVariant, FBadgeStyle, FBadgeStyleDelta>? badgeStyles,
  FBottomNavigationBarStyleDelta? bottomNavigationBarStyle,
  FBreadcrumbStyleDelta? breadcrumbStyle,
  FVariantsDelta<FButtonVariantConstraint, FButtonVariant, FButtonSizes, FButtonSizesDelta>? buttonStyles,
  FCalendarStyleDelta? calendarStyle,
  FCardStyleDelta? cardStyle,
  FCheckboxStyleDelta? checkboxStyle,
  FCircularProgressStyleDelta? circularProgressStyle,
  FDateFieldStyleDelta? dateFieldStyle,
  FDeterminateProgressStyleDelta? determinateProgressStyle,
  FDialogRouteStyleDelta? dialogRouteStyle,
  FDialogStyleDelta? dialogStyle,
  FVariantsDelta<FDividerAxisVariantConstraint, FDividerAxisVariant, FDividerStyle, FDividerStyleDelta>?
  dividerStyles,
  FVariantsDelta<FHeaderVariantConstraint, FHeaderVariant, FHeaderStyle, FHeaderStyleDelta>? headerStyles,
  FVariantsDelta<FItemVariantConstraint, FItemVariant, FItemStyle, FItemStyleDelta>? itemStyles,
  FItemGroupStyleDelta? itemGroupStyle,
  FLabelStylesDelta? labelStyles,
  FLineCalendarStyleDelta? lineCalendarStyle,
  FMultiSelectStyleDelta? multiSelectStyle,
  FModalSheetStyleDelta? modalSheetStyle,
  FPaginationStyleDelta? paginationStyle,
  FPersistentSheetStyleDelta? persistentSheetStyle,
  FPickerStyleDelta? pickerStyle,
  FPopoverStyleDelta? popoverStyle,
  FPopoverMenuStyleDelta? popoverMenuStyle,
  FProgressStyleDelta? progressStyle,
  FRadioStyleDelta? radioStyle,
  FVariantsDelta<
    FResizableAxisVariantConstraint,
    FResizableAxisVariant,
    FResizableDividerStyle,
    FResizableDividerStyleDelta
  >?
  resizableStyles,
  FScaffoldStyleDelta? scaffoldStyle,
  FSelectStyleDelta? selectStyle,
  FSelectGroupStyleDelta? selectGroupStyle,
  FSelectMenuTileStyleDelta? selectMenuTileStyle,
  FSidebarStyleDelta? sidebarStyle,
  FVariantsDelta<FSliderAxisVariantConstraint, FSliderAxisVariant, FSliderStyle, FSliderStyleDelta>? sliderStyles,
  FToasterStyleDelta? toasterStyle,
  FSwitchStyleDelta? switchStyle,
  FTabsStyleDelta? tabsStyle,
  FTappableStyleDelta? tappableStyle,
  FTextFieldStyleDelta? textFieldStyle,
  FVariantsDelta<FItemVariantConstraint, FItemVariant, FTileStyle, FTileStyleDelta>? tileStyles,
  FTileGroupStyleDelta? tileGroupStyle,
  FTimeFieldStyleDelta? timeFieldStyle,
  FTimePickerStyleDelta? timePickerStyle,
  FTooltipStyleDelta? tooltipStyle,
  Iterable<ThemeExtension<dynamic>>? extensions,
}) => FThemeData(
  debugLabel: debugLabel ?? this.debugLabel,
  breakpoints: breakpoints ?? this.breakpoints,
  colors: colors ?? this.colors,
  typography: typography ?? this.typography,
  style: style?.call(this.style) ?? this.style,
  accordionStyle: accordionStyle?.call(this.accordionStyle) ?? this.accordionStyle,
  autocompleteStyle: autocompleteStyle?.call(this.autocompleteStyle) ?? this.autocompleteStyle,
  alertStyles: alertStyles?.call(this.alertStyles) ?? this.alertStyles,
  avatarStyle: avatarStyle?.call(this.avatarStyle) ?? this.avatarStyle,
  badgeStyles: badgeStyles?.call(this.badgeStyles) ?? this.badgeStyles,
  bottomNavigationBarStyle:
      bottomNavigationBarStyle?.call(this.bottomNavigationBarStyle) ?? this.bottomNavigationBarStyle,
  breadcrumbStyle: breadcrumbStyle?.call(this.breadcrumbStyle) ?? this.breadcrumbStyle,
  buttonStyles: buttonStyles?.call(this.buttonStyles) ?? this.buttonStyles,
  calendarStyle: calendarStyle?.call(this.calendarStyle) ?? this.calendarStyle,
  cardStyle: cardStyle?.call(this.cardStyle) ?? this.cardStyle,
  checkboxStyle: checkboxStyle?.call(this.checkboxStyle) ?? this.checkboxStyle,
  circularProgressStyle: circularProgressStyle?.call(this.circularProgressStyle) ?? this.circularProgressStyle,
  dateFieldStyle: dateFieldStyle?.call(this.dateFieldStyle) ?? this.dateFieldStyle,
  determinateProgressStyle:
      determinateProgressStyle?.call(this.determinateProgressStyle) ?? this.determinateProgressStyle,
  dialogRouteStyle: dialogRouteStyle?.call(this.dialogRouteStyle) ?? this.dialogRouteStyle,
  dialogStyle: dialogStyle?.call(this.dialogStyle) ?? this.dialogStyle,
  dividerStyles: dividerStyles?.call(this.dividerStyles) ?? this.dividerStyles,
  headerStyles: headerStyles?.call(this.headerStyles) ?? this.headerStyles,
  itemStyles: itemStyles?.call(this.itemStyles) ?? this.itemStyles,
  itemGroupStyle: itemGroupStyle?.call(this.itemGroupStyle) ?? this.itemGroupStyle,
  labelStyles: labelStyles?.call(this.labelStyles) ?? this.labelStyles,
  lineCalendarStyle: lineCalendarStyle?.call(this.lineCalendarStyle) ?? this.lineCalendarStyle,
  multiSelectStyle: multiSelectStyle?.call(this.multiSelectStyle) ?? this.multiSelectStyle,
  modalSheetStyle: modalSheetStyle?.call(this.modalSheetStyle) ?? this.modalSheetStyle,
  paginationStyle: paginationStyle?.call(this.paginationStyle) ?? this.paginationStyle,
  persistentSheetStyle: persistentSheetStyle?.call(this.persistentSheetStyle) ?? this.persistentSheetStyle,
  pickerStyle: pickerStyle?.call(this.pickerStyle) ?? this.pickerStyle,
  popoverStyle: popoverStyle?.call(this.popoverStyle) ?? this.popoverStyle,
  popoverMenuStyle: popoverMenuStyle?.call(this.popoverMenuStyle) ?? this.popoverMenuStyle,
  progressStyle: progressStyle?.call(this.progressStyle) ?? this.progressStyle,
  radioStyle: radioStyle?.call(this.radioStyle) ?? this.radioStyle,
  resizableStyles: resizableStyles?.call(this.resizableStyles) ?? this.resizableStyles,
  scaffoldStyle: scaffoldStyle?.call(this.scaffoldStyle) ?? this.scaffoldStyle,
  selectStyle: selectStyle?.call(this.selectStyle) ?? this.selectStyle,
  selectGroupStyle: selectGroupStyle?.call(this.selectGroupStyle) ?? this.selectGroupStyle,
  selectMenuTileStyle: selectMenuTileStyle?.call(this.selectMenuTileStyle) ?? this.selectMenuTileStyle,
  sidebarStyle: sidebarStyle?.call(this.sidebarStyle) ?? this.sidebarStyle,
  sliderStyles: sliderStyles?.call(this.sliderStyles) ?? this.sliderStyles,
  toasterStyle: toasterStyle?.call(this.toasterStyle) ?? this.toasterStyle,
  switchStyle: switchStyle?.call(this.switchStyle) ?? this.switchStyle,
  tabsStyle: tabsStyle?.call(this.tabsStyle) ?? this.tabsStyle,
  tappableStyle: tappableStyle?.call(this.tappableStyle) ?? this.tappableStyle,
  textFieldStyle: textFieldStyle?.call(this.textFieldStyle) ?? this.textFieldStyle,
  tileStyles: tileStyles?.call(this.tileStyles) ?? this.tileStyles,
  tileGroupStyle: tileGroupStyle?.call(this.tileGroupStyle) ?? this.tileGroupStyle,
  timeFieldStyle: timeFieldStyle?.call(this.timeFieldStyle) ?? this.timeFieldStyle,
  timePickerStyle: timePickerStyle?.call(this.timePickerStyle) ?? this.timePickerStyle,
  tooltipStyle: tooltipStyle?.call(this.tooltipStyle) ?? this.tooltipStyle,
  extensions: extensions ?? this.extensions,
);