# Copyright 2014 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# For details regarding the *Flutter Fix* feature, see
# https://flutter.dev/docs/development/tools/flutter-fix

# Please add new fixes to the top of the file, separated by one blank line
# from other fixes. In a comment, include a link to the PR where the change
# requiring the fix was made.

# Every fix must be tested. See the flutter/packages/flutter/test_fixes/README.md
# file for instructions on testing these data driven fixes.

# For documentation about this file format, see
# https://dart.dev/go/data-driven-fixes.

# * Fixes in this file are for SliverAppBar from the Material library. *
#   For fixes to
#     * AppBar: fix_app_bar.yaml
#     * AppBarTheme: fix_app_bar_theme.yaml
#     * ColorScheme: fix_color_scheme.yaml
#     * Material (general): fix_material.yaml
#     * TextTheme: fix_text_theme.yaml
#     * ThemeData: fix_theme_data.yaml
version: 1
transforms:
  # Changes made in https://github.com/flutter/flutter/pull/86198
  - title: "Migrate to 'systemOverlayStyle'"
    date: 2020-07-12
    element:
      uris: [ 'material.dart' ]
      constructor: ''
      inClass: 'SliverAppBar'
    oneOf:
    - if: "brightness == 'Brightness.dark'"
      changes:
        - kind: 'addParameter'
          index: 34
          name: 'systemOverlayStyle'
          style: optional_named
          argumentValue:
            expression: '{% SystemUiOverlayStyle %}.light'
            requiredIf: "brightness == 'Brightness.dark'"
            variables:
              SystemUiOverlayStyle:
                kind: 'import'
                uris: [ 'services.dart' ]
                name: 'SystemUiOverlayStyle'
        - kind: 'removeParameter'
          name: 'brightness'
    - if: "brightness == 'Brightness.light'"
      changes:
        - kind: 'addParameter'
          index: 34
          name: 'systemOverlayStyle'
          style: optional_named
          argumentValue:
            expression: '{% SystemUiOverlayStyle %}.dark'
            requiredIf: "brightness == 'Brightness.light'"
            variables:
              SystemUiOverlayStyle:
                kind: 'import'
                uris: [ 'services.dart' ]
                name: 'SystemUiOverlayStyle'
        - kind: 'removeParameter'
          name: 'brightness'
    variables:
      brightness:
        kind: 'fragment'
        value: 'arguments[brightness]'

  # Changes made in https://github.com/flutter/flutter/pull/86198
  - title: "Migrate to 'systemOverlayStyle'"
    date: 2021-07-12
    element:
      uris: [ 'material.dart' ]
      field: 'brightness'
      inClass: 'SliverAppBar'
    changes:
      - kind: 'rename'
        newName: 'systemOverlayStyle'

  # Changes made in https://github.com/flutter/flutter/pull/86198
  - title: "Migrate to 'toolbarTextStyle' & 'titleTextStyle'"
    date: 2020-07-12
    element:
      uris: [ 'material.dart' ]
      constructor: ''
      inClass: 'SliverAppBar'
    changes:
    - kind: 'addParameter'
      index: 32
      name: 'toolbarTextStyle'
      style: optional_named
      argumentValue:
        expression: '{% textTheme %}.bodyText2'
        requiredIf: "textTheme != ''"
    - kind: 'addParameter'
      index: 33
      name: 'titleTextStyle'
      style: optional_named
      argumentValue:
        expression: '{% textTheme %}.headline6'
        requiredIf: "textTheme != ''"
    - kind: 'removeParameter'
      name: 'textTheme'
    variables:
      textTheme:
        kind: 'fragment'
        value: 'arguments[textTheme]'

  # Changes made in https://github.com/flutter/flutter/pull/86198
  - title: "Migrate to 'toolbarTextStyle'"
    date: 2021-07-12
    # TODO(Piinks): Add tests when `bulkApply:false` testing is supported, https://github.com/dart-lang/sdk/issues/44639
    bulkApply: false
    element:
      uris: [ 'material.dart' ]
      field: 'textTheme'
      inClass: 'SliverAppBar'
    changes:
      - kind: 'rename'
        newName: 'toolbarTextStyle'

  # Changes made in https://github.com/flutter/flutter/pull/86198
  - title: "Migrate to 'titleTextStyle'"
    date: 2021-07-12
    # TODO(Piinks): Add tests when `bulkApply:false` testing is supported, https://github.com/dart-lang/sdk/issues/44639
    bulkApply: false
    element:
      uris: [ 'material.dart' ]
      field: 'textTheme'
      inClass: 'SliverAppBar'
    changes:
      - kind: 'rename'
        newName: 'titleTextStyle'

# Changes made in https://github.com/flutter/flutter/pull/86198
  - title: "Remove 'backwardsCompatibility'"
    date: 2020-07-12
    element:
      uris: [ 'material.dart' ]
      constructor: ''
      inClass: 'SliverAppBar'
    changes:
    - kind: 'removeParameter'
      name: 'backwardsCompatibility'

# Before adding a new fix: read instructions at the top of this file.
