diff --git a/tool/host-redirect/.gitignore b/tool/host-redirect/.gitignore index 0357a52bdb..dae0cbed5a 100644 --- a/tool/host-redirect/.gitignore +++ b/tool/host-redirect/.gitignore @@ -7,3 +7,5 @@ coverage/ /.development /.developmentx /.xdevelopment + +src/data/ diff --git a/tool/host-redirect/src/data/firebase_json.js b/tool/host-redirect/src/data/firebase_json.js deleted file mode 100644 index c1af95419a..0000000000 --- a/tool/host-redirect/src/data/firebase_json.js +++ /dev/null @@ -1,3128 +0,0 @@ -const data = { - "hosting": { - "public": "_site", - "cleanUrls": true, - "trailingSlash": false, - "ignore": [ - "firebase.json", - "**/.*", - "tool", - "src", - "**/node_modules/**" - ], - "rewrites": [], - "redirects": [ - { - "regex": "^/(flutter(/.*)?)", - "destination": "https://api.flutter-io.cn/:1", - "type": 301 - }, - { - "regex": "^/(objcdoc(/.*)?)", - "destination": "https://api.flutter-io.cn/:1", - "type": 301 - }, - { - "regex": "^/(javadoc(/.*)?)", - "destination": "https://api.flutter-io.cn/:1", - "type": 301 - }, - { - "regex": "(?P.*)\\.html$", - "destination": ":basename", - "type": 301 - }, - { - "regex": "(?P.*)\\.$", - "destination": ":basename", - "type": 301 - }, - { - "source": "/ads", - "destination": "https://flutter.cn/monetization", - "type": 301 - }, - { - "source": "/community", - "destination": "https://flutter.cn/community", - "type": 301 - }, - { - "source": "/gallery", - "destination": "https://github.com/flutter/gallery#flutter-gallery", - "type": 301 - }, - { - "source": "/showcase", - "destination": "https://flutter.cn/showcase", - "type": 301 - }, - { - "source": "/support", - "destination": "https://flutter.cn/community", - "type": 301 - }, - { - "source": "/docs/:rest*", - "destination": "/:rest*", - "type": 301 - }, - { - "source": "/subscribe/**", - "destination": "https://flutter.cn#newsletter", - "type": 301 - }, - { - "source": "/accessibility", - "destination": "/ui/accessibility-and-internationalization/accessibility", - "type": 301 - }, - { - "source": "/adaptations", - "destination": "/platform-integration/platform-adaptations", - "type": 301 - }, - { - "source": "/adaptive*", - "destination": "/ui/adaptive-responsive", - "type": 301 - }, - { - "source": "/android-release", - "destination": "/deployment/android", - "type": 301 - }, - { - "source": "/animations", - "destination": "/ui/animations", - "type": 301 - }, - { - "source": "/animations/:rest*", - "destination": "/ui/animations/:rest*", - "type": 301 - }, - { - "source": "/assets-and-images", - "destination": "/ui/assets/assets-and-images", - "type": 301 - }, - { - "source": "/bootstrap-into-dart", - "destination": "/resources/bootstrap-into-dart", - "type": 301 - }, - { - "source": "/bug-reports", - "destination": "/resources/bug-reports", - "type": 301 - }, - { - "source": "/cd", - "destination": "/deployment/cd", - "type": 301 - }, - { - "source": "/custom-fonts", - "destination": "/cookbook/design/fonts", - "type": 301 - }, - { - "source": "/data-and-backend/json", - "destination": "/data-and-backend/serialization/json", - "type": 301 - }, - { - "source": "/debugging", - "destination": "/testing/debugging", - "type": 301 - }, - { - "source": "/deferred-components", - "destination": "/perf/deferred-components", - "type": 301 - }, - { - "source": "/desktop", - "destination": "/platform-integration/desktop", - "type": 301 - }, - { - "source": "/desktop/windows", - "destination": "/platform-integration/windows/building", - "type": 301 - }, - { - "source": "/desktop/macos", - "destination": "/platform-integration/macos/building", - "type": 301 - }, - { - "source": "/desktop/linux", - "destination": "/platform-integration/linux/building", - "type": 301 - }, - { - "source": "/perf/rendering/*", - "destination": "/perf", - "type": 301 - }, - { - "source": "/developing-packages", - "destination": "/packages-and-plugins/developing-packages", - "type": 301 - }, - { - "source": "/development", - "destination": "/", - "type": 301 - }, - { - "source": "/development/:rest*", - "destination": "/:rest*", - "type": 301 - }, - { - "source": "/devtools/:rest*", - "destination": "/tools/devtools/:rest*", - "type": 301 - }, - { - "source": "/downloads/:resource*", - "destination": "/resources/:resource*", - "type": 301 - }, - { - "source": "/f/flutter-survey-metadata.json", - "destination": "https://storage.googleapis.com/flutter-uxr/surveys/flutter-survey-metadata.json", - "type": 301 - }, - { - "source": "/faq", - "destination": "/resources/faq", - "type": 301 - }, - { - "source": "/fastlane-cd", - "destination": "/deployment/cd#fastlane", - "type": 301 - }, - { - "source": "/flutter-for-:platform*", - "destination": "/get-started/flutter-for/:platform*-devs", - "type": 301 - }, - { - "source": "/formatting", - "destination": "/tools/formatting", - "type": 301 - }, - { - "source": "/gestures", - "destination": "/ui/advanced/gestures", - "type": 301 - }, - { - "source": "/hot-reload", - "destination": "/tools/hot-reload", - "type": 301 - }, - { - "source": "/ide-setup", - "destination": "/get-started/editor", - "type": 301 - }, - { - "source": "/images/catalog-widget-placeholder.png", - "destination": "/assets/images/docs/catalog-widget-placeholder.png", - "type": 301 - }, - { - "source": "/inspector", - "destination": "/tools/devtools/inspector", - "type": 301 - }, - { - "source": "/intellij-ide", - "destination": "/tools/android-studio", - "type": 301 - }, - { - "source": "/intellij-setup", - "destination": "/get-started/editor", - "type": 301 - }, - { - "source": "/ios-release", - "destination": "/deployment/ios", - "type": 301 - }, - { - "source": "/jobs/**", - "destination": "/jobs", - "type": 301 - }, - { - "source": "/json", - "destination": "/data-and-backend/serialization/json", - "type": 301 - }, - { - "source": "/ui/media", - "destination": "/ui/assets", - "type": 301 - }, - { - "source": "/ui/media/:rest*", - "destination": "/ui/assets/:rest*", - "type": 301 - }, - { - "source": "/networking", - "destination": "/data-and-backend/networking", - "type": 301 - }, - { - "source": "/overview", - "destination": "/resources/architectural-overview", - "type": 301 - }, - { - "source": "/platform-channels", - "destination": "/platform-integration/platform-channels", - "type": 301 - }, - { - "source": "/packages-and-plugins/happy-paths", - "destination": "/packages-and-plugins/favorites", - "type": 301 - }, - { - "source": "/packages-and-plugins/happy-paths/recommended", - "destination": "/packages-and-plugins/favorites", - "type": 301 - }, - { - "source": "/platform-plugins*", - "destination": "/packages-and-plugins/using-packages", - "type": 301 - }, - { - "source": "/platform-services", - "destination": "/platform-integration/platform-channels", - "type": 301 - }, - { - "source": "/predictive-back", - "destination": "/release/breaking-changes/android-predictive-back#migration-guide", - "type": 301 - }, - { - "source": "/reading-writing-files", - "destination": "/cookbook/persistence/reading-writing-files", - "type": 301 - }, - { - "source": "/reference/tutorials", - "destination": "/codelabs", - "type": 301 - }, - { - "source": "/release-notes", - "destination": "/release/release-notes", - "type": 301 - }, - { - "source": "/release-notes/:version*", - "destination": "/release/release-notes/release-notes-:version*", - "type": 301 - }, - { - "source": "/responsive*", - "destination": "/ui/layout/responsive/adaptive-responsive", - "type": 301 - }, - { - "source": "/routing-and-navigation", - "destination": "/ui/navigation", - "type": 301 - }, - { - "source": "/sdk-archive", - "destination": "/release/archive", - "type": 301 - }, - { - "source": "/setup-:os*", - "destination": "/get-started/install/:os*", - "type": 301 - }, - { - "source": "/setup", - "destination": "/get-started/install", - "type": 301 - }, - { - "source": "/technical-overview", - "destination": "/resources/architectural-overview", - "type": 301 - }, - { - "source": "/text-input", - "destination": "/cookbook/forms/text-input", - "type": 301 - }, - { - "source": "/ui/widgets-intro", - "destination": "/ui", - "type": 301 - }, - { - "source": "/tutorials", - "destination": "/codelabs", - "type": 301 - }, - { - "source": "/unbounded-constraints", - "destination": "/ui/layout/constraints#unbounded", - "type": 301 - }, - { - "source": "/ui-performance", - "destination": "/perf/ui-performance", - "type": 301 - }, - { - "source": "/upgrading", - "destination": "/release/upgrade", - "type": 301 - }, - { - "source": "/using-ide-vscode", - "destination": "/tools/vs-code", - "type": 301 - }, - { - "source": "/using-ide", - "destination": "/tools/android-studio", - "type": 301 - }, - { - "source": "/using-packages", - "destination": "/packages-and-plugins/using-packages", - "type": 301 - }, - { - "source": "/web-analogs", - "destination": "/get-started/flutter-for/web-devs", - "type": 301 - }, - { - "source": "/webflutter.dev/web", - "destination": "/web", - "type": 301 - }, - { - "source": "/widgets-intro", - "destination": "/ui", - "type": 301 - }, - { - "source": "/widgets", - "destination": "/ui/widgets/catalog", - "type": 301 - }, - { - "source": "/widgets/:rest*", - "destination": "/ui/widgets/:rest*", - "type": 301 - }, - { - "source": "/accessibility-and-localization", - "destination": "/ui/accessibility-and-internationalization", - "type": 301 - }, - { - "source": "/accessibility-and-localization/:rest*", - "destination": "/ui/accessibility-and-internationalization/:rest*", - "type": 301 - }, - { - "source": "/add-to-app/android/add-splash-screen", - "destination": "/platform-integration/android/splash-screen", - "type": 301 - }, - { - "source": "/codelabs/layout-basics", - "destination": "/ui/layout", - "type": 301 - }, - { - "source": "/codelabs/explicit-animations", - "destination": "/ui/animations/tutorial", - "type": 301 - }, - { - "source": "/cookbook/games/google-mobile-ads", - "destination": "/cookbook/plugins/google-mobile-ads", - "type": 301 - }, - { - "source": "/cookbook/images/cached-images", - "destination": "/cookbook/images/network-image", - "type": 301 - }, - { - "source": "/cookbook/networking/named-routes", - "destination": "/cookbook/navigation/named-routes", - "type": 301 - }, - { - "source": "/cookbook/testing/integration-test-introduction", - "destination": "/cookbook/testing/integration", - "type": 301 - }, - { - "source": "/cookbook/testing/integration-test-profiling", - "destination": "/cookbook/testing/integration/profiling", - "type": 301 - }, - { - "source": "/cookbook/testing/integration-test-scrolling", - "destination": "/cookbook/testing/integration/scrolling", - "type": 301 - }, - { - "source": "/cookbook/testing/mocking", - "destination": "/cookbook/testing/unit/mocking", - "type": 301 - }, - { - "source": "/cookbook/testing/unit-test", - "destination": "/cookbook/testing/unit/introduction", - "type": 301 - }, - { - "source": "/cookbook/testing/widget-test-finders", - "destination": "/cookbook/testing/widget/finders", - "type": 301 - }, - { - "source": "/cookbook/testing/widget-test-introduction", - "destination": "/cookbook/testing/widget", - "type": 301 - }, - { - "source": "/cookbook/testing/widget-test-tap-drag", - "destination": "/cookbook/testing/widget/tap-drag", - "type": 301 - }, - { - "source": "/deployment/fastlane-cd", - "destination": "/deployment/cd#fastlane", - "type": 301 - }, - { - "source": "/get-started", - "destination": "/get-started/install", - "type": 301 - }, - { - "source": "/get-started/flutter-for", - "destination": "/get-started/learn-more", - "type": 301 - }, - { - "source": "/get-started/flutter-for/ios-devs", - "destination": "/get-started/flutter-for/swiftui-devs", - "type": 301 - }, - { - "source": "/get-started/install/null", - "destination": "/get-started/install", - "type": 301 - }, - { - "source": "/get-started/web", - "destination": "/platform-integration/web/building", - "type": 301 - }, - { - "source": "/ios-14", - "destination": "/platform-integration/ios/ios-debugging", - "type": 301 - }, - { - "source": "/ios-project-migration", - "destination": "/platform-integration/ios", - "type": 301 - }, - { - "source": "/layout", - "destination": "/ui/layout", - "type": 301 - }, - { - "source": "/material-3-migration", - "destination": "/release/breaking-changes/material-3-migration", - "type": 301 - }, - { - "source": "/packages-and-plugins/androidx-compatibility", - "destination": "/platform-integration/android/androidx-migration", - "type": 301 - }, - { - "source": "/packages-and-plugins/c-interop", - "destination": "/platform-integration/android/c-interop", - "type": 301 - }, - { - "source": "/packages-and-plugins/plugins-in-tests", - "destination": "/testing/plugins-in-tests", - "type": 301 - }, - { - "source": "/packages-and-plugins/plugin-api-migration", - "destination": "/release/breaking-changes/plugin-api-migration", - "type": 301 - }, - { - "source": "/platform-integration/android/androidx-migration", - "destination": "/release/breaking-changes/androidx-migration", - "type": 301 - }, - { - "source": "/platform-integration/android/splash-screen-migration", - "destination": "/release/breaking-changes/splash-screen-migration", - "type": 301 - }, - { - "source": "/platform-integration/c-interop", - "destination": "/platform-integration", - "type": 301 - }, - { - "source": "/platform-integration/ios-app-clip", - "destination": "/platform-integration/ios/ios-app-clip", - "type": 301 - }, - { - "source": "/platform-integration/ios/splash-screen", - "destination": "/platform-integration/ios/launch-screen", - "type": 301 - }, - { - "source": "/platform-integration/platform-views", - "destination": "/platform-integration/android/platform-views", - "type": 301 - }, - { - "source": "/platform-integration/web-images", - "destination": "/platform-integration/web/web-images", - "type": 301 - }, - { - "source": "/platform-integration/windows/run-loop-migration", - "destination": "/release/breaking-changes/windows-run-loop", - "type": 301 - }, - { - "source": "/platform-integration/windows/version-migration", - "destination": "/release/breaking-changes/windows-version-information", - "type": 301 - }, - { - "source": "/platform-integration/windows/dark-mode-migration", - "destination": "/release/breaking-changes/windows-dark-mode", - "type": 301 - }, - { - "source": "/release/release-notes/changelogs/changelog-1.17.0", - "destination": "/release/release-notes/release-notes-1.17.0", - "type": 301 - }, - { - "source": "/release/release-notes/supported-platforms", - "destination": "/reference/supported-platforms", - "type": 301 - }, - { - "source": "/reference/widgets/:catalogpage+", - "destination": "/ui/widgets/:catalogpage+", - "type": 301 - }, - { - "source": "/reference/widgets/widgetindex", - "destination": "/reference/widgets", - "type": 301 - }, - { - "source": "/release/breaking-changes/scrollable_alert_dialog", - "destination": "/release/breaking-changes/scrollable-alert-dialog", - "type": 301 - }, - { - "source": "/release/breaking-changes/win_lifecycle_process_function", - "destination": "/release/breaking-changes/win-lifecycle-process-function", - "type": 301 - }, - { - "source": "/resources/compatibility", - "destination": "/release/compatibility-policy", - "type": 301 - }, - { - "source": "/resources/dart-swift-concurrency", - "destination": "/get-started/flutter-for/dart-swift-concurrency", - "type": 301 - }, - { - "source": "/resources/platform-adaptations", - "destination": "/platform-integration/platform-adaptations", - "type": 301 - }, - { - "source": "/resources/rendering", - "destination": "/resources/architectural-overview#rendering-and-layout", - "type": 301 - }, - { - "source": "/resources/security-false-positives", - "destination": "/reference/security-false-positives", - "type": 301 - }, - { - "source": "/resources/technical-overview", - "destination": "/resources/architectural-overview", - "type": 301 - }, - { - "source": "/resources/design-docs", - "destination": "https://github.com/flutter/flutter/issues?q=is%3Aopen+is%3Aissue+label%3A%22design+doc%22", - "type": 301 - }, - { - "source": "/resources/Flutter-IntelliJ-cheat-sheet-MacOS.pdf", - "destination": "/tools/android-studio", - "type": 301 - }, - { - "source": "/resources/Flutter-IntelliJ-cheat-sheet-WindowsLinux.pdf", - "destination": "/tools/android-studio", - "type": 301 - }, - { - "source": "/testing/best-practices", - "destination": "/perf/best-practices", - "type": 301 - }, - { - "source": "/testing/integration-tests/migration", - "destination": "/release/breaking-changes/flutter-driver-migration", - "type": 301 - }, - { - "source": "/testing/ui-performance", - "destination": "/perf/ui-performance", - "type": 301 - }, - { - "source": "/tools/devtools", - "destination": "/tools/devtools/overview", - "type": 301 - }, - { - "source": "/tools/devtools/code-size", - "destination": "/tools/devtools/app-size", - "type": 301 - }, - { - "source": "/tools/devtools/codeSize", - "destination": "/tools/devtools/app-size", - "type": 301 - }, - { - "source": "/tools/devtools/timeline", - "destination": "/tools/devtools/performance", - "type": 301 - }, - { - "source": "/tools/ide", - "destination": "/tools/android-studio", - "type": 301 - }, - { - "source": "/tools/ide/android-studio", - "destination": "/tools/android-studio", - "type": 301 - }, - { - "source": "/tools/ide/vs-code", - "destination": "/tools/vs-code", - "type": 301 - }, - { - "source": "/tools/inspector", - "destination": "/tools/devtools/inspector", - "type": 301 - }, - { - "source": "/tools/sdk/archive", - "destination": "/release/archive", - "type": 301 - }, - { - "source": "/tools/sdk/overview", - "destination": "/tools/sdk", - "type": 301 - }, - { - "source": "/tools/sdk/releases", - "destination": "/release/archive", - "type": 301 - }, - { - "source": "/tools/sdk/release-notes", - "destination": "/release/release-notes", - "type": 301 - }, - { - "source": "/tools/sdk/release-notes/:rest*", - "destination": "/release/release-notes/:rest*", - "type": 301 - }, - { - "source": "/tools/sdk/release-notes/supported-platforms", - "destination": "/reference/supported-platforms", - "type": 301 - }, - { - "source": "/tools/sdk/upgrading", - "destination": "/release/upgrade", - "type": 301 - }, - { - "source": "/tools/web-renderers", - "destination": "/platform-integration/web/renderers", - "type": 301 - }, - { - "source": "/tutorials/animation", - "destination": "/ui/animations/tutorial", - "type": 301 - }, - { - "source": "/tutorials/interactive", - "destination": "/ui/interactive", - "type": 301 - }, - { - "source": "/tutorials/internationalization", - "destination": "/ui/accessibility-and-internationalization/internationalization", - "type": 301 - }, - { - "source": "/tutorials/layout", - "destination": "/ui/layout", - "type": 301 - }, - { - "source": "/ui/accessibility-and-localization", - "destination": "/ui/accessibility-and-internationalization", - "type": 301 - }, - { - "source": "/ui/accessibility-and-localization/:rest*", - "destination": "/ui/accessibility-and-internationalization/:rest*", - "type": 301 - }, - { - "source": "/ui/advanced", - "destination": "/ui", - "type": 301 - }, - { - "source": "/ui/advanced/actions_and_shortcuts", - "destination": "/ui/interactivity/actions-and-shortcuts", - "type": 301 - }, - { - "source": "/ui/advanced/actions-and-shortcuts", - "destination": "/ui/interactivity/actions-and-shortcuts", - "type": 301 - }, - { - "source": "/ui/advanced/focus", - "destination": "/ui/interactivity/focus", - "type": 301 - }, - { - "source": "/ui/advanced/gestures", - "destination": "/ui/interactivity/gestures", - "type": 301 - }, - { - "source": "/ui/advanced/shaders", - "destination": "/ui/design/graphics/fragment-shaders", - "type": 301 - }, - { - "source": "/ui/advanced/slivers", - "destination": "/ui/layout/scrolling/slivers", - "type": 301 - }, - { - "source": "/ui/advanced/splash-screen", - "destination": "/platform-integration/android/splash-screen", - "type": 301 - }, - { - "source": "/ui/advanced/typography", - "destination": "/ui/design/text/typography", - "type": 301 - }, - { - "source": "/ui/assets-and-images", - "destination": "/ui/assets/assets-and-images", - "type": 301 - }, - { - "source": "/ui/building-adaptive-apps", - "destination": "/ui/adaptive-responsive", - "type": 301 - }, - { - "source": "/ui/interactive", - "destination": "/ui/interactivity", - "type": 301 - }, - { - "source": "/ui/layout/adaptive-responsive", - "destination": "/ui/adaptive-responsive", - "type": 301 - }, - { - "source": "/ui/layout/box-constraints", - "destination": "/ui/layout/constraints#unbounded", - "type": 301 - }, - { - "source": "/ui/layout/building-adaptive-apps", - "destination": "/ui/adaptive-responsive", - "type": 301 - }, - { - "source": "/ui/layout/responsive", - "destination": "/ui/adaptive-responsive", - "type": 301 - }, - { - "source": "/ui/layout/responsive/adaptive-responsive", - "destination": "/ui/adaptive-responsive", - "type": 301 - }, - { - "source": "/ui/material", - "destination": "/ui/design/material", - "type": 301 - }, - { - "source": "/ui/material3-updates", - "destination": "/ui/design/material", - "type": 301 - }, - { - "source": "/ui/scrolling", - "destination": "/ui/layout/scrolling", - "type": 301 - }, - { - "source": "/ui/scrolling/:rest*", - "destination": "/ui/layout/scrolling/:rest*", - "type": 301 - }, - { - "source": "/ui/splash-screen", - "destination": "/platform-integration/android/splash-screen", - "type": 301 - }, - { - "source": "/ui/splash-screen/android-splash-screen", - "destination": "/platform-integration/android/splash-screen", - "type": 301 - }, - { - "source": "/ui/widgets/catalog", - "destination": "/ui/widgets", - "type": 301 - }, - { - "source": "/ui/widgets/widgetindex", - "destination": "/reference/widgets", - "type": 301 - }, - { - "source": "/web", - "destination": "/platform-integration/web", - "type": 301 - }, - { - "source": "/whats-new-archive", - "destination": "/release/whats-new", - "type": 301 - }, - { - "source": "/whats-new", - "destination": "/release/whats-new", - "type": 301 - }, - { - "source": "/testing/oem-debuggers", - "destination": "/testing/native-debugging", - "type": 301 - }, - { - "source": "/adoptawidget", - "destination": "https://github.com/flutter/flutter/blob/main/CONTRIBUTING.md", - "type": 301 - }, - { - "source": "/apprentice-giveaway", - "destination": "https://www.youtube.com/playlist?list=PL4dBIh1xps-HAaadBRWQobCO_IJ4gMOG2", - "type": 301 - }, - { - "source": "/clock", - "destination": "https://medium.com/flutter/its-time-the-flutter-clock-contest-results-dcebe2eb3957", - "type": 301 - }, - { - "source": "/create", - "destination": "https://medium.com/flutter/the-flutter-create-winners-are-40980f2d20b3", - "type": 301 - }, - { - "source": "/assets/images/docs/intellij/hot-reload.gif", - "destination": "https://raw.githubusercontent.com/flutter/website/main/src/assets/images/docs/tools/android-studio/hot-reload.gif", - "type": 301 - }, - { - "source": "/brick-breaker", - "destination": "https://codelabs.developers.google.com/codelabs/flutter-flame-brick-breaker", - "type": 301 - }, - { - "source": "/catalog/samples", - "destination": "https://flutter.github.io/samples/#", - "type": 301 - }, - { - "source": "/catalog/samples/*", - "destination": "https://flutter.github.io/samples/#", - "type": 301 - }, - { - "source": "/chat", - "destination": "https://github.com/flutter/flutter/wiki/Chat", - "type": 302 - }, - { - "source": "/custom-deferred-components", - "destination": "https://github.com/flutter/flutter/wiki/Deferred-Components#custom-implementations", - "type": 301 - }, - { - "source": "/deferred-components-wiki", - "destination": "https://github.com/flutter/flutter/wiki/Deferred-Components", - "type": 301 - }, - { - "source": "/design-principles", - "destination": "https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo", - "type": 301 - }, - { - "source": "/fully-deferred-flutter", - "destination": "https://github.com/flutter/flutter/wiki/Deferred-Components#fully-deferring-flutter-in-add-to-app", - "type": 301 - }, - { - "source": "/null-safety", - "destination": "https://dart.dev/null-safety", - "type": 301 - }, - { - "source": "/privacy", - "destination": "https://www.google.com/intl/en/policies/privacy", - "type": 301 - }, - { - "source": "/report-jank", - "destination": "https://github.com/flutter/flutter/issues/74833", - "type": 301 - }, - { - "source": "/research-optout", - "destination": "https://docs.google.com/forms/d/e/1FAIpQLSeG2Nhj0YQkr3m75P74Zb9G-v7zgNhAE9arCyig-a5B1A8uDw/viewform?usp=sf_link", - "type": 301 - }, - { - "source": "/research-signup", - "destination": "https://docs.google.com/forms/d/e/1FAIpQLSe0i4De809KXVCdljGKrjMj3lxhuzbuFKCtY5PEQPCYtGxFMg/viewform?usp=sf_link", - "type": 301 - }, - { - "source": "/resources/design-principles", - "destination": "https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo", - "type": 301 - }, - { - "source": "/style-guide*", - "destination": "https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo", - "type": 301 - }, - { - "source": "/youtube", - "destination": "https://youtube.com/@flutterdev", - "type": 301 - }, - { - "source": "/go/2D-Foundation", - "destination": "https://docs.google.com/document/d/1C2hAq-gMAIx4Cbym7EMhVAcPZ2hmNxlgijpYmgTpmUU/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/a11y-links", - "destination": "https://docs.google.com/document/d/1FxzANiyJFkoRxJ7V2IejpfB5DX19gxiJps-8N2oUW_U/edit#", - "type": 301 - }, - { - "source": "/go/a11y-text-attributes", - "destination": "https://docs.google.com/document/d/1vhbwxFOTRTUvW2C_onFffEH5Fn2pAfMQDyv-gekias0/edit?usp=sharing&resourcekey=0-ChQvjIoWYO7jXcaCXMj5Qw", - "type": 301 - }, - { - "source": "/go/actions-and-shortcuts-design-revision", - "destination": "https://docs.google.com/document/d/1A9yald55O_C6Weqp4tOtyMisfOC1ZC0UMq7Yc-pNfVQ/edit", - "type": 301 - }, - { - "source": "/go/adaptive", - "destination": "/ui/adaptive-responsive", - "type": 301 - }, - { - "source": "/go/adaptive-layout-foldables", - "destination": "https://docs.google.com/document/d/1qhrpTWYs5f67X8v32NCCNTRMIjSrVHuaMEFAul-Q_Ms/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/add-missing-features-to-selection-controls", - "destination": "https://docs.google.com/document/d/1QizXwBiO-2REIcEovl5pK06BaLPOWYmNwOE5jactJZA/edit?usp=sharing&resourcekey=0-1pb9mJiAq29Gesmt25GAug", - "type": 301 - }, - { - "source": "/go/add-to-app-samples", - "destination": "https://docs.google.com/document/d/1M_GsAL8C1NxbsmzI35w2Th1wvX1KMoPHY5yeeNbzjY0", - "type": 301 - }, - { - "source": "/go/allow-datatable-row-height-to-expand", - "destination": "https://docs.google.com/document/d/1qr1IgaU2z9eaM6zCa4u-Q8kJD5Zq7IcdxVyrgR7CwZc/edit?usp=sharing&resourcekey=0-1bNp0ocF4AwGBj6NvRfrEA", - "type": 301 - }, - { - "source": "/go/android-assets-in-flutter", - "destination": "https://docs.google.com/document/d/1jymgQYxRTe5rdprt74ERh7Jsa0lfnRuMnkOmJusLWsE/edit", - "type": 301 - }, - { - "source": "/go/android-dependency-versions", - "destination": "https://docs.google.com/document/d/1qeeM5QG-jiafttSgvc7yvC19IDRggFFZQTktBVxL6sI/edit?usp=sharing&resourcekey=0-HLEAiBOMxAlQxDs-mEeffw", - "type": 301 - }, - { - "source": "/go/android-embedding-dependencies", - "destination": "https://docs.google.com/document/d/1vITp2mUZRa-cmll0sPH0zjNgPlyvOMx7awxPNRAPyic/edit", - "type": 301 - }, - { - "source": "/go/android-embedding-move", - "destination": "https://docs.google.com/document/d/1nQujwZfEe3QOHTyZn160eImpoJOYioADP09DtumcLcc/edit?ts=5d8041db#", - "type": 301 - }, - { - "source": "/go/android-java-gradle-error", - "destination": "/release/breaking-changes/android-java-gradle-migration-guide", - "type": 301 - }, - { - "source": "/go/android-migration-summary", - "destination": "https://docs.google.com/document/d/1wKspwf6LQu6uo32uQ9NcukfiKhLL4ButV9cwpjeb8QI", - "type": 301 - }, - { - "source": "/go/android-ndk-version", - "destination": "https://docs.google.com/document/d/1sljfqHpI5m4uxsL7B89yhYluO97Mz1YKyA0VgzzXyZ4/edit?usp=sharing&resourcekey=0-Ts9Rk8jbJor7WBMMiehKWg", - "type": 301 - }, - { - "source": "/go/android-plugin-migration", - "destination": "/release/breaking-changes/plugin-api-migration", - "type": 301 - }, - { - "source": "/go/android-project-migration", - "destination": "/platform-integration/android/androidx-migration", - "type": 301 - }, - { - "source": "/go/android-root-predictive-back", - "destination": "https://docs.google.com/document/d/1BGCWy1_LRrXEB6qeqTAKlk-U2CZlKJ5xI97g45U7azk/edit#", - "type": 301 - }, - { - "source": "/go/android-splash-migration", - "destination": "/platform-integration/android/splash-screen-migration", - "type": 301 - }, - { - "source": "/go/android-startup-tracing", - "destination": "https://docs.google.com/document/d/1I7jvRg3UmG7P84hdis-9A00fEr2Ntj-K7f_FbGLubGE/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/androidx-transition", - "destination": "https://docs.google.com/document/d/1JnMxQinUeouuV5kcenoq03TsvLyn_xaHXIT_6c5b7nQ", - "type": 301 - }, - { - "source": "/go/annotator-tree", - "destination": "https://docs.google.com/document/d/1YtkdZSx1687Ipbff06qp3XglmJym3Wc9boY4I-bYs4A/edit", - "type": 301 - }, - { - "source": "/go/api-for-transform-performance", - "destination": "https://docs.google.com/document/d/1Fxdlf7JsA-yAwc_RNuboMG-vhIhchRBZGvDSwg5qR0A/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/app-extensions", - "destination": "https://docs.google.com/document/d/1WloBrAYpqNKOhEHytTqJEHshcXxHflLUGKvULKRHbuU/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/application-lifecycle-events", - "destination": "https://docs.google.com/document/d/1FL5Fgk7EzMNOpJL0GZJt-lfWtGt2igHuC2ZznItS2l8/edit?usp=sharing&resourcekey=0-IZNfpSVPkMbigQLLXoJcfw", - "type": 301 - }, - { - "source": "/go/apple-pencil-double-tap-support", - "destination": "https://docs.google.com/document/d/1r4P5r-jGt2Sjqro3ldCU2axUiHTpu3yhIycnI94OKQw/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/asset-lookup-in-plugin-binding", - "destination": "https://docs.google.com/document/d/1iwGFWipC0v0FKvAgbjGl0kaV9IGox1YiD8jUP8Vvkjc/edit", - "type": 301 - }, - { - "source": "/go/asset-transformation", - "destination": "https://docs.google.com/document/d/1i_trjTF-gJ3Xj-GUtVmyLETa5CwStvabEjtD5z8ArC4/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/autocomplete", - "destination": "https://docs.google.com/document/d/1fV4FDNdcza1ITU7hlgweCDUZdWyCqd-rjz_J7K2KkfY/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/autosubmit", - "destination": "https://docs.google.com/document/d/14oAi2gHMDnqOVe2rEl0syny7_7xsCHh83HtdomQgouM/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/automatic-android-plugin-registration", - "destination": "https://docs.google.com/document/d/1xNkBmcdVL1yEXqtZ65KzTwfr5UXDD05VVKYXIXGX7p8/edit", - "type": 301 - }, - { - "source": "/go/automated-revert-workflow", - "destination": "https://docs.google.com/document/d/1lBkWo9rzHseoYaEaa12HOjVS32uQ5rFdLRUCO_CQoiQ/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/backdrop-filter-with-overlay-canvas", - "destination": "https://docs.google.com/document/d/1t_offKOgkuVzvB3fqGTfcltovb-yxqV6tbuP1qIBqVI/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/backing-stores-for-multi-view-partial-repaint", - "destination": "https://docs.google.com/document/d/1CPpA86BTF6JTvztmRWCeLGQoPEqX_msYMG6avdqhaFk/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/base-annotations-local-position-on-region", - "destination": "https://docs.google.com/document/d/1r7FQTOw2vZJZ5c0VoNqi9CWmZY3MvUfz0spdf0-nK6k/edit", - "type": 301 - }, - { - "source": "/go/blankcanvas", - "destination": "https://docs.google.com/document/d/1rS_RO2DQ_d4_roc3taAB6vXFjv7-9hJP7pyZ9NhPOdA/edit?resourcekey=0-VBzTPoqLwsruo0j9dokuOg", - "type": 301 - }, - { - "source": "/go/bottom-navigation-bar-title-deprecation", - "destination": "https://docs.google.com/document/d/1L-2nPf5hbLGNoRvOSUmnxgUHahBVzW1ybhTXGY3ObDw/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/buffer-queue", - "destination": "https://docs.google.com/document/d/1rXl9G-VmISVlVkKVgrnQKeX7Mexyez0x9HZ5F5yKxrQ/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/build-aar", - "destination": "/add-to-app/android/project-setup#option-a---depend-on-the-android-archive-aar", - "type": 301 - }, - { - "source": "/go/build-dashboard-v2", - "destination": "https://docs.google.com/document/d/1kwh48xYuoVtadYFb2I2t6BJMGEW07K7T5WYcieAZZiY", - "type": 301 - }, - { - "source": "/go/build-flows", - "destination": "https://docs.google.com/document/d/1imsVxbeAsttTi90EFpbnbVzov9z0xXd7tLCAr_QAJ38", - "type": 301 - }, - { - "source": "/go/buildtextspan-buildcontext", - "destination": "https://docs.google.com/document/d/1nr-g45gXcWTYoW9UmChZV7Ije3lKP4pEvDQCdz6NFdI/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/cacheless-shared-preferences", - "destination": "https://docs.google.com/document/d/1DNhUYIJaDA10g2cOqipKyPuPkgL_FYPfgkF9Coqcc6k/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/calculating-flutter-frame-rate", - "destination": "https://docs.google.com/document/d/1YGLELXWdC6YIN03QzEzcIRJc56gCnabPBW8BHCAFR58/edit", - "type": 301 - }, - { - "source": "/go/camera-privacy", - "destination": "https://docs.google.com/document/d/1t_5FYzOTlBWC6arHc4_8VuG0BUOtIyP9xWvbDER5Y9I/edit", - "type": 301 - }, - { - "source": "/go/cascading-menus", - "destination": "https://docs.google.com/document/d/17XOSGzLzqbpNcCUwakM_WQ2ZOMcUOXcPC__7nPORwms/edit?usp=sharing&resourcekey=0-hg74S2vAAqwJFN984ZXQHg", - "type": 301 - }, - { - "source": "/go/center-floating-label-inputdecoration", - "destination": "https://docs.google.com/document/d/1sxP91vZiY7McmSMmzrboklIJWQ_6pSS9MBSCrQq016M/edit#", - "type": 301 - }, - { - "source": "/go/change-default-textselectionhandlecolor-to-accentcolor", - "destination": "https://docs.google.com/document/d/1RJQd5ABWJ_7DZN19aTZBCE7xHzlC4MYBP1bWE2FWcvc/edit", - "type": 301 - }, - { - "source": "/go/chip-usedeletebuttontooltip-deprecation", - "destination": "https://docs.google.com/document/d/1wc9ot7T2E7hJubYxEWMX230a79wYSiFey4BHxnEzHtw/edit?usp=sharing&resourcekey=0-Bo7KPqEtkWgZcSuRCqwQ5w", - "type": 301 - }, - { - "source": "/go/ci-post-test-analysis", - "destination": "https://docs.google.com/document/d/1V0W6q7gkk2hHFLYb3t7JFr84Km5uhKl9T3Ksb1IpkLQ/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/clean-up-not-disposed-disposables-in-ff", - "destination": "https://docs.google.com/document/d/1bXannXQ8rEtfwxEVd7LDo7xiVu5-QxRoall28MIIFss", - "type": 301 - }, - { - "source": "/go/clip-behavior", - "destination": "https://docs.google.com/document/d/1gC5Di4ykTCqupD77PWpy9D8xXo0Ide5CnrH0zzVIhKo/edit", - "type": 301 - }, - { - "source": "/go/colorscheme-generation", - "destination": "https://docs.google.com/document/d/1P7f-DGPWz6HCbwLoAruRuWtakPx4VY-e8nT_yuQ71sc/edit?usp=sharing&resourcekey=0-qxeub7yCKa_No0HlrzEk-g", - "type": 301 - }, - { - "source": "/go/colorscheme-m3", - "destination": "https://docs.google.com/document/d/1mY1ahBQEMAfsawGJMX5S34pXb7c8dHGatyotClReeas/edit#heading=h.cnnhzna3pz6d", - "type": 301 - }, - { - "source": "/go/configurable-autosubmit", - "destination": "https://docs.google.com/document/d/14pf4jfBy1-PHYmJLVbeqrh1swTF01SZ2YD3DR_Qv3kM/edit?usp=sharing&resourcekey=0-AW7-kNNGmmpSUqyOvBdwRg", - "type": 301 - }, - { - "source": "/go/contextual-menus", - "destination": "https://docs.google.com/document/d/1F1itGgbSS3Cbq70hScSCNriDoux1sMGF9LHZsMdvU74/edit?resourcekey=0-RkHGwhe-tcoTGlaQyclPtQ", - "type": 301 - }, - { - "source": "/go/cross_file-content-uri-implementation", - "destination": "https://docs.google.com/document/d/1-d7uWlB9ERPIOFRQ1nJGGiPDb9ALh7QxincEPOmGc3c", - "type": 301 - }, - { - "source": "/go/cupertino-context-menu-action", - "destination": "https://docs.google.com/document/d/1lCuPyAbIzAr0c2KIEZhREC_EnkTKBxNiqP6lGLT-KpU/edit", - "type": 301 - }, - { - "source": "/go/cupertino-datepicker-redesign", - "destination": "https://docs.google.com/document/d/1Ib5ztLzc19e1Uggz16BFlrJMg1TOdYLyP-WqtTpDltM/edit?usp=sharing&resourcekey=0-11oVmOsTHLD5fqxdAHZqNg", - "type": 301 - }, - { - "source": "/go/cupertino-increase-contrast", - "destination": "https://docs.google.com/document/d/1kePVlqWvJu5Ph0RL6wgg67F3SATmsJ8QY5N0S1MvaGg/edit#", - "type": 301 - }, - { - "source": "/go/cupertino-bottom-sheet-routes", - "destination": "https://docs.google.com/document/d/16eMliX4HsDjRmEob2lksM6JBq2_LPVM26uYGyTid1ec/edit#", - "type": 301 - }, - { - "source": "/go/cupertino-switch-onoff-labels", - "destination": "https://docs.google.com/document/d/1DD5gx8x0ej5AJzGxzpr4hpgpqsvcDu-ozKliGnhHm7c/edit#", - "type": 301 - }, - { - "source": "/go/custom-colors-m3", - "destination": "https://docs.google.com/document/d/1LbD4JqBgAfHex02oR3r2jyu9lTBBNBmyec2ovT59Kr8/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/custom-tabs-support", - "destination": "https://docs.google.com/document/d/1GvsmPQz6aKixNUphL10XmSOL7M6nOH7W1jYwNp0LwnA", - "type": 301 - }, - { - "source": "/go/dart-flutterbuffers", - "destination": "https://docs.google.com/document/d/1rqKq6DwqaeBfTLTixxurrdT9HwZ02DyRjFigO9SiB1Q/edit#", - "type": 301 - }, - { - "source": "/go/dart-static-analysis-ir", - "destination": "https://docs.google.com/document/d/1xJYGBSoXL7h1z43NnjFsXxauQGXvUnacef4XR1zmeGA/edit#", - "type": 301 - }, - { - "source": "/go/dartle", - "destination": "https://docs.google.com/document/d/1Ei0ZIqdqNjxTHoGB3Ay6SWQg3DMSsKKWl70XoBUCFTA", - "type": 301 - }, - { - "source": "/go/dart-tooling-daemon", - "destination": "https://docs.google.com/document/d/1Qldlyi2TmzTsDN1AS5AfjE93-A2nR296Np5bZW2aBwU/edit?usp=sharing&resourcekey=0-ckijCX_-ZSy-J_KBI-FQ1Q", - "type": 301 - }, - { - "source": "/go/dart-workspace-support", - "destination": "https://docs.google.com/document/d/1_SfTg0W8PASZ2neTkNhYjcVDdFvomeoAnZ_XqflIx88/edit?usp=sharing&resourcekey=0-dcmTZFHicV9ZZL863zC5-w", - "type": 301 - }, - { - "source": "/go/dash-tooling-plugin-strategy", - "destination": "https://docs.google.com/document/d/1Zc0AE8JTKfOSA-IFpEYcPFJ2eALbXE3AG4ZucWXeMig/", - "type": 301 - }, - { - "source": "/go/data-sync", - "destination": "https://docs.google.com/document/d/1yH96-p-SkMmt6hL5xHHDtMvCKRz2XGrMuw9ZY_nE954", - "type": 301 - }, - { - "source": "/go/dds-daemon", - "destination": "https://docs.google.com/document/d/18IgFakijiv9CLFGT5BckbwZuf2pqhOUeN27mB9XqvpQ/edit?usp=sharing&resourcekey=0-rBHvH9gLXLjGPWt5WE-XFg", - "type": 301 - }, - { - "source": "/go/deep-link-flag-migration", - "destination": "https://docs.google.com/document/d/1TUhaEhNdi2BUgKWQFEbOzJgmUAlLJwIAhnFfZraKgQs/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/default-scroll-action", - "destination": "https://docs.google.com/document/d/1SJvom6k4YW4EtFIY4VpAhAOH-jWhRkHVfpVsOBB56KM/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/deferred-image-decoding", - "destination": "https://docs.google.com/document/d/1f-NCEF0lrHGd3DsieS1tZ_NWbYTjA4GTqESMbGFsU2U/edit?ts=5e17a77d&pli=1#", - "type": 301 - }, - { - "source": "/go/delegate-route-transitions", - "destination": "https://docs.google.com/document/d/10C5VbqhU7FkkDSVlcVZmrl8UyL7nw4CeL4QdPKMjsEk/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/deprecate-html-renderer", - "destination": "https://docs.google.com/document/d/1DGamHsa2lz_Qtgfrfa3j3fRaEopJXc7tCFVM1TQlck8/edit?usp=sharing&resourcekey=0-IjkqrCoo_EcRRS2bPYKI8w", - "type": 301 - }, - { - "source": "/go/deprecation-lifetime", - "destination": "https://docs.google.com/document/d/1Gc3ecrMghzc7WU4pgzKB8uBaTPpRdWfozn0otBbxR7s/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/deprecation-statustransitionwidget", - "destination": "https://docs.google.com/document/d/1NdxSKSEKa-E9YDUAyONQVad1bAZdc8bqT4zGVjSBQPo/edit?usp=sharing&resourcekey=0-CkJogS7MIhfZeabrIAUPhQ", - "type": 301 - }, - { - "source": "/go/deprecations-removed-after-1-22", - "destination": "https://docs.google.com/spreadsheets/d/1kZOej-h4AiRW2Td3NUnVMSb8PYLB63mpj-oFYqb_4tc/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/deprecations-removed-after-2-2", - "destination": "https://docs.google.com/spreadsheets/d/18VuxojMGFKrFJCeilg3tErAtp23-_tp43XUioC_34To/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/deprecations-removed-after-2-5", - "destination": "https://docs.google.com/spreadsheets/d/191-PZEOmlT7Xw6MDFFyf5HyneTaiCqI4OITtolbXD6c/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/deprecations-removed-after-2-10", - "destination": "https://docs.google.com/spreadsheets/d/12krawYCu6X_g_5wLGpmiAIi-VcTRV6xG7RGbRovuatQ/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/deprecations-removed-after-3-3", - "destination": "https://docs.google.com/spreadsheets/d/13cZzXz3_yMhnMH3Fyv2TKR_3974el103xlZuNWdevZM/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/deprecations-removed-after-3-7", - "destination": "https://docs.google.com/spreadsheets/d/1WCQmKobsgslfhqf6uL7I2BKk5KKhGX-n_xfk9g3CTEE/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/deprecations-removed-after-3-10", - "destination": "https://docs.google.com/spreadsheets/d/1gs2tvYBuwycP1XAZsDbMuqP5jUa6gWH1a0ZQGrzjXvw/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/deprecations-removed-after-3-13", - "destination": "https://docs.google.com/spreadsheets/d/1zzyBRdIkqiEcpv_njEQA7pyG7X8PcNhvXFYrEAB8P78/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/deprecations-removed-after-3-16", - "destination": "https://docs.google.com/spreadsheets/d/1ei3UmfvhmGGuwAGgLaQo1k_pgdu9Mu06tHPuSaS4TI4/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/deprecations-removed-after-3-19", - "destination": "https://docs.google.com/spreadsheets/d/1x_UJ7GiB61ByBo6cPLm_JfLrgFqAfkQo7pPK_lHvsUo/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/desktop-multi-window-support", - "destination": "https://docs.google.com/document/d/11_4wntz_9IJTQOo_Qhp7QF4RfpIMTfVygtOTxQ4OGHY/edit", - "type": 301 - }, - { - "source": "/go/desktop-multi-view-runner-apis", - "destination": "https://docs.google.com/document/d/1WkJuzifgJXyceaSoCCu8qTETYmYBOYKoz7Qaxtsore4/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/desktop-release-conductor", - "destination": "https://docs.google.com/document/d/15AwPXNd5FvItAqM0wa2VK0tRrqtRTgM8vR5LQeT2Mag/edit?usp=sharing&resourcekey=0-yZ2FAN-wEKwKT-ymdisetA", - "type": 301 - }, - { - "source": "/go/desktop-resize-macos", - "destination": "https://docs.google.com/document/d/1slGllp1Jhde7wkF6snqGhdrZwHV1VVmXeIF3f0t24JU/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/desktop-resize", - "destination": "https://docs.google.com/document/d/1OTy-qCGdP7tYfrEKCNX9A24sgnx5vshfK6FupfniyxA", - "type": 301 - }, - { - "source": "/go/detect-memory-leaks", - "destination": "https://docs.google.com/document/d/1hvRVpULPnwGjBc5nw52iSaDfB8hjIzbaQuECHmKvDrY/edit", - "type": 301 - }, - { - "source": "/go/developing-plugins", - "destination": "/packages-and-plugins/developing-packages#plugin", - "type": 301 - }, - { - "source": "/go/devintel-q3-2023", - "destination": "https://docs.google.com/document/d/1VGux5IxePO8lN_7kUuzYJtcJ76fkldr_TJv4R0tciYk", - "type": 301 - }, - { - "source": "/go/devintel-q1-2024", - "destination": "https://docs.google.com/document/d/15W9wsqzFcidXR12DiPH5r5ZDcZw_wDa7Zi9CAAe34Y4/edit?usp=sharing&resourcekey=0-XH0RYaDhNkqa_WCjbH0otA", - "type": 301 - }, - { - "source": "/go/dirty-region-management", - "destination": "https://docs.google.com/document/d/19WDvGJql1bmnECTdEzJFeH9Ixw4AP2R7JlgujBSbDbk/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/disable-dropdownmenuitem", - "destination": "https://docs.google.com/document/d/13W6PupVZUt6TenoE3NaTP9OCYsKBIYg9YgdurKe1XKs/edit?usp=sharing&resourcekey=0-6n8D5zSLjWs2ZncIyG6HUw", - "type": 301 - }, - { - "source": "/go/docs-nnbd-migration-guide", - "destination": "https://docs.google.com/document/d/1U8blxmkArsd09C-IGe3cQbJ5SvDLhwn0rWWsY2SthZ4/edit?usp=sharing&resourcekey=0-0CviWT1D47VGxK-Li4_NIw", - "type": 301 - }, - { - "source": "/go/double-buffered-window-resize", - "destination": "https://docs.google.com/document/d/1allwMZXgX9gGVPguFy3-XydjXEIJgYR1Uhz8Vhm9Rrs/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/downward-memory-pressure", - "destination": "https://docs.google.com/document/d/15zslrHsWigh9e8LeQxfieWwnXDBx5jicFPXD6l_SsH4/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/drm-embedder-api", - "destination": "https://docs.google.com/document/d/13Y0npyYM8iIXDqfvvHNYWFj3aO1xGT20rFbwV4-gRq8/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/drm-embedder", - "destination": "https://docs.google.com/document/d/1XbzbpbVBFC4H-iJfibdKEFOWn8PUCd3PQQDAOaj--wQ/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/drm-embedder-metal", - "destination": "https://docs.google.com/document/d/1ed0hv_0UWUyRCpRWRbv-Ff7sxMimIXwCk5kepWbNA5k/edit?usp=sharing&resourcekey=0-sCLVUBH5gQh-CvdULgkOhw", - "type": 301 - }, - { - "source": "/go/drm-embedder-vulkan", - "destination": "https://docs.google.com/document/d/1MC-2vM1eqlpnm1QFvijCzTDL8pvHpaxqNxaKnA7Soec/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/dynamic-plugins", - "destination": "https://docs.google.com/document/d/18AQCXxFrCu8UahRVy__VAQTWUnaonKtl24TUr86KkXs", - "type": 301 - }, - { - "source": "/go/education", - "destination": "https://docs.google.com/document/d/1PG2aPAkWkJ4q6k0wKlVwo86QZ9yLlZOeMVHStzDhwp4/edit?resourcekey=0-rzmUbzd7yaIHRbgh0kqqMg", - "type": 301 - }, - { - "source": "/go/eliminating-nullok-parameters", - "destination": "https://docs.google.com/document/d/1LKBL0S1uyhACDiUXILhLKFZH8Cpl_w3mXjHgaE8_--U/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/embedder-vulkan-support", - "destination": "https://docs.google.com/document/d/1vaUkfDett2mzKIUmq6uC-7Se2NEAf4XkwKU7ISTJpQE/edit", - "type": 301 - }, - { - "source": "/go/encoded-image-dimensions", - "destination": "https://docs.google.com/document/d/18KL4CILgjwjeb6vXDsIn5U7vHGSonpgR05FqaSsvoVc/edit", - "type": 301 - }, - { - "source": "/go/engine-build-definition-language", - "destination": "https://docs.google.com/document/d/1R2X4-YztJMyt82nPLXbQhDA50PcMDgavXN4JUu39hKI", - "type": 301 - }, - { - "source": "/go/engine-cpu-profiling", - "destination": "https://docs.google.com/document/d/1z_V69XzRct3vR7mBZ9tuuS1pZ_e7FQkuzbVJjXxMeaI/edit", - "type": 301 - }, - { - "source": "/go/engine-rtree", - "destination": "https://docs.google.com/document/d/1UGV0qerZ8o3eGrjm1axp0NoLWrT0KmTonMamb-xifEM/edit?usp=sharing&resourcekey=0-wh0paKk1H1vZbzxKxIj2jA", - "type": 301 - }, - { - "source": "/go/engine-v2-recipes", - "destination": "https://docs.google.com/document/d/1vP26tMAJqqHlIF2QZUfcirFe5zmei7gZ1zQ6IVGQPU4", - "type": 301 - }, - { - "source": "/go/error-handling", - "destination": "https://docs.google.com/document/d/1HdGLKoVw_KWLrVzDNZ8Lk5nN-biHQzi_CS5mCkpiDwA/edit", - "type": 301 - }, - { - "source": "/go/everything-builds-from-a-module", - "destination": "https://docs.google.com/document/d/1fkUpos4hbJF0NYSwjNLWct2UGDg-AfhxzlR6p2g0w9M", - "type": 301 - }, - { - "source": "/go/exposing-scroll-behaviors", - "destination": "https://docs.google.com/document/d/1W5PSIO1cVj7v6_xayydyFN3abWFOJTmFHKGBA9VKbbg/edit?usp=sharing&resourcekey=0-AHb9dJP8Knv3GWwZLnzZWQ", - "type": 301 - }, - { - "source": "/go/external-drag-and-drop", - "destination": "https://docs.google.com/document/d/1toFc3Fjafv8jDToQ85S5AquC7NOoJ2ZO_Or484nsEuo/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/fallback-image-decoding", - "destination": "https://docs.google.com/document/d/1G-5s6uoP1H_7f_ByLrvCVcoFXYZ80CixkMbbHMsMCag/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/faster-cocoon", - "destination": "https://docs.google.com/document/d/1NXP0_9TJ1qz674iYyOGVLEHWVpmbXr5yjhBrdoU_x5g/edit", - "type": 301 - }, - { - "source": "/go/federated-platforms", - "destination": "https://docs.google.com/document/d/1z_4Z5JMTbk5c4FpayVAb-PTz2wLP-aSCirbieavT3Ws/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/federated-plugins", - "destination": "https://docs.google.com/document/d/1LD7QjmzJZLCopUrFAAE98wOUQpjmguyGTN2wd_89Srs/edit", - "type": 301 - }, - { - "source": "/go/ffi-plugins", - "destination": "https://docs.google.com/document/d/1vMw-W6L-r-uL1SUgzDh6J5rmtqum7SZdO9khWACrZJI/edit?resourcekey=0-vvjEK88N-pApyKTPWJ2IZQ", - "type": 301 - }, - { - "source": "/go/file-system-access-from-devtools", - "destination": "https://docs.google.com/document/d/1BNgZka2N9HYL11A4IdR8FqsSW1VMr9Vo7CSrjY9rcic/edit?usp=sharing&resourcekey=0-H1f6lS5KjytrUCWc1vcS_w", - "type": 301 - }, - { - "source": "/go/flavor-specific-assets", - "destination": "https://docs.google.com/document/d/1_3GwdRZ1WPBqR9koNxESfAXHqynv36__ctMqN-NRG0k/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/flame-dartpad", - "destination": "https://dartpad.dev/?id=3e52ca7b51ba15f989ad880b8b3314a2", - "type": 301 - }, - { - "source": "/go/floating-snackbar-offset", - "destination": "https://docs.google.com/document/d/1elP-y83PtvfAZHNcpHCtnOFhZO9VnnlobwfQ33QO4hg/edit", - "type": 301 - }, - { - "source": "/go/floating-widgetspans", - "destination": "https://docs.google.com/document/d/1I-VqCxvszXGAas_6EE9b6ZIzyMY3HjxDxGW9_DWWd7M/edit", - "type": 301 - }, - { - "source": "/go/flutter-developer-tooling-plugins", - "destination": "https://docs.google.com/document/d/189A-T-pcHPuds8pOtbzLS8Wl6Hr0AIAIl0aRTPvLKec/", - "type": 301 - }, - { - "source": "/go/flutter-devtools-extensions", - "destination": "https://docs.google.com/document/d/189A-T-pcHPuds8pOtbzLS8Wl6Hr0AIAIl0aRTPvLKec/", - "type": 301 - }, - { - "source": "/go/flutter-devtools-static-extensions", - "destination": "https://docs.google.com/document/d/11J4h1oEfB9wBoRYUy4KzclnKITBY-234jKpU3kq4V4w/edit?resourcekey=0-pPo85Svkb9lKdtlrhMCTbw", - "type": 301 - }, - { - "source": "/go/flutter-drop-android-jellybean-2023", - "destination": "https://docs.google.com/document/d/1wWNly2SZRDqupSsHkBWDI_lS2MohBGEwPSXF6W05NOc/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/flutter-doctor-app-folder", - "destination": "https://docs.google.com/document/d/1_N70oh5rl0pMlz-epE_3fIr7gqE94dgoV-DHq5OlF2I/edit", - "type": 301 - }, - { - "source": "/go/flutter-drop-macOS-10.13-2022-q4", - "destination": "https://docs.google.com/document/d/1wHqr2cob78VfUKhOFEKjaUM_mnV4gL-mg3gSQCFhF7Y/edit", - "type": 301 - }, - { - "source": "/go/flutter-drop-win7-2024", - "destination": "https://docs.google.com/document/d/18gfRT8klo0zEvn6fIpders7ghoWIBKO22cNYS22WLhc/edit?resourcekey=0-SFkxdqfyM6KNNkG4zS6aaA", - "type": 301 - }, - { - "source": "/go/flutter-android-emulator-testing", - "destination": "https://docs.google.com/document/d/10wYUcLcSTF4Epg2EUGoBqOkkOe4zxKHvYKjXFZAOgGs/edit?usp=sharing&resourcekey=0-pltjPvEtVezXDADMbUwFHQ", - "type": 301 - }, - { - "source": "/go/flutter-engine-clocks", - "destination": "https://docs.google.com/document/d/1Sx8QA1qXgJGw5r4ESviDnU2LSShNHiq_LjbRWPgSvXQ/edit?usp=sharing&resourcekey=0-BoBvLxgqf_nc_rwLc0zmTw", - "type": 301 - }, - { - "source": "/go/flutter-engine-extensions", - "destination": "https://docs.google.com/document/d/1xG7jR4FserdW7TdwnklF3_lXUGmt4myPQjDGF3LFtCQ/edit?resourcekey=0-Iug4D2mWuyQI6suvC_2itw#", - "type": 301 - }, - { - "source": "/go/flutter-for-embedded-linux", - "destination": "https://docs.google.com/document/d/1n4NXCk0QlGz16gUCtywR79H0Z1fzPqB2iNL8oxuexuk/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/flutter-gradle-plugin-apply", - "destination": "/release/breaking-changes/flutter-gradle-plugin-apply", - "type": 301 - }, - { - "source": "/go/flutter-iap-migrate-pblv2", - "destination": "https://docs.google.com/document/d/1XM16UsLE_aPWoZnheE9waO06mhxLkkWjpPf9jtI1AdY/edit", - "type": 301 - }, - { - "source": "/go/flutter-ios-system-font", - "destination": "https://docs.google.com/document/d/1FG9ONkG-sLuFkb9vUAL2i7oeUtUqm8qiQJe_poK754w/edit", - "type": 301 - }, - { - "source": "/go/flutter-lints", - "destination": "https://docs.google.com/document/d/1b0X0HOzvFY3WxI363U8BXx6Am13qFm96KlbS72mmFAk/edit", - "type": 301 - }, - { - "source": "/go/flutter-migrate", - "destination": "https://docs.google.com/document/d/1fPnpUI6gXE9PkNWuFoAW20m_sQ87ZSC1rrn_D7fxBvs", - "type": 301 - }, - { - "source": "/go/flutter-nonhost", - "destination": "https://docs.google.com/document/d/1rTLxAxsshEir-B2vE6DU_MaqMMusOdCgLGEGpBYG3CM", - "type": 301 - }, - { - "source": "/go/flutter-pigeon-native-wrapper", - "destination": "https://docs.google.com/document/d/1Sw6F8GbNiO_lvS2fFjXrRYk2Go5RNDHudDT6kIX6Sm0/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/flutter-platform-idling", - "destination": "https://docs.google.com/document/d/1RhSluOcHED6wEckY8CGK1mowRcWGAEGWraN6REPaORs/edit", - "type": 301 - }, - { - "source": "/go/flutter-platform-views-windows", - "destination": "https://docs.google.com/document/d/10nVF2f-QTQ5o2HMEZ1fUlBJzK4dEmhuPHTVFEgW-JRs/edit?usp=sharing&resourcekey=0-J-Lsp7xfA-Nr5EMr1av-Xg", - "type": 301 - }, - { - "source": "/go/flutter-plugin-languages", - "destination": "https://docs.google.com/document/d/1Ok_mUPgmw8_l-ynLueEKtXm2Fs48lEVB0JqZd7M7uyA/edit", - "type": 301 - }, - { - "source": "/go/flutter-plugins-repo-migration", - "destination": "https://docs.google.com/document/d/1VihAgx1e-X_H8VRc9WmUv_7qqsi81eeHrrhwhHgwtjQ/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/flutter-skia-ios-font-problem", - "destination": "https://docs.google.com/document/d/1UkAhEKUEWNUjfKlqoBjJnx8zXrqErIqidPYjd9FBwsg", - "type": 301 - }, - { - "source": "/go/flutter-support-multi-architecture", - "destination": "https://docs.google.com/document/d/19tzWySgtgtTA99XQsjx5Pg0SFJeZKXyUlYavR0EXv8c/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/flutter-test-runner-simplification", - "destination": "https://docs.google.com/document/d/1BBjSAQRJYC3OxgpPq6MxEiO8Dp5qGYaxYYenF17mS1I/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/flutter-tool-extension-api", - "destination": "https://docs.google.com/document/d/12iXm23TP6e6qS1Ntx-i-azcBWByiUl_kWjRxRC2YTz8/edit?usp=sharing&resourcekey=0-pVl2giJzGAHqOYEaZagVow", - "type": 301 - }, - { - "source": "/go/flutter-web-scenelets", - "destination": "https://docs.google.com/document/d/1GUAx3aqdtEoaBMTNpsS1-i59QZlwTi6vUCASbaanPCo", - "type": 301 - }, - { - "source": "/go/focus-management", - "destination": "https://docs.google.com/document/d/1-NS3NJFd2j9kzKj5GOPoWq-G0B6jrpiCL892EX5Nxgk/edit", - "type": 301 - }, - { - "source": "/go/forge2d-workshop", - "destination": "https://codelabs.developers.google.com/codelabs/flutter-flame-forge2d#0", - "type": 301 - }, - { - "source": "/go/form-field-autovalidation", - "destination": "https://docs.google.com/document/d/16HAURcOtYAoHntDOEtdGy9KkKSItulG9Ldyjzdaosqo/edit", - "type": 301 - }, - { - "source": "/go/fragment-program-support", - "destination": "https://docs.google.com/document/d/1R0qx3znTe_wcKZoeWwkMlgxs1MtrdiPJ_1xiuExZuH0/edit", - "type": 301 - }, - { - "source": "/go/games-revenue", - "destination": "https://services.google.com/fh/files/blogs/gaming_ux_and_revenue_optimizations.pdf", - "type": 301 - }, - { - "source": "/go/generated-plugin-registration", - "destination": "https://docs.google.com/document/d/17-GIBYMgaoYS_G34w-fL9oe8W_GX70v6X2bhfKSBrdo/edit", - "type": 301 - }, - { - "source": "/go/generating-flutter-localizations", - "destination": "https://docs.google.com/document/d/18saQREDwBMPA_svFe9IkU22ljNXsLpYxiy__jzPCzEc/edit", - "type": 301 - }, - { - "source": "/go/global-selection", - "destination": "https://docs.google.com/document/d/1q_ns8VVTS2vaKqGwr_hheZpsoli52wAM0QWi9_uBdnk", - "type": 301 - }, - { - "source": "/go/global-surface-pool-for-macos", - "destination": "https://docs.google.com/document/d/1YUDyCQ1ocdFICOdWeZuuoOm_8bmmxWr0CnC-Y-qXuNI/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/globalkey-duplication-refactoring", - "destination": "https://docs.google.com/document/d/15U1XDLrP-SXfgeu5DBBsA7MQuFpDUW005Y2ObwmYWIc/", - "type": 301 - }, - { - "source": "/go/gn-ninja-engine-artifacts", - "destination": "https://docs.google.com/document/d/10C0yexPKlx4CdlF-fO4efGhQXEvDH92-RiAhBTj5EF8/", - "type": 301 - }, - { - "source": "/go/golden-workflow", - "destination": "https://docs.google.com/document/d/1MuIUz9pyE_bBZPbtMCj3pYgkdgG4s4Egh6FMknTngKw", - "type": 301 - }, - { - "source": "/go/google-apis", - "destination": "/data-and-backend/google-apis?utm_source=go-link&utm_medium=referral&utm_campaign=go-google-apis", - "type": 301 - }, - { - "source": "/go/google-testing-v2", - "destination": "https://docs.google.com/document/d/1Sg_CsGa3VxMNOXFKvoXEPNneD6OUuXIUsmFEjhluhDw", - "type": 301 - }, - { - "source": "/go/go-router-improvements", - "destination": "https://docs.google.com/document/d/1_mRXinbL_rb0mUt6DAFZ8kj0kh33ZjEMJuUq4PJgwj8/edit?usp=sharing&resourcekey=0-sYbRzE9opneOFZ5F8J3gGw", - "type": 301 - }, - { - "source": "/go/go-router-redirect", - "destination": "https://docs.google.com/document/d/1L940WGrM1YJ8BkJEpNd67fUqoqC6OsTfch4eH86E0xU/edit?usp=sharing&resourcekey=0-9oxsWU1tLpAACTUXyNjpkA", - "type": 301 - }, - { - "source": "/go/go-router-support-imperative-routing", - "destination": "https://docs.google.com/document/d/1HCgLi7ialw2Eqv-f_2z9ogdOfcmepIIqCsRhF-DT9dM/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/go-router-v2-5-breaking-changes", - "destination": "https://docs.google.com/document/d/1MoEM3C6sDvMUuZYCxlYoMI2QJlkONu8i9G53uy5xk-M/edit", - "type": 301 - }, - { - "source": "/go/go-router-v2-breaking-changes", - "destination": "https://docs.google.com/document/d/12iXx214phOag-XCetaGbSzziXGaHX82V-wMi_-8W04M/edit", - "type": 301 - }, - { - "source": "/go/go-router-v3-breaking-changes", - "destination": "https://docs.google.com/document/d/1TZ8G_TZ6Dqcpz64qXxArGhtHKFECDEPZFEuxYwQjJz4/edit#", - "type": 301 - }, - { - "source": "/go/go-router-v4-breaking-changes", - "destination": "https://docs.google.com/document/d/1T2LmzMj5HpD7hEexXL4Xz6vqoJD81bEGaa9NsV24faw/edit?usp=sharing&resourcekey=0-PuQbtDVl7ZabpJ2B9AHWUg", - "type": 301 - }, - { - "source": "/go/go-router-v5-breaking-changes", - "destination": "https://docs.google.com/document/d/10l22o4ml4Ss83UyzqUC8_xYOv_QjZEi80lJDNE4q7wM/edit?pli=1&resourcekey=0-U-BXBQzNfkk4v241Ow-vZg", - "type": 301 - }, - { - "source": "/go/go-router-v5-1-2-breaking-changes", - "destination": "https://docs.google.com/document/d/1HMUZA-lgeGFZ5JyU4g5jOFhbYAbk9ysfz9Ok1tGvqRw/edit?resourcekey=0-7otvjyBeefkQ9xQP9S2-9w#", - "type": 301 - }, - { - "source": "/go/go-router-v6-breaking-changes", - "destination": "https://docs.google.com/document/d/1CMJwd5Moq_scvHf-trRldy9RW5MU7_Y8IB1aTrny-6s/edit", - "type": 301 - }, - { - "source": "/go/go-router-v7-breaking-changes", - "destination": "https://docs.google.com/document/d/10Xbpifbs4E-zh6YE5akIO8raJq_m3FIXs6nUGdOspOg/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/go-router-v8-breaking-changes", - "destination": "https://docs.google.com/document/d/1VCuB85D5kYxPR3qYOjVmw8boAGKb7k62heFyfFHTOvw/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/go-router-v9-breaking-changes", - "destination": "https://docs.google.com/document/d/16plvWc9ablQsUs7w6bWDpTZ7PwMP4YUhV-qMQ3iljE0/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/go-router-v10-breaking-changes", - "destination": "https://docs.google.com/document/d/1vjupshmFJtfGSOppZxp7Tzkq7dotcLxCcpdluuNYe1o/edit?usp=sharing&resourcekey=0-aS66t4OcDTjJW50s-veSzQ", - "type": 301 - }, - { - "source": "/go/go-router-v11-breaking-changes", - "destination": "https://docs.google.com/document/d/1L2LPM_DBqKQx1pTRRfG7pi33P88iAypBju65rcMW_dU/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/go-router-v12-breaking-changes", - "destination": "https://docs.google.com/document/d/1KIf_08oHZ18BU0JpNG9dxWP7g4cH0xmF8m7Wmgq80Zk/edit?usp=sharing&resourcekey=0-twH8Zo2kaaIC-vlvVag4yw", - "type": 301 - }, - { - "source": "/go/go-router-v13-breaking-changes", - "destination": "https://docs.google.com/document/d/1FRdW_p29zH0I3KEMQKW_QMMN7owiQ5Wx-PUhhZpehSg/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/go-router-v14-breaking-changes", - "destination": "https://docs.google.com/document/d/1Z6RYo7rGIdtryvQvAntekF53zoz4iy4XvIamBxRWa4Y/edit?usp=sharing&resourcekey=0-CH_yB7ur4gLvSuqPtB5bZA", - "type": 301 - }, - { - "source": "/go/handling-synchronous-keyboard-events", - "destination": "https://docs.google.com/document/d/1rWXSjkb2ZKv-cpg26lVK0aZi4cVeXJ8j7YmSJdq2TOM/edit", - "type": 301 - }, - { - "source": "/go/hermetic-xcode-installation", - "destination": "https://docs.google.com/document/d/1EcXm4Woq48GR_ky07mEJka6NfV1vFBN2OHDEeGfPk34/edit?resourcekey=0-0Gjtt1I66mGJ8AwiCTlFNw", - "type": 301 - }, - { - "source": "/go/hero-refactor", - "destination": "https://docs.google.com/document/d/1JZVqykFjhDXcJyj_Ep5gfTmF-Eu4pQXXNRcLCN04tls/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/hero-use-cases", - "destination": "https://docs.google.com/document/d/1xCxKy_KtYK1dsqycsZyV3fOMJCxjZMPx87M-MoK-Tmc/edit?usp=sharing&resourcekey=0-kJYMNVh31SmrjEZ_xuZRPA", - "type": 301 - }, - { - "source": "/go/hot-ui-early-prototype-demos", - "destination": "https://docs.google.com/document/d/1ZaHqKnON8-WEhke3Y6FpHeuB5BNlxDQj1cCYB1SoI_g", - "type": 301 - }, - { - "source": "/go/i18n-user-guide", - "destination": "https://docs.google.com/document/d/10e0saTfAv32OZLRmONy866vnaw0I2jwL8zukykpgWBc/edit", - "type": 301 - }, - { - "source": "/go/icu-message-parser", - "destination": "https://docs.google.com/document/d/1wj5rBbuz1bXM1lvt0s0d35F5JRtIPmYUs1UDk1G3HLc/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/idle-gc-metrics", - "destination": "https://docs.google.com/document/d/1QjLTDr2cTsmS3DGIWdw9WSgqBMKJkFXD7Q8acziGIIA/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/image-decoding-registry", - "destination": "https://docs.google.com/document/d/167qWrlaSAmJm5muqQ-iiJKZy6Q7ZlugIeXmraXava5Y/edit?resourcekey=0-mVrr_zBiSI2Qmd6vqae7Bw", - "type": 301 - }, - { - "source": "/go/impeller-dart", - "destination": "https://docs.google.com/document/d/1Sh1BAC5c_kkuMVreo7ymBzPoMzb7lamZRPsI7GBXv5M/edit?resourcekey=0-5w8u2V-LS41tCHeoE8bDTQ", - "type": 301 - }, - { - "source": "/go/impeller-geometry", - "destination": "https://docs.google.com/document/d/1t-dzzi04nCdkIReoJp8ZyGNskqIip1TG3WhGEz7Osd8/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/infinite-scroll", - "destination": "https://docs.google.com/document/d/1TV2oF2iLIZtGd48336korxMTQrGizDAASAeZAeteMSc/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/inheritedwidget-subscription", - "destination": "https://docs.google.com/document/d/14BhIyj52NFYuyrWXe8bHJTZp7I67iKNmtOQXHCNH5GQ/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/inheritedwidget-workshop", - "destination": "https://dartpad.dev/workshops.html?webserver=https://dartpad-workshops-io2021.web.app/inherited_widget", - "type": 301 - }, - { - "source": "/go/input-field-autofill", - "destination": "https://docs.google.com/document/d/1wYLsoc7NiHl2jFueB4Ros09E3nDCotdWVovDCFSMcAk/edit", - "type": 301 - }, - { - "source": "/go/introduce-disposable", - "destination": "https://docs.google.com/document/d/1cjylBOczGk70x-sn1iZYVNAfpPZdtGWsm_KzoNQX0jc/edit", - "type": 301 - }, - { - "source": "/go/io22concurrency", - "destination": "https://github.com/goderbauer/io22concurrency", - "type": 301 - }, - { - "source": "/go/ios16-video-player-blank-screen", - "destination": "https://docs.google.com/document/d/1zelzxGf6kUEvtF6hbFRExs5UOz8ODtUCa7ogiouxbpo/edit", - "type": 301 - }, - { - "source": "/go/ios-17-text-input", - "destination": "https://docs.google.com/document/d/1sM3HMv-SQin39yX1aPUU7vtGv7Hcef1Quc3QhRXBl6A/edit?resourcekey=0-SFYD8vmOIkXiXCZvB1Wlcw", - "type": 301 - }, - { - "source": "/go/ios-autocorrection-highlight-support", - "destination": "https://docs.google.com/document/d/18ZO7ThKu2wwCofGOKZSInPsq93IzkQTRn9eiyskeh7I/edit", - "type": 301 - }, - { - "source": "/go/ios-camera-plugin-thread-model", - "destination": "https://docs.google.com/document/d/1Znjp-BduXIb1Ix3JOE1YKyJi1Z0d6rB-2q6Lt7j8xSo/edit", - "type": 301 - }, - { - "source": "/go/ios-storekit2", - "destination": "https://docs.google.com/document/d/1YBlb6J6rjgdtfnHYrQLJ4i_FLpboh41UnFoEF8TfyE0/edit?usp=sharing&resourcekey=0-3-p9q6ludxmTw6u3uMehgA", - "type": 301 - }, - { - "source": "/go/ios-keyboard-calculating-inset", - "destination": "https://docs.google.com/document/d/1pb1oqTanWSxwM8nAdm_-_ero3P6MM05vR1JjcdeFkiM/edit?usp=sharing&resourcekey=0-syHrzFB8A4zywVaHBicZNg", - "type": 301 - }, - { - "source": "/go/ios-platformview-backdrop-filter-blur", - "destination": "https://docs.google.com/document/d/1V7Jc_RGaknrBBPPBBKB8lT7f3PKhYr8sin35MSMFAf4/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/ios-platform-view-focus", - "destination": "https://docs.google.com/document/d/1GG8VfYeuVtTQHiMWQXbrSG5HEUorzqU8IGbNySVJ-bY", - "type": 301 - }, - { - "source": "/go/ios-plugins-swift-migration", - "destination": "https://docs.google.com/document/d/1XsaulkJA6_ZSpM7chkQLhQY25sQqhEMiqHMYzw8H85o/edit?resourcekey=0-_cUjF1c0iBvRLKfV-3gK5A", - "type": 301 - }, - { - "source": "/go/ios-platform-view-engine-overview", - "destination": "https://docs.google.com/document/d/1G6RNt_5y20g2SfI_V25c02PAXHGH9PgfGnk5dOmBdVI/", - "type": 301 - }, - { - "source": "/go/ios-platform-view-hittest-blocking", - "destination": "https://docs.google.com/document/d/1jVBK6fqLdN7qA8jGM8PryQeUYMYBNvP-808w4K6KBGw/edit?usp=sharing&resourcekey=0-D8jiTjjIZjFSiA20osvrHw", - "type": 301 - }, - { - "source": "/go/ios-pull-to-refresh", - "destination": "https://docs.google.com/document/d/1oUgNd3fsJ1QVuEmA6ENBT8vq3o6QKCRUPGCB6q91VgI/edit", - "type": 301 - }, - { - "source": "/go/ios-secure-paste", - "destination": "https://docs.google.com/document/d/16-8kn58h_oD902e7vPSh6W20aHRBJKyNOdSe5rbAe_g/edit?resourcekey=0-gVdJ3fbOybV70ZKeHU7fkQ", - "type": 301 - }, - { - "source": "/go/ios-scribble", - "destination": "https://docs.google.com/document/d/1mjQbsSRQnHuAgMNdouaSgTS-Xv-w57fdKfOUUafWpRo", - "type": 301 - }, - { - "source": "/go/ios-spell-check", - "destination": "https://docs.google.com/document/d/10Lvkz802QpzAGFi3Q9WVTMVUV-SPJyG3_xs8XfxG59Q/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/ios-switch-controll-scrolling", - "destination": "https://docs.google.com/document/d/1CZ2CRXihPQ1hBUXWODpyPVJ_2Yc0es6tkXrJSnpDajA", - "type": 301 - }, - { - "source": "/go/ios-wireless-device-discovery", - "destination": "https://docs.google.com/document/d/1AY4zhW9C3Q9Ml_YfjM00um1mwQxXblLU6lHrteBdiF4/edit?usp=sharing&resourcekey=0-LOZQ6YinTH1xuDd19vcpOw", - "type": 301 - }, - { - "source": "/go/issue-priority-standards", - "destination": "https://docs.google.com/document/d/1x-BpbFHUKndv2ojd6LmS-At-pxd6SrIbgfYUepjP7D4/", - "type": 301 - }, - { - "source": "/go/issue-triage-changes", - "destination": "https://docs.google.com/document/d/1KJVPMxzfFaL_gIB6Z3oNRTBKA-NP25YpM8xi3xUKbBY", - "type": 301 - }, - { - "source": "/go/job", - "destination": "https://forms.gle/omPUhztq27KnH1LG8", - "type": 301 - }, - { - "source": "/go/key-based-mouse-tracker-annotation", - "destination": "https://docs.google.com/document/d/18DCRSX4-KjJIrnru_Cv9cJjzQmUWM95r8n6uvbS45-E/edit", - "type": 301 - }, - { - "source": "/go/layout-builder-optimization", - "destination": "https://docs.google.com/document/d/1H8Z48vZAemV0Kw0It65JMoGhqVlDLQErkKZN8-r9pdU", - "type": 301 - }, - { - "source": "/go/leak-tracker-high-level-design", - "destination": "https://docs.google.com/document/d/158JfU9JKRqfhRPF5C0ceTuOAIWPber_MYftRiuTzlVE/edit?resourcekey=0-SFa6mZ69muVqA5eXi30wIQ", - "type": 301 - }, - { - "source": "/go/legacy-material", - "destination": "https://docs.google.com/document/d/1REsg982YG2MlspsMOiNLpu8OIWkyehRRQUXHMU3tAAM/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/lifecycle-debug-flag", - "destination": "https://docs.google.com/document/d/1WowGJhAMzYvwoyYLOzwjj1Jb0lwIjUpNfqvKjFWQZIM/edit", - "type": 301 - }, - { - "source": "/go/link-widget-2", - "destination": "https://docs.google.com/document/d/1-BJ4Rp6-glA9S__o97xDiNdd_lbuj7y6e394VE-5y4U", - "type": 301 - }, - { - "source": "/go/link-widget", - "destination": "https://docs.google.com/document/d/1HMadUQ2g7BRoCYmUvUYPAALU520fFv9PoPDkoz0wjAc", - "type": 301 - }, - { - "source": "/go/lints-migration", - "destination": "/release/breaking-changes/flutter-lints-package", - "type": 301 - }, - { - "source": "/go/localizing-datetime", - "destination": "https://docs.google.com/document/d/1QR3qLXWdroTVLbnAQ8mq-Ia6tsZ8NY3lmi7gySQAstU/edit", - "type": 301 - }, - { - "source": "/go/mac-voiceover-text-editing", - "destination": "https://docs.google.com/document/d/19YP1o4Shba6NzQTBH_EWC8y1GUhKAbo9dan4digFbZs", - "type": 301 - }, - { - "source": "/go/macros-for-leak-tracker", - "destination": "https://docs.google.com/document/d/1ireWmX4J5Jc6oDO1PmAXPlLdiAlCHvTz8SVC_Sg9KM8/edit?usp=sharing&resourcekey=0-yODb_SAStMgMefYpQeX8uQ", - "type": 301 - }, - { - "source": "/go/make-dropdownmenuitem-value-param-required", - "destination": "https://docs.google.com/document/d/1x5jsgnLxI3wSDwXRzO0n5hdXKn2a_XTJcsXdjFZLX44/edit", - "type": 301 - }, - { - "source": "/go/match-xcode-deployment-range", - "destination": "https://docs.google.com/document/d/1Y1WpbQPMOL3GvL8ow_OTD_-ENG3uuhS46CGRhLt12I8/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/material-banner-updates", - "destination": "https://docs.google.com/document/d/12Jet1gW2B_QFxig5B4K7f_lrpGhkbjR3LYpsKd4ZtJs/edit?usp=sharing&resourcekey=0-CfFoZ-0oqWPtz2WH0Jj0aw", - "type": 301 - }, - { - "source": "/go/material-button-migration-guide", - "destination": "https://docs.google.com/document/d/1yohSuYrvyya5V1hB6j9pJskavCdVq9sVeTqSoEPsWH0", - "type": 301 - }, - { - "source": "/go/material-button-system-updates", - "destination": "https://docs.google.com/document/d/10Fbn59hiHkppqJ6y_1Rjwl7klN-OvJXQU3SFEqicpME/edit", - "type": 301 - }, - { - "source": "/go/material-date-picker-redesign", - "destination": "https://docs.google.com/document/d/1AGKjBvO7EL2PuJGcwaa2PoCusjtTAvpYO7i_3A2vVpc/edit", - "type": 301 - }, - { - "source": "/go/material-symbols", - "destination": "https://docs.google.com/document/d/1UHRKDl8-lzl_hW_K2AHnpMwvdPo0vGPbDI7mqACWXJY/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/material-theme-system-updates", - "destination": "https://docs.google.com/document/d/1kzIOQN4QYfVsc5lMZgy_A-FWGXBAJBMySGqZqsJytcE/edit", - "type": 301 - }, - { - "source": "/go/max-length-enforcement", - "destination": "https://docs.google.com/document/d/1S900lQaTPOsePnIeE7o3-Ia8f39VZaSv0JnjNyBfCvU", - "type": 301 - }, - { - "source": "/go/medium-sized-code-samples", - "destination": "https://docs.google.com/document/d/1-jjYru2ljRSRSY4hn4qwLj9oQj8UiqrDOgY10-FE2tY/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/migrate-flutter-wiki", - "destination": "https://docs.google.com/document/d/1naONKJd-eqPj8zEVfHfjGa5TCZNyJErBY4ca1gjSCq4/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/migrate-flutter-wiki-spreadsheet", - "destination": "https://docs.google.com/spreadsheets/d/1x65189ZBdNiLRygpUYoU08pwvXD4M-Z157c6pm8deGI/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/migrating-to-vertical-alignment", - "destination": "https://docs.google.com/document/d/1vi6d6On6EXN82Q8KmXSLbWNnsnm9YjWtTWhSyjPF59Q/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/mixin-modifier", - "destination": "https://docs.google.com/document/d/1la2S1uJrNAawc1yja8hrSxFZJ0cFHnYopmaBYDLwMjg/edit?usp=sharing&resourcekey=0-br1LWMlYC63Q30VGiPtAHg", - "type": 301 - }, - { - "source": "/go/mouse-tracker-no-longer-attaches-annotations", - "destination": "https://docs.google.com/document/d/1YuOcepqZjNknAMz1si2m-jAiLT4MP28XEzBcKLHnNiA/edit", - "type": 301 - }, - { - "source": "/go/move-mouse-tracker-to-rendering", - "destination": "https://docs.google.com/document/d/1dYNOTZ4kdq6ndNHopjUlrGlGBw3W-3jMbnoNJouIYtE/edit", - "type": 301 - }, - { - "source": "/go/multiple-applications", - "destination": "https://docs.google.com/document/d/1alrr7qimNDazmQx5D80BSHh62V2OINO4UQ5N3HcPnmo/edit?resourcekey=0-wPs1Go9AiKR-yG0-xStuKw", - "type": 301 - }, - { - "source": "/go/multiple-engines", - "destination": "https://docs.google.com/document/d/1NwiZPWHd1te46eP2GWwIezDV9CdMQkODAMuF5kWdtLw", - "type": 301 - }, - { - "source": "/go/multiple-flutters", - "destination": "https://docs.google.com/document/d/1fdKRufqUzQvERcqNIUSq-GdabXc4k8VIsClzRElJ6KY", - "type": 301 - }, - { - "source": "/go/multiple-views", - "destination": "https://docs.google.com/document/d/1Z7Qrb08dOnfB8IxPgsyujVn4MsDcYPUUku9CeF70_S0/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/multi-view-embedder-apis", - "destination": "https://docs.google.com/document/d/1kegGJ235y1778-vzyyv90MgSHmYQcROTupMuLtEDBq0/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/multi-view-pipeline-and-rasterizer", - "destination": "https://docs.google.com/document/d/1xoD02qOxt2OSe3eN1ARsBUUWNFawdrxC2JXUURx7218/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/multi-view-sync-embedder-apis", - "destination": "https://docs.google.com/document/d/14z-e-x6M3P53ZMD6qBh4UaJ3nJdG_VdMNqGKERv31hw/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/multi-view-sync-over-async", - "destination": "https://docs.google.com/document/d/14z-e-x6M3P53ZMD6qBh4UaJ3nJdG_VdMNqGKERv31hw/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/multi-window-single-isolate", - "destination": "https://docs.google.com/document/d/1Wdqs79TY3b1VkOZMDmt12psg5AhO-q9k5-Uv28Snr8M/edit?resourcekey=0-qvOf6jo8bR9W4ozLrbLMcQ", - "type": 301 - }, - { - "source": "/go/multi-window-status", - "destination": "https://docs.google.com/document/d/13E27tD8_9f6lDgwg3MpGNTV8XIRCZH3ByI-t9kI9IUM/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/navigator-with-router", - "destination": "https://docs.google.com/document/d/1Q0jx0l4-xymph9O6zLaOY4d_f7YFpNWX_eGbzYxr9wY/edit", - "type": 301 - }, - { - "source": "/go/nshc", - "destination": "https://docs.google.com/document/d/1uwHQ3ZEGN2cH6bFwa3CCXTTXCeDfOWw-kUa_B6oTMuA/edit", - "type": 301 - }, - { - "source": "/go/null-safety-workshop", - "destination": "https://dartpad.dev/workshops.html?webserver=https://dartpad-workshops-io2021.web.app/null_safety_workshop", - "type": 301 - }, - { - "source": "/go/nullable-cupertinothemedata-brightness", - "destination": "https://docs.google.com/document/d/1qivq0CdkWGst5LU5iTLFUe_LTfLY84679-NxWiDgJXg/edit", - "type": 301 - }, - { - "source": "/go/ondirtycallbacks", - "destination": "https://docs.google.com/document/d/1Vk_QWC92fFGxx2oIrIjkCL0ZZFHxmrprlLedyQsnkus/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/opengl-on-ios", - "destination": "https://docs.google.com/document/d/1kvrb6HeTRN4noAKO82o6x-Ii61PW-BQ-8s9YNtLgosM", - "type": 301 - }, - { - "source": "/go/optimized-platform-view-layers", - "destination": "https://docs.google.com/document/d/1YHwVz7-F03psEzHxByGka_lIFaDV5K90BJMbNxQeK4k/edit?resourcekey=0-n4_VcUnMU-99sjJ6C1_Ycw#", - "type": 301 - }, - { - "source": "/go/os-adaptive-shortcut-activator", - "destination": "https://docs.google.com/document/d/11NWj13MSDw1XQg4MpYIeqzcCFGuzQ_Cz7tYXW7fqzPY/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/outline-input-border-padding-fix", - "destination": "https://docs.google.com/document/d/1QBM5oM9qPWVeFSPSqpXOFbdXV9dH9A9ABKsNMs1J2XU/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/overridable-text-actions", - "destination": "https://docs.google.com/document/d/11vmEZTjB4_E4el1IjTo2VBI2d_fR7tjQWeCajsQc-q4/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/performance-best-practices", - "destination": "https://docs.google.com/document/d/16bd3HtkuvzAk0uizDGTT3aNtjI8Mfr0f6C3ZVrYYqvI", - "type": 301 - }, - { - "source": "/go/performance-android-orientation-changes", - "destination": "https://docs.google.com/document/d/1L7NMG8YfWXoAuCFPv9oX11M1FEWXKbyaWc03mOmXJGc/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/permissible-slider-interaction", - "destination": "https://docs.google.com/document/d/151iaqbK-rZSRI34NdkvfIk4RkzOpAevoJ87TwiXfTpM/edit?usp=sharing&resourcekey=0-o0Gx6nrgl-fpw7_zUdMaQA", - "type": 301 - }, - { - "source": "/go/picture-lifecycle", - "destination": "https://docs.google.com/document/d/1aTBj38k6NSVsYRwySEBItlqxdQbjzurjmHsXAr3yGiI/edit?usp=sharing&resourcekey=0-TbKDu4BVInqphkzAlasBnw", - "type": 301 - }, - { - "source": "/go/platform-api-breakages", - "destination": "https://docs.google.com/document/d/1OxDsf_eot7TlsRn57z-1_dGbvuqnMxO7QEGIAmOCZtA/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/platform-based-key-events", - "destination": "https://docs.google.com/document/d/1FDuxxEh810XpY561SgeiyUR0gU2eVz5kRpCFI55ibec/edit", - "type": 301 - }, - { - "source": "/go/platform-channels-in-federated-plugins", - "destination": "https://docs.google.com/document/d/1BSrDA_FjLU-3T0H774RocJ4IYyc0ytMl937rAimGJdg/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/platform-interface-breaking-changes", - "destination": "https://docs.google.com/document/d/1LD7QjmzJZLCopUrFAAE98wOUQpjmguyGTN2wd_89Srs/edit#heading=h.xabf9lffxrkb", - "type": 301 - }, - { - "source": "/go/platinum-tests", - "destination": "https://docs.google.com/document/d/1yqGEMsLp6dstSlq56E2BqNP2PinKB9Z7WXC3pGjcD7Y/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/plugin-binding-review", - "destination": "https://docs.google.com/document/d/1-9Si_ocFYh-Wa1qKV4PV2ocywKDYdiR_1yO3twPvrfM", - "type": 301 - }, - { - "source": "/go/plugin-platforms", - "destination": "/packages-and-plugins/developing-packages#plugin-platforms", - "type": 301 - }, - { - "source": "/go/plugin-shared-ios-macos", - "destination": "https://docs.google.com/document/d/1JdgBrMXV0a6fnVoooILNTQB8dNCvLloT4D4TBkECQ6c/edit?usp=sharing&resourcekey=0-iPL3CzwOjUquabkMiucaHA", - "type": 301 - }, - { - "source": "/go/plugin-support-for-custom-embeddings", - "destination": "https://docs.google.com/document/d/1AJTHdC20JhD3viR4JWTghagIztqL5jg_R9NFQmnwAMw/edit?usp=sharing&resourcekey=0-qAECjzHKB5tM47azrVnH1w", - "type": 301 - }, - { - "source": "/go/plugins-list-migration", - "destination": "https://docs.google.com/document/d/1itYyHax0bzL3-hRtQd1zRPqJfOrLYih1fW0nPDJDytc/edit", - "type": 301 - }, - { - "source": "/go/plugins-team", - "destination": "https://docs.google.com/forms/d/e/1FAIpQLSfpPqJYuL_RzLaTCjrWYw73Zrrei3YiU8B5eTrDBh4fuGhbXw/viewform?usp=sf_link", - "type": 301 - }, - { - "source": "/go/profile-and-release-mode-for-custom-devices", - "destination": "https://docs.google.com/document/d/1jcMyJvsWLizYOIJAdyosLSW-Io0-E_MGsU_uL_Q4Wt8/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/programmatic-sheet", - "destination": "https://docs.google.com/document/d/15A3q1QrcvEU82uG4heTCKV230depmaJZTIP5rEz7V8g/edit?usp=sharing&resourcekey=0-q-TH-9-LVmygnp6Ku4xKIg", - "type": 301 - }, - { - "source": "/go/pub-automated-publishing", - "destination": "https://docs.google.com/document/d/1LSYVjDdgGNCc7p5Y2_hu8UA_Ms9MgZs3Jm974D1J344", - "type": 301 - }, - { - "source": "/go/pub-workspace", - "destination": "https://docs.google.com/document/d/1UEEAGdWIgVf0X7o8WPQCPmL4LSzaGCfJTM0pURoDLfE/edit?usp=sharing&resourcekey=0-c5CMaOoc_pg3ZwJKMAM0og", - "type": 301 - }, - { - "source": "/go/publish-on-homebrew", - "destination": "https://docs.google.com/document/d/1dk82qavQxT633LAonAM2xsqirWBmsqoHC4caJvYE584/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/pull-request-revert-api", - "destination": "https://docs.google.com/document/d/1mVVetlCjv9PM5gtg57nipDFd5TvWsd24rXPWS0FzVvE/edit?usp=sharing&resourcekey=0-McwG6wn0s6YQ7qxHffkcdw", - "type": 301 - }, - { - "source": "/go/pull-request-revert-api-v2", - "destination": "https://docs.google.com/document/d/1lfPVtrq_6YB-I6bEHEXRPeJCE32EvKxx-nSYmLpJIYI/edit?usp=sharing&resourcekey=0-BZghqoHCZBXuoQ2alTyRiw", - "type": 301 - }, - { - "source": "/go/rasterizer-pipeline-improvements", - "destination": "https://docs.google.com/document/d/1Hg5Wfx8JTgYmLboxFRr5DDd9EfdrdEuMbNGGMvDjd6E/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/reduce-ci-tests", - "destination": "https://docs.google.com/document/d/1-HRz-dXoIKjEgbCs9CF2-TO_3wSFK-V4ispXg-IoarY/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/reference-plugin", - "destination": "https://docs.google.com/document/d/1NJFbRMVxVL9YS_FcWi7W08DsBr_eRAJtQI9FQkk9MXk/edit", - "type": 301 - }, - { - "source": "/go/registered-actions", - "destination": "https://docs.google.com/document/d/1RrAWQ-rq-XcrjJx4Jegn8NdJKNHfLem6MkAJrI8Q_1w/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/remove-fab-accent-theme-dependency", - "destination": "https://docs.google.com/document/d/1kmXWerkykXXjMfibsc9O105NocBGH3dGW8UL2VH5Q48/edit", - "type": 301 - }, - { - "source": "/go/remove-include-flutter-groovy", - "destination": "https://docs.google.com/document/d/1OulURfRSWgJnnFA_cSup4ev7wrJwnZ7Siao_FGbLN9I", - "type": 301 - }, - { - "source": "/go/reorderable-list-view-update", - "destination": "https://docs.google.com/document/d/1JzNtMQ-jnPnSHEBoi6IO0x2qMMylwhvRslEDcmqiwSs", - "type": 301 - }, - { - "source": "/go/respecting-tabcontroller-animateto-duration", - "destination": "https://docs.google.com/document/d/1wzSzUYstDM-Kg5kwskyXcEUX7QTb-lBOso7Z5ebrCTk/edit", - "type": 301 - }, - { - "source": "/go/restoring-anonymous-routes", - "destination": "https://docs.google.com/document/d/1vnjDruoiDz0eEd4eVzg3IS6W_LRaFxNSlKWtU6iXp2M/edit", - "type": 301 - }, - { - "source": "/go/router-api-improvement", - "destination": "https://docs.google.com/document/d/1kbUPagtDl30jqYAq-mDMdd-ftHm3q9AMq55ufZCo9lE/edit?usp=sharing&resourcekey=0-JBqYh_UD3h9OSA8NS5OO4g", - "type": 301 - }, - { - "source": "/go/analyze-flutter-in-runtime", - "destination": "https://docs.google.com/document/d/1VZOv9NsmNeXaqM9h9EjKTz5cg7lEsA623XBfbojXU5U/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/rfc-32-bit-ios-support", - "destination": "https://docs.google.com/document/d/1Xz8B2w42ZGmrSdvQHo6LVLhiSZBIxnHxZxoZ-8oyRUc/edit", - "type": 301 - }, - { - "source": "/go/rfc-32-bit-ios-unsupported", - "destination": "https://docs.google.com/document/d/1cc5EOsuTlbf4dTDTwmkD3aKjS8XEbVCIqi9BFct9XHM/edit?resourcekey=0-Iv0gXDx7nSDCe3YDfxDKqw", - "type": 301 - }, - { - "source": "/go/rfc-android-j-deprecation", - "destination": "https://docs.google.com/document/d/1N06Pm1x19AIWorENk6OdmY5T8kMzPJUOZs8aL9VccG4/edit", - "type": 301 - }, - { - "source": "/go/rfc-android-k-deprecation", - "destination": "https://docs.google.com/document/d/1gQGvMk2ydxieivDjO8zqM7DdwOBybKVgoUqZUOCuTo0/edit?usp=sharing&resourcekey=0-ew5kIQr2FPVp7qyydtBQeg", - "type": 301 - }, - { - "source": "/go/rfc-ios8-deprecation", - "destination": "https://docs.google.com/document/d/1HtzJLUBnvi-VjcG3XEjwVHQGWeOzlrA77ozp9TvCWVE/edit", - "type": 301 - }, - { - "source": "/go/router-and-widgetsapp-integration", - "destination": "https://docs.google.com/document/d/1QodTFmwVr1yk8dyQvoqkeILxvm92oikB1bVhHTtp6R4/edit", - "type": 301 - }, - { - "source": "/go/semantics-roles", - "destination": "https://docs.google.com/document/d/1VRagJfHEbehVPa023xGUcFTqe5LgYGU2wYBmnNkwVmA/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/scaffold-messenger", - "destination": "https://docs.google.com/document/d/1TCH0T-X42z96lAcSkFttHAQMJ0MsvMojDKa6F4IQI3Y/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/scalable-flutter-infrastructure", - "destination": "https://docs.google.com/document/d/19GEUwAwJbNI-gO9ziV_oDESB28E_Pqppwx8ku9jdEqY", - "type": 301 - }, - { - "source": "/go/scale-selection-handles-ios-rich-text", - "destination": "https://docs.google.com/document/d/1XuvdYUzZQAxCLYT2H1DNtOi1s6fGmFE-cgmweaijfe4/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/scrollable-alert-dialog", - "destination": "https://docs.google.com/document/d/1qtVfjoKXE8BtkNbraKk9IzfRcks5btkKcyE4iGVwkbg/edit", - "type": 301 - }, - { - "source": "/go/sdk-per-platform-installers", - "destination": "https://docs.google.com/document/d/1VooN2bddQ52Z2B4qYi1Lp20PGhyYDr1AKaXwo9e7PCw", - "type": 301 - }, - { - "source": "/go/sfsymbols", - "destination": "https://docs.google.com/document/d/18V4ohqwp7fblJmhy7l9vVEPP1FGG4xXUorByjRHA19s/edit?usp=sharing&resourcekey=0-IVkjSy7jbMZ5FHPH_9yn9A", - "type": 301 - }, - { - "source": "/go/shaders", - "destination": "https://docs.google.com/document/d/1z9K5LernwQ0LVAzfbAMW6ITx63QRdRsoax1NLYEfm4Y/edit", - "type": 301 - }, - { - "source": "/go/sharding-mac-ios-builders", - "destination": "https://docs.google.com/document/d/1zLafqoFhKRMChUDGnnhzabnmhE2Vl1AWsrJzF8OWAGk/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/simple-flutter-tool-memory-benchmarks", - "destination": "https://docs.google.com/document/d/1vlARGxdABMeZoj4HF0p075-81q7G9gv_GnDYgoF7e3I", - "type": 301 - }, - { - "source": "/go/sixty-fps", - "destination": "https://docs.google.com/document/d/1FuNcBvAPghUyjeqQCOYxSt6lGDAQ1YxsNlOvrUx0Gko/edit", - "type": 301 - }, - { - "source": "/go/slider-v2", - "destination": "https://docs.google.com/document/d/1NCuRe-TUp8u6-Yzx_wrXZcqAwv5NP8hEJwUYSxVECwU/edit", - "type": 301 - }, - { - "source": "/go/sliver-flex-and-friends", - "destination": "https://docs.google.com/document/d/1W4_5oD5z7JHhUjuQYwS_NJRAv27Ih7IazcMm739O5JU/edit", - "type": 301 - }, - { - "source": "/go/sliver-workshop", - "destination": "https://dartpad.dev/workshops.html?webserver=https://dartpad-workshops-io2021.web.app/getting_started_with_slivers", - "type": 301 - }, - { - "source": "/go/state-restoration-design", - "destination": "https://docs.google.com/document/d/1KIiq5CdqnSXxQXbZIDy2Ukc-JHFyLak1JR8e2cm3eO4/edit", - "type": 301 - }, - { - "source": "/go/stateful-macro", - "destination": "https://docs.google.com/document/d/1TMVFn2jXw705px7bUggk8vTvpLrUjxEG9mzb-cSqZuo/edit?usp=sharing&resourcekey=0-0s5mvWGH3OcW8GN-Rmr36A", - "type": 301 - }, - { - "source": "/go/static-tooling-in-devtools", - "destination": "https://docs.google.com/document/d/1i6ISzzSKKDiiVftTnkCCvdgXEjK2eqYlPjCOKTjnvx8/edit?resourcekey=0-uyAiZEjFplyibsAkDAqKJw#", - "type": 301 - }, - { - "source": "/go/strategy-2022", - "destination": "https://docs.google.com/document/d/e/2PACX-1vTI9X2XHN_IY8wDO4epQSD1CkRT8WDxf2CEExp5Ef4Id206UOMopkYqU73FvAnnYG6NAecNSDo9TaEO/pub", - "type": 301 - }, - { - "source": "/go/strategy-2023", - "destination": "https://docs.google.com/document/d/e/2PACX-1vRknZ4Jkc-pWSMsDDyKwMrry7k2BSL_I94JCCQrg8FiHuy4fcypkgIVFbQVKPmzDQHfd20uZf2rFiXP/pub", - "type": 301 - }, - { - "source": "/go/studio-rasterization-context-for-multi-view", - "destination": "https://docs.google.com/document/d/1Eqb8xeoRKpLq2OVkJX_ux3azVLGJgJcaY5uSWzqdc_4/edit", - "type": 301 - }, - { - "source": "/go/subpixel-antialiasing", - "destination": "https://docs.google.com/document/d/1yEycgo5ivZ_lu2MAnMBLreZvROFdamy9-9q-QvMvL9U/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/supporting-dart-callbacks", - "destination": "https://docs.google.com/document/d/1k7OimxbxXzdv3U7-TfB88yG5hIScN3TH6Jcvdcl4izM/edit", - "type": 301 - }, - { - "source": "/go/swift-package-manager-plugins", - "destination": "https://docs.google.com/document/d/10S7anpgWdJ0wNCgsse8MvHY2PShrr9PeuufwYHi5v6U/edit", - "type": 301 - }, - { - "source": "/go/swift-package-manager-plugins-v2", - "destination": "https://docs.google.com/document/d/1oUvM5e2a3QrKAk9pTPExPp3my4FD4lYz9Z-EXsUGuHI/edit?usp=sharing&resourcekey=0-Vu8vKukw0Dqqv7pW5aIxKQ", - "type": 301 - }, - { - "source": "/go/synchronized-widgettester", - "destination": "https://docs.google.com/document/d/1VumsuG6dEFUVpPQLqqKJnhI0CoIS9fCAMN-NFHIPmo0/edit", - "type": 301 - }, - { - "source": "/go/system-mouse-cursor", - "destination": "https://docs.google.com/document/d/1bJLRy6flZ0wDCbpl2QA8SURUWXIvRJKMRRemxlOo1cA/edit", - "type": 301 - }, - { - "source": "/go/table-view", - "destination": "https://docs.google.com/document/d/15ecTZE1g3WeswLGFWrnEgMP6SyL6jDRdxOgPsczOcV0/edit?usp=sharing&resourcekey=0-yNd_qFhiPjz6z2TgezWc0A", - "type": 301 - }, - { - "source": "/go/table-view-merged-cells", - "destination": "https://docs.google.com/document/d/1UekXjG_VKmWYbsxDEzMqTb7F-6oUr05v998n5IqtVWs/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/tabs-and-text-fields", - "destination": "https://docs.google.com/document/d/1aHucsI0NWGWu2Dm_XFsBLxiTgJRM8h2XBB7PVAnVxlU/edit?usp=sharing&resourcekey=0-zLbXFlP_A2e_Yoi43vdiiw", - "type": 301 - }, - { - "source": "/go/take-flutter-home", - "destination": "https://github.com/flutter/put-flutter-to-work", - "type": 301 - }, - { - "source": "/go/table-development", - "destination": "https://docs.google.com/document/d/1fCE-zQNql0nnqJXhycpg902lhL7jrOOz-6sT8s8tv5c/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/template", - "destination": "https://docs.google.com/document/d/1SFRO8U2toOlAaZ38dsuEU7Wm5fn41wvBCWKiwADqfmw/edit", - "type": 301 - }, - { - "source": "/go/test-all-platforms", - "destination": "https://docs.google.com/document/d/1-gw2zYFs_jBqsFPpXRonRNLYn6XNgvm34jc9HT84VKE/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/test-widgets-flutter-binding-clock", - "destination": "https://docs.google.com/document/d/1EkkLbECNBwHgddBQAZqEy7iQLTIxR1rgChKzxcLwhio/edit", - "type": 301 - }, - { - "source": "/go/testing-code-samples", - "destination": "https://docs.google.com/document/d/11JXF-9d0u1jGJ9-gdpMGAZr5YudAiyHhXI_pT2vTpnw/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/text-editing-actions", - "destination": "https://docs.google.com/document/d/1QaVIr1bbOWJGNyyNsB75sXgTDRMuxP268sLGTBNDut0/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/text-editing-deltas", - "destination": "https://docs.google.com/document/d/1PXNd_LwJudiUTnCM2AXRxbd98_p4BlFf6qFhEhv3wvs/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/text-editing-model", - "destination": "https://docs.google.com/document/d/1lkpg4dfVZif9NJ_dDQ01QkwQC3OqzhUFahhjgv_rcbM/edit#", - "type": 301 - }, - { - "source": "/go/text-editing-magnifying-glass", - "destination": "https://docs.google.com/document/d/1RWq0Kd_xsHR8j7IXtgc25feV3RV8Hzq2KSQEVaDDXUs/edit?resourcekey=0-qLXzpPdvKRwQM8nlCijclQ", - "type": 301 - }, - { - "source": "/go/text-field-characters", - "destination": "https://docs.google.com/document/d/1OOFW0PEZf0orBl445YXJ3nfjyKOqZdmeQ6KU3glUh7s/edit", - "type": 301 - }, - { - "source": "/go/text-selection-menu-appearance", - "destination": "https://docs.google.com/document/d/1Or32nViSjym0Sk29HccxEzcEITj2oWdielOaeR5cmiY/edit", - "type": 301 - }, - { - "source": "/go/text-selection-menu-customization", - "destination": "https://docs.google.com/document/d/1hyay1TyUZB7DXzWw45-ruGMZM1yCMWEnC3DzOJYemuc/edit", - "type": 301 - }, - { - "source": "/go/text-selection-menu-modernization", - "destination": "https://docs.google.com/document/d/1qSEvbgi3m-OvB_dUKch8LHOk-iyPFeLgCsXbK0bI2DA/edit", - "type": 301 - }, - { - "source": "/go/text-selection-programatically", - "destination": "https://docs.google.com/document/d/1NK4GJ0Wk5eJ3IUw_9oAtz1oYgZ-Sn-kAKHxTvsgr75o/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/text-selection-theme", - "destination": "https://docs.google.com/document/d/1sCe7Y_lhREljtn6m0Uu_EycbS82zRvWnNtkfEwFX9W0", - "type": 301 - }, - { - "source": "/go/texttheme-m3", - "destination": "https://docs.google.com/document/d/1y3K08vL9rMTsGmF_T65fXmWJbsPZohvaVB3T6JuqgjM/edit?resourcekey=0-Gnl-tX58L4yPdV3NgeXFBg", - "type": 301 - }, - { - "source": "/go/theme-extensions", - "destination": "https://docs.google.com/document/d/1LbD4JqBgAfHex02oR3r2jyu9lTBBNBmyec2ovT59Kr8/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/tool-announcements", - "destination": "https://docs.google.com/document/d/1Lv9pkmouTPz5BoRJn441tNdVaLvw8pEtZqLUW4u0HLo/edit?resourcekey=0-8TKBpp9OgxmqvJSqLgtyoQ", - "type": 301 - }, - { - "source": "/go/tool-integration-test-support", - "destination": "https://docs.google.com/document/d/1jMMZpRAiQC2XTUFnzFsBrWwMsf7KyMuCScYgrJQJOV0/edit?resourcekey=0-ne9HbH1hXCHcIglomNfwtw", - "type": 301 - }, - { - "source": "/go/top-errors-analysis", - "destination": "https://docs.google.com/document/d/1ZJ9t_uPeXqZnoDOIVes_Yu2BBxP42l99nSfHQPfswZw/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/towards-improved-performance-tooling", - "destination": "https://docs.google.com/document/d/1wSDNcG0ww2V6JX1EE8avilCwnOiRVy83zSCWt916O0o", - "type": 301 - }, - { - "source": "/go/tracking-material-states", - "destination": "https://docs.google.com/document/d/1PJdsOoXhWdhnpYKlW5Nm2Di3Di5XARoYyHerMwWovXE", - "type": 301 - }, - { - "source": "/go/trackpad-gestures", - "destination": "https://docs.google.com/document/d/1oRvebwjpsC3KlxN1gOYnEdxtNpQDYpPtUFAkmTUe-K8/edit?usp=sharing&resourcekey=0-pt4_T7uggSTrsq2gWeGsYQ", - "type": 301 - }, - { - "source": "/go/triage-2022-rfp", - "destination": "https://docs.google.com/document/d/1Kyrh1WijM04XqtUkVbL2uwDthlG9v3sljgl9HRlU4bU/edit", - "type": 301 - }, - { - "source": "/go/triage-2023-rfc", - "destination": "https://docs.google.com/document/d/1RBvsolWL9nUkcEFhPZV4b-tstVUDHfHKzs-uQ3HiX-w/edit", - "type": 301 - }, - { - "source": "/go/try", - "destination": "https://github.com/flutter/put-flutter-to-work", - "type": 301 - }, - { - "source": "/go/ui-imitation-games", - "destination": "https://docs.google.com/document/d/1SbMjMiFhD2OZGTT3TCAOx6yfG-SYQ5F_fn7wwlZMumM/edit", - "type": 301 - }, - { - "source": "/go/union-typed-transform-stack-in-hit-test", - "destination": "https://docs.google.com/document/d/1EsH7g-oyQIDZpRteg94iKJKgD7kVngZWq9ngDe6ORbM/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/unobstructed-platform-views", - "destination": "https://docs.google.com/document/d/1_P3wa_nMqnhKsy-lDlNxT9GThZX2WhfVym4O4M7Q9qs/edit#", - "type": 301 - }, - { - "source": "/go/update-psc", - "destination": "https://docs.google.com/document/d/12OQx7h8UQzzAi0Kxh-saDC2dg7h2fghCCzwJ0ysPmZE/edit?usp=sharing&resourcekey=0-ATO-1Er3HO2HITm59I0IdA", - "type": 301 - }, - { - "source": "/go/update-scrollbars", - "destination": "https://docs.google.com/document/d/1mRlc-sRyadE6301aZsD1LJkPG2B9K97Bg_GDHvFhMQI/edit?usp=sharing&resourcekey=0-v4Gk8H280RaPo5qClmDqpA", - "type": 301 - }, - { - "source": "/go/update-text-theme-api", - "destination": "https://docs.google.com/document/d/1B1s4mm6OYM7mKQ3vZfSTI2HR_KljB78gN6oBHg_zYUs/edit", - "type": 301 - }, - { - "source": "/go/use-dart-style-in-flutter-engine", - "destination": "https://docs.google.com/document/d/1E2ZLNasExXMpSYcxWrd5qSp24WmhIPiFq9FjBC5GoVY?resourcekey=0-bmXuMwfoCn8a9QdQiMd3hA", - "type": 301 - }, - { - "source": "/go/variable-refresh-rate", - "destination": "https://docs.google.com/document/d/1O-ot6MydAl5pAr_XGnpR-Qq5A5CPDF6edaPu8xQtgCQ/edit?usp=sharing&resourcekey=0-LlXeGtGRC67XL4NrGoc91A", - "type": 301 - }, - { - "source": "/go/vector-graphics", - "destination": "https://docs.google.com/document/d/1YWffrlc6ZqRwfIiR1qwp1AOkS9JyA_lEURI8p5PsZlg/edit", - "type": 301 - }, - { - "source": "/go/verbatim-logical-keys-for-non-latin-layout", - "destination": "https://docs.google.com/document/d/1ZNgNxito-NVUS1JKlcjdzHUcKyyiupy8Za-jb131dD4/edit?usp=sharing&resourcekey=0-eeEZ5X0jAzuqSTdmPWlv0w", - "type": 301 - }, - { - "source": "/go/web-add-to-app", - "destination": "https://docs.google.com/document/d/1rFM0qmYds1JkntTruBh8eO72xbT2KoP9JdbizucAAwQ/edit", - "type": 301 - }, - { - "source": "/go/web-astral-projections", - "destination": "https://docs.google.com/document/d/1pvH-J8opXsjntTpFf1bbsbU8N1vFd8tPKvBgcNn8UKQ", - "type": 301 - }, - { - "source": "/go/web-declarative-bootstrap", - "destination": "https://docs.google.com/document/d/1jVXxC0tNDW45ypfVESyHipL2lHCX32GmFyJNO0u9c6Y/edit?resourcekey=0-AQ8z_0_U8Vq3JBdyracNuQ", - "type": 301 - }, - { - "source": "/go/web-multiview-js-api", - "destination": "https://docs.google.com/document/d/1ixwPBG7YIHEONc15t9SOmrfgDK3gghvkk7it_8AFOmw/edit?resourcekey=0-VQC2nby6Coe5OG-R833yXw", - "type": 301 - }, - { - "source": "/go/web-native-text-editing", - "destination": "https://docs.google.com/document/d/1t6qAX46tsR1tdBS42yro6G_5Igtrj7WzmKKiUI_JC-k/edit", - "type": 301 - }, - { - "source": "/go/web-plugins-layout", - "destination": "https://docs.google.com/document/d/1PeS-QSAFydHXhjZrqkub-GRPMs83roh8VwhbUScWuGQ", - "type": 301 - }, - { - "source": "/go/web-programmatic-bootstrap", - "destination": "https://docs.google.com/document/d/13kVA40gQ3T0FLqmV4w5rNvLHjmU6XWFbb7j0_YV7k9M", - "type": 301 - }, - { - "source": "/go/web-renderer-options", - "destination": "https://docs.google.com/document/d/1aY0iU16wf_sdT7nwfpjgT-IatHNfF3slTiYHKmxcIog", - "type": 301 - }, - { - "source": "/go/web-slot-content", - "destination": "https://docs.google.com/document/d/1U6aCSuzQsFpOP8_OseL-fwl2-MC2bxJAsgt2R_-sC30", - "type": 301 - }, - { - "source": "/go/webview_flutter_4_interface", - "destination": "https://docs.google.com/document/d/14tZpyj5oxB6a5ugaR7-kQrxD2wBgctlK5jxwvItv0LI/edit?usp=sharing&resourcekey=0-M5oUr3Pm3f5wtE7v4aQbkQ", - "type": 301 - }, - { - "source": "/go/widget-test-frame-precision", - "destination": "https://docs.google.com/document/d/1lECLbcmfWdyZFUG5TTGtem3l_SEefcJWHwPO_aZIqwM/edit?usp=sharing&resourcekey=0-6L6P_D571XnvK5oIfpe4MQ", - "type": 301 - }, - { - "source": "/go/widget-tree-image-cache", - "destination": "https://docs.google.com/document/d/1deEtxZk1VYRmzvkL4gTb3sEnjBrHejQkWObQ4yrP5jE/edit?pli=1#", - "type": 301 - }, - { - "source": "/go/widgetspan-in-selectabletext", - "destination": "https://docs.google.com/document/d/1nrVRytWVF-1hr8LvUKyENE5s074UInni9ZiColtIIxI", - "type": 301 - }, - { - "source": "/go/widget-budget", - "destination": "https://docs.google.com/document/d/1JTmf7ae8hWJ3zzqhI-__I9DcUJdQ3TopWsJbKyNDO5A/edit?usp=sharing&resourcekey=0--A0AbM19K-zDXRmIIzaUAg", - "type": 301 - }, - { - "source": "/go/windows-arm64", - "destination": "https://docs.google.com/document/d/1yuexY-EtzeVhU3V6RGBII_kH-znLSkQCspzW70jayZk/edit?resourcekey=0-8pQRSXSHQlwOo7QtCVLvBA#heading=h.pub7jnop54q0", - "type": 301 - }, - { - "source": "/go/windows-multi-view-ownership-updates", - "destination": "https://docs.google.com/document/d/1QSnnu4SK0H_Zuik_x2ceHc8KTpxcG_HDS9KSm6xd5iY/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/windows-x86-arm64-support", - "destination": "https://docs.google.com/document/d/1gAGqtTAjO0GntR8bPonIO1aZJnTghPCI_PHJPdNzEmo/edit?resourcekey=0-l1tL7iai47yw3bMl9IcpHw", - "type": 301 - }, - { - "source": "/go/wrap-layout", - "destination": "https://docs.google.com/document/d/1auZtWT1T5CkUKOUTUld8rF91iN7PvQoOF0IlBNXiDSo/edit?usp=sharing", - "type": 301 - }, - { - "source": "/go/wrap-popupmenu-with-safearea", - "destination": "https://docs.google.com/document/d/15uBmyEKiOeYGYt1PuBVf4SFK5YhH07EP9ylWP-H9mVE/edit?usp=sharing", - "type": 301 - } - ], - "headers": [ - { - "source": "/f/*.json", - "headers": [ - { - "key": "Access-Control-Allow-Origin", - "value": "*" - } - ] - }, - { - "source": "**/*.@(avif|jpg|jpeg|gif|png|webp|webm|svg|md|css|js)", - "headers": [ - { - "key": "Cache-Control", - "value": "max-age=3600" - }, - { - "key": "Access-Control-Allow-Origin", - "value": "*" - } - ] - }, - { - "source": "**", - "headers": [ - { - "key": "Referrer-Policy", - "value": "strict-origin-when-cross-origin" - }, - { - "key": "X-Content-Type-Options", - "value": "nosniff" - }, - { - "key": "X-Frame-Options", - "value": "'SAMEORIGIN' always;" - } - ] - } - ] - }, - "emulators": { - "hosting": { - "port": 5500 - } - } -}; export default data; \ No newline at end of file diff --git a/tool/host-redirect/src/generate_firebase_data.js b/tool/host-redirect/src/generate_firebase_data.js index 9460d33a1b..58926548a7 100644 --- a/tool/host-redirect/src/generate_firebase_data.js +++ b/tool/host-redirect/src/generate_firebase_data.js @@ -3,32 +3,38 @@ * 生成 firebase_json.js 文件 */ -const fs = require('fs'); +const fs = require('fs') // firebase.json 文件路径 -const READ_FILE_FIREBASE_JSON = '../../firebase.json'; +const READ_FILE_FIREBASE_JSON = '../../firebase.json' // 生成 firebase_json.js 的文件路径 -const WRITE_FILE_FIREBASE_JSON_JS = './src/data/'; +const WRITE_FILE_FIREBASE_JSON_JS = './src/data/' // 读取 JSON 文件 fs.readFile(READ_FILE_FIREBASE_JSON, 'utf8', (err, data) => { - if (err) { - console.error('Error reading the file:', err); - return; - } - try { - const jsonData = JSON.parse(data); - // 生成包含 JSON 数据的 JavaScript 文件内容 - const jsContent = `const data = ${JSON.stringify(jsonData, null, 2)}; export default data;`; - // 写入到新的 JavaScript 文件 - fs.writeFile(`${WRITE_FILE_FIREBASE_JSON_JS}firebase_json.js`, jsContent, 'utf8', (err) => { - if (err) { - console.error('Error writing the file:', err); - return; - } - console.log('firebase_json.js file has been generated successfully!'); - }); - } catch (parseErr) { - console.error('Error parsing JSON:', parseErr); - } -}); \ No newline at end of file + if (err) { + console.error('Error reading the file:', err) + return + } + try { + const jsonData = JSON.parse(data) + // 生成包含 JSON 数据的 JavaScript 文件内容 + const jsContent = `const data = ${JSON.stringify(jsonData, null, 2)}; export default data;` + fs.mkdir(WRITE_FILE_FIREBASE_JSON_JS, { recursive: true }, (err) => { + if (err) { + console.error('Failed to create directory:', err) + return + } + // 写入到新的 JavaScript 文件 + fs.writeFile(`${WRITE_FILE_FIREBASE_JSON_JS}firebase_json.js`, jsContent, 'utf8', (err) => { + if (err) { + console.error('Error writing the file:', err) + return + } + console.log('firebase_json.js file has been generated successfully!') + }) + }) + } catch (parseErr) { + console.error('Error parsing JSON:', parseErr) + } +}) \ No newline at end of file