#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.

name: playground
description: A new Flutter project.
publish_to: 'none'
version: 1.0.0+1

environment:
  sdk: '>=3.0.2 <4.0.0'
  flutter: '>=3.10.4'

dependencies:
  akvelon_flutter_issue_106664_workaround: ^0.1.2
  aligned_dialog: ^0.0.6
  app_state: 0.9.4
  collection: ^1.15.0
  easy_localization: ">=3.0.1 <3.0.3"
  easy_localization_ext: ^0.1.1
  easy_localization_loader: ^1.0.0
  equatable: ^2.0.5
  expansion_widget: ^0.0.2
  flutter: { sdk: flutter }
  flutter_localizations: { sdk: flutter }
  flutter_svg: ^2.0.1
  flutter_web_plugins: { sdk: flutter }
  get_it: ^7.2.0
  google_fonts: ^4.0.3
  highlight: ^0.7.0
  intl: ^0.18.0
  onmessage: ^0.2.0
  playground_components: { path: playground_components }
  provider: ^6.0.0
  shared_preferences: ^2.0.12
  url_launcher: ^6.0.12
  url_strategy: ^0.2.0

dev_dependencies:
  build_runner: ^2.1.4
  fake_async: ^1.3.0
  flutter_code_editor: ^0.3.0
  flutter_lints: ^2.0.1
  flutter_test: { sdk: flutter }
  integration_test: { sdk: flutter }
  mockito: ^5.0.16
  playground_components_dev: { path: playground_components_dev }

flutter:
  assets:
    - assets/
    - assets/translations/en.yaml

  generate: true
  uses-material-design: true

flutter_gen:
  output: lib/src/assets/
