# Below is a list of Flutter team members who are suggested reviewers
# for contributions to packages in this repository.
#
# These names are just suggestions. It is fine to have your changes
# reviewed by someone else.

packages/animations/**                                   @goderbauer
packages/camera/**                                       @bparrishMines
packages/cross_file/**                                   @ditman
packages/css_colors/**                                   @stuartmorgan
packages/dynamic_layouts/**                              @Piinks
packages/extension_google_sign_in_as_googleapis_auth/**  @ditman
packages/file_selector/**                                @stuartmorgan
packages/flutter_adaptive_scaffold/**                    @gspencergoog
packages/flutter_image/**                                @stuartmorgan
packages/flutter_lints/**                                @goderbauer
packages/flutter_markdown/**                             @domesticmouse
packages/flutter_migrate/**                              @stuartmorgan
packages/flutter_template_images/**                      @stuartmorgan
packages/go_router/**                                    @chunhtai
packages/go_router_builder/**                            @chunhtai
packages/google_identity_services_web/**                 @ditman
packages/google_maps_flutter/**                          @stuartmorgan
packages/google_sign_in/**                               @stuartmorgan
packages/image_picker/**                                 @tarrinneal
packages/in_app_purchase/**                              @bparrishMines
packages/local_auth/**                                   @stuartmorgan
packages/metrics_center/**                               @keyonghan
packages/multicast_dns/**                                @dnfield
packages/palette_generator/**                            @gspencergoog
packages/path_provider/**                                @stuartmorgan
packages/pigeon/**                                       @tarrinneal
packages/plugin_platform_interface/**                    @stuartmorgan
packages/pointer_interceptor/**                          @ditman
packages/quick_actions/**                                @bparrishMines
packages/rfw/**                                          @Hixie
packages/shared_preferences/**                           @tarrinneal
packages/standard_message_codec/**                       @jonahwilliams
packages/url_launcher/**                                 @stuartmorgan
packages/video_player/**                                 @tarrinneal
packages/web_benchmarks/**                               @yjbanov
packages/webview_flutter/**                              @bparrishMines
packages/xdg_directories/**                              @stuartmorgan
third_party/packages/cupertino_icons/**                  @MitchellGoodwin

# Plugin platform implementation rules. These should stay last, since the last
# matching entry takes precedence.

# - Web
packages/**/*_web/**                                     @ditman

# - Android
packages/camera/camera_android/**                        @camsim99
packages/camera/camera_android_camerax/**                @camsim99
packages/espresso/**                                     @reidbaker
packages/flutter_plugin_android_lifecycle/**             @reidbaker
packages/google_maps_flutter/google_maps_flutter_android/**  @reidbaker
packages/google_sign_in/google_sign_in_android/**        @camsim99
packages/image_picker/image_picker_android/**            @gmackall
packages/in_app_purchase/in_app_purchase_android/**      @gmackall
packages/local_auth/local_auth_android/**                @camsim99
packages/path_provider/path_provider_android/**          @camsim99
packages/quick_actions/quick_actions_android/**          @camsim99
packages/shared_preferences/shared_preferences_android/**  @reidbaker
packages/url_launcher/url_launcher_android/**            @gmackall
packages/video_player/video_player_android/**            @camsim99

# - iOS
packages/camera/camera_avfoundation/**                   @hellohuanlin
packages/file_selector/file_selector_ios/**              @stuartmorgan
packages/google_maps_flutter/google_maps_flutter_ios/**  @cyanglaz
packages/google_sign_in/google_sign_in_ios/**            @vashworth
packages/image_picker/image_picker_ios/**                @vashworth
packages/in_app_purchase/in_app_purchase_storekit/**     @cyanglaz
packages/ios_platform_images/ios/**                      @stuartmorgan
packages/local_auth/local_auth_ios/**                    @louisehsu
packages/path_provider/path_provider_foundation/**       @stuartmorgan
packages/quick_actions/quick_actions_ios/**              @hellohuanlin
packages/shared_preferences/shared_preferences_foundation/**  @cyanglaz
packages/url_launcher/url_launcher_ios/**                @stuartmorgan
packages/video_player/video_player_avfoundation/**       @hellohuanlin
packages/webview_flutter/webview_flutter_wkwebview/**    @cyanglaz

# - Linux
packages/file_selector/file_selector_linux/**            @cbracken
packages/path_provider/path_provider_linux/**            @cbracken
packages/shared_preferences/shared_preferences_linux/**  @cbracken
packages/url_launcher/url_launcher_linux/**              @cbracken

# - macOS
packages/file_selector/file_selector_macos/**            @cbracken
packages/url_launcher/url_launcher_macos/**              @cbracken

# - Windows
packages/camera/camera_windows/**                        @cbracken
packages/file_selector/file_selector_windows/**          @cbracken
packages/image_picker/image_picker_windows/**            @cbracken
packages/local_auth/local_auth_windows/**                @cbracken
packages/path_provider/path_provider_windows/**          @cbracken
packages/shared_preferences/shared_preferences_windows/** @cbracken
packages/url_launcher/url_launcher_windows/**            @cbracken
