From 36726aae7a645a0b32aa4880ea0cf493044e79a5 Mon Sep 17 00:00:00 2001 From: Amos Date: Wed, 26 Jun 2024 20:15:03 +0800 Subject: [PATCH] Update: Site variables --- src/_data/site.yml | 76 +- .../docs/admonitions/tip-hashCode-tree.md | 2 +- .../docs/community/china/pub-settings.md | 4 +- src/_includes/docs/dart-tool-win.md | 2 +- src/_includes/docs/dart-tool.md | 2 +- src/_includes/docs/dartpad-troubleshooting.md | 4 +- .../docs/debug/debug-flow-android.md | 2 +- .../docs/install/deprecated/analytics.md | 4 +- .../deprecated/android-setup-chromeos.md | 8 +- .../docs/install/deprecated/android-setup.md | 28 +- .../deprecated/chromeos-android-sdk-setup.md | 2 +- .../install/deprecated/macos-desktop-setup.md | 2 +- .../deprecated/windows-desktop-setup.md | 2 +- .../docs/install/devices/android-emulator.md | 10 +- .../docs/install/devices/android-physical.md | 12 +- .../docs/install/devices/ios-physical.md | 10 +- .../docs/install/reqs/macos/apple-silicon.md | 2 +- .../docs/install/reqs/macos/software.md | 2 +- .../docs/install/reqs/macos/zsh-config.md | 2 +- .../docs/install/test-drive/androidstudio.md | 2 +- .../docs/install/test-drive/vscode.md | 2 +- src/_includes/docs/platform-view-perf.md | 8 +- src/_layouts/base.html | 252 +- src/content/404.html | 10 +- .../android/add-flutter-fragment.md | 8 +- .../add-to-app/android/add-flutter-screen.md | 10 +- .../add-to-app/android/add-flutter-view.md | 40 +- .../add-to-app/android/plugin-setup.md | 6 +- .../add-to-app/android/project-setup.md | 2 +- src/content/add-to-app/index.md | 26 +- .../add-to-app/ios/add-flutter-screen.md | 26 +- src/content/add-to-app/ios/project-setup.md | 10 +- src/content/add-to-app/multiple-flutters.md | 12 +- src/content/add-to-app/performance.md | 40 +- src/content/codelabs/implicit-animations.md | 26 +- src/content/codelabs/index.md | 82 +- src/content/community/china/index.md | 2 +- .../adapter-pattern-in-flutter-n-dart.md | 4 +- .../factory-pattern-in-flutter-n-dart.md | 4 +- ...tter-accurate-rolling-exposure-practice.md | 10 +- .../flutter-state-management-with-mobx.md | 2 +- .../tutorials/how-to-use-dartpad-workshop.md | 2 +- .../memory-leak-monitoring-on-flutter.md | 6 +- .../observer-pattern-in-flutter-n-dart.md | 12 +- .../singleton-pattern-in-flutter-n-dart.md | 8 +- ...nagement-package-getx-provider-analysis.md | 26 +- ...sing-tensorflow-lite-plugin-for-flutter.md | 8 +- .../tutorials/understanding-navigator-v2.md | 6 +- .../cookbook/animation/animated-container.md | 10 +- .../cookbook/animation/opacity-animation.md | 6 +- .../animation/page-route-animation.md | 22 +- .../cookbook/animation/physics-simulation.md | 18 +- src/content/cookbook/design/drawer.md | 16 +- src/content/cookbook/design/fonts.md | 14 +- src/content/cookbook/design/orientation.md | 8 +- src/content/cookbook/design/package-fonts.md | 4 +- src/content/cookbook/design/snackbars.md | 6 +- src/content/cookbook/design/tabs.md | 14 +- src/content/cookbook/design/themes.md | 10 +- .../cookbook/effects/download-button.md | 2 +- src/content/cookbook/effects/drag-a-widget.md | 4 +- .../cookbook/effects/gradient-bubbles.md | 12 +- .../cookbook/effects/parallax-scrolling.md | 6 +- .../cookbook/effects/photo-filter-carousel.md | 10 +- .../cookbook/effects/shimmer-loading.md | 12 +- src/content/cookbook/forms/focus.md | 12 +- src/content/cookbook/forms/retrieve-input.md | 4 +- .../cookbook/forms/text-field-changes.md | 14 +- src/content/cookbook/forms/text-input.md | 12 +- src/content/cookbook/forms/validation.md | 10 +- .../games/achievements-leaderboard.md | 16 +- .../cookbook/games/firestore-multiplayer.md | 20 +- src/content/cookbook/gestures/dismissible.md | 2 +- .../cookbook/gestures/handling-taps.md | 8 +- src/content/cookbook/gestures/ripples.md | 2 +- .../cookbook/images/fading-in-images.md | 6 +- src/content/cookbook/images/network-image.md | 4 +- src/content/cookbook/lists/basic-list.md | 4 +- .../cookbook/lists/floating-app-bar.md | 14 +- src/content/cookbook/lists/grid-lists.md | 4 +- src/content/cookbook/lists/horizontal-list.md | 2 +- src/content/cookbook/lists/long-lists.md | 12 +- src/content/cookbook/lists/mixed-list.md | 2 +- src/content/cookbook/lists/spaced-items.md | 18 +- .../cookbook/maintenance/error-reporting.md | 8 +- .../cookbook/navigation/hero-animations.md | 2 +- .../cookbook/navigation/named-routes.md | 8 +- .../navigation/navigate-with-arguments.md | 14 +- .../cookbook/navigation/navigation-basics.md | 22 +- .../cookbook/navigation/passing-data.md | 8 +- .../cookbook/navigation/returning-data.md | 2 +- .../cookbook/navigation/set-up-app-links.md | 8 +- .../navigation/set-up-universal-links.md | 14 +- .../networking/authenticated-requests.md | 4 +- .../cookbook/networking/background-parsing.md | 12 +- .../cookbook/networking/delete-data.md | 20 +- src/content/cookbook/networking/fetch-data.md | 20 +- src/content/cookbook/networking/send-data.md | 22 +- .../cookbook/networking/update-data.md | 22 +- .../cookbook/networking/web-sockets.md | 10 +- src/content/cookbook/persistence/key-value.md | 2 +- .../persistence/reading-writing-files.md | 14 +- src/content/cookbook/persistence/sqlite.md | 10 +- .../cookbook/plugins/google-mobile-ads.md | 8 +- .../cookbook/plugins/picture-using-camera.md | 16 +- src/content/cookbook/plugins/play-video.md | 12 +- .../testing/integration/introduction.md | 2 +- .../cookbook/testing/integration/profiling.md | 8 +- .../cookbook/testing/unit/introduction.md | 8 +- src/content/cookbook/testing/unit/mocking.md | 4 +- .../cookbook/testing/widget/scrolling.md | 8 +- src/content/data-and-backend/firebase.md | 10 +- src/content/data-and-backend/google-apis.md | 46 +- src/content/data-and-backend/networking.md | 4 +- .../data-and-backend/serialization/json.md | 18 +- .../state-mgmt/ephemeral-vs-app.md | 4 +- .../data-and-backend/state-mgmt/options.md | 70 +- .../data-and-backend/state-mgmt/simple.md | 4 +- src/content/deployment/android.md | 54 +- src/content/deployment/cd.md | 20 +- src/content/deployment/flavors.md | 22 +- src/content/deployment/ios.md | 40 +- src/content/deployment/linux.md | 4 +- src/content/deployment/macos.md | 28 +- src/content/deployment/web.md | 10 +- src/content/deployment/windows.md | 10 +- src/content/embedded/index.md | 10 +- src/content/get-started/codelab-web.md | 14 +- src/content/get-started/codelab.md | 2 +- src/content/get-started/editor.md | 2 +- .../get-started/flutter-for/android-devs.md | 58 +- .../flutter-for/dart-swift-concurrency.md | 10 +- .../flutter-for/react-native-devs.md | 186 +- .../get-started/flutter-for/swiftui-devs.md | 136 +- .../get-started/flutter-for/uikit-devs.md | 42 +- .../get-started/flutter-for/web-devs.md | 32 +- .../flutter-for/xamarin-forms-devs.md | 76 +- src/content/get-started/fwe/fundamentals.md | 24 +- src/content/get-started/fwe/index.md | 2 +- src/content/get-started/fwe/layout.md | 46 +- src/content/get-started/fwe/local-caching.md | 18 +- src/content/get-started/fwe/networking.md | 18 +- .../get-started/fwe/state-management.md | 36 +- src/content/get-started/fwe/user-input.md | 66 +- src/content/get-started/install/help.md | 10 +- .../background-processes.md | 4 +- .../developing-packages.md | 32 +- src/content/packages-and-plugins/favorites.md | 6 +- .../packages-and-plugins/using-packages.md | 28 +- src/content/perf/app-size.md | 2 +- src/content/perf/best-practices.md | 48 +- src/content/perf/deferred-components.md | 20 +- src/content/perf/faq.md | 28 +- src/content/perf/impeller.md | 26 +- src/content/perf/index.md | 10 +- src/content/perf/isolates.md | 34 +- src/content/perf/metrics.md | 20 +- src/content/perf/rendering-performance.md | 6 +- src/content/perf/shader.md | 8 +- src/content/perf/ui-performance.md | 22 +- src/content/perf/web-performance.md | 14 +- .../platform-integration/android/c-interop.md | 18 +- .../android/platform-views.md | 20 +- .../android/restore-state-android.md | 44 +- .../android/splash-screen.md | 8 +- src/content/platform-integration/desktop.md | 10 +- .../ios/app-extensions.md | 24 +- .../ios/apple-frameworks.md | 42 +- .../platform-integration/ios/c-interop.md | 14 +- .../install-ios/install-ios-from-android.md | 2 +- .../ios/install-ios/install-ios-from-macos.md | 2 +- .../ios/install-ios/install-ios-from-web.md | 2 +- .../platform-integration/ios/ios-app-clip.md | 8 +- .../platform-integration/ios/ios-debugging.md | 2 +- .../platform-integration/ios/launch-screen.md | 6 +- .../ios/platform-views.md | 16 +- .../ios/restore-state-ios.md | 6 +- .../platform-integration/linux/building.md | 16 +- .../platform-integration/macos/building.md | 16 +- .../platform-integration/macos/c-interop.md | 16 +- .../install-macos-from-android.md | 2 +- .../install-macos/install-macos-from-ios.md | 2 +- .../install-macos/install-macos-from-web.md | 2 +- .../platform-adaptations.md | 62 +- .../platform-integration/platform-channels.md | 40 +- .../platform-integration/web/bootstrapping.md | 2 +- .../platform-integration/web/building.md | 8 +- src/content/platform-integration/web/faq.md | 20 +- src/content/platform-integration/web/index.md | 2 +- .../web/initialization.md | 8 +- .../platform-integration/web/renderers.md | 2 +- src/content/platform-integration/web/wasm.md | 18 +- .../platform-integration/web/web-images.md | 26 +- .../platform-integration/windows/building.md | 36 +- .../windows/extern_win.md | 2 +- src/content/posts/Flutter-io19.md | 8 +- ...-new-version-fluttercn-website-released.md | 8 +- ...announcing-adobe-xd-support-for-flutter.md | 8 +- .../announcing-codepen-support-for-flutter.md | 12 +- src/content/posts/announcing-dart-2-12.md | 10 +- src/content/posts/announcing-dart-2-13.md | 2 +- src/content/posts/announcing-dart-2-14.md | 2 +- src/content/posts/announcing-dart-2-15.md | 4 +- src/content/posts/announcing-dart-2-16.md | 4 +- ...cing-dart-2-5-super-charged-development.md | 12 +- src/content/posts/announcing-dart-2-6.md | 4 +- src/content/posts/announcing-dart-2-8.md | 14 +- src/content/posts/announcing-dart-3-2.md | 4 +- src/content/posts/announcing-flutter-1-12.md | 32 +- src/content/posts/announcing-flutter-1-17.md | 30 +- src/content/posts/announcing-flutter-1-20.md | 42 +- src/content/posts/announcing-flutter-1-22.md | 40 +- src/content/posts/announcing-flutter-1-7-9.md | 10 +- src/content/posts/announcing-flutter-2-2.md | 6 +- src/content/posts/announcing-flutter-2-8.md | 8 +- src/content/posts/announcing-flutter-2.md | 22 +- ...nouncing-flutter-3-3-at-flutter-vikings.md | 4 +- src/content/posts/announcing-flutter-3-7.md | 38 +- .../posts/announcing-flutter-for-windows.md | 18 +- ...r-the-google-mobile-ads-sdk-for-flutter.md | 6 +- ...uncing-the-flutter-casual-games-toolkit.md | 12 +- .../posts/announcing-xd-to-flutter-v2-0.md | 16 +- src/content/posts/dart-2-17.md | 8 +- src/content/posts/dart-2-18.md | 6 +- src/content/posts/dart-2-7.md | 6 +- ...e-use-flutter-service-300-million-users.md | 10 +- .../posts/flutter-2022-highlight-moment.md | 16 +- src/content/posts/flutter-2022-roadmap.md | 6 +- .../posts/flutter-bytedance-dev-story.md | 10 +- .../flutter-development-on-a-pixelbook.md | 20 +- .../posts/flutter-devs-survey-2022-q2.md | 4 +- ...utter-engage-china-developers-qa-part-1.md | 2 +- ...utter-engage-china-developers-qa-part-2.md | 2 +- .../posts/flutter-engage-china-event-recap.md | 4 +- .../posts/flutter-engage-event-recap.md | 6 +- src/content/posts/flutter-engage-warmup.md | 6 +- .../posts/flutter-forward-2023-recap.md | 26 +- src/content/posts/flutter-forward-2023.md | 8 +- .../posts/flutter-forward-china-live.md | 4 +- src/content/posts/flutter-highlight-2021.md | 24 +- .../flutter-news-from-gdd-china-flutter1.9.md | 18 +- .../posts/flutter-pubg-mobile-dev-story.md | 6 +- src/content/posts/flutter-slsa-progress.md | 2 +- .../posts/flutter-spring-2020-update.md | 4 +- ...r-web-support-hits-the-stable-milestone.md | 24 +- src/content/posts/google-2022-soas-5.md | 8 +- .../google-i-o-2021-flutter-workshops.md | 2 +- .../posts/google-io-2021-flutter-recap.md | 2 +- .../posts/how-its-made-i-o-photo-booth.md | 14 +- src/content/posts/i-o-pinball.md | 12 +- src/content/posts/introducing-flutter-3.md | 10 +- .../launching-flutter-12-at-mobile-world.md | 10 +- ...with-github-on-an-supply-chain-security.md | 6 +- ...-support-for-dependabot-version-updates.md | 2 +- ...rward-at-i-o-2023-with-flutter-and-dart.md | 8 +- ...i-platform-app-development-with-flutter.md | 8 +- ...s-usage-of-ides-for-flutter-development.md | 14 +- .../posts/use-flutter-to-speed-up-app-dev.md | 4 +- .../web-support-for-flutter-goes-beta.md | 8 +- src/content/posts/whats-new-in-flutter-2-0.md | 58 +- .../posts/whats-new-in-flutter-2-10.md | 26 +- src/content/posts/whats-new-in-flutter-2-2.md | 56 +- src/content/posts/whats-new-in-flutter-2-5.md | 4 +- src/content/posts/whats-new-in-flutter-2-8.md | 40 +- .../posts/whats-new-in-flutter-3-16.md | 48 +- .../posts/whats-new-in-flutter-3-19.md | 12 +- src/content/posts/whats-new-in-flutter-3-3.md | 24 +- src/content/posts/whats-new-in-flutter-3.md | 4 +- ...onderous-explore-the-world-with-flutter.md | 6 +- src/content/reference/flutter-cli.md | 10 +- .../reference/security-false-positives.md | 2 +- src/content/reference/user-surveys.md | 2 +- src/content/release/archive-whats-new.md | 350 +-- src/content/release/archive.md | 4 +- .../breaking-changes/1-22-deprecations.md | 196 +- .../breaking-changes/2-10-deprecations.md | 132 +- .../breaking-changes/2-2-deprecations.md | 30 +- .../breaking-changes/2-5-deprecations.md | 86 +- .../breaking-changes/3-10-deprecations.md | 70 +- .../breaking-changes/3-13-deprecations.md | 68 +- .../breaking-changes/3-16-deprecations.md | 42 +- .../breaking-changes/3-19-deprecations.md | 92 +- .../breaking-changes/3-3-deprecations.md | 32 +- .../breaking-changes/3-7-deprecations.md | 132 +- .../breaking-changes/actions-api-revision.md | 18 +- .../add-applifecyclestate-hidden.md | 6 +- ...currentAutofillScope-to-TextInputClient.md | 8 +- .../add-showAutocorrectionPromptRect.md | 6 +- ...oid-14-nonlinear-text-scaling-migration.md | 8 +- ...android-activity-control-surface-attach.md | 18 +- .../android-java-gradle-migration-guide.md | 2 +- .../android-predictive-back.md | 30 +- ...d-setIsRunningInRobolectricTest-removed.md | 6 +- .../android-surface-plugins.md | 18 +- ...android-v1-embedding-create-deprecation.md | 2 +- .../breaking-changes/androidx-migration.md | 10 +- .../animation-sheet-builder-display.md | 8 +- ...eturn-local-position-relative-to-object.md | 8 +- .../asset-manifest-dot-json.md | 8 +- .../bottom-navigation-title-to-label.md | 6 +- .../buildtextspan-buildcontext.md | 10 +- .../release/breaking-changes/buttons.md | 28 +- .../breaking-changes/can-request-focus.md | 18 +- .../breaking-changes/checkbox-fillColor.md | 6 +- .../chip-usedeletebuttontooltip-migration.md | 8 +- .../release/breaking-changes/clip-behavior.md | 42 +- .../clipboard-data-required.md | 8 +- .../breaking-changes/container-color.md | 12 +- .../release/breaking-changes/context-menus.md | 48 +- .../breaking-changes/cupertino-icons-1.0.0.md | 2 +- .../cupertino-tab-bar-localizations.md | 14 +- .../default-desktop-scrollbars.md | 20 +- .../default-scroll-behavior-drag.md | 18 +- .../breaking-changes/deprecate-buttonbar.md | 8 +- .../deprecate-textscalefactor.md | 18 +- .../release/breaking-changes/describe-enum.md | 10 +- .../breaking-changes/dialog-border-radius.md | 12 +- .../release/breaking-changes/dispose.md | 2 +- .../editable-text-focus-attachment.md | 4 +- .../editable-text-scroll-into-view.md | 4 +- .../eliminating-nullok-parameters.md | 102 +- .../enterText-trailing-caret.md | 8 +- .../fab-theme-data-accent-properties.md | 16 +- .../flutter-driver-migration.md | 2 +- .../flutter-gradle-plugin-apply.md | 2 +- .../breaking-changes/flutter-lints-package.md | 20 +- .../flutter-memory-allocations.md | 2 +- .../forgetchild-call-super.md | 8 +- .../form-field-autovalidation-api.md | 16 +- .../gesture-recognizer-add-allowed-pointer.md | 4 +- .../breaking-changes/hero-controller-scope.md | 10 +- .../ignoringsemantics-migration.md | 14 +- .../image-cache-and-provider.md | 16 +- .../image-provider-load-buffer.md | 6 +- .../imagecache-large-images.md | 10 +- src/content/release/breaking-changes/index.md | 8 +- .../insert-content-text-input-client.md | 10 +- ...iewcontroller-splashscreenview-nullable.md | 4 +- .../breaking-changes/key-event-migration.md | 110 +- .../breaking-changes/kotlin-version.md | 4 +- .../layout-builder-optimization.md | 14 +- .../breaking-changes/material-3-default.md | 20 +- .../breaking-changes/material-3-migration.md | 60 +- .../material-chip-button-semantics.md | 32 +- .../material-localized-strings.md | 12 +- .../breaking-changes/material-state.md | 4 +- .../breaking-changes/menus-text-style.md | 20 +- .../mock-platform-channels.md | 6 +- .../modal-router-semantics-order.md | 8 +- .../mouse-tracker-moved-to-rendering.md | 18 +- ...-tracker-no-longer-attaches-annotations.md | 14 +- .../breaking-changes/multi-touch-scrolling.md | 16 +- .../navigator-and-page-api.md | 8 +- .../network-policy-ios-android.md | 14 +- .../new-color-scheme-roles.md | 12 +- .../release/breaking-changes/notifications.md | 6 +- .../nullable-cupertinothemedata-brightness.md | 8 +- .../overlay-entry-rebuilds.md | 18 +- ...n-replaced-by-ZoomPageTransitionBuilder.md | 12 +- .../breaking-changes/pageview-controller.md | 2 +- .../breaking-changes/paint-enableDithering.md | 26 +- .../parent-data-widget-generic-type.md | 4 +- .../platform-views-using-html-slots-web.md | 14 +- .../breaking-changes/plugin-api-migration.md | 18 +- .../breaking-changes/popscope-with-result.md | 16 +- .../primary-scroll-controller-desktop.md | 14 +- ...s-on-web-uses-correct-origin-and-colors.md | 14 +- .../breaking-changes/renderbox-dry-layout.md | 22 +- .../rendereditable-layout-before-hit-test.md | 6 +- .../breaking-changes/rendering-changes.md | 12 +- .../breaking-changes/route-information-uri.md | 6 +- .../route-navigator-refactoring.md | 16 +- ...ansition-record-and-transition-delegate.md | 10 +- .../routesettings-copywith-migration.md | 4 +- .../breaking-changes/scaffold-messenger.md | 16 +- .../scribble-text-input-client.md | 10 +- .../scrollable-alert-dialog.md | 10 +- .../services-scheduler-dependency-reversed.md | 8 +- .../shortcut-key-event-migration.md | 12 +- .../splash-screen-migration.md | 4 +- .../supplemental-maybeOf-migration.md | 66 +- .../release/breaking-changes/tab-alignment.md | 10 +- .../target-platform-linux-windows.md | 10 +- .../release/breaking-changes/template.md | 12 +- .../breaking-changes/test-text-input.md | 8 +- .../test-widgets-flutter-binding-clock.md | 4 +- .../text-field-material-localizations.md | 12 +- .../text-input-client-current-value.md | 12 +- .../breaking-changes/text-selection-theme.md | 6 +- .../theme-data-accent-properties.md | 44 +- .../toggleable-active-color.md | 8 +- .../tooltip-semantics-order.md | 4 +- .../breaking-changes/trackpad-gestures.md | 20 +- ...nforcement-instead-of-maxLengthEnforced.md | 14 +- .../win-lifecycle-process-function.md | 2 +- .../breaking-changes/window-singleton.md | 24 +- .../windows-build-architecture.md | 4 +- .../breaking-changes/windows-dark-mode.md | 2 +- .../windows-show-window-migration.md | 4 +- .../windows-version-information.md | 2 +- .../release/breaking-changes/zone-errors.md | 8 +- src/content/release/compatibility-policy.md | 10 +- src/content/release/release-notes/index.md | 36 +- .../release-notes/release-notes-1.12.13.md | 2718 ++++++++--------- .../release-notes/release-notes-3.0.0.md | 4 +- .../release-notes/release-notes-3.10.0.md | 2 +- .../release-notes/release-notes-3.13.0.md | 2 +- .../release-notes/release-notes-3.16.0.md | 2 +- .../release-notes/release-notes-3.19.0.md | 2 +- .../release-notes/release-notes-3.22.0.md | 2 +- .../release-notes/release-notes-3.3.0.md | 2 +- .../release-notes/release-notes-3.7.0.md | 2 +- src/content/release/upgrade.md | 12 +- src/content/release/whats-new.md | 32 +- src/content/resources/ads-overview.md | 22 +- src/content/resources/ai-overview.md | 6 +- .../resources/architectural-overview.md | 270 +- src/content/resources/books.md | 4 +- src/content/resources/bootstrap-into-dart.md | 26 +- src/content/resources/bug-reports.md | 4 +- src/content/resources/courses.md | 2 +- src/content/resources/faq.md | 144 +- src/content/resources/games-toolkit.md | 78 +- .../resources/in-app-purchases-overview.md | 2 +- src/content/resources/news-toolkit.md | 4 +- src/content/resources/videos.md | 2 +- src/content/security/index.md | 8 +- src/content/testing/build-modes.md | 14 +- src/content/testing/code-debugging.md | 90 +- src/content/testing/common-errors.md | 10 +- src/content/testing/debugging.md | 2 +- src/content/testing/errors.md | 14 +- .../testing/integration-tests/index.md | 26 +- src/content/testing/native-debugging.md | 6 +- src/content/testing/overview.md | 4 +- src/content/testing/plugins-in-tests.md | 4 +- src/content/testing/testing-plugins.md | 14 +- src/content/tools/android-studio.md | 4 +- src/content/tools/devtools/app-size.md | 2 +- src/content/tools/devtools/cpu-profiler.md | 6 +- src/content/tools/devtools/debugger.md | 2 +- src/content/tools/devtools/deep-links.md | 2 +- src/content/tools/devtools/extensions.md | 4 +- src/content/tools/devtools/inspector.md | 44 +- src/content/tools/devtools/logging.md | 2 +- src/content/tools/devtools/memory.md | 10 +- src/content/tools/devtools/network.md | 2 +- src/content/tools/devtools/overview.md | 6 +- src/content/tools/devtools/performance.md | 6 +- .../tools/devtools/release-notes/index.md | 4 +- src/content/tools/flutter-fix.md | 4 +- src/content/tools/hot-reload.md | 10 +- src/content/tools/pubspec.md | 10 +- src/content/tools/sdk.md | 6 +- src/content/tools/vs-code.md | 4 +- .../accessibility.md | 8 +- .../internationalization.md | 62 +- .../ui/adaptive-responsive/best-practices.md | 18 +- src/content/ui/adaptive-responsive/general.md | 2 +- src/content/ui/adaptive-responsive/idioms.md | 22 +- src/content/ui/adaptive-responsive/input.md | 26 +- .../ui/adaptive-responsive/large-screens.md | 28 +- .../ui/adaptive-responsive/more-info.md | 20 +- .../safearea-mediaquery.md | 2 +- src/content/ui/animations/hero-animations.md | 34 +- .../ui/animations/implicit-animations.md | 6 +- src/content/ui/animations/index.md | 34 +- src/content/ui/animations/overview.md | 70 +- .../ui/animations/staggered-animations.md | 24 +- src/content/ui/animations/tutorial.md | 32 +- src/content/ui/assets/asset-transformation.md | 10 +- src/content/ui/assets/assets-and-images.md | 58 +- .../ui/design/graphics/fragment-shaders.md | 28 +- src/content/ui/design/material/index.md | 10 +- src/content/ui/design/text/typography.md | 10 +- src/content/ui/index.md | 2 +- .../ui/interactivity/actions-and-shortcuts.md | 12 +- src/content/ui/interactivity/focus.md | 40 +- .../ui/interactivity/gestures/drag-outside.md | 8 +- .../ui/interactivity/gestures/index.md | 22 +- src/content/ui/interactivity/index.md | 60 +- src/content/ui/layout/constraints.md | 40 +- src/content/ui/layout/index.md | 14 +- .../responsive/building-adaptive-apps.md | 106 +- src/content/ui/layout/scrolling/index.md | 16 +- src/content/ui/layout/scrolling/slivers.md | 10 +- src/content/ui/layout/tutorial.md | 4 +- src/content/ui/navigation/deep-linking.md | 10 +- src/content/ui/navigation/index.md | 14 +- src/content/ui/navigation/url-strategies.md | 14 +- src/layout-basics-old.md | 32 +- 491 files changed, 5955 insertions(+), 5943 deletions(-) diff --git a/src/_data/site.yml b/src/_data/site.yml index e4f77abe5a..052b8f7233 100644 --- a/src/_data/site.yml +++ b/src/_data/site.yml @@ -12,51 +12,51 @@ default_share_image: /assets/images/cn/flutter-cn-logo.png github_username: cfug branch: main repo: - organization: https://github.com/flutter - this: https://github.com/cfug/flutter.cn - flutter: https://github.com/flutter/flutter - samples: https://github.com/flutter/samples - packages: https://github.com/flutter/packages - gallery-archive: https://github.com/flutter/gallery - engine: https://github.com/flutter/engine - uxr: https://github.com/flutter/uxr - wonderous: https://github.com/gskinnerTeam/flutter-wonderous-app + organization: https://github.com/flutter/ + this: https://github.com/cfug/flutter.cn/ + flutter: https://github.com/flutter/flutter/ + samples: https://github.com/flutter/samples/ + packages: https://github.com/flutter/packages/ + gallery-archive: https://github.com/flutter/gallery/ + engine: https://github.com/flutter/engine/ + uxr: https://github.com/flutter/uxr/ + wonderous: https://github.com/gskinnerTeam/flutter-wonderous-app/ dart: - api: https://api.dart.cn + api: https://api.dart.cn/ sdk: channel: stable sdk: channel: stable # When changing this value also update it in src/_assets/js/archive.js social: - twitter: https://twitter.com/FlutterDev - youtube: https://www.youtube.com/@flutterdev -dart-site: https://dart.cn -news: https://news.dartlang.org -api: https://api.flutter-io.cn -main-api: https://main-api.flutter-io.cn -pub: https://pub-web.flutter-io.cn -pub-api: https://pub-web.flutter-io.cn/documentation -pub-pkg: https://pub-web.flutter-io.cn/packages -flutter-medium: https://medium.com/flutter -medium: https://medium.com -dartpad: https://dartpad.cn -gallery-archive: https://gallery.flutter.cn -material: https://m3.material-io.cn -material2: https://m2.material.io -so: https://stackoverflow.com -github: https://github.com -flutter-assets: https://flutter.github.io/assets-for-api-docs/assets -android-dev: https://developer.android.google.cn -apple-dev: https://developer.apple.com -google-blog: https://developers.googleblog.com -developers: https://developers.google.cn -codelabs: https://codelabs.developers.google.com -codelabs-cn: https://codelabs.flutter-io.cn # docs.flutter.cn -flutter-files-cn: https://files.flutter-io.cn # docs.flutter.cn -groups: https://groups.google.com -firebase: https://firebase.google.cn + twitter: https://twitter.com/FlutterDev/ + youtube: https://www.youtube.com/@flutterdev/ +dart-site: https://dart.cn/ +news: https://news.dartlang.org/ +api: https://api.flutter-io.cn/ +main-api: https://main-api.flutter-io.cn/ +pub: https://pub-web.flutter-io.cn/ +pub-api: https://pub-web.flutter-io.cn/documentation/ +pub-pkg: https://pub-web.flutter-io.cn/packages/ +flutter-medium: https://medium.com/flutter/ +medium: https://medium.com/ +dartpad: https://dartpad.cn/ +gallery-archive: https://gallery.flutter.cn/ +material: https://m3.material-io.cn/ +material2: https://m2.material.io/ +so: https://stackoverflow.com/ +github: https://github.com/ +flutter-assets: https://flutter.github.io/assets-for-api-docs/assets/ +android-dev: https://developer.android.google.cn/ +apple-dev: https://developer.apple.com/ +google-blog: https://developers.googleblog.com/ +developers: https://developers.google.cn/ +codelabs: https://codelabs.developers.google.com/ +codelabs-cn: https://codelabs.flutter-io.cn/ # docs.flutter.cn +flutter-files-cn: https://files.flutter-io.cn/ # docs.flutter.cn +groups: https://groups.google.com/ +firebase: https://firebase.google.cn/ wonderous: https://wonderous.app/ -youtube-site: https://youtube.com +youtube-site: https://youtube.com/ yt: set: 'frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen loading="lazy"' diff --git a/src/_includes/docs/admonitions/tip-hashCode-tree.md b/src/_includes/docs/admonitions/tip-hashCode-tree.md index c49ba4fd93..b63f907435 100644 --- a/src/_includes/docs/admonitions/tip-hashCode-tree.md +++ b/src/_includes/docs/admonitions/tip-hashCode-tree.md @@ -4,4 +4,4 @@ hexadecimal digits of its [`hashCode`][]. This hash serves as a unique identifier for that render object. ::: -[`hashCode`]: {{site.api}}/flutter/rendering/TextSelectionPoint/hashCode.html \ No newline at end of file +[`hashCode`]: {{site.api}}flutter/rendering/TextSelectionPoint/hashCode.html \ No newline at end of file diff --git a/src/_includes/docs/community/china/pub-settings.md b/src/_includes/docs/community/china/pub-settings.md index 593e80391b..996d38bd73 100644 --- a/src/_includes/docs/community/china/pub-settings.md +++ b/src/_includes/docs/community/china/pub-settings.md @@ -7,10 +7,10 @@ 1. Configure a proxy. To configure a proxy, check out the - [Dart documentation on proxies]({{site.dart-site}}/tools/pub/troubleshoot#pub-get-fails-from-behind-a-corporate-firewall). + [Dart documentation on proxies]({{site.dart-site}}tools/pub/troubleshoot#pub-get-fails-from-behind-a-corporate-firewall). 配置代理。 - 要配置代理,请查阅 [Dart 关于代理的文档]({{site.dart-site}}/tools/pub/troubleshoot#pub-get-fails-from-behind-a-corporate-firewall)。 + 要配置代理,请查阅 [Dart 关于代理的文档]({{site.dart-site}}tools/pub/troubleshoot#pub-get-fails-from-behind-a-corporate-firewall)。 {% comment %} From diff --git a/src/_includes/docs/dart-tool-win.md b/src/_includes/docs/dart-tool-win.md index 1423970d3a..0a0de84e9d 100644 --- a/src/_includes/docs/dart-tool-win.md +++ b/src/_includes/docs/dart-tool-win.md @@ -64,4 +64,4 @@ from the command line, or see the [dart tool][] page. ::: -[dart tool]: {{site.dart-site}}/tools/dart-tool +[dart tool]: {{site.dart-site}}tools/dart-tool diff --git a/src/_includes/docs/dart-tool.md b/src/_includes/docs/dart-tool.md index f141434cb3..a4e1c7e968 100644 --- a/src/_includes/docs/dart-tool.md +++ b/src/_includes/docs/dart-tool.md @@ -52,4 +52,4 @@ from the command line, or see the [dart tool][] page. ::: -[dart tool]: {{site.dart-site}}/tools/dart-tool +[dart tool]: {{site.dart-site}}tools/dart-tool diff --git a/src/_includes/docs/dartpad-troubleshooting.md b/src/_includes/docs/dartpad-troubleshooting.md index 8816d8bbc4..04386c03f9 100644 --- a/src/_includes/docs/dartpad-troubleshooting.md +++ b/src/_includes/docs/dartpad-troubleshooting.md @@ -2,10 +2,10 @@ This codelab uses embedded DartPads to display examples and exercises. If you see empty boxes instead of DartPads, check out -[Troubleshooting DartPad]({{site.dart-site}}/tools/dartpad/troubleshoot). +[Troubleshooting DartPad]({{site.dart-site}}tools/dartpad/troubleshoot). 本页面使用一个嵌入式版本的 DartPad 来显示示例和进行练习。 如果你看到的是空白内容,而不是 DartPad 内容, -请前往 [DartPad 故障排除页]({{site.dart-site}}/tools/dartpad/troubleshoot)。 +请前往 [DartPad 故障排除页]({{site.dart-site}}tools/dartpad/troubleshoot)。 ::: diff --git a/src/_includes/docs/debug/debug-flow-android.md b/src/_includes/docs/debug/debug-flow-android.md index 443da7b111..4e6b2750e4 100644 --- a/src/_includes/docs/debug/debug-flow-android.md +++ b/src/_includes/docs/debug/debug-flow-android.md @@ -5,7 +5,7 @@ check out [`flutter_gdb`][]. ::: [GNU Project Debugger]: https://www.sourceware.org/gdb/ -[`flutter_gdb`]: {{site.repo.engine}}/blob/main/sky/tools/flutter_gdb +[`flutter_gdb`]: {{site.repo.engine}}blob/main/sky/tools/flutter_gdb #### Build the Android version of the Flutter app in the Terminal diff --git a/src/_includes/docs/install/deprecated/analytics.md b/src/_includes/docs/install/deprecated/analytics.md index adf7801789..bf86e1b7a4 100644 --- a/src/_includes/docs/install/deprecated/analytics.md +++ b/src/_includes/docs/install/deprecated/analytics.md @@ -63,6 +63,6 @@ how data is handled by these services. [Google Terms of Service]: https://policies.google.com/terms [Privacy Policy]: https://policies.google.com/privacy -[crash reports]: {{site.repo.flutter}}/wiki/Flutter-CLI-crash-reporting -[`dart` tool]: {{site.dart-site}}/tools/dart-tool +[crash reports]: {{site.repo.flutter}}wiki/Flutter-CLI-crash-reporting +[`dart` tool]: {{site.dart-site}}tools/dart-tool ::: diff --git a/src/_includes/docs/install/deprecated/android-setup-chromeos.md b/src/_includes/docs/install/deprecated/android-setup-chromeos.md index aa97de97eb..fa71f325b4 100644 --- a/src/_includes/docs/install/deprecated/android-setup-chromeos.md +++ b/src/_includes/docs/install/deprecated/android-setup-chromeos.md @@ -17,9 +17,9 @@ Flutter 需要完整安装 Android Studio 才能支持其 Android 平台的依 ### 安装 Android Studio - 1. Download and install [Android Studio]({{site.android-dev}}/studio/install#chrome-os). + 1. Download and install [Android Studio]({{site.android-dev}}studio/install#chrome-os). - 下载并安装 [Android Studio]({{site.android-dev}}/studio/install#chrome-os)。 + 下载并安装 [Android Studio]({{site.android-dev}}studio/install#chrome-os)。 1. Start Android Studio, and go through the 'Android Studio Setup Wizard'. This installs the latest Android SDK, platform tools and build tooling @@ -81,10 +81,10 @@ you need an Android device running Android 5.0 (API level 21) or higher. 1. Enable **Developer options** and **USB debugging** on your device. Detailed instructions are available in the - [Android documentation]({{site.android-dev}}/studio/debug/dev-options). + [Android documentation]({{site.android-dev}}studio/debug/dev-options). 在你的设备上启动**开发者选项**以及 **USB 调试**工具。 - 详细步骤请查看 [Android 文档]({{site.android-dev}}/studio/debug/dev-options)。 + 详细步骤请查看 [Android 文档]({{site.android-dev}}studio/debug/dev-options)。 1. Using a USB cable, plug your phone into your computer. On your Chromebook, you might see a notification for diff --git a/src/_includes/docs/install/deprecated/android-setup.md b/src/_includes/docs/install/deprecated/android-setup.md index c516a8016a..cd9328b1b0 100644 --- a/src/_includes/docs/install/deprecated/android-setup.md +++ b/src/_includes/docs/install/deprecated/android-setup.md @@ -19,9 +19,9 @@ Flutter 依赖 Android Studio 的全量安装来为其提供 Android 平台的 {% render docs/help-link.md, location:'android-studio', section:'#android-setup' %} - 1. Download and install [Android Studio]({{site.android-dev}}/studio). + 1. Download and install [Android Studio]({{site.android-dev}}studio). - 下载并安装 [Android Studio]({{site.android-dev}}/studio)。 + 下载并安装 [Android Studio]({{site.android-dev}}studio)。 1. Start Android Studio, and go through the 'Android Studio Setup Wizard'. This installs the latest Android SDK, Android SDK Command-line Tools, @@ -56,22 +56,22 @@ you need an Android device running Android 5.0 (API level 21) or higher. 1. Enable **Developer options** and **USB debugging** on your device. Detailed instructions are available in the - [Android documentation]({{site.android-dev}}/studio/debug/dev-options). + [Android documentation]({{site.android-dev}}studio/debug/dev-options). 在设备上打开 **Developer options** 和 **USB debugging** 选项, - 你可以在 [Android documentation]({{site.android-dev}}/studio/debug/dev-options) 上查看更详细的方法介绍。 + 你可以在 [Android documentation]({{site.android-dev}}studio/debug/dev-options) 上查看更详细的方法介绍。 1. [Optional] To leverage wireless debugging, enable **Wireless debugging** on your device. Detailed instructions are available in the - [Android documentation]({{site.android-dev}}/studio/run/device#wireless). + [Android documentation]({{site.android-dev}}studio/run/device#wireless). [可选] 要使用无线调试,启用设备上的 **Wireless debugging**。 - 详细的操作步骤在 [Android 文档]({{site.android-dev}}/studio/run/device#wireless) 里有。 + 详细的操作步骤在 [Android 文档]({{site.android-dev}}studio/run/device#wireless) 里有。 1. Windows-only: Install the [Google USB - Driver]({{site.android-dev}}/studio/run/win-usb). + Driver]({{site.android-dev}}studio/run/win-usb). - 如果是在 Windows 平台上使用,需要安装 [Google USB Driver]({{site.android-dev}}/studio/run/win-usb) + 如果是在 Windows 平台上使用,需要安装 [Google USB Driver]({{site.android-dev}}studio/run/win-usb) 1. Using a USB cable, plug your phone into your computer. If prompted on your device, authorize your computer to access your device. @@ -103,11 +103,11 @@ follow these steps: 根据以下步骤来将 Flutter 应用运行或测试于你的 Android 模拟器上: 1. Enable - [VM acceleration]({{site.android-dev}}/studio/run/emulator-acceleration#accel-vm) + [VM acceleration]({{site.android-dev}}studio/run/emulator-acceleration#accel-vm) on your machine. 激活机器上的 - [VM acceleration]({{site.android-dev}}/studio/run/emulator-acceleration) 选项。 + [VM acceleration]({{site.android-dev}}studio/run/emulator-acceleration) 选项。 1. Start **Android Studio**, click the **Device Manager** icon, and select **Create Device** under **Virtual** tab... @@ -145,20 +145,20 @@ follow these steps: 1. Under Emulated Performance, select **Hardware - GLES 2.0** to enable [hardware - acceleration]({{site.android-dev}}/studio/run/emulator-acceleration). + acceleration]({{site.android-dev}}studio/run/emulator-acceleration). 在 Emulated Performance 下选择 **Hardware - GLES 2.0** 选项来开启 - [硬件加速]({{site.android-dev}}/studio/run/emulator-acceleration)。 + [硬件加速]({{site.android-dev}}studio/run/emulator-acceleration)。 1. Verify the AVD configuration is correct, and select **Finish**. 确保 AVD 选项配置正确,并选择 **Finish** 选项。 For details on the above steps, see [Managing - AVDs]({{site.android-dev}}/studio/run/managing-avds). + AVDs]({{site.android-dev}}studio/run/managing-avds). 想要查看上述步骤的更多详细信息, - 请查看 [Managing AVDs]({{site.android-dev}}/studio/run/managing-avds) 页面。 + 请查看 [Managing AVDs]({{site.android-dev}}studio/run/managing-avds) 页面。 1. In Android Virtual Device Manager, click **Run** in the toolbar. The emulator starts up and displays the default canvas for your diff --git a/src/_includes/docs/install/deprecated/chromeos-android-sdk-setup.md b/src/_includes/docs/install/deprecated/chromeos-android-sdk-setup.md index 044eea5b73..2093d9ac17 100644 --- a/src/_includes/docs/install/deprecated/chromeos-android-sdk-setup.md +++ b/src/_includes/docs/install/deprecated/chromeos-android-sdk-setup.md @@ -79,4 +79,4 @@ Now, run flutter doctor to accept the android-licenses: $ flutter doctor --android-licenses ``` -[Android SDK tools]: {{site.android-dev}}/studio/#downloads +[Android SDK tools]: {{site.android-dev}}studio/#downloads diff --git a/src/_includes/docs/install/deprecated/macos-desktop-setup.md b/src/_includes/docs/install/deprecated/macos-desktop-setup.md index aca1ad2af0..3b6dcc683d 100644 --- a/src/_includes/docs/install/deprecated/macos-desktop-setup.md +++ b/src/_includes/docs/install/deprecated/macos-desktop-setup.md @@ -17,4 +17,4 @@ you need the following in addition to the Flutter SDK: [CocoaPods][] 如果你需要使用插件 [CocoaPods]: https://cocoapods.org/ -[Xcode]: {{site.apple-dev}}/xcode/ +[Xcode]: {{site.apple-dev}}xcode/ diff --git a/src/_includes/docs/install/deprecated/windows-desktop-setup.md b/src/_includes/docs/install/deprecated/windows-desktop-setup.md index 588ea1d5d2..fb747094bc 100644 --- a/src/_includes/docs/install/deprecated/windows-desktop-setup.md +++ b/src/_includes/docs/install/deprecated/windows-desktop-setup.md @@ -18,7 +18,7 @@ {{site.alert.end}} -[Announcing Flutter for Windows]: {{site.flutter-medium}}/announcing-flutter-for-windows-6979d0d01fed +[Announcing Flutter for Windows]: {{site.flutter-medium}}announcing-flutter-for-windows-6979d0d01fed ### Additional Windows requirements diff --git a/src/_includes/docs/install/devices/android-emulator.md b/src/_includes/docs/install/devices/android-emulator.md index 772cfe1cb4..529a31aaa9 100644 --- a/src/_includes/docs/install/devices/android-emulator.md +++ b/src/_includes/docs/install/devices/android-emulator.md @@ -19,10 +19,10 @@ follow these steps to create and select an emulator. 请按照以下步骤创建并选择模拟器: 1. Enable - [VM acceleration]({{site.android-dev}}/studio/run/emulator-acceleration#accel-vm) + [VM acceleration]({{site.android-dev}}studio/run/emulator-acceleration#accel-vm) on your development computer. - 在你的开发电脑上启用 [VM acceleration]({{site.android-dev}}/studio/run/emulator-acceleration#accel-vm)。 + 在你的开发电脑上启用 [VM acceleration]({{site.android-dev}}studio/run/emulator-acceleration#accel-vm)。 1. Start **Android Studio**. @@ -134,10 +134,10 @@ follow these steps to create and select an emulator. 请单击 **Finish**。 To learn more about AVDs, check out - [Managing AVDs]({{site.android-dev}}/studio/run/managing-avds). + [Managing AVDs]({{site.android-dev}}studio/run/managing-avds). 想要了解更多有关 AVD 的信息,请查阅 - [Managing AVDs]({{site.android-dev}}/studio/run/managing-avds)。 + [Managing AVDs]({{site.android-dev}}studio/run/managing-avds)。 1. In the **Device Manager** dialog, click the **Run** icon to the right of your desired AVD. @@ -148,4 +148,4 @@ follow these steps to create and select an emulator. 单击所需 AVD 右侧的 **Run** 图标。 模拟器启动并显示所选 Android 操作系统的版本和设备默认的画布。 -[hardware acceleration]: {{site.android-dev}}/studio/run/emulator-acceleration +[hardware acceleration]: {{site.android-dev}}studio/run/emulator-acceleration diff --git a/src/_includes/docs/install/devices/android-physical.md b/src/_includes/docs/install/devices/android-physical.md index be81f80529..b908d51ede 100644 --- a/src/_includes/docs/install/devices/android-physical.md +++ b/src/_includes/docs/install/devices/android-physical.md @@ -12,25 +12,25 @@ you need an Android device running {{site.targetmin.android}} or later. 1. Enable **Developer options** and **USB debugging** on your device as described in the - [Android documentation]({{site.android-dev}}/studio/debug/dev-options). + [Android documentation]({{site.android-dev}}studio/debug/dev-options). - 按照 [Android 文档]({{site.android-dev}}/studio/debug/dev-options) + 按照 [Android 文档]({{site.android-dev}}studio/debug/dev-options) 中的说明, 在设备上启用 **开发者选项** 和 **USB 调试**。 1. [Optional] To leverage wireless debugging, enable **Wireless debugging** on your device as described in the - [Android documentation]({{site.android-dev}}/studio/run/device#wireless). + [Android documentation]({{site.android-dev}}studio/run/device#wireless). [可选] 如果要利用无线调试, - 请按照 [Android 文档]({{site.android-dev}}/studio/run/device#wireless) + 请按照 [Android 文档]({{site.android-dev}}studio/run/device#wireless) 中的说明在设备上启用 **无线调试**。 {%- if include.devos == 'Windows' %} -1. Install the [Google USB Driver]({{site.android-dev}}/studio/run/win-usb). +1. Install the [Google USB Driver]({{site.android-dev}}studio/run/win-usb). - 安装 [Google USB Driver]({{site.android-dev}}/studio/run/win-usb)。 + 安装 [Google USB Driver]({{site.android-dev}}studio/run/win-usb)。 {% endif %} diff --git a/src/_includes/docs/install/devices/ios-physical.md b/src/_includes/docs/install/devices/ios-physical.md index 2ef07dab53..fd966ea887 100644 --- a/src/_includes/docs/install/devices/ios-physical.md +++ b/src/_includes/docs/install/devices/ios-physical.md @@ -487,12 +487,12 @@ $ flutter run --device-timeout 60 ::: [Check the app's Bundle ID]: /assets/images/docs/setup/xcode-unique-bundle-id.png -[Choosing a Membership]: {{site.apple-dev}}/support/compare-memberships +[Choosing a Membership]: {{site.apple-dev}}support/compare-memberships [Trust Mac]: /assets/images/docs/setup/trust-computer.png [Xcode account add]: /assets/images/docs/setup/xcode-account.png -[Developer Mode]: {{site.apple-dev}}/documentation/xcode/enabling-developer-mode-on-a-device -[Apple's Developer Forums]: {{site.apple-dev}}/forums/ +[Developer Mode]: {{site.apple-dev}}documentation/xcode/enabling-developer-mode-on-a-device +[Apple's Developer Forums]: {{site.apple-dev}}forums/ [Debugging your add-to-app module]: /add-to-app/debugging/#wireless-debugging [Apple's documentation on pairing a wireless device with Xcode]: https://help.apple.com/xcode/mac/9.0/index.html?localePath=en.lproj#/devbc48d1bad -[Apple Developer]: {{site.apple-dev}}/programs/ -[Apple Developer Account]: {{site.apple-dev}}/account +[Apple Developer]: {{site.apple-dev}}programs/ +[Apple Developer Account]: {{site.apple-dev}}account diff --git a/src/_includes/docs/install/reqs/macos/apple-silicon.md b/src/_includes/docs/install/reqs/macos/apple-silicon.md index 164093cefe..8417bb2279 100644 --- a/src/_includes/docs/install/reqs/macos/apple-silicon.md +++ b/src/_includes/docs/install/reqs/macos/apple-silicon.md @@ -15,4 +15,4 @@ $ sudo softwareupdate --install-rosetta --agree-to-license [Apple silicon]: https://support.apple.com/en-us/HT211814 [rosetta]: https://support.apple.com/en-us/HT211861 -[need-rosetta]: {{site.repo.this}}/pull/7119#issuecomment-1124537969 +[need-rosetta]: {{site.repo.this}}pull/7119#issuecomment-1124537969 diff --git a/src/_includes/docs/install/reqs/macos/software.md b/src/_includes/docs/install/reqs/macos/software.md index dace4e1a9f..ebc37ea93f 100644 --- a/src/_includes/docs/install/reqs/macos/software.md +++ b/src/_includes/docs/install/reqs/macos/software.md @@ -46,6 +46,6 @@ If you need to install `git`, type `brew install git`. [Git]: https://formulae.brew.sh/formula/git [Android Studio]: https://developer.android.com/studio/install#mac -[Xcode]: {{site.apple-dev}}/xcode/ +[Xcode]: {{site.apple-dev}}xcode/ [CocoaPods]: https://cocoapods.org/ [Google Chrome]: https://www.google.com/chrome/dr/download/ diff --git a/src/_includes/docs/install/reqs/macos/zsh-config.md b/src/_includes/docs/install/reqs/macos/zsh-config.md index 976c189ff6..337317ffea 100644 --- a/src/_includes/docs/install/reqs/macos/zsh-config.md +++ b/src/_includes/docs/install/reqs/macos/zsh-config.md @@ -65,5 +65,5 @@ in the macOS documentation. -[install-zsh]: https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH +[install-zsh]: {{site.github}}ohmyzsh/ohmyzsh/wiki/Installing-ZSH [dscl]: https://ss64.com/mac/dscl.html diff --git a/src/_includes/docs/install/test-drive/androidstudio.md b/src/_includes/docs/install/test-drive/androidstudio.md index 860ece221f..d4c1d8b118 100644 --- a/src/_includes/docs/install/test-drive/androidstudio.md +++ b/src/_includes/docs/install/test-drive/androidstudio.md @@ -75,6 +75,6 @@ uses [Material Components][]. {% include docs/install/test-drive/try-hot-reload.md save_changes=save_changes ide="Android Studio" %} [Main IntelliJ toolbar]: /assets/images/docs/tools/android-studio/main-toolbar.png -[Material Components]: {{site.material}}/components +[Material Components]: {{site.material}}components diff --git a/src/_includes/docs/install/test-drive/vscode.md b/src/_includes/docs/install/test-drive/vscode.md index 9a4b1ba65e..39664134d3 100644 --- a/src/_includes/docs/install/test-drive/vscode.md +++ b/src/_includes/docs/install/test-drive/vscode.md @@ -71,6 +71,6 @@ hot reload at this time. {% include docs/install/test-drive/try-hot-reload.md save_changes=save_changes ide="VS Code" %} -[Material Components]: {{site.material}}/components +[Material Components]: {{site.material}}components diff --git a/src/_includes/docs/platform-view-perf.md b/src/_includes/docs/platform-view-perf.md index abd8800b2f..9839c88ec2 100644 --- a/src/_includes/docs/platform-view-perf.md +++ b/src/_includes/docs/platform-view-perf.md @@ -66,7 +66,7 @@ For more information, see: * [`FlutterTextureRegistry`][] * [`FlutterImageView`][] -[`FlutterImageView`]: {{site.api}}/javadoc/io/flutter/embedding/android/FlutterImageView.html -[`FlutterTextureRegistry`]: {{site.api}}/ios-embedder/protocol_flutter_texture_registry-p.html -[`TextureLayer`]: {{site.api}}/flutter/rendering/TextureLayer-class.html -[`TextureRegistry`]: {{site.api}}/javadoc/io/flutter/view/TextureRegistry.html +[`FlutterImageView`]: {{site.api}}javadoc/io/flutter/embedding/android/FlutterImageView.html +[`FlutterTextureRegistry`]: {{site.api}}ios-embedder/protocol_flutter_texture_registry-p.html +[`TextureLayer`]: {{site.api}}flutter/rendering/TextureLayer-class.html +[`TextureRegistry`]: {{site.api}}javadoc/io/flutter/view/TextureRegistry.html diff --git a/src/_layouts/base.html b/src/_layouts/base.html index fd8d49ee84..0bc8bfec77 100644 --- a/src/_layouts/base.html +++ b/src/_layouts/base.html @@ -3,129 +3,141 @@ - - - {% if short-title %}{{short-title}}{% else %}{{title}}{% endif %} | {{site.title}} - - - - - - {% unless strip_fonts == true -%} - - - {% endunless -%} - - {%- if isProduction == true -%} - - - - - {% endif -%} - - {% assign desc = description | default: site.description | strip_html | strip_newlines | truncate: 160 -%} - {% unless desc and desc != '' or page.url contains '/posts' or page.url contains '/community' -%} - {% assign error = page.url | append: ' must have a description specified!' -%} - {{ error | throw_error }} - {% endunless %} - - {% assign og_image_path = image.path | default: layout.image.path | default: site.default_share_image -%} - - - - - - - - - - - {% unless strip_fonts == true -%} - - - - + + + + {% endif -%} + + {% assign desc = description | default: site.description | strip_html | strip_newlines | truncate: 160 -%} + {% unless desc and desc != '' or page.url contains '/posts' or page.url contains '/community' -%} + {% assign error = page.url | append: ' must have a description specified!' -%} + {{ error | throw_error }} + {% endunless %} + + {% assign og_image_path = image.path | default: layout.image.path | default: site.default_share_image -%} + + + + + + + + + + + {% unless strip_fonts == true -%} + + + + - {% endunless -%} - - {% if diff2html -%} - - - - {% endif -%} - - - - - {% if css -%} - {% for cssFile in css -%} - {% assign asset_path = '/assets/css/{{cssFile}}' -%} - - {% endfor -%} - {% endif -%} - - - - - - {%- if isProduction == true -%} - - {% endif -%} - -
- - {% include header.html %} - - {% render banner.html %} - - {{ content }} - - {% render footer.html %} - - - - - - - - - - - {% if js -%} - {% for jsFile in js -%} - - {% endfor -%} - {% endif -%} + {% endunless -%} + + {% if diff2html -%} + + + + {% endif -%} + + + + + {% if css -%} + {% for cssFile in css -%} + {% assign asset_path = '/assets/css/{{cssFile}}' -%} + + {% endfor -%} + {% endif -%} + + + + + + {%- if isProduction == true -%} + + {% endif -%} + +
+ + {% include header.html %} + + {% render banner.html %} + + {{ content }} + + {% render footer.html %} + + + + + + + + + + + {% if js -%} + {% for jsFile in js -%} + + {% endfor -%} + {% endif -%} + \ No newline at end of file diff --git a/src/content/404.html b/src/content/404.html index d6b69c44c2..5b48931657 100644 --- a/src/content/404.html +++ b/src/content/404.html @@ -14,15 +14,15 @@

404

But Dash is here to help - maybe one of these will point you in the right direction?

- + \ No newline at end of file diff --git a/src/content/add-to-app/android/add-flutter-fragment.md b/src/content/add-to-app/android/add-flutter-fragment.md index 69b704016a..6331aa97d0 100644 --- a/src/content/add-to-app/android/add-flutter-fragment.md +++ b/src/content/add-to-app/android/add-flutter-fragment.md @@ -823,9 +823,9 @@ before you disable access. ::: -[`Fragment`]: {{site.android-dev}}/guide/components/fragments -[`FlutterFragment`]: {{site.api}}/javadoc/io/flutter/embedding/android/FlutterFragment.html +[`Fragment`]: {{site.android-dev}}guide/components/fragments +[`FlutterFragment`]: {{site.api}}javadoc/io/flutter/embedding/android/FlutterFragment.html [using a `FlutterActivity`]: /add-to-app/android/add-flutter-screen -[`FlutterEngine`]: {{site.api}}/javadoc/io/flutter/embedding/engine/FlutterEngine.html -[`FlutterEngineCache`]: {{site.api}}/javadoc/io/flutter/embedding/engine/FlutterEngineCache.html +[`FlutterEngine`]: {{site.api}}javadoc/io/flutter/embedding/engine/FlutterEngine.html +[`FlutterEngineCache`]: {{site.api}}javadoc/io/flutter/embedding/engine/FlutterEngineCache.html [splash screen guide]: /platform-integration/android/splash-screen diff --git a/src/content/add-to-app/android/add-flutter-screen.md b/src/content/add-to-app/android/add-flutter-screen.md index 76032f7e03..fd2cf15d60 100644 --- a/src/content/add-to-app/android/add-flutter-screen.md +++ b/src/content/add-to-app/android/add-flutter-screen.md @@ -544,8 +544,8 @@ though your `FlutterActivity` has an opaque background. ::: -[`FlutterActivity`]: {{site.api}}/javadoc/io/flutter/embedding/android/FlutterActivity.html -[`Activity`]: {{site.android-dev}}/reference/android/app/Activity -[`FlutterEngine`]: {{site.api}}/javadoc/io/flutter/embedding/engine/FlutterEngine.html -[`FlutterEngineCache`]: {{site.api}}/javadoc/io/flutter/embedding/engine/FlutterEngineCache.html -[`FlutterFragment`]: {{site.api}}/javadoc/io/flutter/embedding/android/FlutterFragment.html +[`FlutterActivity`]: {{site.api}}javadoc/io/flutter/embedding/android/FlutterActivity.html +[`Activity`]: {{site.android-dev}}reference/android/app/Activity +[`FlutterEngine`]: {{site.api}}javadoc/io/flutter/embedding/engine/FlutterEngine.html +[`FlutterEngineCache`]: {{site.api}}javadoc/io/flutter/embedding/engine/FlutterEngineCache.html +[`FlutterFragment`]: {{site.api}}javadoc/io/flutter/embedding/android/FlutterFragment.html diff --git a/src/content/add-to-app/android/add-flutter-view.md b/src/content/add-to-app/android/add-flutter-view.md index 8f00a977a6..2838782eb3 100644 --- a/src/content/add-to-app/android/add-flutter-view.md +++ b/src/content/add-to-app/android/add-flutter-view.md @@ -5,21 +5,21 @@ description: Learn how to perform advanced integrations via Flutter Views. --- :::warning -Integrating via a [FlutterView]({{site.api}}/javadoc/io/flutter/embedding/android/FlutterView.html) +Integrating via a [FlutterView]({{site.api}}javadoc/io/flutter/embedding/android/FlutterView.html) is advanced usage and requires manually creating custom, application specific bindings. ::: -Integrating via a [FlutterView]({{site.api}}/javadoc/io/flutter/embedding/android/FlutterView.html) +Integrating via a [FlutterView]({{site.api}}javadoc/io/flutter/embedding/android/FlutterView.html) requires a bit more work than via FlutterActivity and FlutterFragment previously described. Fundamentally, the Flutter framework on the Dart side requires access to various activity-level events and lifecycles to function. Since the FlutterView (which -is an [android.view.View]({{site.android-dev}}/reference/android/view/View.html)) +is an [android.view.View]({{site.android-dev}}reference/android/view/View.html)) can be added to any activity which is owned by the developer's application and since the FlutterView doesn't have access to activity level events, the -developer must bridge those connections manually to the [FlutterEngine]({{site.api}}/javadoc/io/flutter/embedding/engine/FlutterEngine.html). +developer must bridge those connections manually to the [FlutterEngine]({{site.api}}javadoc/io/flutter/embedding/engine/FlutterEngine.html). How you choose to feed your application's activities' events to the FlutterView will be specific to your application. @@ -32,46 +32,46 @@ class="mw-100" alt="Add Flutter View sample video"> Unlike the guides for FlutterActivity and FlutterFragment, the FlutterView integration could be better demonstrated with a sample project. -A sample project is at [https://github.com/flutter/samples/tree/main/add_to_app/android_view]({{site.repo.samples}}/tree/main/add_to_app/android_view) +A sample project is at [{{site.repo.samples}}tree/main/add_to_app/android_view]({{site.repo.samples}}tree/main/add_to_app/android_view) to document a simple FlutterView integration where FlutterViews are used for some of the cells in a RecycleView list of cards as seen in the gif above. ## General approach The general gist of the FlutterView-level integration is that you must recreate -the various interactions between your Activity, the [FlutterView]({{site.api}}/javadoc/io/flutter/embedding/android/FlutterView.html) -and the [FlutterEngine]({{site.api}}/javadoc/io/flutter/embedding/engine/FlutterEngine.html) +the various interactions between your Activity, the [FlutterView]({{site.api}}javadoc/io/flutter/embedding/android/FlutterView.html) +and the [FlutterEngine]({{site.api}}javadoc/io/flutter/embedding/engine/FlutterEngine.html) present in the [FlutterActivityAndFragmentDelegate](https://cs.opensource.google/flutter/engine/+/master:shell/platform/android/io/flutter/embedding/android/FlutterActivityAndFragmentDelegate.java) in your own application's code. The connections made in the [FlutterActivityAndFragmentDelegate](https://cs.opensource.google/flutter/engine/+/master:shell/platform/android/io/flutter/embedding/android/FlutterActivityAndFragmentDelegate.java) -are done automatically when using a [FlutterActivity]({{site.api}}/javadoc/io/flutter/embedding/android/FlutterActivity.html) -or a [FlutterFragment]({{site.api}}/javadoc/io/flutter/embedding/android/FlutterFragment.html), -but since the [FlutterView]({{site.api}}/javadoc/io/flutter/embedding/android/FlutterView.html) +are done automatically when using a [FlutterActivity]({{site.api}}javadoc/io/flutter/embedding/android/FlutterActivity.html) +or a [FlutterFragment]({{site.api}}javadoc/io/flutter/embedding/android/FlutterFragment.html), +but since the [FlutterView]({{site.api}}javadoc/io/flutter/embedding/android/FlutterView.html) in this case is being added to an Activity or Fragment in your application, -you must recreate the connections manually. Otherwise, the [FlutterView]({{site.api}}/javadoc/io/flutter/embedding/android/FlutterView.html) +you must recreate the connections manually. Otherwise, the [FlutterView]({{site.api}}javadoc/io/flutter/embedding/android/FlutterView.html) will not render anything or have other missing functionalities. -A sample [FlutterViewEngine]({{site.repo.samples}}/blob/main/add_to_app/android_view/android_view/app/src/main/java/dev/flutter/example/androidView/FlutterViewEngine.kt) +A sample [FlutterViewEngine]({{site.repo.samples}}blob/main/add_to_app/android_view/android_view/app/src/main/java/dev/flutter/example/androidView/FlutterViewEngine.kt) class shows one such possible implementation of an application-specific -connection between an Activity, a [FlutterView]({{site.api}}/javadoc/io/flutter/embedding/android/FlutterView.html) -and a [FlutterEngine]({{site.api}}/javadoc/io/flutter/embedding/engine/FlutterEngine.html). +connection between an Activity, a [FlutterView]({{site.api}}javadoc/io/flutter/embedding/android/FlutterView.html) +and a [FlutterEngine]({{site.api}}javadoc/io/flutter/embedding/engine/FlutterEngine.html). ### APIs to implement The absolute minimum implementation needed for Flutter to draw anything at all is to: -- Call [attachToFlutterEngine]({{site.api}}/javadoc/io/flutter/embedding/android/FlutterView.html#attachToFlutterEngine-io.flutter.embedding.engine.FlutterEngine-) when the - [FlutterView]({{site.api}}/javadoc/io/flutter/embedding/android/FlutterView.html) +- Call [attachToFlutterEngine]({{site.api}}javadoc/io/flutter/embedding/android/FlutterView.html#attachToFlutterEngine-io.flutter.embedding.engine.FlutterEngine-) when the + [FlutterView]({{site.api}}javadoc/io/flutter/embedding/android/FlutterView.html) is added to a resumed Activity's view hierarchy and is visible; and -- Call [appIsResumed]({{site.api}}/javadoc/io/flutter/embedding/engine/systemchannels/LifecycleChannel.html#appIsResumed--) on the [FlutterEngine]({{site.api}}/javadoc/io/flutter/embedding/engine/FlutterEngine.html)'s - `lifecycleChannel` field when the Activity hosting the [FlutterView]({{site.api}}/javadoc/io/flutter/embedding/android/FlutterView.html) +- Call [appIsResumed]({{site.api}}javadoc/io/flutter/embedding/engine/systemchannels/LifecycleChannel.html#appIsResumed--) on the [FlutterEngine]({{site.api}}javadoc/io/flutter/embedding/engine/FlutterEngine.html)'s + `lifecycleChannel` field when the Activity hosting the [FlutterView]({{site.api}}javadoc/io/flutter/embedding/android/FlutterView.html) is visible. -The reverse [detachFromFlutterEngine]({{site.api}}/javadoc/io/flutter/embedding/android/FlutterView.html#detachFromFlutterEngine--) and other lifecycle methods on the [LifecycleChannel]({{site.api}}/javadoc/io/flutter/embedding/engine/systemchannels/LifecycleChannel.html) +The reverse [detachFromFlutterEngine]({{site.api}}javadoc/io/flutter/embedding/android/FlutterView.html#detachFromFlutterEngine--) and other lifecycle methods on the [LifecycleChannel]({{site.api}}javadoc/io/flutter/embedding/engine/systemchannels/LifecycleChannel.html) class must also be called to not leak resources when the FlutterView or Activity is no longer visible. -In addition, see the remaining implementation in the [FlutterViewEngine]({{site.repo.samples}}/blob/main/add_to_app/android_view/android_view/app/src/main/java/dev/flutter/example/androidView/FlutterViewEngine.kt) +In addition, see the remaining implementation in the [FlutterViewEngine]({{site.repo.samples}}blob/main/add_to_app/android_view/android_view/app/src/main/java/dev/flutter/example/androidView/FlutterViewEngine.kt) demo class or in the [FlutterActivityAndFragmentDelegate](https://cs.opensource.google/flutter/engine/+/master:shell/platform/android/io/flutter/embedding/android/FlutterActivityAndFragmentDelegate.java) to ensure a correct functioning of other features such as clipboards, system UI overlay, plugins etc. diff --git a/src/content/add-to-app/android/plugin-setup.md b/src/content/add-to-app/android/plugin-setup.md index 50962b753a..5739c03cd2 100644 --- a/src/content/add-to-app/android/plugin-setup.md +++ b/src/content/add-to-app/android/plugin-setup.md @@ -149,8 +149,8 @@ by using the same major semantic version in your existing app and Flutter module plugin. -[ExoPlayer from the video_player plugin]: {{site.repo.packages}}/blob/main/packages/video_player/video_player_android/android/build.gradle -[firebase_crashlytics]: {{site.pub}}/packages/firebase_crashlytics -[Gradle file]: {{site.github}}/firebase/flutterfire/blob/bdb95fcacf7cf077d162d2f267eee54a8b0be3bc/packages/firebase_crashlytics/android/build.gradle#L40 +[ExoPlayer from the video_player plugin]: {{site.repo.packages}}blob/main/packages/video_player/video_player_android/android/build.gradle +[firebase_crashlytics]: {{site.pub-pkg}}firebase_crashlytics +[Gradle file]: {{site.github}}firebase/flutterfire/blob/bdb95fcacf7cf077d162d2f267eee54a8b0be3bc/packages/firebase_crashlytics/android/build.gradle#L40 [resolves dependency version conflicts]: https://docs.gradle.org/current/userguide/dependency_resolution.html#sub:resolution-strategy diff --git a/src/content/add-to-app/android/project-setup.md b/src/content/add-to-app/android/project-setup.md index a06b8589ce..423c49cad5 100644 --- a/src/content/add-to-app/android/project-setup.md +++ b/src/content/add-to-app/android/project-setup.md @@ -632,7 +632,7 @@ Continue to the [Adding a Flutter screen to an Android app][] guide. [向 Android 应用中添加 Flutter 页面][Adding a Flutter screen to an Android app] 继续进一步的集成。 -[`abiFilters`]: {{site.android-dev}}/reference/tools/gradle-api/4.2/com/android/build/api/dsl/Ndk#abiFilters:kotlin.collections.MutableSet +[`abiFilters`]: {{site.android-dev}}reference/tools/gradle-api/4.2/com/android/build/api/dsl/Ndk#abiFilters:kotlin.collections.MutableSet [Adding a Flutter screen to an Android app]: /add-to-app/android/add-flutter-screen [Flutter plugin]: https://plugins.jetbrains.com/plugin/9212-flutter [local repository]: https://docs.gradle.org/current/userguide/declaring_repositories.html#sub:maven_local diff --git a/src/content/add-to-app/index.md b/src/content/add-to-app/index.md index 5ce8dc6369..85c6111f2b 100644 --- a/src/content/add-to-app/index.md +++ b/src/content/add-to-app/index.md @@ -146,7 +146,7 @@ See our [add-to-app GitHub Samples repository][] for sample projects in Android and iOS that import a Flutter module for UI. -查看 [add-to-app GitHub 示例仓库](https://github.com/flutter/samples/tree/master/experimental/add_to_app) +查看 [add-to-app GitHub 示例仓库][add-to-app GitHub Samples repository] 中在 iOS 和 Android 平台上引入 Flutter module 的示例项目。 ## Get started @@ -221,16 +221,16 @@ see our API usage guides at the following links: Android 平台的 Flutter 模块仅支持适配了 AndroidX 的应用。 -[add-to-app GitHub Samples repository]: {{site.repo.samples}}/tree/main/add_to_app -[Android Archive (AAR)]: {{site.android-dev}}/studio/projects/android-library -[Flutter plugins]: {{site.pub}}/flutter -[`FlutterActivity`]: {{site.api}}/javadoc/io/flutter/embedding/android/FlutterActivity.html -[java-engine]: {{site.api}}/javadoc/io/flutter/embedding/engine/FlutterEngine.html -[ios-engine]: {{site.api}}/ios-embedder/interface_flutter_engine.html -[FlutterFire]: {{site.github}}/firebase/flutterfire/tree/master/packages -[`FlutterFragment`]: {{site.api}}/javadoc/io/flutter/embedding/android/FlutterFragment.html -[`FlutterPlugin`]: {{site.api}}/javadoc/io/flutter/embedding/engine/plugins/FlutterPlugin.html -[`FlutterViewController`]: {{site.api}}/ios-embedder/interface_flutter_view_controller.html -[iOS Framework]: {{site.apple-dev}}/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WhatAreFrameworks.html -[maintained by the Flutter team]: {{site.repo.packages}}/tree/main/packages +[add-to-app GitHub Samples repository]: {{site.repo.samples}}tree/main/add_to_app +[Android Archive (AAR)]: {{site.android-dev}}studio/projects/android-library +[Flutter plugins]: {{site.pub}}flutter +[`FlutterActivity`]: {{site.api}}javadoc/io/flutter/embedding/android/FlutterActivity.html +[java-engine]: {{site.api}}javadoc/io/flutter/embedding/engine/FlutterEngine.html +[ios-engine]: {{site.api}}ios-embedder/interface_flutter_engine.html +[FlutterFire]: {{site.github}}firebase/flutterfire/tree/master/packages +[`FlutterFragment`]: {{site.api}}javadoc/io/flutter/embedding/android/FlutterFragment.html +[`FlutterPlugin`]: {{site.api}}javadoc/io/flutter/embedding/engine/plugins/FlutterPlugin.html +[`FlutterViewController`]: {{site.api}}ios-embedder/interface_flutter_view_controller.html +[iOS Framework]: {{site.apple-dev}}library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WhatAreFrameworks.html +[maintained by the Flutter team]: {{site.repo.packages}}tree/main/packages [multiple Flutters]: /add-to-app/multiple-flutters diff --git a/src/content/add-to-app/ios/add-flutter-screen.md b/src/content/add-to-app/ios/add-flutter-screen.md index e6a022e688..77bcc7ae59 100644 --- a/src/content/add-to-app/ios/add-flutter-screen.md +++ b/src/content/add-to-app/ios/add-flutter-screen.md @@ -945,21 +945,21 @@ in any way you'd like, before presenting the Flutter UI using a 你可以在 `FlutterViewController` 展示 Flutter UI 之前, 自由地选择你喜欢的,推入数据和准备 Flutter 环境的方式。 -[`FlutterEngine`]: {{site.api}}/ios-embedder/interface_flutter_engine.html -[`FlutterViewController`]: {{site.api}}/ios-embedder/interface_flutter_view_controller.html +[`FlutterEngine`]: {{site.api}}ios-embedder/interface_flutter_engine.html +[`FlutterViewController`]: {{site.api}}ios-embedder/interface_flutter_view_controller.html [Loading sequence and performance]: /add-to-app/performance -[local_auth]: {{site.pub}}/packages/local_auth +[local_auth]: {{site.pub-pkg}}local_auth [Navigation and routing]: /ui/navigation -[Navigator]: {{site.api}}/flutter/widgets/Navigator-class.html -[`NavigatorState`]: {{site.api}}/flutter/widgets/NavigatorState-class.html -[`openURL`]: {{site.apple-dev}}/documentation/uikit/uiapplicationdelegate/1623112-application +[Navigator]: {{site.api}}flutter/widgets/Navigator-class.html +[`NavigatorState`]: {{site.api}}flutter/widgets/NavigatorState-class.html +[`openURL`]: {{site.apple-dev}}documentation/uikit/uiapplicationdelegate/1623112-application [platform channels]: /platform-integration/platform-channels -[`popRoute()`]: {{site.api}}/ios-embedder/interface_flutter_view_controller.html#ac89c8010fbf7a39f7aaab64f68c013d2 -[`pushRoute()`]: {{site.api}}/ios-embedder/interface_flutter_view_controller.html#ac7cffbf03f9c8c0b28d1f0dafddece4e -[`runApp`]: {{site.api}}/flutter/widgets/runApp.html -[`runWithEntrypoint`]: {{site.api}}/ios-embedder/interface_flutter_engine.html#a019d6b3037eff6cfd584fb2eb8e9035e -[`SystemNavigator.pop()`]: {{site.api}}/flutter/services/SystemNavigator/pop.html +[`popRoute()`]: {{site.api}}ios-embedder/interface_flutter_view_controller.html#ac89c8010fbf7a39f7aaab64f68c013d2 +[`pushRoute()`]: {{site.api}}ios-embedder/interface_flutter_view_controller.html#ac7cffbf03f9c8c0b28d1f0dafddece4e +[`runApp`]: {{site.api}}flutter/widgets/runApp.html +[`runWithEntrypoint`]: {{site.api}}ios-embedder/interface_flutter_engine.html#a019d6b3037eff6cfd584fb2eb8e9035e +[`SystemNavigator.pop()`]: {{site.api}}flutter/services/SystemNavigator/pop.html [tree-shaken]: https://en.wikipedia.org/wiki/Tree_shaking -[`WidgetsApp`]: {{site.api}}/flutter/widgets/WidgetsApp-class.html -[`PlatformDispatcher.defaultRouteName`]: {{site.api}}/flutter/dart-ui/PlatformDispatcher/defaultRouteName.html +[`WidgetsApp`]: {{site.api}}flutter/widgets/WidgetsApp-class.html +[`PlatformDispatcher.defaultRouteName`]: {{site.api}}flutter/dart-ui/PlatformDispatcher/defaultRouteName.html [Start a FlutterEngine and FlutterViewController section]:/add-to-app/ios/add-flutter-screen/#start-a-flutterengine-and-flutterviewcontroller diff --git a/src/content/add-to-app/ios/project-setup.md b/src/content/add-to-app/ios/project-setup.md index cff3268f63..45754277f3 100644 --- a/src/content/add-to-app/ios/project-setup.md +++ b/src/content/add-to-app/ios/project-setup.md @@ -775,7 +775,7 @@ You can now [add a Flutter screen][] to your existing application. 你现在可以 [添加一个 Flutter 页面][add a Flutter screen] 到你的既有应用中。 -[add_to_app code samples]: {{site.repo.samples}}/tree/main/add_to_app +[add_to_app code samples]: {{site.repo.samples}}tree/main/add_to_app [add a Flutter screen]: /add-to-app/ios/add-flutter-screen [Android Studio/IntelliJ]: /tools/android-studio [build modes of Flutter]: /testing/build-modes @@ -785,13 +785,13 @@ You can now [add a Flutter screen][] to your existing application. [increases your app size]: /resources/faq#how-big-is-the-flutter-engine [macOS system requirements for Flutter]: /get-started/install/macos/mobile-ios#verify-system-requirements [Podfile target]: https://guides.cocoapods.org/syntax/podfile.html#target -[static or dynamic frameworks]: {{site.so}}/questions/32591878/ios-is-it-a-static-or-a-dynamic-framework +[static or dynamic frameworks]: {{site.so}}questions/32591878/ios-is-it-a-static-or-a-dynamic-framework [VS Code]: /tools/vs-code [Xcode installed]: /get-started/install/macos/mobile-ios#install-and-configure-xcode -[News Feed app]: https://github.com/flutter/put-flutter-to-work/tree/022208184ec2623af2d113d13d90e8e1ce722365 +[News Feed app]: {{site.repo.organization}}put-flutter-to-work/tree/022208184ec2623af2d113d13d90e8e1ce722365 [Debugging your add-to-app module]: /add-to-app/debugging/ [embed the frameworks]: /add-to-app/ios/project-setup#embed-the-frameworks [Embed with CocoaPods and Flutter tools]: #option-a---embed-with-cocoapods-and-the-flutter-sdk -[On iOS 14 and higher]: {{site.apple-dev}}/news/?id=0oi77447 -[XCFrameworks]: {{site.apple-dev}}/documentation/xcode_release_notes/xcode_11_release_notes +[On iOS 14 and higher]: {{site.apple-dev}}news/?id=0oi77447 +[XCFrameworks]: {{site.apple-dev}}documentation/xcode_release_notes/xcode_11_release_notes diff --git a/src/content/add-to-app/multiple-flutters.md b/src/content/add-to-app/multiple-flutters.md index af17ba0063..b13d5b8083 100644 --- a/src/content/add-to-app/multiple-flutters.md +++ b/src/content/add-to-app/multiple-flutters.md @@ -46,7 +46,7 @@ scenarios motivating the usage of multiple Flutters can be found at 使用多个 Flutter 实例的优势在于,每一个实例互相独立,各自维护路由栈、UI 和应用状态。 这简化了应用程序整体的状态保持考虑,并且进一步模块化。 了解更多关于多个 Flutter 使用的动机和场景,请查看 -RFC 文档: [Multiple Flutters]({{site.flutter-files-cn}}/flutter-design-docs/Multiple_Flutters.pdf)。 +RFC 文档: [Multiple Flutters]({{site.flutter-files-cn}}flutter-design-docs/Multiple_Flutters.pdf)。 Flutter is optimized for this scenario, with a low incremental memory cost (~180kB) for adding additional Flutter instances. This fixed cost @@ -144,13 +144,13 @@ on both Android and iOS on [GitHub][]. {% render docs/app-figure.md, image:"development/add-to-app/multiple-flutters-sample.gif", alt:"A sample demonstrating multiple-Flutters" %} -[GitHub]: {{site.repo.samples}}/tree/main/add_to_app/multiple_flutters -[`FlutterActivity`]: {{site.api}}/javadoc/io/flutter/embedding/android/FlutterActivity.html -[`FlutterViewController`]: {{site.api}}/ios-embedder/interface_flutter_view_controller.html +[GitHub]: {{site.repo.samples}}tree/main/add_to_app/multiple_flutters +[`FlutterActivity`]: {{site.api}}javadoc/io/flutter/embedding/android/FlutterActivity.html +[`FlutterViewController`]: {{site.api}}ios-embedder/interface_flutter_view_controller.html [performance characteristics]: /add-to-app/performance [flutter.dev/go/multiple-flutters]: /go/multiple-flutters -[Issue 72009]: {{site.repo.flutter}}/issues/72009 -[Pigeon]: {{site.pub}}/packages/pigeon +[Issue 72009]: {{site.repo.flutter}}issues/72009 +[Pigeon]: {{site.pub-pkg}}pigeon [platform channels]: /platform-integration/platform-channels [Android API]: https://cs.opensource.google/flutter/engine/+/master:shell/platform/android/io/flutter/embedding/engine/FlutterEngineGroup.java [iOS API]: https://cs.opensource.google/flutter/engine/+/master:shell/platform/darwin/ios/framework/Headers/FlutterEngineGroup.h diff --git a/src/content/add-to-app/performance.md b/src/content/add-to-app/performance.md index 2c78cd661c..ae7450c42d 100644 --- a/src/content/add-to-app/performance.md +++ b/src/content/add-to-app/performance.md @@ -376,24 +376,24 @@ see [multiple Flutters][]. 关于创建多个 `FlutterEngine` 对性能影响的详细情况,请参考文档: [多个 Flutter 实例][multiple Flutters]。 -[android-engine]: {{site.api}}/javadoc/io/flutter/embedding/engine/FlutterEngine.html -[auxiliary threads]: {{site.repo.flutter}}/wiki/The-Engine-architecture#threading -[CAEAGLLayer]: {{site.apple-dev}}/documentation/quartzcore/caeagllayer -[CAMetalLayer]: {{site.apple-dev}}/documentation/quartzcore/cametallayer -[Dart `Isolate`]: {{site.dart.api}}/stable/dart-isolate/Isolate-class.html -[Dart SDK]: {{site.dart-site}}/tools/sdk -[`DartExecutor.executeDartEntrypoint()`]: {{site.api}}/javadoc/io/flutter/embedding/engine/dart/DartExecutor.html#executeDartEntrypoint-io.flutter.embedding.engine.dart.DartExecutor.DartEntrypoint- -[`FlutterActivity.createDefaultIntent()`]: {{site.api}}/javadoc/io/flutter/embedding/android/FlutterActivity.html#createDefaultIntent-android.content.Context- -[`FlutterActivity.withCachedEngine()`]: {{site.api}}/javadoc/io/flutter/embedding/android/FlutterActivity.html#withCachedEngine-java.lang.String- -[`FlutterViewController`]: {{site.api}}/ios-embedder/interface_flutter_view_controller.html -[`FlutterViewController initWithProject: nibName: bundle:`]: {{site.api}}/ios-embedder/interface_flutter_view_controller.html#aa3aabfb89e958602ce6a6690c919f655 -[`initWithEngine: nibName: bundle:`]: {{site.api}}/ios-embedder/interface_flutter_view_controller.html#a0aeea9525c569d5efbd359e2d95a7b31 -[`Intent`]: {{site.android-dev}}/reference/android/content/Intent.html -[ios-engine]: {{site.api}}/ios-embedder/interface_flutter_engine.html -[`Layer`]: {{site.api}}/flutter/rendering/Layer-class.html +[android-engine]: {{site.api}}javadoc/io/flutter/embedding/engine/FlutterEngine.html +[auxiliary threads]: {{site.repo.flutter}}wiki/The-Engine-architecture#threading +[CAEAGLLayer]: {{site.apple-dev}}documentation/quartzcore/caeagllayer +[CAMetalLayer]: {{site.apple-dev}}documentation/quartzcore/cametallayer +[Dart `Isolate`]: {{site.dart.api}}stable/dart-isolate/Isolate-class.html +[Dart SDK]: {{site.dart-site}}tools/sdk +[`DartExecutor.executeDartEntrypoint()`]: {{site.api}}javadoc/io/flutter/embedding/engine/dart/DartExecutor.html#executeDartEntrypoint-io.flutter.embedding.engine.dart.DartExecutor.DartEntrypoint- +[`FlutterActivity.createDefaultIntent()`]: {{site.api}}javadoc/io/flutter/embedding/android/FlutterActivity.html#createDefaultIntent-android.content.Context- +[`FlutterActivity.withCachedEngine()`]: {{site.api}}javadoc/io/flutter/embedding/android/FlutterActivity.html#withCachedEngine-java.lang.String- +[`FlutterViewController`]: {{site.api}}ios-embedder/interface_flutter_view_controller.html +[`FlutterViewController initWithProject: nibName: bundle:`]: {{site.api}}ios-embedder/interface_flutter_view_controller.html#aa3aabfb89e958602ce6a6690c919f655 +[`initWithEngine: nibName: bundle:`]: {{site.api}}ios-embedder/interface_flutter_view_controller.html#a0aeea9525c569d5efbd359e2d95a7b31 +[`Intent`]: {{site.android-dev}}reference/android/content/Intent.html +[ios-engine]: {{site.api}}ios-embedder/interface_flutter_engine.html +[`Layer`]: {{site.api}}flutter/rendering/Layer-class.html [multiple Flutters]: /add-to-app/multiple-flutters -[`runApp()`]: {{site.api}}/flutter/widgets/runApp.html -[`runWithEntrypoint:`]: {{site.api}}/ios-embedder/interface_flutter_engine.html#a019d6b3037eff6cfd584fb2eb8e9035e -[snapshot]: {{site.github}}/dart-lang/sdk/wiki/Snapshots -[`startActivity()`]: {{site.android-dev}}/reference/android/content/Context#startActivity(android.content.Intent) -[`Surface`]: {{site.android-dev}}/reference/android/view/Surface +[`runApp()`]: {{site.api}}flutter/widgets/runApp.html +[`runWithEntrypoint:`]: {{site.api}}ios-embedder/interface_flutter_engine.html#a019d6b3037eff6cfd584fb2eb8e9035e +[snapshot]: {{site.github}}dart-lang/sdk/wiki/Snapshots +[`startActivity()`]: {{site.android-dev}}reference/android/content/Context#startActivity(android.content.Intent) +[`Surface`]: {{site.android-dev}}reference/android/view/Surface diff --git a/src/content/codelabs/implicit-animations.md b/src/content/codelabs/implicit-animations.md index 0bfffe38fd..f997ad38b5 100644 --- a/src/content/codelabs/implicit-animations.md +++ b/src/content/codelabs/implicit-animations.md @@ -653,7 +653,7 @@ follow the curve that constant defined.
### Putting it all together @@ -727,24 +727,24 @@ To learn more, check out these suggestions: 尝试一下其他的 [codelab][]。 -[`AnimatedContainer`]: {{site.api}}/flutter/widgets/AnimatedContainer-class.html -[AnimatedOpacity]: {{site.api}}/flutter/widgets/AnimatedOpacity-class.html -[animation library]: {{site.api}}/flutter/animation/animation-library.html +[`AnimatedContainer`]: {{site.api}}flutter/widgets/AnimatedContainer-class.html +[AnimatedOpacity]: {{site.api}}flutter/widgets/AnimatedOpacity-class.html +[animation library]: {{site.api}}flutter/animation/animation-library.html [animations tutorial]: /ui/animations/tutorial [codelab]: /codelabs -[`Curve`]: {{site.api}}/flutter/animation/Curve-class.html -[`Curves`]: {{site.api}}/flutter/animation/Curves-class.html -[duration]: {{site.api}}/flutter/widgets/ImplicitlyAnimatedWidget/duration.html -[`easeInOutBack`]: {{site.api}}/flutter/animation/Curves/easeInOutBack-constant.html +[`Curve`]: {{site.api}}flutter/animation/Curve-class.html +[`Curves`]: {{site.api}}flutter/animation/Curves-class.html +[duration]: {{site.api}}flutter/widgets/ImplicitlyAnimatedWidget/duration.html +[`easeInOutBack`]: {{site.api}}flutter/animation/Curves/easeInOutBack-constant.html [fade-in complete]: #fade-in-complete [fade-in starter code]: #fade-in-starter-code [Fade-in text effect]: #example-fade-in-text-effect [hero animations]: /ui/animations/hero-animations -[ImplicitlyAnimatedWidget]: {{site.api}}/flutter/widgets/ImplicitlyAnimatedWidget-class.html -[linear animation curve]: {{site.api}}/flutter/animation/Curves/linear-constant.html -[linear curve]: {{site.api}}/flutter/animation/Curves/linear-constant.html -[make a Flutter app]: {{site.codelabs}}/codelabs/flutter-codelab-first -[Material App]: {{site.api}}/flutter/material/MaterialApp-class.html +[ImplicitlyAnimatedWidget]: {{site.api}}flutter/widgets/ImplicitlyAnimatedWidget-class.html +[linear animation curve]: {{site.api}}flutter/animation/Curves/linear-constant.html +[linear curve]: {{site.api}}flutter/animation/Curves/linear-constant.html +[make a Flutter app]: {{site.codelabs}}codelabs/flutter-codelab-first +[Material App]: {{site.api}}flutter/material/MaterialApp-class.html [complete shape-shifting example]: #shape-shifting-complete [shape-shifting starter code]: #shape-shifting-starter-code [staggered animations]: /ui/animations/staggered-animations diff --git a/src/content/codelabs/index.md b/src/content/codelabs/index.md index 272cff30a5..0690917adf 100644 --- a/src/content/codelabs/index.md +++ b/src/content/codelabs/index.md @@ -63,7 +63,7 @@ one of the following codelabs: 那么整个应用同样也能运行在 Android 以及 iOS 的设备上。 [Building your first Flutter app]: {{site.yt.watch}}?v=8sAyPDLorek -[Your first Flutter app]: {{site.codelabs}}/codelabs/flutter-codelab-first +[Your first Flutter app]: {{site.codelabs}}codelabs/flutter-codelab-first [Write your first Flutter app on the web]: /get-started/codelab-web ## Next steps @@ -106,7 +106,7 @@ one of the following codelabs: (Flutter 提供的 [基础状态管理方案][low-level state management] 之一) 管理应用数据的状态。 -[Records and Patterns in Dart 3]: {{site.codelabs}}/codelabs/dart-patterns-records +[Records and Patterns in Dart 3]: {{site.codelabs}}codelabs/dart-patterns-records [Dart null safety in Action]: {{site.yt.watch}}?v=HdKwuHQvArY [inherited-widget-ws]: {{site.yt.watch}}?v=LFcGPS6cGrY [low-level state management]: /data-and-backend/state-mgmt/options#inheritedwidget-inheritedmodel @@ -216,18 +216,18 @@ like layout and animations: 了解如何构建一个使用 `flutter_animate`、片段着色器和粒子场的 Flutter 应用。 你将构建一个用户界面,它会唤起我们在不编码时都喜欢看的科幻电影和电视节目。 -[Building next generation UIs in Flutter]: {{site.codelabs}}/codelabs/flutter-next-gen-uis -[Adaptive Apps in Flutter]: {{site.codelabs}}/codelabs/flutter-adaptive-app -[animations]: {{site.pub}}/packages/animations -[Building Beautiful Transitions with Material Motion for Flutter]: {{site.codelabs}}/codelabs/material-motion-flutter +[Building next generation UIs in Flutter]: {{site.codelabs}}codelabs/flutter-next-gen-uis +[Adaptive Apps in Flutter]: {{site.codelabs}}codelabs/flutter-adaptive-app +[animations]: {{site.pub-pkg}}animations +[Building Beautiful Transitions with Material Motion for Flutter]: {{site.codelabs}}codelabs/material-motion-flutter [Building scrolling experiences in Flutter]: {{site.bili.video}}/BV11f4y187gV/ -[How to debug layout issues with the Flutter Inspector]: {{site.flutter-medium}}/how-to-debug-layout-issues-with-the-flutter-inspector-87460a7b9db +[How to debug layout issues with the Flutter Inspector]: {{site.flutter-medium}}how-to-debug-layout-issues-with-the-flutter-inspector-87460a7b9db [Implicit animations]: /codelabs/implicit-animations -[MDC-101 Flutter: Material Components (MDC) Basics]: {{site.codelabs-cn}}/codelabs/mdc-101-flutter-cn -[MDC-102 Flutter: Material Structure and Layout]: {{site.codelabs-cn}}/codelabs/mdc-102-flutter-cn -[MDC-103 Flutter: Material Theming with Color, Shape, Elevation, and Type]: {{site.codelabs-cn}}/codelabs/mdc-103-flutter-cn -[MDC-104 Flutter: Material Advanced Components]: {{site.codelabs-cn}}/codelabs/mdc-104-flutter-cn -[Take your Flutter app from boring to beautiful]: {{site.codelabs}}/codelabs/flutter-boring-to-beautiful +[MDC-101 Flutter: Material Components (MDC) Basics]: {{site.codelabs-cn}}codelabs/mdc-101-flutter-cn +[MDC-102 Flutter: Material Structure and Layout]: {{site.codelabs-cn}}codelabs/mdc-102-flutter-cn +[MDC-103 Flutter: Material Theming with Color, Shape, Elevation, and Type]: {{site.codelabs-cn}}codelabs/mdc-103-flutter-cn +[MDC-104 Flutter: Material Advanced Components]: {{site.codelabs-cn}}codelabs/mdc-104-flutter-cn +[Take your Flutter app from boring to beautiful]: {{site.codelabs}}codelabs/flutter-boring-to-beautiful ## Using Flutter with @@ -272,9 +272,9 @@ Learn how to use Flutter with other technologies. 扩展一个使用 Dash 吉祥物作为货币的简单游戏应用程序, 以提供三种类型的应用程序内购买:消耗品、非消耗品和订阅。 -[Adding AdMob Ads to a Flutter app]: {{site.codelabs}}/codelabs/admob-ads-in-flutter -[Adding an AdMob banner and native inline ads to a Flutter app]: {{site.codelabs}}/codelabs/admob-inline-ads-in-flutter -[Adding in-app purchases to your Flutter app]: {{site.codelabs}}/codelabs/flutter-in-app-purchases +[Adding AdMob Ads to a Flutter app]: {{site.codelabs}}codelabs/admob-ads-in-flutter +[Adding an AdMob banner and native inline ads to a Flutter app]: {{site.codelabs}}codelabs/admob-inline-ads-in-flutter +[Adding in-app purchases to your Flutter app]: {{site.codelabs}}codelabs/flutter-in-app-purchases ### Flutter and Firebase @@ -306,10 +306,10 @@ Learn how to use Flutter with other technologies. developing with Flutter. You will also learn to use the Auth and Firestore emulators. -[Add a user authentication flow to a Flutter app using FirebaseUI]: {{site.firebase}}/codelabs/firebase-auth-in-flutter-apps +[Add a user authentication flow to a Flutter app using FirebaseUI]: {{site.firebase}}codelabs/firebase-auth-in-flutter-apps [firebase-ws]: {{site.yt.watch}}?v=wUSkeTaBonA -[Get to know Firebase for Flutter]: {{site.firebase}}/codelabs/firebase-get-to-know-flutter -[Local development for your Flutter apps using the Firebase Emulator Suite]: {{site.firebase}}/codelabs/get-started-firebase-emulators-and-flutter +[Get to know Firebase for Flutter]: {{site.firebase}}codelabs/firebase-get-to-know-flutter +[Local development for your Flutter apps using the Firebase Emulator Suite]: {{site.firebase}}codelabs/get-started-firebase-emulators-and-flutter ### Flutter and TensorFlow @@ -325,9 +325,9 @@ Learn how to use Flutter with other technologies. Learn how to install the TensorFlow Lite Model Maker with Colab, how to use a data loader, and how to build a model. -[Create a custom text-classification model with TensorFlow Lite Model Maker]: {{site.developers}}/codelabs/classify-text-update-tensorflow-serving -[Create a Flutter app to classify texts with TensorFlow]: {{site.developers}}/codelabs/classify-texts-flutter-tensorflow-serving -[Train a comment-spam detection model with TensorFlow Lite Model Maker]: {{site.developers}}/codelabs/classify-text-tensorflow-serving +[Create a custom text-classification model with TensorFlow Lite Model Maker]: {{site.developers}}codelabs/classify-text-update-tensorflow-serving +[Create a Flutter app to classify texts with TensorFlow]: {{site.developers}}codelabs/classify-texts-flutter-tensorflow-serving +[Train a comment-spam detection model with TensorFlow Lite Model Maker]: {{site.developers}}codelabs/classify-text-tensorflow-serving ### Flutter and other technologies @@ -430,18 +430,18 @@ Learn how to use Flutter with other technologies. 根据 Google 产品名称生成俳句 (haiku) 的应用。 PaLM API 可让你访问 Google 最先进的大语言模型。 -[Add sound and music to your Flutter game with SoLoud]: {{site.codelabs}}/codelabs/flutter-codelab-soloud -[Adding Google Maps to a Flutter app]: {{site.codelabs-cn}}/codelabs/google-maps-in-flutter-cn -[Adding WebView to your Flutter app]: {{site.codelabs}}/codelabs/flutter-webview -[Build a 2D physics game with Flutter and Flame]: {{site.codelabs}}/codelabs/flutter-flame-forge2d -[Build a word puzzle with Flutter]: {{site.codelabs}}/codelabs/flutter-word-puzzle -[Build voice bots for Android with Dialogflow and Flutter]: {{site.codelabs}}/codelabs/dialogflow-flutter +[Add sound and music to your Flutter game with SoLoud]: {{site.codelabs}}codelabs/flutter-codelab-soloud +[Adding Google Maps to a Flutter app]: {{site.codelabs-cn}}codelabs/google-maps-in-flutter-cn +[Adding WebView to your Flutter app]: {{site.codelabs}}codelabs/flutter-webview +[Build a 2D physics game with Flutter and Flame]: {{site.codelabs}}codelabs/flutter-flame-forge2d +[Build a word puzzle with Flutter]: {{site.codelabs}}codelabs/flutter-word-puzzle +[Build voice bots for Android with Dialogflow and Flutter]: {{site.codelabs}}codelabs/dialogflow-flutter [Build voice bots for mobile with Dialogflow and Flutter]: {{site.bili.video}}/BV1pX4y1A7SH/ -[Create haikus about Google products with the PaLM API and Flutter]: {{site.codelabs}}/haiku-generator -[Forge2D]: {{site.pub-pkg}}/forge2d -[Introduction to Flame with Flutter]: {{site.codelabs}}/codelabs/flutter-flame-brick-breaker -[SoLoud]: {{site.pub-pkg}}/flutter_soloud -[Using FFI in a Flutter plugin]: {{site.codelabs}}/codelabs/flutter-ffigen +[Create haikus about Google products with the PaLM API and Flutter]: {{site.codelabs}}haiku-generator +[Forge2D]: {{site.pub-pkg}}forge2d +[Introduction to Flame with Flutter]: {{site.codelabs}}codelabs/flutter-flame-brick-breaker +[SoLoud]: {{site.pub-pkg}}flutter_soloud +[Using FFI in a Flutter plugin]: {{site.codelabs}}codelabs/flutter-ffigen ## Testing @@ -461,7 +461,7 @@ Learn how to test your Flutter application. 进而对提供应用进行单元测试 —— 为其中两个小部件编写小部件测试; 使用 Flutter Driver 创建集成测试。 -[How to test a Flutter app]: {{site.codelabs}}/codelabs/flutter-app-testing/ +[How to test a Flutter app]: {{site.codelabs}}codelabs/flutter-app-testing/ ## Writing platform-specific code @@ -519,11 +519,11 @@ iOS、Android、Web 和桌面端。 学习如何通过你的 Flutter 应用添加一个首页小部件。 小部件会展示在首页、锁屏页以及今日预览中。 -[home-screen]: {{site.codelabs}}/flutter-home-screen-widgets -[How to write a Flutter plugin]: {{site.codelabs}}/codelabs/write-flutter-plugin -[provider]: {{site.pub-pkg}}/provider -[Using a plugin with a Flutter web app]: {{site.codelabs}}/codelabs/web-url-launcher -[Write a Flutter desktop application]: {{site.codelabs}}/codelabs/flutter-github-client +[home-screen]: {{site.codelabs}}flutter-home-screen-widgets +[How to write a Flutter plugin]: {{site.codelabs}}codelabs/write-flutter-plugin +[provider]: {{site.pub-pkg}}provider +[Using a plugin with a Flutter web app]: {{site.codelabs}}codelabs/web-url-launcher +[Write a Flutter desktop application]: {{site.codelabs}}codelabs/flutter-github-client ## Other resources @@ -549,12 +549,12 @@ If you have trouble viewing any of the codelabs on [`codelabs.developers.google.com`]({{site.codelabs}}), try [this mirror of the Flutter codelabs][]. -如果你在 [`codelabs.developers.google.com`](https://codelabs.developers.google.com/) 浏览这些 codelabs 的时候遇到问题, +如果你在 [`codelabs.developers.google.com`]({{site.codelabs}}) 浏览这些 codelabs 的时候遇到问题, 请尝试 [访问这个 Flutter codelabs 镜像][this mirror of the Flutter codelabs]。 ::: -[codelabs]: {{site.dart-site}}/codelabs +[codelabs]: {{site.dart-site}}codelabs [Dart site]: {{site.dart-site}} [The Complete Flutter Development Bootcamp Using Dart]: https://www.appbrewery.co/p/flutter-development-bootcamp-with-dart -[this mirror of the Flutter codelabs]: https://codelabs.flutter-io.cn/ +[this mirror of the Flutter codelabs]: {{site.codelabs-cn}} diff --git a/src/content/community/china/index.md b/src/content/community/china/index.md index 37e783d253..a8065a67fd 100644 --- a/src/content/community/china/index.md +++ b/src/content/community/china/index.md @@ -168,7 +168,7 @@ To learn more about publishing packages, check out the 了解关于发布 package 的更多信息, 请查阅 [关于发布 package 的 Dart 文档][Dart documentation on publishing packages]。 -[Dart documentation on publishing packages]: {{site.dart-site}}/tools/pub/publishing +[Dart documentation on publishing packages]: {{site.dart-site}}tools/pub/publishing ## Known, trusted community-run mirror sites diff --git a/src/content/community/tutorials/adapter-pattern-in-flutter-n-dart.md b/src/content/community/tutorials/adapter-pattern-in-flutter-n-dart.md index 19d80fb348..fa70ae0a32 100644 --- a/src/content/community/tutorials/adapter-pattern-in-flutter-n-dart.md +++ b/src/content/community/tutorials/adapter-pattern-in-flutter-n-dart.md @@ -16,13 +16,13 @@ toc: true 和 [观察者模式](/community/tutorials/observer-pattern-in-flutter-n-dart) 中的观察者与被观察者类似,适配器模式中担任主要角色是 **适配器 (Adapter)** 和 **被适配者 (Adaptee)**。一个比较典型的例子是,插座转接头可以被认为是一种适配器,可以把本身不兼容的接口,通过转接变得可以一起工作。 -![适配器模式示意图,图源网络]({{site.flutter-files-cn}}/posts/community/tutorial/images/2021-09-05-002.jpeg) +![适配器模式示意图,图源网络]({{site.flutter-files-cn}}posts/community/tutorial/images/2021-09-05-002.jpeg) 在代码世界中,也有很多接口不适配的场景,如我们引入了一个第三方库后,发现它其中的类实现与我们现有代码并不兼容,需要一个 Adapter 类做一层转换才行。另外,相较于直接接触原始的代码实现,这种模式下,客户端仅仅依赖适配器类,对于代码复用和维护性也多了一层保障。 ## 类适配器与对象适配器 -![适配器模式 UML 图]({{site.flutter-files-cn}}/posts/community/tutorial/images/2021-09-05-1_2oBi8WnJT31i2E-KaW0rhw.png) +![适配器模式 UML 图]({{site.flutter-files-cn}}posts/community/tutorial/images/2021-09-05-1_2oBi8WnJT31i2E-KaW0rhw.png) 适配器模式有两种实现方式:**类适配器** 和 **对象适配器**。其中,类适配器使用继承关系来实现,而对象适配器使用组合关系来实现。具体的代码实现如下所示。 diff --git a/src/content/community/tutorials/factory-pattern-in-flutter-n-dart.md b/src/content/community/tutorials/factory-pattern-in-flutter-n-dart.md index 25c763e6b2..32b5f7ba58 100644 --- a/src/content/community/tutorials/factory-pattern-in-flutter-n-dart.md +++ b/src/content/community/tutorials/factory-pattern-in-flutter-n-dart.md @@ -7,7 +7,7 @@ toc: true 在围绕设计模式的话题中,工厂这个词频繁出现,从 **简单工厂** 模式到 **工厂方法** 模式,再到 **抽象工厂** 模式。工厂名称含义是制造产品的工业场所,应用在面向对象中,顺理成章的成为了比较典型的创建型模式。 -![图源:https://media2.giphy.com/media/3ohjUKYWSqORcgIIsE/giphy.gif]({{site.flutter-files-cn}}/posts/community/tutorial/images/2022-02-20-1_X-eyz2eZZDho_bFBGBOWEA.gif) +![图源:https://media2.giphy.com/media/3ohjUKYWSqORcgIIsE/giphy.gif]({{site.flutter-files-cn}}posts/community/tutorial/images/2022-02-20-1_X-eyz2eZZDho_bFBGBOWEA.gif) > 从形式上讲,工厂可以是一个返回我们想要对象的一个方法/函数,即可以作为构造函数的一种抽象。 @@ -165,7 +165,7 @@ void main() { 工厂方法模式同样也是我们编程中最常用到的一种手段。 -![抽象工厂 UML,图源:refactoring.guru]({{site.flutter-files-cn}}/posts/community/tutorial/images/2022-02-20-2022-02-20-1_yyGj6x9PNJLYiq4miG3mww.png) +![抽象工厂 UML,图源:refactoring.guru]({{site.flutter-files-cn}}posts/community/tutorial/images/2022-02-20-2022-02-20-1_yyGj6x9PNJLYiq4miG3mww.png) 在简单工厂中,它主要服务的对象是客户,而 **工厂方法** 的使用者与工厂本身的类并不相干, 而工厂方法模式主要服务自身的父类,如下的 `ProductFactory`(类比 UML 中的 Creator): diff --git a/src/content/community/tutorials/flutter-accurate-rolling-exposure-practice.md b/src/content/community/tutorials/flutter-accurate-rolling-exposure-practice.md index 4b39707cdb..684c15643b 100644 --- a/src/content/community/tutorials/flutter-accurate-rolling-exposure-practice.md +++ b/src/content/community/tutorials/flutter-accurate-rolling-exposure-practice.md @@ -16,7 +16,7 @@ toc: true 在 Flutter 中,我们通常会在 `initState` 这个生命周期上报曝光埋点,这在一般的使用场景下当然是没有问题的。然而在滑动场景下这个解决方案就不 work 了,我们来看看。 -![listview_track.gif]({{site.flutter-files-cn}}/posts/community/tutorial/images/listview_track.gif) +![listview_track.gif]({{site.flutter-files-cn}}posts/community/tutorial/images/listview_track.gif) 很明显,我们把本来没有展示的 widget 也给打印出来了。如果这样做,埋点上报不准确,将会给业务带来不可恢复的损失。 @@ -37,7 +37,7 @@ ListView.builder( ), ``` -![no_cache_extent.gif]({{site.flutter-files-cn}}/posts/community/tutorial/images/no_cache_extent.gif) +![no_cache_extent.gif]({{site.flutter-files-cn}}posts/community/tutorial/images/no_cache_extent.gif) 好了,本文到此结束,你学会了吗。😏 @@ -63,7 +63,7 @@ ListView.builder( 很容易能够想到和滑动的偏移量 (Scroll Offset),以及 Viewport 在滑动方向上的长度 (Viewport Length), 还有 item 自身的信息,也就是当前 item 距离滑动起始点的距离 (Exposure Offset) 相关。 -![简易关键变量.jpg]({{site.flutter-files-cn}}/posts/community/tutorial/images/simple_key_variable.jpg) +![简易关键变量.jpg]({{site.flutter-files-cn}}posts/community/tutorial/images/simple_key_variable.jpg) 想象一下滑动的样子,一个 Item 从 `ViewPort` 的右边滑入,进入 `ViewPort`,被用户看到,然后再从 `ViewPort` 的左边划出,这一系列过程。我们可以把这个过程抽象为下面的四个状态: - **Item 在 `ViewPort` 右侧不可视范围内**:(Scroll Offset + ViewPort Length < Exposure Offset) @@ -85,7 +85,7 @@ ListView.builder( > 我们这里暂时认为 Item 完全划入 ViewPort 才算一次曝光。 -![关键变量.jpg]({{site.flutter-files-cn}}/posts/community/tutorial/images/key_variable.jpg) +![关键变量.jpg]({{site.flutter-files-cn}}posts/community/tutorial/images/key_variable.jpg) - **Item 在 `ViewPort` 右侧不可视范围内**:(Scroll Offset + ViewPort Length < Exposure Offset) - **Item 进入 `ViewPort` 右侧**:(Scroll Offset + ViewPort Length > Exposure Offset) @@ -208,7 +208,7 @@ Widget buildNotificationWidget(BuildContext context, Widget child) { 如果你敏锐的话,想必已经发现我们现在这样的设计根本没法在一个地方拿到全部信息。 -![数据获取位置不一致.jpg]({{site.flutter-files-cn}}/posts/community/tutorial/images/tree.jpg) +![数据获取位置不一致.jpg]({{site.flutter-files-cn}}posts/community/tutorial/images/tree.jpg) Scroll Notification 仅会向祖先节点发起 Notification 通知,也就是说,我们在 Item 层级是拿不到的! diff --git a/src/content/community/tutorials/flutter-state-management-with-mobx.md b/src/content/community/tutorials/flutter-state-management-with-mobx.md index f421eaaac7..5a9dfe7277 100644 --- a/src/content/community/tutorials/flutter-state-management-with-mobx.md +++ b/src/content/community/tutorials/flutter-state-management-with-mobx.md @@ -3,7 +3,7 @@ title: Flutter 状态管理:使用 MobX toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/04/2fbde82783576.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/04/2fbde82783576.jpg) _文 / Paul Halliday, developer.school 创始人_ diff --git a/src/content/community/tutorials/how-to-use-dartpad-workshop.md b/src/content/community/tutorials/how-to-use-dartpad-workshop.md index ce6f9000ed..7ee856846e 100644 --- a/src/content/community/tutorials/how-to-use-dartpad-workshop.md +++ b/src/content/community/tutorials/how-to-use-dartpad-workshop.md @@ -3,7 +3,7 @@ title: 使用 DartPad 制作代码实践教程 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2022/06/183a339569ee9.png) +![]({{site.flutter-files-cn}}posts/images/2022/06/183a339569ee9.png) DartPad 是一个开源的、在浏览器中体验和运行 Dart 编程语言的线上编辑器,目标是为了帮助开发者更好地了解 Dart 编程语言以及 Flutter 应用开发。 diff --git a/src/content/community/tutorials/memory-leak-monitoring-on-flutter.md b/src/content/community/tutorials/memory-leak-monitoring-on-flutter.md index cbeedf9f56..c1135f27bd 100644 --- a/src/content/community/tutorials/memory-leak-monitoring-on-flutter.md +++ b/src/content/community/tutorials/memory-leak-monitoring-on-flutter.md @@ -414,7 +414,7 @@ Flutter 的 widget tree 的层次是非常深的。 通过上述的种种优化后,我得到了下面这个工具, 在两个 `_InkResponseState` 节点中发现了问题: -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/GMbQYt.png){:width="70%"} +![]({{site.flutter-files-cn}}posts/community/tutorial/images/GMbQYt.png){:width="70%"} 泄漏路径中有两个 `_InkResponseState` 节点所属的 route 信息不同, 表明这两个节点在两个不同的页面中。 @@ -422,7 +422,7 @@ Flutter 的 widget tree 的层次是非常深的。 说明组件已经销毁了,但是还是被 `FocusManager` 引用着! 问题出现在这,来看下这部分代码 -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/GMbq7d.png){:width="90%"} +![]({{site.flutter-files-cn}}posts/community/tutorial/images/GMbq7d.png){:width="90%"} 代码中可以明显的看到 `addListener` 时候 对 `StatefulWidget` 的生命周期理解错误。 @@ -433,7 +433,7 @@ Flutter 的 widget tree 的层次是非常深的。 修复了上述泄漏之后,发现还有一处泄漏。 排查后发现泄漏源在 `TransitionRoute` 中: -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/toDJAS.jpg){:width="90%"} +![]({{site.flutter-files-cn}}posts/community/tutorial/images/toDJAS.jpg){:width="90%"} 当打开一个新页面的时候, 该页面的 `Route`(也就是代码中的 `nextRoute`) diff --git a/src/content/community/tutorials/observer-pattern-in-flutter-n-dart.md b/src/content/community/tutorials/observer-pattern-in-flutter-n-dart.md index 4c92490ad6..e4426122c6 100644 --- a/src/content/community/tutorials/observer-pattern-in-flutter-n-dart.md +++ b/src/content/community/tutorials/observer-pattern-in-flutter-n-dart.md @@ -11,11 +11,11 @@ toc: true >> >> 这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。 -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/2021-08-14-ObserverPattern.png) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/2021-08-14-ObserverPattern.png) 从定义中,不难发现,**观察者** 与 **被观察者 / 发布者** 是这个模式中最重要的组成元素。 -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/2021-08-14-Observer1.png) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/2021-08-14-Observer1.png) 微信的公众号可以被视为生活中最典型的观察者模式的例子。如果你订阅了「Flutter社区」,每当 Flutter 社区发布文章时,就会给你及其他订阅者推送这个消息,这其中你就是 **观察者**,公众号「Flutter社区」就是 **被观察者 (Observable) 或发布者 (Subject)**。 @@ -27,7 +27,7 @@ toc: true 面向对象中,观察者和和发布者 (被观察者) 分别对应两个类 (Observer 和 Subject) 的对象。 -![观察者模式 UML 图,图源维基百科]({{site.flutter-files-cn}}/posts/community/tutorial/images/2021-08-04-2880px-Observer_w_update.svg.png) +![观察者模式 UML 图,图源维基百科]({{site.flutter-files-cn}}posts/community/tutorial/images/2021-08-04-2880px-Observer_w_update.svg.png) 发布类 (Subject) 中通常会有提供给每个对象订阅或取消订阅发布者事件流的 **订阅机制**,包括: @@ -116,17 +116,17 @@ Stream 可以被看作是 Dart 语言原生支持的观察者模式的典型模 从概念上讲,我们可以将 Stream 看做是一个可以连接两端的传送带,作为开发者,我们可以在传送带的一端放入数据,Stream 就会将这些数据传送到另一端。 -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/2021-08-12-stream.svg) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/2021-08-12-stream.svg) 和现实中的情况类似,如果传送带的另一端没有人接受数据,这些数据就会被程序丢弃,因此,我们通常会在传送到尾端安排一个接收数据的对象,在响应式编程中,它被称为数据的观察者。 -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/2021-08-12-stream4.svg) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/2021-08-12-stream4.svg) 如果说上文 Dart 面向对象中,观察者和被观察者两者的关系是在尽量保持低耦合的情况下而形成的,相对独立。那么在响应式编程中,它们的关系就是变得更加紧密的 **上游与下游** 的关系。 因为 Stream,顾名思义,就是「流」的含义,被观察者在流的入口产生事件,观察者则在流的出口等待数据或事件的到来。 -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/2021-08-14-Observer2.png) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/2021-08-14-Observer2.png) 在这套流程里,观察者的 **订阅** 与被观察者的 **事件发布** 等一系列操作都直接在 Stream 或者说是框架内部完成的。 diff --git a/src/content/community/tutorials/singleton-pattern-in-flutter-n-dart.md b/src/content/community/tutorials/singleton-pattern-in-flutter-n-dart.md index ca501181f9..fe9b852a91 100644 --- a/src/content/community/tutorials/singleton-pattern-in-flutter-n-dart.md +++ b/src/content/community/tutorials/singleton-pattern-in-flutter-n-dart.md @@ -11,7 +11,7 @@ toc: true 作为最简单的一种设计模式之一,对于单例本身的概念,大家一看就能明白,但在某些情况下也很容易使用不恰当。相比其他语言,Dart 和 Flutter 中的单例模式也不尽相同,本篇文章我们就一起探究看看它在 Dart 和 Flutter 中的应用。 -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/2021-07-29-%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F.png) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/2021-07-29-%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F.png) ## Flutter(able) 的单例模式 @@ -21,7 +21,7 @@ toc: true - 该实例只能通过静态方法 `getInstance()` 访问。 - 类构造函数通常没有参数,且被标记为私有,确保不能从类外部实例化该类。 -![单例设计模式 UML 图,图源:https://www.uml-diagrams.org/class-reference.html]({{site.flutter-files-cn}}/posts/community/tutorial/images/2021-07-29-1_CqdIf_w0sOciElKyfam3fQ.png) +![单例设计模式 UML 图,图源:https://www.uml-diagrams.org/class-reference.html]({{site.flutter-files-cn}}posts/community/tutorial/images/2021-07-29-1_CqdIf_w0sOciElKyfam3fQ.png) 遵循以上这些要求,我们就不难能用 Dart 写出一个普通的单例模式: @@ -145,7 +145,7 @@ class Singleton { InheritedWidget 状态可遗传的特性可以帮助我们很方便的实现父子组件之间的数据传递,同时,它也可以作为状态管理中的 **数据仓库**,作为整个应用的数据状态统一保存的地方。 -![图源《Flutter 开发之旅从南到北》—— 第九章 图 9.4]({{site.flutter-files-cn}}/posts/community/tutorial/images/2021-07-29-%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93-3243985.svg) +![图源《Flutter 开发之旅从南到北》—— 第九章 图 9.4]({{site.flutter-files-cn}}posts/community/tutorial/images/2021-07-29-%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93-3243985.svg) 上面代码中,我们通过继承 InheritedWidget 就实现了自己的可遗传组件 `_InheritedStateContainer`,其中的 `data` 变量表示全局状态数据,**在这里就可以被认为是整个应用的一个单例对象**。 @@ -182,7 +182,7 @@ Text( 本篇文章,我们经历了从实现普通单例到应用 **getter 操作符** 的 Dart 单例,到使用 **工厂构造函数** Dart 单例,再到使用了 **工厂构造函数 + 空安全语法 + 箭头函数** 的 Dart 单例,最后结合对 InheritedWidget 概念的理解,看到了 Flutter 中特有的单例模式,算是每一步都走了一遍。但学习设计模式的重点还是在于实际应用,希望大家今后在实际工程中能将这些概念用起来,如果你想更进一步理解 Dart 中的单例模式,可以参阅「**拓展阅读**」学习更多,希望对你有帮助。 -![单例模式从南到北]({{site.flutter-files-cn}}/posts/community/tutorial/images/2021-07-29-%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F.svg) +![单例模式从南到北]({{site.flutter-files-cn}}posts/community/tutorial/images/2021-07-29-%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F.svg) ## 拓展阅读 diff --git a/src/content/community/tutorials/state-management-package-getx-provider-analysis.md b/src/content/community/tutorials/state-management-package-getx-provider-analysis.md index b0b6a42bdd..7c376625cf 100644 --- a/src/content/community/tutorials/state-management-package-getx-provider-analysis.md +++ b/src/content/community/tutorials/state-management-package-getx-provider-analysis.md @@ -24,7 +24,7 @@ toc: true 以最经典的的计数器例子分析: -![通过计数器 app 理解 Flutter 的「声明式」和「命令式」]({{site.flutter-files-cn}}/posts/community/tutorial/images/image-20220417103627166.jpg) +![通过计数器 app 理解 Flutter 的「声明式」和「命令式」]({{site.flutter-files-cn}}posts/community/tutorial/images/image-20220417103627166.jpg) 如上图所示:点击右下角按钮,显示的文本数字加一。 Android 中可以这么实现:当右下角按钮点中时, @@ -69,7 +69,7 @@ setState(() { 所以在 Flutter 中有这么一种说法: **UI = f(state)**: -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/2022-05-03-ui-equals-function-of-state.jpg) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/2022-05-03-ui-equals-function-of-state.jpg) 上面的例子中,状态 (state) 就是 `_counter` 的值,调用 `setState` 驱动 `f` build 方法生成新的 UI。 @@ -92,7 +92,7 @@ setState(() { **1) 逻辑和页面 UI 耦合,导致无法复用/单元测试、修改混乱等** -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/image-20220416153119414.jpg) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/image-20220416153119414.jpg) 一开始业务不复杂的时候,所有的代码都直接写到 widget 中,随着业务迭代, 文件越来越大,其他开发者很难直观地明白里面的业务逻辑。 @@ -102,7 +102,7 @@ setState(() { **2) 难以跨组件 (跨页面) 访问数据** -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/image-20220416152601484.jpg) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/image-20220416152601484.jpg) 第二点在于跨组件交互,比如在 Widget 结构中, 一个子组件想要展示父组件中的 `name` 字段, @@ -130,7 +130,7 @@ Flutter 中状态管理框架的核心在于这三个问题的解决思路, 简单来说就是将 View 中的逻辑代码抽离到 Presenter 层, View 只负责视图的构建。 -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/image-20220416152955696.jpg) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/image-20220416152955696.jpg) 这也是 Flutter 中几乎所有状态管理框架的解决思路, 上图的 Presenter 你可以认为是 Get 中的 `GetController`、 @@ -141,7 +141,7 @@ Provider 中的 `ChangeNotifier` 或者 Bloc 中的 `Bloc`。 一般 View 和 Presenter 以接口定义自身行为 (action), **相互持有接口进行调用** 。 -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/image-20220416153312721.jpg) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/image-20220416153312721.jpg) 但 Flutter 中不太适合这么做, 从 Presenter → View 关系上 View 在 Flutter 中对应 Widget, @@ -159,7 +159,7 @@ Widget 可以确实可以直接持有 Presenter, **1) 通过 Flutter 树机制处理 V → P 的获取** -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/2022-05-03-three-trees-on-flutter.jpg) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/2022-05-03-three-trees-on-flutter.jpg) ```dart abstract class Element implements BuildContext { @@ -194,7 +194,7 @@ abstract class BuildContext { 一层一层地向上查找到需要的 Element 对象, 获取 Widget 或者 State 后即可取出需要的变量。 -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/image-20220416154300160.jpg) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/image-20220416154300160.jpg) provider 也是借助了这样的机制,完成了 View -> Presenter 的获取。 通过 `Provider.of` 获取顶层 Provider 组件中的 Present 对象。 @@ -211,7 +211,7 @@ provider 也是借助了这样的机制,完成了 View -> Presenter 的获取 通过依赖注入的方式,实现了对 Presenter 层的获取。 这样在任意的类中都可以获取到 Presenter。 -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/image-20220416154732460.jpg) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/image-20220416154732460.jpg) 这个 Map 对应的 key 是 `runtimeType` + `tag`, 其中 tag 是可选参数,而 value 对应 `Object`, @@ -221,7 +221,7 @@ provider 也是借助了这样的机制,完成了 View -> Presenter 的获取 这个问题其实和上一部分的思考基本类似,所以我们可以总结一下两种方案特点: -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/image-20220416154955957.jpg) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/image-20220416154955957.jpg) **Provider** * 依赖树机制,必须基于 context @@ -238,7 +238,7 @@ Flutter 通过采用观察者模式解决,其关键在于两步: 1. 观察者去订阅被观察的对象; 1. 被观察的对象通知观察者。 -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/2022-05-03-2-steps-of-the-observer-mode.jpg) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/2022-05-03-2-steps-of-the-observer-mode.jpg) 系统也提供了 `ValueNotifier` 等组件的实现: @@ -344,7 +344,7 @@ class MyApp extends StatelessWidget { } ``` -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/2022-05-03-provider-level.jpg) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/2022-05-03-provider-level.jpg) 如代码所示,当我们直接将 Provider 与组件嵌套于同一层级时, 这时代码中的 `Provider.of(context)` 运行时抛出 `ProviderNotFoundException`。 @@ -414,7 +414,7 @@ class MyApp extends StatelessWidget { 要么完全使用 Get 中提供的组件,例如 `GetBuilder`, 它会在 `dispose` 中释放。 -![]({{site.flutter-files-cn}}/posts/community/tutorial/images/2022-05-03-getx-runtimetype.jpg) +![]({{site.flutter-files-cn}}posts/community/tutorial/images/2022-05-03-getx-runtimetype.jpg) `GetBuilder` 中在 `dispose` 阶段进行回收: diff --git a/src/content/community/tutorials/text-classification-using-tensorflow-lite-plugin-for-flutter.md b/src/content/community/tutorials/text-classification-using-tensorflow-lite-plugin-for-flutter.md index a56b4546c7..7490df92ce 100644 --- a/src/content/community/tutorials/text-classification-using-tensorflow-lite-plugin-for-flutter.md +++ b/src/content/community/tutorials/text-classification-using-tensorflow-lite-plugin-for-flutter.md @@ -2,7 +2,7 @@ title: 在 Flutter 中使用 TensorFlow Lite 插件实现文字分类 --- -![]({{site.flutter-files-cn}}/posts/images/2020/09/a21e5b12e71bb.png) +![]({{site.flutter-files-cn}}posts/images/2020/09/a21e5b12e71bb.png) 文/ Amish Garg,Google Summer of Code(GSoC) 实习生,译/ Yuan,谷创字幕组,审校/ Xinlei、Lynn Wang,CFUG 社区。 @@ -40,12 +40,12 @@ title: 在 Flutter 中使用 TensorFlow Lite 插件实现文字分类 要在移动端上运行 TensorFlow 训练模型,我们需要使用 `.tflite` 格式。如果需要了解如何将 TensorFlow 训练的模型转换为 `.tflite` 格式,请参阅[官方指南](https://tensorflow.google.cn/lite/convert/python_api)。 -这里我们准备使用 TensorFlow 官方站点上预训练的文字分类模型,可[从这里下载]({{site.flutter-files-cn}}/posts/flutter-cn/2020/tensorflow-lite-plugin/text_classification.tflite)。 +这里我们准备使用 TensorFlow 官方站点上预训练的文字分类模型,可[从这里下载]({{site.flutter-files-cn}}posts/flutter-cn/2020/tensorflow-lite-plugin/text_classification.tflite)。 > 该预训练的模型可以预测当前段落的情感是积极还是消极。它是基于来自 Mass 等人的 [Large Movie Review Dataset v1.0](http://ai.stanford.edu/~amaas/data/sentiment/) 数据集进行训练的。数据集由基于 IMDB 电影评论所标记的积极或消极标签组成,[点击查看更多信息](https://tensorflow.google.cn/lite/models/text_classification/overview)。 -将 [`text_classification.tflite`]({{site.flutter-files-cn}}/posts/flutter-cn/2020/tensorflow-lite-plugin/text_classification.tflite) 和 [`text_classification_vocab.txt`]({{site.flutter-files-cn}}/posts/flutter-cn/2020/tensorflow-lite-plugin/text_classification_vocab.txt) 文件拷贝到 text_classification_app/assets/ 目录下。 +将 [`text_classification.tflite`]({{site.flutter-files-cn}}posts/flutter-cn/2020/tensorflow-lite-plugin/text_classification.tflite) 和 [`text_classification_vocab.txt`]({{site.flutter-files-cn}}posts/flutter-cn/2020/tensorflow-lite-plugin/text_classification_vocab.txt) 文件拷贝到 text_classification_app/assets/ 目录下。 在 `pubspec.yaml` 文件中添加 `assets/`: @@ -401,7 +401,7 @@ _classifier.classify("I didn't liked the movie"); 请在这里查阅完整代码:[Text Classification Example app with UI](https://github.com/am15h/tflite_flutter_plugin/tree/master/example/)。 -![Text Classification Example App]({{site.flutter-files-cn}}/posts/images/2020/09/3547a17bcd6eb.gif) +![Text Classification Example App]({{site.flutter-files-cn}}posts/images/2020/09/3547a17bcd6eb.gif) 文字分类示例应用 diff --git a/src/content/community/tutorials/understanding-navigator-v2.md b/src/content/community/tutorials/understanding-navigator-v2.md index 664c438b97..b56dc80ef4 100644 --- a/src/content/community/tutorials/understanding-navigator-v2.md +++ b/src/content/community/tutorials/understanding-navigator-v2.md @@ -87,7 +87,7 @@ Page 同样只保存页面路由相关信息, 框架层也存在一个 `createRoute()` 方法 可以创建与之对应的 Route 实例。 -![]({{site.flutter-files-cn}}/posts/images/2020/11/bc57589cd7882.png) +![]({{site.flutter-files-cn}}posts/images/2020/11/bc57589cd7882.png) English placeholder for the translation toggle tools issue. @@ -320,7 +320,7 @@ Router 就会将该状态分发给子组件, 所以当 Navigator 作为 Router 的子组件时, 就会天然具有感知路由状态改变的能力了,如下图所示: -![]({{site.flutter-files-cn}}/posts/images/2020/11/957f7d75ef977.png) +![]({{site.flutter-files-cn}}posts/images/2020/11/957f7d75ef977.png) 当用户点击某个按钮就会触发类似下面这个函数的调用, 该函数又会导致状态改变而重建子组件。 @@ -450,7 +450,7 @@ BackButtonDispatcher Delegate 回退事件都会转发给 整个过程可以用下图表示: -![]({{site.flutter-files-cn}}/posts/images/2020/11/516f15849e0aa.png) +![]({{site.flutter-files-cn}}posts/images/2020/11/516f15849e0aa.png) {{site.alert.note}} diff --git a/src/content/cookbook/animation/animated-container.md b/src/content/cookbook/animation/animated-container.md index 7774897f0a..836125be38 100644 --- a/src/content/cookbook/animation/animated-container.md +++ b/src/content/cookbook/animation/animated-container.md @@ -282,8 +282,8 @@ class _AnimatedContainerAppState extends State { -[`AnimatedContainer`]: {{site.api}}/flutter/widgets/AnimatedContainer-class.html -[`Container`]: {{site.api}}/flutter/widgets/Container-class.html -[`setState()`]: {{site.api}}/flutter/widgets/State/setState.html -[`State`]: {{site.api}}/flutter/widgets/State-class.html -[`StatefulWidget`]: {{site.api}}/flutter/widgets/StatefulWidget-class.html +[`AnimatedContainer`]: {{site.api}}flutter/widgets/AnimatedContainer-class.html +[`Container`]: {{site.api}}flutter/widgets/Container-class.html +[`setState()`]: {{site.api}}flutter/widgets/State/setState.html +[`State`]: {{site.api}}flutter/widgets/State-class.html +[`StatefulWidget`]: {{site.api}}flutter/widgets/StatefulWidget-class.html diff --git a/src/content/cookbook/animation/opacity-animation.md b/src/content/cookbook/animation/opacity-animation.md index 901a277d57..141b10ab07 100644 --- a/src/content/cookbook/animation/opacity-animation.md +++ b/src/content/cookbook/animation/opacity-animation.md @@ -298,7 +298,7 @@ class _MyHomePageState extends State { Fade In and Out Demo -[`AnimatedOpacity`]: {{site.api}}/flutter/widgets/AnimatedOpacity-class.html +[`AnimatedOpacity`]: {{site.api}}flutter/widgets/AnimatedOpacity-class.html [Gestures]: /cookbook#gestures -[`StatefulWidget`]: {{site.api}}/flutter/widgets/StatefulWidget-class.html -[`setState()`]: {{site.api}}/flutter/widgets/State/setState.html +[`StatefulWidget`]: {{site.api}}flutter/widgets/StatefulWidget-class.html +[`setState()`]: {{site.api}}flutter/widgets/State/setState.html diff --git a/src/content/cookbook/animation/page-route-animation.md b/src/content/cookbook/animation/page-route-animation.md index 7ac6b0a1bb..5655c55584 100644 --- a/src/content/cookbook/animation/page-route-animation.md +++ b/src/content/cookbook/animation/page-route-animation.md @@ -396,14 +396,14 @@ class Page2 extends StatelessWidget { -[`AnimatedWidget`]: {{site.api}}/flutter/widgets/AnimatedWidget-class.html -[`Animation`]: {{site.api}}/flutter/animation/Animation-class.html -[`chain()`]: {{site.api}}/flutter/animation/Animatable/chain.html -[`Curve`]: {{site.api}}/flutter/animation/Curve-class.html -[`Curves`]: {{site.api}}/flutter/animation/Curves-class.html -[`CurveTween`]: {{site.api}}/flutter/animation/CurveTween-class.html -['FractionalTranslation']: {{site.api}}/flutter/widgets/FractionalTranslation-class.html -[`PageRouteBuilder`]: {{site.api}}/flutter/widgets/PageRouteBuilder-class.html -[`Route`]: {{site.api}}/flutter/widgets/Route-class.html -[`SlideTransition`]: {{site.api}}/flutter/widgets/SlideTransition-class.html -[`Tween`]: {{site.api}}/flutter/animation/Tween-class.html +[`AnimatedWidget`]: {{site.api}}flutter/widgets/AnimatedWidget-class.html +[`Animation`]: {{site.api}}flutter/animation/Animation-class.html +[`chain()`]: {{site.api}}flutter/animation/Animatable/chain.html +[`Curve`]: {{site.api}}flutter/animation/Curve-class.html +[`Curves`]: {{site.api}}flutter/animation/Curves-class.html +[`CurveTween`]: {{site.api}}flutter/animation/CurveTween-class.html +['FractionalTranslation']: {{site.api}}flutter/widgets/FractionalTranslation-class.html +[`PageRouteBuilder`]: {{site.api}}flutter/widgets/PageRouteBuilder-class.html +[`Route`]: {{site.api}}flutter/widgets/Route-class.html +[`SlideTransition`]: {{site.api}}flutter/widgets/SlideTransition-class.html +[`Tween`]: {{site.api}}flutter/animation/Tween-class.html diff --git a/src/content/cookbook/animation/physics-simulation.md b/src/content/cookbook/animation/physics-simulation.md index e35a47c303..eefa0573d9 100644 --- a/src/content/cookbook/animation/physics-simulation.md +++ b/src/content/cookbook/animation/physics-simulation.md @@ -547,12 +547,12 @@ class _DraggableCardState extends State Demo showing a widget being dragged and snapped back to the center -[Align]: {{site.api}}/flutter/widgets/Align-class.html -[Alignment]: {{site.api}}/flutter/painting/Alignment-class.html -[AnimationController]: {{site.api}}/flutter/animation/AnimationController-class.html -[GestureDetector]: {{site.api}}/flutter/widgets/GestureDetector-class.html -[SingleTickerProviderStateMixin]: {{site.api}}/flutter/widgets/SingleTickerProviderStateMixin-mixin.html -[TickerProvider]: {{site.api}}/flutter/scheduler/TickerProvider-class.html -[MediaQuery]: {{site.api}}/flutter/widgets/MediaQuery-class.html -[DragEndDetails]: {{site.api}}/flutter/gestures/DragEndDetails-class.html -[SpringSimulation]: {{site.api}}/flutter/physics/SpringSimulation-class.html +[Align]: {{site.api}}flutter/widgets/Align-class.html +[Alignment]: {{site.api}}flutter/painting/Alignment-class.html +[AnimationController]: {{site.api}}flutter/animation/AnimationController-class.html +[GestureDetector]: {{site.api}}flutter/widgets/GestureDetector-class.html +[SingleTickerProviderStateMixin]: {{site.api}}flutter/widgets/SingleTickerProviderStateMixin-mixin.html +[TickerProvider]: {{site.api}}flutter/scheduler/TickerProvider-class.html +[MediaQuery]: {{site.api}}flutter/widgets/MediaQuery-class.html +[DragEndDetails]: {{site.api}}flutter/gestures/DragEndDetails-class.html +[SpringSimulation]: {{site.api}}flutter/physics/SpringSimulation-class.html diff --git a/src/content/cookbook/design/drawer.md b/src/content/cookbook/design/drawer.md index 3261ab1242..90e420bba5 100644 --- a/src/content/cookbook/design/drawer.md +++ b/src/content/cookbook/design/drawer.md @@ -80,7 +80,7 @@ but it's often best to use the `Drawer` widget from the which adheres to the Material Design spec. 我们现在可以在 `Scaffold` 上添加一个 drawer。虽然 drawer 可以是任何 widget, -但最好还是使用 [Material Library]({{site.api}}/flutter/material/material-library.html) +但最好还是使用 [Material Library]({{site.api}}flutter/material/material-library.html) 中的 `Drawer` widget,因为这样才符合 Material Design 设计规范。 @@ -375,12 +375,12 @@ class _MyHomePageState extends State { -[`Drawer`]: {{site.api}}/flutter/material/Drawer-class.html -[`DrawerHeader`]: {{site.api}}/flutter/material/DrawerHeader-class.html +[`Drawer`]: {{site.api}}flutter/material/Drawer-class.html +[`DrawerHeader`]: {{site.api}}flutter/material/DrawerHeader-class.html [list recipes]: /cookbook#lists -[`ListTile`]: {{site.api}}/flutter/material/ListTile-class.html -[`ListView`]: {{site.api}}/flutter/widgets/ListView-class.html -[material library]: {{site.api}}/flutter/material/material-library.html -[`Navigator`]: {{site.api}}/flutter/widgets/Navigator-class.html -[`Scaffold`]: {{site.api}}/flutter/material/Scaffold-class.html +[`ListTile`]: {{site.api}}flutter/material/ListTile-class.html +[`ListView`]: {{site.api}}flutter/widgets/ListView-class.html +[material library]: {{site.api}}flutter/material/material-library.html +[`Navigator`]: {{site.api}}flutter/widgets/Navigator-class.html +[`Scaffold`]: {{site.api}}flutter/material/Scaffold-class.html [Navigation]: /cookbook#navigation diff --git a/src/content/cookbook/design/fonts.md b/src/content/cookbook/design/fonts.md index b2ae37accd..f276057d64 100644 --- a/src/content/cookbook/design/fonts.md +++ b/src/content/cookbook/design/fonts.md @@ -473,12 +473,12 @@ The resulting Flutter app should display the following screen. [variable-fonts]: https://fonts.google.com/knowledge/introducing_type/introducing_variable_fonts [Export fonts from a package]: /cookbook/design/package-fonts -[`fontFamily`]: {{site.api}}/flutter/painting/TextStyle/fontFamily.html -[fontStyle property]: {{site.api}}/flutter/painting/TextStyle/fontStyle.html -[`FontStyle`]: {{site.api}}/flutter/dart-ui/FontStyle.html -[fontWeight property]: {{site.api}}/flutter/painting/TextStyle/fontWeight.html -[`FontWeight`]: {{site.api}}/flutter/dart-ui/FontWeight-class.html +[`fontFamily`]: {{site.api}}flutter/painting/TextStyle/fontFamily.html +[fontStyle property]: {{site.api}}flutter/painting/TextStyle/fontStyle.html +[`FontStyle`]: {{site.api}}flutter/dart-ui/FontStyle.html +[fontWeight property]: {{site.api}}flutter/painting/TextStyle/fontWeight.html +[`FontWeight`]: {{site.api}}flutter/dart-ui/FontWeight-class.html [Google Fonts]: https://fonts.google.com -[google_fonts]: {{site.pub-pkg}}/google_fonts -[`TextStyle`]: {{site.api}}/flutter/painting/TextStyle-class.html +[google_fonts]: {{site.pub-pkg}}google_fonts +[`TextStyle`]: {{site.api}}flutter/painting/TextStyle-class.html [Using Themes to share colors and font styles]: /cookbook/design/themes diff --git a/src/content/cookbook/design/orientation.md b/src/content/cookbook/design/orientation.md index 8667a87560..d604562d72 100644 --- a/src/content/cookbook/design/orientation.md +++ b/src/content/cookbook/design/orientation.md @@ -210,7 +210,7 @@ void main() { [Creating a grid list]: /cookbook/lists/grid-lists -[`DeviceOrientation`]: {{site.api}}/flutter/services/DeviceOrientation.html -[`OrientationBuilder`]: {{site.api}}/flutter/widgets/OrientationBuilder-class.html -[`Orientation`]: {{site.api}}/flutter/widgets/Orientation.html -[`SystemChrome.setPreferredOrientations()`]: {{site.api}}/flutter/services/SystemChrome/setPreferredOrientations.html +[`DeviceOrientation`]: {{site.api}}flutter/services/DeviceOrientation.html +[`OrientationBuilder`]: {{site.api}}flutter/widgets/OrientationBuilder-class.html +[`Orientation`]: {{site.api}}flutter/widgets/Orientation.html +[`SystemChrome.setPreferredOrientations()`]: {{site.api}}flutter/services/SystemChrome/setPreferredOrientations.html diff --git a/src/content/cookbook/design/package-fonts.md b/src/content/cookbook/design/package-fonts.md index 9e182ed6a9..be0d5b0e10 100644 --- a/src/content/cookbook/design/package-fonts.md +++ b/src/content/cookbook/design/package-fonts.md @@ -226,6 +226,6 @@ class MyHomePage extends StatelessWidget { ![Package Fonts Demo](/assets/images/docs/cookbook/package-fonts.png){:.site-mobile-screenshot} [Google Fonts]: https://fonts.google.com -[google_fonts]: {{site.pub-pkg}}/google_fonts +[google_fonts]: {{site.pub-pkg}}google_fonts [pub.dev]: {{site.pub}} -[`TextStyle`]: {{site.api}}/flutter/painting/TextStyle-class.html +[`TextStyle`]: {{site.api}}flutter/painting/TextStyle-class.html diff --git a/src/content/cookbook/design/snackbars.md b/src/content/cookbook/design/snackbars.md index dcba525543..f73414d0b9 100644 --- a/src/content/cookbook/design/snackbars.md +++ b/src/content/cookbook/design/snackbars.md @@ -212,6 +212,6 @@ class SnackBarPage extends StatelessWidget { [Gestures]: /cookbook#gestures -[`Scaffold`]: {{site.api}}/flutter/material/Scaffold-class.html -[`SnackBar`]: {{site.api}}/flutter/material/SnackBar-class.html -[material library]: {{site.api}}/flutter/material/material-library.html +[`Scaffold`]: {{site.api}}flutter/material/Scaffold-class.html +[`SnackBar`]: {{site.api}}flutter/material/SnackBar-class.html +[material library]: {{site.api}}flutter/material/material-library.html diff --git a/src/content/cookbook/design/tabs.md b/src/content/cookbook/design/tabs.md index ff78a71b0b..8f956fe720 100644 --- a/src/content/cookbook/design/tabs.md +++ b/src/content/cookbook/design/tabs.md @@ -201,10 +201,10 @@ class TabBarDemo extends StatelessWidget { -[`AppBar`]: {{site.api}}/flutter/material/AppBar-class.html -[`DefaultTabController`]: {{site.api}}/flutter/material/DefaultTabController-class.html -[material library]: {{site.api}}/flutter/material/material-library.html -[`Tab`]: {{site.api}}/flutter/material/Tab-class.html -[`TabBar`]: {{site.api}}/flutter/material/TabBar-class.html -[`TabBarView`]: {{site.api}}/flutter/material/TabBarView-class.html -[`TabController`]: {{site.api}}/flutter/material/TabController-class.html +[`AppBar`]: {{site.api}}flutter/material/AppBar-class.html +[`DefaultTabController`]: {{site.api}}flutter/material/DefaultTabController-class.html +[material library]: {{site.api}}flutter/material/material-library.html +[`Tab`]: {{site.api}}flutter/material/Tab-class.html +[`TabBar`]: {{site.api}}flutter/material/TabBar-class.html +[`TabBarView`]: {{site.api}}flutter/material/TabBarView-class.html +[`TabController`]: {{site.api}}flutter/material/TabController-class.html diff --git a/src/content/cookbook/design/themes.md b/src/content/cookbook/design/themes.md index 9733f423d6..907eab04ad 100644 --- a/src/content/cookbook/design/themes.md +++ b/src/content/cookbook/design/themes.md @@ -26,7 +26,7 @@ Material 3 是 Flutter 的默认主题。 ::: [Material 3]: /ui/design/material -[google_fonts]: {{site.pub-pkg}}/google_fonts +[google_fonts]: {{site.pub-pkg}}google_fonts To share colors and font styles throughout an app, use themes. @@ -133,8 +133,8 @@ Most instances of `ThemeData` set values for the following two properties. These [`textTheme`][] 定义了文字样式。 -[`colorScheme`]: {{site.api}}/flutter/material/ThemeData/colorScheme.html -[`textTheme`]: {{site.api}}/flutter/material/ThemeData/textTheme.html +[`colorScheme`]: {{site.api}}flutter/material/ThemeData/colorScheme.html +[`textTheme`]: {{site.api}}flutter/material/ThemeData/textTheme.html To learn what colors, fonts, and other properties, you can define, check out the [`ThemeData`][] documentation. @@ -381,5 +381,5 @@ class MyHomePage extends StatelessWidget { Themes Demo -[`copyWith()`]: {{site.api}}/flutter/material/ThemeData/copyWith.html -[`ThemeData`]: {{site.api}}/flutter/material/ThemeData-class.html +[`copyWith()`]: {{site.api}}flutter/material/ThemeData/copyWith.html +[`ThemeData`]: {{site.api}}flutter/material/ThemeData-class.html diff --git a/src/content/cookbook/effects/download-button.md b/src/content/cookbook/effects/download-button.md index ff344bb038..7f4911d95f 100644 --- a/src/content/cookbook/effects/download-button.md +++ b/src/content/cookbook/effects/download-button.md @@ -123,7 +123,7 @@ method remains simple, allowing for the additions that follow. Instead of creating a function to return a widget, like `Widget _buildSomething() {}`, always prefer creating a `StatelessWidget` or a `StatefulWidget` which is more performant. More -considerations on this can be found in the [documentation]({{site.api}}/flutter/widgets/StatelessWidget-class.html) +considerations on this can be found in the [documentation]({{site.api}}flutter/widgets/StatelessWidget-class.html) or in a dedicated video in the Flutter [YouTube channel]({{site.yt.watch}}?v=IOyq-eTRhvo). For now, the `AnimatedContainer` child is just a `SizedBox` because we will come back at it in another step. diff --git a/src/content/cookbook/effects/drag-a-widget.md b/src/content/cookbook/effects/drag-a-widget.md index 8dc8e37f1e..acec345ea5 100644 --- a/src/content/cookbook/effects/drag-a-widget.md +++ b/src/content/cookbook/effects/drag-a-widget.md @@ -659,5 +659,5 @@ class Customer { } ``` -[`pointerDragAnchorStrategy`]: {{site.api}}/flutter/widgets/pointerDragAnchorStrategy.html -[`LongPressDraggable`]: {{site.api}}/flutter/widgets/LongPressDraggable-class.html +[`pointerDragAnchorStrategy`]: {{site.api}}flutter/widgets/pointerDragAnchorStrategy.html +[`LongPressDraggable`]: {{site.api}}flutter/widgets/LongPressDraggable-class.html diff --git a/src/content/cookbook/effects/gradient-bubbles.md b/src/content/cookbook/effects/gradient-bubbles.md index 4b8a033248..ae9adf70a1 100644 --- a/src/content/cookbook/effects/gradient-bubbles.md +++ b/src/content/cookbook/effects/gradient-bubbles.md @@ -521,9 +521,9 @@ then you can base your painting decisions on the layout information, such as the position of the `CustomPaint` widget within a `Scrollable` or within the screen. -[cloning the example code]: {{site.github}}/flutter/codelabs -[`CustomPainter`]: {{site.api}}/flutter/rendering/CustomPainter-class.html -[`Flow`]: {{site.api}}/flutter/widgets/Flow-class.html -[`InheritedWidget`]: {{site.api}}/flutter/widgets/InheritedWidget-class.html -[Issue 44152]: {{site.repo.flutter}}/issues/44152 -[`RenderBox`]: {{site.api}}/flutter/rendering/RenderBox-class.html +[cloning the example code]: {{site.repo.organization}}codelabs +[`CustomPainter`]: {{site.api}}flutter/rendering/CustomPainter-class.html +[`Flow`]: {{site.api}}flutter/widgets/Flow-class.html +[`InheritedWidget`]: {{site.api}}flutter/widgets/InheritedWidget-class.html +[Issue 44152]: {{site.repo.flutter}}issues/44152 +[`RenderBox`]: {{site.api}}flutter/rendering/RenderBox-class.html diff --git a/src/content/cookbook/effects/parallax-scrolling.md b/src/content/cookbook/effects/parallax-scrolling.md index 015cd7e4a6..fbf92f0537 100644 --- a/src/content/cookbook/effects/parallax-scrolling.md +++ b/src/content/cookbook/effects/parallax-scrolling.md @@ -939,6 +939,6 @@ const locations = [ ]; ``` -[`CustomPaint`]: {{site.api}}/flutter/widgets/CustomPaint-class.html -[`Flow`]: {{site.api}}/flutter/widgets/Flow-class.html -[`RenderBox`]: {{site.api}}/flutter/rendering/RenderBox-class.html +[`CustomPaint`]: {{site.api}}flutter/widgets/CustomPaint-class.html +[`Flow`]: {{site.api}}flutter/widgets/Flow-class.html +[`RenderBox`]: {{site.api}}flutter/rendering/RenderBox-class.html diff --git a/src/content/cookbook/effects/photo-filter-carousel.md b/src/content/cookbook/effects/photo-filter-carousel.md index 6349893b9f..6748b651a1 100644 --- a/src/content/cookbook/effects/photo-filter-carousel.md +++ b/src/content/cookbook/effects/photo-filter-carousel.md @@ -841,8 +841,8 @@ class FilterItem extends StatelessWidget { } ``` -[`Image`]: {{site.api}}/flutter/widgets/Image-class.html -[`Scrollable`]: {{site.api}}/flutter/widgets/Scrollable-class.html -[`viewportBuilder`]: {{site.api}}/flutter/widgets/Scrollable/viewportBuilder.html -[`Flow`]: {{site.api}}/flutter/widgets/Flow-class.html -[delegate property]: {{site.api}}/flutter/widgets/Flow/delegate.html +[`Image`]: {{site.api}}flutter/widgets/Image-class.html +[`Scrollable`]: {{site.api}}flutter/widgets/Scrollable-class.html +[`viewportBuilder`]: {{site.api}}flutter/widgets/Scrollable/viewportBuilder.html +[`Flow`]: {{site.api}}flutter/widgets/Flow-class.html +[delegate property]: {{site.api}}flutter/widgets/Flow/delegate.html diff --git a/src/content/cookbook/effects/shimmer-loading.md b/src/content/cookbook/effects/shimmer-loading.md index e9915c7240..5f8cbb86d1 100644 --- a/src/content/cookbook/effects/shimmer-loading.md +++ b/src/content/cookbook/effects/shimmer-loading.md @@ -955,9 +955,9 @@ class CardListItem extends StatelessWidget { -[`AnimationController`]: {{site.api}}/flutter/animation/AnimationController-class.html -[cloning the example code]: {{site.github}}/flutter/codelabs -[issue 44152]: {{site.repo.flutter}}/issues/44152 -[`LinearGradient`]: {{site.api}}/flutter/painting/LinearGradient-class.html -[`Listenable`]: {{site.api}}/flutter/foundation/Listenable-class.html -[`ShaderMask`]: {{site.api}}/flutter/widgets/ShaderMask-class.html +[`AnimationController`]: {{site.api}}flutter/animation/AnimationController-class.html +[cloning the example code]: {{site.repo.organization}}codelabs +[issue 44152]: {{site.repo.flutter}}issues/44152 +[`LinearGradient`]: {{site.api}}flutter/painting/LinearGradient-class.html +[`Listenable`]: {{site.api}}flutter/foundation/Listenable-class.html +[`ShaderMask`]: {{site.api}}flutter/widgets/ShaderMask-class.html diff --git a/src/content/cookbook/forms/focus.md b/src/content/cookbook/forms/focus.md index a013fdbc74..2956a449bc 100644 --- a/src/content/cookbook/forms/focus.md +++ b/src/content/cookbook/forms/focus.md @@ -280,10 +280,10 @@ class _MyCustomFormState extends State { -[fix has landed]: {{site.repo.flutter}}/pull/50372 -[`FocusNode`]: {{site.api}}/flutter/widgets/FocusNode-class.html +[fix has landed]: {{site.repo.flutter}}pull/50372 +[`FocusNode`]: {{site.api}}flutter/widgets/FocusNode-class.html [Forms]: /cookbook#forms -[flutter/flutter@bf551a3]: {{site.repo.flutter}}/commit/bf551a31fe7ef45c854a219686b6837400bfd94c -[Issue 52221]: {{site.repo.flutter}}/issues/52221 -[`requestFocus()`]: {{site.api}}/flutter/widgets/FocusNode/requestFocus.html -[workaround]: {{site.repo.flutter}}/issues/52221#issuecomment-598244655 +[flutter/flutter@bf551a3]: {{site.repo.flutter}}commit/bf551a31fe7ef45c854a219686b6837400bfd94c +[Issue 52221]: {{site.repo.flutter}}issues/52221 +[`requestFocus()`]: {{site.api}}flutter/widgets/FocusNode/requestFocus.html +[workaround]: {{site.repo.flutter}}issues/52221#issuecomment-598244655 diff --git a/src/content/cookbook/forms/retrieve-input.md b/src/content/cookbook/forms/retrieve-input.md index 800d0b87fb..c0bb45b3b4 100644 --- a/src/content/cookbook/forms/retrieve-input.md +++ b/src/content/cookbook/forms/retrieve-input.md @@ -229,5 +229,5 @@ class _MyCustomFormState extends State { -[`text()`]: {{site.api}}/flutter/widgets/TextEditingController/text.html -[`TextEditingController`]: {{site.api}}/flutter/widgets/TextEditingController-class.html +[`text()`]: {{site.api}}flutter/widgets/TextEditingController/text.html +[`TextEditingController`]: {{site.api}}flutter/widgets/TextEditingController-class.html diff --git a/src/content/cookbook/forms/text-field-changes.md b/src/content/cookbook/forms/text-field-changes.md index 61332466d9..32ebbf3211 100644 --- a/src/content/cookbook/forms/text-field-changes.md +++ b/src/content/cookbook/forms/text-field-changes.md @@ -318,10 +318,10 @@ class _MyCustomFormState extends State { } ``` -[`addListener()`]: {{site.api}}/flutter/foundation/ChangeNotifier/addListener.html -[`controller`]: {{site.api}}/flutter/material/TextField/controller.html -[`onChanged()`]: {{site.api}}/flutter/material/TextField/onChanged.html -[`TextField`]: {{site.api}}/flutter/material/TextField-class.html -[`TextEditingController`]: {{site.api}}/flutter/widgets/TextEditingController-class.html -[`TextFormField`]: {{site.api}}/flutter/material/TextFormField-class.html -[characters]: {{site.pub}}/packages/characters +[`addListener()`]: {{site.api}}flutter/foundation/ChangeNotifier/addListener.html +[`controller`]: {{site.api}}flutter/material/TextField/controller.html +[`onChanged()`]: {{site.api}}flutter/material/TextField/onChanged.html +[`TextField`]: {{site.api}}flutter/material/TextField-class.html +[`TextEditingController`]: {{site.api}}flutter/widgets/TextEditingController-class.html +[`TextFormField`]: {{site.api}}flutter/material/TextFormField-class.html +[characters]: {{site.pub-pkg}}characters diff --git a/src/content/cookbook/forms/text-input.md b/src/content/cookbook/forms/text-input.md index c21034749f..b3e0045670 100644 --- a/src/content/cookbook/forms/text-input.md +++ b/src/content/cookbook/forms/text-input.md @@ -152,10 +152,10 @@ For more information on input validation, see the 获取更多关于输入验证的内容。 [Building a form with validation]: /cookbook/forms/validation/ -[`decoration`]: {{site.api}}/flutter/material/TextField/decoration.html -[`Form`]: {{site.api}}/flutter/widgets/Form-class.html -[`FormField`]: {{site.api}}/flutter/widgets/FormField-class.html +[`decoration`]: {{site.api}}flutter/material/TextField/decoration.html +[`Form`]: {{site.api}}flutter/widgets/Form-class.html +[`FormField`]: {{site.api}}flutter/widgets/FormField-class.html [Handle changes to a text field]: /cookbook/forms/text-field-changes/ -[`InputDecoration`]: {{site.api}}/flutter/material/InputDecoration-class.html -[`TextField`]: {{site.api}}/flutter/material/TextField-class.html -[`TextFormField`]: {{site.api}}/flutter/material/TextFormField-class.html +[`InputDecoration`]: {{site.api}}flutter/material/InputDecoration-class.html +[`TextField`]: {{site.api}}flutter/material/TextField-class.html +[`TextFormField`]: {{site.api}}flutter/material/TextFormField-class.html diff --git a/src/content/cookbook/forms/validation.md b/src/content/cookbook/forms/validation.md index bbf2c2b4ce..a8a2aea449 100644 --- a/src/content/cookbook/forms/validation.md +++ b/src/content/cookbook/forms/validation.md @@ -342,8 +342,8 @@ To learn how to retrieve these values, check out the [获取文本输入框的值][Retrieve the value of a text field] 部分。 [Retrieve the value of a text field]: /cookbook/forms/retrieve-input -[`Form`]: {{site.api}}/flutter/widgets/Form-class.html -[`Form.of()`]: {{site.api}}/flutter/widgets/Form/of.html -[`FormState`]: {{site.api}}/flutter/widgets/FormState-class.html -[`GlobalKey`]: {{site.api}}/flutter/widgets/GlobalKey-class.html -[`TextFormField`]: {{site.api}}/flutter/material/TextFormField-class.html \ No newline at end of file +[`Form`]: {{site.api}}flutter/widgets/Form-class.html +[`Form.of()`]: {{site.api}}flutter/widgets/Form/of.html +[`FormState`]: {{site.api}}flutter/widgets/FormState-class.html +[`GlobalKey`]: {{site.api}}flutter/widgets/GlobalKey-class.html +[`TextFormField`]: {{site.api}}flutter/material/TextFormField-class.html \ No newline at end of file diff --git a/src/content/cookbook/games/achievements-leaderboard.md b/src/content/cookbook/games/achievements-leaderboard.md index b5399b455f..8e4d070c4e 100644 --- a/src/content/cookbook/games/achievements-leaderboard.md +++ b/src/content/cookbook/games/achievements-leaderboard.md @@ -25,7 +25,7 @@ developers don't need to re-implement them for every game. This recipe demonstrates how to use the [`games_services` package][] to add achievements and leaderboard functionality to your mobile game. -[`games_services` package]: {{site.pub-pkg}}/games_services +[`games_services` package]: {{site.pub-pkg}}games_services [immersion, achievement, cooperation, and competition]: https://meditations.metavert.io/p/game-player-motivations ## 1. Enable platform services @@ -119,14 +119,14 @@ To enable *Play Games Services* on Android: containing the XML you received in the previous step. [Google Play Console]: https://play.google.com/console/ -[Play Games Services guide]: {{site.developers}}/games/services/console/enabling +[Play Games Services guide]: {{site.developers}}games/services/console/enabling ## 2. Sign in to the game service Now that you have set up *Game Center* and *Play Games Services*, and have your achievement & leaderboard IDs ready, it's finally Dart time. -1. Add a dependency on the [`games_services` package]({{site.pub-pkg}}/games_services). +1. Add a dependency on the [`games_services` package]({{site.pub-pkg}}games_services). ```console $ flutter pub add games_services @@ -192,7 +192,7 @@ the raw functionality of the `games_services` plugin. 3. To display the achievements in your own UI, use [`GamesServices.loadAchievements()`][]. -[`GamesServices.loadAchievements()`]: {{site.pub-api}}/games_services/latest/games_services/GamesServices/loadAchievements.html +[`GamesServices.loadAchievements()`]: {{site.pub-api}}games_services/latest/games_services/GamesServices/loadAchievements.html ## 4. Submit scores @@ -235,7 +235,7 @@ leaderboards. 3. If you want to display the leaderboard scores in your own UI, you can fetch them with [`GamesServices.loadLeaderboardScores()`][]. -[`GamesServices.loadLeaderboardScores()`]: {{site.pub-api}}/games_services/latest/games_services/GamesServices/loadLeaderboardScores.html +[`GamesServices.loadLeaderboardScores()`]: {{site.pub-api}}games_services/latest/games_services/GamesServices/loadLeaderboardScores.html ## 5. Next steps @@ -380,6 +380,6 @@ The Flutter Casual Games Toolkit includes the following templates: where the player endlessly runs, avoiding pitfalls and gaining rewards -[basic]: {{site.github}}/flutter/games/tree/main/templates/basic#readme -[card]: {{site.github}}/flutter/games/tree/main/templates/card#readme -[endless runner]: {{site.github}}/flutter/games/tree/main/templates/endless_runner#readme +[basic]: {{site.repo.organization}}games/tree/main/templates/basic#readme +[card]: {{site.repo.organization}}games/tree/main/templates/card#readme +[endless runner]: {{site.repo.organization}}games/tree/main/templates/endless_runner#readme diff --git a/src/content/cookbook/games/firestore-multiplayer.md b/src/content/cookbook/games/firestore-multiplayer.md index 0dcd977e6e..c52e2e1d38 100644 --- a/src/content/cookbook/games/firestore-multiplayer.md +++ b/src/content/cookbook/games/firestore-multiplayer.md @@ -46,8 +46,8 @@ to implement multiplayer capabilities in your game. This recipe doesn't require a server. It uses two or more clients sharing game state using Cloud Firestore. -[`cloud_firestore` package]: {{site.pub-pkg}}/cloud_firestore -[Dart package]: {{site.pub-pkg}}/nakama +[`cloud_firestore` package]: {{site.pub-pkg}}cloud_firestore +[Dart package]: {{site.pub-pkg}}nakama [Nakama]: https://heroiclabs.com/nakama/ ## 1. Prepare your game for multiplayer @@ -80,8 +80,8 @@ You can ignore this step and follow the recipe with your own game project. Adapt the code at appropriate places. ::: -[`card`]: {{site.github}}/flutter/games/tree/main/templates/card#readme -[`flutter/games` repository]: {{site.github}}/flutter/games +[`card`]: {{site.repo.organization}}games/tree/main/templates/card#readme +[`flutter/games` repository]: {{site.repo.organization}}games ## 2. Install Firestore @@ -122,9 +122,9 @@ Dart code in that guide, return to this recipe. {% endcomment %} [Cloud Firestore]: https://cloud.google.com/firestore/ -[Create a Cloud Firestore database]: {{site.firebase}}/docs/firestore/quickstart#create -[Get started with Cloud Firestore]: {{site.firebase}}/docs/firestore/quickstart -[Set up your development environment]: {{site.firebase}}/docs/firestore/quickstart#set_up_your_development_environment +[Create a Cloud Firestore database]: {{site.firebase}}docs/firestore/quickstart#create +[Get started with Cloud Firestore]: {{site.firebase}}docs/firestore/quickstart +[Set up your development environment]: {{site.firebase}}docs/firestore/quickstart#set_up_your_development_environment ## 3. Initialize Firestore @@ -184,7 +184,7 @@ Dart code in that guide, return to this recipe. instance from various parts of your codebase. ::: -[install the `provider` package]: {{site.pub-pkg}}/provider/install +[install the `provider` package]: {{site.pub-pkg}}provider/install ## 4. Create a Firestore controller class @@ -502,5 +502,5 @@ The basics remain the same: a large collection of documents, each representing one active or potential match. -[a Firestore codelab or two]: {{site.codelabs}}/?product=flutter&text=firestore -[built-in way to authenticate users]: {{site.firebase}}/docs/auth/flutter/start +[a Firestore codelab or two]: {{site.codelabs}}?product=flutter&text=firestore +[built-in way to authenticate users]: {{site.firebase}}docs/auth/flutter/start diff --git a/src/content/cookbook/gestures/dismissible.md b/src/content/cookbook/gestures/dismissible.md index 0c218a51fb..8d42b3f8d2 100644 --- a/src/content/cookbook/gestures/dismissible.md +++ b/src/content/cookbook/gestures/dismissible.md @@ -260,5 +260,5 @@ class MyAppState extends State { -[`Dismissible`]: {{site.api}}/flutter/widgets/Dismissible-class.html +[`Dismissible`]: {{site.api}}flutter/widgets/Dismissible-class.html [Working with long lists]: /cookbook/lists/long-lists diff --git a/src/content/cookbook/gestures/handling-taps.md b/src/content/cookbook/gestures/handling-taps.md index a8acdf478e..7a089a3ed4 100644 --- a/src/content/cookbook/gestures/handling-taps.md +++ b/src/content/cookbook/gestures/handling-taps.md @@ -160,7 +160,7 @@ class MyButton extends StatelessWidget { [Add Material touch ripples]: /cookbook/gestures/ripples -[`CupertinoButton`]: {{site.api}}/flutter/cupertino/CupertinoButton-class.html -[`TextButton`]: {{site.api}}/flutter/material/TextButton-class.html -[`GestureDetector`]: {{site.api}}/flutter/widgets/GestureDetector-class.html -[`ElevatedButton`]: {{site.api}}/flutter/material/ElevatedButton-class.html +[`CupertinoButton`]: {{site.api}}flutter/cupertino/CupertinoButton-class.html +[`TextButton`]: {{site.api}}flutter/material/TextButton-class.html +[`GestureDetector`]: {{site.api}}flutter/widgets/GestureDetector-class.html +[`ElevatedButton`]: {{site.api}}flutter/material/ElevatedButton-class.html diff --git a/src/content/cookbook/gestures/ripples.md b/src/content/cookbook/gestures/ripples.md index 88092c059a..9ddedc19c8 100644 --- a/src/content/cookbook/gestures/ripples.md +++ b/src/content/cookbook/gestures/ripples.md @@ -121,4 +121,4 @@ class MyButton extends StatelessWidget { -[`InkWell`]: {{site.api}}/flutter/material/InkWell-class.html +[`InkWell`]: {{site.api}}flutter/material/InkWell-class.html diff --git a/src/content/cookbook/images/fading-in-images.md b/src/content/cookbook/images/fading-in-images.md index 5924a05fc5..5ccaa85dd1 100644 --- a/src/content/cookbook/images/fading-in-images.md +++ b/src/content/cookbook/images/fading-in-images.md @@ -163,6 +163,6 @@ class MyApp extends StatelessWidget { [Adding assets and images]: /ui/assets/assets-and-images -[`FadeInImage`]: {{site.api}}/flutter/widgets/FadeInImage-class.html -[`FadeInImage.assetNetwork()`]: {{site.api}}/flutter/widgets/FadeInImage/FadeInImage.assetNetwork.html -[`transparent_image`]: {{site.pub-pkg}}/transparent_image +[`FadeInImage`]: {{site.api}}flutter/widgets/FadeInImage-class.html +[`FadeInImage.assetNetwork()`]: {{site.api}}flutter/widgets/FadeInImage/FadeInImage.assetNetwork.html +[`transparent_image`]: {{site.pub-pkg}}transparent_image diff --git a/src/content/cookbook/images/network-image.md b/src/content/cookbook/images/network-image.md index 03ddf40666..00212b92f8 100644 --- a/src/content/cookbook/images/network-image.md +++ b/src/content/cookbook/images/network-image.md @@ -98,5 +98,5 @@ class MyApp extends StatelessWidget { [Fade in images with a placeholder]: /cookbook/images/fading-in-images -[`Image`]: {{site.api}}/flutter/widgets/Image-class.html -[`Image.network()`]: {{site.api}}/flutter/widgets/Image/Image.network.html +[`Image`]: {{site.api}}flutter/widgets/Image-class.html +[`Image.network()`]: {{site.api}}flutter/widgets/Image/Image.network.html diff --git a/src/content/cookbook/lists/basic-list.md b/src/content/cookbook/lists/basic-list.md index ec73f92467..f9f93e4c73 100644 --- a/src/content/cookbook/lists/basic-list.md +++ b/src/content/cookbook/lists/basic-list.md @@ -101,5 +101,5 @@ class MyApp extends StatelessWidget { -[`ListTile`]: {{site.api}}/flutter/material/ListTile-class.html -[`ListView`]: {{site.api}}/flutter/widgets/ListView-class.html +[`ListTile`]: {{site.api}}flutter/material/ListTile-class.html +[`ListView`]: {{site.api}}flutter/widgets/ListView-class.html diff --git a/src/content/cookbook/lists/floating-app-bar.md b/src/content/cookbook/lists/floating-app-bar.md index 604c56d015..8ef61198e0 100644 --- a/src/content/cookbook/lists/floating-app-bar.md +++ b/src/content/cookbook/lists/floating-app-bar.md @@ -285,10 +285,10 @@ class MyApp extends StatelessWidget { -[`CustomScrollView`]: {{site.api}}/flutter/widgets/CustomScrollView-class.html -[`SliverAppBar`]: {{site.api}}/flutter/material/SliverAppBar-class.html -[`SliverChildBuilderDelegate`]: {{site.api}}/flutter/widgets/SliverChildBuilderDelegate-class.html -[`SliverChildDelegate`]: {{site.api}}/flutter/widgets/SliverChildDelegate-class.html -[`SliverGrid`]: {{site.api}}/flutter/widgets/SliverGrid-class.html -[`SliverList`]: {{site.api}}/flutter/widgets/SliverList-class.html -[various properties you can pass to the `SliverAppBar` widget]: {{site.api}}/flutter/material/SliverAppBar/SliverAppBar.html +[`CustomScrollView`]: {{site.api}}flutter/widgets/CustomScrollView-class.html +[`SliverAppBar`]: {{site.api}}flutter/material/SliverAppBar-class.html +[`SliverChildBuilderDelegate`]: {{site.api}}flutter/widgets/SliverChildBuilderDelegate-class.html +[`SliverChildDelegate`]: {{site.api}}flutter/widgets/SliverChildDelegate-class.html +[`SliverGrid`]: {{site.api}}flutter/widgets/SliverGrid-class.html +[`SliverList`]: {{site.api}}flutter/widgets/SliverList-class.html +[various properties you can pass to the `SliverAppBar` widget]: {{site.api}}flutter/material/SliverAppBar/SliverAppBar.html diff --git a/src/content/cookbook/lists/grid-lists.md b/src/content/cookbook/lists/grid-lists.md index 88f281b0ce..49aaaae49e 100644 --- a/src/content/cookbook/lists/grid-lists.md +++ b/src/content/cookbook/lists/grid-lists.md @@ -99,5 +99,5 @@ class MyApp extends StatelessWidget { Grid List Demo -[`GridView`]: {{site.api}}/flutter/widgets/GridView-class.html -[`GridView.count()`]: {{site.api}}/flutter/widgets/GridView/GridView.count.html +[`GridView`]: {{site.api}}flutter/widgets/GridView-class.html +[`GridView.count()`]: {{site.api}}flutter/widgets/GridView/GridView.count.html diff --git a/src/content/cookbook/lists/horizontal-list.md b/src/content/cookbook/lists/horizontal-list.md index 2d061edb46..5f1046a31b 100644 --- a/src/content/cookbook/lists/horizontal-list.md +++ b/src/content/cookbook/lists/horizontal-list.md @@ -141,4 +141,4 @@ class MyApp extends StatelessWidget { [breaking change]: /release/breaking-changes/default-scroll-behavior-drag -[`ListView`]: {{site.api}}/flutter/widgets/ListView-class.html +[`ListView`]: {{site.api}}flutter/widgets/ListView-class.html diff --git a/src/content/cookbook/lists/long-lists.md b/src/content/cookbook/lists/long-lists.md index debef6943d..a68b0ddba3 100644 --- a/src/content/cookbook/lists/long-lists.md +++ b/src/content/cookbook/lists/long-lists.md @@ -143,9 +143,9 @@ Use [`itemExtentBuilder`][] if your list has items of different sizes. Long Lists Demo -[`List.generate`]: {{site.api}}/flutter/dart-core/List/List.generate.html -[`ListView`]: {{site.api}}/flutter/widgets/ListView-class.html -[`ListView.builder`]: {{site.api}}/flutter/widgets/ListView/ListView.builder.html -[`prototypeItem`]: {{site.api}}/flutter/widgets/ListView/prototypeItem.html -[`itemExtent`]: {{site.api}}/flutter/widgets/ListView/itemExtent.html -[`itemExtentBuilder`]: {{site.api}}/flutter/widgets/ListView/itemExtentBuilder.html +[`List.generate`]: {{site.api}}flutter/dart-core/List/List.generate.html +[`ListView`]: {{site.api}}flutter/widgets/ListView-class.html +[`ListView.builder`]: {{site.api}}flutter/widgets/ListView/ListView.builder.html +[`prototypeItem`]: {{site.api}}flutter/widgets/ListView/prototypeItem.html +[`itemExtent`]: {{site.api}}flutter/widgets/ListView/itemExtent.html +[`itemExtentBuilder`]: {{site.api}}flutter/widgets/ListView/itemExtentBuilder.html diff --git a/src/content/cookbook/lists/mixed-list.md b/src/content/cookbook/lists/mixed-list.md index bb3d3f776f..ebc1880db6 100644 --- a/src/content/cookbook/lists/mixed-list.md +++ b/src/content/cookbook/lists/mixed-list.md @@ -262,4 +262,4 @@ class MessageItem implements ListItem { -[`ListView.builder()`]: {{site.api}}/flutter/widgets/ListView/ListView.builder.html +[`ListView.builder()`]: {{site.api}}flutter/widgets/ListView/ListView.builder.html diff --git a/src/content/cookbook/lists/spaced-items.md b/src/content/cookbook/lists/spaced-items.md index e770fba1e3..5d1698dab0 100644 --- a/src/content/cookbook/lists/spaced-items.md +++ b/src/content/cookbook/lists/spaced-items.md @@ -222,12 +222,12 @@ class ItemWidget extends StatelessWidget { } ``` -[`BoxConstraints`]: {{site.api}}/flutter/rendering/BoxConstraints-class.html -[`BuildContext`]: {{site.api}}/flutter/widgets/BuildContext-class.html -[`Column`]: {{site.api}}/flutter/widgets/Column-class.html -[`ConstrainedBox`]: {{site.api}}/flutter/widgets/ConstrainedBox-class.html -[`Expanded`]: {{site.api}}/flutter/widgets/Expanded-class.html -[`IntrinsicHeight`]: {{site.api}}/flutter/widgets/IntrinsicHeight-class.html -[`LayoutBuilder`]: {{site.api}}/flutter/widgets/LayoutBuilder-class.html -[`SingleChildScrollView`]: {{site.api}}/flutter/widgets/SingleChildScrollView-class.html -[`Spacer`]: {{site.api}}/flutter/widgets/Spacer-class.html +[`BoxConstraints`]: {{site.api}}flutter/rendering/BoxConstraints-class.html +[`BuildContext`]: {{site.api}}flutter/widgets/BuildContext-class.html +[`Column`]: {{site.api}}flutter/widgets/Column-class.html +[`ConstrainedBox`]: {{site.api}}flutter/widgets/ConstrainedBox-class.html +[`Expanded`]: {{site.api}}flutter/widgets/Expanded-class.html +[`IntrinsicHeight`]: {{site.api}}flutter/widgets/IntrinsicHeight-class.html +[`LayoutBuilder`]: {{site.api}}flutter/widgets/LayoutBuilder-class.html +[`SingleChildScrollView`]: {{site.api}}flutter/widgets/SingleChildScrollView-class.html +[`Spacer`]: {{site.api}}flutter/widgets/Spacer-class.html diff --git a/src/content/cookbook/maintenance/error-reporting.md b/src/content/cookbook/maintenance/error-reporting.md index 6b101c6982..751a10c412 100644 --- a/src/content/cookbook/maintenance/error-reporting.md +++ b/src/content/cookbook/maintenance/error-reporting.md @@ -193,13 +193,13 @@ see the [Sentry flutter example][] app. 查看 [Sentry flutter example][] 示例应用,体验完整流程。 -[Sentry flutter example]: {{site.github}}/getsentry/sentry-dart/tree/main/flutter/example +[Sentry flutter example]: {{site.github}}getsentry/sentry-dart/tree/main/flutter/example [Create an account with Sentry]: https://sentry.io/signup/ [Bugsnag]: https://www.bugsnag.com/platforms/flutter [Datadog]: https://docs.datadoghq.com/real_user_monitoring/flutter/ [Rollbar]: https://rollbar.com/ [Sentry]: https://sentry.io/welcome/ -[`sentry_flutter`]: {{site.pub-pkg}}/sentry_flutter -[Sentry API]: {{site.pub-api}}/sentry_flutter/latest/sentry_flutter/sentry_flutter-library.html +[`sentry_flutter`]: {{site.pub-pkg}}sentry_flutter +[Sentry API]: {{site.pub-api}}sentry_flutter/latest/sentry_flutter/sentry_flutter-library.html [Sentry's site]: https://docs.sentry.io/platforms/flutter/ -[Firebase Crashlytics]: {{site.firebase}}/docs/crashlytics +[Firebase Crashlytics]: {{site.firebase}}docs/crashlytics diff --git a/src/content/cookbook/navigation/hero-animations.md b/src/content/cookbook/navigation/hero-animations.md index 2e93ec5900..459ca2444f 100644 --- a/src/content/cookbook/navigation/hero-animations.md +++ b/src/content/cookbook/navigation/hero-animations.md @@ -274,5 +274,5 @@ class DetailScreen extends StatelessWidget { [Handle taps]: /cookbook/gestures/handling-taps -[`Hero`]: {{site.api}}/flutter/widgets/Hero-class.html +[`Hero`]: {{site.api}}flutter/widgets/Hero-class.html [Navigate to a new screen and back]: /cookbook/navigation/navigation-basics diff --git a/src/content/cookbook/navigation/named-routes.md b/src/content/cookbook/navigation/named-routes.md index c7006173af..6fe1718b5f 100644 --- a/src/content/cookbook/navigation/named-routes.md +++ b/src/content/cookbook/navigation/named-routes.md @@ -309,8 +309,8 @@ class SecondScreen extends StatelessWidget { -[`MaterialApp`]: {{site.api}}/flutter/material/MaterialApp-class.html +[`MaterialApp`]: {{site.api}}flutter/material/MaterialApp-class.html [Navigate to a new screen and back]: /cookbook/navigation/navigation-basics -[`Navigator`]: {{site.api}}/flutter/widgets/Navigator-class.html -[`Navigator.pop()`]: {{site.api}}/flutter/widgets/Navigator/pop.html -[`Navigator.pushNamed()`]: {{site.api}}/flutter/widgets/Navigator/pushNamed.html +[`Navigator`]: {{site.api}}flutter/widgets/Navigator-class.html +[`Navigator.pop()`]: {{site.api}}flutter/widgets/Navigator/pop.html +[`Navigator.pushNamed()`]: {{site.api}}flutter/widgets/Navigator/pushNamed.html diff --git a/src/content/cookbook/navigation/navigate-with-arguments.md b/src/content/cookbook/navigation/navigate-with-arguments.md index b6dd48ea0e..9078465fd3 100644 --- a/src/content/cookbook/navigation/navigate-with-arguments.md +++ b/src/content/cookbook/navigation/navigate-with-arguments.md @@ -457,10 +457,10 @@ class ScreenArguments { -[`CupertinoApp`]: {{site.api}}/flutter/cupertino/CupertinoApp-class.html -[`MaterialApp`]: {{site.api}}/flutter/material/MaterialApp-class.html -[`ModalRoute.of()`]: {{site.api}}/flutter/widgets/ModalRoute/of.html -[`Navigator`]: {{site.api}}/flutter/widgets/Navigator-class.html -[`Navigator.pushNamed()`]: {{site.api}}/flutter/widgets/Navigator/pushNamed.html -[`onGenerateRoute()`]: {{site.api}}/flutter/widgets/WidgetsApp/onGenerateRoute.html -[`RouteSettings`]: {{site.api}}/flutter/widgets/RouteSettings-class.html +[`CupertinoApp`]: {{site.api}}flutter/cupertino/CupertinoApp-class.html +[`MaterialApp`]: {{site.api}}flutter/material/MaterialApp-class.html +[`ModalRoute.of()`]: {{site.api}}flutter/widgets/ModalRoute/of.html +[`Navigator`]: {{site.api}}flutter/widgets/Navigator-class.html +[`Navigator.pushNamed()`]: {{site.api}}flutter/widgets/Navigator/pushNamed.html +[`onGenerateRoute()`]: {{site.api}}flutter/widgets/WidgetsApp/onGenerateRoute.html +[`RouteSettings`]: {{site.api}}flutter/widgets/RouteSettings-class.html diff --git a/src/content/cookbook/navigation/navigation-basics.md b/src/content/cookbook/navigation/navigation-basics.md index 6d851512d3..19d7ddd05c 100644 --- a/src/content/cookbook/navigation/navigation-basics.md +++ b/src/content/cookbook/navigation/navigation-basics.md @@ -347,14 +347,14 @@ class SecondRoute extends StatelessWidget { [Cupertino]: {{site.docs}}/ui/widgets/cupertino [Material Components]: {{site.docs}}/ui/widgets/material -[`CupertinoApp`]: {{site.api}}/flutter/cupertino/CupertinoApp-class.html -[`CupertinoButton`]: {{site.api}}/flutter/cupertino/CupertinoButton-class.html -[`CupertinoPageRoute`]: {{site.api}}/flutter/cupertino/CupertinoPageRoute-class.html -[`CupertinoPageScaffold`]: {{site.api}}/flutter/cupertino/CupertinoPageScaffold-class.html -[`ElevatedButton`]: {{site.api}}/flutter/material/ElevatedButton-class.html -[`MaterialApp`]: {{site.api}}/flutter/material/MaterialApp-class.html -[`MaterialPageRoute`]: {{site.api}}/flutter/material/MaterialPageRoute-class.html -[`Navigator.pop()`]: {{site.api}}/flutter/widgets/Navigator/pop.html -[`Navigator.push()`]: {{site.api}}/flutter/widgets/Navigator/push.html -[`Navigator`]: {{site.api}}/flutter/widgets/Navigator-class.html -[`Scaffold`]: {{site.api}}/flutter/material/Scaffold-class.html +[`CupertinoApp`]: {{site.api}}flutter/cupertino/CupertinoApp-class.html +[`CupertinoButton`]: {{site.api}}flutter/cupertino/CupertinoButton-class.html +[`CupertinoPageRoute`]: {{site.api}}flutter/cupertino/CupertinoPageRoute-class.html +[`CupertinoPageScaffold`]: {{site.api}}flutter/cupertino/CupertinoPageScaffold-class.html +[`ElevatedButton`]: {{site.api}}flutter/material/ElevatedButton-class.html +[`MaterialApp`]: {{site.api}}flutter/material/MaterialApp-class.html +[`MaterialPageRoute`]: {{site.api}}flutter/material/MaterialPageRoute-class.html +[`Navigator.pop()`]: {{site.api}}flutter/widgets/Navigator/pop.html +[`Navigator.push()`]: {{site.api}}flutter/widgets/Navigator/push.html +[`Navigator`]: {{site.api}}flutter/widgets/Navigator-class.html +[`Scaffold`]: {{site.api}}flutter/material/Scaffold-class.html diff --git a/src/content/cookbook/navigation/passing-data.md b/src/content/cookbook/navigation/passing-data.md index c45e54d44e..4db655b6c7 100644 --- a/src/content/cookbook/navigation/passing-data.md +++ b/src/content/cookbook/navigation/passing-data.md @@ -527,8 +527,8 @@ class DetailScreen extends StatelessWidget { -[`ModalRoute.of()`]: {{site.api}}/flutter/widgets/ModalRoute/of.html -[`Navigator.push()`]: {{site.api}}/flutter/widgets/Navigator/push.html -[`onTap()`]: {{site.api}}/flutter/material/ListTile/onTap.html -[`RouteSettings`]: {{site.api}}/flutter/widgets/RouteSettings-class.html +[`ModalRoute.of()`]: {{site.api}}flutter/widgets/ModalRoute/of.html +[`Navigator.push()`]: {{site.api}}flutter/widgets/Navigator/push.html +[`onTap()`]: {{site.api}}flutter/material/ListTile/onTap.html +[`RouteSettings`]: {{site.api}}flutter/widgets/RouteSettings-class.html [Use lists]: /cookbook/lists/basic-list diff --git a/src/content/cookbook/navigation/returning-data.md b/src/content/cookbook/navigation/returning-data.md index 69fa1093cf..ff54d7614b 100644 --- a/src/content/cookbook/navigation/returning-data.md +++ b/src/content/cookbook/navigation/returning-data.md @@ -389,4 +389,4 @@ class SelectionScreen extends StatelessWidget { -[`Navigator.pop()`]: {{site.api}}/flutter/widgets/Navigator/pop.html +[`Navigator.pop()`]: {{site.api}}flutter/widgets/Navigator/pop.html diff --git a/src/content/cookbook/navigation/set-up-app-links.md b/src/content/cookbook/navigation/set-up-app-links.md index 2d482ccbff..23997b7c2f 100644 --- a/src/content/cookbook/navigation/set-up-app-links.md +++ b/src/content/cookbook/navigation/set-up-app-links.md @@ -211,9 +211,9 @@ launches and displays the details screen: Source code: [deeplink_cookbook][] -[deeplink_cookbook]: {{site.github}}/flutter/codelabs/tree/main/deeplink_cookbook -[Firebase Hosting]: {{site.firebase}}/docs/hosting -[go_router]: {{site.pub}}/packages/go_router +[deeplink_cookbook]: {{site.repo.organization}}codelabs/tree/main/deeplink_cookbook +[Firebase Hosting]: {{site.firebase}}docs/hosting +[go_router]: {{site.pub-pkg}}go_router [GitHub Pages]: https://pages.github.com -[uni_links]: {{site.pub}}/packages/uni_links +[uni_links]: {{site.pub-pkg}}uni_links [Signing the app]: /deployment/android#signing-the-app diff --git a/src/content/cookbook/navigation/set-up-universal-links.md b/src/content/cookbook/navigation/set-up-universal-links.md index cc234a533f..c70dadbe7a 100644 --- a/src/content/cookbook/navigation/set-up-universal-links.md +++ b/src/content/cookbook/navigation/set-up-universal-links.md @@ -336,11 +336,11 @@ To bypass Apple's CDN, check out the [alternate mode section][]. You can find the source code for the [deeplink_cookbook][] recipe in the GitHub repo. -[apple-app-site-assoc]: {{site.apple-dev}}/documentation/xcode/supporting-associated-domains -[alternate mode section]: {{site.apple-dev}}/documentation/bundleresources/entitlements/com_apple_developer_associated-domains?language=objc -[deeplink_cookbook]: {{site.repo.organization}}/codelabs/tree/main/deeplink_cookbook -[developer account]: {{site.apple-dev}}/account -[Firebase Hosting]: {{site.firebase}}/docs/hosting -[go_router]: {{site.pub-pkg}}/go_router +[apple-app-site-assoc]: {{site.apple-dev}}documentation/xcode/supporting-associated-domains +[alternate mode section]: {{site.apple-dev}}documentation/bundleresources/entitlements/com_apple_developer_associated-domains?language=objc +[deeplink_cookbook]: {{site.repo.organization}}codelabs/tree/main/deeplink_cookbook +[developer account]: {{site.apple-dev}}account +[Firebase Hosting]: {{site.firebase}}docs/hosting +[go_router]: {{site.pub-pkg}}go_router [GitHub Pages]: https://pages.github.com -[uni_links]: {{site.pub-pkg}}/uni_links +[uni_links]: {{site.pub-pkg}}uni_links diff --git a/src/content/cookbook/networking/authenticated-requests.md b/src/content/cookbook/networking/authenticated-requests.md index 20c772634e..3e07a03d22 100644 --- a/src/content/cookbook/networking/authenticated-requests.md +++ b/src/content/cookbook/networking/authenticated-requests.md @@ -102,5 +102,5 @@ class Album { [Fetching data from the internet]: /cookbook/networking/fetch-data -[`http`]: {{site.pub-pkg}}/http -[`HttpHeaders`]: {{site.dart.api}}/stable/dart-io/HttpHeaders-class.html +[`http`]: {{site.pub-pkg}}http +[`HttpHeaders`]: {{site.dart.api}}stable/dart-io/HttpHeaders-class.html diff --git a/src/content/cookbook/networking/background-parsing.md b/src/content/cookbook/networking/background-parsing.md index de3d7384f7..4244deaeea 100644 --- a/src/content/cookbook/networking/background-parsing.md +++ b/src/content/cookbook/networking/background-parsing.md @@ -260,8 +260,8 @@ As an alternate solution, check out the [`worker_manager`][] or 与此同时,后台进程的其他解决方案是使用 [`worker_manager`][] 或 [`workmanager`][] package。 -[`worker_manager`]: {{site.pub}}/packages/worker_manager -[`workmanager`]: {{site.pub}}/packages/workmanager +[`worker_manager`]: {{site.pub-pkg}}worker_manager +[`workmanager`]: {{site.pub-pkg}}workmanager ## Complete example @@ -400,9 +400,9 @@ class PhotosList extends StatelessWidget { ![Isolate demo](/assets/images/docs/cookbook/isolate.gif){:.site-mobile-screenshot} -[`compute()`]: {{site.api}}/flutter/foundation/compute.html +[`compute()`]: {{site.api}}flutter/foundation/compute.html [Fetch data from the internet]: /cookbook/networking/fetch-data -[`http`]: {{site.pub-pkg}}/http -[`http.get()`]: {{site.pub-api}}/http/latest/http/get.html -[Isolate]: {{site.api}}/flutter/dart-isolate/Isolate-class.html +[`http`]: {{site.pub-pkg}}http +[`http.get()`]: {{site.pub-api}}http/latest/http/get.html +[Isolate]: {{site.api}}flutter/dart-isolate/Isolate-class.html [JSONPlaceholder REST API]: https://jsonplaceholder.typicode.com diff --git a/src/content/cookbook/networking/delete-data.md b/src/content/cookbook/networking/delete-data.md index 1f9ba82e7c..3e291c8f7b 100644 --- a/src/content/cookbook/networking/delete-data.md +++ b/src/content/cookbook/networking/delete-data.md @@ -280,17 +280,17 @@ class _MyAppState extends State { ``` [Fetch Data]: /cookbook/networking/fetch-data -[ConnectionState]: {{site.api}}/flutter/widgets/ConnectionState-class.html -[`didChangeDependencies()`]: {{site.api}}/flutter/widgets/State/didChangeDependencies.html -[`Future`]: {{site.api}}/flutter/dart-async/Future-class.html -[`FutureBuilder`]: {{site.api}}/flutter/widgets/FutureBuilder-class.html +[ConnectionState]: {{site.api}}flutter/widgets/ConnectionState-class.html +[`didChangeDependencies()`]: {{site.api}}flutter/widgets/State/didChangeDependencies.html +[`Future`]: {{site.api}}flutter/dart-async/Future-class.html +[`FutureBuilder`]: {{site.api}}flutter/widgets/FutureBuilder-class.html [JSONPlaceholder]: https://jsonplaceholder.typicode.com/ -[`http`]: {{site.pub-pkg}}/http -[`http.delete()`]: {{site.pub-api}}/http/latest/http/delete.html -[`http` package]: {{site.pub-pkg}}/http/install -[`InheritedWidget`]: {{site.api}}/flutter/widgets/InheritedWidget-class.html +[`http`]: {{site.pub-pkg}}http +[`http.delete()`]: {{site.pub-api}}http/latest/http/delete.html +[`http` package]: {{site.pub-pkg}}http/install +[`InheritedWidget`]: {{site.api}}flutter/widgets/InheritedWidget-class.html [Introduction to unit testing]: /cookbook/testing/unit/introduction -[`initState()`]: {{site.api}}/flutter/widgets/State/initState.html +[`initState()`]: {{site.api}}flutter/widgets/State/initState.html [Mock dependencies using Mockito]: /cookbook/testing/unit/mocking [JSON and serialization]: /data-and-backend/serialization/json -[`State`]: {{site.api}}/flutter/widgets/State-class.html +[`State`]: {{site.api}}flutter/widgets/State-class.html diff --git a/src/content/cookbook/networking/fetch-data.md b/src/content/cookbook/networking/fetch-data.md index 10501f950c..4403408c75 100644 --- a/src/content/cookbook/networking/fetch-data.md +++ b/src/content/cookbook/networking/fetch-data.md @@ -513,17 +513,17 @@ class _MyAppState extends State { ``` -[`didChangeDependencies()`]: {{site.api}}/flutter/widgets/State/didChangeDependencies.html -[`Future`]: {{site.api}}/flutter/dart-async/Future-class.html -[`FutureBuilder`]: {{site.api}}/flutter/widgets/FutureBuilder-class.html +[`didChangeDependencies()`]: {{site.api}}flutter/widgets/State/didChangeDependencies.html +[`Future`]: {{site.api}}flutter/dart-async/Future-class.html +[`FutureBuilder`]: {{site.api}}flutter/widgets/FutureBuilder-class.html [JSONPlaceholder]: https://jsonplaceholder.typicode.com/ -[`http`]: {{site.pub-pkg}}/http -[`http.get()`]: {{site.pub-api}}/http/latest/http/get.html -[`http` package]: {{site.pub-pkg}}/http/install -[`InheritedWidget`]: {{site.api}}/flutter/widgets/InheritedWidget-class.html +[`http`]: {{site.pub-pkg}}http +[`http.get()`]: {{site.pub-api}}http/latest/http/get.html +[`http` package]: {{site.pub-pkg}}http/install +[`InheritedWidget`]: {{site.api}}flutter/widgets/InheritedWidget-class.html [Introduction to unit testing]: /cookbook/testing/unit/introduction -[`initState()`]: {{site.api}}/flutter/widgets/State/initState.html +[`initState()`]: {{site.api}}flutter/widgets/State/initState.html [Mock dependencies using Mockito]: /cookbook/testing/unit/mocking [JSON and serialization]: /data-and-backend/serialization/json -[pattern matching]: {{site.dart-site}}/language/patterns -[`State`]: {{site.api}}/flutter/widgets/State-class.html +[pattern matching]: {{site.dart-site}}language/patterns +[`State`]: {{site.api}}flutter/widgets/State-class.html diff --git a/src/content/cookbook/networking/send-data.md b/src/content/cookbook/networking/send-data.md index 5d597f366a..8329cdfce9 100644 --- a/src/content/cookbook/networking/send-data.md +++ b/src/content/cookbook/networking/send-data.md @@ -373,19 +373,19 @@ class _MyAppState extends State { } ``` -[ConnectionState]: {{site.api}}/flutter/widgets/ConnectionState-class.html -[`didChangeDependencies()`]: {{site.api}}/flutter/widgets/State/didChangeDependencies.html +[ConnectionState]: {{site.api}}flutter/widgets/ConnectionState-class.html +[`didChangeDependencies()`]: {{site.api}}flutter/widgets/State/didChangeDependencies.html [Fetch Data]: /cookbook/networking/fetch-data -[`Future`]: {{site.api}}/flutter/dart-async/Future-class.html -[`FutureBuilder`]: {{site.api}}/flutter/widgets/FutureBuilder-class.html -[`http`]: {{site.pub-pkg}}/http -[`http.post()`]: {{site.pub-api}}/http/latest/http/post.html -[`http` package]: {{site.pub-pkg}}/http/install -[`InheritedWidget`]: {{site.api}}/flutter/widgets/InheritedWidget-class.html +[`Future`]: {{site.api}}flutter/dart-async/Future-class.html +[`FutureBuilder`]: {{site.api}}flutter/widgets/FutureBuilder-class.html +[`http`]: {{site.pub-pkg}}http +[`http.post()`]: {{site.pub-api}}http/latest/http/post.html +[`http` package]: {{site.pub-pkg}}http/install +[`InheritedWidget`]: {{site.api}}flutter/widgets/InheritedWidget-class.html [Introduction to unit testing]: /cookbook/testing/unit/introduction -[`initState()`]: {{site.api}}/flutter/widgets/State/initState.html +[`initState()`]: {{site.api}}flutter/widgets/State/initState.html [JSONPlaceholder]: https://jsonplaceholder.typicode.com/ [JSON and serialization]: /data-and-backend/serialization/json [Mock dependencies using Mockito]: /cookbook/testing/unit/mocking -[pattern matching]: {{site.dart-site}}/language/patterns -[`State`]: {{site.api}}/flutter/widgets/State-class.html +[pattern matching]: {{site.dart-site}}language/patterns +[`State`]: {{site.api}}flutter/widgets/State-class.html diff --git a/src/content/cookbook/networking/update-data.md b/src/content/cookbook/networking/update-data.md index 815231c0fe..e1330a23be 100644 --- a/src/content/cookbook/networking/update-data.md +++ b/src/content/cookbook/networking/update-data.md @@ -402,19 +402,19 @@ class _MyAppState extends State { } ``` -[ConnectionState]: {{site.api}}/flutter/widgets/ConnectionState-class.html -[`didChangeDependencies()`]: {{site.api}}/flutter/widgets/State/didChangeDependencies.html +[ConnectionState]: {{site.api}}flutter/widgets/ConnectionState-class.html +[`didChangeDependencies()`]: {{site.api}}flutter/widgets/State/didChangeDependencies.html [Fetch data]: /cookbook/networking/fetch-data -[`Future`]: {{site.api}}/flutter/dart-async/Future-class.html -[`FutureBuilder`]: {{site.api}}/flutter/widgets/FutureBuilder-class.html -[`http`]: {{site.pub-pkg}}/http -[`http.put()`]: {{site.pub-api}}/http/latest/http/put.html -[`http` package]: {{site.pub}}/packages/http/install -[`InheritedWidget`]: {{site.api}}/flutter/widgets/InheritedWidget-class.html +[`Future`]: {{site.api}}flutter/dart-async/Future-class.html +[`FutureBuilder`]: {{site.api}}flutter/widgets/FutureBuilder-class.html +[`http`]: {{site.pub-pkg}}http +[`http.put()`]: {{site.pub-api}}http/latest/http/put.html +[`http` package]: {{site.pub-pkg}}http/install +[`InheritedWidget`]: {{site.api}}flutter/widgets/InheritedWidget-class.html [Introduction to unit testing]: /cookbook/testing/unit/introduction -[`initState()`]: {{site.api}}/flutter/widgets/State/initState.html +[`initState()`]: {{site.api}}flutter/widgets/State/initState.html [JSONPlaceholder]: https://jsonplaceholder.typicode.com/ [JSON and serialization]: /data-and-backend/serialization/json [Mock dependencies using Mockito]: /cookbook/testing/unit/mocking -[pattern matching]: {{site.dart-site}}/language/patterns -[`State`]: {{site.api}}/flutter/widgets/State-class.html +[pattern matching]: {{site.dart-site}}language/patterns +[`State`]: {{site.api}}flutter/widgets/State-class.html diff --git a/src/content/cookbook/networking/web-sockets.md b/src/content/cookbook/networking/web-sockets.md index 3350fa7dd9..69856d4a3a 100644 --- a/src/content/cookbook/networking/web-sockets.md +++ b/src/content/cookbook/networking/web-sockets.md @@ -273,9 +273,9 @@ class _MyHomePageState extends State { ![Web sockets demo](/assets/images/docs/cookbook/web-sockets.gif){:.site-mobile-screenshot} -[`Stream`]: {{site.api}}/flutter/dart-async/Stream-class.html -[`StreamBuilder`]: {{site.api}}/flutter/widgets/StreamBuilder-class.html -[`StreamSink`]: {{site.api}}/flutter/dart-async/StreamSink-class.html +[`Stream`]: {{site.api}}flutter/dart-async/Stream-class.html +[`StreamBuilder`]: {{site.api}}flutter/widgets/StreamBuilder-class.html +[`StreamSink`]: {{site.api}}flutter/dart-async/StreamSink-class.html [test WebSocket server sponsored by Lob.com]: https://www.lob.com/blog/websocket-org-is-down-here-is-an-alternative -[`Text`]: {{site.api}}/flutter/widgets/Text-class.html -[`web_socket_channel`]: {{site.pub-pkg}}/web_socket_channel +[`Text`]: {{site.api}}flutter/widgets/Text-class.html +[`web_socket_channel`]: {{site.pub-pkg}}web_socket_channel diff --git a/src/content/cookbook/persistence/key-value.md b/src/content/cookbook/persistence/key-value.md index 3d16ecd1c6..63f0b1430a 100644 --- a/src/content/cookbook/persistence/key-value.md +++ b/src/content/cookbook/persistence/key-value.md @@ -275,4 +275,4 @@ class _MyHomePageState extends State { } ``` -[`shared_preferences`]: {{site.pub-pkg}}/shared_preferences +[`shared_preferences`]: {{site.pub-pkg}}shared_preferences diff --git a/src/content/cookbook/persistence/reading-writing-files.md b/src/content/cookbook/persistence/reading-writing-files.md index 61094fd843..0b8253ee65 100644 --- a/src/content/cookbook/persistence/reading-writing-files.md +++ b/src/content/cookbook/persistence/reading-writing-files.md @@ -54,11 +54,11 @@ on the `path_provider` package: This recipe doesn't work with web apps at this time. To follow the discussion on this issue, -check out `flutter/flutter` [issue #45296]({{site.repo.flutter}}/issues/45296). +check out `flutter/flutter` [issue #45296]({{site.repo.flutter}}issues/45296). 该方法目前在 Web 平台上不可用。 若你想跟踪讨论,请访问 `flutter/flutter` -[issue #45296]({{site.repo.flutter}}/issues/45296)。 +[issue #45296]({{site.repo.flutter}}issues/45296)。 ::: @@ -300,8 +300,8 @@ class _FlutterDemoState extends State { } ``` -[`dart:io`]: {{site.api}}/flutter/dart-io/dart-io-library.html -[`File`]: {{site.api}}/flutter/dart-io/File-class.html -[`getCacheDir()`]: {{site.android-dev}}/reference/android/content/Context#getCacheDir() -[`NSCachesDirectory`]: {{site.apple-dev}}/documentation/foundation/nssearchpathdirectory/nscachesdirectory -[`path_provider`]: {{site.pub-pkg}}/path_provider +[`dart:io`]: {{site.api}}flutter/dart-io/dart-io-library.html +[`File`]: {{site.api}}flutter/dart-io/File-class.html +[`getCacheDir()`]: {{site.android-dev}}reference/android/content/Context#getCacheDir() +[`NSCachesDirectory`]: {{site.apple-dev}}documentation/foundation/nssearchpathdirectory/nscachesdirectory +[`path_provider`]: {{site.pub-pkg}}path_provider diff --git a/src/content/cookbook/persistence/sqlite.md b/src/content/cookbook/persistence/sqlite.md index be5ca60ac9..b7bf2ca218 100644 --- a/src/content/cookbook/persistence/sqlite.md +++ b/src/content/cookbook/persistence/sqlite.md @@ -20,7 +20,7 @@ macOS, iOS, or Android. ::: -[sqflite package]: {{site.pub-pkg}}/sqflite +[sqflite package]: {{site.pub-pkg}}sqflite If you are writing an app that needs to persist and query large amounts of data on the local device, consider using a database instead of a local file or @@ -668,9 +668,9 @@ class Dog { ``` -[`delete()`]: {{site.pub-api}}/sqflite_common/latest/sqlite_api/DatabaseExecutor/delete.html -[`insert()`]: {{site.pub-api}}/sqflite_common/latest/sqlite_api/DatabaseExecutor/insert.html -[`sqflite`]: {{site.pub-pkg}}/sqflite +[`delete()`]: {{site.pub-api}}sqflite_common/latest/sqlite_api/DatabaseExecutor/delete.html +[`insert()`]: {{site.pub-api}}sqflite_common/latest/sqlite_api/DatabaseExecutor/insert.html +[`sqflite`]: {{site.pub-pkg}}sqflite [SQLite Tutorial]: http://www.sqlitetutorial.net/ [official SQLite Datatypes documentation]: https://www.sqlite.org/datatype3.html -[`update()`]: {{site.pub-api}}/sqflite_common/latest/sqlite_api/DatabaseExecutor/update.html +[`update()`]: {{site.pub-api}}sqflite_common/latest/sqlite_api/DatabaseExecutor/update.html diff --git a/src/content/cookbook/plugins/google-mobile-ads.md b/src/content/cookbook/plugins/google-mobile-ads.md index dacd10d903..7b018110fe 100644 --- a/src/content/cookbook/plugins/google-mobile-ads.md +++ b/src/content/cookbook/plugins/google-mobile-ads.md @@ -29,7 +29,7 @@ To add ads to your Flutter project, use [AdMob](https://admob.google.com/home/), Google's mobile advertising platform. This recipe demonstrates how to use the -[`google_mobile_ads`]({{site.pub-pkg}}/google_mobile_ads) +[`google_mobile_ads`]({{site.pub-pkg}}google_mobile_ads) package to add a banner ad to your app or game. :::note @@ -37,7 +37,7 @@ Apart from AdMob, the `google_mobile_ads` package also supports Ad Manager, a platform intended for large publishers. Integrating Ad Manager resembles integrating AdMob, but it won't be covered in this cookbook recipe. To use Ad Manager, follow the -[Ad Manager documentation]({{site.developers}}/ad-manager/mobile-ads-sdk/flutter/quick-start). +[Ad Manager documentation]({{site.developers}}ad-manager/mobile-ads-sdk/flutter/quick-start). ::: ## 1. Get AdMob App IDs @@ -268,9 +268,9 @@ To show anything beyond test ads, you have to register ad units. beyond banner ads --- interstitials, rewarded ads, app open ads, and so on. The API for those is similar, and documented in the - [AdMob documentation]({{site.developers}}/admob/flutter/quick-start) + [AdMob documentation]({{site.developers}}admob/flutter/quick-start) and through - [official samples](https://github.com/googleads/googleads-mobile-flutter/tree/main/samples/admob). + [official samples]({{site.github}}googleads/googleads-mobile-flutter/tree/main/samples/admob). 3. Choose banner ads. diff --git a/src/content/cookbook/plugins/picture-using-camera.md b/src/content/cookbook/plugins/picture-using-camera.md index 791883f4d8..0e8d6e4550 100644 --- a/src/content/cookbook/plugins/picture-using-camera.md +++ b/src/content/cookbook/plugins/picture-using-camera.md @@ -34,9 +34,9 @@ check out the Google I/O 2024 talk, [Building picture perfect camera experiences in Flutter with CameraX][camerax-video]. ::: -[`camera_android_camerax`]: {{site.pub-pkg}}/camera_android_camerax +[`camera_android_camerax`]: {{site.pub-pkg}}camera_android_camerax [CameraX]: https://developer.android.com/training/camerax -[camerax-video]: {{site.youtube-site}}/watch?v=d1sRCa5k2Sg&t=1s +[camerax-video]: {{site.youtube-site}}watch?v=d1sRCa5k2Sg&t=1s This recipe demonstrates how to use the `camera` plugin to display a preview, take a photo, and display it using the following steps: @@ -510,9 +510,9 @@ class DisplayPictureScreen extends StatelessWidget { ``` -[`camera`]: {{site.pub-pkg}}/camera -[`FutureBuilder`]: {{site.api}}/flutter/widgets/FutureBuilder-class.html -[`path`]: {{site.pub-pkg}}/path -[`path_provider`]: {{site.pub-pkg}}/path_provider -[`takePicture()`]: {{site.pub}}/documentation/camera/latest/camera/CameraController/takePicture.html -[`XFile`]: {{site.pub}}/documentation/cross_file/latest/cross_file/XFile-class.html +[`camera`]: {{site.pub-pkg}}camera +[`FutureBuilder`]: {{site.api}}flutter/widgets/FutureBuilder-class.html +[`path`]: {{site.pub-pkg}}path +[`path_provider`]: {{site.pub-pkg}}path_provider +[`takePicture()`]: {{site.pub-api}}camera/latest/camera/CameraController/takePicture.html +[`XFile`]: {{site.pub-api}}cross_file/latest/cross_file/XFile-class.html diff --git a/src/content/cookbook/plugins/play-video.md b/src/content/cookbook/plugins/play-video.md index a4e5445969..3150b87bb5 100644 --- a/src/content/cookbook/plugins/play-video.md +++ b/src/content/cookbook/plugins/play-video.md @@ -461,10 +461,10 @@ class _VideoPlayerScreenState extends State { ``` -[`AspectRatio`]: {{site.api}}/flutter/widgets/AspectRatio-class.html -[`AVPlayer`]: {{site.apple-dev}}/documentation/avfoundation/avplayer +[`AspectRatio`]: {{site.api}}flutter/widgets/AspectRatio-class.html +[`AVPlayer`]: {{site.apple-dev}}documentation/avfoundation/avplayer [`ExoPlayer`]: https://google.github.io/ExoPlayer/ -[`pause()`]: {{site.pub-api}}/video_player/latest/video_player/VideoPlayerController/pause.html -[`play()`]: {{site.pub-api}}/video_player/latest/video_player/VideoPlayerController/play.html -[`video_player`]: {{site.pub-pkg}}/video_player -[`VideoPlayer`]: {{site.pub-api}}/video_player/latest/video_player/VideoPlayer-class.html +[`pause()`]: {{site.pub-api}}video_player/latest/video_player/VideoPlayerController/pause.html +[`play()`]: {{site.pub-api}}video_player/latest/video_player/VideoPlayerController/play.html +[`video_player`]: {{site.pub-pkg}}video_player +[`VideoPlayer`]: {{site.pub-api}}video_player/latest/video_player/VideoPlayer-class.html diff --git a/src/content/cookbook/testing/integration/introduction.md b/src/content/cookbook/testing/integration/introduction.md index 3eb692036c..1c57724add 100644 --- a/src/content/cookbook/testing/integration/introduction.md +++ b/src/content/cookbook/testing/integration/introduction.md @@ -57,7 +57,7 @@ The other guides in this section explain how to use integration tests to validat [functionality]: /testing/integration-tests/ [performance]: /cookbook/testing/integration/profiling/ -[integration_test]: {{site.repo.flutter}}/tree/main/packages/integration_test +[integration_test]: {{site.repo.flutter}}tree/main/packages/integration_test [Migrating from flutter_drive]: /release/breaking-changes/flutter-driver-migration [widget tests]: /testing/overview#widget-tests diff --git a/src/content/cookbook/testing/integration/profiling.md b/src/content/cookbook/testing/integration/profiling.md index 1ae4892ce0..d8ec622265 100644 --- a/src/content/cookbook/testing/integration/profiling.md +++ b/src/content/cookbook/testing/integration/profiling.md @@ -383,9 +383,9 @@ Future main() { ``` -[`IntegrationTestWidgetsFlutterBinding`]: {{site.api}}/flutter/package-integration_test_integration_test/IntegrationTestWidgetsFlutterBinding-class.html +[`IntegrationTestWidgetsFlutterBinding`]: {{site.api}}flutter/package-integration_test_integration_test/IntegrationTestWidgetsFlutterBinding-class.html [Scrolling]: /cookbook/testing/widget/scrolling -[`Timeline`]: {{site.api}}/flutter/flutter_driver/Timeline-class.html -[`TimelineSummary`]: {{site.api}}/flutter/flutter_driver/TimelineSummary-class.html -[`traceAction()`]: {{site.api}}/flutter/flutter_driver/FlutterDriver/traceAction.html +[`Timeline`]: {{site.api}}flutter/flutter_driver/Timeline-class.html +[`TimelineSummary`]: {{site.api}}flutter/flutter_driver/TimelineSummary-class.html +[`traceAction()`]: {{site.api}}flutter/flutter_driver/FlutterDriver/traceAction.html [Debugging performance for web apps]: /perf/web-performance diff --git a/src/content/cookbook/testing/unit/introduction.md b/src/content/cookbook/testing/unit/introduction.md index 301418bbf9..dcd821dc9d 100644 --- a/src/content/cookbook/testing/unit/introduction.md +++ b/src/content/cookbook/testing/unit/introduction.md @@ -303,7 +303,7 @@ To learn more about unit tests, you can execute this command: flutter test --help ``` -[`group`]: {{site.api}}/flutter/flutter_test/group.html -[`flutter_test`]: {{site.api}}/flutter/flutter_test/flutter_test-library.html -[`test`]: {{site.pub-pkg}}/test -[test package documentation]: {{site.pub}}/packages/test +[`group`]: {{site.api}}flutter/flutter_test/group.html +[`flutter_test`]: {{site.api}}flutter/flutter_test/flutter_test-library.html +[`test`]: {{site.pub-pkg}}test +[test package documentation]: {{site.pub-pkg}}test diff --git a/src/content/cookbook/testing/unit/mocking.md b/src/content/cookbook/testing/unit/mocking.md index 682969a06a..db68e63105 100644 --- a/src/content/cookbook/testing/unit/mocking.md +++ b/src/content/cookbook/testing/unit/mocking.md @@ -46,7 +46,7 @@ implementation of a class. Write these alternative implementations by hand or make use of the [Mockito package][] as a shortcut. 通常来说,可以通过创建类的另一种实现来模拟(mock)这种依赖。 -类的另一种实现可以手写,也可以借助 [Mockito 包]({{site.pub-pkg}}/mockito), +类的另一种实现可以手写,也可以借助 [Mockito 包]({{site.pub-pkg}}mockito), 后者简单一些。 This recipe demonstrates the basics of mocking with the @@ -469,4 +469,4 @@ web 服务或数据库有依赖的函数或类。 [Fetch data from the internet]: /cookbook/networking/fetch-data [Introduction to unit testing]: /cookbook/testing/unit/introduction -[Mockito package]: {{site.pub-pkg}}/mockito +[Mockito package]: {{site.pub-pkg}}mockito diff --git a/src/content/cookbook/testing/widget/scrolling.md b/src/content/cookbook/testing/widget/scrolling.md index b2defb3b6c..6050473ee3 100644 --- a/src/content/cookbook/testing/widget/scrolling.md +++ b/src/content/cookbook/testing/widget/scrolling.md @@ -200,8 +200,8 @@ Run the test using the following command from the root of the project: flutter test test/widget_test.dart ``` -[`flutter_test`]: {{site.api}}/flutter/flutter_test/flutter_test-library.html -[`WidgetTester`]: {{site.api}}/flutter/flutter_test/WidgetTester-class.html -[`ListView.builder`]: {{site.api}}/flutter/widgets/ListView/ListView.builder.html -[`scrollUntilVisible()`]: {{site.api}}/flutter/flutter_test/WidgetController/scrollUntilVisible.html +[`flutter_test`]: {{site.api}}flutter/flutter_test/flutter_test-library.html +[`WidgetTester`]: {{site.api}}flutter/flutter_test/WidgetTester-class.html +[`ListView.builder`]: {{site.api}}flutter/widgets/ListView/ListView.builder.html +[`scrollUntilVisible()`]: {{site.api}}flutter/flutter_test/WidgetController/scrollUntilVisible.html [Work with long lists]: /cookbook/lists/long-lists diff --git a/src/content/data-and-backend/firebase.md b/src/content/data-and-backend/firebase.md index 4a159bc738..327b22f9b2 100644 --- a/src/content/data-and-backend/firebase.md +++ b/src/content/data-and-backend/firebase.md @@ -98,11 +98,11 @@ Flutter 社区创建了以下实用的资源。 [Flutter: Firebase 教程第一部分|验证与登录][video4] -[article]: {{site.flutter-medium}}/must-try-use-firebase-to-host-your-flutter-app-on-the-web-852ee533a469 -[chat app]: {{site.medium}}/flutter-community/building-a-chat-app-with-flutter-and-firebase-from-scratch-9eaa7f41782e -[codelab1]: {{site.codelabs}}/codelabs/firebase-get-to-know-flutter -[Firebase plugins]: {{site.firebase}}/docs/flutter/setup#available-plugins -[started]: {{site.firebase}}/docs/flutter/setup +[article]: {{site.flutter-medium}}must-try-use-firebase-to-host-your-flutter-app-on-the-web-852ee533a469 +[chat app]: {{site.medium}}flutter-community/building-a-chat-app-with-flutter-and-firebase-from-scratch-9eaa7f41782e +[codelab1]: {{site.codelabs}}codelabs/firebase-get-to-know-flutter +[Firebase plugins]: {{site.firebase}}docs/flutter/setup#available-plugins +[started]: {{site.firebase}}docs/flutter/setup [video]: {{site.bili.video}}/BV184411575K/ [video2]: {{site.yt.watch}}/OlcYP6UXlm8 [video3]: {{site.yt.watch}}/u_Lyx8KJWpg diff --git a/src/content/data-and-backend/google-apis.md b/src/content/data-and-backend/google-apis.md index 23af22de4f..e82686baad 100644 --- a/src/content/data-and-backend/google-apis.md +++ b/src/content/data-and-backend/google-apis.md @@ -10,7 +10,7 @@ description: 如何在 Flutter 中使用 Google API The [Google APIs package][] exposes dozens of Google services that you can use from Dart projects. -[Google APIs package]({{site.pub-pkg}}/googleapis) +[Google APIs package]({{site.pub-pkg}}googleapis) 提供了许多你可以从 Dart 项目中使用的 Google 服务。 This page describes how to use APIs that interact with @@ -50,13 +50,13 @@ To add authentication to Firebase explicitly, check out the codelab and the [Get Started with Firebase Authentication on Flutter][fb-auth] docs. -[fb-lab]: {{site.firebase}}/codelabs/firebase-auth-in-flutter-apps -[Calendar]: {{site.pub-api}}/googleapis/latest/calendar_v3/calendar_v3-library.html -[fb-auth]: {{site.firebase}}/docs/auth/flutter/start -[Gmail]: {{site.pub-api}}/googleapis/latest/gmail_v1/gmail_v1-library.html -[Google APIs package]: {{site.pub-pkg}}/googleapis +[fb-lab]: {{site.firebase}}codelabs/firebase-auth-in-flutter-apps +[Calendar]: {{site.pub-api}}googleapis/latest/calendar_v3/calendar_v3-library.html +[fb-auth]: {{site.firebase}}docs/auth/flutter/start +[Gmail]: {{site.pub-api}}googleapis/latest/gmail_v1/gmail_v1-library.html +[Google APIs package]: {{site.pub-pkg}}googleapis [service accounts]: https://cloud.google.com/iam/docs/service-account-overview -[YouTube]: {{site.pub-api}}/googleapis/latest/youtube_v3/youtube_v3-library.html +[YouTube]: {{site.pub-api}}googleapis/latest/youtube_v3/youtube_v3-library.html ## Overview @@ -130,11 +130,11 @@ YouTube data, authenticate the user with import 'package:googleapis/youtube/v3.dart'; ``` -[Constants section]: {{site.pub-api}}/googleapis/latest/youtube_v3/YouTubeApi-class.html#constants -[package:googleapis]: {{site.pub-api}}/googleapis -[`youtube_v3`]: {{site.pub-api}}/googleapis/latest/youtube_v3/youtube_v3-library.html -[`YouTubeApi`]: {{site.pub-api}}/googleapis/latest/youtube_v3/YouTubeApi-class.html -[`youtubeReadonlyScope`]: {{site.pub-api}}/googleapis/latest/youtube_v3/YouTubeApi/youtubeReadonlyScope-constant.html +[Constants section]: {{site.pub-api}}googleapis/latest/youtube_v3/YouTubeApi-class.html#constants +[package:googleapis]: {{site.pub-api}}googleapis +[`youtube_v3`]: {{site.pub-api}}googleapis/latest/youtube_v3/youtube_v3-library.html +[`YouTubeApi`]: {{site.pub-api}}googleapis/latest/youtube_v3/YouTubeApi-class.html +[`youtubeReadonlyScope`]: {{site.pub-api}}googleapis/latest/youtube_v3/YouTubeApi/youtubeReadonlyScope-constant.html ## 2. Enable the API @@ -178,7 +178,7 @@ When instantiating the [`GoogleSignIn`][] class, provide the desired scopes as discussed in the previous section. -当你初始化 [`GoogleSignIn`]({{site.pub-api}}/google_sign_in/latest/google_sign_in/GoogleSignIn-class.html) 类时, +当你初始化 [`GoogleSignIn`]({{site.pub-api}}google_sign_in/latest/google_sign_in/GoogleSignIn-class.html) 类时, 你需要提供前面的小节中提到的所需的作用域。 @@ -200,8 +200,8 @@ you must obtain an authenticated HTTP client. 一旦验证完毕,你必须获取一个验证后的 HTTP 客户端。 -[gsi-pkg]: {{site.pub-pkg}}/google_sign_in -[`GoogleSignIn`]: {{site.pub-api}}/google_sign_in/latest/google_sign_in/GoogleSignIn-class.html +[gsi-pkg]: {{site.pub-pkg}}google_sign_in +[`GoogleSignIn`]: {{site.pub-api}}google_sign_in/latest/google_sign_in/GoogleSignIn-class.html ## 4. Obtain an authenticated HTTP client @@ -224,7 +224,7 @@ Add a listener to [`onCurrentUserChanged`][] and when the event value isn't `null`, you can create an authenticated client. -你可以监听 [`onCurrentUserChanged`]({{site.pub-api}}/google_sign_in/latest/google_sign_in/GoogleSignIn/onCurrentUserChanged.html)。 +你可以监听 [`onCurrentUserChanged`]({{site.pub-api}}google_sign_in/latest/google_sign_in/GoogleSignIn/onCurrentUserChanged.html)。 当事件值不是 `null` 时,你可以创建一个身份验证后的客户端。 @@ -235,13 +235,13 @@ var httpClient = (await _googleSignIn.authenticatedClient())!; This [`Client`][] instance includes the necessary credentials when invoking Google API classes. -[`authenticatedClient`]: {{site.pub-api}}/extension_google_sign_in_as_googleapis_auth/latest/extension_google_sign_in_as_googleapis_auth/GoogleApisGoogleSignInAuth/authenticatedClient.html -[`Client`]: {{site.pub-api}}/http/latest/http/Client-class.html -[extension_google_sign_in_as_googleapis_auth]: {{site.pub-pkg}}/extension_google_sign_in_as_googleapis_auth -[extension method]: {{site.dart-site}}/guides/language/extension-methods -[`onCurrentUserChanged`]: {{site.pub-api}}/google_sign_in/latest/google_sign_in/GoogleSignIn/onCurrentUserChanged.html +[`authenticatedClient`]: {{site.pub-api}}extension_google_sign_in_as_googleapis_auth/latest/extension_google_sign_in_as_googleapis_auth/GoogleApisGoogleSignInAuth/authenticatedClient.html +[`Client`]: {{site.pub-api}}http/latest/http/Client-class.html +[extension_google_sign_in_as_googleapis_auth]: {{site.pub-pkg}}extension_google_sign_in_as_googleapis_auth +[extension method]: {{site.dart-site}}guides/language/extension-methods +[`onCurrentUserChanged`]: {{site.pub-api}}google_sign_in/latest/google_sign_in/GoogleSignIn/onCurrentUserChanged.html -[`Client`]({{site.pub-api}}/http/latest/http/Client-class.html) 实例 +[`Client`]({{site.pub-api}}http/latest/http/Client-class.html) 实例 包含了调用 Google API 类时所需的凭证。 ## 5. Create and use the desired API class @@ -277,4 +277,4 @@ You might want to check out the following: 示例 [`extension_google_sign_in_as_googleapis_auth`][auth-ex] 是本页面所述概念的一个可行的实现。 -[auth-ex]: {{site.pub-pkg}}/extension_google_sign_in_as_googleapis_auth/example +[auth-ex]: {{site.pub-pkg}}extension_google_sign_in_as_googleapis_auth/example diff --git a/src/content/data-and-backend/networking.md b/src/content/data-and-backend/networking.md index 2c3522fa44..29afafea43 100644 --- a/src/content/data-and-backend/networking.md +++ b/src/content/data-and-backend/networking.md @@ -69,5 +69,5 @@ WebSockets, and parsing data in the background) see the 有关各种网络任务(包括:获取数据、WebSockets 和后台解析数据)的 实用示例,请查阅 [网络 cookbook](/cookbook#networking)。 -[declare]: {{site.android-dev}}/training/basics/network-ops/connecting -[`http`]: {{site.pub-pkg}}/http +[declare]: {{site.android-dev}}training/basics/network-ops/connecting +[`http`]: {{site.pub-pkg}}http diff --git a/src/content/data-and-backend/serialization/json.md b/src/content/data-and-backend/serialization/json.md index 43db4a55c4..bb445aad75 100644 --- a/src/content/data-and-backend/serialization/json.md +++ b/src/content/data-and-backend/serialization/json.md @@ -814,21 +814,21 @@ For more information, see the following resources: 关于 [如何在 Dart/Flutter 中解析 JSON][how to parse JSON in Dart/Flutter] 的终极指南 -[`built_value`]: {{site.pub}}/packages/built_value +[`built_value`]: {{site.pub-pkg}}built_value [code generation libraries]: #code-generation -[`dart:convert`]: {{site.dart.api}}/{{site.dart.sdk.channel}}/dart-convert -[`explicitToJson`]: {{site.pub}}/documentation/json_annotation/latest/json_annotation/JsonSerializable/explicitToJson.html +[`dart:convert`]: {{site.dart.api}}{{site.dart.sdk.channel}}/dart-convert +[`explicitToJson`]: {{site.pub-api}}json_annotation/latest/json_annotation/JsonSerializable/explicitToJson.html [Flutter Favorite]: /packages-and-plugins/favorites [json background parsing]: /cookbook/networking/background-parsing -[`JsonCodec`]: {{site.dart.api}}/{{site.dart.sdk.channel}}/dart-convert/JsonCodec-class.html -[`JsonSerializable`]: {{site.pub}}/documentation/json_annotation/latest/json_annotation/JsonSerializable-class.html -[`json_annotation`]: {{site.pub}}/packages/json_annotation -[`json_serializable`]: {{site.pub}}/packages/json_serializable -[`json_serializable` examples]: {{site.github}}/google/json_serializable.dart/blob/master/example/lib/example.dart +[`JsonCodec`]: {{site.dart.api}}{{site.dart.sdk.channel}}/dart-convert/JsonCodec-class.html +[`JsonSerializable`]: {{site.pub-api}}json_annotation/latest/json_annotation/JsonSerializable-class.html +[`json_annotation`]: {{site.pub-pkg}}json_annotation +[`json_serializable`]: {{site.pub-pkg}}json_serializable +[`json_serializable` examples]: {{site.github}}google/json_serializable.dart/blob/master/example/lib/example.dart [pubspec file]: https://raw.githubusercontent.com/google/json_serializable.dart/master/example/pubspec.yaml [reflection]: https://en.wikipedia.org/wiki/Reflection_(computer_programming) [Serializing JSON manually using dart:convert]: #manual-encoding [Serializing JSON using code generation libraries]: #code-generation [tree shaking]: https://en.wikipedia.org/wiki/Tree_shaking -[Dive into Dart's patterns and records]: {{site.codelabs}}/codelabs/dart-patterns-records +[Dive into Dart's patterns and records]: {{site.codelabs}}codelabs/dart-patterns-records [how to parse JSON in Dart/Flutter]: https://codewithandrea.com/articles/parse-json-dart/ diff --git a/src/content/data-and-backend/state-mgmt/ephemeral-vs-app.md b/src/content/data-and-backend/state-mgmt/ephemeral-vs-app.md index 8b4df54456..b44d572cbd 100644 --- a/src/content/data-and-backend/state-mgmt/ephemeral-vs-app.md +++ b/src/content/data-and-backend/state-mgmt/ephemeral-vs-app.md @@ -244,5 +244,5 @@ the two depends on your own preference and the complexity of the app. 其他的是你的应用应用状态,在任何一个 Flutter 应用中这两种状态都有自己的位置。 如何划分这两种状态取决于你的偏好以及应用的复杂度。 -[Do whatever is less awkward]: {{site.github}}/reduxjs/redux/issues/1287#issuecomment-175351978 -[`PageView`]: {{site.api}}/flutter/widgets/PageView-class.html +[Do whatever is less awkward]: {{site.github}}reduxjs/redux/issues/1287#issuecomment-175351978 +[`PageView`]: {{site.api}}flutter/widgets/PageView-class.html diff --git a/src/content/data-and-backend/state-mgmt/options.md b/src/content/data-and-backend/state-mgmt/options.md index fbd8f33aea..8b50828572 100644 --- a/src/content/data-and-backend/state-mgmt/options.md +++ b/src/content/data-and-backend/state-mgmt/options.md @@ -69,7 +69,7 @@ Things to review before selecting an approach. [使用 Provider package][Provider package] -[Provider package]: {{site.pub-pkg}}/provider +[Provider package]: {{site.pub-pkg}}provider [Simple app state management]: /data-and-backend/state-mgmt/simple ## Riverpod @@ -107,7 +107,7 @@ The low-level approach to use for widget-specific, ephemeral state. Agung Surya 著。 [Adding interactivity to your Flutter app]: /ui/interactivity -[Basic state management in Google Flutter]: {{site.medium}}/@agungsurya/basic-state-management-in-google-flutter-6ee73608f96d +[Basic state management in Google Flutter]: {{site.medium}}@agungsurya/basic-state-management-in-google-flutter-6ee73608f96d ## ValueNotifier & InheritedNotifier @@ -161,9 +161,9 @@ Other useful docs include: [Widget - State - Context - InheritedWidget][],Didier Bolelens 著。 -[InheritedWidget docs]: {{site.api}}/flutter/widgets/InheritedWidget-class.html -[Inheriting Widgets]: {{site.medium}}/@mehmetf_71205/inheriting-widgets-b7ac56dbbeb1 -[Managing Flutter Application State With InheritedWidgets]: {{site.flutter-medium}}/managing-flutter-application-state-with-inheritedwidgets-1140452befe1 +[InheritedWidget docs]: {{site.api}}flutter/widgets/InheritedWidget-class.html +[Inheriting Widgets]: {{site.medium}}@mehmetf_71205/inheriting-widgets-b7ac56dbbeb1 +[Managing Flutter Application State With InheritedWidgets]: {{site.flutter-medium}}managing-flutter-application-state-with-inheritedwidgets-1140452befe1 [Using Flutter Inherited Widgets Effectively]: https://ericwindmill.com/articles/inherited_widget/ [Widget - State - Context - InheritedWidget]: https://www.didierboelens.com/2018/06/widget---state---context---inheritedwidget/ @@ -177,7 +177,7 @@ a pattern similar to Flutter's built-in state management. * [june package][] -[june package]: {{site.pub-pkg}}/june +[june package]: {{site.pub-pkg}}june ## Redux @@ -246,19 +246,19 @@ A state container approach familiar to many web developers. [使用 Redux 更好地组织 Flutter 应用的代码以管理项目目标 (Redux and epics for better-organized code in Flutter apps)][Redux and epics for better-organized code in Flutter apps],Nihad Delic 著。 -[Accompanying article on Medium]: {{site.flutter-medium}}/animation-management-with-flutter-and-flux-redux-94729e6585fa +[Accompanying article on Medium]: {{site.flutter-medium}}animation-management-with-flutter-and-flux-redux-94729e6585fa [Animation Management with Redux and Flutter]: {{site.yt.watch}}?v=9ZkLtr0Fbgk -[Async Redux–Redux without boilerplate. Allows for both sync and async reducers]: {{site.pub}}/packages/async_redux +[Async Redux–Redux without boilerplate. Allows for both sync and async reducers]: {{site.pub-pkg}}async_redux [Building a (large) Flutter app with Redux]: https://hillelcoren.com/2018/06/01/building-a-large-flutter-app-with-redux/ [Building a TODO application (CRUD) in Flutter with Redux—Part 1]: {{site.yt.watch}}?v=Wj216eSBBWs -[Fish-Redux–An assembled flutter application framework based on Redux]: {{site.github}}/alibaba/fish-redux/ -[Flutter Redux Thunk, an example]: {{site.medium}}/flutterpub/flutter-redux-thunk-27c2f2b80a3b -[Flutter meets Redux: The Redux way of managing Flutter applications state]: {{site.medium}}/@thisisamir98/flutter-meets-redux-the-redux-way-of-managing-flutter-applications-state-f60ef693b509 -[Flutter Redux package]: {{site.pub-pkg}}/flutter_redux +[Fish-Redux–An assembled flutter application framework based on Redux]: {{site.github}}alibaba/fish-redux/ +[Flutter Redux Thunk, an example]: {{site.medium}}flutterpub/flutter-redux-thunk-27c2f2b80a3b +[Flutter meets Redux: The Redux way of managing Flutter applications state]: {{site.medium}}@thisisamir98/flutter-meets-redux-the-redux-way-of-managing-flutter-applications-state-f60ef693b509 +[Flutter Redux package]: {{site.pub-pkg}}flutter_redux [Flutter + Redux—How to make a shopping list app]: https://hackernoon.com/flutter-redux-how-to-make-shopping-list-app-1cd315e79b65 [Introduction to Redux in Flutter]: https://blog.novoda.com/introduction-to-redux-in-flutter/ -[Redux and epics for better-organized code in Flutter apps]: {{site.medium}}/upday-devs/reduce-duplication-achieve-flexibility-means-success-for-the-flutter-app-e5e432839e61 -[Redux Saga Middleware Dart and Flutter]: {{site.pub-pkg}}/redux_saga +[Redux and epics for better-organized code in Flutter apps]: {{site.medium}}upday-devs/reduce-duplication-achieve-flexibility-means-success-for-the-flutter-app-e5e432839e61 +[Redux Saga Middleware Dart and Flutter]: {{site.pub-pkg}}redux_saga [Flutter_Redux_Gen - VS Code Plugin to generate boiler plate code]: https://marketplace.visualstudio.com/items?itemName=BalaDhruv.flutter-redux-gen ## Fish-Redux @@ -285,9 +285,9 @@ Fish Redux 是一个基于 Redux 状态管理的组合式 Flutter 应用框架 [Flutter-Movie][] 展示如何使用 Fish Redux 的简单示例应用, 包含 30 多个页面、graphql、支付 api 和媒体播放器等。 -[Fish-Redux-Library]: {{site.pub-pkg}}/fish_redux -[Fish-Redux-Source]: {{site.github}}/alibaba/fish-redux -[Flutter-Movie]: {{site.github}}/o1298098/Flutter-Movie +[Fish-Redux-Library]: {{site.pub-pkg}}fish_redux +[Fish-Redux-Source]: {{site.github}}alibaba/fish-redux +[Flutter-Movie]: {{site.github}}o1298098/Flutter-Movie ## BLoC / Rx @@ -311,7 +311,7 @@ A family of stream/observable based patterns. [响应式编程 - 流 - BLoC - 用例 (Reactive Programming - Streams - BLoC - Practical Use Cases)][Reactive Programming - Streams - BLoC - Practical Use Cases], Didier Boelens 著。 -[Architect your Flutter project using BLoC pattern]: {{site.medium}}/flutterpub/architecting-your-flutter-project-bd04e144a8f1 +[Architect your Flutter project using BLoC pattern]: {{site.medium}}flutterpub/architecting-your-flutter-project-bd04e144a8f1 [BloC Library]: https://felangel.github.io/bloc [Reactive Programming - Streams - BLoC - Practical Use Cases]: https://www.didierboelens.com/2018/12/reactive-programming---streams---bloc---practical-use-cases @@ -334,10 +334,10 @@ To learn more, watch this short Package of the Week video on the GetIt package: ::: -[Flutter state management for minimalists]: {{site.medium}}/flutter-community/flutter-state-management-for-minimalists-4c71a2f2f0c1?sk=6f9cedfb550ca9cc7f88317e2e7055a0 -[GetIt package]: {{site.pub-pkg}}/get_it -[GetIt Hooks package]: {{site.pub-pkg}}/get_it_hooks -[GetIt Mixin package]: {{site.pub-pkg}}/get_it_mixin +[Flutter state management for minimalists]: {{site.medium}}flutter-community/flutter-state-management-for-minimalists-4c71a2f2f0c1?sk=6f9cedfb550ca9cc7f88317e2e7055a0 +[GetIt package]: {{site.pub-pkg}}get_it +[GetIt Hooks package]: {{site.pub-pkg}}get_it_hooks +[GetIt Mixin package]: {{site.pub-pkg}}get_it_mixin ## MobX @@ -359,7 +359,7 @@ A popular library based on observables and reactions. [Flutter: State Management with Mobx]: {{site.bili.video}}/BV1Gt411K7JD/ [Getting started with MobX.dart]: https://mobx.netlify.com/getting-started -[MobX.dart, Hassle free state-management for your Dart and Flutter apps]: {{site.github}}/mobxjs/mobx.dart +[MobX.dart, Hassle free state-management for your Dart and Flutter apps]: {{site.github}}mobxjs/mobx.dart ## Flutter Commands @@ -374,8 +374,8 @@ locators too. * [Flutter Command package][] * [RxCommand package][], `Stream` based implementation. -[Flutter Command package]: {{site.pub-pkg}}/flutter_command -[RxCommand package]: {{site.pub-pkg}}/rx_command +[Flutter Command package]: {{site.pub-pkg}}flutter_command +[RxCommand package]: {{site.pub-pkg}}rx_command ## Binder @@ -395,8 +395,8 @@ This package promotes the separation of concerns. [Binder snippets][] 是一个 vscode 插件,能够将代码拆分以获得更高的生产力 -[Binder examples]: {{site.github}}/letsar/binder/tree/main/examples -[Binder package]: {{site.pub-pkg}}/binder +[Binder examples]: {{site.github}}letsar/binder/tree/main/examples +[Binder package]: {{site.pub-pkg}}binder [Binder snippets]: https://marketplace.visualstudio.com/items?itemName=romain-rastel.flutter-binder-snippets ## GetX @@ -408,8 +408,8 @@ A simplified reactive state management solution. * [GetX package][] * [GetX Flutter Firebase Auth Example][], by Jeff McMorris -[GetX package]: {{site.pub-pkg}}/get -[GetX Flutter Firebase Auth Example]: {{site.medium}}/@jeffmcmorris/getx-flutter-firebase-auth-example-b383c1dd1de2 +[GetX package]: {{site.pub-pkg}}get +[GetX Flutter Firebase Auth Example]: {{site.medium}}@jeffmcmorris/getx-flutter-firebase-auth-example-b383c1dd1de2 ## states_rebuilder @@ -426,8 +426,8 @@ For more information, see the following info: * [States Rebuilder documentation][] -[States Rebuilder]: {{site.github}}/GIfatahTH/states_rebuilder -[States Rebuilder documentation]: {{site.github}}/GIfatahTH/states_rebuilder/wiki +[States Rebuilder]: {{site.github}}GIfatahTH/states_rebuilder +[States Rebuilder documentation]: {{site.github}}GIfatahTH/states_rebuilder/wiki ## Triple Pattern (Segmented State Pattern) @@ -445,7 +445,7 @@ For more information, refer to the following resources: * [VIDEO: Flutter Triple Pattern by Kevlin Ossada][] (recorded in English) [Triple documentation]: https://triple.flutterando.com.br/ -[Flutter Triple package]: {{site.pub-pkg}}/flutter_triple +[Flutter Triple package]: {{site.pub-pkg}}flutter_triple [Segmented State pattern]: https://triple.flutterando.com.br/docs/intro/overview#-segmented-state-pattern-ssp [Triple Pattern: A new pattern for state management in Flutter]: https://blog.flutterando.com.br/triple-pattern-um-novo-padr%C3%A3o-para-ger%C3%AAncia-de-estado-no-flutter-2e693a0f4c3e [VIDEO: Flutter Triple Pattern by Kevlin Ossada]: {{site.yt.watch}}?v=dXc3tR15AoA @@ -459,8 +459,8 @@ A simple but powerful state management solution inspired by SolidJS. * [flutter_solidart package][] [Official Documentation]: https://docs.page/nank1ro/solidart -[solidart package]: {{site.pub-pkg}}/solidart -[flutter_solidart package]: {{site.pub-pkg}}/flutter_solidart +[solidart package]: {{site.pub-pkg}}solidart +[flutter_solidart package]: {{site.pub-pkg}}flutter_solidart ## flutter_reactive_value @@ -475,4 +475,4 @@ If the value of the `ValueNotifier` changes, `Widget` rebuilds. * [`flutter_reactive_value`][] source and documentation -[`flutter_reactive_value`]: {{site.github}}/lukehutch/flutter_reactive_value +[`flutter_reactive_value`]: {{site.github}}lukehutch/flutter_reactive_value diff --git a/src/content/data-and-backend/state-mgmt/simple.md b/src/content/data-and-backend/state-mgmt/simple.md index 6fba06a922..cdd58120f0 100644 --- a/src/content/data-and-backend/state-mgmt/simple.md +++ b/src/content/data-and-backend/state-mgmt/simple.md @@ -656,8 +656,8 @@ master these skills. 创建一个包含状态管理应用的能力。 试着自己用 `provider` 构建一个应用来掌握这些技能吧! -[built with `provider`]: {{site.repo.samples}}/tree/main/provider_counter -[check out the example]: {{site.repo.samples}}/tree/main/provider_shopper +[built with `provider`]: {{site.repo.samples}}tree/main/provider_counter +[check out the example]: {{site.repo.samples}}tree/main/provider_shopper [declarative UI programming]: /data-and-backend/state-mgmt/declarative [ephemeral and app state]: /data-and-backend/state-mgmt/ephemeral-vs-app [options page]: /data-and-backend/state-mgmt/options diff --git a/src/content/deployment/android.md b/src/content/deployment/android.md index a5fb9e530b..cbf9a61bbb 100644 --- a/src/content/deployment/android.md +++ b/src/content/deployment/android.md @@ -222,9 +222,9 @@ If not, create one using one of the following methods: 如果你已经有一个密钥库了,可以直接跳到下一步, 如果还没有,需要参考下面的方式创建一个: -1. Follow the [Android Studio key generation steps]({{site.android-dev}}/studio/publish/app-signing#generate-key) +1. Follow the [Android Studio key generation steps]({{site.android-dev}}studio/publish/app-signing#generate-key) - 参考文档 [在 Android Studio 上为你的应用签名]({{site.android-dev}}/studio/publish/app-signing#sign-apk)。 + 参考文档 [在 Android Studio 上为你的应用签名]({{site.android-dev}}studio/publish/app-signing#sign-apk)。 1. Run the following command at the command line: @@ -987,34 +987,34 @@ The resulting app bundle or APK files are located in {% endcomment %} -[apk-deploy]: {{site.android-dev}}/studio/command-line/bundletool#deploy_with_bundletool -[apk-set]: {{site.android-dev}}/studio/command-line/bundletool#generate_apks -[application ID]: {{site.android-dev}}/studio/build/application-id -[applicationtag]: {{site.android-dev}}/guide/topics/manifest/application-element -[arm64-v8a]: {{site.android-dev}}/ndk/guides/abis#arm64-v8a -[armeabi-v7a]: {{site.android-dev}}/ndk/guides/abis#v7a -[bundle]: {{site.android-dev}}/guide/app-bundle -[configuration qualifiers]: {{site.android-dev}}/guide/topics/resources/providing-resources#AlternativeResources +[apk-deploy]: {{site.android-dev}}studio/command-line/bundletool#deploy_with_bundletool +[apk-set]: {{site.android-dev}}studio/command-line/bundletool#generate_apks +[application ID]: {{site.android-dev}}studio/build/application-id +[applicationtag]: {{site.android-dev}}guide/topics/manifest/application-element +[arm64-v8a]: {{site.android-dev}}ndk/guides/abis#arm64-v8a +[armeabi-v7a]: {{site.android-dev}}ndk/guides/abis#v7a +[bundle]: {{site.android-dev}}guide/app-bundle +[configuration qualifiers]: {{site.android-dev}}guide/topics/resources/providing-resources#AlternativeResources [fat APK]: https://en.wikipedia.org/wiki/Fat_binary -[flutter_launcher_icons]: {{site.pub}}/packages/flutter_launcher_icons -[Getting Started guide for Android]: {{site.material}}/develop/android/mdc-android -[GitHub repository]: {{site.github}}/google/bundletool/releases/latest +[flutter_launcher_icons]: {{site.pub-pkg}}flutter_launcher_icons +[Getting Started guide for Android]: {{site.material}}develop/android/mdc-android +[GitHub repository]: {{site.github}}google/bundletool/releases/latest [Google Maven]: https://maven.google.com/web/index.html#com.google.android.material:material -[gradlebuild]: {{site.android-dev}}/studio/build/#module-level -[internal version number]: {{site.android-dev}}/studio/publish/versioning -[launchericons]: {{site.material}}/styles/icons -[manifest]: {{site.android-dev}}/guide/topics/manifest/manifest-intro -[minimum API level]: {{site.android-dev}}/studio/publish/versioning#minsdk -[multidex-docs]: {{site.android-dev}}/studio/build/multidex -[multidex-keep]: {{site.android-dev}}/studio/build/multidex#keep +[gradlebuild]: {{site.android-dev}}studio/build/#module-level +[internal version number]: {{site.android-dev}}studio/publish/versioning +[launchericons]: {{site.material}}styles/icons +[manifest]: {{site.android-dev}}guide/topics/manifest/manifest-intro +[minimum API level]: {{site.android-dev}}studio/publish/versioning#minsdk +[multidex-docs]: {{site.android-dev}}studio/build/multidex +[multidex-keep]: {{site.android-dev}}studio/build/multidex#keep [obfuscating your Dart code]: /deployment/obfuscate [official Play Store documentation]: https://support.google.com/googleplay/android-developer/answer/7384423?hl=en [official Play Store documentation Zh Lang]: https://support.google.com/googleplay/android-developer/answer/7384423?hl=zh_CN -[permissiontag]: {{site.android-dev}}/guide/topics/manifest/uses-permission-element +[permissiontag]: {{site.android-dev}}guide/topics/manifest/uses-permission-element [Platform Views]: /platform-integration/android/platform-views -[play]: {{site.android-dev}}/distribute -[R8]: {{site.android-dev}}/studio/build/shrink-code -[Sign your app]: {{site.android-dev}}/studio/publish/app-signing.html#generate-key -[upload-bundle]: {{site.android-dev}}/studio/publish/upload-bundle -[Version your app]: {{site.android-dev}}/studio/publish/versioning -[x86-64]: {{site.android-dev}}/ndk/guides/abis#86-64 +[play]: {{site.android-dev}}distribute +[R8]: {{site.android-dev}}studio/build/shrink-code +[Sign your app]: {{site.android-dev}}studio/publish/app-signing.html#generate-key +[upload-bundle]: {{site.android-dev}}studio/publish/upload-bundle +[Version your app]: {{site.android-dev}}studio/publish/versioning +[x86-64]: {{site.android-dev}}ndk/guides/abis#86-64 diff --git a/src/content/deployment/cd.md b/src/content/deployment/cd.md index 0fd6bf9a21..0b5f73f105 100644 --- a/src/content/deployment/cd.md +++ b/src/content/deployment/cd.md @@ -592,27 +592,27 @@ information. [Android app signing steps]: /deployment/android#signing-the-app [Appcircle]: https://appcircle.io/blog/guide-to-automated-mobile-ci-cd-for-flutter-projects-with-appcircle/ -[Apple Developer Account console]: {{site.apple-dev}}/account/ios/certificate/ +[Apple Developer Account console]: {{site.apple-dev}}account/ios/certificate/ [Bitrise]: https://devcenter.bitrise.io/en/getting-started/quick-start-guides/getting-started-with-flutter-apps [CI Options and Examples]: #reference-and-examples [Cirrus]: https://cirrus-ci.org -[Cirrus script]: {{site.repo.flutter}}/blob/master/.cirrus.yml +[Cirrus script]: {{site.repo.flutter}}blob/master/.cirrus.yml [Codemagic]: https://blog.codemagic.io/getting-started-with-codemagic/ [fastlane]: https://docs.fastlane.tools [fastlane Android beta deployment guide]: https://docs.fastlane.tools/getting-started/android/beta-deployment/ [fastlane CI documentation]: https://docs.fastlane.tools/best-practices/continuous-integration [fastlane iOS beta deployment guide]: https://docs.fastlane.tools/getting-started/ios/beta-deployment/ -[Github Action in Flutter Project]: {{site.github}}/nabilnalakath/flutter-githubaction -[GitHub Actions]: {{site.github}}/features/actions +[Github Action in Flutter Project]: {{site.github}}nabilnalakath/flutter-githubaction +[GitHub Actions]: {{site.github}}features/actions [GitLab]: https://docs.gitlab.com/ee/ci/README.html#doc-nav [CircleCI]: https://circleci.com [Building and deploying Flutter apps with Fastlane]: https://circleci.com/blog/deploy-flutter-android [Match]: https://docs.fastlane.tools/actions/match/ [Supply setup steps]: https://docs.fastlane.tools/getting-started/android/setup/#setting-up-supply [Travis]: https://travis-ci.org/ -[Apple Developer Program]: {{site.apple-dev}}/programs -[Xcode Cloud]: {{site.apple-dev}}/xcode-cloud -[Xcode Cloud workflow]: {{site.apple-dev}}/documentation/xcode/xcode-cloud-workflow-reference -[custom build scripts]: {{site.apple-dev}}/documentation/xcode/writing-custom-build-scripts -[predefined environment variables]: {{site.apple-dev}}/documentation/xcode/environment-variable-reference -[Setting the next build number for Xcode Cloud builds]: {{site.apple-dev}}/documentation/xcode/setting-the-next-build-number-for-xcode-cloud-builds#Set-the-next-build-number-to-a-custom-value +[Apple Developer Program]: {{site.apple-dev}}programs +[Xcode Cloud]: {{site.apple-dev}}xcode-cloud +[Xcode Cloud workflow]: {{site.apple-dev}}documentation/xcode/xcode-cloud-workflow-reference +[custom build scripts]: {{site.apple-dev}}documentation/xcode/writing-custom-build-scripts +[predefined environment variables]: {{site.apple-dev}}documentation/xcode/environment-variable-reference +[Setting the next build number for Xcode Cloud builds]: {{site.apple-dev}}documentation/xcode/setting-the-next-build-number-for-xcode-cloud-builds#Set-the-next-build-number-to-a-custom-value diff --git a/src/content/deployment/flavors.md b/src/content/deployment/flavors.md index 12200cc228..c6ebb8ffab 100644 --- a/src/content/deployment/flavors.md +++ b/src/content/deployment/flavors.md @@ -194,7 +194,7 @@ productFlavors { } ``` -[`flavorDimension`]: {{site.android-dev}}/studio/build/build-variants#flavor-dimensions +[`flavorDimension`]: {{site.android-dev}}studio/build/build-variants#flavor-dimensions ## Setting up launch configurations @@ -294,15 +294,15 @@ For packages that support creating flavors, check out the following: * [`flutter_flavorizr`][] [Launching your app flavors]: /deployment/flavors/#launching-your-app-flavors -[Flutter repo]: {{site.repo.flutter}}/blob/master/dev/integration_tests/flavors/lib/main.dart -[iOS]: {{site.repo.flutter}}/tree/master/dev/integration_tests/flavors/ios -[macOS]: {{site.repo.flutter}}/tree/master/dev/integration_tests/flavors/macos -[iOS (Xcode)]: {{site.repo.flutter}}/tree/master/dev/integration_tests/flavors/ios -[`appFlavor`]: {{site.api}}/flutter/services/appFlavor-constant.html -[Android]: {{site.repo.flutter}}/tree/master/dev/integration_tests/flavors/android +[Flutter repo]: {{site.repo.flutter}}blob/master/dev/integration_tests/flavors/lib/main.dart +[iOS]: {{site.repo.flutter}}tree/master/dev/integration_tests/flavors/ios +[macOS]: {{site.repo.flutter}}tree/master/dev/integration_tests/flavors/macos +[iOS (Xcode)]: {{site.repo.flutter}}tree/master/dev/integration_tests/flavors/ios +[`appFlavor`]: {{site.api}}flutter/services/appFlavor-constant.html +[Android]: {{site.repo.flutter}}tree/master/dev/integration_tests/flavors/android [Adding assets and images]: /ui/assets/assets-and-images -[Build flavors in Flutter (Android and iOS) with different Firebase projects per flavor Flutter Ready to Go]: {{site.medium}}/@animeshjain/build-flavors-in-flutter-android-and-ios-with-different-firebase-projects-per-flavor-27c5c5dac10b -[Flavoring Flutter Applications (Android & iOS)]: {{site.medium}}/flutter-community/flavoring-flutter-applications-android-ios-ea39d3155346 +[Build flavors in Flutter (Android and iOS) with different Firebase projects per flavor Flutter Ready to Go]: {{site.medium}}@animeshjain/build-flavors-in-flutter-android-and-ios-with-different-firebase-projects-per-flavor-27c5c5dac10b +[Flavoring Flutter Applications (Android & iOS)]: {{site.medium}}flutter-community/flavoring-flutter-applications-android-ios-ea39d3155346 [Flutter Flavors Setup with multiple Firebase Environments using FlutterFire and Very Good CLI]: https://codewithandrea.com/articles/flutter-flavors-for-firebase-apps/ -[`flutter_flavor`]: {{site.pub}}/packages/flutter_flavor -[`flutter_flavorizr`]: {{site.pub}}/packages/flutter_flavorizr +[`flutter_flavor`]: {{site.pub-pkg}}flutter_flavor +[`flutter_flavorizr`]: {{site.pub-pkg}}flutter_flavorizr diff --git a/src/content/deployment/ios.md b/src/content/deployment/ios.md index 1a851bf177..a961d1f84f 100644 --- a/src/content/deployment/ios.md +++ b/src/content/deployment/ios.md @@ -846,36 +846,36 @@ detailed overview of the process of releasing an app to the App Store. [分发你的应用][distributionguide] 指南, 提供了详细的发布应用到 App Store 过程的内容。 -[appicon]: {{site.apple-dev}}/design/human-interface-guidelines/app-icons/ -[appreview]: {{site.apple-dev}}/app-store/review/ +[appicon]: {{site.apple-dev}}design/human-interface-guidelines/app-icons/ +[appreview]: {{site.apple-dev}}app-store/review/ [appsigning]: https://help.apple.com/xcode/mac/current/#/dev154b28f09 -[appstore]: {{site.apple-dev}}/app-store/submissions/ -[appstoreconnect]: {{site.apple-dev}}/support/app-store-connect/ +[appstore]: {{site.apple-dev}}app-store/submissions/ +[appstoreconnect]: {{site.apple-dev}}support/app-store-connect/ [appstoreconnect_api_key]: https://appstoreconnect.apple.com/access/api -[appstoreconnect_guide]: {{site.apple-dev}}/support/app-store-connect/ +[appstoreconnect_guide]: {{site.apple-dev}}support/app-store-connect/ [appstoreconnect_guide_register]: https://help.apple.com/app-store-connect/#/dev2cd126805 [appstoreconnect_login]: https://appstoreconnect.apple.com/ -[codemagic_cli_tools]: {{site.github}}/codemagic-ci-cd/cli-tools -[codesigning_guide]: {{site.apple-dev}}/library/content/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html -[Core Foundation Keys]: {{site.apple-dev}}/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -[devportal_appids]: {{site.apple-dev}}/account/ios/identifier/bundle -[devportal_certificates]: {{site.apple-dev}}/account/resources/certificates -[devprogram]: {{site.apple-dev}}/programs/ -[devprogram_membership]: {{site.apple-dev}}/support/compare-memberships/ +[codemagic_cli_tools]: {{site.github}}codemagic-ci-cd/cli-tools +[codesigning_guide]: {{site.apple-dev}}library/content/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html +[Core Foundation Keys]: {{site.apple-dev}}library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +[devportal_appids]: {{site.apple-dev}}account/ios/identifier/bundle +[devportal_certificates]: {{site.apple-dev}}account/resources/certificates +[devprogram]: {{site.apple-dev}}programs/ +[devprogram_membership]: {{site.apple-dev}}support/compare-memberships/ [distributionguide]: https://help.apple.com/xcode/mac/current/#/devac02c5ab8 [distributionguide_config]: https://help.apple.com/xcode/mac/current/#/dev91fe7130a [distributionguide_submit]: https://help.apple.com/xcode/mac/current/#/dev067853c94 [distributionguide_testflight]: https://help.apple.com/xcode/mac/current/#/dev2539d985f [distributionguide_upload]: https://help.apple.com/xcode/mac/current/#/dev442d7f2ca [obfuscate your Dart code]: /deployment/obfuscate -[TestFlight]: {{site.apple-dev}}/testflight/ -[appreview_cn]: https://developer.apple.com/cn/app-store/review/ -[appstore_cn]: https://developer.apple.com/cn/app-store/submissions/ -[devprogram_cn]: https://developer.apple.com/cn/programs/ -[devprogram_membership_cn]: https://developer.apple.com/cn/support/compare-memberships/ -[appstoreconnect_cn]: https://developer.apple.com/cn/support/app-store-connect/ -[appstoreconnect_guide_cn]: https://developer.apple.com/cn/support/app-store-connect/ +[TestFlight]: {{site.apple-dev}}testflight/ +[appreview_cn]: {{site.apple-dev}}cn/app-store/review/ +[appstore_cn]: {{site.apple-dev}}cn/app-store/submissions/ +[devprogram_cn]: {{site.apple-dev}}cn/programs/ +[devprogram_membership_cn]: {{site.apple-dev}}cn/support/compare-memberships/ +[appstoreconnect_cn]: {{site.apple-dev}}cn/support/app-store-connect/ +[appstoreconnect_guide_cn]: {{site.apple-dev}}cn/support/app-store-connect/ [appstoreconnect_guide_register_cn]: https://help.apple.com/app-store-connect/?lang=zh-cn/dev2cd126805 -[testflight_cn]: https://developer.apple.com/cn/testflight/ +[testflight_cn]: {{site.apple-dev}}cn/testflight/ [app_bundle_export_method]: https://help.apple.com/xcode/mac/current/#/dev31de635e5 [apple_transport_app]: https://apps.apple.com/us/app/transporter/id1450874784 diff --git a/src/content/deployment/linux.md b/src/content/deployment/linux.md index fdd0f6c84d..dbeb487349 100644 --- a/src/content/deployment/linux.md +++ b/src/content/deployment/linux.md @@ -393,9 +393,9 @@ You can learn more from the following links on the -[Desktop shells]: {{site.repo.flutter}}/wiki/Desktop-shells +[Desktop shells]: {{site.repo.flutter}}wiki/Desktop-shells [Environment variables]: https://snapcraft.io/docs/environment-variables -[Flutter wiki]: {{site.repo.flutter}}/wiki/ +[Flutter wiki]: {{site.repo.flutter}}wiki/ [Interface management]: https://snapcraft.io/docs/interface-management [DBus interface]: https://snapcraft.io/docs/dbus-interface [Introduction to snapcraft]: https://snapcraft.io/blog/introduction-to-snapcraft diff --git a/src/content/deployment/macos.md b/src/content/deployment/macos.md index 116c62606e..f963f4b2ee 100644 --- a/src/content/deployment/macos.md +++ b/src/content/deployment/macos.md @@ -789,27 +789,27 @@ account, check out the step-by-step 来了解如何在不使用 Apple 付费开发者账户的情况下, 以开源的方式打包和发布适用于 macOS 的 Flutter 桌面应用。 -[appicon]: {{site.apple-dev}}/design/human-interface-guidelines/macos/icons-and-images/app-icon/ -[appreview]: {{site.apple-dev}}/app-store/review/ +[appicon]: {{site.apple-dev}}design/human-interface-guidelines/macos/icons-and-images/app-icon/ +[appreview]: {{site.apple-dev}}app-store/review/ [appsigning]: https://help.apple.com/xcode/mac/current/#/dev154b28f09 -[appstore]: {{site.apple-dev}}/app-store/submissions/ -[appstoreconnect]: {{site.apple-dev}}/support/app-store-connect/ +[appstore]: {{site.apple-dev}}app-store/submissions/ +[appstoreconnect]: {{site.apple-dev}}support/app-store-connect/ [appstoreconnect_api_key]: https://appstoreconnect.apple.com/access/api -[appstoreconnect_guide]: {{site.apple-dev}}/support/app-store-connect/ +[appstoreconnect_guide]: {{site.apple-dev}}support/app-store-connect/ [appstoreconnect_guide_register]: https://help.apple.com/app-store-connect/#/dev2cd126805 [appstoreconnect_login]: https://appstoreconnect.apple.com/ -[codemagic_cli_tools]: {{site.github}}/codemagic-ci-cd/cli-tools -[codesigning_guide]: {{site.apple-dev}}/library/content/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html -[Core Foundation Keys]: {{site.apple-dev}}/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -[devportal_appids]: {{site.apple-dev}}/account/resources/identifiers/list -[devportal_certificates]: {{site.apple-dev}}/account/resources/certificates/list -[devprogram]: {{site.apple-dev}}/programs/ -[devprogram_membership]: {{site.apple-dev}}/support/compare-memberships/ +[codemagic_cli_tools]: {{site.github}}codemagic-ci-cd/cli-tools +[codesigning_guide]: {{site.apple-dev}}library/content/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html +[Core Foundation Keys]: {{site.apple-dev}}library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +[devportal_appids]: {{site.apple-dev}}account/resources/identifiers/list +[devportal_certificates]: {{site.apple-dev}}account/resources/certificates/list +[devprogram]: {{site.apple-dev}}programs/ +[devprogram_membership]: {{site.apple-dev}}support/compare-memberships/ [distributionguide]: https://help.apple.com/xcode/mac/current/#/dev8b4250b57 [distributionguide_config]: https://help.apple.com/xcode/mac/current/#/dev91fe7130a [distributionguide_macos]: https://help.apple.com/xcode/mac/current/#/dev295cc0fae [distributionguide_submit]: https://help.apple.com/xcode/mac/current/#/dev067853c94 [distributionguide_upload]: https://help.apple.com/xcode/mac/current/#/dev442d7f2ca [obfuscating your Dart code]: /deployment/obfuscate -[TestFlight]: {{site.apple-dev}}/testflight/ -[macos_packaging_guide]: https://medium.com/@fluttergems/packaging-and-distributing-flutter-desktop-apps-the-missing-guide-part-1-macos-b36438269285 +[TestFlight]: {{site.apple-dev}}testflight/ +[macos_packaging_guide]: {{site.medium}}@fluttergems/packaging-and-distributing-flutter-desktop-apps-the-missing-guide-part-1-macos-b36438269285 diff --git a/src/content/deployment/web.md b/src/content/deployment/web.md index a9d350127a..9c42eb140c 100644 --- a/src/content/deployment/web.md +++ b/src/content/deployment/web.md @@ -298,13 +298,13 @@ so please [give us feedback][] if you see something that doesn't look right. 对 PWA 的支持仍在进行中,因此,如果你发现不正确的地方, 欢迎 [给予我们反馈][give us feedback]。 -[dhttpd]: {{site.pub}}/packages/dhttpd +[dhttpd]: {{site.pub-pkg}}dhttpd [Displaying images on the web]: /platform-integration/web/web-images -[Firebase Hosting]: {{site.firebase}}/docs/hosting/frameworks/flutter -[Firebase framework-aware CLI]: {{site.firebase}}/docs/hosting/frameworks/frameworks-overview -[install-firebase-cli]: {{site.firebase}}/docs/cli#install_the_firebase_cli +[Firebase Hosting]: {{site.firebase}}docs/hosting/frameworks/flutter +[Firebase framework-aware CLI]: {{site.firebase}}docs/hosting/frameworks/frameworks-overview +[install-firebase-cli]: {{site.firebase}}docs/cli#install_the_firebase_cli [GitHub Pages]: https://pages.github.com/ -[give us feedback]: {{site.repo.flutter}}/issues/new?title=%5Bweb%5D:+%3Cdescribe+issue+here%3E&labels=%E2%98%B8+platform-web&body=Describe+your+issue+and+include+the+command+you%27re+running,+flutter_web%20version,+browser+version +[give us feedback]: {{site.repo.flutter}}issues/new?title=%5Bweb%5D:+%3Cdescribe+issue+here%3E&labels=%E2%98%B8+platform-web&body=Describe+your+issue+and+include+the+command+you%27re+running,+flutter_web%20version,+browser+version [Google Cloud Hosting]: https://cloud.google.com/solutions/web-hosting [`iframe`]: https://html.com/tags/iframe/ [Web renderers]: /platform-integration/web/renderers diff --git a/src/content/deployment/windows.md b/src/content/deployment/windows.md index 59230fc28c..efa417e27c 100644 --- a/src/content/deployment/windows.md +++ b/src/content/deployment/windows.md @@ -186,14 +186,14 @@ and Partner Center accounts][azureadassociation]. GitHub Actions can use the [Microsoft Dev Store CLI](https://learn.microsoft.com/windows/apps/publish/msstore-dev-cli/overview) to package applications into an MSIX and publish them to the Microsoft Store. -The [setup-msstore-cli](https://github.com/microsoft/setup-msstore-cli) +The [setup-msstore-cli]({{site.github}}microsoft/setup-msstore-cli) GitHub Action installs the cli so that the Action can use it for packaging and publishing. GitHub Actions 可以使用 [Microsoft Dev Store CLI](https://learn.microsoft.com/windows/apps/publish/msstore-dev-cli/overview) 将应用程序打包为 MSIX 并将其发布到 Microsoft Store。 -[setup-msstore-cli](https://github.com/microsoft/setup-msstore-cli) +[setup-msstore-cli]({{site.github}}microsoft/setup-msstore-cli) GitHub Action 安装了 cli,这样 Action 就可以用它进行打包和发布。 As packaging the MSIX uses the @@ -213,13 +213,13 @@ You must create an Azure AD directory from the Dev Center with The GitHub Action requires environment secrets from the partner center. `AZURE_AD_TENANT_ID`, `AZURE_AD_ClIENT_ID`, and `AZURE_AD_CLIENT_SECRET` are visible on the Dev Center following the instructions for the -[Windows Store Publish Action](https://github.com/marketplace/actions/windows-store-publish#obtaining-your-credentials). +[Windows Store Publish Action]({{site.github}}marketplace/actions/windows-store-publish#obtaining-your-credentials). You also need the `SELLER_ID` secret, which can be found in the Dev Center under **Account Settings** > **Organization Profile** > **Legal Info**. GitHub Action 需要从合作伙伴中心获取环境秘钥。 `AZURE_AD_TENANT_ID`,`AZURE_AD_ClIENT_ID` 和 `AZURE_AD_CLIENT_SECRET` -在遵循 [Windows Store Publish Action](https://github.com/marketplace/actions/windows-store-publish#obtaining-your-credentials) +在遵循 [Windows Store Publish Action]({{site.github}}marketplace/actions/windows-store-publish#obtaining-your-credentials) 的说明后,可以在 Dev Center 上看到。 你还需要 `SELLER_ID` 秘钥, 可以在 Dev Center 的 **帐户设置** > **组织简介** > **法律信息** 下找到。 @@ -431,7 +431,7 @@ even if the certification passes. [microsoftstore]: https://www.microsoft.com/store/apps/windows [msidocs]: https://docs.microsoft.com/en-us/windows/win32/msi/windows-installer-portal [microsoftpartner]: https://partner.microsoft.com/ -[msix package]: {{site.pub}}/packages/msix +[msix package]: {{site.pub-pkg}}msix [msix packaging]: /platform-integration/windows/building#msix-packaging [partnercenterapi]: https://docs.microsoft.com/azure/marketplace/azure-app-apis [storepolicies]: https://docs.microsoft.com/windows/uwp/publish/store-policies/ diff --git a/src/content/embedded/index.md b/src/content/embedded/index.md index 238001f0ca..cb183e5db7 100644 --- a/src/content/embedded/index.md +++ b/src/content/embedded/index.md @@ -38,11 +38,11 @@ resources. [community]: {{site.main-url}}/community [Discord]: https://discord.com/invite/N7Yshp4 -[Custom Flutter Engine Embedders]: {{site.repo.flutter}}/wiki/Custom-Flutter-Engine-Embedders +[Custom Flutter Engine Embedders]: {{site.repo.flutter}}wiki/Custom-Flutter-Engine-Embedders [Flutter architectural overview]: /resources/architectural-overview -[Flutter engine `embedder.h` file]: {{site.repo.engine}}/blob/main/shell/platform/embedder/embedder.h -[Flutter Embedder Engine GLFW example]: {{site.repo.engine}}/tree/main/examples/glfw#flutter-embedder-engine-glfw-example -[embedding Flutter in a terminal]: https://github.com/jiahaog/flt -[Issue 31043]: {{site.repo.flutter}}/issues/31043 +[Flutter engine `embedder.h` file]: {{site.repo.engine}}blob/main/shell/platform/embedder/embedder.h +[Flutter Embedder Engine GLFW example]: {{site.repo.engine}}tree/main/examples/glfw#flutter-embedder-engine-glfw-example +[embedding Flutter in a terminal]: {{site.github}}jiahaog/flt +[Issue 31043]: {{site.repo.flutter}}issues/31043 diff --git a/src/content/get-started/codelab-web.md b/src/content/get-started/codelab-web.md index 702dd790eb..188938b602 100644 --- a/src/content/get-started/codelab-web.md +++ b/src/content/get-started/codelab-web.md @@ -1517,17 +1517,17 @@ Dart DevTools, or Flutter animations, see the following: [DevTools command line]: /tools/devtools/cli [DevTools documentation]: /tools/devtools [DevTools installed]: /tools/devtools/overview#start -[DartPad troubleshooting page]: {{site.dart-site}}/tools/dartpad/troubleshoot -[`didUpdateWidget`]: {{site.api}}/flutter/widgets/State/didUpdateWidget.html +[DartPad troubleshooting page]: {{site.dart-site}}tools/dartpad/troubleshoot +[`didUpdateWidget`]: {{site.api}}flutter/widgets/State/didUpdateWidget.html [editor]: /get-started/editor -[Effective Dart Style Guide]: {{site.dart-site}}/guides/language/effective-dart/style#dont-use-a-leading-underscore-for-identifiers-that-arent-private +[Effective Dart Style Guide]: {{site.dart-site}}guides/language/effective-dart/style#dont-use-a-leading-underscore-for-identifiers-that-arent-private [Flutter cookbook]: /cookbook [Flutter SDK]: /get-started/install [Implicit animations]: /codelabs/implicit-animations [Introduction to declarative UI]: /get-started/flutter-for/declarative -[Material Design]: {{site.material}}/get-started -[TextButton]: {{site.api}}/flutter/material/TextButton-class.html +[Material Design]: {{site.material}}get-started +[TextButton]: {{site.api}}flutter/material/TextButton-class.html [VS Code]: /tools/devtools/vscode -[Web samples]: {{site.repo.samples}}/tree/main/web -[Widget]: {{site.api}}/flutter/widgets/Widget-class.html +[Web samples]: {{site.repo.samples}}tree/main/web +[Widget]: {{site.api}}flutter/widgets/Widget-class.html [first_flutter_codelab]: /get-started/codelab diff --git a/src/content/get-started/codelab.md b/src/content/get-started/codelab.md index cc859a118e..6992c392fc 100644 --- a/src/content/get-started/codelab.md +++ b/src/content/get-started/codelab.md @@ -34,7 +34,7 @@ that works on mobile, desktop, and web. {% endcomment -%} + href="{{site.codelabs}}codelabs/flutter-codelab-first"> ▶  Start codelab diff --git a/src/content/get-started/editor.md b/src/content/get-started/editor.md index 9b37dde9f7..e46bd7f34f 100644 --- a/src/content/get-started/editor.md +++ b/src/content/get-started/editor.md @@ -180,7 +180,7 @@ To install the latest version of the following IDEs, follow their instructions: - [IntelliJ IDEA Community][] - [IntelliJ IDEA Ultimate][] -[Android Studio]: {{site.android-dev}}/studio/install +[Android Studio]: {{site.android-dev}}studio/install [IntelliJ IDEA Community]: https://www.jetbrains.com/idea/download/ [IntelliJ IDEA Ultimate]: https://www.jetbrains.com/idea/download/ diff --git a/src/content/get-started/flutter-for/android-devs.md b/src/content/get-started/flutter-for/android-devs.md index 0c0bff618a..03efd98796 100644 --- a/src/content/get-started/flutter-for/android-devs.md +++ b/src/content/get-started/flutter-for/android-devs.md @@ -641,7 +641,7 @@ class SignaturePainter extends CustomPainter { } ``` -[Custom Paint]: {{site.so}}/questions/46241071/create-signature-area-for-mobile-app-in-dart-flutter +[Custom Paint]: {{site.so}}questions/46241071/create-signature-area-for-mobile-app-in-dart-flutter ### How do I build custom widgets? @@ -721,7 +721,7 @@ through native integrations (using [a plugin][]). 在 Android 中,`Intent` 主要有两个使用场景: 在 Activity 之前进行导航,以及组件间通信。 Flutter 却没有 intent 这样的概念, -但是你依然可以通过原生集成 ([插件]({{site.pub}}/packages/android_intent)) +但是你依然可以通过原生集成 ([插件]({{site.pub-pkg}}android_intent)) 来启动 intent。 Flutter doesn't really have a direct equivalent to activities and fragments; @@ -3151,42 +3151,42 @@ see the [`firebase_messaging`][] plugin documentation. [Animation & Motion widgets]: /ui/widgets/animation [Animations tutorial]: /ui/animations/tutorial [Animations overview]: /ui/animations -[`AppLifecycleStatus` documentation]: {{site.api}}/flutter/dart-ui/AppLifecycleState.html -[Apple's iOS design language]: {{site.apple-dev}}/design/resources/ -[`cloud_firestore`]: {{site.pub}}/packages/cloud_firestore +[`AppLifecycleStatus` documentation]: {{site.api}}flutter/dart-ui/AppLifecycleState.html +[Apple's iOS design language]: {{site.apple-dev}}design/resources/ +[`cloud_firestore`]: {{site.pub-pkg}}cloud_firestore [composing]: /resources/architectural-overview#composition [Cupertino widgets]: /ui/widgets/cupertino [developing packages and plugins]: /packages-and-plugins/developing-packages -[`devicePixelRatio`]: {{site.api}}/flutter/dart-ui/FlutterView/devicePixelRatio.html +[`devicePixelRatio`]: {{site.api}}flutter/dart-ui/FlutterView/devicePixelRatio.html [DevTools]: /tools/devtools -[existing plugin]: {{site.pub}}/flutter/ -[`flutter_facebook_login`]: {{site.pub}}/packages/flutter_facebook_login -[`google_mobile_ads`]: {{site.pub}}/packages/google_mobile_ads -[`firebase_analytics`]: {{site.pub}}/packages/firebase_analytics -[`firebase_auth`]: {{site.pub}}/packages/firebase_auth -[`firebase_database`]: {{site.pub}}/packages/firebase_database -[`firebase_messaging`]: {{site.pub}}/packages/firebase_messaging -[`firebase_storage`]: {{site.pub}}/packages/firebase_storage -[`flutter_firebase_ui`]: {{site.pub}}/packages/flutter_firebase_ui -[Firebase Messaging]: {{site.github}}/firebase/flutterfire/tree/master/packages/firebase_messaging -[first party plugins]: {{site.pub}}/flutter/packages?q=firebase +[existing plugin]: {{site.pub}}flutter/ +[`flutter_facebook_login`]: {{site.pub-pkg}}flutter_facebook_login +[`google_mobile_ads`]: {{site.pub-pkg}}google_mobile_ads +[`firebase_analytics`]: {{site.pub-pkg}}firebase_analytics +[`firebase_auth`]: {{site.pub-pkg}}firebase_auth +[`firebase_database`]: {{site.pub-pkg}}firebase_database +[`firebase_messaging`]: {{site.pub-pkg}}firebase_messaging +[`firebase_storage`]: {{site.pub-pkg}}firebase_storage +[`flutter_firebase_ui`]: {{site.pub-pkg}}flutter_firebase_ui +[Firebase Messaging]: {{site.github}}firebase/flutterfire/tree/master/packages/firebase_messaging +[first party plugins]: {{site.pub}}flutter/packages?q=firebase [Flutter cookbook]: /cookbook [Flutter for Android Developers: How to design LinearLayout in Flutter]: https://proandroiddev.com/flutter-for-android-developers-how-to-design-linearlayout-in-flutter-5d819c0ddf1a [Flutter for Android Developers: How to design Activity UI in Flutter]: https://blog.usejournal.com/flutter-for-android-developers-how-to-design-activity-ui-in-flutter-4bf7b0de1e48 -[`geolocator`]: {{site.pub}}/packages/geolocator -[`http` package]: {{site.pub}}/packages/http -[`image_picker`]: {{site.pub}}/packages/image_picker +[`geolocator`]: {{site.pub-pkg}}geolocator +[`http` package]: {{site.pub-pkg}}http +[`image_picker`]: {{site.pub-pkg}}image_picker [Intents]: #what-is-the-equivalent-of-an-intent-in-flutter -[intl package]: {{site.pub}}/packages/intl +[intl package]: {{site.pub-pkg}}intl [Introduction to declarative UI]: /get-started/flutter-for/declarative -[Material Components]: {{site.material}}/develop/flutter -[Material Design guidelines]: {{site.material}}/styles -[optimized for all platforms]: {{site.material}}/develop -[a plugin]: {{site.pub}}/packages/android_intent -[pub.dev]: {{site.pub}}/flutter/packages/ +[Material Components]: {{site.material}}develop/flutter +[Material Design guidelines]: {{site.material}}styles +[optimized for all platforms]: {{site.material}}develop +[a plugin]: {{site.pub-pkg}}android_intent +[pub.dev]: {{site.pub}}flutter/packages/ [Retrieve the value of a text field]: /cookbook/forms/retrieve-input -[Shared_Preferences plugin]: {{site.pub}}/packages/shared_preferences -[SQFlite]: {{site.pub}}/packages/sqflite -[StackOverflow]: {{site.so}}/questions/44396075/equivalent-of-relativelayout-in-flutter +[Shared_Preferences plugin]: {{site.pub-pkg}}shared_preferences +[SQFlite]: {{site.pub-pkg}}sqflite +[StackOverflow]: {{site.so}}questions/44396075/equivalent-of-relativelayout-in-flutter [widget catalog]: /ui/widgets/layout [Internationalizing Flutter apps]: /ui/accessibility-and-internationalization/internationalization diff --git a/src/content/get-started/flutter-for/dart-swift-concurrency.md b/src/content/get-started/flutter-for/dart-swift-concurrency.md index 1b5dd8e70f..15be97e264 100644 --- a/src/content/get-started/flutter-for/dart-swift-concurrency.md +++ b/src/content/get-started/flutter-for/dart-swift-concurrency.md @@ -56,7 +56,7 @@ and `await` tells the system to await a result from function. This means that the Dart VM _could_ suspend the function, if necessary. For more details on asynchronous programming, check out -[Concurrency in Dart]({{site.dart-site}}/guides/language/concurrency). +[Concurrency in Dart]({{site.dart-site}}guides/language/concurrency). ### Leveraging the main thread/isolate @@ -200,8 +200,8 @@ In other words, you don't have to create a inside functions marked as `async`. For the last step, display the weather value. -In Flutter, [`FutureBuilder`]({{site.api}}/flutter/widgets/FutureBuilder-class.html) and -[`StreamBuilder`]({{site.api}}/flutter/widgets/StreamBuilder-class.html) +In Flutter, [`FutureBuilder`]({{site.api}}flutter/widgets/FutureBuilder-class.html) and +[`StreamBuilder`]({{site.api}}flutter/widgets/StreamBuilder-class.html) widgets are used to display the results of a Future in the UI. The following example uses a `FutureBuilder`: @@ -245,7 +245,7 @@ class HomePage extends StatelessWidget { For the complete example, check out the [async_weather][] file on GitHub. -[async_weather]: {{site.repo.this}}/examples/resources/lib/async_weather.dart +[async_weather]: {{site.repo.this}}examples/resources/lib/async_weather.dart ### Leveraging a background thread/isolate @@ -311,6 +311,6 @@ and more information on Flutter at [Flutter for SwiftUI developers][] or [Flutter for UIKit developers][]. -[Learning Dart as a Swift developer]: {{site.dart-site}}/guides/language/coming-from/swift-to-dart +[Learning Dart as a Swift developer]: {{site.dart-site}}guides/language/coming-from/swift-to-dart [Flutter for SwiftUI developers]: /get-started/flutter-for/swiftui-devs [Flutter for UIKit developers]: /get-started/flutter-for/uikit-devs diff --git a/src/content/get-started/flutter-for/react-native-devs.md b/src/content/get-started/flutter-for/react-native-devs.md index 1dd81d7b72..3c43196cd1 100644 --- a/src/content/get-started/flutter-for/react-native-devs.md +++ b/src/content/get-started/flutter-for/react-native-devs.md @@ -2803,7 +2803,7 @@ see the [GestureDetector class][]. `GestureDetector` 回调函数的列表, 请查看页面 [GestureDetector 类][GestureDetector class]。 -[GestureDetector class]: {{site.api}}/flutter/widgets/GestureDetector-class.html#instance-properties +[GestureDetector class]: {{site.api}}flutter/widgets/GestureDetector-class.html#instance-properties {% include docs/android-ios-figure-pair.md image="react-native/flutter-gestures.gif" alt="Gestures" class="border" %} @@ -3543,110 +3543,110 @@ Flutter widget 和通用的 widget 属性。 -[`AboutDialog`]: {{site.api}}/flutter/material/AboutDialog-class.html +[`AboutDialog`]: {{site.api}}flutter/material/AboutDialog-class.html [Adding Assets and Images in Flutter]: /ui/assets/assets-and-images -[`AlertDialog`]: {{site.api}}/flutter/material/AlertDialog-class.html -[`Align`]: {{site.api}}/flutter/widgets/Align-class.html -[`Animation`]: {{site.api}}/flutter/animation/Animation-class.html -[`AnimationController`]: {{site.api}}/flutter/animation/AnimationController-class.html -[async and await]: {{site.dart-site}}/language/async -[`Axis`]: {{site.api}}/flutter/painting/Axis.html -[`BuildContext`]: {{site.api}}/flutter/widgets/BuildContext-class.html -[`Center`]: {{site.api}}/flutter/widgets/Center-class.html -[color palette]: {{site.material2}}/design/color/the-color-system.html#color-theme-creation -[colors]: {{site.api}}/flutter/material/Colors-class.html -[`Colors`]: {{site.api}}/flutter/material/Colors-class.html -[`Column`]: {{site.api}}/flutter/widgets/Column-class.html -[`Container`]: {{site.api}}/flutter/widgets/Container-class.html -[`Checkbox`]: {{site.api}}/flutter/material/Checkbox-class.html -[`CircleAvatar`]: {{site.api}}/flutter/material/CircleAvatar-class.html -[`CircularProgressIndicator`]: {{site.api}}/flutter/material/CircularProgressIndicator-class.html +[`AlertDialog`]: {{site.api}}flutter/material/AlertDialog-class.html +[`Align`]: {{site.api}}flutter/widgets/Align-class.html +[`Animation`]: {{site.api}}flutter/animation/Animation-class.html +[`AnimationController`]: {{site.api}}flutter/animation/AnimationController-class.html +[async and await]: {{site.dart-site}}language/async +[`Axis`]: {{site.api}}flutter/painting/Axis.html +[`BuildContext`]: {{site.api}}flutter/widgets/BuildContext-class.html +[`Center`]: {{site.api}}flutter/widgets/Center-class.html +[color palette]: {{site.material2}}design/color/the-color-system.html#color-theme-creation +[colors]: {{site.api}}flutter/material/Colors-class.html +[`Colors`]: {{site.api}}flutter/material/Colors-class.html +[`Column`]: {{site.api}}flutter/widgets/Column-class.html +[`Container`]: {{site.api}}flutter/widgets/Container-class.html +[`Checkbox`]: {{site.api}}flutter/material/Checkbox-class.html +[`CircleAvatar`]: {{site.api}}flutter/material/CircleAvatar-class.html +[`CircularProgressIndicator`]: {{site.api}}flutter/material/CircularProgressIndicator-class.html [Cupertino (iOS-style)]: /ui/widgets/cupertino -[`CustomPaint`]: {{site.api}}/flutter/widgets/CustomPaint-class.html -[`CustomPainter`]: {{site.api}}/flutter/rendering/CustomPainter-class.html -[Dart]: {{site.dart-site}}/dart-2 -[Dart's Type System]: {{site.dart-site}}/guides/language/sound-dart -[Sound Null Safety]: {{site.dart-site}}/null-safety -[`dart:io`]: {{site.api}}/flutter/dart-io/dart-io-library.html -[DartPadA]: {{site.dartpad}}/?id=0df636e00f348bdec2bc1c8ebc7daeb1 -[DartPadB]: {{site.dartpad}}/?id=cf9e652f77636224d3e37d96dcf238e5 -[DartPadC]: {{site.dartpad}}/?id=3f4625c16e05eec396d6046883739612 -[DartPadD]: {{site.dartpad}}/?id=57ec21faa8b6fe2326ffd74e9781a2c7 -[DartPadE]: {{site.dartpad}}/?id=c85038ad677963cb6dc943eb1a0b72e6 -[DartPadF]: {{site.dartpad}}/?id=5454e8bfadf3000179d19b9bc6be9918 +[`CustomPaint`]: {{site.api}}flutter/widgets/CustomPaint-class.html +[`CustomPainter`]: {{site.api}}flutter/rendering/CustomPainter-class.html +[Dart]: {{site.dart-site}}dart-2 +[Dart's Type System]: {{site.dart-site}}guides/language/sound-dart +[Sound Null Safety]: {{site.dart-site}}null-safety +[`dart:io`]: {{site.api}}flutter/dart-io/dart-io-library.html +[DartPadA]: {{site.dartpad}}?id=0df636e00f348bdec2bc1c8ebc7daeb1 +[DartPadB]: {{site.dartpad}}?id=cf9e652f77636224d3e37d96dcf238e5 +[DartPadC]: {{site.dartpad}}?id=3f4625c16e05eec396d6046883739612 +[DartPadD]: {{site.dartpad}}?id=57ec21faa8b6fe2326ffd74e9781a2c7 +[DartPadE]: {{site.dartpad}}?id=c85038ad677963cb6dc943eb1a0b72e6 +[DartPadF]: {{site.dartpad}}?id=5454e8bfadf3000179d19b9bc6be9918 [Developing Packages & Plugins]: /packages-and-plugins/developing-packages [DevTools]: /tools/devtools -[`Dismissible`]: {{site.api}}/flutter/widgets/Dismissible-class.html -[`FadeTransition`]: {{site.api}}/flutter/widgets/FadeTransition-class.html -[Flutter packages]: {{site.pub}}/flutter/ +[`Dismissible`]: {{site.api}}flutter/widgets/Dismissible-class.html +[`FadeTransition`]: {{site.api}}flutter/widgets/FadeTransition-class.html +[Flutter packages]: {{site.pub}}flutter/ [Flutter Architectural Overview]: /resources/architectural-overview [Flutter Basic Widgets]: /ui/widgets/basics [Flutter Technical Overview]: /resources/architectural-overview [Flutter Widget Catalog]: /ui/widgets [Flutter Widget Index]: /reference/widgets -[`FlutterLogo`]: {{site.api}}/flutter/material/FlutterLogo-class.html -[`Form`]: {{site.api}}/flutter/widgets/Form-class.html -[`TextButton`]: {{site.api}}/flutter/material/TextButton-class.html -[functions]: {{site.dart-site}}/language/functions -[`Future`]: {{site.dart-site}}/tutorials/language/futures -[`GestureDetector`]: {{site.api}}/flutter/widgets/GestureDetector-class.html +[`FlutterLogo`]: {{site.api}}flutter/material/FlutterLogo-class.html +[`Form`]: {{site.api}}flutter/widgets/Form-class.html +[`TextButton`]: {{site.api}}flutter/material/TextButton-class.html +[functions]: {{site.dart-site}}language/functions +[`Future`]: {{site.dart-site}}tutorials/language/futures +[`GestureDetector`]: {{site.api}}flutter/widgets/GestureDetector-class.html [Getting started]: /get-started -[`Image`]: {{site.api}}/flutter/widgets/Image-class.html -[`IndexedWidgetBuilder`]: {{site.api}}/flutter/widgets/IndexedWidgetBuilder.html -[`InheritedWidget`]: {{site.api}}/flutter/widgets/InheritedWidget-class.html -[`InkWell`]: {{site.api}}/flutter/material/InkWell-class.html +[`Image`]: {{site.api}}flutter/widgets/Image-class.html +[`IndexedWidgetBuilder`]: {{site.api}}flutter/widgets/IndexedWidgetBuilder.html +[`InheritedWidget`]: {{site.api}}flutter/widgets/InheritedWidget-class.html +[`InkWell`]: {{site.api}}flutter/material/InkWell-class.html [Layout Widgets]: /ui/widgets/layout -[`LinearProgressIndicator`]: {{site.api}}/flutter/material/LinearProgressIndicator-class.html -[`ListTile`]: {{site.api}}/flutter/material/ListTile-class.html -[`ListView`]: {{site.api}}/flutter/widgets/ListView-class.html -[`ListView.builder`]: {{site.api}}/flutter/widgets/ListView/ListView.builder.html -[Material Design]: {{site.material}}/styles -[Material icons]: {{site.api}}/flutter/material/Icons-class.html -[`MaterialApp`]: {{site.api}}/flutter/material/MaterialApp-class.html -[`MaterialPageRoute`]: {{site.api}}/flutter/material/MaterialPageRoute-class.html -[`ModalRoute`]: {{site.api}}/flutter/widgets/ModalRoute-class.html -[`Navigator`]: {{site.api}}/flutter/widgets/Navigator-class.html -[`Navigator.of()`]: {{site.api}}/flutter/widgets/Navigator/of.html -[`Navigator.pop`]: {{site.api}}/flutter/widgets/Navigator/pop.html -[`Navigator.push`]: {{site.api}}/flutter/widgets/Navigator/push.html -[`onSaved`]: {{site.api}}/flutter/widgets/FormField/onSaved.html -[named parameters]: {{site.dart-site}}/language/functions#named-parameters -[`Padding`]: {{site.api}}/flutter/widgets/Padding-class.html +[`LinearProgressIndicator`]: {{site.api}}flutter/material/LinearProgressIndicator-class.html +[`ListTile`]: {{site.api}}flutter/material/ListTile-class.html +[`ListView`]: {{site.api}}flutter/widgets/ListView-class.html +[`ListView.builder`]: {{site.api}}flutter/widgets/ListView/ListView.builder.html +[Material Design]: {{site.material}}styles +[Material icons]: {{site.api}}flutter/material/Icons-class.html +[`MaterialApp`]: {{site.api}}flutter/material/MaterialApp-class.html +[`MaterialPageRoute`]: {{site.api}}flutter/material/MaterialPageRoute-class.html +[`ModalRoute`]: {{site.api}}flutter/widgets/ModalRoute-class.html +[`Navigator`]: {{site.api}}flutter/widgets/Navigator-class.html +[`Navigator.of()`]: {{site.api}}flutter/widgets/Navigator/of.html +[`Navigator.pop`]: {{site.api}}flutter/widgets/Navigator/pop.html +[`Navigator.push`]: {{site.api}}flutter/widgets/Navigator/push.html +[`onSaved`]: {{site.api}}flutter/widgets/FormField/onSaved.html +[named parameters]: {{site.dart-site}}language/functions#named-parameters +[`Padding`]: {{site.api}}flutter/widgets/Padding-class.html [`PanResponder`]: https://facebook.github.io/react-native/docs/panresponder.html [pub.dev]: {{site.pub}} -[`Radio`]: {{site.api}}/flutter/material/Radio-class.html -[`ElevatedButton`]: {{site.api}}/flutter/material/ElevatedButton-class.html -[`RefreshIndicator`]: {{site.api}}/flutter/material/RefreshIndicator-class.html -[`Route`]: {{site.api}}/flutter/widgets/Route-class.html -[`Row`]: {{site.api}}/flutter/widgets/Row-class.html -[`Scaffold`]: {{site.api}}/flutter/material/Scaffold-class.html -[`ScrollController`]: {{site.api}}/flutter/widgets/ScrollController-class.html -[`shared_preferences`]: {{site.repo.packages}}/tree/main/packages/shared_preferences/shared_preferences -[`SingleTickerProviderStateMixin`]: {{site.api}}/flutter/widgets/SingleTickerProviderStateMixin-mixin.html -[`Slider`]: {{site.api}}/flutter/material/Slider-class.html -[`Stack`]: {{site.api}}/flutter/widgets/Stack-class.html +[`Radio`]: {{site.api}}flutter/material/Radio-class.html +[`ElevatedButton`]: {{site.api}}flutter/material/ElevatedButton-class.html +[`RefreshIndicator`]: {{site.api}}flutter/material/RefreshIndicator-class.html +[`Route`]: {{site.api}}flutter/widgets/Route-class.html +[`Row`]: {{site.api}}flutter/widgets/Row-class.html +[`Scaffold`]: {{site.api}}flutter/material/Scaffold-class.html +[`ScrollController`]: {{site.api}}flutter/widgets/ScrollController-class.html +[`shared_preferences`]: {{site.repo.packages}}tree/main/packages/shared_preferences/shared_preferences +[`SingleTickerProviderStateMixin`]: {{site.api}}flutter/widgets/SingleTickerProviderStateMixin-mixin.html +[`Slider`]: {{site.api}}flutter/material/Slider-class.html +[`Stack`]: {{site.api}}flutter/widgets/Stack-class.html [State management]: /data-and-backend/state-mgmt -[`StatefulWidget`]: {{site.api}}/flutter/widgets/StatefulWidget-class.html -[`StatelessWidget`]: {{site.api}}/flutter/widgets/StatelessWidget-class.html -[`Switch`]: {{site.api}}/flutter/material/Switch-class.html -[`Tab`]: {{site.api}}/flutter/material/Tab-class.html -[`TabBar`]: {{site.api}}/flutter/material/TabBar-class.html -[`TabBarView`]: {{site.api}}/flutter/material/TabBarView-class.html -[`TabController`]: {{site.api}}/flutter/material/TabController-class.html -[`Text`]: {{site.api}}/flutter/widgets/Text-class.html -[`TextAlign`]: {{site.api}}/flutter/dart-ui/TextAlign.html -[`TextEditingController`]: {{site.api}}/flutter/widgets/TextEditingController-class.html -[`TextField`]: {{site.api}}/flutter/material/TextField-class.html -[`TextFormField`]: {{site.api}}/flutter/material/TextFormField-class.html -[`TextInput`]: {{site.api}}/flutter/services/TextInput-class.html -[`TextStyle`]: {{site.api}}/flutter/dart-ui/TextStyle-class.html -[`Theme`]: {{site.api}}/flutter/material/Theme-class.html -[`ThemeData`]: {{site.api}}/flutter/material/ThemeData-class.html -[`Ticker`]: {{site.api}}/flutter/scheduler/Ticker-class.html -[`TickerProvider`]: {{site.api}}/flutter/scheduler/TickerProvider-class.html -[`TickerProviderStateMixin`]: {{site.api}}/flutter/widgets/TickerProviderStateMixin-mixin.html -[`Tween`]: {{site.api}}/flutter/animation/Tween-class.html +[`StatefulWidget`]: {{site.api}}flutter/widgets/StatefulWidget-class.html +[`StatelessWidget`]: {{site.api}}flutter/widgets/StatelessWidget-class.html +[`Switch`]: {{site.api}}flutter/material/Switch-class.html +[`Tab`]: {{site.api}}flutter/material/Tab-class.html +[`TabBar`]: {{site.api}}flutter/material/TabBar-class.html +[`TabBarView`]: {{site.api}}flutter/material/TabBarView-class.html +[`TabController`]: {{site.api}}flutter/material/TabController-class.html +[`Text`]: {{site.api}}flutter/widgets/Text-class.html +[`TextAlign`]: {{site.api}}flutter/dart-ui/TextAlign.html +[`TextEditingController`]: {{site.api}}flutter/widgets/TextEditingController-class.html +[`TextField`]: {{site.api}}flutter/material/TextField-class.html +[`TextFormField`]: {{site.api}}flutter/material/TextFormField-class.html +[`TextInput`]: {{site.api}}flutter/services/TextInput-class.html +[`TextStyle`]: {{site.api}}flutter/dart-ui/TextStyle-class.html +[`Theme`]: {{site.api}}flutter/material/Theme-class.html +[`ThemeData`]: {{site.api}}flutter/material/ThemeData-class.html +[`Ticker`]: {{site.api}}flutter/scheduler/Ticker-class.html +[`TickerProvider`]: {{site.api}}flutter/scheduler/TickerProvider-class.html +[`TickerProviderStateMixin`]: {{site.api}}flutter/widgets/TickerProviderStateMixin-mixin.html +[`Tween`]: {{site.api}}flutter/animation/Tween-class.html [Using Packages]: /packages-and-plugins/using-packages -[variables]: {{site.dart-site}}/language/variables -[`WidgetBuilder`]: {{site.api}}/flutter/widgets/WidgetBuilder.html -[infinite_list]: {{site.repo.samples}}/tree/main/infinite_list +[variables]: {{site.dart-site}}language/variables +[`WidgetBuilder`]: {{site.api}}flutter/widgets/WidgetBuilder.html +[infinite_list]: {{site.repo.samples}}tree/main/infinite_list diff --git a/src/content/get-started/flutter-for/swiftui-devs.md b/src/content/get-started/flutter-for/swiftui-devs.md index 6cfd0495bd..bb03fbe75e 100644 --- a/src/content/get-started/flutter-for/swiftui-devs.md +++ b/src/content/get-started/flutter-for/swiftui-devs.md @@ -202,10 +202,10 @@ the `runApp` function. @@ -225,10 +225,10 @@ like [`CupertinoApp`][]. @@ -255,10 +255,10 @@ The widget used in `HomePage` might begin with the `Scaffold` class. @@ -306,10 +306,10 @@ use the `CupertinoButton` class: @@ -352,10 +352,10 @@ HStack { @@ -397,10 +397,10 @@ except it swaps [`Column`][] for `Row`: @@ -454,10 +454,10 @@ You set the number of items to display then build a widget for each item. @@ -538,10 +538,10 @@ The following example uses the `.builder()` initializer: @@ -609,10 +609,10 @@ of the `Person` class to create the custom `PersonView` widget. @@ -686,10 +686,10 @@ The following example shows a part of a counter app: @@ -762,10 +762,10 @@ This animates the `Transform.rotate` widget. @@ -815,10 +815,10 @@ with two classes that help you draw: @@ -836,10 +836,10 @@ with two classes that help you draw: @@ -913,10 +913,10 @@ call your navigation routes using their names. @@ -953,10 +953,10 @@ call your navigation routes using their names. @@ -997,10 +997,10 @@ call your navigation routes using their names. @@ -1047,10 +1047,10 @@ In **Flutter**, use the `pop()` function of the `Navigator` class: @@ -1091,7 +1091,7 @@ In **Flutter**, use the [`url_launcher`][] plugin. @@ -1129,10 +1129,10 @@ of the `App` class: @@ -1165,10 +1165,10 @@ of the `style` parameter of the `Text` widget. @@ -1211,10 +1211,10 @@ In the following example: @@ -1277,7 +1277,7 @@ following example: @@ -1348,35 +1348,35 @@ To review a complete walkthrough, check out the [video_player example][]. [Cupertino widgets]: /ui/widgets/cupertino [Flutter concurrency for Swift developers]: /get-started/flutter-for/dart-swift-concurrency [Navigation and routing]: /ui/navigation -[Material]: {{site.material}}/develop/flutter/ +[Material]: {{site.material}}develop/flutter/ [Platform adaptations]: /platform-integration/platform-adaptations -[`url_launcher`]: {{site.pub-pkg}}/url_launcher +[`url_launcher`]: {{site.pub-pkg}}url_launcher [widget catalog]: /ui/widgets/layout [Understanding constraints]: /ui/layout/constraints -[`WidgetApp`]: {{site.api}}/flutter/widgets/WidgetsApp-class.html -[`CupertinoApp`]: {{site.api}}/flutter/cupertino/CupertinoApp-class.html -[`Center`]: {{site.api}}/flutter/widgets/Center-class.html -[`CupertinoButton`]: {{site.api}}/flutter/cupertino/CupertinoButton-class.html -[`Row`]: {{site.api}}/flutter/widgets/Row-class.html -[`Column`]: {{site.api}}/flutter/widgets/Column-class.html -[Learning Dart as a Swift Developer]: {{site.dart-site}}/guides/language/coming-from/swift-to-dart -[`ListView`]: {{site.api}}/flutter/widgets/ListView-class.html -[`ListTile`]: {{site.api}}/flutter/widgets/ListTitle-class.html -[`GridView`]: {{site.api}}/flutter/widgets/GridView-class.html -[`SingleChildScrollView`]: {{site.api}}/flutter/widgets/SingleChildScrollView-class.html -[`LayoutBuilder`]: {{site.api}}/flutter/widgets/LayoutBuilder-class.html -[`AnimatedRotation`]: {{site.api}}/flutter/widgets/AnimatedRotation-class.html -[`TweenAnimationBuilder`]: {{site.api}}/flutter/widgets/TweenAnimationBuilder-class.html -[`RotationTransition`]: {{site.api}}/flutter/widgets/RotationTransition-class.html -[`Navigator`]: {{site.api}}/flutter/widgets/Navigator-class.html -[`StatefulWidget`]: {{site.api}}/flutter/widgets/StatefulWidget-class.html +[`WidgetApp`]: {{site.api}}flutter/widgets/WidgetsApp-class.html +[`CupertinoApp`]: {{site.api}}flutter/cupertino/CupertinoApp-class.html +[`Center`]: {{site.api}}flutter/widgets/Center-class.html +[`CupertinoButton`]: {{site.api}}flutter/cupertino/CupertinoButton-class.html +[`Row`]: {{site.api}}flutter/widgets/Row-class.html +[`Column`]: {{site.api}}flutter/widgets/Column-class.html +[Learning Dart as a Swift Developer]: {{site.dart-site}}guides/language/coming-from/swift-to-dart +[`ListView`]: {{site.api}}flutter/widgets/ListView-class.html +[`ListTile`]: {{site.api}}flutter/widgets/ListTitle-class.html +[`GridView`]: {{site.api}}flutter/widgets/GridView-class.html +[`SingleChildScrollView`]: {{site.api}}flutter/widgets/SingleChildScrollView-class.html +[`LayoutBuilder`]: {{site.api}}flutter/widgets/LayoutBuilder-class.html +[`AnimatedRotation`]: {{site.api}}flutter/widgets/AnimatedRotation-class.html +[`TweenAnimationBuilder`]: {{site.api}}flutter/widgets/TweenAnimationBuilder-class.html +[`RotationTransition`]: {{site.api}}flutter/widgets/RotationTransition-class.html +[`Navigator`]: {{site.api}}flutter/widgets/Navigator-class.html +[`StatefulWidget`]: {{site.api}}flutter/widgets/StatefulWidget-class.html [State management]: /data-and-backend/state-mgmt [Wonderous]: https://flutter.gskinner.com/wonderous/?utm_source=flutterdocs&utm_medium=docs&utm_campaign=iosdevs -[video_player]: {{site.pub-pkg}}/video_player -[video_player example]: {{site.pub-pkg}}/video_player/example +[video_player]: {{site.pub-pkg}}video_player +[video_player example]: {{site.pub-pkg}}video_player/example [Creating responsive and adaptive apps]: /ui/adaptive-responsive -[`MediaQuery.of()`]: {{site.api}}/flutter/widgets/MediaQuery-class.html -[`CustomPaint`]: {{site.api}}/flutter/widgets/CustomPaint-class.html -[`CustomPainter`]: {{site.api}}/flutter/rendering/CustomPainter-class.html -[`Image`]: {{site.api}}/flutter/widgets/Image-class.html -[go_router]: {{site.pub-pkg}}/go_router +[`MediaQuery.of()`]: {{site.api}}flutter/widgets/MediaQuery-class.html +[`CustomPaint`]: {{site.api}}flutter/widgets/CustomPaint-class.html +[`CustomPainter`]: {{site.api}}flutter/rendering/CustomPainter-class.html +[`Image`]: {{site.api}}flutter/widgets/Image-class.html +[go_router]: {{site.pub-pkg}}go_router diff --git a/src/content/get-started/flutter-for/uikit-devs.md b/src/content/get-started/flutter-for/uikit-devs.md index e01ce4efa5..001ee1d847 100644 --- a/src/content/get-started/flutter-for/uikit-devs.md +++ b/src/content/get-started/flutter-for/uikit-devs.md @@ -432,7 +432,7 @@ the latter of which implements your algorithm to draw to the canvas. To learn how to implement a signature painter in Flutter, see Collin's answer on [StackOverflow][]. -[StackOverflow]: {{site.so}}/questions/46241071/create-signature-area-for-mobile-app-in-dart-flutter +[StackOverflow]: {{site.so}}questions/46241071/create-signature-area-for-mobile-app-in-dart-flutter ```dart @@ -2161,35 +2161,35 @@ class _SampleAppPageState extends State { [Animation & Motion widgets]: /ui/widgets/animation [Animations overview]: /ui/animations [Animations tutorial]: /ui/animations/tutorial -[Apple's iOS design language]: {{site.apple-dev}}/design/resources -[`AppLifecycleState` documentation]: {{site.api}}/flutter/dart-ui/AppLifecycleState.html -[arb]: {{site.github}}/googlei18n/app-resource-bundle -[`AssetBundle`]: {{site.api}}/flutter/services/AssetBundle-class.html +[Apple's iOS design language]: {{site.apple-dev}}design/resources +[`AppLifecycleState` documentation]: {{site.api}}flutter/dart-ui/AppLifecycleState.html +[arb]: {{site.github}}googlei18n/app-resource-bundle +[`AssetBundle`]: {{site.api}}flutter/services/AssetBundle-class.html [composing]: /resources/architectural-overview#composition -[Cupertino library]: {{site.api}}/flutter/cupertino/cupertino-library.html +[Cupertino library]: {{site.api}}flutter/cupertino/cupertino-library.html [Cupertino widgets]: /ui/widgets/cupertino -[`devicePixelRatio`]: {{site.api}}/flutter/dart-ui/FlutterView/devicePixelRatio.html -[existing plugin]: {{site.pub}}/flutter +[`devicePixelRatio`]: {{site.api}}flutter/dart-ui/FlutterView/devicePixelRatio.html +[existing plugin]: {{site.pub}}flutter [Flutter concurrency for Swift developers]: /get-started/flutter-for/dart-swift-concurrency [Flutter cookbook]: /cookbook -[`http` package]: {{site.pub-pkg}}/http -[Human Interface Guidelines]: {{site.apple-dev}}/ios/human-interface-guidelines/overview/themes/ +[`http` package]: {{site.pub-pkg}}http +[Human Interface Guidelines]: {{site.apple-dev}}ios/human-interface-guidelines/overview/themes/ [internationalization guide]: /ui/accessibility-and-internationalization/internationalization -[`intl`]: {{site.pub-pkg}}/intl -[`intl_translation`]: {{site.pub-pkg}}/intl_translation +[`intl`]: {{site.pub-pkg}}intl +[`intl_translation`]: {{site.pub-pkg}}intl_translation [Introduction to declarative UI]: /get-started/flutter-for/declarative [layout tutorial]: /ui/widgets/layout -[`Localizations`]: {{site.api}}/flutter/widgets/Localizations-class.html -[Material Components]: {{site.material}}/develop/flutter/ -[Material Design guidelines]: {{site.material}}/styles/ -[optimized for all platforms]: {{site.material2}}/design/platform-guidance/cross-platform-adaptation.html#cross-platform-guidelines +[`Localizations`]: {{site.api}}flutter/widgets/Localizations-class.html +[Material Components]: {{site.material}}develop/flutter/ +[Material Design guidelines]: {{site.material}}styles/ +[optimized for all platforms]: {{site.material2}}design/platform-guidance/cross-platform-adaptation.html#cross-platform-guidelines [Platform adaptations]: /platform-integration/platform-adaptations [platform channel]: /platform-integration/platform-channels -[pub.dev]: {{site.pub}}/flutter/packages +[pub.dev]: {{site.pub}}flutter/packages [Retrieve the value of a text field]: /cookbook/forms/retrieve-input -[`TextEditingController`]: {{site.api}}/flutter/widgets/TextEditingController-class.html -[`url_launcher`]: {{site.pub-pkg}}/url_launcher +[`TextEditingController`]: {{site.api}}flutter/widgets/TextEditingController-class.html +[`url_launcher`]: {{site.pub-pkg}}url_launcher [widget]: /resources/architectural-overview#widgets [widget catalog]: /ui/widgets/layout -[`Window.locale`]: {{site.api}}/flutter/dart-ui/Window/locale.html -[Learning Dart as a Swift Developer]: {{site.dart-site}}/guides/language/coming-from/swift-to-dart \ No newline at end of file +[`Window.locale`]: {{site.api}}flutter/dart-ui/Window/locale.html +[Learning Dart as a Swift Developer]: {{site.dart-site}}guides/language/coming-from/swift-to-dart \ No newline at end of file diff --git a/src/content/get-started/flutter-for/web-devs.md b/src/content/get-started/flutter-for/web-devs.md index abf378d0d9..ab4cd0bee3 100644 --- a/src/content/get-started/flutter-for/web-devs.md +++ b/src/content/get-started/flutter-for/web-devs.md @@ -1160,22 +1160,22 @@ final container = Container( [basic shapes]: https://developer.mozilla.org/en-US/docs/Web/CSS/basic-shape [`border-box`]: https://css-tricks.com/box-sizing/ -[`BorderRadius`]: {{site.api}}/flutter/painting/BorderRadius-class.html -[`BoxDecoration`]: {{site.api}}/flutter/painting/BoxDecoration-class.html -[`BoxConstraints`]: {{site.api}}/flutter/rendering/BoxConstraints-class.html -[`BoxShape` enum]: {{site.api}}/flutter/painting/BoxShape.html -[`BoxShadow`]: {{site.api}}/flutter/painting/BoxShadow-class.html -[`Center`]: {{site.api}}/flutter/widgets/Center-class.html -[`Container`]: {{site.api}}/flutter/widgets/Container-class.html +[`BorderRadius`]: {{site.api}}flutter/painting/BorderRadius-class.html +[`BoxDecoration`]: {{site.api}}flutter/painting/BoxDecoration-class.html +[`BoxConstraints`]: {{site.api}}flutter/rendering/BoxConstraints-class.html +[`BoxShape` enum]: {{site.api}}flutter/painting/BoxShape.html +[`BoxShadow`]: {{site.api}}flutter/painting/BoxShadow-class.html +[`Center`]: {{site.api}}flutter/widgets/Center-class.html +[`Container`]: {{site.api}}flutter/widgets/Container-class.html [Introduction to declarative UI]: /get-started/flutter-for/declarative -[Learning Dart as a JavaScript Developer]: {{site.dart-site}}/guides/language/coming-from/js-to-dart -[`Matrix4`]: {{site.api}}/flutter/vector_math_64/Matrix4-class.html -[`Positioned`]: {{site.api}}/flutter/widgets/Positioned-class.html -[`RichText`]: {{site.api}}/flutter/widgets/RichText-class.html -[`Stack`]: {{site.api}}/flutter/widgets/Stack-class.html -[`Text`]: {{site.api}}/flutter/widgets/Text-class.html -[`TextSpan`]: {{site.api}}/flutter/painting/TextSpan-class.html -[`TextStyle`]: {{site.api}}/flutter/painting/TextStyle-class.html -[`Transform`]: {{site.api}}/flutter/widgets/Transform-class.html +[Learning Dart as a JavaScript Developer]: {{site.dart-site}}guides/language/coming-from/js-to-dart +[`Matrix4`]: {{site.api}}flutter/vector_math_64/Matrix4-class.html +[`Positioned`]: {{site.api}}flutter/widgets/Positioned-class.html +[`RichText`]: {{site.api}}flutter/widgets/RichText-class.html +[`Stack`]: {{site.api}}flutter/widgets/Stack-class.html +[`Text`]: {{site.api}}flutter/widgets/Text-class.html +[`TextSpan`]: {{site.api}}flutter/painting/TextSpan-class.html +[`TextStyle`]: {{site.api}}flutter/painting/TextStyle-class.html +[`Transform`]: {{site.api}}flutter/widgets/Transform-class.html [Understanding constraints]: /ui/layout/constraints diff --git a/src/content/get-started/flutter-for/xamarin-forms-devs.md b/src/content/get-started/flutter-for/xamarin-forms-devs.md index 6c7c6c54ff..427608bcb2 100644 --- a/src/content/get-started/flutter-for/xamarin-forms-devs.md +++ b/src/content/get-started/flutter-for/xamarin-forms-devs.md @@ -132,9 +132,9 @@ Xamarin.Forms 拥有一些不同类型的页面,`ContentPage` 是最为通用 你也可以使用 [`CupertinoApp`][] widget,它能用来创建 iOS 风格的应用; 或者你也可以使用更底层的 [`WidgetsApp`][],可供你随心所欲地定制。 -[`CupertinoApp`]: {{site.api}}/flutter/cupertino/CupertinoApp-class.html -[`MaterialApp`]: {{site.api}}/flutter/material/MaterialApp-class.html -[`WidgetsApp`]: {{site.api}}/flutter/widgets/WidgetsApp-class.html +[`CupertinoApp`]: {{site.api}}flutter/cupertino/CupertinoApp-class.html +[`MaterialApp`]: {{site.api}}flutter/material/MaterialApp-class.html +[`WidgetsApp`]: {{site.api}}flutter/widgets/WidgetsApp-class.html The following code defines the home page, a stateful widget. In Flutter, all widgets are immutable, @@ -146,9 +146,9 @@ Examples of a stateless widget are titles, icons, or images. **有状态** 和 **无状态** widget。 无状态 widget 的示例都是标题、图标或图片。 -[`CupertinoApp`]: {{site.api}}/flutter/cupertino/CupertinoApp-class.html -[`MaterialApp`]: {{site.api}}/flutter/material/MaterialApp-class.html -[`WidgetsApp`]: {{site.api}}/flutter/widgets/WidgetsApp-class.html +[`CupertinoApp`]: {{site.api}}flutter/cupertino/CupertinoApp-class.html +[`MaterialApp`]: {{site.api}}flutter/material/MaterialApp-class.html +[`WidgetsApp`]: {{site.api}}flutter/widgets/WidgetsApp-class.html The following example uses `MaterialApp`, which holds its root page in the `home` property. @@ -782,7 +782,7 @@ see Collin's answer on [Custom Paint][]. 如果想学习在 Flutter 中如何实现一个签名功能, 可以查看 Collin 的回答 [Custom Paint][]。 -[Custom Paint]: {{site.so}}/questions/46241071/create-signature-area-for-mobile-app-in-dart-flutter +[Custom Paint]: {{site.so}}questions/46241071/create-signature-area-for-mobile-app-in-dart-flutter @@ -1984,7 +1984,7 @@ see the [`AppLifecycleStatus` documentation][]. 有关这些状态的含义的更多细节,可参考 [`AppLifecycleStatus` 文档][`AppLifecycleStatus` documentation]。 -[`AppLifecycleStatus` documentation]: {{site.api}}/flutter/dart-ui/AppLifecycleState.html +[`AppLifecycleStatus` documentation]: {{site.api}}flutter/dart-ui/AppLifecycleState.html ## Layouts @@ -3424,50 +3424,50 @@ For more information on using the Firebase Cloud Messaging API, see the [Animation & Motion widgets]: /ui/widgets/animation [Animations overview]: /ui/animations [Animations tutorial]: /ui/animations/tutorial -[Apple's iOS design language]: {{site.apple-dev}}/design/resources/ -[arb]: {{site.github}}/google/app-resource-bundle +[Apple's iOS design language]: {{site.apple-dev}}design/resources/ +[arb]: {{site.github}}google/app-resource-bundle [Async UI]: #async-ui -[`cloud_firestore`]: {{site.pub}}/packages/cloud_firestore +[`cloud_firestore`]: {{site.pub-pkg}}cloud_firestore [composing]: /resources/architectural-overview#composition [Cupertino widgets]: /ui/widgets/cupertino -[`devicePixelRatio`]: {{site.api}}/flutter/dart-ui/FlutterView/devicePixelRatio.html +[`devicePixelRatio`]: {{site.api}}flutter/dart-ui/FlutterView/devicePixelRatio.html [developing packages and plugins]: /packages-and-plugins/developing-packages [DevTools]: /tools/devtools/overview -[existing plugin]: {{site.pub}}/flutter -[`google_mobile_ads`]: {{site.pub}}/packages/google_mobile_ads -[`firebase_analytics`]: {{site.pub}}/packages/firebase_analytics -[`firebase_auth`]: {{site.pub}}/packages/firebase_auth -[`firebase_database`]: {{site.pub}}/packages/firebase_database -[`firebase_messaging`]: {{site.pub}}/packages/firebase_messaging -[`firebase_storage`]: {{site.pub}}/packages/firebase_storage -[first party plugins]: {{site.pub}}/flutter/packages?q=firebase +[existing plugin]: {{site.pub}}flutter +[`google_mobile_ads`]: {{site.pub-pkg}}google_mobile_ads +[`firebase_analytics`]: {{site.pub-pkg}}firebase_analytics +[`firebase_auth`]: {{site.pub-pkg}}firebase_auth +[`firebase_database`]: {{site.pub-pkg}}firebase_database +[`firebase_messaging`]: {{site.pub-pkg}}firebase_messaging +[`firebase_storage`]: {{site.pub-pkg}}firebase_storage +[first party plugins]: {{site.pub}}flutter/packages?q=firebase [Flutter cookbook]: /cookbook -[`flutter_facebook_login`]: {{site.pub}}/packages/flutter_facebook_login -[`flutter_firebase_ui`]: {{site.pub}}/packages/flutter_firebase_ui -[`geolocator`]: {{site.pub}}/packages/geolocator -[`camera`]: {{site.pub-pkg}}/camera -[`http` package]: {{site.pub}}/packages/http +[`flutter_facebook_login`]: {{site.pub-pkg}}flutter_facebook_login +[`flutter_firebase_ui`]: {{site.pub-pkg}}flutter_firebase_ui +[`geolocator`]: {{site.pub-pkg}}geolocator +[`camera`]: {{site.pub-pkg}}camera +[`http` package]: {{site.pub-pkg}}http [internationalization guide]: /ui/accessibility-and-internationalization/internationalization -[`intl`]: {{site.pub}}/packages/intl -[`intl_translation`]: {{site.pub}}/packages/intl_translation +[`intl`]: {{site.pub-pkg}}intl +[`intl_translation`]: {{site.pub-pkg}}intl_translation [Introduction to declarative UI]: /get-started/flutter-for/declarative -[`Localizations`]: {{site.api}}/flutter/widgets/Localizations-class.html +[`Localizations`]: {{site.api}}flutter/widgets/Localizations-class.html [Material Components]: /ui/widgets/material -[Material Design]: {{site.material}}/styles -[Material Design guidelines]: {{site.material}}/styles -[`Opacity` widget]: {{site.api}}/flutter/widgets/Opacity-class.html -[optimized for all platforms]: {{site.material2}}/design/platform-guidance/cross-platform-adaptation.html#cross-platform-guidelines +[Material Design]: {{site.material}}styles +[Material Design guidelines]: {{site.material}}styles +[`Opacity` widget]: {{site.api}}flutter/widgets/Opacity-class.html +[optimized for all platforms]: {{site.material2}}design/platform-guidance/cross-platform-adaptation.html#cross-platform-guidelines [platform channels]: /platform-integration/platform-channels [plugins]: /packages-and-plugins/using-packages [pub.dev]: {{site.pub}} [publish it on pub.dev]: /packages-and-plugins/developing-packages#publish [Retrieve the value of a text field]: /cookbook/forms/retrieve-input -[`shared_preferences`]: {{site.pub}}/packages/shared_preferences -[`sqflite`]: {{site.pub}}/packages/sqflite -[`TextEditingController`]: {{site.api}}/flutter/widgets/TextEditingController-class.html -[`url_launcher`]: {{site.pub}}/packages/url_launcher +[`shared_preferences`]: {{site.pub-pkg}}shared_preferences +[`sqflite`]: {{site.pub-pkg}}sqflite +[`TextEditingController`]: {{site.api}}flutter/widgets/TextEditingController-class.html +[`url_launcher`]: {{site.pub-pkg}}url_launcher [widget]: /resources/architectural-overview#widgets [widget catalog]: /ui/widgets/layout -[`Window.locale`]: {{site.api}}/flutter/dart-ui/Window/locale.html -[first_codelab]: {{site.codelabs}}/codelabs/flutter-codelab-first +[`Window.locale`]: {{site.api}}flutter/dart-ui/Window/locale.html +[first_codelab]: {{site.codelabs}}codelabs/flutter-codelab-first [write your own]: /packages-and-plugins/developing-packages diff --git a/src/content/get-started/fwe/fundamentals.md b/src/content/get-started/fwe/fundamentals.md index 0c12cf5b5e..6456c8b359 100644 --- a/src/content/get-started/fwe/fundamentals.md +++ b/src/content/get-started/fwe/fundamentals.md @@ -102,20 +102,20 @@ interesting UIs by creating more complex layouts in Flutter. [Building user interfaces with Flutter]: /ui [Bootstrap into Dart]: /resources/bootstrap-into-dart [Dart]: {{site.dart-site}} -[Flutter widgets 101 episode 1: Stateless widgets]: {{site.youtube-site}}/watch?v=wE7khGHVkYY -[Flutter widgets 101 episode 2: Stateful widgets]: {{site.youtube-site}}/watch?v=AqCMFXEmf3w -[Get started with Dart: Write command-line apps]: {{site.dart-site}}/tutorials/server/cmdline +[Flutter widgets 101 episode 1: Stateless widgets]: {{site.youtube-site}}watch?v=wE7khGHVkYY +[Flutter widgets 101 episode 2: Stateful widgets]: {{site.youtube-site}}watch?v=AqCMFXEmf3w +[Get started with Dart: Write command-line apps]: {{site.dart-site}}tutorials/server/cmdline [Why did Flutter choose to use Dart?]: /resources/faq#why-did-flutter-choose-to-use-dart -[`AppBar`]: {{site.api}}/flutter/material/AppBar-class.html -[`Column`]: {{site.api}}/flutter/widgets/Column-class.html -[`Container`]: {{site.api}}/flutter/widgets/Container-class.html -[`ElevatedButton`]: {{site.api}}/flutter/material/ElevatedButton-class.html -[`Icon`]: {{site.api}}/flutter/widgets/Icon-class.html -[`Image`]: {{site.api}}/flutter/widgets/Image-class.html -[`Row`]: {{site.api}}/flutter/widgets/Row-class.html -[`Scaffold`]: {{site.api}}/flutter/material/Scaffold-class.html -[`Text`]: {{site.api}}/flutter/widgets/Text-class.html +[`AppBar`]: {{site.api}}flutter/material/AppBar-class.html +[`Column`]: {{site.api}}flutter/widgets/Column-class.html +[`Container`]: {{site.api}}flutter/widgets/Container-class.html +[`ElevatedButton`]: {{site.api}}flutter/material/ElevatedButton-class.html +[`Icon`]: {{site.api}}flutter/widgets/Icon-class.html +[`Image`]: {{site.api}}flutter/widgets/Image-class.html +[`Row`]: {{site.api}}flutter/widgets/Row-class.html +[`Scaffold`]: {{site.api}}flutter/material/Scaffold-class.html +[`Text`]: {{site.api}}flutter/widgets/Text-class.html ## Feedback diff --git a/src/content/get-started/fwe/index.md b/src/content/get-started/fwe/index.md index a99d9d026e..f2851d2d31 100644 --- a/src/content/get-started/fwe/index.md +++ b/src/content/get-started/fwe/index.md @@ -35,7 +35,7 @@ in part, thanks to Flutter. [Dart language]: {{site.dart-site}} [dart-lang]: https://twitter.com/MiSvTh/status/1732002450641400276?cxt -[your first Flutter codelab]: {{site.codelabs}}/codelabs/flutter-codelab-first +[your first Flutter codelab]: {{site.codelabs}}codelabs/flutter-codelab-first We suggest that you work through the following subjects in the listed order. diff --git a/src/content/get-started/fwe/layout.md b/src/content/get-started/fwe/layout.md index b124100785..f04684fdde 100644 --- a/src/content/get-started/fwe/layout.md +++ b/src/content/get-started/fwe/layout.md @@ -159,36 +159,36 @@ The following resources explain individual APIs. [Layouts in Flutter]: /ui/layout [Understanding constraints]: /ui/layout/constraints -[Expanded—Flutter Widget of the Week]: {{site.youtube-site}}/watch?v=_rnZaagadyo -[Flexible—Flutter Widget of the Week]: {{site.youtube-site}}/watch?v=CI7x0mAZiY0 -[Intrinsic widgets—Decoding Flutter]: {{site.youtube-site}}/watch?v=Si5XJ_IocEs +[Expanded—Flutter Widget of the Week]: {{site.youtube-site}}watch?v=_rnZaagadyo +[Flexible—Flutter Widget of the Week]: {{site.youtube-site}}watch?v=CI7x0mAZiY0 +[Intrinsic widgets—Decoding Flutter]: {{site.youtube-site}}watch?v=Si5XJ_IocEs [Build a Flutter Layout]: /ui/layout/tutorial [Basic scrolling]: /ui/layout/scrolling#basic-scrolling -[Builder—Flutter Widget of the Week]: {{site.youtube-site}}/watch?v=xXNOkIuSYuA -[ListView—Flutter Widget of the Week]: {{site.youtube-site}}/watch?v=KJpkjHGiI5A +[Builder—Flutter Widget of the Week]: {{site.youtube-site}}watch?v=xXNOkIuSYuA +[ListView—Flutter Widget of the Week]: {{site.youtube-site}}watch?v=KJpkjHGiI5A [Work with long lists]: /cookbook/lists/long-lists [Create a horizontal list]: /cookbook/lists/horizontal-list [Create a grid list]: /cookbook/lists/grid-lists -[PageView—Flutter Widget of the Week]: {{site.youtube-site}}/watch?v=J1gE9xvph-A -[Stack—Flutter Widget of the Week]: {{site.youtube-site}}/watch?v=liEGSeD3Zt8 +[PageView—Flutter Widget of the Week]: {{site.youtube-site}}watch?v=J1gE9xvph-A +[Stack—Flutter Widget of the Week]: {{site.youtube-site}}watch?v=liEGSeD3Zt8 [Stack documentation]: /ui/layout#stack -[OverlayPortal—Flutter Widget of the Week]: {{site.youtube-site}}/watch?v=S0Ylpa44OAQ -[LayoutBuilder—Flutter Widget of the Week]: {{site.youtube-site}}/watch?v=IYDVcriKjsw -[MediaQuery—Flutter Widget of the Week]: {{site.youtube-site}}/watch?v=A3WrA4zAaPw -[Adaptive apps codelab]: {{site.codelabs}}/codelabs/flutter-adaptive-app -[Building platform adaptive apps]: {{site.youtube-site}}/watch?v=RCdeSKVt7LI +[OverlayPortal—Flutter Widget of the Week]: {{site.youtube-site}}watch?v=S0Ylpa44OAQ +[LayoutBuilder—Flutter Widget of the Week]: {{site.youtube-site}}watch?v=IYDVcriKjsw +[MediaQuery—Flutter Widget of the Week]: {{site.youtube-site}}watch?v=A3WrA4zAaPw +[Adaptive apps codelab]: {{site.codelabs}}codelabs/flutter-adaptive-app +[Building platform adaptive apps]: {{site.youtube-site}}watch?v=RCdeSKVt7LI [Use the Flutter inspector]: /tools/devtools/inspector -[Unbounded height and width—Decoding Flutter]: {{site.youtube-site}}/watch?v=jckqXR5CrPI -[2D Scrolling]: {{site.youtube-site}}/watch?v=ppEdTo-VGcg -[`Builder`]: {{site.api}}/flutter/widgets/Builder-class.html -[`Row`]: {{site.api}}/flutter/widgets/Row-class.html -[`Column`]: {{site.api}}/flutter/widgets/Column-class.html -[`Expanded`]: {{site.api}}/flutter/widgets/Expanded-class.html -[`Flexible`]: {{site.api}}/flutter/widgets/Flexible-class.html -[`ListView`]: {{site.api}}/flutter/widgets/ListView-class.html -[`Stack`]: {{site.api}}/flutter/widgets/Stack-class.html -[`Positioned`]: {{site.api}}/flutter/widgets/Positioned-class.html -[`MediaQuery`]: {{site.api}}/flutter/widgets/MediaQuery-class.html +[Unbounded height and width—Decoding Flutter]: {{site.youtube-site}}watch?v=jckqXR5CrPI +[2D Scrolling]: {{site.youtube-site}}watch?v=ppEdTo-VGcg +[`Builder`]: {{site.api}}flutter/widgets/Builder-class.html +[`Row`]: {{site.api}}flutter/widgets/Row-class.html +[`Column`]: {{site.api}}flutter/widgets/Column-class.html +[`Expanded`]: {{site.api}}flutter/widgets/Expanded-class.html +[`Flexible`]: {{site.api}}flutter/widgets/Flexible-class.html +[`ListView`]: {{site.api}}flutter/widgets/ListView-class.html +[`Stack`]: {{site.api}}flutter/widgets/Stack-class.html +[`Positioned`]: {{site.api}}flutter/widgets/Positioned-class.html +[`MediaQuery`]: {{site.api}}flutter/widgets/MediaQuery-class.html ## Feedback diff --git a/src/content/get-started/fwe/local-caching.md b/src/content/get-started/fwe/local-caching.md index 17fc3176aa..c31ceccc8f 100644 --- a/src/content/get-started/fwe/local-caching.md +++ b/src/content/get-started/fwe/local-caching.md @@ -144,7 +144,7 @@ choose from one of the persistent caching strategies found below. [dependency injection]: https://en.wikipedia.org/wiki/Dependency_injection [loose coupling]: https://en.wikipedia.org/wiki/Loose_coupling -[repository Pattern]: https://medium.com/@pererikbergman/repository-design-pattern-e28c0f3e4a30 +[repository Pattern]: {{site.medium}}@pererikbergman/repository-design-pattern-e28c0f3e4a30 [separation of concerns]: https://en.wikipedia.org/wiki/Separation_of_concerns ## Persistent caches @@ -169,8 +169,8 @@ For a complete guide, see our other resources on using key-value stores. * Video: [Package of the Week: `shared_preferences`][] [key-value storage]: https://en.wikipedia.org/wiki/Key%E2%80%93value_database -[Package of the Week: `shared_preferences`]: https://www.youtube.com/watch?v=sa_U0jffQII -[`shared_preferences`]: {{site.pub-pkg}}/shared_preferences +[Package of the Week: `shared_preferences`]: {{site.yt.watch}}?v=sa_U0jffQII +[`shared_preferences`]: {{site.pub-pkg}}shared_preferences [Store key-value data on disk]: /cookbook/persistence/key-value ### Caching data with the file system @@ -201,11 +201,11 @@ For a more thorough guide, see the following resources: * Hive, a non-relational database: [`hive` package][] * Isar, a non-relational database: [`isar` package][] -[`drift` package]: {{site.pub-pkg}}/drift -[`hive` package]: {{site.pub-pkg}}/hive -[`isar` package]: {{site.pub-pkg}}/isar +[`drift` package]: {{site.pub-pkg}}drift +[`hive` package]: {{site.pub-pkg}}hive +[`isar` package]: {{site.pub-pkg}}isar [Persist data with SQLite]: /cookbook/persistence/sqlite -[`sqlite3` package]: {{site.pub-pkg}}/sqlite3 +[`sqlite3` package]: {{site.pub-pkg}}sqlite3 ## Caching images @@ -220,8 +220,8 @@ use the [`cached_network_image` package][]. TODO: My understanding is that we now recommend `Image.network` instead of cache_network_image. {% endcomment %} -[`cached_network_image` package]: {{site.pub-pkg}}/cached_network_image -[Package of the Week: `cached_network_image`]: https://www.youtube.com/watch?v=fnHr_rsQwDA +[`cached_network_image` package]: {{site.pub-pkg}}cached_network_image +[Package of the Week: `cached_network_image`]: {{site.yt.watch}}?v=fnHr_rsQwDA ## State restoration diff --git a/src/content/get-started/fwe/networking.md b/src/content/get-started/fwe/networking.md index a0e8bf2498..e485df84c1 100644 --- a/src/content/get-started/fwe/networking.md +++ b/src/content/get-started/fwe/networking.md @@ -105,18 +105,18 @@ Anna (Domashych) Leushchenko covering advanced networking in Flutter. * Article series: [Basic and advanced networking in Dart and Flutter][] -[Adaptive apps in Flutter]: {{site.codelabs}}/codelabs/flutter-adaptive-app -[Asynchronous programming: futures, async, await]: {{site.dart-site}}/codelabs/async-await -[Basic and advanced networking in Dart and Flutter]: {{site.medium}}/tide-engineering-team/basic-and-advanced-networking-in-dart-and-flutter-the-tide-way-part-0-introduction-33ac040a4a1c +[Adaptive apps in Flutter]: {{site.codelabs}}codelabs/flutter-adaptive-app +[Asynchronous programming: futures, async, await]: {{site.dart-site}}codelabs/async-await +[Basic and advanced networking in Dart and Flutter]: {{site.medium}}tide-engineering-team/basic-and-advanced-networking-in-dart-and-flutter-the-tide-way-part-0-introduction-33ac040a4a1c [Cross-Origin Resource Sharing (CORS) restrictions]: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS -[Dive into Dart's patterns and records]: {{site.codelabs}}/codelabs/dart-patterns-records +[Dive into Dart's patterns and records]: {{site.codelabs}}codelabs/dart-patterns-records [Fetch data from the internet]: /cookbook/networking/fetch-data -[Freezed (Package of the Week)]: {{site.youtube-site}}/watch?v=RaThk0fiphA -[`freezed` package]: {{site.pub-pkg}}/freezed -[FutureBuilder (Widget of the Week)]: {{site.youtube-site}}/watch?v=zEdw_1B7JHY -[`http`]: {{site.pub-pkg}}/http +[Freezed (Package of the Week)]: {{site.youtube-site}}watch?v=RaThk0fiphA +[`freezed` package]: {{site.pub-pkg}}freezed +[FutureBuilder (Widget of the Week)]: {{site.youtube-site}}watch?v=zEdw_1B7JHY +[`http`]: {{site.pub-pkg}}http [HTTP]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview -[Keeping it local: Managing a Flutter app's data]: {{site.youtube-site}}/watch?v=uCbHxLA9t9E +[Keeping it local: Managing a Flutter app's data]: {{site.youtube-site}}watch?v=uCbHxLA9t9E [Make authenticated requests]: /cookbook/networking/authenticated-requests [MDN's article on Authorization for websites]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization [Using the Network View]: /tools/devtools/network diff --git a/src/content/get-started/fwe/state-management.md b/src/content/get-started/fwe/state-management.md index 88ac4dfd21..0762706057 100644 --- a/src/content/get-started/fwe/state-management.md +++ b/src/content/get-started/fwe/state-management.md @@ -547,30 +547,30 @@ If you would like to learn more, check out the following resources: * Article: [List of state management approaches][] * Repository: [Flutter Architecture Samples][] -[A guide to Inherited Widgets]: {{site.youtube-site}}/watch?v=Zbm3hjPjQMk -[build_collection]: {{site.pub-pkg}}/built_collection +[A guide to Inherited Widgets]: {{site.youtube-site}}watch?v=Zbm3hjPjQMk +[build_collection]: {{site.pub-pkg}}built_collection [Flutter Architecture Samples]: https://fluttersamples.com/ -[`InheritedWidget`]: {{site.api}}/flutter/widgets/InheritedWidget-class.html +[`InheritedWidget`]: {{site.api}}flutter/widgets/InheritedWidget-class.html [List of state management approaches]: /data-and-backend/state-mgmt/options -[Pragmatic state management]: {{site.youtube-site}}/watch?v=d_m5csmrf7I -[Provider counter]: https://github.com/flutter/samples/tree/main/provider_counter +[Pragmatic state management]: {{site.youtube-site}}watch?v=d_m5csmrf7I +[Provider counter]: {{site.repo.samples}}tree/main/provider_counter [Provider shopper]: https://flutter.github.io/samples/provider_shopper.html [State management]: /data-and-backend/state-mgmt/intro -[StatefulWidget]: {{site.api}}/flutter/widgets/StatefulWidget-class.html -[`ChangeNotifier`]: {{site.api}}/flutter/foundation/ChangeNotifier-class.html -[`InheritedNotifier`]: {{site.api}}/flutter/widgets/InheritedNotifier-class.html -[`ListenableBuilder`]: {{site.api}}/flutter/widgets/ListenableBuilder-class.html -[`Listenable`]: {{site.api}}/flutter/foundation/Listenable-class.html -[`ValueListenableBuilder`]: {{site.api}}/flutter/widgets/ValueListenableBuilder-class.html -[`ValueListenable`]: {{site.api}}/flutter/foundation/ValueListenable-class.html -[`ValueNotifier`]: {{site.api}}/flutter/foundation/ValueNotifer-class.html +[StatefulWidget]: {{site.api}}flutter/widgets/StatefulWidget-class.html +[`ChangeNotifier`]: {{site.api}}flutter/foundation/ChangeNotifier-class.html +[`InheritedNotifier`]: {{site.api}}flutter/widgets/InheritedNotifier-class.html +[`ListenableBuilder`]: {{site.api}}flutter/widgets/ListenableBuilder-class.html +[`Listenable`]: {{site.api}}flutter/foundation/Listenable-class.html +[`ValueListenableBuilder`]: {{site.api}}flutter/widgets/ValueListenableBuilder-class.html +[`ValueListenable`]: {{site.api}}flutter/foundation/ValueListenable-class.html +[`ValueNotifier`]: {{site.api}}flutter/foundation/ValueNotifer-class.html [architecture-state]: /resources/architectural-overview#state-management [ephemeral-state]: /data-and-backend/state-mgmt/ephemeral-vs-app -[freezed]: {{site.pub-pkg}}/freezed -[inherited-widget-video]: {{site.youtube-site}}/watch?v=og-vJqLzg2c -[managing-state-video]: {{site.youtube-site}}/watch?v=vU9xDLdEZtU -[provider]: {{site.pub-pkg}}/provider -[riverpod]: {{site.pub-pkg}}/riverpod +[freezed]: {{site.pub-pkg}}freezed +[inherited-widget-video]: {{site.youtube-site}}watch?v=og-vJqLzg2c +[managing-state-video]: {{site.youtube-site}}watch?v=vU9xDLdEZtU +[provider]: {{site.pub-pkg}}provider +[riverpod]: {{site.pub-pkg}}riverpod ## Feedback diff --git a/src/content/get-started/fwe/user-input.md b/src/content/get-started/fwe/user-input.md index f897e4eaaa..d6a0a5195e 100644 --- a/src/content/get-started/fwe/user-input.md +++ b/src/content/get-started/fwe/user-input.md @@ -48,7 +48,7 @@ Flutter also supports [Cupertino][] for iOS-styled widgets, or you can build your own widget library. ::: -[Cupertino]: {{site.api}}/flutter/cupertino/cupertino-library.html +[Cupertino]: {{site.api}}flutter/cupertino/cupertino-library.html ## Get user input @@ -91,13 +91,13 @@ but are styled differently: * Video: [FloatingActionButton (Widget of the Week)][] -[`ElevatedButton`]: {{site.api}}/flutter/material/ElevatedButton-class.html -[`FilledButton`]: {{site.api}}/flutter/material/FilledButton-class.html -[`FloatingActionButton`]: {{site.api}}/flutter/material/FloatingActionButton-class.html +[`ElevatedButton`]: {{site.api}}flutter/material/ElevatedButton-class.html +[`FilledButton`]: {{site.api}}flutter/material/FilledButton-class.html +[`FloatingActionButton`]: {{site.api}}flutter/material/FloatingActionButton-class.html [FloatingActionButton (Widget of the Week)]: https://youtu.be/2uaoEDOgk_I?si=MQZcSp24oRaS_kiY -[`IconButton`]: {{site.api}}/flutter/material/IconButton-class.html -[`OutlinedButton`]: {{site.api}}/flutter/material/OutlinedButton-class.html -[`TextButton`]: {{site.api}}/flutter/material/TextButton-class.html +[`IconButton`]: {{site.api}}flutter/material/IconButton-class.html +[`OutlinedButton`]: {{site.api}}flutter/material/OutlinedButton-class.html +[`TextButton`]: {{site.api}}flutter/material/TextButton-class.html ### Text @@ -139,18 +139,18 @@ retrieve its value, and handle state changes: [Build a form with validation]: /cookbook/forms/validation [Create and style a text field]: /cookbook/forms/text-input [Focus and text fields]: /cookbook/forms/focus -[`Form`]: {{site.api}}/flutter/widgets/Form-class.html +[`Form`]: {{site.api}}flutter/widgets/Form-class.html [Form app]: https://flutter.github.io/samples/web/form_app/ -[Form app code]: https://github.com/flutter/samples/tree/main/form_app +[Form app code]: {{site.repo.samples}}tree/main/form_app [Handle changes to a text field]: /cookbook/forms/text-field-changes [Retrieve the value of a text field]: /cookbook/forms/retrieve-input -[`RichText`]: {{site.api}}/flutter/widgets/RichText-class.html -[Rich Text (Widget of the Week)]: https://www.youtube.com/watch?v=rykDVh-QFfw +[`RichText`]: {{site.api}}flutter/widgets/RichText-class.html +[Rich Text (Widget of the Week)]: {{site.yt.watch}}?v=rykDVh-QFfw [Rich Text Editor]: https://flutter.github.io/samples/rich_text_editor.html -[Rich Text Editor code]: https://github.com/flutter/samples/tree/main/simplistic_editor -[`SelectableText`]: {{site.api}}/flutter/material/SelectableText-class.html -[SelectableText (Widget of the Week)]: https://www.youtube.com/watch?v=ZSU3ZXOs6hc -[`TextField`]: {{site.api}}/flutter/material/TextField-class.html +[Rich Text Editor code]: {{site.repo.samples}}tree/main/simplistic_editor +[`SelectableText`]: {{site.api}}flutter/material/SelectableText-class.html +[SelectableText (Widget of the Week)]: {{site.yt.watch}}?v=ZSU3ZXOs6hc +[`TextField`]: {{site.api}}flutter/material/TextField-class.html ### Select a value from a group of options @@ -168,11 +168,11 @@ retrieve its value, and handle state changes: * Video: [Slider, RangeSlider, CupertinoSlider (Widget of the Week)][] -[`DropdownMenu`]: {{site.api}}/flutter/material/DropdownMenu-class.html +[`DropdownMenu`]: {{site.api}}flutter/material/DropdownMenu-class.html [DropdownMenu (Widget of the Week)]: https://youtu.be/giV9AbM2gd8?si=E23hjg72cjMTe_mz -[`SegmentedButton`]: {{site.api}}/flutter/material/SegmentedButton-class.html -[`Slider`]: {{site.api}}/flutter/material/Slider-class.html -[Slider, RangeSlider, CupertinoSlider (Widget of the Week)]: https://www.youtube.com/watch?v=ufb4gIPDmEss +[`SegmentedButton`]: {{site.api}}flutter/material/SegmentedButton-class.html +[`Slider`]: {{site.api}}flutter/material/Slider-class.html +[Slider, RangeSlider, CupertinoSlider (Widget of the Week)]: {{site.yt.watch}}?v=ufb4gIPDmEss ### Toggle values @@ -262,8 +262,8 @@ ensure that everything works as expected! * Article: [Tap, drag, and enter text][] * Article: [Handle scrolling][] -[GestureArena (Decoding Flutter)]: https://www.youtube.com/watch?v=Q85LBtBdi0U -[GestureDetector (Widget of the Week)]: https://www.youtube.com/watch?v=WhVXkCFPmK4 +[GestureArena (Decoding Flutter)]: {{site.yt.watch}}?v=Q85LBtBdi0U +[GestureDetector (Widget of the Week)]: {{site.yt.watch}}?v=WhVXkCFPmK4 [Handle taps]: /cookbook/gestures/handling-taps [Semantics (Flutter Widget of the Week)]: https://youtu.be/NvtMt_DtFrQ?si=o79BqAg9NAl8EE8_ [Tap, drag, and enter text]: /cookbook/testing/widget/tap-drag @@ -287,25 +287,25 @@ and other networking features. -[`Checkbox`]: {{site.api}}/flutter/material/Checkbox-class.html -[`CheckboxListTile`]: {{site.api}}/flutter/material/CheckboxListTile-class.html -[CheckboxListTile (Widget of the Week)]: https://www.youtube.com/watch?v=RkSqPAn9szs -[`Switch`]: {{site.api}}/flutter/material/Switch-class.html -[`SwitchListTile`]: {{site.api}}/flutter/material/SwitchListTile-class.html -[SwitchListTile (Widget of the Week)]: https://www.youtube.com/watch?v=0igIjvtEWNU -[`Radio`]: {{site.api}}/flutter/material/Radio-class.html -[`Chip`]: {{site.api}}/flutter/material/Chip-class.html +[`Checkbox`]: {{site.api}}flutter/material/Checkbox-class.html +[`CheckboxListTile`]: {{site.api}}flutter/material/CheckboxListTile-class.html +[CheckboxListTile (Widget of the Week)]: {{site.yt.watch}}?v=RkSqPAn9szs +[`Switch`]: {{site.api}}flutter/material/Switch-class.html +[`SwitchListTile`]: {{site.api}}flutter/material/SwitchListTile-class.html +[SwitchListTile (Widget of the Week)]: {{site.yt.watch}}?v=0igIjvtEWNU +[`Radio`]: {{site.api}}flutter/material/Radio-class.html +[`Chip`]: {{site.api}}flutter/material/Chip-class.html [Material Design date picker]: https://m3.material.io/components/date-pickers/overview [Material Design time picker]: https://m3.material.io/components/time-pickers/overview -[`showDatePicker`]: {{site.api}}/flutter/material/showDatePicker.html -[`showTimePicker`]: {{site.api}}/flutter/material/showTimePicker.html +[`showDatePicker`]: {{site.api}}flutter/material/showDatePicker.html +[`showTimePicker`]: {{site.api}}flutter/material/showTimePicker.html -[`Dismissible`]: {{site.api}}/flutter/widgets/Dismissible-class.html +[`Dismissible`]: {{site.api}}flutter/widgets/Dismissible-class.html [Dismissible (Widget of the Week)]: https://youtu.be/iEMgjrfuc58?si=f0S7IdaA9PIWIYvl [Implement swipe to dismiss]: /cookbook/gestures/dismissible [pkg:`flutter_slidable`]: https://pub.dev/packages/flutter_slidable -[flutter_slidable (Package of the Week)]: https://www.youtube.com/watch?v=QFcFEpFmNJ8 +[flutter_slidable (Package of the Week)]: {{site.yt.watch}}?v=QFcFEpFmNJ8 [Handle scrolling]: /cookbook/testing/widget/scrolling diff --git a/src/content/get-started/install/help.md b/src/content/get-started/install/help.md index 368754dddc..30226ede8c 100644 --- a/src/content/get-started/install/help.md +++ b/src/content/get-started/install/help.md @@ -189,13 +189,13 @@ To be respectful of everyone's time, search the archive for a similar issue before posting a new one. [StackOverflow]: {{site.so}} -[#dart]: {{site.so}}/questions/tagged/dart -[#flutter]: {{site.so}}/questions/tagged/flutter +[#dart]: {{site.so}}questions/tagged/dart +[#flutter]: {{site.so}}questions/tagged/flutter [Android Java Gradle migration guide]: /release/breaking-changes/android-java-gradle-migration-guide [community support channels]: #community-support -[java binary path]: {{site.repo.flutter}}/issues/106416#issuecomment-1522198064 -[so java version]: {{site.so}}/questions/75328050/ +[java binary path]: {{site.repo.flutter}}issues/106416#issuecomment-1522198064 +[so java version]: {{site.so}}questions/75328050/ [set up VS Code]: /get-started/editor [config path]: https://dartcode.org/docs/configuring-path-and-environment-variables/ -[sdkmanager]: {{site.android-dev}}/studio/command-line/sdkmanager +[sdkmanager]: {{site.android-dev}}studio/command-line/sdkmanager [windows path]: https://www.wikihow.com/Change-the-PATH-Environment-Variable-on-Windows diff --git a/src/content/packages-and-plugins/background-processes.md b/src/content/packages-and-plugins/background-processes.md index 9fcc470d47..01a9bdea27 100644 --- a/src/content/packages-and-plugins/background-processes.md +++ b/src/content/packages-and-plugins/background-processes.md @@ -47,5 +47,5 @@ iOS, and Android. 在这篇文章的最后,你可以找到示例代码的链接, 以及相关的 Dart、iOS 和 Android 文档。 -[background-processes]: {{site.flutter-medium}}/executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124 -[WorkManager]: {{site.pub-pkg}}/workmanager +[background-processes]: {{site.flutter-medium}}executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124 +[WorkManager]: {{site.pub-pkg}}workmanager diff --git a/src/content/packages-and-plugins/developing-packages.md b/src/content/packages-and-plugins/developing-packages.md index 8181ade59e..fac390845e 100644 --- a/src/content/packages-and-plugins/developing-packages.md +++ b/src/content/packages-and-plugins/developing-packages.md @@ -1628,32 +1628,32 @@ PENDING {% endcomment %} [CocoaPods Documentation]: https://guides.cocoapods.org/syntax/podspec.html -[Dart library package]: {{site.dart-site}}/guides/libraries/create-library-packages -[`device_info`]: {{site.pub-api}}/device_info/latest -[Effective Dart Documentation]: {{site.dart-site}}/guides/language/effective-dart/documentation +[Dart library package]: {{site.dart-site}}guides/libraries/create-library-packages +[`device_info`]: {{site.pub-api}}device_info/latest +[Effective Dart Documentation]: {{site.dart-site}}guides/language/effective-dart/documentation [federated plugins]: #federated-plugins -[ffigen docs]: {{site.pub-pkg}}/ffigen/install +[ffigen docs]: {{site.pub-pkg}}ffigen/install [Android]: /platform-integration/android/c-interop [iOS]: /platform-integration/ios/c-interop [macOS]: /platform-integration/macos/c-interop -[`fluro`]: {{site.pub}}/packages/fluro +[`fluro`]: {{site.pub-pkg}}fluro [Flutter editor]: /get-started/editor -[Flutter Favorites]: {{site.pub}}/flutter/favorites +[Flutter Favorites]: {{site.pub}}flutter/favorites [Flutter Favorites program]: /packages-and-plugins/favorites [Gradle Documentation]: https://docs.gradle.org/current/userguide/tutorial_using_tasks.html -[helper isolate]: {{site.dart-site}}/guides/language/concurrency#background-workers -[How to Write a Flutter Web Plugin, Part 1]: {{site.flutter-medium}}/how-to-write-a-flutter-web-plugin-5e26c689ea1 -[How To Write a Flutter Web Plugin, Part 2]: {{site.flutter-medium}}/how-to-write-a-flutter-web-plugin-part-2-afdddb69ece6 -[issue #33302]: {{site.repo.flutter}}/issues/33302 +[helper isolate]: {{site.dart-site}}guides/language/concurrency#background-workers +[How to Write a Flutter Web Plugin, Part 1]: {{site.flutter-medium}}how-to-write-a-flutter-web-plugin-5e26c689ea1 +[How To Write a Flutter Web Plugin, Part 2]: {{site.flutter-medium}}how-to-write-a-flutter-web-plugin-part-2-afdddb69ece6 +[issue #33302]: {{site.repo.flutter}}issues/33302 [`LICENSE`]: #adding-licenses-to-the-license-file -[`path`]: {{site.pub}}/packages/path -[`package:ffigen`]: {{site.pub}}/packages/ffigen +[`path`]: {{site.pub-pkg}}path +[`package:ffigen`]: {{site.pub-pkg}}ffigen [platform channel]: /platform-integration/platform-channels [pub.dev]: {{site.pub}} -[publishing docs]: {{site.dart-site}}/tools/pub/publishing -[publishing is forever]: {{site.dart-site}}/tools/pub/publishing#publishing-is-forever +[publishing docs]: {{site.dart-site}}tools/pub/publishing +[publishing is forever]: {{site.dart-site}}tools/pub/publishing#publishing-is-forever [supported-platforms]: #plugin-platforms [test your plugin]: #testing-your-plugin [unit tests]: /testing/overview#unit-tests -[`url_launcher`]: {{site.pub}}/packages/url_launcher -[Writing a good plugin]: {{site.flutter-medium}}/writing-a-good-flutter-plugin-1a561b986c9c +[`url_launcher`]: {{site.pub-pkg}}url_launcher +[Writing a good plugin]: {{site.flutter-medium}}writing-a-good-flutter-plugin-1a561b986c9c diff --git a/src/content/packages-and-plugins/favorites.md b/src/content/packages-and-plugins/favorites.md index 7d45d0ca88..3faad8530c 100644 --- a/src/content/packages-and-plugins/favorites.md +++ b/src/content/packages-and-plugins/favorites.md @@ -233,7 +233,7 @@ You can see the complete list of [send the committee]: mailto:flutter-committee@googlegroups.com -[Flutter Favorite packages]: {{site.pub}}/flutter/favorites -[Overall package score]: {{site.pub}}/help +[Flutter Favorite packages]: {{site.pub}}flutter/favorites +[Overall package score]: {{site.pub}}help [pubspec.yaml format]: /packages-and-plugins/developing-packages#plugin-platforms -[Verified publisher]: {{site.dart-site}}/tools/pub/verified-publishers +[Verified publisher]: {{site.dart-site}}tools/pub/verified-publishers diff --git a/src/content/packages-and-plugins/using-packages.md b/src/content/packages-and-plugins/using-packages.md index 5dee94ed51..e108fda20f 100644 --- a/src/content/packages-and-plugins/using-packages.md +++ b/src/content/packages-and-plugins/using-packages.md @@ -87,14 +87,14 @@ see [Adding assets and images][]. 请参阅 [添加资源和图片][Adding assets and images] 这篇文档。 [Adding assets and images]: /ui/assets/assets-and-images -[`battery_plus`]: {{site.pub-pkg}}/battery_plus +[`battery_plus`]: {{site.pub-pkg}}battery_plus [developing packages]: /packages-and-plugins/developing-packages -[FlutterFire]: {{site.github}}/firebase/flutterfire +[FlutterFire]: {{site.github}}firebase/flutterfire -[`go_router`]: {{site.pub-pkg}}/go_router +[`go_router`]: {{site.pub-pkg}}go_router [`http`]: /cookbook/networking/fetch-data [pub.dev]: {{site.pub}} -[`url_launcher`]: {{site.pub-pkg}}/url_launcher +[`url_launcher`]: {{site.pub-pkg}}url_launcher ## Using packages @@ -144,9 +144,9 @@ or any combination thereof. 你也可以通过复选框,过滤出组合结果(适配一个或者多个平台)。 [Android]: {{site.pub-pkg}}?q=sdk%3Aflutter+platform%3Aandroid -[Flutter Favorites]: {{site.pub}}/flutter/favorites +[Flutter Favorites]: {{site.pub}}flutter/favorites [Flutter Favorites program]: /packages-and-plugins/favorites -[Flutter landing page]: {{site.pub}}/flutter +[Flutter landing page]: {{site.pub}}flutter [Linux]: {{site.pub-pkgs}}?q=sdk%3Aflutter+platform%3Alinux [iOS]: {{site.pub-pkg}}?q=sdk%3Aflutter+platform%3Aios [macOS]: {{site.pub-pkg}}?q=sdk%3Aflutter+platform%3Amacos @@ -285,7 +285,7 @@ see the [css_colors example][] below. [css_colors 示例][css_colors example]。 [css_colors example]: #css-example -[Installing tab]: {{site.pub-pkg}}/css_colors/install +[Installing tab]: {{site.pub-pkg}}css_colors/install ### Conflict resolution @@ -381,7 +381,7 @@ CocoaPods 目前尚不提供依赖项覆盖功能。 [CocoaPods]: https://guides.cocoapods.org/syntax/podspec.html#dependency [Gradle modules]: https://docs.gradle.org/current/userguide/declaring_dependencies.html -[version ranges]: {{site.dart-site}}/tools/pub/dependencies#version-constraints +[version ranges]: {{site.dart-site}}tools/pub/dependencies#version-constraints ## Developing new packages @@ -455,9 +455,9 @@ To learn more, check out the [package versioning guide][]. 了解更详细的信息,参阅 [Pub 版本管理指南][package versioning guide]。 -[caret syntax]: {{site.dart-site}}/tools/pub/dependencies#caret-syntax -[package versioning guide]: {{site.dart-site}}/tools/pub/versioning -[`url_launcher` versions]: {{site.pub-pkg}}/url_launcher/versions +[caret syntax]: {{site.dart-site}}tools/pub/dependencies#caret-syntax +[package versioning guide]: {{site.dart-site}}tools/pub/versioning +[`url_launcher` versions]: {{site.pub-pkg}}url_launcher/versions ### Updating package dependencies @@ -490,7 +490,7 @@ which both update Flutter itself. 请注意,`flutter upgrade` 与 `flutter update-packages` 是两个 不同的命令,但它们都会更新 Flutter。 -[lockfile]: {{site.dart-site}}/tools/pub/glossary#lockfile +[lockfile]: {{site.dart-site}}tools/pub/glossary#lockfile ### Dependencies on unpublished packages @@ -579,7 +579,7 @@ additional dependency options are available: 最后,你可以使用 `ref` 参数将依赖固定到 git 特定的 commit、branch 或者 tag。 更多详细信息,请参阅 [Package dependencies][]。 -[Package dependencies]: {{site.dart-site}}/tools/pub/dependencies +[Package dependencies]: {{site.dart-site}}tools/pub/dependencies ## Examples @@ -669,7 +669,7 @@ To use this package: } ``` -[`css_colors`]: {{site.pub-pkg}}/css_colors +[`css_colors`]: {{site.pub-pkg}}css_colors 1. Run the app. The app's background should now be orange. diff --git a/src/content/perf/app-size.md b/src/content/perf/app-size.md index 417366ca8b..2e04a95563 100644 --- a/src/content/perf/app-size.md +++ b/src/content/perf/app-size.md @@ -329,7 +329,7 @@ Some other things you can do to make your app smaller are: [FAQ]: /resources/faq [How big is the Flutter engine?]: /resources/faq#how-big-is-the-flutter-engine [instructions]: /deployment/ios -[Xcode App Size Report]: {{site.apple-dev}}/documentation/xcode/reducing_your_app_s_size#3458589 +[Xcode App Size Report]: {{site.apple-dev}}documentation/xcode/reducing_your_app_s_size#3458589 [iOS create build archive instructions]: /deployment/ios#update-the-apps-build-and-version-numbers [Model ID / Hardware number]: https://en.wikipedia.org/wiki/List_of_iOS_devices#Models [Obfuscating Dart code]: /deployment/obfuscate diff --git a/src/content/perf/best-practices.md b/src/content/perf/best-practices.md index 1a88099ce0..c9d1346362 100644 --- a/src/content/perf/best-practices.md +++ b/src/content/perf/best-practices.md @@ -51,9 +51,9 @@ performant on the web: ::: [Flutter Gallery]: {{site.gallery-archive}} -[web-perf-1]: {{site.flutter-medium}}/optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading-535fbe3cd674 -[web-perf-2]: {{site.flutter-medium}}/improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation-6b3601087a2b -[web-perf-3]: {{site.flutter-medium}}/building-performant-flutter-widgets-3b2558aa08fa +[web-perf-1]: {{site.flutter-medium}}optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading-535fbe3cd674 +[web-perf-2]: {{site.flutter-medium}}improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation-6b3601087a2b +[web-perf-3]: {{site.flutter-medium}}building-performant-flutter-widgets-3b2558aa08fa How do you design a Flutter app to most efficiently render your scenes? In particular, how do you ensure @@ -177,13 +177,13 @@ For more information, check out: Flutter 关于为什么使用 widget 是更好的做法的解析视频。 (特别是使用 `const` 构造的 widget) -[`flutter_lints`]: {{site.pub-pkg}}/flutter_lints +[`flutter_lints`]: {{site.pub-pkg}}flutter_lints [`flutter_lints` migration guide]: /release/breaking-changes/flutter-lints-package#migration-guide -[Performance considerations]: {{site.api}}/flutter/widgets/StatefulWidget-class.html#performance-considerations -[source code for `SlideTransition`]: {{site.repo.flutter}}/blob/master/packages/flutter/lib/src/widgets/transitions.dart#L168 -[`StatefulWidget`]: {{site.api}}/flutter/widgets/StatefulWidget-class.html -[`StatelessWidget`]: {{site.api}}/flutter/widgets/StatelessWidget-class.html -[`TransitionBuilder`]: {{site.api}}/flutter/widgets/TransitionBuilder.html +[Performance considerations]: {{site.api}}flutter/widgets/StatefulWidget-class.html#performance-considerations +[source code for `SlideTransition`]: {{site.repo.flutter}}blob/master/packages/flutter/lib/src/widgets/transitions.dart#L168 +[`StatefulWidget`]: {{site.api}}flutter/widgets/StatefulWidget-class.html +[`StatelessWidget`]: {{site.api}}flutter/widgets/StatelessWidget-class.html +[`TransitionBuilder`]: {{site.api}}flutter/widgets/TransitionBuilder.html [Widgets vs helper methods]: {{site.yt.watch}}?v=IOyq-eTRhvo --- @@ -340,13 +340,13 @@ and are potentially costly: [`Text`][]— 当有 `overflowShader` 时,会调用`saveLayer()` -[`Chip`]: {{site.api}}/flutter/material/Chip-class.html -[`ColorFilter`]: {{site.api}}/flutter/dart-ui/ColorFilter-class.html -[`FadeInImage`]: {{site.api}}/flutter/widgets/FadeInImage-class.html -[`Opacity`]: {{site.api}}/flutter/widgets/Opacity-class.html -[`ShaderMask`]: {{site.api}}/flutter/widgets/ShaderMask-class.html -[`Text`]: {{site.api}}/flutter/widgets/Text-class.html -[Transparent image]: {{site.api}}/flutter/widgets/Opacity-class.html#transparent-image +[`Chip`]: {{site.api}}flutter/material/Chip-class.html +[`ColorFilter`]: {{site.api}}flutter/dart-ui/ColorFilter-class.html +[`FadeInImage`]: {{site.api}}flutter/widgets/FadeInImage-class.html +[`Opacity`]: {{site.api}}flutter/widgets/Opacity-class.html +[`ShaderMask`]: {{site.api}}flutter/widgets/ShaderMask-class.html +[`Text`]: {{site.api}}flutter/widgets/Text-class.html +[Transparent image]: {{site.api}}flutter/widgets/Opacity-class.html#transparent-image --- @@ -456,8 +456,8 @@ For more information and examples, check out: * [`Listview.builder`][] API [Cookbook]: /cookbook -[Creating a `ListView` that loads one page at a time]: {{site.medium}}/saugo360/flutter-creating-a-listview-that-loads-one-page-at-a-time-c5c91b6fabd3 -[`Listview.builder`]: {{site.api}}/flutter/widgets/ListView/ListView.builder.html +[Creating a `ListView` that loads one page at a time]: {{site.medium}}saugo360/flutter-creating-a-listview-that-loads-one-page-at-a-time-c5c91b6fabd3 +[`Listview.builder`]: {{site.api}}flutter/widgets/ListView/ListView.builder.html [Working with long lists]: /cookbook/lists/long-lists #### Avoid intrinsics @@ -778,10 +778,10 @@ For more performance info, check out the following resources: `StatefulWidget` 的 [Performance considerations][] API 文档。 -[Child elements' lifecycle]: {{site.api}}/flutter/widgets/ListView-class.html#child-elements-lifecycle -[`CustomPainter`]: {{site.api}}/flutter/rendering/CustomPainter-class.html +[Child elements' lifecycle]: {{site.api}}flutter/widgets/ListView-class.html#child-elements-lifecycle +[`CustomPainter`]: {{site.api}}flutter/rendering/CustomPainter-class.html [DevTools Performance view]: /tools/devtools/performance -[Performance optimizations]: {{site.api}}/flutter/widgets/AnimatedBuilder-class.html#performance-optimizations -[Performance considerations for opacity animation]: {{site.api}}/flutter/widgets/Opacity-class.html#performance-considerations-for-opacity-animation -[`RenderObject`]: {{site.api}}/flutter/rendering/RenderObject-class.html -[best-practices-medium]: https://medium.com/flutter/best-practices-for-optimizing-flutter-web-loading-speed-7cc0df14ce5c +[Performance optimizations]: {{site.api}}flutter/widgets/AnimatedBuilder-class.html#performance-optimizations +[Performance considerations for opacity animation]: {{site.api}}flutter/widgets/Opacity-class.html#performance-considerations-for-opacity-animation +[`RenderObject`]: {{site.api}}flutter/rendering/RenderObject-class.html +[best-practices-medium]: {{site.flutter-medium}}best-practices-for-optimizing-flutter-web-loading-speed-7cc0df14ce5c diff --git a/src/content/perf/deferred-components.md b/src/content/perf/deferred-components.md index 03bb6a576f..fffd205294 100644 --- a/src/content/perf/deferred-components.md +++ b/src/content/perf/deferred-components.md @@ -897,17 +897,17 @@ Play store's delivery feature. 调用 `loadLibrary()` 时,Flutter 引擎将会使用从商店下载的包含 Dart AOT 库和资源的 Android 模块。 [3.1]: #step-3.1 -[Android docs]: {{site.android-dev}}/guide/playcore/feature-delivery#declare_splitcompatapplication_in_the_manifest -[`bundletool`]: {{site.android-dev}}/studio/command-line/bundletool -[Deferred Components]: {{site.repo.flutter}}/wiki/Deferred-Components -[`DeferredComponent`]: {{site.api}}/flutter/services/DeferredComponent-class.html -[dynamic feature modules]: {{site.android-dev}}/guide/playcore/feature-delivery -[Flutter Gallery's `lib/deferred_widget.dart`]: {{site.repo.gallery-archive}}/blob/main/lib/deferred_widget.dart -[Flutter wiki]: {{site.repo.flutter}}/wiki -[github.com/google/bundletool/releases]: {{site.github}}/google/bundletool/releases -[lazily loading a library]: {{site.dart-site}}/language/libraries#lazily-loading-a-library +[Android docs]: {{site.android-dev}}guide/playcore/feature-delivery#declare_splitcompatapplication_in_the_manifest +[`bundletool`]: {{site.android-dev}}studio/command-line/bundletool +[Deferred Components]: {{site.repo.flutter}}wiki/Deferred-Components +[`DeferredComponent`]: {{site.api}}flutter/services/DeferredComponent-class.html +[dynamic feature modules]: {{site.android-dev}}guide/playcore/feature-delivery +[Flutter Gallery's `lib/deferred_widget.dart`]: {{site.repo.gallery-archive}}blob/main/lib/deferred_widget.dart +[Flutter wiki]: {{site.repo.flutter}}wiki +[github.com/google/bundletool/releases]: {{site.github}}google/bundletool/releases +[lazily loading a library]: {{site.dart-site}}language/libraries#lazily-loading-a-library [release or profile mode]: /testing/build-modes [step 3.3]: #step-3.3 -[android-app-bundle]: {{site.android-dev}}/guide/app-bundle +[android-app-bundle]: {{site.android-dev}}guide/app-bundle [dart-def-import]: https://dart.dev/language/libraries#lazily-loading-a-library diff --git a/src/content/perf/faq.md b/src/content/perf/faq.md index 6e22514417..ec95a4d7e2 100644 --- a/src/content/perf/faq.md +++ b/src/content/perf/faq.md @@ -42,8 +42,8 @@ about evaluating and debugging Flutter's performance. [如何编写 Flutter 的内存测试][memory-test] -[memory-test]: {{site.repo.flutter}}/wiki/How-to-write-a-memory-test-for-Flutter -[speed-test]: {{site.repo.flutter}}/wiki/How-to-write-a-render-speed-test-for-Flutter +[memory-test]: {{site.repo.flutter}}wiki/How-to-write-a-memory-test-for-Flutter +[speed-test]: {{site.repo.flutter}}wiki/How-to-write-a-render-speed-test-for-Flutter * What are some tools for capturing and analyzing performance metrics? @@ -63,7 +63,7 @@ about evaluating and debugging Flutter's performance. * [Perfetto](https://ui.perfetto.dev/) * [speedscope](https://www.speedscope.app/) -[systrace]: {{site.android-dev}}/studio/profile/systrace +[systrace]: {{site.android-dev}}studio/profile/systrace [tracing]: https://www.chromium.org/developers/how-tos/trace-event-profiling-tool [traceutil]: https://fuchsia.dev/fuchsia-src/development/tracing/usage-guide @@ -94,11 +94,11 @@ about evaluating and debugging Flutter's performance. 查阅 [性能优化最佳实践][Performance best practices] -[`Clip.antiAliasWithSaveLayer`]: {{site.api}}/flutter/dart-ui/Clip.html#antiAliasWithSaveLayer -[`ImageFilter`]: {{site.api}}/flutter/dart-ui/ImageFilter-class.html -[`Opacity`]: {{site.api}}/flutter/widgets/Opacity-class.html +[`Clip.antiAliasWithSaveLayer`]: {{site.api}}flutter/dart-ui/Clip.html#antiAliasWithSaveLayer +[`ImageFilter`]: {{site.api}}flutter/dart-ui/ImageFilter-class.html +[`Opacity`]: {{site.api}}flutter/widgets/Opacity-class.html [Performance best practices]: /perf/best-practices -[`savelayer`]: {{site.api}}/flutter/dart-ui/Canvas/saveLayer.html +[`savelayer`]: {{site.api}}flutter/dart-ui/Canvas/saveLayer.html * How do I tell which widgets in my Flutter app are rebuilt in each frame? @@ -129,9 +129,9 @@ about evaluating and debugging Flutter's performance. 勾选 **Track widget rebuilds**, 你就能在 IDE 中直观地看见哪些 widget 进行了重建。 -[`debugProfileBuildsEnabled`]: {{site.api}}/flutter/widgets/debugProfileBuildsEnabled.html -[debug.dart]: {{site.repo.flutter}}/blob/master/packages/flutter/lib/src/widgets/debug.dart -[framework.dart]: {{site.repo.flutter}}/blob/master/packages/flutter/lib/src/widgets/framework.dart +[`debugProfileBuildsEnabled`]: {{site.api}}flutter/widgets/debugProfileBuildsEnabled.html +[debug.dart]: {{site.repo.flutter}}blob/master/packages/flutter/lib/src/widgets/debug.dart +[framework.dart]: {{site.repo.flutter}}blob/master/packages/flutter/lib/src/widgets/framework.dart * How do I query the target frames per second (of the display)? @@ -141,7 +141,7 @@ about evaluating and debugging Flutter's performance. [获取显示器刷新率][Get the display refresh rate] -[Get the display refresh rate]: {{site.repo.flutter}}/wiki/Engine-specific-Service-Protocol-extensions#get-the-display-refresh-rate-_fluttergetdisplayrefreshrate +[Get the display refresh rate]: {{site.repo.flutter}}wiki/Engine-specific-Service-Protocol-extensions#get-the-display-refresh-rate-_fluttergetdisplayrefreshrate * How to solve my app's poor animations caused by an expensive Dart async function call that is blocking the UI thread? @@ -155,7 +155,7 @@ about evaluating and debugging Flutter's performance. 使用 [`compute()`][] 方法生成另一个 isolate, 例如 [在后台处理 JSON 数据解析][Parse JSON in the background] 实用教程 (Cookbook) 中所演示的。 -[`compute()`]: {{site.api}}/flutter/foundation/compute-constant.html +[`compute()`]: {{site.api}}flutter/foundation/compute-constant.html [Parse JSON in the background]: /cookbook/networking/background-parsing * How do I determine my Flutter app's package size that a @@ -181,7 +181,7 @@ about evaluating and debugging Flutter's performance. 用 [GitHub 上 engine 仓库][GitHub engine repository commits] 最近提交的 hash 值替换 URL 中的 hash 值。 [binary size dashboard]: https://storage.flutter-io.cn/flutter_infra_release/flutter/241c87ad800beeab545ab867354d4683d5bfb6ce/android-arm-release/sizes/index.html -[GitHub engine repository commits]: {{site.repo.engine}}/commits +[GitHub engine repository commits]: {{site.repo.engine}}commits * How can I take a screenshot of an app that is running and export it as a SKP file? @@ -206,7 +206,7 @@ about evaluating and debugging Flutter's performance. 分析和可视化 SKP 文件,请使用 [Skia WASM debugger][]。 -[Issue 21237]: {{site.repo.flutter}}/issues/21237 +[Issue 21237]: {{site.repo.flutter}}issues/21237 [Skia WASM debugger]: https://debugger.skia.org/ * How do I retrieve the shader persistent cache from a device? diff --git a/src/content/perf/impeller.md b/src/content/perf/impeller.md index 36056d37fa..65da7626f6 100644 --- a/src/content/perf/impeller.md +++ b/src/content/perf/impeller.md @@ -11,8 +11,8 @@ The Flutter team's believes this solves Flutter's Impeller precompiles a [smaller, simpler set of shaders][] at Engine-build time so they don't compile at runtime. -[early-onset jank]: {{site.repo.flutter}}/projects/188 -[smaller, simpler set of shaders]: {{site.repo.flutter}}/issues/77412 +[early-onset jank]: {{site.repo.flutter}}projects/188 +[smaller, simpler set of shaders]: {{site.repo.flutter}}issues/77412 For a video introduction to Impeller, check out the following talk from Google I/O 2023. @@ -74,7 +74,7 @@ file an issue in the [GitHub tracker][file-issue]. Prefix the issue title with `[Impeller]` and include a small reproducible test case. -[file-issue]: {{site.repo.flutter}}/issues/new/choose +[file-issue]: {{site.repo.flutter}}issues/new/choose ### macOS @@ -155,22 +155,22 @@ submitting an issue for Impeller: Zip the file and attach it to the GitHub issue. [export of the performance trace]:/tools/devtools/performance#import-and-export -[Impeller project board]: {{site.github}}/orgs/flutter/projects/21 +[Impeller project board]: {{site.github}}orgs/flutter/projects/21 ## Architecture To learn more details about Impeller's design and architecture, check out the [README.md][] file in the source tree. -[README.md]: {{site.repo.engine}}/blob/main/impeller/README.md +[README.md]: {{site.repo.engine}}blob/main/impeller/README.md ## Additional information -* [Frequently asked questions]({{site.repo.engine}}/blob/main/impeller/docs/faq.md) -* [Impeller's coordinate system]({{site.repo.engine}}/blob/main/impeller/docs/coordinate_system.md) -* [How to set up Xcode for GPU frame captures with metal]({{site.repo.engine}}/blob/main/impeller/docs/xcode_frame_capture.md) -* [Learning to read GPU frame captures]({{site.repo.engine}}/blob/main/impeller/docs/read_frame_captures.md) -* [How to enable metal validation for command line apps]({{site.repo.engine}}/blob/main/impeller/docs/metal_validation.md) -* [How Impeller works around the lack of uniform buffers in Open GL ES 2.0]({{site.repo.engine}}/blob/main/impeller/docs/ubo_gles2.md) -* [Guidance for writing efficient shaders]({{site.repo.engine}}/blob/main/impeller/docs/shader_optimization.md) -* [How color blending works in Impeller]({{site.repo.engine}}/blob/main/impeller/docs/blending.md) +* [Frequently asked questions]({{site.repo.engine}}blob/main/impeller/docs/faq.md) +* [Impeller's coordinate system]({{site.repo.engine}}blob/main/impeller/docs/coordinate_system.md) +* [How to set up Xcode for GPU frame captures with metal]({{site.repo.engine}}blob/main/impeller/docs/xcode_frame_capture.md) +* [Learning to read GPU frame captures]({{site.repo.engine}}blob/main/impeller/docs/read_frame_captures.md) +* [How to enable metal validation for command line apps]({{site.repo.engine}}blob/main/impeller/docs/metal_validation.md) +* [How Impeller works around the lack of uniform buffers in Open GL ES 2.0]({{site.repo.engine}}blob/main/impeller/docs/ubo_gles2.md) +* [Guidance for writing efficient shaders]({{site.repo.engine}}blob/main/impeller/docs/shader_optimization.md) +* [How color blending works in Impeller]({{site.repo.engine}}blob/main/impeller/docs/blending.md) diff --git a/src/content/perf/index.md b/src/content/perf/index.md index 764cd790c9..3cfa183fe9 100644 --- a/src/content/perf/index.md +++ b/src/content/perf/index.md @@ -150,8 +150,8 @@ How to ensure a longer battery life when running your app. [Measuring your app's size]: /perf/app-size -[speed]: {{site.repo.flutter}}/issues?q=is%3Aopen+label%3A%22perf%3A+speed%22+sort%3Aupdated-asc+ -[energy]: {{site.repo.flutter}}/issues?q=is%3Aopen+label%3A%22perf%3A+energy%22+sort%3Aupdated-asc+ -[memory]: {{site.repo.flutter}}/issues?q=is%3Aopen+label%3A%22perf%3A+memory%22+sort%3Aupdated-asc+ -[size]: {{site.repo.flutter}}/issues?q=is%3Aopen+label%3A%22perf%3A+app+size%22+sort%3Aupdated-asc+ -[performance]: {{site.repo.flutter}}/issues?q=+label%3A%22severe%3A+performance%22 +[speed]: {{site.repo.flutter}}issues?q=is%3Aopen+label%3A%22perf%3A+speed%22+sort%3Aupdated-asc+ +[energy]: {{site.repo.flutter}}issues?q=is%3Aopen+label%3A%22perf%3A+energy%22+sort%3Aupdated-asc+ +[memory]: {{site.repo.flutter}}issues?q=is%3Aopen+label%3A%22perf%3A+memory%22+sort%3Aupdated-asc+ +[size]: {{site.repo.flutter}}issues?q=is%3Aopen+label%3A%22perf%3A+app+size%22+sort%3Aupdated-asc+ +[performance]: {{site.repo.flutter}}issues?q=+label%3A%22severe%3A+performance%22 diff --git a/src/content/perf/isolates.md b/src/content/perf/isolates.md index 2cdbfb9b63..ccc9323cb3 100644 --- a/src/content/perf/isolates.md +++ b/src/content/perf/isolates.md @@ -5,7 +5,7 @@ description: Multithreading in Flutter using Dart isolates. -All Dart code runs in [isolates]({{site.dart-site}}/language/concurrency), +All Dart code runs in [isolates]({{site.dart-site}}language/concurrency), which are similar to threads, but differ in that isolates have their own isolated memory. They do not share state in any way, @@ -62,7 +62,7 @@ and the event loop work in Dart on the [concurrency page][] of the Dart documentation. -[concurrency page]: {{site.dart-site}}/language/concurrency +[concurrency page]: {{site.dart-site}}language/concurrency @@ -114,8 +114,8 @@ for better performance. Because immutable objects can't be updated, this effectively retains the actor model behavior. -[`Port` objects]: {{site.dart.api}}/stable/dart-isolate/ReceivePort-class.html -[objects that aren't copied when passed]: {{site.dart.api}}/stable/dart-isolate/SendPort/send.html +[`Port` objects]: {{site.dart.api}}stable/dart-isolate/ReceivePort-class.html +[objects that aren't copied when passed]: {{site.dart.api}}stable/dart-isolate/SendPort/send.html An exception to this rule is when an isolate exits when it sends a message using the `Isolate.exit` method. @@ -209,7 +209,7 @@ and needs to yield multiple return values to the main isolate. Or, you might use [worker_manager][] to manage long-lived isolates. -[worker_manager]: {{site.pub-pkg}}/worker_manager +[worker_manager]: {{site.pub-pkg}}worker_manager ### ReceivePorts and SendPorts @@ -234,7 +234,7 @@ communication between the main isolate and a worker isolate, follow the examples in the [Dart documentation][]. -[Dart documentation]: {{site.dart-site}}/language/concurrency +[Dart documentation]: {{site.dart-site}}language/concurrency ## Using platform plugins in isolates @@ -311,7 +311,7 @@ is equivalent to `await Isolate.run(() => fun(message))`. For more information on concurrency on the web, check out the [concurrency documentation][] on dart.dev. -[concurrency documentation]: {{site.dart-site}}/language/concurrency +[concurrency documentation]: {{site.dart-site}}language/concurrency ### No `rootBundle` access or `dart:ui` methods @@ -346,15 +346,15 @@ Flutter. - [isolate_agents][] is a package that abstracts Ports and make it easier to create long-lived isolates. - Read more about the `BackgroundIsolateBinaryMessenger` API [announcement][]. -[announcement]: {{site.flutter-medium}}/introducing-background-isolate-channels-7a299609cad8 +[announcement]: {{site.flutter-medium}}introducing-background-isolate-channels-7a299609cad8 [Actor model]: https://en.wikipedia.org/wiki/Actor_model -[isolate_agents]: {{site.medium}}/@gaaclarke/isolate-agents-easy-isolates-for-flutter-6d75bf69a2e7 +[isolate_agents]: {{site.medium}}@gaaclarke/isolate-agents-easy-isolates-for-flutter-6d75bf69a2e7 [marshaling data]: https://en.wikipedia.org/wiki/Marshalling_(computer_science) -[`compute()`]: {{site.api}}/flutter/foundation/compute.html -[`Isolate.spawn()`]: {{site.dart.api}}/stable/dart-isolate/Isolate/spawn.html -[`Isolate.exit()`]: {{site.dart.api}}/stable/dart-isolate/Isolate/exit.html -[`ReceivePort`]: {{site.dart.api}}/stable/dart-isolate/ReceivePort-class.html -[`SendPort`]: {{site.dart.api}}/stable/dart-isolate/SendPort-class.html -[`send()`]: {{site.dart.api}}/stable/dart-isolate/SendPort/send.html -[`BackgroundIsolateBinaryMessenger`]: {{site.api}}/flutter/services/BackgroundIsolateBinaryMessenger-class.html -[IsolateNameServer]: {{site.api}}/flutter/dart-ui/IsolateNameServer-class.html +[`compute()`]: {{site.api}}flutter/foundation/compute.html +[`Isolate.spawn()`]: {{site.dart.api}}stable/dart-isolate/Isolate/spawn.html +[`Isolate.exit()`]: {{site.dart.api}}stable/dart-isolate/Isolate/exit.html +[`ReceivePort`]: {{site.dart.api}}stable/dart-isolate/ReceivePort-class.html +[`SendPort`]: {{site.dart.api}}stable/dart-isolate/SendPort-class.html +[`send()`]: {{site.dart.api}}stable/dart-isolate/SendPort/send.html +[`BackgroundIsolateBinaryMessenger`]: {{site.api}}flutter/services/BackgroundIsolateBinaryMessenger-class.html +[IsolateNameServer]: {{site.api}}flutter/dart-ui/IsolateNameServer-class.html diff --git a/src/content/perf/metrics.md b/src/content/perf/metrics.md index ee06250e9f..0b6d36284c 100644 --- a/src/content/perf/metrics.md +++ b/src/content/perf/metrics.md @@ -24,10 +24,10 @@ description: Flutter 性能指标与能获取它们的 API 和工具 一帧的构建时间,栅格化时间,以及总时间 - * See [`FrameTiming`]({{site.api}}/flutter/dart-ui/FrameTiming-class.html) + * See [`FrameTiming`]({{site.api}}flutter/dart-ui/FrameTiming-class.html) in the API docs. - 在 API 文档中查看 [`FrameTiming`]({{site.api}}/flutter/dart-ui/FrameTiming-class.html.) 。 + 在 API 文档中查看 [`FrameTiming`]({{site.api}}flutter/dart-ui/FrameTiming-class.html.) 。 * Statistics of frame `buildDuration` (`*_frame_build_time_millis`) @@ -100,15 +100,15 @@ the following sites, click **Query**, and filter the **test** and * [https://flutter-flutter-perf.skia.org/e/](https://flutter-flutter-perf.skia.org/e/) * [https://flutter-engine-perf.skia.org/e/](https://flutter-engine-perf.skia.org/e/) -[firstFrameRasterized]: {{site.api}}/flutter/widgets/WidgetsBinding/firstFrameRasterized.html +[firstFrameRasterized]: {{site.api}}flutter/widgets/WidgetsBinding/firstFrameRasterized.html [transition_build]: https://flutter-flutter-perf.skia.org/e/?queries=sub_result%3D90th_percentile_frame_build_time_millis%26sub_result%3D99th_percentile_frame_build_time_millis%26sub_result%3Daverage_frame_build_time_millis%26sub_result%3Dworst_frame_build_time_millis%26test%3Dflutter_gallery__transition_perf [transition_raster]: https://flutter-flutter-perf.skia.org/e/?queries=sub_result%3D90th_percentile_frame_rasterizer_time_millis%26sub_result%3D99th_percentile_frame_rasterizer_time_millis%26sub_result%3Daverage_frame_rasterizer_time_millis%26sub_result%3Dworst_frame_rasterizer_time_millis%26test%3Dflutter_gallery__transition_perf -[profiling_summarizer]: {{site.repo.flutter}}/blob/master/packages/flutter_driver/lib/src/driver/profiling_summarizer.dart +[profiling_summarizer]: {{site.repo.flutter}}blob/master/packages/flutter_driver/lib/src/driver/profiling_summarizer.dart [cpu_gpu]: https://flutter-flutter-perf.skia.org/e/?queries=sub_result%3Daverage_cpu_usage%26sub_result%3Daverage_gpu_usage%26test%3Dsimple_animation_perf_ios -[basic_material_app_android]: {{site.repo.flutter}}/blob/master/dev/devicelab/bin/tasks/basic_material_app_android__compile.dart -[basic_material_app_ios]: {{site.repo.flutter}}/blob/master/dev/devicelab/bin/tasks/basic_material_app_ios__compile.dart -[hello_world_android]: {{site.repo.flutter}}/blob/master/dev/devicelab/bin/tasks/hello_world_android__compile.dart -[hello_world_ios]: {{site.repo.flutter}}/blob/master/dev/devicelab/bin/tasks/hello_world_ios__compile.dart -[flutter_gallery_android]: {{site.repo.flutter}}/blob/master/dev/devicelab/bin/tasks/flutter_gallery_android__compile.dart -[flutter_gallery_ios]: {{site.repo.flutter}}/blob/master/dev/devicelab/bin/tasks/flutter_gallery_ios__compile.dart +[basic_material_app_android]: {{site.repo.flutter}}blob/master/dev/devicelab/bin/tasks/basic_material_app_android__compile.dart +[basic_material_app_ios]: {{site.repo.flutter}}blob/master/dev/devicelab/bin/tasks/basic_material_app_ios__compile.dart +[hello_world_android]: {{site.repo.flutter}}blob/master/dev/devicelab/bin/tasks/hello_world_android__compile.dart +[hello_world_ios]: {{site.repo.flutter}}blob/master/dev/devicelab/bin/tasks/hello_world_ios__compile.dart +[flutter_gallery_android]: {{site.repo.flutter}}blob/master/dev/devicelab/bin/tasks/flutter_gallery_android__compile.dart +[flutter_gallery_ios]: {{site.repo.flutter}}blob/master/dev/devicelab/bin/tasks/flutter_gallery_ios__compile.dart [size_perf]: https://flutter-flutter-perf.skia.org/e/?queries=sub_result%3Drelease_size_bytes%26test%3Dbasic_material_app_android__compile%26test%3Dbasic_material_app_ios__compile%26test%3Dhello_world_android__compile%26test%3Dhello_world_ios__compile%26test%3Dflutter_gallery_ios__compile%26test%3Dflutter_gallery_android__compile \ No newline at end of file diff --git a/src/content/perf/rendering-performance.md b/src/content/perf/rendering-performance.md index 6d79059e0c..7d93043aa6 100644 --- a/src/content/perf/rendering-performance.md +++ b/src/content/perf/rendering-performance.md @@ -106,10 +106,10 @@ Flutter Gallery Web 应用性能时候总结的经验: [高效构建 Flutter widgets (Building performant Flutter widgets)][Building performant Flutter widgets] -[Building performant Flutter widgets]: {{site.flutter-medium}}/building-performant-flutter-widgets-3b2558aa08fa +[Building performant Flutter widgets]: {{site.flutter-medium}}building-performant-flutter-widgets-3b2558aa08fa [Flutter's build modes]: /testing/build-modes [Flutter performance profiling]: /perf/ui-performance -[images]: {{site.flutter-medium}}/improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation-6b3601087a2b +[images]: {{site.flutter-medium}}improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation-6b3601087a2b [Performance best practices]: /perf/best-practices -[shaking]: {{site.flutter-medium}}/optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading-535fbe3cd674 +[shaking]: {{site.flutter-medium}}optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading-535fbe3cd674 [Show performance data]: /tools/android-studio#show-performance-data diff --git a/src/content/perf/shader.md b/src/content/perf/shader.md index 7ef76621b1..07d638d84d 100644 --- a/src/content/perf/shader.md +++ b/src/content/perf/shader.md @@ -286,10 +286,10 @@ check out the [`flutter_gallery_sksl_warmup__transition_perf`][] and 更多详细信息请查看 [Flutter Gallery sksl 预热过渡性能验证][`flutter_gallery_sksl_warmup__transition_perf`], 以及 [Flutter Gallery sksl 预热过渡在 iOS_32 上的性能验证][`flutter_gallery_sksl_warmup__transition_perf_e2e_ios32`]。 -[Flutter Gallery]: {{site.repo.flutter}}/tree/main/dev/integration_tests/flutter_gallery -[`flutter_gallery_sksl_warmup__transition_perf`]: {{site.repo.flutter}}/blob/master/dev/devicelab/bin/tasks/flutter_gallery_sksl_warmup__transition_perf.dart -[`flutter_gallery_sksl_warmup__transition_perf_e2e_ios32`]: {{site.repo.flutter}}/blob/master/dev/devicelab/bin/tasks/flutter_gallery_sksl_warmup__transition_perf_e2e_ios32.dart -[`transitions_perf_test.dart`]: {{site.repo.flutter}}/blob/master/dev/integration_tests/flutter_gallery/test_driver/transitions_perf_test.dart +[Flutter Gallery]: {{site.repo.flutter}}tree/main/dev/integration_tests/flutter_gallery +[`flutter_gallery_sksl_warmup__transition_perf`]: {{site.repo.flutter}}blob/master/dev/devicelab/bin/tasks/flutter_gallery_sksl_warmup__transition_perf.dart +[`flutter_gallery_sksl_warmup__transition_perf_e2e_ios32`]: {{site.repo.flutter}}blob/master/dev/devicelab/bin/tasks/flutter_gallery_sksl_warmup__transition_perf_e2e_ios32.dart +[`transitions_perf_test.dart`]: {{site.repo.flutter}}blob/master/dev/integration_tests/flutter_gallery/test_driver/transitions_perf_test.dart The worst frame rasterization time is a useful metric from such integration tests to indicate the severity of shader diff --git a/src/content/perf/ui-performance.md b/src/content/perf/ui-performance.md index e37d2a9608..4803fe555c 100644 --- a/src/content/perf/ui-performance.md +++ b/src/content/perf/ui-performance.md @@ -162,7 +162,7 @@ Dart/Flutter DevTools 无法连接到以性能模式运行的 Flutter 应用。 ::: -[generate timeline events]: {{site.developers}}/web/tools/chrome-devtools/evaluate-performance/performance-reference +[generate timeline events]: {{site.developers}}web/tools/chrome-devtools/evaluate-performance/performance-reference Launch the app in profile mode as follows: @@ -410,11 +410,11 @@ see [The Framework architecture][] on the 了解更多信息和一些视频内容, 另外你可以在我们的社区中查看文章 [The Layer Cake][]。 -[GitHub wiki]: {{site.repo.flutter}}/wiki/ -[MainThread]: {{site.android-dev}}/reference/android/support/annotation/MainThread -[The Framework architecture]: {{site.repo.flutter}}/wiki/The-Framework-architecture -[The Layer Cake]: {{site.medium}}/flutter-community/the-layer-cake-widgets-elements-renderobjects-7644c3142401 -[UIKit]: {{site.apple-dev}}/documentation/uikit +[GitHub wiki]: {{site.repo.flutter}}wiki/ +[MainThread]: {{site.android-dev}}reference/android/support/annotation/MainThread +[The Framework architecture]: {{site.repo.flutter}}wiki/The-Framework-architecture +[The Layer Cake]: {{site.medium}}flutter-community/the-layer-cake-widgets-elements-renderobjects-7644c3142401 +[UIKit]: {{site.apple-dev}}documentation/uikit ### Displaying the performance overlay @@ -538,8 +538,8 @@ manipulated, a [`RepaintBoundary`][] might help. 可以尝试使用重绘边界 ([`RepaintBoundary`][])。 [programmatically]: /testing/code-debugging#debug-animation-issues -[`RepaintBoundary`]: {{site.api}}/flutter/widgets/RepaintBoundary-class.html -[`saveLayer`]: {{site.api}}/flutter/dart-ui/Canvas/saveLayer.html +[`RepaintBoundary`]: {{site.api}}flutter/widgets/RepaintBoundary-class.html +[`saveLayer`]: {{site.api}}flutter/dart-ui/Canvas/saveLayer.html #### Checking for offscreen layers @@ -600,7 +600,7 @@ ask yourself these questions: 可以对单独元素操作而不是一组元素么? -[`Clip.antiAliasWithSaveLayer`]: {{site.api}}/flutter/dart-ui/Clip.html +[`Clip.antiAliasWithSaveLayer`]: {{site.api}}flutter/dart-ui/Clip.html #### Checking for non-cached images @@ -735,11 +735,11 @@ Flutter's tools and debugging in Flutter: [Flutter API][] 文档, 特别是 [`PerformanceOverlay`][] 这个类 和 [dart:developer][] 这个 package。 -[dart:developer]: {{site.api}}/flutter/dart-developer/dart-developer-library.html +[dart:developer]: {{site.api}}flutter/dart-developer/dart-developer-library.html [devtools]: /tools/devtools [Flutter API]: {{site.api}} [Flutter inspector]: /tools/devtools/inspector [Flutter inspector talk]: {{site.yt.watch}}?v=JIcmJNT9DNI -[`PerformanceOverlay`]: {{site.api}}/flutter/widgets/PerformanceOverlay-class.html +[`PerformanceOverlay`]: {{site.api}}flutter/widgets/PerformanceOverlay-class.html [video]: {{site.bili.video}}/BV1t54y1m7Qr/ [Why Flutter Uses Dart]: https://hackernoon.com/why-flutter-uses-dart-dd635a054ebf diff --git a/src/content/perf/web-performance.md b/src/content/perf/web-performance.md index 60ab04e28c..032f62c0b1 100644 --- a/src/content/perf/web-performance.md +++ b/src/content/perf/web-performance.md @@ -17,15 +17,15 @@ For information on how to optimize web loading speed, check out the (free) article on Medium, [Best practices for optimizing Flutter web loading speed][article]. -[article]: {{site.flutter-medium}}/best-practices-for-optimizing-flutter-web-loading-speed-7cc0df14ce5c +[article]: {{site.flutter-medium}}best-practices-for-optimizing-flutter-web-loading-speed-7cc0df14ce5c ::: You can also emit your own timeline events using the `dart:developer` [Timeline][] and [TimelineTask][] APIs for further performance analysis. [Chrome DevTools performance panel]: https://developer.chrome.com/docs/devtools/performance -[Timeline]: {{site.api}}/flutter/dart-developer/Timeline-class.html -[TimelineTask]: {{site.api}}/flutter/dart-developer/TimelineTask-class.html +[Timeline]: {{site.api}}flutter/dart-developer/Timeline-class.html +[TimelineTask]: {{site.api}}flutter/dart-developer/TimelineTask-class.html ![Screenshot of the Chrome DevTools performance panel](/assets/images/docs/tools/devtools/chrome-devtools-performance-panel.png) @@ -39,10 +39,10 @@ in your app's `main` method. - [debugProfileLayoutsEnabled][]: Adds `Timeline` events for every `RenderObject` layout. - [debugProfilePaintsEnabled][]: Adds `Timeline` events for every `RenderObject` painted. -[debugProfileBuildsEnabled]: {{site.api}}/flutter/widgets/debugProfileBuildsEnabled.html -[debugProfileBuildsEnabledUserWidgets]: {{site.api}}/flutter/widgets/debugProfileBuildsEnabledUserWidgets.html -[debugProfileLayoutsEnabled]: {{site.api}}/flutter/rendering/debugProfileLayoutsEnabled.html -[debugProfilePaintsEnabled]: {{site.api}}/flutter/rendering/debugProfilePaintsEnabled.html +[debugProfileBuildsEnabled]: {{site.api}}flutter/widgets/debugProfileBuildsEnabled.html +[debugProfileBuildsEnabledUserWidgets]: {{site.api}}flutter/widgets/debugProfileBuildsEnabledUserWidgets.html +[debugProfileLayoutsEnabled]: {{site.api}}flutter/rendering/debugProfileLayoutsEnabled.html +[debugProfilePaintsEnabled]: {{site.api}}flutter/rendering/debugProfilePaintsEnabled.html ## Instructions diff --git a/src/content/platform-integration/android/c-interop.md b/src/content/platform-integration/android/c-interop.md index 10bcfba793..747a7044a6 100644 --- a/src/content/platform-integration/android/c-interop.md +++ b/src/content/platform-integration/android/c-interop.md @@ -37,7 +37,7 @@ Web 插件暂不支持调用本地代码。 [ios-ffi]: /platform-integration/ios/c-interop -[dart:ffi]: {{site.dart.api}}/dev/dart-ffi/dart-ffi-library.html +[dart:ffi]: {{site.dart.api}}dev/dart-ffi/dart-ffi-library.html [macos-ffi]: /platform-integration/macos/c-interop [FFI]: https://en.wikipedia.org/wiki/Foreign_function_interface @@ -111,10 +111,10 @@ which we don't link to statically). 在 Android 平台只有动态库可以使用 (因为在 JVM 环境无法静态链接)。 -[Dart API reference documentation]: {{site.dart.api}}/dev/ -[`DynamicLibrary.executable`]: {{site.dart.api}}/dev/dart-ffi/DynamicLibrary/DynamicLibrary.executable.html -[`DynamicLibrary.open`]: {{site.dart.api}}/dev/dart-ffi/DynamicLibrary/DynamicLibrary.open.html -[`DynamicLibrary.process`]: {{site.dart.api}}/dev/dart-ffi/DynamicLibrary/DynamicLibrary.process.html +[Dart API reference documentation]: {{site.dart.api}}dev/ +[`DynamicLibrary.executable`]: {{site.dart.api}}dev/dart-ffi/DynamicLibrary/DynamicLibrary.executable.html +[`DynamicLibrary.open`]: {{site.dart.api}}dev/dart-ffi/DynamicLibrary/DynamicLibrary.open.html +[`DynamicLibrary.process`]: {{site.dart.api}}dev/dart-ffi/DynamicLibrary/DynamicLibrary.process.html ## Create an FFI plugin @@ -174,7 +174,7 @@ The native code is invoked from dart in `lib/native_add_bindings_generated.dart` 原生代码会从 `lib/native_add_bindings_generated.dart` 被 Dart 调用。 -The bindings are generated with [package:ffigen]({{site.pub-pkg}}/ffigen). +The bindings are generated with [package:ffigen]({{site.pub-pkg}}ffigen). 代码由 [package:ffigen](https://pub.flutter-io.cn/packages/ffigen) 生成。 @@ -214,7 +214,7 @@ the documentation. 如果文档中有说明, 你还需要根据说明更新 Android 应用程序或插件的清单文件。 -[Android NDK Native APIs]: {{site.android-dev}}/ndk/guides/stable_apis +[Android NDK Native APIs]: {{site.android-dev}}ndk/guides/stable_apis #### First-party library @@ -239,7 +239,7 @@ code toolchain (either CMake or `ndk-build`). [添加 C 和 C++ 代码到项目][Add C and C++ code to your project] 来添加本地代码和对本地代码工具链的支持(CMake 或 `ndk-build`)。 -[Add C and C++ code to your project]: {{site.android-dev}}/studio/projects/add-native-code +[Add C and C++ code to your project]: {{site.android-dev}}studio/projects/add-native-code #### Closed-source third-party library @@ -330,6 +330,6 @@ in the following way. + tools:replace="android:extractNativeLibs"> ``` -[Android guidelines]: {{site.android-dev}}/topic/performance/reduce-apk-size#extract-false +[Android guidelines]: {{site.android-dev}}topic/performance/reduce-apk-size#extract-false {% include docs/resource-links/ffi-video-resources.md %} \ No newline at end of file diff --git a/src/content/platform-integration/android/platform-views.md b/src/content/platform-integration/android/platform-views.md index 499c69fd9a..4fa590aff0 100644 --- a/src/content/platform-integration/android/platform-views.md +++ b/src/content/platform-integration/android/platform-views.md @@ -151,9 +151,9 @@ For more information, see the API docs for: * [`AndroidViewSurface`][] * [`PlatformViewsService`][] -[`AndroidViewSurface`]: {{site.api}}/flutter/widgets/AndroidViewSurface-class.html -[`PlatformViewLink`]: {{site.api}}/flutter/widgets/PlatformViewLink-class.html -[`PlatformViewsService`]: {{site.api}}/flutter/services/PlatformViewsService-class.html +[`AndroidViewSurface`]: {{site.api}}flutter/widgets/AndroidViewSurface-class.html +[`PlatformViewLink`]: {{site.api}}flutter/widgets/PlatformViewLink-class.html +[`PlatformViewsService`]: {{site.api}}flutter/services/PlatformViewsService-class.html ### TextureLayerHybridCompisition @@ -201,7 +201,7 @@ For more information, see the API docs for: * [`AndroidView`][] -[`AndroidView`]: {{site.api}}/flutter/widgets/AndroidView-class.html +[`AndroidView`]: {{site.api}}flutter/widgets/AndroidView-class.html ## On the platform side @@ -484,10 +484,10 @@ For more information, see the API docs for: * [`PlatformViewFactory`][] * [`PlatformView`][] -[`FlutterPlugin`]: {{site.api}}/javadoc/io/flutter/embedding/engine/plugins/FlutterPlugin.html -[`PlatformView`]: {{site.api}}/javadoc/io/flutter/plugin/platform/PlatformView.html -[`PlatformViewFactory`]: {{site.api}}/javadoc/io/flutter/plugin/platform/PlatformViewFactory.html -[`PlatformViewRegistry`]: {{site.api}}/javadoc/io/flutter/plugin/platform/PlatformViewRegistry.html +[`FlutterPlugin`]: {{site.api}}javadoc/io/flutter/embedding/engine/plugins/FlutterPlugin.html +[`PlatformView`]: {{site.api}}javadoc/io/flutter/plugin/platform/PlatformView.html +[`PlatformViewFactory`]: {{site.api}}javadoc/io/flutter/plugin/platform/PlatformViewFactory.html +[`PlatformViewRegistry`]: {{site.api}}javadoc/io/flutter/plugin/platform/PlatformViewRegistry.html Finally, modify your `build.gradle` file to require one of the minimal Android SDK versions: @@ -517,11 +517,11 @@ manually invalidate the view after they have been drawn to Manual view invalidation is done by calling `invalidate` on the View or one of its parent views. -[`AndroidViewSurface`]: {{site.api}}/flutter/widgets/AndroidViewSurface-class.html +[`AndroidViewSurface`]: {{site.api}}flutter/widgets/AndroidViewSurface-class.html ### Issues -[Existing Platform View issues](https://github.com/flutter/flutter/issues?q=is%3Aopen+is%3Aissue+label%3A%22a%3A+platform-views%22) +[Existing Platform View issues]({{site.repo.flutter}}issues?q=is%3Aopen+is%3Aissue+label%3A%22a%3A+platform-views%22) {% include docs/platform-view-perf.md %} diff --git a/src/content/platform-integration/android/restore-state-android.md b/src/content/platform-integration/android/restore-state-android.md index ac5be5c9ae..e429ba708b 100644 --- a/src/content/platform-integration/android/restore-state-android.md +++ b/src/content/platform-integration/android/restore-state-android.md @@ -87,13 +87,13 @@ Other considerations: store their state. A `restorationId` means the widget (and its children) store the data in the surrounding bucket. -[a bit of extra setup]: {{site.api}}/flutter/services/RestorationManager-class.html#state-restoration-on-ios -[`restorationId`]: {{site.api}}/flutter/widgets/RestorationScope/restorationId.html -[`restorationScopeId`]: {{site.api}}/flutter/widgets/RestorationScope/restorationScopeId.html -[`RestorationMixin`]: {{site.api}}/flutter/widgets/RestorationMixin-mixin.html -[`RestorationScope`]: {{site.api}}/flutter/widgets/RestorationScope-class.html -[`restoreState`]: {{site.api}}/flutter/widgets/RestorationMixin/restoreState.html -[VeggieSeasons]: {{site.repo.samples}}/tree/main/veggieseasons +[a bit of extra setup]: {{site.api}}flutter/services/RestorationManager-class.html#state-restoration-on-ios +[`restorationId`]: {{site.api}}flutter/widgets/RestorationScope/restorationId.html +[`restorationScopeId`]: {{site.api}}flutter/widgets/RestorationScope/restorationScopeId.html +[`RestorationMixin`]: {{site.api}}flutter/widgets/RestorationMixin-mixin.html +[`RestorationScope`]: {{site.api}}flutter/widgets/RestorationScope-class.html +[`restoreState`]: {{site.api}}flutter/widgets/RestorationMixin/restoreState.html +[VeggieSeasons]: {{site.repo.samples}}tree/main/veggieseasons ## Restoring navigation state @@ -126,10 +126,10 @@ storing state on your device once you are finished with testing! ::: -[Testing state restoration]: {{site.api}}/flutter/services/RestorationManager-class.html#testing-state-restoration -[`RestorationBucket`]: {{site.api}}/flutter/services/RestorationBucket-class.html -[`RestorationManager`]: {{site.api}}/flutter/services/RestorationManager-class.html -[services]: {{site.api}}/flutter/services/services-library.html +[Testing state restoration]: {{site.api}}flutter/services/RestorationManager-class.html#testing-state-restoration +[`RestorationBucket`]: {{site.api}}flutter/services/RestorationBucket-class.html +[`RestorationManager`]: {{site.api}}flutter/services/RestorationManager-class.html +[services]: {{site.api}}flutter/services/services-library.html ## Other resources @@ -143,10 +143,10 @@ check out the following resources: classes otherwise work the same on both iOS and Android.
The following list links to relevant parts of the VeggieSeasons example: - * [Defining a `RestorablePropery` as an instance property]({{site.repo.samples}}/blob/604c82cd7c9c7807ff6c5ca96fbb01d44a4f2c41/veggieseasons/lib/widgets/trivia.dart#L33-L37) - * [Registering the properties]({{site.repo.samples}}/blob/604c82cd7c9c7807ff6c5ca96fbb01d44a4f2c41/veggieseasons/lib/widgets/trivia.dart#L49-L54) - * [Updating the property values]({{site.repo.samples}}/blob/604c82cd7c9c7807ff6c5ca96fbb01d44a4f2c41/veggieseasons/lib/widgets/trivia.dart#L108-L109) - * [Using property values in build]({{site.repo.samples}}/blob/604c82cd7c9c7807ff6c5ca96fbb01d44a4f2c41/veggieseasons/lib/widgets/trivia.dart#L205-L210)
+ * [Defining a `RestorablePropery` as an instance property]({{site.repo.samples}}blob/604c82cd7c9c7807ff6c5ca96fbb01d44a4f2c41/veggieseasons/lib/widgets/trivia.dart#L33-L37) + * [Registering the properties]({{site.repo.samples}}blob/604c82cd7c9c7807ff6c5ca96fbb01d44a4f2c41/veggieseasons/lib/widgets/trivia.dart#L49-L54) + * [Updating the property values]({{site.repo.samples}}blob/604c82cd7c9c7807ff6c5ca96fbb01d44a4f2c41/veggieseasons/lib/widgets/trivia.dart#L108-L109) + * [Using property values in build]({{site.repo.samples}}blob/604c82cd7c9c7807ff6c5ca96fbb01d44a4f2c41/veggieseasons/lib/widgets/trivia.dart#L205-L210)
* To learn more about short term and long term state, check out [Differentiate between ephemeral state @@ -158,11 +158,11 @@ check out the following resources: * For more information on navigation and the `go_router` package, check out [Navigation and routing][]. -[`RestorableProperty`]: {{site.api}}/flutter/widgets/RestorableProperty-class.html -[`restorablePush`]: {{site.api}}/flutter/widgets/Navigator/restorablePush.html -[`ScrollView`]: {{site.api}}/flutter/widgets/ScrollView/restorationId.html -[`statePersistence`]: {{site.pub-pkg}}/state_persistence -[`TextField`]: {{site.api}}/flutter/material/TextField/restorationId.html -[`restorablePush`]: {{site.api}}/flutter/widgets/Navigator/restorablePush.html -[`go_router`]: {{site.pub}}/packages/go_router +[`RestorableProperty`]: {{site.api}}flutter/widgets/RestorableProperty-class.html +[`restorablePush`]: {{site.api}}flutter/widgets/Navigator/restorablePush.html +[`ScrollView`]: {{site.api}}flutter/widgets/ScrollView/restorationId.html +[`statePersistence`]: {{site.pub-pkg}}state_persistence +[`TextField`]: {{site.api}}flutter/material/TextField/restorationId.html +[`restorablePush`]: {{site.api}}flutter/widgets/Navigator/restorablePush.html +[`go_router`]: {{site.pub-pkg}}go_router [Navigation and routing]: /ui/navigation diff --git a/src/content/platform-integration/android/splash-screen.md b/src/content/platform-integration/android/splash-screen.md index 5054c43603..49a4ea131d 100644 --- a/src/content/platform-integration/android/splash-screen.md +++ b/src/content/platform-integration/android/splash-screen.md @@ -152,7 +152,7 @@ background color of the Flutter UI. ``` -[drawables]: {{site.android-dev}}/studio/write/resource-manager#import +[drawables]: {{site.android-dev}}studio/write/resource-manager#import ## Set up the FlutterActivity in AndroidManifest.xml @@ -309,9 +309,9 @@ For an example of this, check out the 然后你可以重新实现 Flutter 的第一帧,将元素摆放在与 Android 闪屏页相同的位置。 关于这个的示例,请参考 [Android 闪屏页示例应用][Android splash screen sample app]。 -[Android Splash Screens]: {{site.android-dev}}/about/versions/12/features/splash-screen -[launch screen]: {{site.android-dev}}/topic/performance/vitals/launch-time#themed +[Android Splash Screens]: {{site.android-dev}}about/versions/12/features/splash-screen +[launch screen]: {{site.android-dev}}topic/performance/vitals/launch-time#themed [pre-warming a `FlutterEngine`]: /add-to-app/android/add-flutter-fragment#using-a-pre-warmed-flutterengine -[Android splash screen sample app]: {{site.repo.samples}}/tree/main/android_splash_screen +[Android splash screen sample app]: {{site.repo.samples}}tree/main/android_splash_screen [Deprecated Splash Screen API Migration guide]: /release/breaking-changes/splash-screen-migration [Customizing web app initialization guide]: /platform-integration/web/initialization diff --git a/src/content/platform-integration/desktop.md b/src/content/platform-integration/desktop.md index 7cadf00445..d58e8459e4 100644 --- a/src/content/platform-integration/desktop.md +++ b/src/content/platform-integration/desktop.md @@ -297,8 +297,8 @@ about endorsed plugins, see the following resources: [using packages]: /packages-and-plugins/using-packages [Developing packages and plugins]: /packages-and-plugins/developing-packages [Federated plugins]: /packages-and-plugins/developing-packages#federated-plugins -[How to write a Flutter web plugin, part 2]: {{site.flutter-medium}}/how-to-write-a-flutter-web-plugin-part-2-afdddb69ece6 -[Modern Flutter Plugin Development]: {{site.flutter-medium}}/modern-flutter-plugin-development-4c3ee015cf5a +[How to write a Flutter web plugin, part 2]: {{site.flutter-medium}}how-to-write-a-flutter-web-plugin-part-2-afdddb69ece6 +[Modern Flutter Plugin Development]: {{site.flutter-medium}}modern-flutter-plugin-development-4c3ee015cf5a ## Samples and codelabs @@ -353,7 +353,7 @@ Flokk [官宣文章][gskinner-flokk-blogpost],[源代码仓库地址][gskinner [wonderous-app]: {{site.wonderous}}/web [wonderous-repo]: {{site.repo.wonderous}} [wonderous-readme]: {{site.repo.wonderous}}#wonderous -[Photo Search app]: {{site.repo.samples}}/tree/main/desktop_photo_search -[gskinner-flokk-repo]: {{site.github}}/gskinnerTeam/flokk +[Photo Search app]: {{site.repo.samples}}tree/main/desktop_photo_search +[gskinner-flokk-repo]: {{site.github}}gskinnerTeam/flokk [gskinner-flokk-blogpost]: https://blog.gskinner.com/archives/2020/09/flokk-how-we-built-a-desktop-app-using-flutter.html -[Write a Flutter desktop application]: {{site.codelabs}}/codelabs/flutter-github-client +[Write a Flutter desktop application]: {{site.codelabs}}codelabs/flutter-github-client diff --git a/src/content/platform-integration/ios/app-extensions.md b/src/content/platform-integration/ios/app-extensions.md index a1bd26d42f..c3e56bc218 100644 --- a/src/content/platform-integration/ios/app-extensions.md +++ b/src/content/platform-integration/ios/app-extensions.md @@ -19,8 +19,8 @@ For more information, check out [Issue #9690][] and [Issue #135056][]. ::: -[Issue #9690]: {{site.github}}/flutter/website/issues/9690 -[Issue #135056]: {{site.github}}/flutter/flutter/issues/135056 +[Issue #9690]: {{site.repo.organization}}website/issues/9690 +[Issue #135056]: {{site.repo.flutter}}issues/135056 ## How do you add an app extension to your Flutter app? @@ -279,17 +279,17 @@ extensions with your Flutter iOS app, check out the codelab. [Adding a Flutter Screen]: /add-to-app/ios/add-flutter-screen?tab=vc-uikit-swift-tab#alternatively-create-a-flutterviewcontroller-with-an-implicit-flutterengine -[App Group]: {{site.apple-dev}}/documentation/xcode/configuring-app-groups -[Apple's documentation]: {{site.apple-dev}}/app-extensions/ -[Compiling the Engine]: https://github.com/flutter/flutter/wiki/Compiling-the-engine -[Core Spotlight]: {{site.apple-dev}}/documentation/corespotlight +[App Group]: {{site.apple-dev}}documentation/xcode/configuring-app-groups +[Apple's documentation]: {{site.apple-dev}}app-extensions/ +[Compiling the Engine]: {{site.repo.flutter}}wiki/Compiling-the-engine +[Core Spotlight]: {{site.apple-dev}}documentation/corespotlight [Deep Linking]:/ui/navigation/deep-linking -[lab]: {{site.codelabs}}/flutter-home-screen-widgets +[lab]: {{site.codelabs}}flutter-home-screen-widgets [leverage]: /platform-integration/ios/apple-frameworks -[`path_provider`]: {{site.pub-pkg}}/path_provider +[`path_provider`]: {{site.pub-pkg}}path_provider [pub.dev]: {{site.pub-pkg}} [read and write files]: /cookbook/persistence/reading-writing-files -[`shared_preference_app_group`]: {{site.pub-pkg}}/shared_preference_app_group -[`sqflite`]: {{site.pub-pkg}}/sqflite -[WidgetKit]: {{site.apple-dev}}/documentation/widgetkit -[`workmanager`]: {{site.pub-pkg}}/workmanager +[`shared_preference_app_group`]: {{site.pub-pkg}}shared_preference_app_group +[`sqflite`]: {{site.pub-pkg}}sqflite +[WidgetKit]: {{site.apple-dev}}documentation/widgetkit +[`workmanager`]: {{site.pub-pkg}}workmanager diff --git a/src/content/platform-integration/ios/apple-frameworks.md b/src/content/platform-integration/ios/apple-frameworks.md index 8996f3c797..4e292eec90 100644 --- a/src/content/platform-integration/ios/apple-frameworks.md +++ b/src/content/platform-integration/ios/apple-frameworks.md @@ -84,27 +84,27 @@ should provide details. [Flutter for SwiftUI developers]: /get-started/flutter-for/swiftui-devs [Using packages]: /packages-and-plugins/using-packages [pub.dev]: {{site.pub-pkg}} -[`shared_preferences`]: {{site.pub-pkg}}/shared_preferences -[`http`]: {{site.pub-pkg}}/http -[`sensors_plus`]: {{site.pub-pkg}}/sensors_plus -[`geolocator`]: {{site.pub-pkg}}/geolocator -[`image_picker`]: {{site.pub-pkg}}/image_picker +[`shared_preferences`]: {{site.pub-pkg}}shared_preferences +[`http`]: {{site.pub-pkg}}http +[`sensors_plus`]: {{site.pub-pkg}}sensors_plus +[`geolocator`]: {{site.pub-pkg}}geolocator +[`image_picker`]: {{site.pub-pkg}}image_picker [`pubspec.yaml`]: /tools/pubspec -[`quick_actions`]: {{site.pub-pkg}}/quick_actions -[`in_app_purchase`]: {{site.pub-pkg}}/in_app_purchase -[`pay`]: {{site.pub-pkg}}/pay -[`firebase_messaging`]: {{site.pub-pkg}}/firebase_messaging -[`google_maps_flutter`]: {{site.pub-pkg}}/google_maps_flutter -[`google_ml_kit`]: {{site.pub-pkg}}/google_ml_kit -[Use a custom TensorFlow Lite model with Flutter]: {{site.firebase}}/docs/ml/flutter/use-custom-models -[`speech_to_text`]: {{site.pub-pkg}}/speech_to_text -[`ar_flutter_plugin`]: {{site.pub-pkg}}/ar_flutter_plugin -[`weather`]: {{site.pub-pkg}}/weather -[`contacts_service`]: {{site.pub-pkg}}/contacts_service -[`health`]: {{site.pub-pkg}}/health +[`quick_actions`]: {{site.pub-pkg}}quick_actions +[`in_app_purchase`]: {{site.pub-pkg}}in_app_purchase +[`pay`]: {{site.pub-pkg}}pay +[`firebase_messaging`]: {{site.pub-pkg}}firebase_messaging +[`google_maps_flutter`]: {{site.pub-pkg}}google_maps_flutter +[`google_ml_kit`]: {{site.pub-pkg}}google_ml_kit +[Use a custom TensorFlow Lite model with Flutter]: {{site.firebase}}docs/ml/flutter/use-custom-models +[`speech_to_text`]: {{site.pub-pkg}}speech_to_text +[`ar_flutter_plugin`]: {{site.pub-pkg}}ar_flutter_plugin +[`weather`]: {{site.pub-pkg}}weather +[`contacts_service`]: {{site.pub-pkg}}contacts_service +[`health`]: {{site.pub-pkg}}health [OpenWeatherMap API]: https://openweathermap.org/api -[`sqflite`]: {{site.pub-pkg}}/sqflite +[`sqflite`]: {{site.pub-pkg}}sqflite [Writing platform-specific code]: /platform-integration/platform-channels -[`camera`]: {{site.pub-pkg}}/camera -[`flutter_core_spotlight`]: {{site.pub-pkg}}/flutter_core_spotlight -[`home_widget`]: {{site.pub-pkg}}/home_widget +[`camera`]: {{site.pub-pkg}}camera +[`flutter_core_spotlight`]: {{site.pub-pkg}}flutter_core_spotlight +[`home_widget`]: {{site.pub-pkg}}home_widget diff --git a/src/content/platform-integration/ios/c-interop.md b/src/content/platform-integration/ios/c-interop.md index 5b655cee8e..581913f44f 100644 --- a/src/content/platform-integration/ios/c-interop.md +++ b/src/content/platform-integration/ios/c-interop.md @@ -37,7 +37,7 @@ Web 插件暂不支持调用本地代码。 [android-ffi]: /platform-integration/android/c-interop [macos-ffi]: /platform-integration/macos/c-interop -[dart:ffi]: {{site.dart.api}}/dev/dart-ffi/dart-ffi-library.html +[dart:ffi]: {{site.dart.api}}dev/dart-ffi/dart-ffi-library.html [FFI]: https://en.wikipedia.org/wiki/Foreign_function_interface Before your library or program can use the FFI library @@ -103,7 +103,7 @@ API documentation is available from the Dart dev channel: Dart dev 频道中的 API 已经可用: [Dart API 参考文档][Dart API reference documentation]. -[Dart API reference documentation]: {{site.dart.api}}/dev/ +[Dart API reference documentation]: {{site.dart.api}}dev/ ## Create an FFI plugin @@ -163,7 +163,7 @@ The native code is invoked from dart in `lib/native_add_bindings_generated.dart` 原生代码会从 `lib/native_add_bindings_generated.dart` 被 Dart 调用。 -The bindings are generated with [package:ffigen]({{site.pub-pkg}}/ffigen). +The bindings are generated with [package:ffigen]({{site.pub-pkg}}ffigen). 代码由 [package:ffigen](https://pub.flutter-io.cn/packages/ffigen) 生成。 @@ -197,9 +197,9 @@ can be resolved using [`DynamicLibrary.executable`][] or 或 [`DynamicLibrary.process`][] 解析静态链接到应用程序二进制文件的符号。 -[`DynamicLibrary.executable`]: {{site.dart.api}}/dev/dart-ffi/DynamicLibrary/DynamicLibrary.executable.html -[`DynamicLibrary.open`]: {{site.dart.api}}/dev/dart-ffi/DynamicLibrary/DynamicLibrary.open.html -[`DynamicLibrary.process`]: {{site.dart.api}}/dev/dart-ffi/DynamicLibrary/DynamicLibrary.process.html +[`DynamicLibrary.executable`]: {{site.dart.api}}dev/dart-ffi/DynamicLibrary/DynamicLibrary.executable.html +[`DynamicLibrary.open`]: {{site.dart.api}}dev/dart-ffi/DynamicLibrary/DynamicLibrary.open.html +[`DynamicLibrary.process`]: {{site.dart.api}}dev/dart-ffi/DynamicLibrary/DynamicLibrary.process.html #### Platform library @@ -366,7 +366,7 @@ as shown in the CocoaPods example. ::: -[CocoaPods example]: {{site.github}}/CocoaPods/CocoaPods/blob/master/examples/Vendored%20Framework%20Example/Example%20Pods/VendoredFrameworkExample.podspec +[CocoaPods example]: {{site.github}}CocoaPods/CocoaPods/blob/master/examples/Vendored%20Framework%20Example/Example%20Pods/VendoredFrameworkExample.podspec ## Stripping iOS symbols diff --git a/src/content/platform-integration/ios/install-ios/install-ios-from-android.md b/src/content/platform-integration/ios/install-ios/install-ios-from-android.md index 0c272870af..695763fc66 100644 --- a/src/content/platform-integration/ios/install-ios/install-ios-from-android.md +++ b/src/content/platform-integration/ios/install-ios/install-ios-from-android.md @@ -17,4 +17,4 @@ To add iOS as a Flutter app target for macOS, follow this procedure. {% include docs/install/flutter-doctor.md target='iOS' devos='macOS' config='macOSAndroidiOS' %} -[Xcode]: {{site.apple-dev}}/xcode/ +[Xcode]: {{site.apple-dev}}xcode/ diff --git a/src/content/platform-integration/ios/install-ios/install-ios-from-macos.md b/src/content/platform-integration/ios/install-ios/install-ios-from-macos.md index 75c0fb714a..cd5097148e 100644 --- a/src/content/platform-integration/ios/install-ios/install-ios-from-macos.md +++ b/src/content/platform-integration/ios/install-ios/install-ios-from-macos.md @@ -13,4 +13,4 @@ when your Flutter getting started path began with macOS. {% include docs/install/flutter-doctor.md target='iOS' devos='macOS' config='macOSDesktopiOS' %} -[Xcode]: {{site.apple-dev}}/xcode/ +[Xcode]: {{site.apple-dev}}xcode/ diff --git a/src/content/platform-integration/ios/install-ios/install-ios-from-web.md b/src/content/platform-integration/ios/install-ios/install-ios-from-web.md index bc0ab6635c..3eb9a24e04 100644 --- a/src/content/platform-integration/ios/install-ios/install-ios-from-web.md +++ b/src/content/platform-integration/ios/install-ios/install-ios-from-web.md @@ -17,4 +17,4 @@ To add iOS as a Flutter app target for macOS, follow this procedure. {% include docs/install/flutter-doctor.md target='iOS' devos='macOS' config='macOSiOSWeb' %} -[Xcode]: {{site.apple-dev}}/xcode/ +[Xcode]: {{site.apple-dev}}xcode/ diff --git a/src/content/platform-integration/ios/ios-app-clip.md b/src/content/platform-integration/ios/ios-app-clip.md index 40d3f27f5e..a6d8eec7b2 100644 --- a/src/content/platform-integration/ios/ios-app-clip.md +++ b/src/content/platform-integration/ios/ios-app-clip.md @@ -22,7 +22,7 @@ existing Flutter project or [add-to-app][] project. 这个指南介绍了如何手动添加另一个使用 Flutter 来渲染的 iOS App Clip target, 并将它集成到你现有的 Flutter 项目或 [add-to-app][] 项目。 -[#71098]: {{site.repo.flutter}}/issues/71098 +[#71098]: {{site.repo.flutter}}issues/71098 [add-to-app]: /add-to-app :::warning @@ -38,7 +38,7 @@ To see a working sample, see the [App Clip sample][] on GitHub. 要查看完整可用的示例,请参阅 GitHub 上的 [App Clip 示例][App Clip sample]。 -[App Clip sample]: {{site.repo.samples}}/tree/main/ios_app_clip +[App Clip sample]: {{site.repo.samples}}tree/main/ios_app_clip ## Step 1 - Open project @@ -274,7 +274,7 @@ See the [official Apple documentation][]. 这是一个 App Clip 开发的标准步骤。 请查看 [苹果官方文档][official Apple documentation]。 -[official Apple documentation]: {{site.apple-dev}}/documentation/app_clips/creating_an_app_clip_with_xcode#3604097 +[official Apple documentation]: {{site.apple-dev}}documentation/app_clips/creating_an_app_clip_with_xcode#3604097 **6.1** @@ -520,7 +520,7 @@ also consult Apple's doc on 要从头测试 App Clip 的启动,你也可以查看苹果公司的文档 [测试你的 App Clip 的启动体验][testing]。 -[testing]: {{site.apple-dev}}/documentation/app_clips/testing_your_app_clip_s_launch_experience +[testing]: {{site.apple-dev}}documentation/app_clips/testing_your_app_clip_s_launch_experience ## Debugging, hot reload diff --git a/src/content/platform-integration/ios/ios-debugging.md b/src/content/platform-integration/ios/ios-debugging.md index 95524fbaea..06e67e2ee4 100644 --- a/src/content/platform-integration/ios/ios-debugging.md +++ b/src/content/platform-integration/ios/ios-debugging.md @@ -26,5 +26,5 @@ permission by enabling 不会出现在 release 构建中。 你也可以通过打开 **设置 > 隐私与安全性 > 本地网络 > 你的应用程序** 来允许该权限。 -[local network permissions in iOS 14 or later]: {{site.apple-dev}}/news/?id=0oi77447 +[local network permissions in iOS 14 or later]: {{site.apple-dev}}news/?id=0oi77447 diff --git a/src/content/platform-integration/ios/launch-screen.md b/src/content/platform-integration/ios/launch-screen.md index 49aaae3dca..70f10ea1ca 100644 --- a/src/content/platform-integration/ios/launch-screen.md +++ b/src/content/platform-integration/ios/launch-screen.md @@ -14,7 +14,7 @@ https://github.com/flutter/website/issues/8357 They set the stage for your application, while allowing time for the app engine to load and your app to initialize. -[Launch screens]: {{site.apple-dev}}/design/human-interface-guidelines/launching#Launch-screens +[Launch screens]: {{site.apple-dev}}design/human-interface-guidelines/launching#Launch-screens All apps submitted to the Apple App Store [must provide a launch screen][apple-requirement] @@ -37,5 +37,5 @@ drop in the desired images to the `LaunchImage` image set. Apple provides detailed guidance for launch screens as part of the [Human Interface Guidelines][]. -[apple-requirement]: {{site.apple-dev}}/documentation/xcode/specifying-your-apps-launch-screen -[Human Interface Guidelines]: {{site.apple-dev}}/design/human-interface-guidelines/patterns/launching#launch-screens +[apple-requirement]: {{site.apple-dev}}documentation/xcode/specifying-your-apps-launch-screen +[Human Interface Guidelines]: {{site.apple-dev}}design/human-interface-guidelines/patterns/launching#launch-screens diff --git a/src/content/platform-integration/ios/platform-views.md b/src/content/platform-integration/ios/platform-views.md index ad4e8f65b8..e3b9b684d4 100644 --- a/src/content/platform-integration/ios/platform-views.md +++ b/src/content/platform-integration/ios/platform-views.md @@ -115,7 +115,7 @@ For more information, see the API docs for: 更多信息,请查看 API 文档:[`UIKitView`][]。 -[`UIKitView`]: {{site.api}}/flutter/widgets/UiKitView-class.html +[`UIKitView`]: {{site.api}}flutter/widgets/UiKitView-class.html ## On the platform side @@ -413,9 +413,9 @@ For more information, see the API docs for: * [`FlutterPlatformView`][] * [`PlatformView`][] -[`FlutterPlatformView`]: {{site.api}}/ios-embedder/protocol_flutter_platform_view-p.html -[`FlutterPlatformViewFactory`]: {{site.api}}/ios-embedder/protocol_flutter_platform_view_factory-p.html -[`PlatformView`]: {{site.api}}/javadoc/io/flutter/plugin/platform/PlatformView.html +[`FlutterPlatformView`]: {{site.api}}ios-embedder/protocol_flutter_platform_view-p.html +[`FlutterPlatformViewFactory`]: {{site.api}}ios-embedder/protocol_flutter_platform_view_factory-p.html +[`PlatformView`]: {{site.api}}javadoc/io/flutter/plugin/platform/PlatformView.html ## Putting it together @@ -481,9 +481,9 @@ There are some limitations when composing iOS Platform Views. but there are some limitations on how it can be used. For more details, check out the [iOS Platform View Backdrop Filter Blur design doc][design-doc]. -[`ShaderMask`]: {{site.api}}/flutter/foundation/ShaderMask.html -[`ColorFiltered`]: {{site.api}}/flutter/foundation/ColorFiltered.html -[`BackdropFilter`]: {{site.api}}/flutter/foundation/BackdropFilter.html -[`defaultTargetPlatform`]: {{site.api}}/flutter/foundation/defaultTargetPlatform.html +[`ShaderMask`]: {{site.api}}flutter/foundation/ShaderMask.html +[`ColorFiltered`]: {{site.api}}flutter/foundation/ColorFiltered.html +[`BackdropFilter`]: {{site.api}}flutter/foundation/BackdropFilter.html +[`defaultTargetPlatform`]: {{site.api}}flutter/foundation/defaultTargetPlatform.html [design-doc]: {{site.main-url}}/go/ios-platformview-backdrop-filter-blur diff --git a/src/content/platform-integration/ios/restore-state-ios.md b/src/content/platform-integration/ios/restore-state-ios.md index 83da93ce7c..eb73a3adb8 100644 --- a/src/content/platform-integration/ios/restore-state-ios.md +++ b/src/content/platform-integration/ios/restore-state-ios.md @@ -18,8 +18,8 @@ both iOS and Android. For more information, check out [State restoration on Android][] and the [VeggieSeasons][] code sample. -[a bit of extra setup]: {{site.api}}/flutter/services/RestorationManager-class.html#state-restoration-on-ios -[`RestorationManager`]: {{site.api}}/flutter/services/RestorationManager-class.html +[a bit of extra setup]: {{site.api}}flutter/services/RestorationManager-class.html#state-restoration-on-ios +[`RestorationManager`]: {{site.api}}flutter/services/RestorationManager-class.html [State restoration on Android]: /platform-integration/android/restore-state-android -[VeggieSeasons]: {{site.repo.samples}}/tree/main/veggieseasons +[VeggieSeasons]: {{site.repo.samples}}tree/main/veggieseasons diff --git a/src/content/platform-integration/linux/building.md b/src/content/platform-integration/linux/building.md index fbcb9b591d..78c2808971 100644 --- a/src/content/platform-integration/linux/building.md +++ b/src/content/platform-integration/linux/building.md @@ -38,13 +38,13 @@ In general, many other [packages support creating Linux apps][support-linux], including common packages such as [`url_launcher`], [`shared_preferences`], [`file_selector`], and [`path_provider`]. -[C interop using `dart:ffi`]: {{site.dart-site}}/guides/libraries/c-interop -[Canonical]: {{site.pub}}/publishers/canonical.com/packages -[support-linux]: {{site.pub}}/packages?q=platform%3Alinux -[`url_launcher`]: {{site.pub-pkg}}/url_launcher -[`shared_preferences`]: {{site.pub-pkg}}/shared_preferences -[`file_selector`]: {{site.pub-pkg}}/file_selector -[`path_provider`]: {{site.pub-pkg}}/path_provider +[C interop using `dart:ffi`]: {{site.dart-site}}guides/libraries/c-interop +[Canonical]: {{site.pub}}publishers/canonical.com/packages +[support-linux]: {{site.pub-pkg}}?q=platform%3Alinux +[`url_launcher`]: {{site.pub-pkg}}url_launcher +[`shared_preferences`]: {{site.pub-pkg}}shared_preferences +[`file_selector`]: {{site.pub-pkg}}file_selector +[`path_provider`]: {{site.pub-pkg}}path_provider ## Prepare Linux apps for distribution @@ -91,4 +91,4 @@ consult the step-by-step [Linux packaging guide][linux_packaging_guide]. [Snap Store]: https://snapcraft.io/store [Build and release a Linux application to the Snap Store]: /deployment/linux -[linux_packaging_guide]: https://medium.com/@fluttergems/packaging-and-distributing-flutter-desktop-apps-the-missing-guide-part-3-linux-24ef8d30a5b4 +[linux_packaging_guide]: {{site.medium}}@fluttergems/packaging-and-distributing-flutter-desktop-apps-the-missing-guide-part-3-linux-24ef8d30a5b4 diff --git a/src/content/platform-integration/macos/building.md b/src/content/platform-integration/macos/building.md index 8c6c578470..30b9a142c8 100644 --- a/src/content/platform-integration/macos/building.md +++ b/src/content/platform-integration/macos/building.md @@ -49,7 +49,7 @@ pop-up buttons, and modal dialogs. 工具栏 (Toolbar)、下拉和弹出按钮以及模态 (modal) 对话框。 [Cupertino]: /ui/widgets/cupertino -[macos_ui]: {{site.pub}}/packages/macos_ui +[macos_ui]: {{site.pub-pkg}}macos_ui ## Building macOS apps @@ -106,8 +106,8 @@ App Store. [构建和发布为 macOS 应用][Build and release a macOS app] 文档提供了将 Flutter 应用发布至 App Store 的详细步骤。 -[distribute it through the macOS App Store]: {{site.apple-dev}}/macos/submit/ -[documentation on notarizing macOS Applications]:{{site.apple-dev}}/documentation/xcode/notarizing_macos_software_before_distribution +[distribute it through the macOS App Store]: {{site.apple-dev}}macos/submit/ +[documentation on notarizing macOS Applications]:{{site.apple-dev}}documentation/xcode/notarizing_macos_software_before_distribution [on distributing an application through the App Store]: https://help.apple.com/xcode/mac/current/#/dev067853c94 [Build and release a macOS app]: /deployment/macos @@ -232,10 +232,10 @@ on the Apple Developer site. 你可以阅读 Apple 开发者官网的 [应用沙盒][App Sandbox] 和 [授权][Entitlements] 文档,以获取关于此章节的更多信息。 -[App Sandbox]: {{site.apple-dev}}/documentation/security/app_sandbox -[App Store]: {{site.apple-dev}}/app-store/submissions/ -[Entitlements]: {{site.apple-dev}}/documentation/bundleresources/entitlements -[`file_chooser`]: {{site.github}}/google/flutter-desktop-embedding/tree/master/plugins/file_chooser +[App Sandbox]: {{site.apple-dev}}documentation/security/app_sandbox +[App Store]: {{site.apple-dev}}app-store/submissions/ +[Entitlements]: {{site.apple-dev}}documentation/bundleresources/entitlements +[`file_chooser`]: {{site.github}}google/flutter-desktop-embedding/tree/master/plugins/file_chooser ## Hardened Runtime @@ -275,4 +275,4 @@ see [Hardened Runtime][] on the Apple Developer site. 你可以阅读 Apple 开发者官网的 [强化版运行时][Hardened Runtime] 文档, 以获取关于此章节的更多信息。 -[Hardened Runtime]: {{site.apple-dev}}/documentation/security/hardened_runtime +[Hardened Runtime]: {{site.apple-dev}}documentation/security/hardened_runtime diff --git a/src/content/platform-integration/macos/c-interop.md b/src/content/platform-integration/macos/c-interop.md index d128a6fc55..74c460adfc 100644 --- a/src/content/platform-integration/macos/c-interop.md +++ b/src/content/platform-integration/macos/c-interop.md @@ -37,7 +37,7 @@ Web 插件暂不支持调用本地代码。 [android-ffi]: /platform-integration/android/c-interop [ios-ffi]: /platform-integration/ios/c-interop -[dart:ffi]: {{site.dart.api}}/dev/dart-ffi/dart-ffi-library.html +[dart:ffi]: {{site.dart.api}}dev/dart-ffi/dart-ffi-library.html [FFI]: https://en.wikipedia.org/wiki/Foreign_function_interface Before your library or program can use the FFI library @@ -102,7 +102,7 @@ API documentation is available from the Dart dev channel: Dart dev 频道中的 API 已经可用: [Dart API 参考文档][Dart API reference documentation]。 -[Dart API reference documentation]: {{site.dart.api}}/dev/ +[Dart API reference documentation]: {{site.dart.api}}dev/ ## Create an FFI plugin @@ -165,9 +165,9 @@ The native code is invoked from dart in `lib/native_add_bindings_generated.dart` 原生代码会从 `lib/native_add_bindings_generated.dart` 中被 Dart 调用。 -The bindings are generated with [package:ffigen]({{site.pub-pkg}}/ffigen). +The bindings are generated with [package:ffigen]({{site.pub-pkg}}ffigen). -绑定代码由 [package:ffigen]({{site.pub-pkg}}/ffigen) 生成。 +绑定代码由 [package:ffigen]({{site.pub-pkg}}ffigen) 生成。 ## Other use cases @@ -199,9 +199,9 @@ can be resolved using [`DynamicLibrary.executable`][] or 或 [`DynamicLibrary.process`][] 解析静态链接到应用程序二进制文件的符号。 -[`DynamicLibrary.executable`]: {{site.dart.api}}/dev/dart-ffi/DynamicLibrary/DynamicLibrary.executable.html -[`DynamicLibrary.open`]: {{site.dart.api}}/dev/dart-ffi/DynamicLibrary/DynamicLibrary.open.html -[`DynamicLibrary.process`]: {{site.dart.api}}/dev/dart-ffi/DynamicLibrary/DynamicLibrary.process.html +[`DynamicLibrary.executable`]: {{site.dart.api}}dev/dart-ffi/DynamicLibrary/DynamicLibrary.executable.html +[`DynamicLibrary.open`]: {{site.dart.api}}dev/dart-ffi/DynamicLibrary/DynamicLibrary.open.html +[`DynamicLibrary.process`]: {{site.dart.api}}dev/dart-ffi/DynamicLibrary/DynamicLibrary.process.html #### Platform library @@ -472,7 +472,7 @@ as shown in the CocoaPods example. ::: -[CocoaPods example]: {{site.github}}/CocoaPods/CocoaPods/blob/master/examples/Vendored%20Framework%20Example/Example%20Pods/VendoredFrameworkExample.podspec +[CocoaPods example]: {{site.github}}CocoaPods/CocoaPods/blob/master/examples/Vendored%20Framework%20Example/Example%20Pods/VendoredFrameworkExample.podspec ## Stripping macOS symbols diff --git a/src/content/platform-integration/macos/install-macos/install-macos-from-android.md b/src/content/platform-integration/macos/install-macos/install-macos-from-android.md index f87ab3d859..b8b341f2d5 100644 --- a/src/content/platform-integration/macos/install-macos/install-macos-from-android.md +++ b/src/content/platform-integration/macos/install-macos/install-macos-from-android.md @@ -17,4 +17,4 @@ To add macOS desktop as a Flutter app target, follow this procedure. {% include docs/install/flutter-doctor.md target='macOS' devos='macOS' config='macOSDesktopAndroid' %} -[Xcode]: {{site.apple-dev}}/xcode/ +[Xcode]: {{site.apple-dev}}xcode/ diff --git a/src/content/platform-integration/macos/install-macos/install-macos-from-ios.md b/src/content/platform-integration/macos/install-macos/install-macos-from-ios.md index bd1db9f3df..8d7f8315ec 100644 --- a/src/content/platform-integration/macos/install-macos/install-macos-from-ios.md +++ b/src/content/platform-integration/macos/install-macos/install-macos-from-ios.md @@ -13,4 +13,4 @@ when your Flutter getting started path began with iOS. {% include docs/install/flutter-doctor.md target='macOS' devos='macOS' config='macOSDesktopiOS' %} -[Xcode]: {{site.apple-dev}}/xcode/ +[Xcode]: {{site.apple-dev}}xcode/ diff --git a/src/content/platform-integration/macos/install-macos/install-macos-from-web.md b/src/content/platform-integration/macos/install-macos/install-macos-from-web.md index 4d8d672aaf..a52b7ee0d5 100644 --- a/src/content/platform-integration/macos/install-macos/install-macos-from-web.md +++ b/src/content/platform-integration/macos/install-macos/install-macos-from-web.md @@ -17,4 +17,4 @@ To add macOS as a Flutter app target for macOS, follow this procedure. {% include docs/install/flutter-doctor.md target='macOS' devos='macOS' config='macOSDesktopWeb' %} -[Xcode]: {{site.apple-dev}}/xcode/ +[Xcode]: {{site.apple-dev}}xcode/ diff --git a/src/content/platform-integration/platform-adaptations.md b/src/content/platform-integration/platform-adaptations.md index c296ae4fd9..408b6931f8 100644 --- a/src/content/platform-integration/platform-adaptations.md +++ b/src/content/platform-integration/platform-adaptations.md @@ -77,10 +77,10 @@ You can request additional guides by commenting on [issue #8427][8427]. ::: -[`android.app.AlertDialog`]: {{site.android-dev}}/reference/android/app/AlertDialog.html -[issue #8410]: {{site.repo.flutter}}/issues/8410#issuecomment-468034023 +[`android.app.AlertDialog`]: {{site.android-dev}}reference/android/app/AlertDialog.html +[issue #8410]: {{site.repo.flutter}}issues/8410#issuecomment-468034023 [Material/Cupertino adaptive widget problem definition]: https://bit.ly/flutter-adaptive-widget-problem -[platform_design code samples]: {{site.repo.samples}}/tree/main/platform_design +[platform_design code samples]: {{site.repo.samples}}tree/main/platform_design ## Page navigation @@ -163,9 +163,9 @@ On **iOS**: -[`Navigator.push()`]: {{site.api}}/flutter/widgets/Navigator/push.html -[`startActivity()`]: {{site.android-dev}}/reference/kotlin/android/app/Activity#startactivity -[`PageRoute.fullscreenDialog`]: {{site.api}}/flutter/widgets/PageRoute-class.html +[`Navigator.push()`]: {{site.api}}flutter/widgets/Navigator/push.html +[`startActivity()`]: {{site.android-dev}}reference/kotlin/android/app/Activity#startactivity +[`PageRoute.fullscreenDialog`]: {{site.api}}flutter/widgets/PageRoute-class.html ### Platform-specific transition details @@ -213,9 +213,9 @@ Flutter 内置的 [`CupertinoNavigationBar`][] -[`ZoomPageTransitionsBuilder`]: {{site.api}}/flutter/material/ZoomPageTransitionsBuilder-class.html -[`CupertinoNavigationBar`]: {{site.api}}/flutter/cupertino/CupertinoNavigationBar-class.html -[`CupertinoSliverNavigationBar`]: {{site.api}}/flutter/cupertino/CupertinoSliverNavigationBar-class.html +[`ZoomPageTransitionsBuilder`]: {{site.api}}flutter/material/ZoomPageTransitionsBuilder-class.html +[`CupertinoNavigationBar`]: {{site.api}}flutter/cupertino/CupertinoNavigationBar-class.html +[`CupertinoSliverNavigationBar`]: {{site.api}}flutter/cupertino/CupertinoSliverNavigationBar-class.html ### Back navigation @@ -254,7 +254,7 @@ an edge swipe gesture can be used to pop the top route. -[`WidgetsApp`]: {{site.api}}/flutter/widgets/WidgetsApp-class.html +[`WidgetsApp`]: {{site.api}}flutter/widgets/WidgetsApp-class.html ## Scrolling @@ -354,8 +354,8 @@ On **iOS**, scrolling past the edge of a scrollable -[overscroll glow indicator]: {{site.api}}/flutter/widgets/GlowingOverscrollIndicator-class.html -[overscrolls]: {{site.api}}/flutter/widgets/BouncingScrollPhysics-class.html +[overscroll glow indicator]: {{site.api}}flutter/widgets/GlowingOverscrollIndicator-class.html +[overscrolls]: {{site.api}}flutter/widgets/BouncingScrollPhysics-class.html ### Momentum @@ -468,7 +468,7 @@ You can see widget-specific examples in the -[default theme]: {{site.repo.flutter}}/blob/main/packages/flutter/lib/src/cupertino/text_theme.dart +[default theme]: {{site.repo.flutter}}blob/main/packages/flutter/lib/src/cupertino/text_theme.dart ## Iconography @@ -510,7 +510,7 @@ has a stem/shaft on Android. The material library also provides a set of platform-adaptive icons through [`Icons.adaptive`][]. -[`Icons.adaptive`]: {{site.api}}/flutter/material/PlatformAdaptiveIcons-class.html +[`Icons.adaptive`]: {{site.api}}flutter/material/PlatformAdaptiveIcons-class.html Material 也通过 [`Icons.adaptive`][] 提供了一系列根据平台自适应的图标。 @@ -789,7 +789,7 @@ Your feedback is welcomed on [issue #8427][8427]. iOS 上提供自然且亮眼的体验的初步提议。 欢迎你对问题 [issue #8427][8427] 提出反馈。 -[8427]: {{site.repo.this}}/issues/8427 +[8427]: {{site.repo.this}}issues/8427 ### Widgets with .adaptive() constructors @@ -822,11 +822,11 @@ Therefore, we recommend that you follow platform conventions. |  Checkbox in Material 3
`Checkbox`| Checkbox in HIG
`CupertinoCheckbox`|[`Checkbox.adaptive()`][]| |Radio in Material 3
`Radio`|Radio in HIG
`CupertinoRadio`|[`Radio.adaptive()`][]| -[`Checkbox.adaptive()`]: {{site.api}}/flutter/material/Checkbox/Checkbox.adaptive.html -[`Radio.adaptive()`]: {{site.api}}/flutter/material/Radio/Radio.adaptive.html -[`Switch.adaptive()`]: {{site.api}}/flutter/material/Switch/Switch.adaptive.html -[`Slider.adaptive()`]: {{site.api}}/flutter/material/Slider/Slider.adaptive.html -[`CircularProgressIndicator.adaptive()`]: {{site.api}}/flutter/material/CircularProgressIndicator/CircularProgressIndicator.adaptive.html +[`Checkbox.adaptive()`]: {{site.api}}flutter/material/Checkbox/Checkbox.adaptive.html +[`Radio.adaptive()`]: {{site.api}}flutter/material/Radio/Radio.adaptive.html +[`Switch.adaptive()`]: {{site.api}}flutter/material/Switch/Switch.adaptive.html +[`Slider.adaptive()`]: {{site.api}}flutter/material/Slider/Slider.adaptive.html +[`CircularProgressIndicator.adaptive()`]: {{site.api}}flutter/material/CircularProgressIndicator/CircularProgressIndicator.adaptive.html ### Top app bar and navigation bar @@ -913,9 +913,9 @@ additional code samples and a further explanation in 你可以在 [有关应用栏适配的 GitHub 讨论中][appbar-post] 查看其他代码示例和进一步说明。 -[mat-appbar]: {{site.material}}/components/top-app-bar/overview -[hig-appbar]: {{site.apple-dev}}/design/human-interface-guidelines/components/navigation-and-search/navigation-bars/ -[appbar-post]: {{site.repo.uxr}}/discussions/93 +[mat-appbar]: {{site.material}}components/top-app-bar/overview +[hig-appbar]: {{site.apple-dev}}design/human-interface-guidelines/components/navigation-and-search/navigation-bars/ +[appbar-post]: {{site.repo.uxr}}discussions/93 ### Bottom navigation bars @@ -1010,8 +1010,8 @@ Scaffold( )); ``` -[mat-navbar]: {{site.material}}/components/navigation-bar/overview -[hig-tabbar]: {{site.apple-dev}}/design/human-interface-guidelines/components/navigation-and-search/tab-bars/ +[mat-navbar]: {{site.material}}components/navigation-bar/overview +[hig-tabbar]: {{site.apple-dev}}design/human-interface-guidelines/components/navigation-and-search/tab-bars/ ### Text fields @@ -1094,9 +1094,9 @@ You can leave feedback or ask questions in the discussion. 请查看 [有关文本字段的 GitHub 讨论][text-field-post]。 你可以在讨论中留下反馈或提出问题。 -[text-field-post]: {{site.repo.uxr}}/discussions/95 -[m3-text-field]: {{site.material}}/components/text-fields/overview -[hig-text-field]: {{site.apple-dev}}/design/human-interface-guidelines/text-fields +[text-field-post]: {{site.repo.uxr}}discussions/95 +[m3-text-field]: {{site.material}}components/text-fields/overview +[hig-text-field]: {{site.apple-dev}}design/human-interface-guidelines/text-fields ### Alert dialog @@ -1190,6 +1190,6 @@ You can leave feedback or ask questions in the discussion. 请查看 [有关对话框适配的 GitHub 讨论][alert-post]。 你可以在讨论中留下反馈或提出问题。 -[hig-alert]: {{site.apple-dev}}/design/human-interface-guidelines/components/presentation/alerts/ -[alert-post]: {{site.repo.uxr}}/discussions/92 -[m3-dialog]: {{site.material}}/components/dialogs/overview +[hig-alert]: {{site.apple-dev}}design/human-interface-guidelines/components/presentation/alerts/ +[alert-post]: {{site.repo.uxr}}discussions/92 +[m3-dialog]: {{site.material}}components/dialogs/overview diff --git a/src/content/platform-integration/platform-channels.md b/src/content/platform-integration/platform-channels.md index a0e401fb97..cf09eeab06 100644 --- a/src/content/platform-integration/platform-channels.md +++ b/src/content/platform-integration/platform-channels.md @@ -105,8 +105,8 @@ Flutter 框架自动为你处理的平台适配行为。 ::: -[`defaultTargetPlatform`]: {{site.api}}/flutter/foundation/defaultTargetPlatform.html -[pigeon]: {{site.pub-pkg}}/pigeon +[`defaultTargetPlatform`]: {{site.api}}flutter/foundation/defaultTargetPlatform.html +[pigeon]: {{site.pub-pkg}}pigeon ## Architectural overview: platform channels {:#architecture} @@ -1790,27 +1790,27 @@ DispatchQueue.main.async { } ``` -[`BasicMessageChannel`]: {{site.api}}/flutter/services/BasicMessageChannel-class.html -[`BinaryCodec`]: {{site.api}}/flutter/services/BinaryCodec-class.html -[block]: {{site.apple-dev}}/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html -[`cloud_firestore`]: {{site.github}}/firebase/flutterfire/blob/master/packages/cloud_firestore/cloud_firestore_platform_interface/lib/src/method_channel/utils/firestore_message_codec.dart -[`dart:html` library]: {{site.dart.api}}/dart-html/dart-html-library.html +[`BasicMessageChannel`]: {{site.api}}flutter/services/BasicMessageChannel-class.html +[`BinaryCodec`]: {{site.api}}flutter/services/BinaryCodec-class.html +[block]: {{site.apple-dev}}library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html +[`cloud_firestore`]: {{site.github}}firebase/flutterfire/blob/master/packages/cloud_firestore/cloud_firestore_platform_interface/lib/src/method_channel/utils/firestore_message_codec.dart +[`dart:html` library]: {{site.dart.api}}dart-html/dart-html-library.html [developing packages]: /packages-and-plugins/developing-packages [plugins]: /packages-and-plugins/developing-packages#plugin -[dispatch queue]: {{site.apple-dev}}/documentation/dispatch/dispatchqueue -[`/examples/platform_channel/`]: {{site.repo.flutter}}/tree/main/examples/platform_channel -[`/examples/platform_channel_swift/`]: {{site.repo.flutter}}/tree/main/examples/platform_channel_swift -[JS interoperability]: {{site.dart-site}}/web/js-interop -[`JSONMessageCodec`]: {{site.api}}/flutter/services/JSONMessageCodec-class.html -[`MethodChannel`]: {{site.api}}/flutter/services/MethodChannel-class.html -[`MethodChannelAndroid`]: {{site.api}}/javadoc/io/flutter/plugin/common/MethodChannel.html -[`MethodChanneliOS`]: {{site.api}}/ios-embedder/interface_flutter_method_channel.html +[dispatch queue]: {{site.apple-dev}}documentation/dispatch/dispatchqueue +[`/examples/platform_channel/`]: {{site.repo.flutter}}tree/main/examples/platform_channel +[`/examples/platform_channel_swift/`]: {{site.repo.flutter}}tree/main/examples/platform_channel_swift +[JS interoperability]: {{site.dart-site}}web/js-interop +[`JSONMessageCodec`]: {{site.api}}flutter/services/JSONMessageCodec-class.html +[`MethodChannel`]: {{site.api}}flutter/services/MethodChannel-class.html +[`MethodChannelAndroid`]: {{site.api}}javadoc/io/flutter/plugin/common/MethodChannel.html +[`MethodChanneliOS`]: {{site.api}}ios-embedder/interface_flutter_method_channel.html [Platform adaptations]: /platform-integration/platform-adaptations [publishing packages]: /packages-and-plugins/developing-packages#publish -[`quick_actions`]: {{site.pub}}/packages/quick_actions +[`quick_actions`]: {{site.pub-pkg}}quick_actions [section on threading]: #channels-and-platform-threading -[`StandardMessageCodec`]: {{site.api}}/flutter/services/StandardMessageCodec-class.html -[`StringCodec`]: {{site.api}}/flutter/services/StringCodec-class.html -[the main thread]: {{site.apple-dev}}/documentation/uikit?language=objc -[the UI thread]: {{site.android-dev}}/guide/components/processes-and-threads#Threads +[`StandardMessageCodec`]: {{site.api}}flutter/services/StandardMessageCodec-class.html +[`StringCodec`]: {{site.api}}flutter/services/StringCodec-class.html +[the main thread]: {{site.apple-dev}}documentation/uikit?language=objc +[the UI thread]: {{site.android-dev}}guide/components/processes-and-threads#Threads [sending structured typesafe messages]: #pigeon diff --git a/src/content/platform-integration/web/bootstrapping.md b/src/content/platform-integration/web/bootstrapping.md index ad729462b3..96f698ec7b 100644 --- a/src/content/platform-integration/web/bootstrapping.md +++ b/src/content/platform-integration/web/bootstrapping.md @@ -232,7 +232,7 @@ _flutter.loader.load({ For a more practical example using CSS animations, see the [initialization code][gallery-init] for the Flutter Gallery. -[gallery-init]: {{site.repo.gallery-archive}}/blob/main/web/index.html +[gallery-init]: {{site.repo.gallery-archive}}blob/main/web/index.html ## Upgrading an older project diff --git a/src/content/platform-integration/web/building.md b/src/content/platform-integration/web/building.md index 9bbce8181d..d4f6d7e411 100644 --- a/src/content/platform-integration/web/building.md +++ b/src/content/platform-integration/web/building.md @@ -66,7 +66,7 @@ you need the following software: 以及在 IDE 中重载你的 Web 应用。 查看 [编辑工具设定][setting up an editor] 了解更多。 -[Android Studio]: {{site.android-dev}}/studio +[Android Studio]: {{site.android-dev}}studio [IntelliJ IDEA]: https://www.jetbrains.com/idea/ [Visual Studio Code]: https://code.visualstudio.com/ @@ -285,10 +285,10 @@ $ flutter config --enable-web [Build and release a web app]: /deployment/web [creating a new Flutter project]: /get-started/test-drive -[dart2js]: {{site.dart-site}}/tools/dart2js +[dart2js]: {{site.dart-site}}tools/dart2js [desktop]: /platform-integration/desktop -[development compiler]: {{site.dart-site}}/tools/dartdevc -[file an issue]: {{site.repo.flutter}}/issues/new?title=[web]:+%3Cdescribe+issue+here%3E&labels=%E2%98%B8+platform-web&body=Describe+your+issue+and+include+the+command+you%27re+running,+flutter_web%20version,+browser+version +[development compiler]: {{site.dart-site}}tools/dartdevc +[file an issue]: {{site.repo.flutter}}issues/new?title=[web]:+%3Cdescribe+issue+here%3E&labels=%E2%98%B8+platform-web&body=Describe+your+issue+and+include+the+command+you%27re+running,+flutter_web%20version,+browser+version [install the Flutter and Dart plugins]: /get-started/editor [setting up an editor]: /get-started/editor [web FAQ]: /platform-integration/web/faq diff --git a/src/content/platform-integration/web/faq.md b/src/content/platform-integration/web/faq.md index e9c731b602..b3f296133a 100644 --- a/src/content/platform-integration/web/faq.md +++ b/src/content/platform-integration/web/faq.md @@ -292,27 +292,27 @@ Not currently. 目前还不行。 -[Analyzing performance]: {{site.developers}}/web/tools/chrome-devtools/evaluate-performance +[Analyzing performance]: {{site.developers}}web/tools/chrome-devtools/evaluate-performance [building a web app with Flutter]: /platform-integration/web/building -[Chrome DevTools]: {{site.developers}}/web/tools/chrome-devtools +[Chrome DevTools]: {{site.developers}}web/tools/chrome-devtools [Creating responsive apps]: /ui/adaptive-responsive [Debugging]: /tools/devtools/debugger -[file an issue]: {{site.repo.flutter}}/issues/new?title=[web]:+%3Cdescribe+issue+here%3E&labels=%E2%98%B8+platform-web&body=Describe+your+issue+and+include+the+command+you%27re+running,+flutter_web%20version,+browser+version +[file an issue]: {{site.repo.flutter}}issues/new?title=[web]:+%3Cdescribe+issue+here%3E&labels=%E2%98%B8+platform-web&body=Describe+your+issue+and+include+the+command+you%27re+running,+flutter_web%20version,+browser+version [Flutter DevTools]: /tools/devtools/overview -[Generating event timeline]: {{site.developers}}/web/tools/chrome-devtools/evaluate-performance/performance-reference -[`http`]: {{site.pub}}/packages/http +[Generating event timeline]: {{site.developers}}web/tools/chrome-devtools/evaluate-performance/performance-reference +[`http`]: {{site.pub-pkg}}http [`iframe`]: https://html.com/tags/iframe/ -[isolates]: {{site.dart-site}}/guides/language/concurrency -[Issue 32248]: {{site.repo.flutter}}/issues/32248 +[isolates]: {{site.dart-site}}guides/language/concurrency +[Issue 32248]: {{site.repo.flutter}}issues/32248 [Logging]: /tools/devtools/logging [Preparing a web app for release]: /deployment/web [Running Flutter inspector]: /tools/devtools/inspector -[Upgrading from package:flutter_web to the Flutter SDK]: {{site.repo.flutter}}/wiki/Upgrading-from-package:flutter_web-to-the-Flutter-SDK +[Upgrading from package:flutter_web to the Flutter SDK]: {{site.repo.flutter}}wiki/Upgrading-from-package:flutter_web-to-the-Flutter-SDK [widget tests]: /testing/overview#widget-tests [Web support for Flutter]: /platform-integration/web [web workers]: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers [run your web apps in any supported browser]: /platform-integration/web/building#create-and-run [Integration testing]: /testing/integration-tests#test-in-a-web-browser -[documentation for conditional imports]: {{site.dart-site}}/guides/libraries/create-library-packages#conditionally-importing-and-exporting-library-files -[roadmap]: {{site.github}}/flutter/flutter/wiki/Roadmap#web-platform +[documentation for conditional imports]: {{site.dart-site}}guides/libraries/create-library-packages#conditionally-importing-and-exporting-library-files +[roadmap]: {{site.repo.flutter}}wiki/Roadmap#web-platform [space_hawaii]: https://alien-hawaii-2024.web.app/ diff --git a/src/content/platform-integration/web/index.md b/src/content/platform-integration/web/index.md index fa9077b23e..0d1831e52f 100644 --- a/src/content/platform-integration/web/index.md +++ b/src/content/platform-integration/web/index.md @@ -136,7 +136,7 @@ The following resources can help you get started: [Creating responsive apps]: /ui/adaptive-responsive [Discord]: https://discordapp.com/invite/yeZ6s7k [file an issue]: https://goo.gle/flutter_web_issue -[Wonderous app]: {{site.wonderous}}/web +[Wonderous app]: {{site.wonderous}}web [Preparing an app for web release]: /deployment/web [Progressive Web Application]: https://web.dev/progressive-web-apps/ [web FAQ]: /platform-integration/web/faq diff --git a/src/content/platform-integration/web/initialization.md b/src/content/platform-integration/web/initialization.md index e646f7384d..c1d922d3fc 100644 --- a/src/content/platform-integration/web/initialization.md +++ b/src/content/platform-integration/web/initialization.md @@ -10,7 +10,7 @@ This page describes APIs that are available in the [`stable`][] channel in Flutter 3.21 or earlier. For recommended app initialization in Flutter 3.22 or later, see the [Flutter web app initialization][] page. ::: -[`stable`]: {{site.github}}/flutter/flutter/wiki/flutter-build-release-channels#stable +[`stable`]: {{site.repo.flutter}}wiki/flutter-build-release-channels#stable [Flutter web app initialization]: /platform-integration/web/bootstrapping @@ -227,7 +227,7 @@ You can add any of the following optional parameters: -[jsflutterconfig-source]: {{site.repo.engine}}/blob/main/lib/web_ui/lib/src/engine/configuration.dart#L247-L259 +[jsflutterconfig-source]: {{site.repo.engine}}blob/main/lib/web_ui/lib/src/engine/configuration.dart#L247-L259 [web-renderers]: /platform-integration/web/renderers :::note @@ -283,7 +283,7 @@ file of the web engine. 请查阅 web 引擎 [`configuration.dart`][config-dart] 文件中, 文档的 **"Runtime parameters"** 部分。 -[config-dart]: {{site.repo.engine}}/blob/main/lib/web_ui/lib/src/engine/configuration.dart#L174 +[config-dart]: {{site.repo.engine}}blob/main/lib/web_ui/lib/src/engine/configuration.dart#L174 #### Skipping this step @@ -357,7 +357,7 @@ see the [initialization code][gallery-init] for the Flutter Gallery. 更多关于实用的 CSS 动画示例, 请查阅 Flutter Gallery 的 [初始化代码][gallery-init]。 -[gallery-init]: {{site.repo.gallery-archive}}/blob/main/web/index.html +[gallery-init]: {{site.repo.gallery-archive}}blob/main/web/index.html ## Upgrading an older project diff --git a/src/content/platform-integration/web/renderers.md b/src/content/platform-integration/web/renderers.md index 6cd0cb354e..484db8758e 100644 --- a/src/content/platform-integration/web/renderers.md +++ b/src/content/platform-integration/web/renderers.md @@ -189,5 +189,5 @@ flutter run -d chrome --web-renderer html --profile ``` [canvaskit]: https://skia.org/docs/user/modules/canvaskit/ -[file an issue]: {{site.repo.flutter}}/issues/new?title=[web]:+%3Cdescribe+issue+here%3E&labels=%E2%98%B8+platform-web&body=Describe+your+issue+and+include+the+command+you%27re+running,+flutter_web%20version,+browser+version +[file an issue]: {{site.repo.flutter}}issues/new?title=[web]:+%3Cdescribe+issue+here%3E&labels=%E2%98%B8+platform-web&body=Describe+your+issue+and+include+the+command+you%27re+running,+flutter_web%20version,+browser+version [web-app-init]: /platform-integration/web/initialization diff --git a/src/content/platform-integration/web/wasm.md b/src/content/platform-integration/web/wasm.md index d1ecf64c4a..1d4118c201 100644 --- a/src/content/platform-integration/web/wasm.md +++ b/src/content/platform-integration/web/wasm.md @@ -24,9 +24,9 @@ applications for the web. section to learn more. ::: -[`stable`]: {{site.github}}/flutter/flutter/wiki/flutter-build-release-channels#stable -[`package:web`]: {{site.pub-pkg}}/web -[`dart:js_interop`]: {{site.dart.api}}/{{site.dart.sdk.channel}}/dart-js_interop +[`stable`]: {{site.repo.flutter}}wiki/flutter-build-release-channels#stable +[`package:web`]: {{site.pub-pkg}}web +[`dart:js_interop`]: {{site.dart.api}}{{site.dart.sdk.channel}}/dart-js_interop ## Background @@ -38,7 +38,7 @@ Note that Chrome on iOS uses WebKit, which doesn't yet [support WasmGC][]. Firefox announced stable support for WasmGC in Firefox 120, but currently doesn't work due to a [known limitation](#known-limitations). -[WasmGC]: {{site.github}}/WebAssembly/gc/tree/main/proposals/gc +[WasmGC]: {{site.github}}WebAssembly/gc/tree/main/proposals/gc [Chromium and V8]: https://chromestatus.com/feature/6062715726462976 [support WasmGC]: https://bugs.webkit.org/show_bug.cgi?id=247394 [issue]: https://bugzilla.mozilla.org/show_bug.cgi?id=1788206 @@ -46,7 +46,7 @@ but currently doesn't work due to a [known limitation](#known-limitations). ## Try it out To try a pre-built Flutter web app using Wasm, check out the -[Wonderous demo app](https://wonderous.app/web/). +[Wonderous demo app]({{site.wonderous}}web/). To experiment with Wasm in your own apps, use the following steps. @@ -132,7 +132,7 @@ To learn more about these headers, check out ### Serving Wasm locally If you don't have a local HTTP server installed, you can use -the [`dhttpd` package]({{site.pub-pkg}}/dhttpd): +the [`dhttpd` package]({{site.pub-pkg}}dhttpd): ```console flutter pub global activate dhttpd @@ -229,9 +229,9 @@ Context: The unavailable library 'dart:html' is imported through these packages: web_plugin_registrant.dart => package:flutter_web_plugins => dart:html ``` -[`package:url_launcher`]: {{site.pub-pkg}}/url_launcher -[`package:web` migration guide]: {{site.dart-site}}/interop/js-interop/package-web -[JS interop]: {{site.dart-site}}/interop/js-interop +[`package:url_launcher`]: {{site.pub-pkg}}url_launcher +[`package:web` migration guide]: {{site.dart-site}}interop/js-interop/package-web +[JS interop]: {{site.dart-site}}interop/js-interop ### Only build support diff --git a/src/content/platform-integration/web/web-images.md b/src/content/platform-integration/web/web-images.md index c4aa3839d4..b155693045 100644 --- a/src/content/platform-integration/web/web-images.md +++ b/src/content/platform-integration/web/web-images.md @@ -18,14 +18,14 @@ Web 支持使用标准的 [`Image`][] 组件来展示图片。 因为它需要以安全的方式运行未信任的代码。 本页面内容解释了这些限制,并提供一些解决方法。 -[`Image`]: {{site.api}}/flutter/widgets/Image-class.html +[`Image`]: {{site.api}}flutter/widgets/Image-class.html :::note For information on how to optimize web loading speed, check out the (free) article on Medium, [Best practices for optimizing Flutter web loading speed][article]. -[article]: {{site.flutter-medium}}/best-practices-for-optimizing-flutter-web-loading-speed-7cc0df14ce5c +[article]: {{site.flutter-medium}}best-practices-for-optimizing-flutter-web-loading-speed-7cc0df14ce5c ::: @@ -54,7 +54,7 @@ Flutter 提供了 [`Image`][] 组件以及底层的 [`dart:ui/Image`][] 类来 `Image` 组件的功能足够满足大部分使用场景。 `dart:ui/Image` 类可用于需要精细控制图片的场景。 -[`dart:ui/Image`]: {{site.api}}/flutter/dart-ui/Image-class.html +[`dart:ui/Image`]: {{site.api}}flutter/dart-ui/Image-class.html ### Images on the web @@ -217,10 +217,10 @@ and is therefore subject to the CORS policy. CanvasKit 完全实现了 Flutter 中的图片 API。 但它需要访问图片的像素信息,因此受制于 CORS 政策。 -[`Image.toByteData`]: {{site.api}}/flutter/dart-ui/Image/toByteData.html -[`OffsetLayer.toImage`]: {{site.api}}/flutter/rendering/OffsetLayer/toImage.html -[`Scene.toImage`]: {{site.api}}/flutter/dart-ui/Scene/toImage.html -[`Codec.getNextFrame`]: {{site.api}}/flutter/dart-ui/Codec/getNextFrame.html +[`Image.toByteData`]: {{site.api}}flutter/dart-ui/Image/toByteData.html +[`OffsetLayer.toImage`]: {{site.api}}flutter/rendering/OffsetLayer/toImage.html +[`Scene.toImage`]: {{site.api}}flutter/dart-ui/Scene/toImage.html +[`Codec.getNextFrame`]: {{site.api}}flutter/dart-ui/Codec/getNextFrame.html ## Solutions @@ -244,9 +244,9 @@ in both HTML and CanvasKit modes. [`Image.asset`][] 和 [`Image.network`][] 来展示。 [asset]: /ui/assets/assets-and-images -[`Image.memory`]: {{site.api}}/flutter/widgets/Image/Image.memory.html -[`Image.asset`]: {{site.api}}/flutter/widgets/Image/Image.asset.html -[`Image.network`]: {{site.api}}/flutter/widgets/Image/Image.network.html +[`Image.memory`]: {{site.api}}flutter/widgets/Image/Image.memory.html +[`Image.asset`]: {{site.api}}flutter/widgets/Image/Image.asset.html +[`Image.network`]: {{site.api}}flutter/widgets/Image/Image.network.html ### Cross-origin images @@ -278,7 +278,7 @@ header in the `firebase.json` file. 例如:Firebase 站点托管允许在 `firebase.json` 文件中, [指定一个自定义的][custom-header] `Access-Control-Allow-Origin` 头。 -[custom-header]: {{site.firebase}}/docs/hosting/full-config#headers +[custom-header]: {{site.firebase}}docs/hosting/full-config#headers #### Lack control over the image server? Use a CORS proxy. @@ -313,7 +313,7 @@ Examples: 使用 [Firebase Functions][]。 [CloudFlare Workers]: https://developers.cloudflare.com/workers/examples/cors-header-proxy -[Firebase Functions]: {{site.github}}/7kfpun/cors-proxy +[Firebase Functions]: {{site.github}}7kfpun/cors-proxy #### Use `` in a platform view. @@ -330,5 +330,5 @@ Flutter 支持在应用中使用 [`HtmlElementView`][] 嵌入 HTML。 但是,一定要记住,此方法也会受到 [Web 中的 Flutter 渲染器][Flutter renderers on the web] 一节中提到的限制。 -[`HtmlElementView`]: {{site.api}}/flutter/widgets/HtmlElementView-class.html +[`HtmlElementView`]: {{site.api}}flutter/widgets/HtmlElementView-class.html [Flutter renderers on the web]: #flutter-renderers-on-the-web diff --git a/src/content/platform-integration/windows/building.md b/src/content/platform-integration/windows/building.md index 929696da7e..4f74c00f41 100644 --- a/src/content/platform-integration/windows/building.md +++ b/src/content/platform-integration/windows/building.md @@ -45,18 +45,18 @@ providing idiomatic Dart access for the [Windows registry], More generally, many other [packages support Windows], including common packages such as [`url_launcher`], [`shared_preferences`], [`file_selector`], and [`path_provider`]. -[C interop using `dart:ffi`]: {{site.dart-site}}/guides/libraries/c-interop -[win32 package]: {{site.pub}}/packages/win32 -[Windows registry]: {{site.pub}}/packages/win32_registry -[gamepad support]: {{site.pub}}/packages/win32_gamepad -[biometric storage]: {{site.pub}}/packages/biometric_storage -[taskbar integration]: {{site.pub}}//packages/windows_taskbar -[serial port access]: {{site.pub}}/packages/serial_port_win32 -[packages support Windows]: {{site.pub}}/packages?q=platform%3Awindows -[`url_launcher`]: {{site.pub-pkg}}/url_launcher -[`shared_preferences`]: {{site.pub-pkg}}/shared_preferences -[`file_selector`]: {{site.pub-pkg}}/file_selector -[`path_provider`]: {{site.pub-pkg}}/path_provider +[C interop using `dart:ffi`]: {{site.dart-site}}guides/libraries/c-interop +[win32 package]: {{site.pub-pkg}}win32 +[Windows registry]: {{site.pub-pkg}}win32_registry +[gamepad support]: {{site.pub-pkg}}win32_gamepad +[biometric storage]: {{site.pub-pkg}}biometric_storage +[taskbar integration]: {{site.pub}}/packages/windows_taskbar +[serial port access]: {{site.pub-pkg}}serial_port_win32 +[packages support Windows]: {{site.pub-pkg}}?q=platform%3Awindows +[`url_launcher`]: {{site.pub-pkg}}url_launcher +[`shared_preferences`]: {{site.pub-pkg}}shared_preferences +[`file_selector`]: {{site.pub-pkg}}file_selector +[`path_provider`]: {{site.pub-pkg}}path_provider ## Supporting Windows UI guidelines @@ -80,10 +80,10 @@ the standard Windows title bar with a custom one that matches the rest of your app. [Fluent design system]: https://docs.microsoft.com/en-us/windows/apps/design/ -[fluent_ui]: {{site.pub}}/packages/fluent_ui +[fluent_ui]: {{site.pub-pkg}}fluent_ui [Flutter Favorite]: /packages-and-plugins/favorites -[fluentui_system_icons]: {{site.pub}}/packages/fluentui_system_icons -[bitsdojo_window]: {{site.pub}}/packages/bitsdojo_window +[fluentui_system_icons]: {{site.pub-pkg}}fluentui_system_icons +[bitsdojo_window]: {{site.pub-pkg}}bitsdojo_window ## Customizing the Windows host application @@ -217,8 +217,8 @@ from a Flutter desktop app, see the [Desktop Photo Search][] sample. [MSIX]: https://docs.microsoft.com/en-us/windows/msix/overview -[msix package]: {{site.pub}}/packages/msix -[Desktop Photo Search]: {{site.repo.samples}}/tree/main/desktop_photo_search +[msix package]: {{site.pub-pkg}}msix +[Desktop Photo Search]: {{site.repo.samples}}tree/main/desktop_photo_search #### Create a self-signed .pfx certificate for local testing @@ -311,4 +311,4 @@ your Flutter desktop app for Windows, check out the step-by-step [Windows packaging guide][windows_packaging_guide]. [deployment example walkthroughs]: https://docs.microsoft.com/en-us/cpp/windows/deployment-examples -[windows_packaging_guide]: https://medium.com/@fluttergems/packaging-and-distributing-flutter-desktop-apps-the-missing-guide-part-2-windows-0b468d5e9e70 +[windows_packaging_guide]: {{site.medium}}@fluttergems/packaging-and-distributing-flutter-desktop-apps-the-missing-guide-part-2-windows-0b468d5e9e70 diff --git a/src/content/platform-integration/windows/extern_win.md b/src/content/platform-integration/windows/extern_win.md index b9f7cecc8e..fc2c2060a8 100644 --- a/src/content/platform-integration/windows/extern_win.md +++ b/src/content/platform-integration/windows/extern_win.md @@ -38,4 +38,4 @@ LRESULT Window::Messagehandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ``` [documentation of this breaking change.]: /release/breaking-changes/win_lifecycle_process_function -[WidgetsBindingObserver.didChangeAppLifecycle]: {{site.api}}/flutter/widgets/WidgetsBindingObserver/didChangeAppLifecycleState.html +[WidgetsBindingObserver.didChangeAppLifecycle]: {{site.api}}flutter/widgets/WidgetsBindingObserver/didChangeAppLifecycleState.html diff --git a/src/content/posts/Flutter-io19.md b/src/content/posts/Flutter-io19.md index 23f02821fe..4947b8dca9 100644 --- a/src/content/posts/Flutter-io19.md +++ b/src/content/posts/Flutter-io19.md @@ -19,7 +19,7 @@ I/O 期间我们迎来 [Flutter 框架](https://flutter.dev/) 的一个重要里 ## 适用于所有屏幕的便携式界面框架 -![Flutter Mobile, Web, Desktop, and Embedded]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot5-release/flutter-platforms.png){:width="85%"} +![Flutter Mobile, Web, Desktop, and Embedded]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot5-release/flutter-platforms.png){:width="85%"} 毋庸置疑,高性能的便携式界面框架具有巨大的商业潜力。该框架可以通过单个代码库来为各种设备提供量身定制的出色体验。 @@ -33,7 +33,7 @@ I/O 期间我们迎来 [Flutter 框架](https://flutter.dev/) 的一个重要里 为了展示 Web 版 Flutter,我们与《纽约时报》合作构建了一个演示版本。《纽约时报》不仅是世界一流的新闻媒体,而且以设计纵横字谜等益智游戏而闻名。由于狂热的解谜玩家希望能在当时使用的任何设备上玩游戏,所以《纽约时报》的开发团队把目光转向 Flutter,将其作为满足读者需求的潜在解决方案。发现能够利用同一组代码访问网页给他们带来了巨大裨益。在 Google I/O 大会上,你可以率先了解他们最近更新的 [KENKEN 解谜游戏](https://www.nytimes.com/games/prototype/kenken)。该游戏利用同一组代码在 Android、iOS、Web、Mac 和 Chrome 操作系统上运行。 -![ken-gratulations puzzle]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot5-release/nyt-game.gif){:width="85%"} +![ken-gratulations puzzle]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot5-release/nyt-game.gif){:width="85%"} 以下是《纽约时报》解谜游戏执行总监 Eric von Coelln 对 Flutter 使用体验的看法: @@ -52,7 +52,7 @@ I/O 期间我们迎来 [Flutter 框架](https://flutter.dev/) 的一个重要里 在今年的 I/O 上,我们宣布推出一个尤其令人振奋的项目,即 [ML Kit 自定义图像分类器](http://github.com/firebase/mlkit-custom-image-classifier)。该工具利用 Flutter 和 Firebase 构建,可为创建自定义图像分类模型提供基于应用的简易工作流。你可以使用手机的摄像头收集训练数据、邀请他人为你的数据集贡献素材、触发模型训练以及使用训练过的模型,这些操作都可以在同一个应用中实现。 -![Flutter ML Kit: create datasets, collaborate to collect data, train model, run inference]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot5-release/flutter-mlkit.png){:width="85%"} +![Flutter ML Kit: create datasets, collaborate to collect data, train model, run inference]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot5-release/flutter-mlkit.png){:width="85%"} Flutter 越来越受欢迎,使用人数也越来越多。[有需求的客户](https://flutter.dev/showcase)不断增加,其中包括 eBay、Sonos、Square、Capital One、Alibaba 和 Tencent。这些公司正在利用 Flutter 开发应用,并从中发现乐趣!以下是 eBay 的高级开发者 Larry McKenzie 对 Flutter 的看法: @@ -72,7 +72,7 @@ Flutter 目前也被用于桌面平台。在过去几个月,我们一直在研 Smart Display 操作系统或许是 Flutter 目前已运行的最常见嵌入式平台之一,其为类似于 Google Home Hub 的设备提供技术支持。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot5-release/flutter-google-home-hub.png){:width="85%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot5-release/flutter-google-home-hub.png){:width="85%"} 目前在 Google 中,Smart Display 平台的部分 Google 自建功能由 Flutter 提供技术支持。Google 助理团队很高兴能够在接下来的几个月继续扩展通过 Flutter 为 Smart Display 构建的各项功能;而今年的目标是利用 Flutter 来驱动整个系统界面。 diff --git a/src/content/posts/a-new-version-fluttercn-website-released.md b/src/content/posts/a-new-version-fluttercn-website-released.md index 4308b864d9..b44b4945b8 100644 --- a/src/content/posts/a-new-version-fluttercn-website-released.md +++ b/src/content/posts/a-new-version-fluttercn-website-released.md @@ -3,11 +3,11 @@ title: 新版 Flutter 中文开发者网站发布 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/12/VAmVaC.jpg){:max-width="90%"} +![]({{site.flutter-files-cn}}posts/images/2021/12/VAmVaC.jpg){:max-width="90%"} Develop as One,2021 年 Google 开发者大会 (Google Developer Summit) 于上个月顺利举办,包含众多最新 Google 技术产品更新的线上演讲,干货满满。 -![]({{site.flutter-files-cn}}/posts/images/2021/12/QIL1S6.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/12/QIL1S6.jpg) 在 11 月 16 日上午进行的主题演讲中提到,目前国内的开发者数量有 500 万以上,约占全球开发者数量的五分之一,中国的游戏开发商在头部的海外游戏市场份额超过 23%,排名第一,应用和游戏开发仍是一个值得持续投入并且拥有更广阔前景空间的市场。 @@ -26,12 +26,12 @@ DartPad 是一个开源的线上编译和运行 Flutter / Dart 代码的平台 Pub.dev 上的 Dart package 和插件是 Flutter 生态中非常重要的组成部分,这些开箱即用的插件可以大大提高开发效率。今天,我们 **正式为 DartPad 加入了 package 的支持**,第一阶段我们支持了一组比较流行的 package,可以在 DartPad 右下角的图标上看到: -![DartPad 支持导入 package 了]({{site.flutter-files-cn}}/posts/images/2021/12/pMrooB.jpg) +![DartPad 支持导入 package 了]({{site.flutter-files-cn}}posts/images/2021/12/pMrooB.jpg) 如果你想提名更多希望我们支持的 package,可以在 DartPad 的 Issue 区提出或者点赞让我们看到:https://github.com/dart-lang/dart-pad/issues 与此同时,由中国 Flutter 社区维护的 DartPad.cn 也支持了这项新的功能,国内的开发者可以使用 DartPad.cn 访问和体验。 -![Flutter 中文开发者网站 - flutter.cn]({{site.flutter-files-cn}}/posts/images/2021/12/VAmVaC.jpg) +![Flutter 中文开发者网站 - flutter.cn]({{site.flutter-files-cn}}posts/images/2021/12/VAmVaC.jpg) Flutter 网站也在今天正式发布全新的设计,新版的网站更专注从视觉和文字上突出 Flutter 的特性,包括在各种平台上使用 Flutter 构建应用的优势以及上手文档和参考资料、Flutter 开发的学习资料合集,也介绍了 Flutter 生态上的优势和强大的社区,还有关于通过 Flutter 盈利的教程和其他开发者的成功故事等。 diff --git a/src/content/posts/announcing-adobe-xd-support-for-flutter.md b/src/content/posts/announcing-adobe-xd-support-for-flutter.md index c16e969b98..6b9447dc24 100644 --- a/src/content/posts/announcing-adobe-xd-support-for-flutter.md +++ b/src/content/posts/announcing-adobe-xd-support-for-flutter.md @@ -14,13 +14,13 @@ Flutter 希望成为任你挥洒创意的画布。 在去年的 Flutter Interact 大会中,我们将焦点转向了那些使用 Flutter 进行探索和实验的创作者们。比如数字艺术家 Robert Felker,他使用 Flutter 通过生成算法 (generative algorithm) 构建了 [空灵的视觉效果和形式](https://v.youku.com/v_show/id_XNDQ2ODg0OTYxMg==.html)。我们还介绍了来自 [gskinner](https://flutter.gskinner.com/) 等创意机构的作品,他们用一件件充满创意的作品,展示了 Flutter 在表现形式方面的无限可能。另外,我们也了解到 Adobe 在 Flutter 方面的投入: 他们展示了一款 Adobe XD 插件的早期原型,让大家可以直接从 XD 中导出 Flutter 代码。 -![generative-artwork]({{site.flutter-files-cn}}/posts/flutter-cn/2020/announcing-adobe-xd-support-for-flutter/generative-artwork.png){:width="90%"} +![generative-artwork]({{site.flutter-files-cn}}posts/flutter-cn/2020/announcing-adobe-xd-support-for-flutter/generative-artwork.png){:width="90%"} △ Flutter 为创意提供了极富表现力的舞台,创造者可以尽情呈现优美、原生的体验,且不再受传统技术的束缚。(由 Flutter 绘制的生成艺术,Robert Felker 作品) 今天 **我们很高兴和 Adobe 共同宣布,Adobe XD Flutter 导出插件现在正式开放早期体验** ,欢迎大家踊跃参与测试。[Adobe XD](https://www.adobe.com/products/xd.html) 是一款 UI/UX 设计和协作工具,帮助团队创造和分享网站、应用、语音界面以及游戏等内容的设计方案。作为业界知名的 [Adobe Creative Cloud](https://www.adobe.com/creativecloud.html) 套件中的一员,XD 让创作者们可以将矢量绘图、文字、图像、小交互和动画资源共冶一炉,打造出可以交互的原型,来预览软件产品实际的运行效果。随着 Flutter 导出功能的加入,XD 原型现在可以在几分钟内转变成可用的 Flutter 代码,创意想法和产品开发的间隔被进一步缩短。Adobe XD 支持 Windows 和 macOS 系统,并且提供了[免费的入门计划](https://www.adobe.com/products/xd/compare-plans.html),方便大家快速上手。 -![flutter-plugin]({{site.flutter-files-cn}}/posts/flutter-cn/2020/announcing-adobe-xd-support-for-flutter/flutter-plugin.png){:width="90%"} +![flutter-plugin]({{site.flutter-files-cn}}posts/flutter-cn/2020/announcing-adobe-xd-support-for-flutter/flutter-plugin.png){:width="90%"} △ 使用插件即可轻松从 Adobe XD 导出到 Flutter @@ -34,7 +34,7 @@ Flutter 希望成为任你挥洒创意的画布。 要导出单个元素,只需选择你想导出至 Flutter 的单个 widget,然后点击 UI 面板中的 *复制所选项* ( *Copy Selected* ) 按钮。这会将元素对应的 Dart 代码复制到你的剪贴板中,你可以基于这些代码打造有状态或无状态的 widget: -![flutter-plugin]({{site.flutter-files-cn}}/posts/flutter-cn/2020/announcing-adobe-xd-support-for-flutter/export-demo.png){:width="90%"} +![flutter-plugin]({{site.flutter-files-cn}}posts/flutter-cn/2020/announcing-adobe-xd-support-for-flutter/export-demo.png){:width="90%"} △ 导出的代码可以整合进现有的项目中,而且更新时不需要调整其他文件 @@ -42,7 +42,7 @@ Flutter 希望成为任你挥洒创意的画布。 这个操作会在项目的 lib/ 子文件夹中创建一系列的类,你可以直接使用。你也可以继续调整 XD 原型,然后用 ⇧⌘F (在 Windows 上是 Ctrl+Shift+F) 再次导出,如果你在 Visual Studio Code 中打开了 Dart 的 "[在 Save Watcher 上使用热重载](https://dartcode.org/docs/settings/#dartpreviewhotreloadonsavewatcher)" 选项,那么当你重新导出 widget 时,你的应用将自动重新加载它们。 -![flutter-plugin]({{site.flutter-files-cn}}/posts/flutter-cn/2020/announcing-adobe-xd-support-for-flutter/live-demo.png){:width="90%"} +![flutter-plugin]({{site.flutter-files-cn}}posts/flutter-cn/2020/announcing-adobe-xd-support-for-flutter/live-demo.png){:width="90%"} △ 从 XD 快速转出代码的功能,使得从原型到应用之间的路径又多了一条 diff --git a/src/content/posts/announcing-codepen-support-for-flutter.md b/src/content/posts/announcing-codepen-support-for-flutter.md index b653a73036..e76fb4f331 100644 --- a/src/content/posts/announcing-codepen-support-for-flutter.md +++ b/src/content/posts/announcing-codepen-support-for-flutter.md @@ -46,7 +46,7 @@ CodePen 上的 Flutter 编辑器相当于激发创意表达与设计灵感的 " 而 DartPad 则更像是你的 "左脑", 它会在你需要快速测试想法或者用代码实现某个技术概念的时候发挥作用。 -![codepen-demo]({{site.flutter-files-cn}}/posts/flutter-cn/2020/announcing-codepen-support-for-flutter/codepen-demo.gif){:width="95%"} +![codepen-demo]({{site.flutter-files-cn}}posts/flutter-cn/2020/announcing-codepen-support-for-flutter/codepen-demo.gif){:width="95%"} ## CodePen 上的 Flutter 编辑器 @@ -64,7 +64,7 @@ CodePen 上的 Flutter 编辑器相当于激发创意表达与设计灵感的 " 右边则是 Flutter 网页的输出样式。 你只需用鼠标拖动素材边框,便可查看该设计的互动效果。 -![GooeyEdge-demo]({{site.flutter-files-cn}}/posts/flutter-cn/2020/announcing-codepen-support-for-flutter/Gooey-edge-animation.gif){:width="95%"} +![GooeyEdge-demo]({{site.flutter-files-cn}}posts/flutter-cn/2020/announcing-codepen-support-for-flutter/Gooey-edge-animation.gif){:width="95%"} 另外,你还可以对 Flutter 代码进行修改并查看相应的输出效果。 例如,如果我们把页面控制图标的颜色从 "白色" 改成 "蓝色" (第 326 行代码), @@ -72,13 +72,13 @@ CodePen 上的 Flutter 编辑器相当于激发创意表达与设计灵感的 " CodePen 会为你自动重新编译修改后的代码。 你只需更新一下代码,等待几秒钟,就可以看到新的输出。 -![页面控制图标的颜色变为蓝色]({{site.flutter-files-cn}}/posts/flutter-cn/2020/announcing-codepen-support-for-flutter/page-control-indicator.png){:width="95%"} +![页面控制图标的颜色变为蓝色]({{site.flutter-files-cn}}posts/flutter-cn/2020/announcing-codepen-support-for-flutter/page-control-indicator.png){:width="95%"} 接下来让我们看看如果出现语法错误会发生什么。 假设我不小心删除了第一行代码末尾的分号,编辑器会立即显示一条红色的警告信息, 提醒我代码中含有语法错误。这些警告信息可帮助你轻松地发现并更正错误。 -![出现语法错误时的警告信息]({{site.flutter-files-cn}}/posts/flutter-cn/2020/announcing-codepen-support-for-flutter/debug-codepen.png) +![出现语法错误时的警告信息]({{site.flutter-files-cn}}posts/flutter-cn/2020/announcing-codepen-support-for-flutter/debug-codepen.png) ## 社交功能 @@ -87,9 +87,9 @@ CodePen 最值得称道的就是其丰富的社交和社区功能。 你可以保存、收藏、添加到合集、分享至社交平台, 甚至可以通过复刻项目以创建自己的版本。 -![社交功能]({{site.flutter-files-cn}}/posts/flutter-cn/2020/announcing-codepen-support-for-flutter/social1.png){:width="90%"} +![社交功能]({{site.flutter-files-cn}}posts/flutter-cn/2020/announcing-codepen-support-for-flutter/social1.png){:width="90%"} -![社区分享]({{site.flutter-files-cn}}/posts/flutter-cn/2020/announcing-codepen-support-for-flutter/social2.png){:width="90%"} +![社区分享]({{site.flutter-files-cn}}posts/flutter-cn/2020/announcing-codepen-support-for-flutter/social2.png){:width="90%"} ## 上手体验 diff --git a/src/content/posts/announcing-dart-2-12.md b/src/content/posts/announcing-dart-2-12.md index 75b066a54d..63f1f75060 100644 --- a/src/content/posts/announcing-dart-2-12.md +++ b/src/content/posts/announcing-dart-2-12.md @@ -3,7 +3,7 @@ title: Dart 2.12 现已发布 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/03/6b1a0818de0a5.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/6b1a0818de0a5.png) *作者 / Michael Thomsen* @@ -15,7 +15,7 @@ Dart 2.12 现已发布,其中包含 [健全的空安全](https://dart.cn/null- 在详细了解健全空安全和 FFI 之前,我们先来讨论一下它们在哪些方面契合了我们对 Dart 平台的期望。编程语言往往有很多类似的功能,例如,很多语言都支持面向对象的编程或在 web 上运行。真正将各个语言区分开来的,是其独特的功能组合。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/6773481aed985.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/03/6773481aed985.jpg) Dart 具有横跨三个维度的独特功能组合: @@ -48,7 +48,7 @@ if (globals.platform.isMacOS) { 你发现错误了吗?由于 `version` 可能为空,所以 `major` 和 `minor` 也可能为空。如果单独检查此处代码,这一错误似乎并不难发现。但实际上,即使经过了严格的代码审查过程 (如 Flutter repo 所采用的代码审查流程),也总是难免有这样的漏网之鱼。在启用空安全后,静态分析能够立即捕捉到这一问题 (如下图)。你可以 [在 DartPad 中亲自上手体验](https://dartpad.dev/0e9797be7488d8ec6c3fca92b7f2740f?null_safety=true)。 -![△ IDE 中的分析结果]({{site.flutter-files-cn}}/posts/images/2021/03/7260c6d9d0a2a.png) +![△ IDE 中的分析结果]({{site.flutter-files-cn}}posts/images/2021/03/7260c6d9d0a2a.png) △ IDE 中的分析结果 @@ -90,7 +90,7 @@ int definitelyInt(int? aNullableInt) { 我们还添加了一个新的关键字,required。当一个命名的参数被标记为 required (在 Flutter widget API 中经常出现),而调用者忘记提供该参数时,就会发生如下分析错误: -![]({{site.flutter-files-cn}}/posts/images/2021/03/17e1a588495f7.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/17e1a588495f7.png) ### **渐进迁移至空安全** @@ -98,7 +98,7 @@ int definitelyInt(int? aNullableInt) { 为了帮助你将现有代码迁移至空安全,我们提供了迁移工具和 [迁移指南](https://dart.cn/null-safety/migration-guide)。该工具会首先分析你所有的代码,然后你可以交互式地查看工具推断出的可空属性,如果你不同意工具得出的结论,则可以添加可空性提示以更改推断。添加迁移提示可能会大幅提升迁移质量。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/e4f5172c2403a.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/e4f5172c2403a.png) 目前,在默认情况下,使用 [dart create](https://dart.cn/tools/dart-tool) 和 [flutter create](https://docs.flutter.cn/reference/flutter-cli) 新创建的 package 和应用中不会启用健全空安全。在大部分生态系统完成迁移后,我们预计将在后续的稳定版本中默认启用。你可以通过 `dart migrate` 在新创建的 package 或应用中轻松 [启用空安全](https://dart.cn/null-safety#create)。 diff --git a/src/content/posts/announcing-dart-2-13.md b/src/content/posts/announcing-dart-2-13.md index 820d9f8180..e759e5b77b 100644 --- a/src/content/posts/announcing-dart-2-13.md +++ b/src/content/posts/announcing-dart-2-13.md @@ -3,7 +3,7 @@ title: Dart 2.13 版现已发布 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/05/mnqClZ.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/mnqClZ.png) *作者 / Kevin Moore & Michael Thomsen* diff --git a/src/content/posts/announcing-dart-2-14.md b/src/content/posts/announcing-dart-2-14.md index 2cc708cfde..72fdcc12dd 100644 --- a/src/content/posts/announcing-dart-2-14.md +++ b/src/content/posts/announcing-dart-2-14.md @@ -7,7 +7,7 @@ toc: true 本月,我们发布了 Dart SDK 2.14 的正式版,新的版本旨在通过独特的可移植性、生产力和稳健性组合来打造构建应用程序的最佳平台。这一次,我们对 Apple Silicon 提供了更好的支持,并提供了许多增强生产力的功能,例如用于通过代码样式分析在你编写代码时捕获错误的标准 lint 代码规则、更快的发布工具、更好的级联代码格式以及一些小的语言特性更新。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/announcing-dart-2-14/announcing-dart-2-14.png){:width="85%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/announcing-dart-2-14/announcing-dart-2-14.png){:width="85%"} 自 Apple 在 2020 年末发布新的 [Apple 芯片](https://support.apple.com/zh-cn/HT211814 "Apple 芯片") 处理器芯片以来,我们一直致力于更新 Dart SDK 以增加对新处理器上的原生运行支持。所需的更新已经在 dev 渠道中提供了一段时间,过去一个月,beta 渠道也提供了支持,从 Dart 2.14.1 开始,可以在 Dart stable 渠道中使用啦。当你 [下载](https://dart.cn/get-dart "下载") 一个 macOS 的 SDK 时,确保要选择 ARM64 选项。请注意,与 Flutter SDK 中捆绑的 Dart SDK 还没有支持这些改进。 diff --git a/src/content/posts/announcing-dart-2-15.md b/src/content/posts/announcing-dart-2-15.md index f117362887..debebab78b 100644 --- a/src/content/posts/announcing-dart-2-15.md +++ b/src/content/posts/announcing-dart-2-15.md @@ -7,7 +7,7 @@ toc: true 我们已经正式发布了 Dart SDK 的 2.15 版本,该版本新增了可快速并发的工作器 isolate、新的构造函数拆分 (tear-off) 语言特性、经过改进的 dart:core 库枚举支持、package 发布者相关的新功能,等等。 -![]({{site.flutter-files-cn}}/posts/images/2021/12/8CA8pZ.png) +![]({{site.flutter-files-cn}}posts/images/2021/12/8CA8pZ.png) ## **工作器 isolate 的快速并发** @@ -159,7 +159,7 @@ Package validation found the following errors: 其次,我们还为发布者添加了另一个功能: 撤销已发布的 package 版本。当发布了有问题的 package 版本时,我们通常的建议是发布一个小幅升级的新版本来修复意外问题。但在极少数情况下,例如你尚未修复这些问题,或是你在原打算只发布一个次要版本时意外发布了一个主要版本,那么你就可以使用新的 [package 撤销功能](https://dart.cn/tools/pub/publishing#retract),作为最后的补救方法。此功能在 pub.dev 的管理界面中提供: -![]({{site.flutter-files-cn}}/posts/images/2021/12/Cr4RZ4.png) +![]({{site.flutter-files-cn}}posts/images/2021/12/Cr4RZ4.png) 在 package 版本被撤销后,pub 客户端在 `pub get` 或 `pub upgrade` 中将不再解析该版本。如果有开发者已经解析该撤销的版本 (并存在于他们的 `pubspec.lock` 文件中),他们将在下次运行 `pub` 时看到警告: diff --git a/src/content/posts/announcing-dart-2-16.md b/src/content/posts/announcing-dart-2-16.md index b70cb9e5d0..dfedb75bfd 100644 --- a/src/content/posts/announcing-dart-2-16.md +++ b/src/content/posts/announcing-dart-2-16.md @@ -9,7 +9,7 @@ toc: true Dart 2.16 正式版已于上周发布。尽管没有新的语言特性加入,但本次版本发布包含了数个问题修复 (包括对安全漏洞的修复),发布 Dart package 的时候也可以指定支持的平台,pub.dev 网站也更新了全新的搜索界面。 -![]({{site.flutter-files-cn}}/posts/images/2022/02/d7ae376ac7664.png) +![]({{site.flutter-files-cn}}posts/images/2022/02/d7ae376ac7664.png) 与 [Flutter 2.10](https://mp.weixin.qq.com/s/FgMu6-O_wMkwxp2yxiW2Ew) 一同发布的 Dart 2.16,仍然在将旧的命令行工具迁移到新的 dart 命令行工具。这个版本中,`dartdoc`和 `dartanalyzer` 已被弃用,分别对应新的命令是 `dart doc` 和 `dart analyze`。`dartdoc`、`dartanalyzer` 和 `pub` 这三个命令计划在 Dart 2.17 中彻底移除。 @@ -58,7 +58,7 @@ dependencies: 响应开发者的请求,我们对于在 pub.dev 上的搜索提供了更好的支持。此次更改的主要目的是帮助你区分和搜索支持的平台。以下是新的搜索界面预览: -![Pub.dev 的搜索界面,侧边栏包含 Platforms、SDKs 和高级选项]({{site.flutter-files-cn}}/posts/images/2022/02/35e594d3f2d5c.jpg) +![Pub.dev 的搜索界面,侧边栏包含 Platforms、SDKs 和高级选项]({{site.flutter-files-cn}}posts/images/2022/02/35e594d3f2d5c.jpg) 新的搜索界面在左侧有一个搜索筛选栏,你可以用它限制搜索范围: diff --git a/src/content/posts/announcing-dart-2-5-super-charged-development.md b/src/content/posts/announcing-dart-2-5-super-charged-development.md index bd3ad06297..b21f178db0 100644 --- a/src/content/posts/announcing-dart-2-5-super-charged-development.md +++ b/src/content/posts/announcing-dart-2-5-super-charged-development.md @@ -3,7 +3,7 @@ title: Dart 2.5 正式公布 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/05/UUKmRn.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/05/UUKmRn.jpg) *作者: Michael Thomsen, Dart & Flutter Product Manager, Google* @@ -18,7 +18,7 @@ toc: true 我们热切地想要创建最佳的客户端开发语言。令人振奋的是,新的 [IEEE Spectrum 2019 最佳开发语言](https://spectrum.ieee.org/computing/software/the-top-programming-languages-2019) 评级已于近期出炉,而 Dart 已经跻身其中并位列第 16 名。在 "热门" 条目下,Dart 则排名第 10,在只考虑移动端开发语言时则排名第 6 (位于 Java、C、C++、C# 和 Swift 之后)。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/jpZtih.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/jpZtih.png) ## **ML Complete: 基于机器学习的代码补全** @@ -26,17 +26,17 @@ toc: true 但随着 API 数量的增长,探索 API 也变得愈发困难,因为补全功能提供的列表太长,开发者无法按照字母顺序去逐一浏览。在过去的一年里,我们一直在努力让机器学习来解决这个问题。简单地讲,我们通过 [分析 GitHub 上大量开源的 Dart 代码](https://console.cloud.google.com/marketplace/details/github/github-repos) 来训练一个模型,用以分析特定上下文时不同代码成员的出现模式。这个基于 [TensorFlow Lite](https://www.tensorflow.org/lite) 打造的模型在被训练成型后,可以在开发者编写代码时预测接下来需要用到的代码内容。这个新功能我们称之为 ML Complete。以下是使用 Flutter 框架开发新的 MyHome widget 的示例: -![△ 使用 ML Complete 开发 Flutter widget 时的示例]({{site.flutter-files-cn}}/posts/images/2021/05/epDlid.gif) +![△ 使用 ML Complete 开发 Flutter widget 时的示例]({{site.flutter-files-cn}}posts/images/2021/05/epDlid.gif) > △ 使用 ML Complete 开发 Flutter widget 时的示例 让我们来深入了解一下它的运行机制。假设你正在编写一个小程序来计算从当前时间开始一天后的时间。使用 ML Complete,你将获得下图这样迅捷的开发体验。 -![△ 使用 ML Complete 编写代码的体验]({{site.flutter-files-cn}}/posts/images/2021/05/tynAjy.gif) +![△ 使用 ML Complete 编写代码的体验]({{site.flutter-files-cn}}posts/images/2021/05/tynAjy.gif) > △ 使用 ML Complete 编写代码的体验 -![△ 不使用 ML Complete 编写同样代码的体验]({{site.flutter-files-cn}}/posts/images/2021/05/gpR4if.gif) +![△ 不使用 ML Complete 编写同样代码的体验]({{site.flutter-files-cn}}posts/images/2021/05/gpR4if.gif) > △ 不使用 ML Complete 编写同样代码的体验 @@ -109,7 +109,7 @@ cmdP.free(); 这段代码会执行系统命令,使用系统默认浏览器打开 dart.dev 网页: -![△ 通过 dart:ffi 使用系统 API 打开默认浏览器]({{site.flutter-files-cn}}/posts/images/2021/05/6rNvGJ.gif) +![△ 通过 dart:ffi 使用系统 API 打开默认浏览器]({{site.flutter-files-cn}}posts/images/2021/05/6rNvGJ.gif) > △ 通过 dart:ffi 使用系统 API 打开默认浏览器 diff --git a/src/content/posts/announcing-dart-2-6.md b/src/content/posts/announcing-dart-2-6.md index 536fb98a1a..64aa04d82a 100644 --- a/src/content/posts/announcing-dart-2-6.md +++ b/src/content/posts/announcing-dart-2-6.md @@ -9,7 +9,7 @@ Dart 提供了 [丰富多样的编译器](https://dart.dev/platforms),全方 今天,我们正式推出 **dart2native**。作为现有编译器集合的一个扩展,dart2native 可以将 Dart 程序编译为含有预编译机器码的自包含可执行文件。在它的协助下,你可以使用 Dart 在 **macOS**, **Windows** 或 **Linux** 上创建命令行工具。下方的功能宣传图就是 [使用 dart2native 来实现](https://gist.github.com/mit-mit/faec2bfc1d1cef7cd09df917e531c5c0) 的。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/H1ZCVn.gif) +![]({{site.flutter-files-cn}}posts/images/2021/05/H1ZCVn.gif) ## **Dart Native 及 dart2native 编译器** @@ -69,7 +69,7 @@ sys 0m0.020s 新推出的 dart2native 编译器让打包工作变得十分简单,我们最终得到了一个 7MB 大小的自包含代码编辑器。请查看下方演示动图,了解 Kilo 的编译过程,以及编译后的 Kilo 是如何通过编辑自己的源代码来修复错误的。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/frVHPl.gif) +![]({{site.flutter-files-cn}}posts/images/2021/05/frVHPl.gif) 正在编辑自己的源代码的 Kilo 编辑器 (该编辑器使用 Dart 编写,并通过 dart2native 编译为可执行文件) diff --git a/src/content/posts/announcing-dart-2-8.md b/src/content/posts/announcing-dart-2-8.md index 8ace912b44..b03564792a 100644 --- a/src/content/posts/announcing-dart-2-8.md +++ b/src/content/posts/announcing-dart-2-8.md @@ -3,7 +3,7 @@ title: Dart 2.8 同期发布 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/05/w7DjVe.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/w7DjVe.png) *作者 / Michael Thomsen, Dart & Flutter Product Manager, Google* @@ -33,7 +33,7 @@ Pub package 管理器和 pub.dev 网站为 Dart 和 Flutter 提供了欣欣向 ## **使用 pub outdated 管理依赖** -![]({{site.flutter-files-cn}}/posts/images/2021/05/LpzhUs.gif) +![]({{site.flutter-files-cn}}posts/images/2021/05/LpzhUs.gif) Dart 代码中的依赖关系会被收集到 [pubspec 文件](https://kw-staging-dartlang-2.firebaseapp.com/tools/pub/pubspec) 中。当你运行 pub get 命令,从 pub.dev 中获取 package 时,pub 版本求解器 (使用 [PubGrub 算法](https://medium.com/@nex3/pubgrub-2fb6470504f)) 会运行一个进程来得出满足 pubspec 中所有约束条件的所有依赖项的最新版本。请注意,pub 使用的是单版本方案,你的应用中只包含每个 package 的单一版本,这个方案可以确保你的应用获得尽可能小的体积。 @@ -41,25 +41,25 @@ Dart 代码中的依赖关系会被收集到 [pubspec 文件](https://kw-staging 我们来看一个例子。假如你正在构建一款应用,这款应用的 pubspec.yaml 包含下列内容: -![]({{site.flutter-files-cn}}/posts/images/2021/05/9DxuuV.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/9DxuuV.png) 运行 pub get,这款工具会创建一个 pubspec.lock 文件,包含如下版本信息: -![]({{site.flutter-files-cn}}/posts/images/2021/05/FYXC5g.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/FYXC5g.png) 几个月过去了,pub.dev 现在有了新版本的 foo (1.3.1) 和 bar (2.1.0 和 3.0.3)。那么我们如何才能知道这些新版本是可用的?对于小版本升级 (foo 1.4.0 和 bar 2.1.0),你可以运行 pub upgrade,但这样你不会得到 bar 3.0.0。为了版本更新你不得不访问 pub.dev 上对应 package 的页面来了解详情。或者你也可以尝试社区提供的解决方案,比如 Paulina Szklarska 的 [version checker](https://plugins.jetbrains.com/plugin/12400-flutter-pub-version-checker) 或者 Jeroen Meijer 的 [pubspec assist](https://marketplace.visualstudio.com/items?itemName=jeroen-meijer.pubspec-assist)。 Dart SDK 现在通过 `pub outdated` 支持发现新版本。如果你使用的是支持 Dart 或 Flutter 的 IDE,请使用 **Pub outdated** 指令,这个指令在 `pubspec.yaml` 文件被打开时会显示。或者通过终端运行 `pub outdated` 或者 f`lutter pub outdated` 命令: -![]({{site.flutter-files-cn}}/posts/images/2021/05/B9BoA1.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/B9BoA1.png) 上面的输出结果表明,我们可以使用 pub upgrade 自动升级到 foo 1.3.1,也就是 foo 的最新可用版本。与此同时,虽然我们可以自动升级到 bar 2.1.0,但最新可用的版本其实是 3.0.3。升级到 bar 3.0.3 属于大版本升级,所以我们需要编辑 pubspec.yaml 文件,才能完成升级: -![]({{site.flutter-files-cn}}/posts/images/2021/05/oGr7Qc.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/oGr7Qc.png) 在编辑完 pubspec 并运行 pub upgrade 之后,pub outdated 会报告所有的依赖均已是最新版本: -![]({{site.flutter-files-cn}}/posts/images/2021/05/RwkudP.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/RwkudP.png) 成功更新到最新版本了!由于我们刚才获取了最新的版本,包括一次大版本升级,现在我们需要查看一下这些版本中是否存在重要改动。然后运行各种测试,确保我们的应用可以正常运行。 diff --git a/src/content/posts/announcing-dart-3-2.md b/src/content/posts/announcing-dart-3-2.md index bfb74c3eba..5dccfd8962 100644 --- a/src/content/posts/announcing-dart-3-2.md +++ b/src/content/posts/announcing-dart-3-2.md @@ -3,7 +3,7 @@ title: Dart 3.2 更新盘点 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/BzdDG1.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/BzdDG1.png) *作者 / Kevin Moore 和 Michael Thomsen* @@ -66,7 +66,7 @@ class Container { Dart [DevTools](https://dart.cn/tools/dart-devtools) 是一套用于支持纯 Dart 和 Flutter 应用的调试及性能工具。我们在 Dart 3.2 和 Flutter 3.16 中 [推出](https://medium.com/p/c8bc1aaf8e5f/) 了新的 [扩展框架](https://pub.flutter-io.cn/packages/devtools_extensions),让 package 作者能够直接在 DevTools 中为其 package 构建自定义工具。因此,包含框架的 pub.dev package 能够提供特定于其用例的自定义工具。例如,[Serverpod](https://pub.flutter-io.cn/packages/serverpod) 的作者一直在努力为其 package 构建 DevTools,并且很高兴在即将发布的 [1.2 版本](https://github.com/orgs/serverpod/projects/4) 中提供 DevTools 扩展程序。 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/toBjEO.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/toBjEO.png) △ 计划纳入即将发布的 ServerPod 1.2 版本中的 DevTools 扩展程序 diff --git a/src/content/posts/announcing-flutter-1-12.md b/src/content/posts/announcing-flutter-1-12.md index e75aaca0e5..59c68f6dd1 100644 --- a/src/content/posts/announcing-flutter-1-12.md +++ b/src/content/posts/announcing-flutter-1-12.md @@ -18,13 +18,13 @@ description: Flutter 1.12 正式发布,包括多项性能改进等。 Flutter 1.12 带来的一个重磅消息是,我们现已支持 iOS 13 风格的界面和操作。这包括在 Cupertino widget 中对深色模式的全面支持。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/ios-13-dark-mode.png){:width="60%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/ios-13-dark-mode.png){:width="60%"} 仔细观察上图你会发现,如果想要支持深色模式,可不是单单换个背景颜色就大功告成了,必须要让屏幕上的其它颜色也适应偏暗的色调才行。这些细节处理为开发者带来了巨大的工作量,但是为了在深色和浅色模式下都能呈现出精美的 Cupertino 风格外观,这些努力都是值得的。 在 iOS 13 上实现像素级完美是我们一直在努力的目标,为此,我们在 Flutter 1.12 中新增了 2 个 widget。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/cupertino-context-menu-and-cupertino-sliding-segmented-control.png){:width="60%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/cupertino-context-menu-and-cupertino-sliding-segmented-control.png){:width="60%"} [CupertinoContextMenu](https://api.flutter.cn/flutter/cupertino/CupertinoContextMenu-class.html) 和 [CupertinoSlidingSegmentedControl](https://api.flutter.cn/flutter/cupertino/CupertinoSlidingSegmentedControl-class.html) @@ -34,7 +34,7 @@ Flutter 1.12 带来的一个重磅消息是,我们现已支持 iOS 13 风格 Add-to-App 功能更新是我们在移动支持方面所做的另一项改进。通过 Add-to-App,开发者可以将 Flutter 集成到现有的 Android 或 iOS 应用中。我们一直在努力简化集成流程,让你可以更轻松地把 Flutter 代码库添加到应用中,比如说,我们在 Android Studio 中添加了一个全新的 Flutter 模块向导。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/flutter-module.png){:width="70%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/flutter-module.png){:width="70%"} Flutter 1.12 现已正式支持 Add-to-App 功能,允许开发者在应用中添加一个全屏 Flutter 实例。在支持这个功能的同时,我们还: @@ -57,7 +57,7 @@ Flutter 不仅通过稳定渠道发布了许多全新功能,稳定版之外亦 Flutter 1.12 master、dev 和 beta 三个渠道所提供的 web 支持均有明显提升。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/support-for-web.png){:width="95%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/support-for-web.png){:width="95%"} [Rivet](https://rivet.area120.com/link/flutter) (应用界面如上图所示) 对 Flutter 在 web 端的表现非常满意。Rivet 是一个教育项目,旗下的移动版应用已经发布,目前,他们正在使用 Flutter 和 Firebase 构建 web 版本的应用,预计发布时间为 2020 年 1 月。 @@ -67,7 +67,7 @@ Flutter 1.12 master、dev 和 beta 三个渠道所提供的 web 支持均有明 macOS 桌面支持的进展也很顺利,现在已经从技术预览版迭代至 alpha 版,并通过 master 和 dev 两个渠道开放下载。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/macos-desktop-support.png){:width="95%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/macos-desktop-support.png){:width="95%"} 上图展示的是桌面尺寸的[新版 Flutter Gallery](https://flutter.github.io/samples/#/),经过彻底升级,现在它已经支持 Android、iOS、web 和 macOS。 @@ -77,13 +77,13 @@ macOS 端支持的 alpha 版代表着 Flutter 在桌面支持领域的重大进 现在,你只需通过 "flutter create" 命令就能创建一个可在 macOS 平台上运行的 Flutter 项目,操作步骤和新建一个普通的 Flutter 项目一样简单。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/flutter-create.png){:width="95%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/flutter-create.png){:width="95%"} △ 请注意默认创建的新 macOS 目录 除了工具支持之外,我们也在一直探索适合桌面级应用的 widget 密度。移动应用需要较大的控制区域才能正常进行触控操作,但在桌面应用中,用户更可能会使用鼠标。为了把 Flutter 带到桌面,我们现在允许你选择 widget 密度,以便更好地满足桌面用户的需求。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/sample-demonstrating-flutters-implementation-of-the-material-density-guidelines.gif){:width="60%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/sample-demonstrating-flutters-implementation-of-the-material-density-guidelines.gif){:width="60%"} [示例](https://github.com/gspencergoog/density_sample): [Material 视觉密度设计规范](https://material.io/design/layout/applying-density.html)在 Flutter 上的实现 @@ -114,7 +114,7 @@ macOS 端支持的 alpha 版代表着 Flutter 在桌面支持领域的重大进 如果你还没用过 [DartPad](https://dartpad.cn/) 的话,不妨现在就上手试试!有了它,你不用安装任何工具就能体验 Dart 的功能。此外,最新的 DartPad 还支持 Flutter! -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/dartpad.png){:width="95%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/dartpad.png){:width="95%"} 全新的 DartPad 活用了 Flutter 的 web 端支持,当你在左侧编写 Flutter 代码的时候,右侧就会实时运行一个真实的 Flutter (web) 程序。DartPad 的独特之处在于,你无需安装任何程序就能立即开始编写 Flutter 应用。 @@ -130,7 +130,7 @@ macOS 端支持的 alpha 版代表着 Flutter 在桌面支持领域的重大进 无论你是选择自己手写代码,还是让 Hot UI 替写,代码中出现问题总是难免的。我们推出 Dart DevTools 工具的目的就是,帮助你找到并修复这些问题。在新版 DevTools 中,我们添加了一个名为 Layout Explorer 的功能,它能够以可视化的方式呈现应用的布局信息,从而让检查器可以更好地发挥功能。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/layout-explorer.gif){:width="95%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/layout-explorer.gif){:width="95%"} Layout Explorer 不仅能以可视化的方式展现正在运行的应用中的 widget 布局,而且还允许你以交互的方式更改布局选项。我们希望这个功能预览可以让你更容易理解并修正布局问题。如需启用这一功能,请参阅 [Layout Explorer 官方文档](https://docs.flutter.cn/development/tools/devtools/inspector#flutter-layout-explorer)。 @@ -138,7 +138,7 @@ Layout Explorer 不仅能以可视化的方式展现正在运行的应用中的 构建并调试 Flutter UI 的工作往往是在同一台设备上完成的。如果能同时在多台实体或虚拟的设备上调试你的应用,是不是会更好呢?Flutter 在 Visual Code 上提供的多会话调试支持就能帮你做到这一点。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/multi-device-debugging.png){:width="95%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/multi-device-debugging.png){:width="95%"} 从上面这张图里我们可以看到,一个 Flutter 应用正同时运行在 3 个不同的调试会话中,如果我们在代码中做出一处更改,Hot Reload 会确保这个更改反映在所有 3 个应用中。如果我们设置一个断点,那么无论哪个应用触发了相关代码,它都会停下来。如果你想中止某一个会话的调试,也不需要停止所有的会话。请前往 Github wiki 页面了解如何配置这个功能来实现[多设备调试](https://github.com/flutter/flutter/wiki/Multi-device-debugging-in-VS-Code)。 @@ -154,7 +154,7 @@ Layout Explorer 不仅能以可视化的方式展现正在运行的应用中的 Golden 图像指的是一个主图像文件,它是 widget、state、应用或其它你选择捕捉的视觉内容的正确渲染结果。在 Flutter 1.12 中,我们实现了 [GoldenFileComparator](https://api.flutter.cn/flutter/flutter_test/GoldenFileComparator-class.html) 和 [LocalFileComparator](https://api.flutter.cn/flutter/flutter_test/LocalFileComparator-class.html) 类,它们依照像素而不是比特来进行比较,因此可以彻底消除错误的比较结果。这些新的实现强调呈现视觉差异,从而更清楚地展现出 Golden 图像和正在测试中的更新文件之间的差异。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/golden-image-testing.png){:width="60%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/golden-image-testing.png){:width="60%"} 在这个例子中,主图像文件 (上图) 和测试图像文件 (下图) 之间的差异集中在轮廓上,通过差值图 (中图) 可以更容易地看出二者之间的差异。 @@ -172,7 +172,7 @@ Golden 图像指的是一个主图像文件,它是 widget、state、应用或 我们的用户仍在不断要求推出 "官方推荐" 的代码包和插件。为此,我们很高兴地推出 [Flutter Favorite 计划](https://docs.flutter.cn/development/packages-and-plugins/favorites)。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/the-flutter-favorite-program.png){:width="30%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/the-flutter-favorite-program.png){:width="30%"} Flutter Favorite 代码包 (或插件) 是我们认为你在构建应用时的第一选择。这里的 "我们" 指的是 Flutter Ecosystem Committee (Flutter 生态圈委员会)。委员会成员来自各个地区,由 Google 的 Flutter 团队和 Flutter 社区共同推选,他们的目标是解决 Flutter 生态圈中存在的各种问题。委员会要做的第一件事就是建立一个高标准基线,并依照这个标准线挑选出合适的代码包。被选中的代码包的作者可以在代码包说明文档中使用 Flutter Favorite 徽标。此外,pub.dev 在更新后也会在搜索结果等位置显示 Flutter Favorite 徽标。 @@ -182,15 +182,15 @@ Flutter Favorite 代码包 (或插件) 是我们认为你在构建应用时的 谈到值得骄傲的贡献,就不得不说 Flutter 社区打造的众多出色工具。我们在下面列举部分成果。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/flutter-device-preview.png){:width="85%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/flutter-device-preview.png){:width="85%"} [Flutter Device Preview](https://github.com/aloisdeniel/flutter_device_preview) -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/widget-maker.png){:width="85%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/widget-maker.png){:width="85%"} [Widget Maker](https://www.widgetmaker.dev/) -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/panache.png){:width="85%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/panache.png){:width="85%"} [Panache](https://rxlabz.github.io/panache/#/) @@ -198,7 +198,7 @@ Flutter Favorite 代码包 (或插件) 是我们认为你在构建应用时的 Flutter 生态圈不仅包括由社区开发的丰富工具,还有一批很棒的工作开发伙伴。Nevercode 一直以来都是我们的重要合作伙伴之一,他们最新发布的工具提供了许多新功能,其中一项就是名为 [Remote Mac 的 Visual Studio Code 插件](https://marketplace.visualstudio.com/items?itemName=codemagic.remote-mac)。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot12-release/remote-mac.png){:width="95%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot12-release/remote-mac.png){:width="95%"} Remote Mac 扩展插件可以让你直接连上一台由团队托管在云端的 Mac 主机,然后测试 iOS 和 macOS 版本的 Flutter 代码。如果你想要了解更多关于 Nevercode 最新产品的信息,例如对 web 端和 macOS 端 Flutter 的最新支持,全新的企业功能等等,请参阅他们[最新发布的博文](https://blog.codemagic.io/more-professional-capable-accessible/)。 diff --git a/src/content/posts/announcing-flutter-1-17.md b/src/content/posts/announcing-flutter-1-17.md index 60dddf809d..2c3d502368 100644 --- a/src/content/posts/announcing-flutter-1-17.md +++ b/src/content/posts/announcing-flutter-1-17.md @@ -3,7 +3,7 @@ title: Flutter 1.17 — 2020 首个稳定版发布! toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/05/g6bFl3.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/05/g6bFl3.jpg) *作者 / Chris Sells, Product Manager, Flutter developer experience* @@ -29,7 +29,7 @@ toc: true 内存使用方面也有明显的优化,例如在快速滚动大型图片时 [内存占用减少了 70%](https://github.com/flutter/engine/pull/14265),进而提升性能,具体提升的程度取决于设备内存的大小。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/lKp7yG.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/lKp7yG.png) > △ 测试应用的内存占用量随着 PR 合并的变化 (竖条越短内存占用越少) @@ -39,7 +39,7 @@ toc: true Apple 的 Metal API 使开发者几乎直接访问底层 GPU,它也是 Apple 推荐使用的图形 API。在支持 Metal 的 iOS 设备上,Flutter 将默认使用 Metal,使得应用在绝大多数情况下都运行得更快,[渲染速度平均提升约 50%](https://github.com/flutter/flutter/issues/53768) (具体取决于设备的工作负载)。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/rqHHKL.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/rqHHKL.png) > △ 测试 iOS 应用在 OpenGL 和 Metal 下的帧渲染时间 (值越低越好) @@ -49,7 +49,7 @@ Apple 的 Metal API 使开发者几乎直接访问底层 GPU,它也是 Apple 基于多方用户的反馈,我们也在持续推进 Material 设计系统在 Flutter 中落地。在新版本中我们加入了 [NavigationRail](https://master-api.flutter-io.cn/flutter/material/NavigationRail-class.html),这是一个新的 widget,提供了响应式的应用导航模型。它由 Google Material Design 团队 [设计](https://material.io/components/navigation-rail) 并实现。NavigationRail 非常适合可以在移动和桌面设备之间切换的应用,当你的应用所在的屏幕尺寸增大时,你可以非常容易地从 BottomNavigator 切换成 NavigationRail。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/10uOeq.gif) +![]({{site.flutter-files-cn}}posts/images/2021/05/10uOeq.gif) > △ 新加入的 NavigationRail widget @@ -57,17 +57,17 @@ Apple 的 Metal API 使开发者几乎直接访问底层 GPU,它也是 Apple 除了加入新的 widget 之外,新版本还更新了 Material [DatePicker](https://api.flutter.dev/flutter/material/showDatePicker.html) 以及修正了文字选择菜单 widget 的溢出显示问题。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/B4GHia.gif) +![]({{site.flutter-files-cn}}posts/images/2021/05/B4GHia.gif) > △ 新的 Material DatePicker widget DatePicker 基于更新过的 [Material 设计指南](https://material.io/components/pickers/#mobile-pickers) 引入了新的视觉设计,并新增了文本输入模式。详情请阅读 [Material DatePicker 改版文档](https://flutter.dev/go/material-date-picker-redesign)。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/TwiEKM.gif) +![]({{site.flutter-files-cn}}posts/images/2021/05/TwiEKM.gif) > △ Android 上新版文字选择悬浮菜单 -![]({{site.flutter-files-cn}}/posts/images/2021/05/67UFM4.gif) +![]({{site.flutter-files-cn}}posts/images/2021/05/67UFM4.gif) > △ iOS 上新版文字选择悬浮菜单 @@ -75,7 +75,7 @@ DatePicker 基于更新过的 [Material 设计指南](https://material.io/compon 另外,[全新的 Animations Package](https://pub.flutter-io.cn/packages/animations),虽然并没有被包含进 Flutter 1.17 版本中,但也已同期发布。它实现了 [新的 Material 动效规范](https://material.io/design/motion/the-motion-system.html)。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/cDpbsU.gif) +![]({{site.flutter-files-cn}}posts/images/2021/05/cDpbsU.gif) > △ Animations Package 中的容器转场动画 @@ -87,7 +87,7 @@ DatePicker 基于更新过的 [Material 设计指南](https://material.io/compon 2018 年 Material TextStyle 的名称和配置汇总如下表所示。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/ICBLwp.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/ICBLwp.png) Material Design 规范中称为 `body1` 和 `body2` 的 TextStyle 在 Flutter TextTheme API 中被称为 `bodyText1` 和 `bodyText2`。同样的,在规范中称为 `H1-H6` 的 TextStyle,在 TextTheme API 中称为 `headline1-headline6`。 @@ -95,7 +95,7 @@ Material Design 规范中称为 `body1` 和 `body2` 的 TextStyle 在 Flutter Te 文本和字体总是密不可分,如果新的 Material 文字缩放实现让你眼前一亮,那么你可能也会对新的 [Google Fonts for Flutter v1.0](https://medium.com/flutter/introducing-google-fonts-for-flutter-v-1-0-0-c0e993617118) 颇感兴趣。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/FJhCZx.gif) +![]({{site.flutter-files-cn}}posts/images/2021/05/FJhCZx.gif) > △ 在 Flutter 应用中轻松使用 Google Fonts @@ -111,11 +111,11 @@ Material Design 规范中称为 `body1` 和 `body2` 的 TextStyle 在 Flutter Te 将当前版本的 Dart DevTools 替换成新的 Flutter 版本,这一进程通过 Flutter 1.17 已经接近完成。如果你想试试新的 Flutter 版 Dart DevTools,请在启动 DevTools 后点击右上角的 Beaker (烧瓶) 图标。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/lbMHWp.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/lbMHWp.png) 由 Flutter 实现的 Dart DevTools 预发布版本带来了诸多改进,其中全新的 **Network** (网络) 选项卡最为重要。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/tpb7Pb.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/tpb7Pb.png) 如果你在 Dart DevTools 的预发布版本中没有看到 Network 选项卡 (比如,你是通过命令行来使用 DevTools),可以通过如下命令手动更新它: @@ -143,13 +143,13 @@ void main() { 如果你使用的是 Visual Studio Code,我们推荐使用新的 **Dart: List Outdated Packages** 命令来运行新的 pub outdedated 命令。详情请见 Dart 2.8 发布 (今日微信二条文章)。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/wRDc6Y.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/wRDc6Y.png) 这个命令用于厘清依赖项中的版本问题。 最后值得一提的是,现在当 Flutter 崩溃时,工具会提示你上报这个 bug: -![]({{site.flutter-files-cn}}/posts/images/2021/05/mh6Izu.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/mh6Izu.png) 我们的团队会密切关注这些错误报告的严重程度和出现频率,所以当这些提示出现时,请提交 bug 给我们。 @@ -157,7 +157,7 @@ void main() { Flutter 的存在是为了实现精美的应用体验。数字开发商 [Superformula](https://superformula.com/flutter/) 最近就完成了一件精彩的作品: 他们最近与 MGM Resorts (美高梅酒店集团) 合作,完全使用 Flutter [对其移动应用进行了重构](https://www2.mgmresorts.com/app/)。他们反馈道,"在核心产品中引入 Flutter,为我们的客户和他们的用户带来了更快的速度和更高的灵活性,从而为他们带来了真正的、可衡量的价值。" -![]({{site.flutter-files-cn}}/posts/images/2021/05/004NS7.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/004NS7.png) Superformula 与 MGM Resorts 设计团队合作,为所有主要的网络、移动和店头体验打造了全新的 MGM 设计语言。这个规模不大的团队使用全新的 Flutter 源码库更快地完成了应用改版,并在两个应用商店上架,使得 MGM 的预订转化率提高了 9%。 diff --git a/src/content/posts/announcing-flutter-1-20.md b/src/content/posts/announcing-flutter-1-20.md index 02e3c68fc2..b262522359 100644 --- a/src/content/posts/announcing-flutter-1-20.md +++ b/src/content/posts/announcing-flutter-1-20.md @@ -4,7 +4,7 @@ description: 性能改进、移动端自动填充、全新 widget 以及更多 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2020/08/bbbf90037ad95.png) +![]({{site.flutter-files-cn}}posts/images/2020/08/bbbf90037ad95.png) 作者 / Chris Sells, Product Manager, Flutter developer experience @@ -26,7 +26,7 @@ Flutter 团队一直在寻找缩减应用大小和延迟的新方法。对于大 此版本带来的另一项性能改进是使用预热阶段减少动画初始显示时的卡顿。以下为卡顿改进的动画示例(半速播放)。 -![]({{site.flutter-files-cn}}/posts/images/2020/08/455f666234c9d.gif) +![]({{site.flutter-files-cn}}posts/images/2020/08/455f666234c9d.gif) △ 使用和不使用 SkSL 预热的动画 @@ -37,7 +37,7 @@ Flutter 团队一直在寻找缩减应用大小和延迟的新方法。对于大 有了更好、更快、更强大的鼠标点击测试,我们又增加了鼠标光标支持,这也是桌面端最受期待的功能之一。一些常用的 widget 将默认显示主流光标,你也可以从支持的光标列表中指定其他光标。 -![]({{site.flutter-files-cn}}/posts/images/2020/08/86c0af8ecf3d3.gif) +![]({{site.flutter-files-cn}}posts/images/2020/08/86c0af8ecf3d3.gif) △ 鼠标在 Android 既有的 widget 上悬停时切换显示光标 @@ -47,7 +47,7 @@ Flutter 团队一直在寻找缩减应用大小和延迟的新方法。对于大 一段时间以来,呼声最高的 Flutter 功能之一就是为 Flutter 应用中的文本自动填充提供 Android 和 iOS 的底层支持。通过 [PR 52126](https://github.com/flutter/flutter/pull/52126),我们很高兴地宣布该支持已经实现,如果操作系统已经搜集到可供自动填充的信息,你的用户无需再重新输入了。 -![]({{site.flutter-files-cn}}/posts/images/2020/08/04693616a125a.gif) +![]({{site.flutter-files-cn}}posts/images/2020/08/04693616a125a.gif) △ 自动填充 @@ -57,7 +57,7 @@ Flutter 团队一直在寻找缩减应用大小和延迟的新方法。对于大 此版本引入了一个新的 widget:InteractiveViewer。InteractiveViewer 旨在为你的应用构建常见交互,如平移、缩放和拖放,甚至在可调节大小的窗口中也可实现这些交互,请参见下面这个 [简单的围棋示例](https://github.com/justinmc/flutter-go)。 -![]({{site.flutter-files-cn}}/posts/images/2020/08/1926f95f7fd40.gif) +![]({{site.flutter-files-cn}}posts/images/2020/08/1926f95f7fd40.gif) △ InteractiveViewer 的缩放、平移、调整大小与拖放 @@ -65,7 +65,7 @@ Flutter 团队一直在寻找缩减应用大小和延迟的新方法。对于大 有兴趣在 Flutter 应用中加入更多类似 InteractiveViewer 的交互?欢迎了解一下我们在这一版本 [对拖放功能所做的增强](https://github.com/monkeyswarm/DragTargetDetailsExample)。具体来说,如果你想知道拖拽的“放置”操作发生在目标 widget(始终对 Draggable 对象可用)上的精确位置,现在你可以通过 DragTarget 的 onAcceptDetails 方法获得该信息。 -![]({{site.flutter-files-cn}}/posts/images/2020/08/89b6c425a5767.gif) +![]({{site.flutter-files-cn}}posts/images/2020/08/89b6c425a5767.gif) △ 接收拖放目标详情信息演示 @@ -75,23 +75,23 @@ Flutter 团队一直在寻找缩减应用大小和延迟的新方法。对于大 除了新添加的 widget,此版本还包含许多既有 widget 的更新,以匹配 [最新的 Material 指南](https://material-io.cn/components/sliders)。其中包括 Slider 和 RangeSlider。更多信息参见 [Slider widget 的更新](https://medium.com/flutter/whats-new-with-the-slider-widget-ce48a22611a3)。 -![]({{site.flutter-files-cn}}/posts/images/2020/08/163a04b7ec35d.png) +![]({{site.flutter-files-cn}}posts/images/2020/08/163a04b7ec35d.png) △ 新版 Material Slider -![]({{site.flutter-files-cn}}/posts/images/2020/08/4b39c88d13982.png) +![]({{site.flutter-files-cn}}posts/images/2020/08/4b39c88d13982.png) △ 新版 Material RangeSlider 更新的 DatePicker 新添了紧凑型设计以及对日期范围的支持。 -![]({{site.flutter-files-cn}}/posts/images/2020/08/9b72841cf6b9a.gif) +![]({{site.flutter-files-cn}}posts/images/2020/08/9b72841cf6b9a.gif) △ 新版 DatePicker 最后,TimePicker 也有了全新的视觉风格。 -![]({{site.flutter-files-cn}}/posts/images/2020/08/aa761b870a116.png) +![]({{site.flutter-files-cn}}posts/images/2020/08/aa761b870a116.png) △ 新版 TimePicker @@ -101,7 +101,7 @@ Flutter 团队一直在寻找缩减应用大小和延迟的新方法。对于大 此版本的另一个更新是 AboutDialog 中提供的新的响应式许可页面。 -![]({{site.flutter-files-cn}}/posts/images/2020/08/f46d9adbfbdba.png) +![]({{site.flutter-files-cn}}posts/images/2020/08/f46d9adbfbdba.png) △ 新的许可页面 @@ -113,7 +113,7 @@ Flutter 团队一直在寻找缩减应用大小和延迟的新方法。对于大 首先是一则声明:如果你是 Flutter 插件作者,发布插件时将不再支持使用旧的 pubspec.yaml 格式。在使用旧格式文件执行 pub publish 时会收到以下错误消息: -![]({{site.flutter-files-cn}}/posts/images/2020/08/439e46e8de177.png) +![]({{site.flutter-files-cn}}posts/images/2020/08/439e46e8de177.png) △ 插件发布时使用旧 pubspec 格式后收到的错误消息 @@ -125,17 +125,17 @@ Flutter 团队一直在寻找缩减应用大小和延迟的新方法。对于大 此版本最大的工具更新是 Visual Studio Code 扩展,它提供了一项新功能的预览,使你能够将 Dart DevTools 界面直接嵌入编程工作区。 -![]({{site.flutter-files-cn}}/posts/images/2020/08/1bb7686b6aee2.png) +![]({{site.flutter-files-cn}}posts/images/2020/08/1bb7686b6aee2.png) △ 预览功能:在 Visual Studio Code 中嵌入 Dart DevTools 的 Layout Explorer 使用新的 `dart.previewEmbeddedDevTools` 设置启用此功能。在上面的屏幕截图中,Flutter Widget Inspector 直接嵌入 Visual Studio Code,但是启用新设置后,你可以使用状态栏上的 Dart DevTools 菜单嵌入其他你偏好的页面。 -![]({{site.flutter-files-cn}}/posts/images/2020/08/e483d4839aed8.png) +![]({{site.flutter-files-cn}}posts/images/2020/08/e483d4839aed8.png) 通过此菜单选择要显示的页面。 -![]({{site.flutter-files-cn}}/posts/images/2020/08/3a9be4183f989.gif) +![]({{site.flutter-files-cn}}posts/images/2020/08/3a9be4183f989.gif) 该功能仍处于预览状态,如果你遇到任何问题,请 [在这里提交反馈](https://github.com/Dart-Code/Dart-Code/issues)。 @@ -143,7 +143,7 @@ Flutter 团队一直在寻找缩减应用大小和延迟的新方法。对于大 最新版本 Dart DevTools 带有更新的 Network 页面,可以实现网络套接字分析。 -![]({{site.flutter-files-cn}}/posts/images/2020/08/f2570ba7c41dd.png) +![]({{site.flutter-files-cn}}posts/images/2020/08/f2570ba7c41dd.png) △ Dart DevTools 的 Network 页面上的套接字连接时间、状态和内容类型 @@ -153,7 +153,7 @@ Flutter 团队一直在寻找缩减应用大小和延迟的新方法。对于大 Visual Studio Code 的另一个新功能是当文件被移动或重命名时自动更新导入语句。 -![]({{site.flutter-files-cn}}/posts/images/2020/08/3a9be4183f989.gif) +![]({{site.flutter-files-cn}}posts/images/2020/08/3a9be4183f989.gif) △ 在 Visual Studio Code 中移动 Dart 文件会更新导入语句 @@ -169,11 +169,11 @@ Visual Studio Code 的另一个新功能是当文件被移动或重命名时自 这与我们在 Android Studio / IntelliJ 和 VS Code 扩展中的元数据相同;我们认为这对你构建自己的工具会有所帮助。实际上,此元数据使 IntelliJ 系列 IDE 的功能可以显示 Flutter 代码中使用的颜色: -![]({{site.flutter-files-cn}}/posts/images/2020/08/ca7d24a599cd8.png) +![]({{site.flutter-files-cn}}posts/images/2020/08/ca7d24a599cd8.png) 与此相关的是 IntelliJ 和 Android Studio 中的一项新功能,该功能可为 Color.fromARGB() 和 Color.fromRGBO() 显示色块: -![]({{site.flutter-files-cn}}/posts/images/2020/08/5c8d5b3dcd271.png) +![]({{site.flutter-files-cn}}posts/images/2020/08/5c8d5b3dcd271.png) 特别感谢 [dratushnyy](https://github.com/dratushnyy) 在 GitHub 上为 IntelliJ 中的颜色预览做出的贡献! @@ -181,7 +181,7 @@ Visual Studio Code 的另一个新功能是当文件被移动或重命名时自 为了回应插件作者在用户调研中的普遍需求,最近,我们一直以 [插件](https://docs.flutter.cn/development/packages-and-plugins/developing-packages) 和 [Add-to-App](https://docs.flutter.cn/development/add-to-app) (部分使用了 Flutter 的应用)为对象,探求如何才能让 Flutter 与宿主平台之间的通信更安全、更轻松。为了满足这一需求,我们创建了命令行工具 [Pigeon](https://pub.flutter-io.cn/packages/pigeon),使用 Dart 语法在平台通道上生成类型安全的消息代码,无需添加其他运行时依赖项。你无需在平台通道上手动匹配方法字符串和序列化参数,就可以调用 Java/Objective-C/Kotlin/Swift 类方法,并通过直接调用 Dart 方法传递非原始类型数据对象(反之亦然)。 -![]({{site.flutter-files-cn}}/posts/images/2020/08/607007baf455d.png) +![]({{site.flutter-files-cn}}posts/images/2020/08/607007baf455d.png) Pigeon 虽然处于预发布阶段,但已经足够成熟,我们已经将其用于 [video_player](https://pub.flutter-io.cn/packages/video_player) 插件。如果你有兴趣测试 Pigeon 供自己使用,请参见更新的 [平台通道文档](https://docs.flutter.cn/development/platform-integration/platform-channels#pigeon) 以及此 [示例项目](https://github.com/flutter/samples/tree/master/add_to_app/flutter_module_books)。 @@ -202,7 +202,7 @@ Pigeon 虽然处于预发布阶段,但已经足够成熟,我们已经将其 与往常一样,我们尽力将重要改动(breaking changes)的数量维持在较低水平。以下是 Flutter 1.20 版本中的重要改动列表。 * [55336](https://github.com/flutter/flutter/pull/55336):将 tabSemanticsLabel 添加到 CupertinoLocalizations - 迁移 [指南 PR](https://docs.flutter.cn/release/breaking-changes/cupertino-tab-bar-localizations) -* [55977](https://github.com/flutter/flutter/pull/55977):[将 clipBehavior 添加至具有 clipRect 的 widget]({{site.flutter-files-cn}}/flutter-design-docs/Clip_Behavior.docx) +* [55977](https://github.com/flutter/flutter/pull/55977):[将 clipBehavior 添加至具有 clipRect 的 widget]({{site.flutter-files-cn}}flutter-design-docs/Clip_Behavior.docx) * [55998](https://github.com/flutter/flutter/pull/55998):[为 Navigator 的 TransitionDelegate 新加入了 isWaitingForExitingDecision 判断。](https://groups.google.com/forum/#!searchin/flutter-announce/55998%7Csort:date/flutter-announce/yoq2VGi94q8/8pTsRL28AQAJ) * [56582](https://github.com/flutter/flutter/pull/56582):[更新 Cupertino 中的 Tab 语义,使其与 Material 相同](https://docs.flutter.cn/release/breaking-changes/cupertino-tab-bar-localizations#migration-guide) * [57065](https://github.com/flutter/flutter/pull/57065):移除 NestedScrollView 重叠管理条中被弃用的子参数 diff --git a/src/content/posts/announcing-flutter-1-22.md b/src/content/posts/announcing-flutter-1-22.md index bbd6ab5973..e93188bce1 100644 --- a/src/content/posts/announcing-flutter-1-22.md +++ b/src/content/posts/announcing-flutter-1-22.md @@ -3,7 +3,7 @@ title: Flutter 1.22 发布 — 支持 iOS 14 和 Android 11,以及更多新功 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/05/1s8wc0.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/05/1s8wc0.jpg) *作者 / Chris Sells, Product Manager, Flutter developer experience* @@ -36,13 +36,13 @@ toc: true 其中一项特性就是更新了对 iOS 新版 SF Symbols 字体的支持,为此,我们也相应地更新了 [cupertino_icon package](https://pub.flutter-io.cn/packages/cupertino_icons)。将 cupertino_icons 依赖项更新到新的 1.0 主版本后,现有的 CupertinoIcons 调用将自动映射为新样式。如果将 cupertino_icons 1.0 与 Flutter 1.22 结合使用,那么通过 [CupertinoIcons API](https://api.flutter.cn/flutter/cupertino/CupertinoIcons-class.html),你将能够获得约 900 个新图标。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/xYace4.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/xYace4.png) 你可以在 [cupertino_icons](https://flutter.github.io/cupertino_icons/) 预览页面中查看完整的图标列表,也可以参阅 flutter.dev 上的 [迁移详情页](https://docs.flutter.cn/release/breaking-changes/cupertino-icons-1.0.0)。 针对 iOS 14,你可以使用 Flutter 尝试的另一项功能是 [App Clips](https://developer.apple.com/app-clips/),它是 iOS 14 的一项新增功能,支持以快速、免安装的方式执行 10MB 以下的轻量版本应用。在 Flutter 1.22 版中,我们提供了使用 Flutter 构建轻 App 的功能预览。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/ZHcXNl.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/ZHcXNl.png) > △ 使用 Flutter 构建的轻 App 体验 @@ -54,13 +54,13 @@ toc: true 第一,Flutter 现在可以提供安全边衬区,以支持 Android 设备的异形屏幕,包括刘海屏、挖孔屏和瀑布屏。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/opMphv.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/opMphv.png) 通过使用 [MediaQuery](https://api.flutter.cn/flutter/widgets/MediaQuery-class.html) 和 [SafeArea](https://api.flutter.cn/flutter/widgets/SafeArea-class.html) API,你可以确保将活动的界面和交互元素放置在设备显示屏的无遮挡区域内。另外,你需要避免在瀑布屏边缘区域内设置手势检测,从而避免误触问题。 第二,Flutter 应用内显示软件键盘时的动画已经可以与 Android 11 实现同步。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/uLpxxk.gif) +![]({{site.flutter-files-cn}}posts/images/2021/05/uLpxxk.gif) > △ 请注意左侧悬浮操作按钮 (FAB) 的同步位移 @@ -82,13 +82,13 @@ Issue [#19279](https://github.com/flutter/flutter/issues/19279) 由来己久, > △ 一整套新的 Material Design 按钮 -现有的 Flutter 按钮虽然美观,但 [并不易用]({{site.flutter-files-cn}}/flutter-design-docs/material-button-system-updates.pdf),尤其是在需要自定义主题时。此外,Material 规范也已经扩充包含了许多全新样式的按钮。 +现有的 Flutter 按钮虽然美观,但 [并不易用]({{site.flutter-files-cn}}flutter-design-docs/material-button-system-updates.pdf),尤其是在需要自定义主题时。此外,Material 规范也已经扩充包含了许多全新样式的按钮。 为使 Flutter 紧随 Material 指南的变更步伐,我们很高兴地宣布 Flutter 1.22 中加入了一整套全新的按钮。 相比就地尝试和改进现有的按钮类及其主题,[这个 PR](https://github.com/flutter/flutter/pull/59702) 引入了新的替换按钮 widget 和主题。这项提议不但使我们免于因维护既有类而踏入向后兼容性的迷宫,还使 Flutter 遵守了 [Material Design 指南](https://material.io/components/buttons/) 中对按钮组件的全新命名规则。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/Hm9x4W.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/Hm9x4W.png) 新主题遵循 Flutter 最近对新 Material widget 采用的 "规范化" 模式。如果你想通过示例来上手体验,可以参见 DartPad 中的这个绝佳 [示例](https://dartpad.cn/e560e1c2e4455ad53aac245079ccdcf2)。这并不属于重大变更,因为 FlatButton、OutlineButton、RaisedButton、ButtonBar、ButtonBarTheme 和 ButtonTheme的语义并未发生改变。你可以根据喜好将旧按钮与新按钮混合搭配使用。 @@ -96,9 +96,9 @@ Issue [#19279](https://github.com/flutter/flutter/issues/19279) 由来己久, 自发布以来,Flutter 就提供了对应用进行国际化 (i18n) 和本地化 (l10n) 所需的核心功能。但在最新版本中,我们将推荐的最佳做法直接整合进了工具当中,甚至实现了热重载支持,可以在你添加新的本地化信息时更新你的应用。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/8QezMC.gif) +![]({{site.flutter-files-cn}}posts/images/2021/05/8QezMC.gif) -如果你想了解有关 Flutter 本地化支持的更多详细信息,包括本地化的消息,以及含参数、日期、数字和货币的消息,请阅读 Flutter [国际化用户指南]({{site.flutter-files-cn}}/flutter-design-docs/i18n-user-guide.pdf)。 +如果你想了解有关 Flutter 本地化支持的更多详细信息,包括本地化的消息,以及含参数、日期、数字和货币的消息,请阅读 Flutter [国际化用户指南]({{site.flutter-files-cn}}flutter-design-docs/i18n-user-guide.pdf)。 此外,如果你对国际化和本地化感兴趣,那么你可能同样有兴趣了解旧的纯文本 ASCII 无法支持的字符串,例如 Unicode 和表情符号 (emoji)。最近,Dart 团队发布了 characters package,可以帮助开发者处理 Unicode (扩展) 字形集。这个 package 可解决诸如如何将类似于 "A 🇬🇧 text in English" 的字符串正确地缩短至前 15 个字符一类的问题。使用 String 类时,缩短的结果是 "A 🇬🇧 text in",仅含 12 个用户可感知字符。而使用 [characters package](https://pub.flutter-io.cn/packages/characters) 则会得到正确的结果: "A 🇬🇧 text in Eng"。 @@ -108,7 +108,7 @@ Issue [#19279](https://github.com/flutter/flutter/issues/19279) 由来己久, Flutter 团队在将某项功能标记为 "生产就绪" 前会非常谨慎,并亲自完成全面的测试。对于 [google_maps_flutter](https://pub.flutter-io.cn/packages/google_maps_flutter) 和 [webview_flutter](https://pub.flutter-io.cn/packages/webview_flutter) 插件而言,决断因素一直是底层的 [Platform Views](https://docs.flutter.cn/development/platform-integration/platform-views) 实现,该实现支持将 Android 和 iOS 系统的原生界面组件托管在 Flutter 应用中。我们很高兴地宣布,我们在此版本的 Flutter 中对框架的基础进行了充分强化,足以将这两个插件标记为 "生产就绪"。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/8kusLr.gif) +![]({{site.flutter-files-cn}}posts/images/2021/05/8kusLr.gif) > △ 托管 flutter.dev 的 webview_flutter 插件 @@ -122,7 +122,7 @@ Google Maps 和 WebView 插件已经从 Platform Views 的改进中受益。如 如果你曾在 Flutter 应用中使用过 [导航](https://docs.flutter.cn/development/ui/navigation),那么你可能已经注意到核心数据结构 (即用户所浏览的页面堆栈) 是对你隐藏的。要对其进行管理,你需调用 Navigator.pop() 或 Navigator.push()。举例来说,假设你想在首页上显示一系列 widget,用户点按一个 widget 后转到呈现该颜色的详细信息页面 (如下图所示)。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/XmAMxs.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/XmAMxs.png) 这两个屏幕可以采用如下方式实现: @@ -256,7 +256,7 @@ class CounterState extends State with RestorationMixin { 简而言之,每个 widget 都有一个存储分区,该存储分区使用唯一 ID 注册到 [RestorationMixin](https://api.flutter.cn/flutter/widgets/RestorationMixin-mixin.html)。通过使用 [RestorableProperty](https://master-api.flutter-io.cn/flutter/widgets/RestorableProperty-class.html) 类型 (如此例使用的 RestorableInt) 存储特定于界面的数据,并向状态恢复功能注册该数据,即可在 Android 终止应用前自动存储数据,并在应用恢复运行时恢复数据,就是这么简单。所有以 Restoration* 类型存储的数据 (如 RestorableInt、RestorableString 和 RestorableTextEditingController,不胜枚举) 都能被恢复。而且,如果我们未能覆盖你想要恢复的类型,你也可以通过扩展 [RestorableProperty](https://api.flutter.cn/flutter/widgets/RestorableProperty-class.html) 来创建自己的类型。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/ZUSUID.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/ZUSUID.png) 为了自动测试状态恢复,我们 [为 WidgetTester 添加了一个新的 restartAndRestore API](https://api.flutter.cn/flutter/flutter_test/WidgetTester/restartAndRestore.html)。要进行手动测试,最简单的方法是在 Android 设备上启动已启用状态恢复功能的 Flutter 应用,在 Android 的开发者设置中打开 "Don’t keep activities",运行 Flutter 应用并将其置于后台,然后再切换回该应用。此时,Android 已终止并恢复你的应用,届时你可以检查是否一切正常。 @@ -283,7 +283,7 @@ void main() { Dart 之前有许多小巧的开发者工具 (例如,用于格式化的 dartfmt 和用于代码分析的 `dartanalyzer`)。Dart 2.10 中新提供了统一的 dart 开发者工具,与 flutter 工具非常相似。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/ngscrA.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/ngscrA.png) 自新版 Flutter 1.22 SDK 起,/bin 文件夹 (可能在你的 PATH 位置) 中将同时包含 flutter 和 dart 命令。有关更多详细信息,请参阅 [Dart 2.10](https://medium.com/dartlang/announcing-dart-2-10-350823952bd5) 的发布文章。 @@ -307,13 +307,13 @@ Flutter 1.22 还带来了新的输出应用体积分析的实用工具。此工 在构建 Flutter 输出工件时使用此标记将打印工件大小及组成的摘要。其中包括原生代码、资源,甚至包括已编译的 Dart 代码的软件包级细分情况。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/C8RTHd.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/C8RTHd.png) > △ Flutter Gallery 发布版本 APK 的细分示例 此摘要有助于快速识别应用软件包中的尺寸热点。此外,收集到的数据还可作为 JSON 文件用于 Dart DevTools,你可以按照 [Flutter 文档上的说明](https://docs.flutter.cn/development/tools/devtools/app-size) 进一步浏览应用的内容、查明大小问题以及比较两个不同 JSON 文件之间的差异。加载 JSON 文件后会出现一个界面,其中提供了应用尺寸情况的树状图。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/GedErZ.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/GedErZ.png) > △ Dart DevTools 中的 APK 细分示例 @@ -323,13 +323,13 @@ Flutter 1.22 还带来了新的输出应用体积分析的实用工具。此工 此版本中的另一项 DevTools 预览功能是,用户能够在 **Network** 标签中查看 HTTP 和 HTTPs 响应正文。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/xx7qFb.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/xx7qFb.png) 要启用此功能,请确保通过 flutter channel dev 和 flutter upgrade 命令进入 Flutter dev 渠道。 此外,对于网络流量较大的应用,我们提供了搜索和筛选功能。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/10HBMU.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/10HBMU.png) 有关 **Network** 标签的文档,请参阅 [使用网络视图 (Network View)](https://docs.flutter.cn/development/tools/devtools/network) 的说明。 @@ -337,7 +337,7 @@ Flutter 1.22 还带来了新的输出应用体积分析的实用工具。此工 一段时间以来,我们一直在维护着某些 Flutter 工具的两个副本,例如 IntelliJ 中的 **Inspector** 窗格和 Dart DevTools 中的 **Inspector** 标签。这不仅降低开发速度,因为我们必须维护两个代码库,也造成某些功能 (例如 Layout Explorer) 尚未能纳入到 IntelliJ 插件当中。因此,为了同时解决这两个问题,我们现在提供直接在 IntelliJ 内部托管 Dart DevTools 的 Inspector 标签的功能。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/AWpL8g.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/AWpL8g.png) 请注意新出现的 Layout Explorer,你可以在代码旁使用该功能。要启用此选项,请使用 **Preferences** > **Languages & Frameworks** > **Flutter** > **Enable embedded DevTools inspector**。 @@ -345,7 +345,7 @@ Flutter 1.22 还带来了新的输出应用体积分析的实用工具。此工 对于所有 Flutter 开发者而言,在终端或堆栈分析结果中查看错误输出并继续解决问题都是一项必不可少的例行工作。在 Visual Studio Code 的最新版本 Flutter 扩展中,现已能够正确解析这些链接,使你可以直接在输出结果中使用它们。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/krDNo3.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/krDNo3.png) 这项功能看似微不足道,却已获得了非常积极的初步反馈。 @@ -364,7 +364,7 @@ Flutter 1.22 还带来了新的输出应用体积分析的实用工具。此工 [EasyA](https://easya.io/) 是一款订阅应用,为适龄学生搭建了通过即时通讯与优秀教师沟通的平台,该应用使用 Flutter 编写。这款应用近日被 Apple 推荐为 [每日精选应用](https://apps.apple.com/gb/story/id1527472788)。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/IvM3sF.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/IvM3sF.png) > 今年年初,学校纷纷启动了在线课程,我们需要快速发布这款教学应用来为学生提供帮助。Flutter 惊人的开发速度使我们能够针对 iOS 和 Android 平台实现优秀的设计,而且还支持发布到 web 平台,这有助于我们及时应对停课的局面!这在以前是无法想象的。由于 Flutter 支持同时针对所有三个平台进行开发,我们能够高效地共享代码,并最为充分地利用我们的小型开发团队。 > diff --git a/src/content/posts/announcing-flutter-1-7-9.md b/src/content/posts/announcing-flutter-1-7-9.md index a41b8030fb..2ee6503eb6 100644 --- a/src/content/posts/announcing-flutter-1-7-9.md +++ b/src/content/posts/announcing-flutter-1-7-9.md @@ -7,7 +7,7 @@ toc: true 今天,我们非常高兴地向大家宣布又一个正式版本的发布 —— Flutter 1.7,这是继上次 I/O 时众多重要功能发布以来的一次小更新。Flutter 1.7 包含了对 AndroidX 的支持,满足了 Play 商店近期对应用提出的要求,包含了一些新的和增强过的组件,修复了开发者们提出的 bug 等。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot7-release/announcing-1-7.png){:width="95%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot7-release/announcing-1-7.png){:width="95%"} 如果你已经安装,并使用默认稳定构建渠道 (stable channel) 的 Flutter,要升级到 1.7 版本,只需要运行 `flutter upgrade` 即可。同时,你可以在 [这个文档里](/get-started/install) 查看如何新安装 Flutter。 @@ -31,7 +31,7 @@ toc: true 如下所示了一个名为 [RangeSlider](https://github.com/flutter/flutter/pull/31681) 的 widget,帮助你在单个滑块儿上选择一组值: -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot7-release/rangeslider-widget.gif){:width="95%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot7-release/rangeslider-widget.gif){:width="95%"} RangeSlider widget 支持连续或者分散的效果 @@ -43,7 +43,7 @@ RangeSlider widget 支持连续或者分散的效果 文本渲染有了很大的提升,支持了丰富的 [排版样式](https://api.flutter.dev/flutter/painting/TextStyle/fontFeatures.html):包括数字表格式对齐、旧式风格数字 (tabular and old-style numbers)、斜线零 (slashed zeros)、样式集 (stylistic sets),如这个示例应用截图所示: -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot7-release/openType-font.png){:width="95%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot7-release/openType-font.png){:width="95%"} 有了 OpenType 的字体支持,你可以用 Flutter 进行复杂的文字排版了 @@ -65,7 +65,7 @@ RangeSlider widget 支持连续或者分散的效果 如果通过这种方式创建示例,你将在文档中的 Sample in the App 这一栏看到: -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot7-release/sample-at-docs.png){:width="95%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot7-release/sample-at-docs.png){:width="95%"} 我们也会持续把每周 Flutter widgets 视频嵌入到文档中,在开发者们浏览各种 widget 的时候可以得到更全面的理解。 @@ -90,6 +90,6 @@ RangeSlider widget 支持连续或者分散的效果 除了应用程序,整个开源社区所涉及的众多 [资源](https://flutterx.com/),[插件](https://pub.flutter-io.cn/flutter), [Flutter 社区活动](https://flutterevents.com/) 和 [Meetup](https://www.meetup.com/topics/flutter/) 也使得 Flutter 变得格外生机勃勃。 我们会持续关注大家基于 Flutter 所实现的各种有趣的应用,同时也非常荣幸和大家一起分享其中的乐趣。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot7-release/flutter-bag.jpeg){:width="95%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot7-release/flutter-bag.jpeg){:width="95%"} Photo credit: [@damian2048](https://twitter.com/damian2048) diff --git a/src/content/posts/announcing-flutter-2-2.md b/src/content/posts/announcing-flutter-2-2.md index d20bda14f2..a56285965e 100644 --- a/src/content/posts/announcing-flutter-2-2.md +++ b/src/content/posts/announcing-flutter-2-2.md @@ -5,7 +5,7 @@ toc: true 在本次 [Google I/O 2021 大会](https://mp.weixin.qq.com/s/S1GZdQdwcdZKIbBY_FlzJQ)上,我们正式发布了 [Flutter 2.2](https://docs.flutter.cn/whats-new)。Flutter 2.2 是我们最新版的开源工具包,可让开发者立足单个平台构建适合任何设备的精美应用。Flutter 2.2 是迄今为止最出色的 Flutter 版本。借助更新后的功能,开发者能更便利地通过应用内购买、支付方式和广告将其应用变现,还能连接到云服务和 API 来扩展应用的功能;而借助工具和语言功能,开发者能够消除一整类的错误,增强应用性能并缩减软件包大小。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/zC30Hx.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/zC30Hx.png) ## **在 Flutter 2 的基础上打造而成** @@ -35,7 +35,7 @@ Flutter 2.2 侧重于改进开发体验,目的是让你能够向客户提供 尽管 Google 仍是 Flutter 项目的主要贡献者,但我们也欣喜地看到 Flutter 的生态系统在不断发展壮大。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/vulUJU.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/vulUJU.png) 近几个月来,一个特别的增长领域就是支持 Flutter 的平台和操作系统日益增多。在 [Flutter Engage 活动](https://flutter.cn/posts/flutter-engage-event-recap)中,我们曾宣布 [Toyota 将把 Flutter 引入其下一代汽车信息娱乐系统](https://flutter.cn/posts/seamless-multi-platform-app-development-with-flutter)。上个月,Canonical 推出了其首个 [集成了 Flutter 支持的 Ubuntu 版本](https://ubuntu.com/blog/ubuntu-21-04-is-here),其中集成了 Snap 并支持 Wayland。 @@ -53,4 +53,4 @@ Flutter 2.2 侧重于改进开发体验,目的是让你能够向客户提供 我们在 Flutter 方面所做的工作会在 [Google I/O 大会](https://mp.weixin.qq.com/s/S1GZdQdwcdZKIbBY_FlzJQ)上 [以各种研讨会、演示和视频点播的形式](https://events.google.com/io/program/content?4=topic_flutter) 与大家分享。别忘记尝试我们的 [photo booth web 应用](https://photobooth.flutter.dev),这个有趣的应用就是用 Flutter 开发的,你可以在那里与我们的吉祥物 Dash 及其伙伴们合影留念! -![]({{site.flutter-files-cn}}/posts/images/2021/05/r8Qxd4.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/r8Qxd4.png) diff --git a/src/content/posts/announcing-flutter-2-8.md b/src/content/posts/announcing-flutter-2-8.md index 00105806e8..b2a17dc4fe 100644 --- a/src/content/posts/announcing-flutter-2-8.md +++ b/src/content/posts/announcing-flutter-2-8.md @@ -7,7 +7,7 @@ toc: true Flutter 已经更新到 2.8 正式版,发布了多项新特性和改进以不断改善移动和 Web 端的开发体验,同时也正在将桌面端的支持推向稳定版。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/announcing-flutter-2-8/flutter-2-8-hero.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/announcing-flutter-2-8/flutter-2-8-hero.png) Flutter 为应用开发带来了革新:只要一套代码库,即可构建、测试和发布适用于移动、Web、桌面和嵌入式平台的精美应用——开发者只需专注于他们希望构建的产品和服务,而无需首要考虑发布到哪些平台;作为一个高性能、高生产力的开发框架,Flutter 也可以帮助开发者们缩短产品开发周期;一套代码库,针对多个平台。 @@ -17,7 +17,7 @@ Flutter 为应用开发带来了革新:只要一套代码库,即可构建、 最新的更新也包含了更方便的 **应用接入后端服务** 的特性,比如使用 Firebase 和 Google Cloud。我们也为应用可以加入 Google Ads 提供了稳定版的支持,并对相机插件和 Web 插件内嵌提供了大量更新。与此同时发布的还有 Dart 2.15 正式版,增加了对并发性能的重大改进,也添加了新的语言特性,比如构造函数拆分和枚举类型的增强,也进行了性能优化,使得运行时内存降低了 10%。 -![现在你的应用可以通过使用一个简单的 Flutter widget 来完成多平台用户登录功能了]({{site.flutter-files-cn}}/posts/flutter-cn/2021/announcing-flutter-2-8/sign-in-widget.png) +![现在你的应用可以通过使用一个简单的 Flutter widget 来完成多平台用户登录功能了]({{site.flutter-files-cn}}posts/flutter-cn/2021/announcing-flutter-2-8/sign-in-widget.png) 另一个重要话题和资源投入是「提升开发者效率」,得力于 Flutter 的有状态热重载 (stateful hot reload) 等特性,我们始终专注于为开发者创建一个紧凑的内部循环迭代流程,我们正在开始探索封装出一些更高级的功能让开发者们更快速和高效的使用,你也能在未来的版本里看到我们针对这个目标的改进。比如在此次正式版发布里,我们添加了一个使用 Firebase 处理身份验证的 widget,使用的时候无须担心任何特殊的用例,比如两步验证、密码重置的操作,也不用操心使用 Google、Apple、Twitter 和 Facebook 账号登录时的复杂情况。将这些特性和服务直接构建在 Flutter 的核心基础中,将有可能为应用开发带来革新,将高效开发和低代码方案相结合,应用在 Flutter 这个灵活和强大的 UI 框架上。 @@ -30,7 +30,7 @@ Flutter 为应用开发带来了革新:只要一套代码库,即可构建、 Flame 是模块化的,它也可以使用其他库或 package 进行扩展,比如使用 River 进行动画效果处理、使用 audioplayers 这个 package 进行音乐播放和声音特效,使用 Forge2D (一个类似 Box2D 的物理引擎)、Tiled (瓦片地图编辑器)、Fire Atlas (Spritesheet 和精灵动画编辑器) 等。Flame 以及其广泛的生态系统,共同为休闲或者 2D 游戏提供了一套强大的服务。 -![三款使用 Flame 构建的游戏示例:Tomb Toad、Gravity Runner 和 Bonfire]({{site.flutter-files-cn}}/posts/flutter-cn/2021/announcing-flutter-2-8/flame-game-demo.png) +![三款使用 Flame 构建的游戏示例:Tomb Toad、Gravity Runner 和 Bonfire]({{site.flutter-files-cn}}posts/flutter-cn/2021/announcing-flutter-2-8/flame-game-demo.png) Flame 由 [Blue Fire 团队](https://dev.to/blue-fire/fireslime-is-now-blue-fire-405g "Blue Fire 团队") 创造,这是一个专注于为 Flutter 和 Dart 构建开源 package 和插件的团队。我们很高兴能与他们一起合作,如果你对游戏开发感兴趣,我们鼓励你去试试看 Flame。 @@ -38,7 +38,7 @@ Flame 由 [Blue Fire 团队](https://dev.to/blue-fire/fireslime-is-now-blue-fire Flutter 的持续增长、发展势头以及工具和生态的繁荣的令人感叹。今年的 I/O 大会上,我们注意到 Play 商店以及拥有超过 20 万款应用使用了 Flutter,六个月后,这个数字几近翻了一番,达到 37.5 万+ 款! -![在所有屏幕上大放异彩,Flutter 支持 Android、iOS、iPadOS、Web、Windows、macOS 和 Linux]({{site.flutter-files-cn}}/posts/flutter-cn/2021/announcing-flutter-2-8/flutter-platform.png) +![在所有屏幕上大放异彩,Flutter 支持 Android、iOS、iPadOS、Web、Windows、macOS 和 Linux]({{site.flutter-files-cn}}posts/flutter-cn/2021/announcing-flutter-2-8/flutter-platform.png) 不仅在 Android 平台,据独立移动分析公司 [AppAnnie](https://www.appannie.com/cn/ "AppAnnie") 的信息,iOS 平台头部品牌和大型应用诸如 [BMW](https://itunes.apple.com/app/id1519457734 "BMW")、[eBay](https://itunes.apple.com/app/id1456156090 "eBay")、[WeChat](https://apps.apple.com/us/app/wechat/id414478124 "WeChat")、[SHEIN](https://apps.apple.com/us/app/shein-online-fashion/id878577184 "SHEIN")、[Philips Hue](https://apps.apple.com/app/id1055281310 "Philips Hue")、 [Norton](https://apps.apple.com/app/id1278474169 "Norton")、[trip.com](https://apps.apple.com/app/id681752345 "trip.com") 和 [Greggs](https://apps.apple.com/gb/app/greggs/id1098233626 "Greggs") 里也都使用了 Flutter。在 Web 平台,我们也通过一些类似 [FlutterFlow](https://flutterflow.io/ "FlutterFlow") 和 [Rive](https://rive.app/ "Rive") 等设计工具为应用带去更好的体验。桌面端,Ubuntu 的工程团队也正继续使用 Flutter 构建各种新的体验,包括新的安装程序和固件更新程序。甚至包括 [绝地求生](https://apps.apple.com/us/app/pubg-mobile-arcane/id1330123889 "绝地求生") 这样的大型游戏,也称 Flutter 能够很好的适应各种 UI 屏幕。 diff --git a/src/content/posts/announcing-flutter-2.md b/src/content/posts/announcing-flutter-2.md index 49a0722c30..d2b5e63c74 100644 --- a/src/content/posts/announcing-flutter-2.md +++ b/src/content/posts/announcing-flutter-2.md @@ -5,17 +5,17 @@ toc: true 3月4日凌晨,**Flutter 2** 正式发布: 开发者为*任何*平台创建美观、快速且可移植应用的能力得以更上一层楼。通过 Flutter 2,你可以使用相同的代码库为五种操作系统构建原生应用: iOS、Android、Windows、macOS 和 Linux;以及为 Chrome、Firefox、Safari 和 Edge 等浏览器打造 web 体验。Flutter 甚至可以嵌入到汽车、电视和智能家电,为环境计算提供最普适、可移植的体验。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/0939e5e734a5c.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/0939e5e734a5c.png) 我们的目标是*从根本上改变*开发者的应用构建思路,让体验先于平台。Flutter 可以让你尽情雕琢**精美**的应用体验,畅快表达自己的品牌和设计风格。Flutter 可以将你的源代码编译为机器码,并**快速**运行,同时借助有状态热重载功能为你带来了解释环境的**高效**生产力,让你可以在应用运行时做出更改并立即查看结果。而且 Flutter 是**开源**的,有成千上万的贡献者在为核心框架添砖加瓦,并围绕其打造了包含海量 package 的生态系统。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/f090329f06af7.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/f090329f06af7.png) 在 [发布](https://flutter.dev/) 的 Flutter 2 中,我们将 Flutter 从移动框架扩展为**可移植**框架,让你的应用基本可以不加变动地在多种平台上运行。仅 Google Play 商店就已有**超过 15 万款 Flutter 应用**,而现在应用可以在无需重写的情况下部署到桌面设备和 web 平台,可以说每款应用都通过 Flutter 2 得到 "免费升级"。 世界各地的用户都在使用 Flutter,包括 [WeChat](https://apps.apple.com/us/app/wechat/id414478124)、[Grab](https://play.google.com/store/apps/details?id=com.grabtaxi.passenger)、[Yandex Go](https://play.google.com/store/apps/details?id=ru.yandex.taxi)、[Nubank](https://play.google.com/store/apps/details?id=com.nu.production)、[Sonos](https://apps.apple.com/us/app/sonos/id1488977981)、[Fastic](https://apps.apple.com/us/app/fastic-fasting-app/id1459260306)、[Betterment](https://play.google.com/store/apps/details?id=com.betterment) 和 [realtor.com](https://apps.apple.com/US/app/id336698281?mt=8) 等热门应用。Flutter 在 Google 也是备受依赖的重要工具,我们有一千多名工程师正在使用 Dart 和 Flutter 构建应用。许多产品已经发布,包括 Stadia、Google One 和 Google Nest Hub。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/458afcd4aaecf.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/458afcd4aaecf.png) 几个月前,[Google Pay 改用 Flutter](https://mp.weixin.qq.com/s/2y3dWbA4uZbwfTx_bOGdSQ) 打造其旗舰移动应用,在生产力和质量上取得重大进步。通过统一代码库,团队消除了平台之间的功能差异,精简了超过 50 万行代码。Google Pay 还表示,其工程师效率大幅提高,技术债务显著减少,并在 iOS 和 Android 系统上统一了安全审查和实验等发布流程。 @@ -37,11 +37,11 @@ Web 的 [早期基础以文档为中心](https://tools.ietf.org/html/rfc1866)。 目前已经出现了一批使用 Flutter 构建的 web 应用示例。在教育工作者中,[iRobot](https://www.irobot.com/) 以其广受欢迎的 [Root 教育机器人](https://www.irobot.com/Root) 而闻名。Flutter 在 web 平台对生产环境的支持,使 iRobot 能够将现有的 [教育编程环境](https://edu.irobot.com/what-we-offer/irobot-coding) 搬到 web 上,从而覆盖到了 Chromebook 以及其他以浏览器为主要体验的设备。iRobot 的 [博文](https://edu.irobot.com/the-latest/building-a-coding-experience-for-all) 详尽阐述了选择 Flutter 的理由以及使用情况。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/3bbba28798746.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/3bbba28798746.png) 另一个例子是 Rive,他们为设计师打造的强大工具可以将创建的自定义动画发布到任意平台。其 [新版 web 应用](https://rive.app/) 完 全由 Flutter 构建,现已进入 Beta 阶段,这也是 web 平台最能展现 Flutter 特色的体验之一。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/384a963e53119.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/384a963e53119.png) 你可以从 [Flutter web 发布文章](https://medium.com/flutter/web-post-d6b84e83b425) 中了解更多信息。 @@ -51,15 +51,15 @@ Web 的 [早期基础以文档为中心](https://tools.ietf.org/html/rfc1866)。 第一位合作伙伴,**Canonical** 与我们联手将 Flutter 带到桌面,Canonical 工程师贡献的代码使得 Flutter 开发者能在 Linux 上进行开发和部署。在活动中,Ubuntu 团队展示了使用 Flutter 重写的新安装程序的早期演示版。对 Canonical 来说,在多种硬件配置上提供稳如磐石且美妙的体验至关重要。未来,**Flutter 将成为 Canonical 打造桌面和移动应用的首选**。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/74e068704f2a5.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/74e068704f2a5.png) 第二位合作伙伴 **Microsoft** 正在继续扩大对 Flutter 的支持。除了 [持续与我们合作](https://github.com/flutter/flutter/issues/14967#issuecomment-787678757) 为 Flutter 提供高质量的 Windows 支持外,Microsoft 还发布了对 Flutter 引擎的贡献: 支持新兴的可折叠 Android 设备。这些设备带来了新的设计模式,应用可以扩展内容,或者利用双屏特性提供窗口并排体验。Surface 工程团队在一篇 [博文](https://devblogs.microsoft.com/surface-duo/flutter-dual-screen-foldable/) 中展示了其工作成果,并邀请大家加入他们的行列,共同完成适用于 Surface Duo 和其他设备的高质量解决方案。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/781360ee27de7.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/781360ee27de7.png) 第三位合作伙伴,全球畅销汽车制造商之一 **Toyota** 宣布,计划构建由 Flutter 驱动的信息娱乐系统,打造最佳的汽车数字体验。使用 Flutter 标志着车载软件的开发方式向着未来迈进了一大步。Toyota 之所以选择 Flutter,是因为其高性能和体验的一致性,快速迭代的能力和极高的开发者工效,以及智能手机级别的触控体验机制。通过使用 Flutter 的嵌入器 API,Toyota 能够根据车载系统的独特需求对 Flutter 进行定制。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/8f5850ecec2bd.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/8f5850ecec2bd.png) 我们很荣幸与 Toyota 等合作伙伴继续深入协作,将 Flutter 带到汽车、电视和其他嵌入式设备中,在未来几个月我们会为大家带来更多这方面的示例。 @@ -69,7 +69,7 @@ Web 的 [早期基础以文档为中心](https://tools.ietf.org/html/rfc1866)。 我们也为 Flutter 带来了 [Google Mobile Ads ](https://pub.dev/packages/google_mobile_ads) Beta 版,这款全新 SDK 通过 AdMob 和 AdManager 提供多种广告格式,包括横幅式、插页式、原生和激励视频广告。我们之前已经邀请了一些主要客户 (比如拉丁美洲最大的独立艺术家音乐平台 [Sua Música](https://www.suamusica.com.br/)) 先行体验此 SDK,现在计划开放 Google Mobile Ads 供更多的 Flutter 开发者采用。 -![图片]({{site.flutter-files-cn}}/posts/images/2021/03/59e21f0feea5d.png) +![图片]({{site.flutter-files-cn}}posts/images/2021/03/59e21f0feea5d.png) 我们还更新了 [几项核心 Firebase 服务的 Flutter 插件](https://firebase.flutter.dev/): Authentication、Cloud Firestore、Cloud Functions、Cloud Messaging、Cloud Storage 和 Crashlytics,包括对健全空安全的支持以及对 Cloud Messaging package 的全面改版。 @@ -93,11 +93,11 @@ Dart 为构建应用提供了一套独特的功能: 在介绍 Flutter 2 时,本文由于篇幅限制难免挂一漏万。事实上,被合并的 PR (pull request) 清单就有足足 200 页!请阅读 [Flutter 2 技术博文](https://medium.com/@csells_18027/fe8e95ecc65),里面介绍了更多新功能和性能改进,我们认为会让 Flutter 开发者感到满意,也请大家立即下载 Flutter 2 开始体验。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/46794d1264d83.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/46794d1264d83.png) 我们还为大家准备了一款全新的示例应用,[Flutter Folio](https://flutterfolio.com),由我们与加拿大埃德蒙顿的获奖设计团队 [gskinner](https://gskinner.com/) 合作完成,这个示例展示了我们刚刚提到的一切内容。Flutter Folio 是一款能在你所有的设备上运行的剪贴簿应用。在小屏幕上体验时会强调展示内容;而在大屏幕上体验时则支持以桌面和平板电脑的习惯用法进行内容编辑;web 体验则着重强调分享。这些定制化的体验都共享相同的开源代码库,可供你自由浏览。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/7ef1cc3624d4e.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/7ef1cc3624d4e.png) 如果你尚未尝试过 Flutter,我们相信它将为你的应用开发体验带来巨大的提升。Flutter,一个开源工具包,让你通过单一代码库为移动、桌面、web 和嵌入式设备打造美观、快速的应用,让你即便是在面对 Google 和广大用户的苛刻需求时也能游刃有余。 diff --git a/src/content/posts/announcing-flutter-3-3-at-flutter-vikings.md b/src/content/posts/announcing-flutter-3-3-at-flutter-vikings.md index 3a592682f0..022c0c5c9c 100644 --- a/src/content/posts/announcing-flutter-3-3-at-flutter-vikings.md +++ b/src/content/posts/announcing-flutter-3-3-at-flutter-vikings.md @@ -11,7 +11,7 @@ Flutter 团队及社区成员们在美丽的城市挪威奥斯陆向你发来问 Flutter 的使用量和生态系统都在持续增长,**每天有超过 1,000 款使用 Flutter 的、新的移动应用发布到 App Store 和 Google Play 商店**,在 Web 端和桌面端的使用也在持续增长。Flutter 生态中目前也有超过 25,000 个以上的 package,这也进一步证明了 Flutter 的成熟和广泛应用。 -![]({{site.flutter-files-cn}}/posts/images/2022/09/ubVHzF.jpg) +![]({{site.flutter-files-cn}}posts/images/2022/09/ubVHzF.jpg) 今天,我们正式发布 Flutter 3.3。这个版本专注于完善和性能改进,以加强 Flutter 3 发布以来的新特性。Flutter 3.3 加入了一些新的组件并修复了一些错误以加强对 Material 3 规范的支持,也加入了对 iPad 上使用随手写输入文本的支持、可选择的文本分组和触控板支持等对平板电脑和桌面开发者有帮助的新支持。这个版本还包括了 Dart 2.18 的发布,它为使用 Swift 和 Objective-C 构建的库和代码加入了 FFI 的支持。使用这个 Dart 版本构建的应用,将会在桌面端、Web 端和移动端表现出更好的性能。因此我们强力建议你即刻运行命令 flutter upgrade 来升级到最新版。 @@ -19,7 +19,7 @@ Flutter 的使用量和生态系统都在持续增长,**每天有超过 1,000 我们与 gskinner 的设计团队通力合作,发布了一个名为 Wonderous 的应用,旨在向大家展示 Flutter 的强大功能——帮助你构建出高质量、精美的用户体验,而它本身就是一个非常精美的应用——从印度阿格拉市令人惊叹的泰姬陵到墨西哥尤卡坦半岛上的玛雅遗址,Wonderous 将世界上一些非常了不起的地方带到你的手机上,使用视频和图像来探索这些艺术、历史和文化的交集。 -![]({{site.flutter-files-cn}}/posts/images/2022/09/TDcEt8.jpg) +![]({{site.flutter-files-cn}}posts/images/2022/09/TDcEt8.jpg) 我们希望你与家人和朋友分享 Wonderous,更重要的是,它还作为一个开源项目供开发者们探索。作为一个真实上线运营的应用,它提供了一个完整且全面的示例,展示了我们希望为中高级开发者带去灵感和创想的最佳实践。未来的几周时间里,gskinner 团队将会分享关于这个应用的更多技术细节文章,包括对无障碍的支持、动画效果以及性能方面的技巧等内容。 diff --git a/src/content/posts/announcing-flutter-3-7.md b/src/content/posts/announcing-flutter-3-7.md index 8bf625f52d..703ea53648 100644 --- a/src/content/posts/announcing-flutter-3-7.md +++ b/src/content/posts/announcing-flutter-3-7.md @@ -7,7 +7,7 @@ toc: true 新年伊始,由 Flutter 3.7 正式版来「打头阵」!我们与整个 Flutter 社区们继续在 Flutter 3.7 中优化了框架,包括创建自定义菜单栏和层叠式菜单、更好的国际化工具支持、新的调试工具以及其他功能和特性等。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/36024c875a435.jpg) +![]({{site.flutter-files-cn}}posts/images/2023/01/36024c875a435.jpg) 新的稳定版里,我们在持续改进一些特性,例如全局文本选择、Impeller 渲染速度、DevTools 以及一直以来都在优化的性能。让我们一起来快速探索 Flutter 3.7 的新特性吧! @@ -48,7 +48,7 @@ MaterialApp( 你也可以尝试 [Material 3 示例](https://flutter-experimental-m3-demo.web.app/#/),其中展示了所有主题的特性。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/edc093ab9959d.gif) +![]({{site.flutter-files-cn}}posts/images/2023/01/edc093ab9959d.gif) ## 菜单栏和级联菜单 @@ -58,7 +58,7 @@ Flutter 现在可以创建菜单栏和级联菜单了。 此外,对于所有其他的平台,你可以定义一个 [Material Design 菜单](https://m3.material-io.cn/components/menus/overview),它提供了级联菜单栏 ([`MenuBar`](https://api.flutter.cn/flutter/material/MenuBar-class.html)),或者使用由 UI 界面元素触发的 ([`MenuAnchor`](https://api.flutter.cn/flutter/material/MenuAnchor-class.html)) 来创建一个级联菜单。这些菜单都是完全可自定义的,其中的菜单项可以是自定义的 widget,也可以使用新的菜单项 widget: ([`MenuItemButton`](https://api.flutter.cn/flutter/material/MenuItemButton-class.html) 和 [`SubmenuButton`](https://api.flutter.cn/flutter/material/SubmenuButton-class.html))。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/f15288d8fe378.png) +![]({{site.flutter-files-cn}}posts/images/2023/01/f15288d8fe378.png) ## Impeller 预览版 @@ -78,19 +78,19 @@ Impeller 的进展飞速离不开社区贡献者的支持。尤其是 [ColdPaleL 现在 `flutter build ipa` 命令会校验项目的一部分设置,并且在清单中告知你在发布前进行更改。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/e51530946f812.png) +![]({{site.flutter-files-cn}}posts/images/2023/01/e51530946f812.png) ## 开发者工具更新 在本次发布中,开发工具也带来了新的特性和体验优化。DevTools 的内存调试工具已经完成了一轮全面的调整。我们带来了三个新的选项卡:**Profile**、**Trace** 和 **Diff**,它们包含了先前的所有内存调试功能,也添加了更多利于调试的操作。现在你可以按照类或者内存类型对当前的内存分配进行分析,可以在运行时分析哪些代码调用了哪些部分的内存,也可以对比两个不同时间点的内存快照之间的差异来了解内存使用的细节。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/0498c7b2659ab.png) +![]({{site.flutter-files-cn}}posts/images/2023/01/0498c7b2659ab.png) 以上的这些内存特性已经在 [文档](https://docs.flutter.cn/development/tools/devtools/memory) 中进行了介绍,若你感兴趣可以前往了解更多细节。 性能页面也有一些值得注意的新功能,该页面现在在顶部新增了 **Frame Analysis** (帧分析) 选项卡,它能够提供在 Flutter 中详细追踪大量消耗的某些帧和操作的一些建议。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/b5ab5668cac60.png) +![]({{site.flutter-files-cn}}posts/images/2023/01/b5ab5668cac60.png) 除了以上的新功能,本次更新还有其他的问题修复和优化改进,包括查看器 (Inspector)、网络记录器的 CPU 记录器的问题修复。你可以查看下面的 DevTools 更新日志了解更多细节。 @@ -105,11 +105,11 @@ Impeller 的进展飞速离不开社区贡献者的支持。尤其是 [ColdPaleL 举例来说,你可以在用户选中邮件地址时,为文本框默认的选择菜单添加「发送邮件」的按钮 ([代码地址](https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/email_button_page.dart))。[`contextMenuBuilder`](https://master-api.flutter-io.cn/flutter/cupertino/CupertinoTextField/contextMenuBuilder.html) 参数也已经添加到现有包含上下文菜单的 widget 中。你可以在 `contextMenuBuilder` 中返回任何你想返回的 widget,也包括平台自适应的上下文菜单。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/ffb979eb8fa7d.gif) +![]({{site.flutter-files-cn}}posts/images/2023/01/ffb979eb8fa7d.gif) 这一新特性也可以用于文本选择以外的场景。例如,你可以为一个 `Image` widget 的右键和长按操作添加「保存」按钮 ([代码地址](https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/image_page.dart))。你也可以使用 [`ContextMenuController`](https://api.flutter.cn/flutter/widgets/ContextMenuController-class.html) 在应用内的任意位置展示平台默认或者自定义的上下文菜单。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/0332c5f7dcc77.gif) +![]({{site.flutter-files-cn}}posts/images/2023/01/0332c5f7dcc77.gif) 若想查看完整的示例,前往 [Flutter 示例代码仓库](https://github.com/flutter/samples/tree/main/experimental/context_menus) 了解更多。 @@ -117,9 +117,9 @@ Impeller 的进展飞速离不开社区贡献者的支持。尤其是 [ColdPaleL Cupertino 系列 widget 迎来了两位新成员: [`CupertinoListSection`](https://github.com/flutter/flutter/pull/78732) 和[`CupertinoListTile`](https://github.com/flutter/flutter/pull/78732),可用于展示 iOS 风格的滚动列表内容。它们是 Cupertino 版本的 `ListView` 和 `ListTile`。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/3835e17a8e8ba.png) +![]({{site.flutter-files-cn}}posts/images/2023/01/3835e17a8e8ba.png) -![]({{site.flutter-files-cn}}/posts/images/2023/01/708e171743d27.png) +![]({{site.flutter-files-cn}}posts/images/2023/01/708e171743d27.png) ## 滑动优化 @@ -129,7 +129,7 @@ Cupertino 系列 widget 迎来了两位新成员: [`CupertinoListSection`](htt 新的 [`AnimatedGrid`](https://github.com/flutter/flutter/pull/112982) 和 `SliverAnimatedGrid` 可以用于为新增和移除的内容展示动画。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/8f8ba42208951.gif) +![]({{site.flutter-files-cn}}posts/images/2023/01/8f8ba42208951.gif) 最后,我们 [修复了](https://github.com/flutter/flutter/pull/108706) 自 Flutter 迁移至健全的空安全以来的一个问题,该问题影响了所有包含 `itemBuilder` 参数的滑动 widget (例如 `ListView`)。在迁移至空安全时,`itemBuilder` 的类型迁移至了 `IndexedWidgetBuilder`,即不允许返回 `null`,而在以前 `null` 可以用来代表列表已经到了底部等。该参数现已修改为 `NullableIndexedWidgetBuilder`。感谢 @rrousselGit 发现并修复了这个问题! @@ -140,7 +140,7 @@ Flutter 对国际化的支持已经焕然一新!我们对 `gen-l10n` 进行了 - 描述性的语法错误 - 嵌套或多个复数、选择和占位的消息内容 -![]({{site.flutter-files-cn}}/posts/images/2023/01/93b17a42072f8.png) +![]({{site.flutter-files-cn}}posts/images/2023/01/93b17a42072f8.png) 更多内容可以了解已经更新的 [Flutter 应用里的国际化](https://docs.flutter.cn/development/accessibility-and-localization/internationalization) 文档。 @@ -156,9 +156,9 @@ Flutter 对国际化的支持已经焕然一新!我们对 `gen-l10n` 进行了 在 Android 和 iOS 上进行文本选择时会出现的放大镜现在也会在 Flutter 中出现了。它已经添加至了所有的文本选择,但是你也可以通过 [`magnifierConfiguration`](https://api.flutter.cn/flutter/material/TextField/magnifierConfiguration.html) 禁用或者自定义。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/c375f8ae339e9.gif) +![]({{site.flutter-files-cn}}posts/images/2023/01/c375f8ae339e9.gif) -![]({{site.flutter-files-cn}}/posts/images/2023/01/bde08a1b5a13a.gif) +![]({{site.flutter-files-cn}}posts/images/2023/01/bde08a1b5a13a.gif) ## 插件代码迁移至 Swift @@ -180,15 +180,15 @@ Apple 整将它们的代码迁移至 Swift,我们也希望能为开发者构 Bitcode 在 Flutter 应用中默认是关闭的,所以这也不应该会影响太多开发者的项目。但是,如果你曾经为你的项目手动启用过 bitcode,请尽快在升级到 Xcode 14 后关闭 bitcode。你可以使用 Xcode 打开 `ios/Runner.xcworkspace` 找到 **Enable Bitcode** 设置为 **No**,混合开发项目需要在宿主项目中禁用。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/bda59d271dcb8.png) +![]({{site.flutter-files-cn}}posts/images/2023/01/bda59d271dcb8.png) ## iOS 平台视图应用 BackdropFilter 我们为 iOS 原生视图添加了可以渲染高斯模糊的特性,现在嵌套在 `BackdropFilter` 中的 `UiKitView` 可以正确的渲染高斯模糊了。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/991e1cff34251.png) +![]({{site.flutter-files-cn}}posts/images/2023/01/991e1cff34251.png) -你可以查看相应的 [设计文档]({{site.flutter-files-cn}}/flutter-design-docs/Flutter_iOS_PlatformView_BackdropFilter.pdf) 了解更多。 +你可以查看相应的 [设计文档]({{site.flutter-files-cn}}flutter-design-docs/Flutter_iOS_PlatformView_BackdropFilter.pdf) 了解更多。 ## 内存管理 @@ -196,13 +196,13 @@ Bitcode 在 Flutter 应用中默认是关闭的,所以这也不应该会影响 例如,我们扩展了现有手动释放某些 `dart:ui` Dart 对象的本地资源的实践。先前在 Dart VM 垃圾回收 Dart 对象前,本地资源都将被 Flutter 引擎持有。通过对用户应用程序和我们的 benchmarks 分析,我们认为这种策略很多时候无法避免不合适的 GC 和过度使用内存。因此在此次更新中 Flutter 引擎添加了 API ,用于显式释放由 `Vertices`、`Paragraph` 和 `ImageShader` 对象持有的本地资源。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/2435f5771a7c2.png) +![]({{site.flutter-files-cn}}posts/images/2023/01/2435f5771a7c2.png) 在我们迁移到此 API 的 Flutter 框架的 benchmarks 中,将 90% 的帧构建时间减少了 30% 以上,最终用户将体验到更流畅的动画和更少的卡顿。 此外,Flutter 引擎 [不再上报](https://github.com/flutter/engine/pull/35473) Dart VM 中的 GPU 图像的大小。如上所述,当这些图像资源不再被需要时已由框架手动释放,如果这时继续按照 GPU 内存大小的 GC 策略上报至 Dart,会导致不必要的堆内存压力并进一步触发无效的 GC。类似的方法同样应用到了 Flutter 引擎中,用于回收 `dart:ui` 原生对象的 [隐式内存占用](https://github.com/flutter/engine/pull/35813)。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/9635c0a4f4bf6.png) +![]({{site.flutter-files-cn}}posts/images/2023/01/9635c0a4f4bf6.png) 在我们的测试中,此更改省去了 widget 创建 GPU 常驻图像构建帧时的同步 GC 工作。 diff --git a/src/content/posts/announcing-flutter-for-windows.md b/src/content/posts/announcing-flutter-for-windows.md index c98d09d962..39faf7b6bc 100644 --- a/src/content/posts/announcing-flutter-for-windows.md +++ b/src/content/posts/announcing-flutter-for-windows.md @@ -5,7 +5,7 @@ toc: true Flutter 创建伊始,我们就致力于打造一个能够构建精美的、可高度定制的、并且可以编译为机器码的跨平台应用解决方案,以充分发挥设备底层硬件的全部图形渲染能力。今天,Flutter 对 Windows 生产版本的正式支持是对这一愿景实现的重要标志。它使 Windows 开发者也能享受到移动开发的相同生产力和功能。 -![用 Flutter 构建 Windows 桌面应用程序]({{site.flutter-files-cn}}/posts/images/2022/02/908c66b003640.jpg) +![用 Flutter 构建 Windows 桌面应用程序]({{site.flutter-files-cn}}posts/images/2022/02/908c66b003640.jpg) Flutter 的目标是在任何平台上为你提供出色的构建体验,并且我们想要打造的是:只需要使用同一套核心框架和工具完成这个目标。通过 Flutter,你可以自由打造 **优美** 的使用体验,使你的品牌和设计脱颖而出;它还拥有 **极高** 的执行速度,因为它会被直接编译为机器码;而通过支持有状态的热重载功能以提供交互式的体验,让你可以在应用运行时直接看到代码更改后的结果,从而获得 **生产力** 提升。Flutter 是开放的,成千上万的贡献者参与到核心框架的构建,或是通过 package 和插件生态系统对其进行扩展。 @@ -13,7 +13,7 @@ Flutter 的目标是在任何平台上为你提供出色的构建体验,并且 迄今为止,我们看到这股趋势已经超出了我们的预期。包括一些大公司例如 [Betterment](https://verygood.ventures/success-stories/betterment "Betterment 使用 Flutter 的案例")、宝马以及字节跳动等,还有 Google 内部三十多个团队都使用了 Flutter。根据 Statista 以及 SlashData 的统计,Flutter 在 2021 年已经成为了最流行的跨端 UI 工具包。 -![]({{site.flutter-files-cn}}/posts/images/2022/02/531f089d347f9.png) +![]({{site.flutter-files-cn}}posts/images/2022/02/531f089d347f9.png) 我们自己的数据也能支持这一点,在 2021 年四个季度的开发者调查中,有 92% 的 Flutter 开发者对我们提供的工具表示满意。(对于另外 8% 的人,我们正在倾听你的反馈,希望也能得到你的满意)。 @@ -33,19 +33,19 @@ Flutter 的核心部分是跨平台的:从可移植的硬件加速的 Skia 图 正如我们对 Android 和 iOS 的支持那样,对 Windows 的实现也包括了 Dart 框架以及 C++ 的引擎。Windows 与 Flutter 通过承载了 Flutter 引擎的 **嵌入层(Embedder)** 进行通信,翻译以及发送 Windows 都是 **嵌入层** 的职责范围。Flutter 与 Windows 共同将你的 UI 绘制到屏幕上,处理窗口大小调整和 DPI 更改等事件,并与已有的 Windows (如输入法编辑器) 配合使用。 -![Flutter 在 Windows 平台的架构]({{site.flutter-files-cn}}/posts/images/2022/02/3ccad9b79b6d5.jpg) +![Flutter 在 Windows 平台的架构]({{site.flutter-files-cn}}posts/images/2022/02/3ccad9b79b6d5.jpg) 在 Windows 上,Flutter 使用了一套完全相同的 Dart 代码,但是能够使用 Windows 的 API。 你的应用能够使用 Flutter 框架的全部功能,在 Windows 上,它还可以直接通过 Dart 的 C 互操作层或使用用 C++ 编写的平台插件与 Win32、COM 和 Windows 运行时 API 进行通信。我们还适配了许多常用插件以包含对 Windows 的支持,包括`camera`,`file_picker`和`shared_preferences`。更重要的是,社区已经添加了各种其他 package 对 Windows 的支持,涵盖了从 Windows 任务栏集成到串行端口访问的全部内容。 -![目前已经有上百个 package 为通过 Flutter 构建 Windows 应用程序提供了适配。]({{site.flutter-files-cn}}/posts/images/2022/02/8eff674e59263.jpg) +![目前已经有上百个 package 为通过 Flutter 构建 Windows 应用程序提供了适配。]({{site.flutter-files-cn}}posts/images/2022/02/8eff674e59263.jpg) 要完全为 Windows 的 UI 进行定制,你也可以使用例如像是 [fluent_ui](https://pub.flutter-io.cn/packages/fluent_ui "使用 fluent_ui package 实现具有 Microsoft Fluent 设计美学的设计") 以及 [flutter_acrylic](https://pub.flutter-io.cn/packages/flutter_acrylic "使用 flutter_acrylic package 实现具有 Microsoft Fluent 设计美学的设计") 这样的 package 创造具有 Microsoft Fluent 设计美学的应用。而且使用 [msix](https://pub.dev/packages/msix "使用 msix 工具打包发布 Windows 桌面应用程序") 工具能将你的应用包装进安装器,这样就可以上传到 Windows 上的 Microsoft Store。 总的来说,这促进了在 Window 平台上创建应用程序。以极快的速度在 Windows 上运行的同时还能转到其他桌面或者移动应用以及 web 平台上运行。让我们来看看到目前为止的一些早期样例: -![一些使用 Flutter 构建的 Windows 应用程序的早期社区示例,特别展示来自深圳团队的一款应用。]({{site.flutter-files-cn}}/posts/images/2022/02/8f17446cb2052.png) +![一些使用 Flutter 构建的 Windows 应用程序的早期社区示例,特别展示来自深圳团队的一款应用。]({{site.flutter-files-cn}}posts/images/2022/02/8f17446cb2052.png) ## Microsoft 与 Flutter @@ -57,7 +57,7 @@ Flutter 的核心部分是跨平台的:从可移植的硬件加速的 Skia 图 同时,Microsoft 围绕 Windows 可访问性所做的投入也给我们留下了深刻的印象,非常感谢该团队的帮助,以确保 Flutter 从第一天起就能够为屏幕阅读器提供支持。将无障碍功能视为额外的需求是错误的。正如 [Microsoft 包容性设计工具包](https://www.microsoft.com/design/inclusive "Microsoft 包容性设计工具包") 中的这张图片所示,我们必须要关注提供永久、临时或不同情境下需求的体验。 -![]({{site.flutter-files-cn}}/posts/images/2022/02/a6687ec76191d.jpg) +![]({{site.flutter-files-cn}}posts/images/2022/02/a6687ec76191d.jpg) 下面的视频演示了 Flutter 如何集成 Windows 讲述人 (Windows Narrator) 功能。出于本视频的目的,我们特意模糊了屏幕,让你了解此功能对需要它的用户的价值。 @@ -75,7 +75,7 @@ Windows 讲述人是一个为 Windows 打造的屏幕阅读器,它同样能够 * [Syncfusion](https://www.syncfusion.com/flutter-widgets "Syncfusion 官网的 Flutter widget 介绍界面") 更新了工具套件以充分发挥在 Windows 平台的优势。如果你在使用他们提供的服务,你会发现他们的数据可视化组件,比如树状图、线性规、火花图表,日历组件甚至是 PDF 和 Excel 生成组件都已经支持了 Flutter,Syncfusion Flutter widget 是用 Dart 原生构建的。 * 近期,[Rive](https://rive.app/ "创建交互式矢量动画的工具 Rive 官网") 宣布推出其流行的图形工具套件的 Windows 版本,它能够让设计人员和开发人员创建交互式矢量动画,这些动画可以使用状态机实时响应代码。即将推出的 Windows 版本的应用程序提供了惊人的性能和更低的内存占用,并将很快将在 Microsoft Store 中提供下载。 -![]({{site.flutter-files-cn}}/posts/images/2022/02/7d6b68e9aaec4.jpg) +![]({{site.flutter-files-cn}}posts/images/2022/02/7d6b68e9aaec4.jpg) 看到围绕着 Flutter 的建立的成熟生态,我们非常激动,在你开始使用 Flutter 构建 Windows 应用的时候,我们鼓励你多尝试一下生态里的这些合作伙伴的服务和工具。 @@ -87,9 +87,9 @@ Windows 讲述人是一个为 Windows 打造的屏幕阅读器,它同样能够 再次感谢大家对 Flutter 的支持,期待看到你为 Windows 平台构建的精彩应用程序! -![]({{site.flutter-files-cn}}/posts/images/2022/02/56b3f56c8b099.jpg) +![]({{site.flutter-files-cn}}posts/images/2022/02/56b3f56c8b099.jpg) -- 如果你想将上面这个图片当作桌面背景,请点击点击这个链接下载原图: {{site.flutter-files-cn}}/images/branding/desktop/dash2022_4k.png +- 如果你想将上面这个图片当作桌面背景,请点击点击这个链接下载原图: {{site.flutter-files-cn}}images/branding/desktop/dash2022_4k.png ## 致谢 diff --git a/src/content/posts/announcing-general-availability-for-the-google-mobile-ads-sdk-for-flutter.md b/src/content/posts/announcing-general-availability-for-the-google-mobile-ads-sdk-for-flutter.md index b06c7e6f6b..9ab67f7c9d 100644 --- a/src/content/posts/announcing-general-availability-for-the-google-mobile-ads-sdk-for-flutter.md +++ b/src/content/posts/announcing-general-availability-for-the-google-mobile-ads-sdk-for-flutter.md @@ -3,7 +3,7 @@ title: 适用于 Flutter 的 Google 移动广告 SDK 正式版现已发布 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/12/yWS0zM.png) +![]({{site.flutter-files-cn}}posts/images/2021/12/yWS0zM.png) *作者 / Zoey Fan,Flutter 产品经理* @@ -23,7 +23,7 @@ toc: true **应用开屏广告 (App Open Ads):** 一种让移动应用加载体验得以变现的广告格式。当用户打开或切换回应用时,会展示开屏广告。 -![]({{site.flutter-files-cn}}/posts/images/2021/12/6UpIut.png) +![]({{site.flutter-files-cn}}posts/images/2021/12/6UpIut.png) ## **Google AdMob 和 Ad Manager** @@ -33,7 +33,7 @@ toc: true [Flutter GMA SDK](https://pub.flutter-io.cn/packages/google_mobile_ads) 统一了这些产品,通过在 iOS 和 Android 平台共享代码来满足你的变现需求,且无需在需求增长时重写代码。 -![]({{site.flutter-files-cn}}/posts/images/2021/12/VGvTlQ.png) +![]({{site.flutter-files-cn}}posts/images/2021/12/VGvTlQ.png) ## **中介和竞价** diff --git a/src/content/posts/announcing-the-flutter-casual-games-toolkit.md b/src/content/posts/announcing-the-flutter-casual-games-toolkit.md index c3748178a6..83a1b7044d 100644 --- a/src/content/posts/announcing-the-flutter-casual-games-toolkit.md +++ b/src/content/posts/announcing-the-flutter-casual-games-toolkit.md @@ -7,7 +7,7 @@ image: path: https://files.flutter-io.cn/posts/images/2022/05/dSsVED.png --- -![]({{site.flutter-files-cn}}/posts/images/2022/05/dSsVED.png) +![]({{site.flutter-files-cn}}posts/images/2022/05/dSsVED.png) *作者 / Zoey Fan, Product Manager for Flutter, Google* @@ -15,7 +15,7 @@ image: 在过去的一年里,已经有数千款 Flutter 游戏发布。拿游戏公司 Lotum 来举例,该公司旗下颇具人气的文字解谜游戏 [4 Pics 1 Word](https://flutter.dev/showcase/lotum "Flutter 案例: 4 Pics 1 Word") 最近就已经用 Flutter 完全重新编写。[Flame](https://flame-engine.org/ "基于 Flutter 一款开源游戏引擎 Flame Engine 主页") 则是一款基于 Flutter 构建的、由社区驱动的开源游戏引擎,其贡献者和用户也一直在稳步增长。 -![△ Flutter 开发者构建的手机游戏]({{site.flutter-files-cn}}/posts/images/2022/05/7PH1QO.png) +![△ Flutter 开发者构建的手机游戏]({{site.flutter-files-cn}}posts/images/2022/05/7PH1QO.png) △ Flutter 开发者构建的手机游戏 @@ -30,13 +30,13 @@ image: [Flutter 休闲游戏工具包](http://flutter.dev/games "Flutter 休闲游戏工具包") (Casual Game Toolkit) 提供了专门的模板 (由 [Filip Hracek](https://github.com/filiph "Filip Hracek 的 GitHub 个人页面") 开发),你可以用它来构建自己的游戏。这个启动项目提供了预先构建完毕的各种你可能用得着的「零部件」,包括主菜单、设置页面、声音支持等,最有趣的部分仍然留给你: 构建游戏! -![△ 在移动设备上运行的井字棋游戏]({{site.flutter-files-cn}}/posts/images/2022/05/qmT3RE.png) +![△ 在移动设备上运行的井字棋游戏]({{site.flutter-files-cn}}posts/images/2022/05/qmT3RE.png) △ 在移动设备上运行的井字棋游戏 ## **视频教程** -如果想要上手开发游戏,请查看我们准备的关于如何使用游戏模板的 [视频教程]({{site.bili.video}}/BV12Y4y1z7m9/ "视频教程:使用 Flutter 开发游戏")。它为你提供了创建一个 [井字棋游戏](https://github.com/filiph/tictactoe "井字棋游戏的 GitHub 开源仓库地址") (你也可从 [iOS](https://apps.apple.com/us/app/tic-tac-toe-puzzle-game/id1611729977 "井字棋游戏 iOS 版下载地址")/[Android](https://play.google.com/store/apps/details?id=dev.flutter.tictactoe "井字棋游戏 Android 版下载地址") 应用商店下载这个游戏) 的逐步教学。如果你想要了解 Filip 在开发这款游戏时经历的所有细节,欢迎阅读他的 [游戏开发日志]({{site.flutter-files-cn}}/posts/flutter-cn/2022/announcing-the-flutter-casual-games-toolkit/flutter-game-sample-devlog/ "Filip 的游戏开发日志")。 +如果想要上手开发游戏,请查看我们准备的关于如何使用游戏模板的 [视频教程]({{site.bili.video}}/BV12Y4y1z7m9/ "视频教程:使用 Flutter 开发游戏")。它为你提供了创建一个 [井字棋游戏](https://github.com/filiph/tictactoe "井字棋游戏的 GitHub 开源仓库地址") (你也可从 [iOS](https://apps.apple.com/us/app/tic-tac-toe-puzzle-game/id1611729977 "井字棋游戏 iOS 版下载地址")/[Android](https://play.google.com/store/apps/details?id=dev.flutter.tictactoe "井字棋游戏 Android 版下载地址") 应用商店下载这个游戏) 的逐步教学。如果你想要了解 Filip 在开发这款游戏时经历的所有细节,欢迎阅读他的 [游戏开发日志]({{site.flutter-files-cn}}posts/flutter-cn/2022/announcing-the-flutter-casual-games-toolkit/flutter-game-sample-devlog/ "Filip 的游戏开发日志")。 ## 预集成的服务 @@ -60,13 +60,13 @@ Flutter 的优势之一,在于它是充满温度、乐于助人的社区。如 但这并不意味着你的创意应该局限于移动平台。事实上,刚才提到的 [井字棋游戏](https://github.com/filiph/tictactoe "井字棋游戏开源代码仓库地址") 除了在 [web 端运行](https://filiph.github.io/tictactoe/ "井字棋游戏 Web 端运行网址") 外,也能在桌面端运行! -![△ 在 web 端和桌面端运行的井字棋游戏]({{site.flutter-files-cn}}/posts/images/2022/05/GwGAuu.png) +![△ 在 web 端和桌面端运行的井字棋游戏]({{site.flutter-files-cn}}posts/images/2022/05/GwGAuu.png) △ 在 web 端和桌面端运行的井字棋游戏 我们最近还在 DartPad 上增加了对社区驱动的游戏引擎 Flame 的支持,因此你可以在 DartPad 上探索 [用 Flame 构建游戏](https://dartpad.cn/?id=3e52ca7b51ba15f989ad880b8b3314a2 "DartPad 直接体验用 Flame 构建游戏"),而无需下载 SDK。另外,由 Very Good Ventures (VGV) 编写,并在 Google I/O 大会上推出的 web 端 [弹球游戏](https://pinball.flutter.dev/ "Flutter 弹球游戏"),就是使用 Flame 引擎在 Flutter 中构建的!如果你想要了解该弹球游戏是如何创建的,请关注我们近期的推送或直接 [阅读其代码](https://github.com/flutter/pinball "Flutter 弹球游戏开源代码")。 -![△ Web 端的弹球游戏]({{site.flutter-files-cn}}/posts/images/2022/05/tzNjv7.png) +![△ Web 端的弹球游戏]({{site.flutter-files-cn}}posts/images/2022/05/tzNjv7.png) △ Web 端的弹球游戏 diff --git a/src/content/posts/announcing-xd-to-flutter-v2-0.md b/src/content/posts/announcing-xd-to-flutter-v2-0.md index 2b4cc1f666..5878aeb744 100644 --- a/src/content/posts/announcing-xd-to-flutter-v2-0.md +++ b/src/content/posts/announcing-xd-to-flutter-v2-0.md @@ -3,7 +3,7 @@ title: XD to Flutter 2.0 现已发布! toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/05/JEUpoL.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/05/JEUpoL.jpg) Flutter 是 Google 的开源 UI 工具包。利用它,只需一套代码库,就能开发出适合移动设备、桌面设备、嵌入式设备以及 web 等多个平台的精美应用。过去几年,对于想要打造多平台应用的开发者来说,Flutter 已成为他们的首选。但设计师们需要的是一个视觉工具来建立原型和构建 Flutter UI,而不是精雕细琢 Dart 源代码,于是 [XD to Flutter](https://github.com/AdobeXD/xd-to-flutter-plugin) 应运而生! @@ -27,17 +27,17 @@ XD to Flutter 由 [gskinner](https://gskinner.com/) 与 Adobe 联合开发,作 XD to Flutter 支持 XD 的响应式布局功能,你可将元素 "固定" 在其所属父元素内,并精确控制其调整尺寸的方式。 -![Adobe XD 中的响应式设计]({{site.flutter-files-cn}}/posts/images/2021/05/2oeEuB.png) +![Adobe XD 中的响应式设计]({{site.flutter-files-cn}}posts/images/2021/05/2oeEuB.png) > Adobe XD 中的响应式设计 -![Flutter 中的响应式设计]({{site.flutter-files-cn}}/posts/images/2021/05/T0Kwo6.gif) +![Flutter 中的响应式设计]({{site.flutter-files-cn}}posts/images/2021/05/T0Kwo6.gif) > Flutter 中的响应式设计 Flutter 使用 [adobe_xd](https://pub.dev/packages/adobe_xd) 开源软件包中的自定义 Pinned 布局 Widget 实现了这一功能,开发者可直接在其项目中使用。 -![Pinned Widget 代码示例]({{site.flutter-files-cn}}/posts/images/2021/05/nzmZOr.jpg) +![Pinned Widget 代码示例]({{site.flutter-files-cn}}posts/images/2021/05/nzmZOr.jpg) > Pinned Widget 代码示例 @@ -49,7 +49,7 @@ Flutter 使用 [adobe_xd](https://pub.dev/packages/adobe_xd) 开源软件包中 XD to Flutter 2.0 版对这些功能都支持,可将它们转换成常见的 Flutter Widget (`Column`、`Row` 以及 `SingleChildScrollView`)。你甚至可以将某个堆栈放入一个滚动组内,从而轻松创建一个滚动项列表。 -![XD (左) 和 Flutter (右) 中的堆栈和滚动组]({{site.flutter-files-cn}}/posts/images/2021/05/GRBLhW.gif) +![XD (左) 和 Flutter (右) 中的堆栈和滚动组]({{site.flutter-files-cn}}posts/images/2021/05/GRBLhW.gif) > XD (左) 和 Flutter (右) 中的堆栈和滚动组 @@ -59,7 +59,7 @@ XD to Flutter 2.0 版对这些功能都支持,可将它们转换成常见的 F Flutter 导出工具使用 `Stack` Widget 将背景元素分层放置在内容之后,而后者则放置在一个 `Padding` Widget 内。 -![XD (左) 和 Flutter 中的内边距和背景]({{site.flutter-files-cn}}/posts/images/2021/05/RIaeJC.gif) +![XD (左) 和 Flutter 中的内边距和背景]({{site.flutter-files-cn}}posts/images/2021/05/RIaeJC.gif) > XD (左) 和 Flutter 中的内边距和背景 @@ -69,7 +69,7 @@ Flutter 导出工具使用 `Stack` Widget 将背景元素分层放置在内容 Flutter 2 还引入了健全的空安全机制 ,这一语言特性可帮助开发者先行捕捉不可为空的变量却为空的问题,避免其在应用中引发问题。XD to Flutter 2.0 版包含一个新设置 "Export Null Safe Code" (导出空安全代码);导出时选中该设置,可确保生成的代码未来可用。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/mEFck0.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/mEFck0.png) > "Export Null Safe Code" 设置和输出 @@ -79,7 +79,7 @@ Flutter 2 还引入了健全的空安全机制 ,这一语言特性可帮助开 你只需从 Adobe XD 的 "Plugin" (插件) 菜单选择 "Browse Plugins…" (浏览插件),然后搜索 "Flutter" (奇怪的是,搜索 "XD to Flutter" 不起作用),或前往 [adobe.com/go/xd_to_flutter](https://adobe.com/go/xd_to_flutter),即可安装此插件。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/r9kl7p.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/r9kl7p.png) 安装好后,从插件面板中打开 XD to Flutter 面板,点按 "Need help" (需要帮助?) 链接,可查阅 [plugin documentation](https://github.com/AdobeXD/xd-to-flutter-plugin/blob/master/README.md) (插件帮助文档)。 diff --git a/src/content/posts/dart-2-17.md b/src/content/posts/dart-2-17.md index b134b03397..ee7e0e9b2f 100644 --- a/src/content/posts/dart-2-17.md +++ b/src/content/posts/dart-2-17.md @@ -14,7 +14,7 @@ image: Dart 2.17 提供了新的语言特性:**枚举支持成员变量、改进的超类参数继承,以及更为灵活的命名参数**。我们同时为 `package:lints` 开启了 2.x 版本,这是一套官方的 lint 规则,是根据我们总结的 Dart 最佳实践整合而成的一个 lint 规则集。与此同时,我们也更新了核心库的 API 文档,为其带来了丰富的示例代码。并且,为了改善平台集成特性,我们在 Flutter 插件中提供了一个新的模版,使用 `dart:ffi` 与原生平台进行 C 语言的互操作、对 RISC-V 指令集提供实验性支持,以及对 macOS 和 Windows 可执行文件的签名支持。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/dart-2-17/dart-2-17-hero.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/dart-2-17/dart-2-17-hero.png) ## 编程语言新特性助力生产力提升 @@ -63,7 +63,7 @@ void main() { 这两种方法的完整示例如下所示,有了这些改动,新版本的代码更易于阅读和维护。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/dart-2-17/extensions-vs-enum.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/dart-2-17/extensions-vs-enum.png) ### 超类的初始化构造 @@ -71,13 +71,13 @@ void main() { 几位 Dart 社区成员帮助 Dart 实现了这项语言目标。半年前,GitHub 用户 [@roy-sianez](https://github.com/roy-sianez "GitHub 用户主页: @roy-sianez") 提交了一个 [语言问题](https://github.com/dart-lang/language/issues/1855 "Dart 编程语言 GitHub 仓库议题 #1855")。他的建议类似于 GitHub 用户 [@apps-transround](https://github.com/apps-transround "GitHub 用户主页: @apps-transround") 先前的 [建议](https://github.com/dart-lang/language/issues/493#issuecomment-879624528 "Dart 编程语言 GitHub 仓库议题 #493"):也许我们可以通过引入一个新的方式来表示在超类中指定了一个参数,来解决这个问题。我们认为这是一个好主意,因此已将其实现并添加到了 Dart 2.17 版本中。从以下示例中可以看出,这与 Flutter widget 的代码有很强的相关性。实际上当我们将这项特性应用到 Flutter 框架时,我们看到框架总共减少了 [近两千行代码](https://github.com/flutter/flutter/pull/100905/files "Flutter 框架 GitHub 仓库拉取请求 #100905")! -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/dart-2-17/manual-forwarding-vs-supper-parameters.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/dart-2-17/manual-forwarding-vs-supper-parameters.png) ### 可在任意参数位置使用命名参数 最后,我们改进了方法调用时命名参数的方式。在此次更新之前,命名参数的调用必须出现在普通参数列表的后面。当你想要提升代码可读性,希望将命名参数写在靠前的位置但它无法工作时,会觉得非常惆怅。例如下方 `List.generate` 构造函数的调用。此次更新之前 `growable` 参数必须放在最后,这会导致这个参数很容易被可能有很多内容的构造参数所影响而错过。现在你可以根据自己的喜好对它们进行排序,你可以先使用命名参数,最后使用生成器参数。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/dart-2-17/names-agrs-order-changing.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/dart-2-17/names-agrs-order-changing.png) 更多有关这三项改进的示例,请参阅我们更新的 [枚举](https://github.com/dart-lang/samples/blob/master/enhanced_enums/lib/members.dart "Dart 编程语言特性改进示例代码: 枚举")、[超类的初始化构造](https://github.com/dart-lang/samples/blob/master/parameters/lib/super_initalizer.dart "Dart 编程语言特性改进示例代码: 超类的初始化构造") 和 [命名参数](https://github.com/dart-lang/samples/blob/master/parameters/lib/named_parameters.dart "Dart 编程语言特性改进示例代码: 命名参数") 示例代码。 diff --git a/src/content/posts/dart-2-18.md b/src/content/posts/dart-2-18.md index 735a06c881..675e26fc89 100644 --- a/src/content/posts/dart-2-18.md +++ b/src/content/posts/dart-2-18.md @@ -14,7 +14,7 @@ Dart 2.18 稳定版也随着 [Flutter 3.3 稳定版](/posts/whats-new-in-flutter 文章最后我们也给出了最新的空安全迁移状态情况数据,以及最终完全实现 Dart 空安全特性路线图的一个重要更新,请务必读到最后。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/dart-2-18/image3.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/dart-2-18/image3.png) ## Dart 与 Objective-C 和 Swift 互调 @@ -195,7 +195,7 @@ VM 中还包含了一些额外的小的行为变更,了解更多请查看 [发 通常情况下,个人的 package 开发者会使用业余时间维护并发布新的 package,这可能会耗费他们大量的时间和资源。为方便其他使用者进行赞助,我们在 `pubspec` 中支持了全新的 `funding` 标签,package 开发者可以用它列出一个或多个赞助其持续开发的链接,这些链接会展示在 `pub.dev` 网站的侧栏中。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/dart-2-18/image2.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/dart-2-18/image2.png) 了解更多请访问 [pubspec 文档](https://dart.cn/tools/pub/pubspec%23funding "pubspec 规范文档中关于 funding 标签的部分")。 @@ -222,7 +222,7 @@ Dart 特别注重简单性和可学习性,因此在增加新功能时,我们 下图展示了 `flutter run` 命令执行中非健全 (Unsound) 和健全 (Sound) 的空安全的对比情况。在引入空安全之前,两者都为零。随后非健全的空安全快速增长,此时应用开始逐渐迁移到空安全,开发者先进行了部分迁移,但有些部分仍然需要迁移。一段时间过后,我们可以看到健全的空安全曲线稳定增长,到上月底,与非健全的空安全相比,健全的空安全执行量多出了四倍。我们希望在接下来的几个季度中,我们将看到健全空安全到达 100%! -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/dart-2-18/image1.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/dart-2-18/image1.png) ## 重要的空安全路线图更新 diff --git a/src/content/posts/dart-2-7.md b/src/content/posts/dart-2-7.md index a0d3724b9c..e93f6e8dcc 100644 --- a/src/content/posts/dart-2-7.md +++ b/src/content/posts/dart-2-7.md @@ -6,7 +6,7 @@ toc: true Dart 2.7 增加了对扩展方法的支持,此外还添加了一个新的代码包,用来处理带有特殊字符的字符串。我们更新了空安全 (已经实现类型安全的可空和非空类型),还通过 DartPad 带来了全新的代码体验环境 (而且支持空安全)。在生态系统层级,pub.dev 现在加入了新的点赞 (Like) 功能,用户们喜欢代码包如今更加一目了然。Dart 2.7 现在就可以 [从 dart.dev 下载](http://dart.dev/) 并作为 SDK 使用,并且它也包含在 [发布的 Flutter 1.12 中](https://flutter.cn/posts/announcing-flutter-1-12)。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/gw7QIg.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/gw7QIg.png) ## **扩展方法** @@ -182,7 +182,7 @@ class Person { 现在我们把这段代码粘贴进我们新推出的 [空安全代码体验环境](https://nullsafety.dartpad.dev),它是 DartPad 的一个特殊版本,其中包含静态分析功能 (是空安全功能的子集) 的技术预览。甚至都不需要运行代码,我们就可以看到 3 个问题: -![]({{site.flutter-files-cn}}/posts/images/2021/05/0zBwPq.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/0zBwPq.png) 通过依次修复这些分析错误之后,我们就可以尽享空安全带来的好处了。请在空安全体验环境中试着做出如下修改 (并 [最终得到空安全代码](https://gist.github.com/mit-mit/c210bfb088545e69ba9231ee459615ba)): @@ -208,7 +208,7 @@ class Person { 我们还在 pub.dev 上发布了 "为代码包点赞" 功能,方便大家 "亲手" 表明自己对代码包的喜爱。如果你想要为一个代码包点赞,只需点击代码包详情信息旁边的大拇指图标即可。 -![△ pub.dev 代码包详情页增加了点赞按钮]({{site.flutter-files-cn}}/posts/images/2021/05/Vw0mJN.png) +![△ pub.dev 代码包详情页增加了点赞按钮]({{site.flutter-files-cn}}posts/images/2021/05/Vw0mJN.png) > △ pub.dev 代码包详情页增加了点赞按钮 diff --git a/src/content/posts/dev-story-beike-use-flutter-service-300-million-users.md b/src/content/posts/dev-story-beike-use-flutter-service-300-million-users.md index 4ea04dc09e..574f63c464 100644 --- a/src/content/posts/dev-story-beike-use-flutter-service-300-million-users.md +++ b/src/content/posts/dev-story-beike-use-flutter-service-300-million-users.md @@ -27,7 +27,7 @@ toc: true > > —— 赵佳航,贝壳开发工程师 -![△ 贝壳应用启动快速,体验流畅]({{site.flutter-files-cn}}/posts/images/2021/04/2dce5c6321043.gif) +![△ 贝壳应用启动快速,体验流畅]({{site.flutter-files-cn}}posts/images/2021/04/2dce5c6321043.gif) △ 贝壳应用启动快速,体验流畅 @@ -43,13 +43,13 @@ Flutter 除了做到让应用本身运行流畅以外,还能让开发者们的 > > —— 邵冬,贝壳资深工程师 -![△ 1 秒就能看到迭代效果的热重载]({{site.flutter-files-cn}}/posts/images/2021/04/ee62fb9d41463.gif) +![△ 1 秒就能看到迭代效果的热重载]({{site.flutter-files-cn}}posts/images/2021/04/ee62fb9d41463.gif) △ 1 秒就能看到迭代效果的热重载 然后是**活跃的开发社区**,很多开发中碰到的问题其实已经有其他开发者给出了解决方案,这自然让开发者们得以避免重复劳动。贝壳开发团队自己就用 Flutter 开发了制作海报的功能,其中用到了 15 款来自社区的 package。当然,团队也有积极提交 PR 为社区提供反馈,贡献自己做为社区一员的能量。 -![△ 用 Flutter 制作海报]({{site.flutter-files-cn}}/posts/images/2021/04/f33fac822c66f.gif) +![△ 用 Flutter 制作海报]({{site.flutter-files-cn}}posts/images/2021/04/f33fac822c66f.gif) △ 用 Flutter 制作海报 @@ -63,13 +63,13 @@ Flutter 跨平台、高效的特性很快也吸引到了贝壳旗下其他应用 > > —— 王兆昭,被窝家装资深产品经理 -![△ 被窝家装的按户型找设计和新家播报等核心功能使用 Flutter 实现]({{site.flutter-files-cn}}/posts/images/2021/04/fc65d4215e338.gif) +![△ 被窝家装的按户型找设计和新家播报等核心功能使用 Flutter 实现]({{site.flutter-files-cn}}posts/images/2021/04/fc65d4215e338.gif) △ 被窝家装的按户型找设计和新家播报等核心功能使用 Flutter 实现 目前贝壳已经有十几款 App 在使用 Flutter 技术,更是已经搭建起了完善的 Flutter 基础设施,包括 Flutter 环境自动化配置工具、共享引擎容器、UI 自动化测试、基于 Flutter Web 的容灾降级方案以及线上的异常监控和性能监控等系统,整体对 Flutter 技术的使用已经比较体系化了。 -![△ 线上异常监控和性能监控系统]({{site.flutter-files-cn}}/posts/images/2021/04/d94d009ef96a4.gif) +![△ 线上异常监控和性能监控系统]({{site.flutter-files-cn}}posts/images/2021/04/d94d009ef96a4.gif) △ 线上异常监控和性能监控系统 diff --git a/src/content/posts/flutter-2022-highlight-moment.md b/src/content/posts/flutter-2022-highlight-moment.md index 87d0c5494e..19213258c1 100644 --- a/src/content/posts/flutter-2022-highlight-moment.md +++ b/src/content/posts/flutter-2022-highlight-moment.md @@ -4,7 +4,7 @@ toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2023/01/2497484bb3be1.gif) +![]({{site.flutter-files-cn}}posts/images/2023/01/2497484bb3be1.gif) ## 回看 2022,展望 Flutter Forward @@ -16,13 +16,13 @@ toc: true 2022 年 I/O 大会上,我们推出了 Flutter 3,继对 Windows 桌面的支持进入稳定版之后,开始将 macOS 和 Linux 桌面端的支持也推进到了稳定版。并且,我们首次重新整理发布了我们的规划,我们希望 Flutter 的未来可以以移动端为中心,并扩展到多个平台。 -![]({{site.flutter-files-cn}}/posts/images/2023/01/PhZ8op.jpg) +![]({{site.flutter-files-cn}}posts/images/2023/01/PhZ8op.jpg) 随着 Flutter 版本的演进和逐渐成熟,我们看到各行各业的公司都正在使用 Flutter 开发他们的应用,截止 5 月份的 I/O 大会,已经有超过 50 万个应用使用 Flutter 发布。 ## 供应链安全 -![]({{site.flutter-files-cn}}/posts/images/2023/01/Q8mWXm.jpg) +![]({{site.flutter-files-cn}}posts/images/2023/01/Q8mWXm.jpg) 软件供应链安全 (Supply Chain Security) 近年来成为经常被提及的话题,2022 年,Flutter 团队也 [对软件供应链安全方面增加了投入](https://mp.weixin.qq.com/s/m8Jn8XNuwrmEwhZPPLWaaw)。 @@ -33,7 +33,7 @@ https://github.com/cfug/diox/issues/29 ## 使用 Flutter 更快速的进军休闲小游戏和新闻类应用市场 -![]({{site.flutter-files-cn}}/posts/images/2023/01/AFOIM3.jpg) +![]({{site.flutter-files-cn}}posts/images/2023/01/AFOIM3.jpg) 休闲小游戏数量增长迅猛,这些上手速度快,比较有代表的是消除类、合成类小游戏,为了应对持续不断增长的休闲小游戏市场,Flutter 团队也推出了「[休闲游戏工具包](https://mp.weixin.qq.com/s/T-hSdOZc3OXUg9Sf3hzHuA)」来帮助开发者们更好的构建自己的小游戏,你可以在这篇文章或者网站上了解更多 flutter.cn/games @@ -41,7 +41,7 @@ https://github.com/cfug/diox/issues/29 ## Wonderous 示例应用 -![]({{site.flutter-files-cn}}/posts/images/2023/01/LJHaqS.jpg) +![]({{site.flutter-files-cn}}posts/images/2023/01/LJHaqS.jpg) [Wonderous 这款示例应用](https://mp.weixin.qq.com/s/cAwU2RmG-VtTBjPLweoobg) 的最大亮点就是它使用了 Flutter 正在测试的新渲染引擎,加入了超多自定义设计以及高质量用户体验,你可以在它的 GitHub 开源代码页面了解更多: github.com/gskinnerTeam/flutter-wonderous-app @@ -54,7 +54,7 @@ https://github.com/cfug/diox/issues/29 ## 展望 2023 -![]({{site.flutter-files-cn}}/posts/images/2023/01/eb5p18.jpg) +![]({{site.flutter-files-cn}}posts/images/2023/01/eb5p18.jpg) 我们将通过 Flutter Forward 活动来开启我们的 2023 之旅,继续将我们的规划和发展方向持续向全球社区用户透明地发布,再次真诚邀请你的加入和参与!同时也不要忘记关注我们的 [微博账号](https://mp.weixin.qq.com/s/pWdZv45PXutnXbrEOTLeww),获得每次 Flutter PR 的更新通知。 @@ -62,13 +62,13 @@ https://github.com/cfug/diox/issues/29 我们为社区成员们准备了一批 Flutter 社区红包封面,依然是由我们的吉祥物 Dash 出镜,欢迎各位领取和转发,感谢社区成员茶叶蛋蛋贡献的设计: -![]({{site.flutter-files-cn}}/posts/images/2023/01/39AKMH.jpg) +![]({{site.flutter-files-cn}}posts/images/2023/01/39AKMH.jpg) ## Flutter 开发者们,兔年大吉! -![]({{site.flutter-files-cn}}/posts/images/2023/01/2bf8988d0f189.jpg) +![]({{site.flutter-files-cn}}posts/images/2023/01/2bf8988d0f189.jpg) 作为开发者,我们一直在发现问题、解决问题,面对眼下的很多不确定性,我们希望每一位开发者们都可以继续保持对新事物的好奇,也能不断探索发现新的机会和想法,多参与全球社区与更多人交流碰撞。我坚信,我们对于这个行业的热爱和笃定,一定可以让我们找寻到更多改变世界的机会。 diff --git a/src/content/posts/flutter-2022-roadmap.md b/src/content/posts/flutter-2022-roadmap.md index d135bfbd4b..e33627aa6e 100644 --- a/src/content/posts/flutter-2022-roadmap.md +++ b/src/content/posts/flutter-2022-roadmap.md @@ -5,7 +5,7 @@ toc: true 为了提高产品透明度,每年年初 Flutter 团队都会发布今年度的产品路线图,以帮助使用 Flutter 的团队和开发者们根据这些优先事项制定计划。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/flutter-roadmap-2022/flutter-2022-roadmap.jpg) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/flutter-roadmap-2022/flutter-2022-roadmap.jpg) 2022 年 Flutter 团队将重点通过关注以下几个领域和方向针对产品进行研发和改进,包括开发者体验、桌面端、Web 端、框架和引擎、Dart 编程语言、卡顿,并计划于今年停止对 32 位 iOS 设备的支持,并增加对软件供应链安全方面的投入,以达到 SLSA 4 级 (用户可以高度确信该软件没有被篡改)。 @@ -41,11 +41,11 @@ toc: true ### 卡顿 -[2021 年我们着手解决了很多关于卡顿的问题]({{site.flutter-files-cn}}/flutter-design-docs/Jank_in_Flutter.pdf),但最后的结论是,我们可能需要完全重新思考该如何使用着色器 (shader),正因如此,我们也一直在重写图形渲染的后端。2022 年,我们打算将 iOS 上的 Flutter 迁移到这个新的架构上,然后根据在这方面的经验,将这个方案移植到其他平台。此外,我们还将实现其他性能方面的改进以及性能自省特性,例如 [新的 DisplayList 系统](https://github.com/flutter/flutter/issues/85737) 所实现的功能。 +[2021 年我们着手解决了很多关于卡顿的问题]({{site.flutter-files-cn}}flutter-design-docs/Jank_in_Flutter.pdf),但最后的结论是,我们可能需要完全重新思考该如何使用着色器 (shader),正因如此,我们也一直在重写图形渲染的后端。2022 年,我们打算将 iOS 上的 Flutter 迁移到这个新的架构上,然后根据在这方面的经验,将这个方案移植到其他平台。此外,我们还将实现其他性能方面的改进以及性能自省特性,例如 [新的 DisplayList 系统](https://github.com/flutter/flutter/issues/85737) 所实现的功能。 ## 计划弃用 -我们计划在 2022 年放弃对 32 位 iOS 设备的支持,详见 [RFC 文档]({{site.flutter-files-cn}}/flutter-design-docs/RFC_Move_32-bit_iOS_to_Best_Effort_Tier.pdf)。 +我们计划在 2022 年放弃对 32 位 iOS 设备的支持,详见 [RFC 文档]({{site.flutter-files-cn}}flutter-design-docs/RFC_Move_32-bit_iOS_to_Best_Effort_Tier.pdf)。 ## 基础设施建设 diff --git a/src/content/posts/flutter-bytedance-dev-story.md b/src/content/posts/flutter-bytedance-dev-story.md index 53e9e8a6b2..cf75061647 100644 --- a/src/content/posts/flutter-bytedance-dev-story.md +++ b/src/content/posts/flutter-bytedance-dev-story.md @@ -20,13 +20,13 @@ image: 在更多的平台上覆盖更多用户一直是字节跳动产品团队的目标之一。比如在中国非常受欢迎的短视频娱乐应用 "抖音火山版",就让 iOS 和 Android 平台的用户都可以通过分享短视频来展示他们的爱好、技能与日常,且拥有非常一致的体验。 -![△ 抖音火山版]({{site.flutter-files-cn}}/posts/images/2022/05/3xkCSz.gif) +![△ 抖音火山版]({{site.flutter-files-cn}}posts/images/2022/05/3xkCSz.gif) △ 抖音火山版 在 2B 领域,字节跳动则有一款支持企业协同办公的一站式应用 Lark,通过音视频会议、文档共享、及一系列项目管理与能效工具来支持团队的即时通讯需求。其中,Lark 的移动版本使用了 Flutter 来实现跨平台开发。 -![△ 协同办公一站式应用 Lark]({{site.flutter-files-cn}}/posts/images/2022/05/slsqWB.gif) +![△ 协同办公一站式应用 Lark]({{site.flutter-files-cn}}posts/images/2022/05/slsqWB.gif) △ 协同办公一站式应用 Lark @@ -38,13 +38,13 @@ image: "极课错题打印机" 和 "极课阅卷大师" 两款智能设备上搭载的应用都使用 Flutter 开发,前者用于放置在校园内供学生们自助打印错题,后者则可以帮助老师智能识别学生的答卷以及统计分数。借助 Flutter,团队得以为超过 200 所学校的师生快速完成设备软件的开发以及迭代。 -![△ 智能设备 "极课错题打印机" 中的应用使用 Flutter 开发]({{site.flutter-files-cn}}/posts/images/2022/05/oMNaBD.gif) +![△ 智能设备 "极课错题打印机" 中的应用使用 Flutter 开发]({{site.flutter-files-cn}}posts/images/2022/05/oMNaBD.gif) △ 智能设备 "极课错题打印机" 中的应用使用 Flutter 开发 有些时候,Flutter 打造的作品本身也能进一步提升团队的工作效率。比如字节跳动最有趣的 Flutter web 应用之一 Alchemy,这是一款服务于抖音内容创作的内部工具,为 PGC 与 UGC 用户提供便捷有趣的素材生成工具与海量素材,并批量产出受版权保护的设计物料。 -![△ Alchemy]({{site.flutter-files-cn}}/posts/images/2022/05/7AhByp.gif) +![△ Alchemy]({{site.flutter-files-cn}}posts/images/2022/05/7AhByp.gif) △ Alchemy @@ -52,7 +52,7 @@ image: Flutter 对应用屏幕渲染的精确控制能力,让团队得以放开手脚打磨产品的每一个像素。"Lemon8" 就凭借优良的用户体验荣登 2021 年日本地区 Google Play 年度应用榜单,这是一款兴趣种草社区应用,专注于时尚、美容、美食、旅游、居家、健身、艺术、户外、摄影等内容领域。多样的兴趣圈层对应用的一致认可,离不开 Flutter 对画布强大的控制力,以及团队的精心雕琢。 -![△ Lemon8]({{site.flutter-files-cn}}/posts/images/2022/05/wbj080.gif) +![△ Lemon8]({{site.flutter-files-cn}}posts/images/2022/05/wbj080.gif) △ Lemon8 diff --git a/src/content/posts/flutter-development-on-a-pixelbook.md b/src/content/posts/flutter-development-on-a-pixelbook.md index 9b88ea10af..4d9eef43f3 100644 --- a/src/content/posts/flutter-development-on-a-pixelbook.md +++ b/src/content/posts/flutter-development-on-a-pixelbook.md @@ -18,7 +18,7 @@ toc: true 下面的截图来自一台正在运行 Visual Studio Code 的 Pixelbook,而且通过 [Android Device Bridge](https://developer.android.google.cn/studio/command-line/adb) 连接的 Flutter 应用程序同样也运行在本地。这可不是什么模拟器——Flutter 应用能够在 Pixelbook 上直接运行(请看 Visual Studio代码状态栏右下角的目标平台)。 -![Flutter running locally on a Pixelbook, connected with hot reload to Visual Studio Code]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-development-on-a-pixelbook/flutter_dev_env_on_pixelbook.png){:width="85%"} +![Flutter running locally on a Pixelbook, connected with hot reload to Visual Studio Code]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-development-on-a-pixelbook/flutter_dev_env_on_pixelbook.png){:width="85%"} 接下来我将在这篇文章中分步说明如何在你自己的设备上运行它。Linux on Chromebook 支持现在已经进入 beta 阶段,但它需要[一台支持 Crostini 的设备](https://chromium.googlesource.com/chromiumos/docs/+/master/containers_and_vms.md#Supported-Now),包括 [Pixelbook](https://store.google.com/product/google_pixelbook)。 但也可能会出现一些失灵的情况,这都因人而异。当然,ChromeOS 设备的性能特征将与典型的 iPhone 或 Android 设备的性能特征相差较大。我们也不能保证每个 Flutter 场景都能在这个平台上正确运行。这算是一个足够的警告了吧 ;) @@ -30,11 +30,11 @@ toc: true 当你使用最新的频道重启后,你会在"设置"中看到一个新的条目,该条目可以让你在 Chromebook 上安装 Linux 支持。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-development-on-a-pixelbook/turn_on_linux_env_on_cb.png){:width="85%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-development-on-a-pixelbook/turn_on_linux_env_on_cb.png){:width="85%"} 在你打开开启它之后,ChromeOS 将会弹出下载并激活 Linux 容器的窗口。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-development-on-a-pixelbook/turn_on_linux_env_on_cb_processing.png){:width="85%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-development-on-a-pixelbook/turn_on_linux_env_on_cb_processing.png){:width="85%"} 我的机器花费了几分钟的时间来完成它。完成后,你会看到应用程序启动器上有一个闪亮的新终端应用程序图标,我立即把它固定到任务栏。 @@ -62,7 +62,7 @@ $ export PATH=`pwd`/flutter/bin:$PATH 你能够在官网上直接下载 [Android Studio](https://developer.android.google.cn/studio/),但是由于 Linux 运行在与 Chrome 浏览器不同的容器中,所以你必须手动移动它才能在终端进行访问。拖住时同时按住 Shift 健,将其从 Download 目录移动到 Linux 文件节点中(它在 Linux 容器中代表了 home `~` 目录)。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-development-on-a-pixelbook/download_android_sdk_to_linux_env.png){:width="85%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-development-on-a-pixelbook/download_android_sdk_to_linux_env.png){:width="85%"} 然后,你就可以运行以下内容来解压缩并安装 Android Studio: @@ -75,13 +75,13 @@ $ ./studio.sh 你将会看到下面这样的弹窗: -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-development-on-a-pixelbook/start_page_as_on_cb.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-development-on-a-pixelbook/start_page_as_on_cb.png) 点击剩下的设置步骤(我没有为选择 Android 虚拟设备而烦恼,因为你知道的,我们不再需要它了!)。当 IDE 启动时,创建一个新的空白项目(使用默认设定即可)。为了更加轻松地返回 Android Studio,我们将添加一个启动图标,所以请转到 Tools / Create Desktop 项。 现在我们能够为 Android Studio 安装 Flutter 插件了。要安装这些工具和集成,请跳到 File / Settings 并选择 Plugin 节点,然后点击 **Browse repositories** 。在这里搜索 Flutter 插件,如下所示,然后点击 Install 按钮。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-development-on-a-pixelbook/install_flutter_plugin_on_as.png){:width="85%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-development-on-a-pixelbook/install_flutter_plugin_on_as.png){:width="85%"} 这部分的最后一步——通过运行以下命令以确保你已同意所有 Android 许可证: @@ -121,15 +121,15 @@ chronos@localhost / $ sudo /usr/libexec/debugd/helpers/dev_features_ssh 接下来是打开 Android 开发者模式。你也许会想,我们最开始不是已经完成这一步了吗?但是我们仅仅是设置 Pixelbook 自身为开发者模式:安卓端需要使用你也许用过的手机上相同的魔术开关。这个设置隐藏的有点深:从设置应用中选择 Google Play Store 菜单,然后选择管理 Android 偏好设置(Manage Android preferences): -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-development-on-a-pixelbook/manage_android_pref_on_cb.png){:width="85%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-development-on-a-pixelbook/manage_android_pref_on_cb.png){:width="85%"} 这将会为 Android 托管环境打开另一个设置应用,你可以在其中找到"关于设备"(**About device**)页面。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-development-on-a-pixelbook/android_env_on_cb_about_page.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-development-on-a-pixelbook/android_env_on_cb_about_page.png) 连续点击 build number 7 次:这是解锁开发者选项屏幕的神奇咒语,可让你打开 ADB 调试: -![]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-development-on-a-pixelbook/turn_on_dev_mode_android_on_cb.png){:width="85%"} +![]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-development-on-a-pixelbook/turn_on_dev_mode_android_on_cb.png){:width="85%"} 现在,你终于可以建立 Flutter 能够访问的本地设备的 ADB 连接。假设你是在主目录下解压 Android Studio,那么你会在以下位置找到 `adb` :`$/Android/Sdk/platform-tools/adb` @@ -149,7 +149,7 @@ $ flutter run 等 Gradle 编译完 APK 并将其安装后,你将会看到一个全屏的正在运行样例应用代码的窗口跳出来。 -![A simple Flutter app running in full-screen mode on a Pixelbook.]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-development-on-a-pixelbook/flutter_starter_app_on_cb.png){:width="85%"} +![A simple Flutter app running in full-screen mode on a Pixelbook.]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-development-on-a-pixelbook/flutter_starter_app_on_cb.png){:width="85%"} 与其他在 Pixelbook 上运行的 Android 应用程序一样,你可以从最大化的窗口恢复为正常大小,这时候应用程序将会看上去和手机上运行的外观非常相似:除了它是直接运行在你的 Pixelbook 上的! diff --git a/src/content/posts/flutter-devs-survey-2022-q2.md b/src/content/posts/flutter-devs-survey-2022-q2.md index 390bae6b41..ddfe9dde2e 100644 --- a/src/content/posts/flutter-devs-survey-2022-q2.md +++ b/src/content/posts/flutter-devs-survey-2022-q2.md @@ -13,7 +13,7 @@ image: 在此,我们特别邀请大家 [参与本次开发者调查](https://flutter.cn/urls/survey-22-q2), 本次调查自今日正式开始,并于一周之后截止。 -![]({{site.flutter-files-cn}}/posts/images/2022/05/d2feb49b99930.png) +![]({{site.flutter-files-cn}}posts/images/2022/05/d2feb49b99930.png) [Flutter 3](https://flutter.cn/posts/introducing-flutter-3) 和 [Dart 2.17](https://flutter.cn/posts/dart-2-17) 的发布, @@ -55,7 +55,7 @@ Flutter 作为一个 **完全以开源的方式运作的产品**, 这是一个非常重要并非常高效的提交 Flutter 使用反馈的途径, **你的参与或转发都可以让产品变得更好**! -![]({{site.flutter-files-cn}}/posts/images/2022/05/642e4e9acad35.png) +![]({{site.flutter-files-cn}}posts/images/2022/05/642e4e9acad35.png) 同时,我们再次邀请开发者们参加 [字节跳动 UME 插件开发竞赛](https://mp.weixin.qq.com/s/BwImT3xUKCCmxSPP4q40NA)(5 月 30 日截止作品提交), diff --git a/src/content/posts/flutter-engage-china-developers-qa-part-1.md b/src/content/posts/flutter-engage-china-developers-qa-part-1.md index 968ec8f6c3..53f07fb501 100644 --- a/src/content/posts/flutter-engage-china-developers-qa-part-1.md +++ b/src/content/posts/flutter-engage-china-developers-qa-part-1.md @@ -3,7 +3,7 @@ title: Flutter Engage China 开发者常见问题解答 — 上篇 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/04/84565efef718e.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/04/84565efef718e.jpg) 再次感谢大家对 [Flutter Engage China 活动](https://flutter.cn/posts/flutter-engage-china-event-recap) 的关注和积极参与!我们在活动前后收到了很多来自开发者的反馈和问题,Flutter 团队和演讲嘉宾在直播 Q&A 环节中也针对部分问题在第一时间给出回复。现在我们将一些开发者关心的问题和回复整理出来分享给大家,希望对你有所帮助。由于问题数量较多,我们会分为上下两期发布。你也可以观看 Flutter Engage China 视频回顾精彩内容: diff --git a/src/content/posts/flutter-engage-china-developers-qa-part-2.md b/src/content/posts/flutter-engage-china-developers-qa-part-2.md index 333c7870ec..59089125bc 100644 --- a/src/content/posts/flutter-engage-china-developers-qa-part-2.md +++ b/src/content/posts/flutter-engage-china-developers-qa-part-2.md @@ -3,7 +3,7 @@ title: Flutter Engage China 开发者常见问题解答 — 下篇 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/04/14dcfcd1d2a09.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/04/14dcfcd1d2a09.jpg) 再次感谢大家对 [Flutter Engage China 活动](https://flutter.cn/posts/flutter-engage-china-event-recap) 的关注和积极参与!我们在活动前后收到了很多来自开发者的反馈和问题,Flutter 团队和演讲嘉宾在直播 Q&A 环节中也针对部分问题在第一时间给出回复。现在我们将一些开发者关心的问题和回复整理出来分享给大家,希望对你有所帮助。由于问题数量较多,我们分为上下两期发布,上期的内容已经发布,欢迎大家 [前往回顾](https://flutter.cn/posts/flutter-engage-china-developers-qa-part-1)。你也可以观看 Flutter Engage China 视频回顾精彩内容: diff --git a/src/content/posts/flutter-engage-china-event-recap.md b/src/content/posts/flutter-engage-china-event-recap.md index 197274c16a..e21309e56c 100644 --- a/src/content/posts/flutter-engage-china-event-recap.md +++ b/src/content/posts/flutter-engage-china-event-recap.md @@ -3,7 +3,7 @@ title: 精彩回顾 — Flutter Engage China 视频合集 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/04/fada6502a2c26.png) +![]({{site.flutter-files-cn}}posts/images/2021/04/fada6502a2c26.png) 在上周的 Flutter Engage China 活动中,Google Flutter 团队和来自国内的开发者们共同探讨和交流 Flutter 的最新更新、实践和未来的发展。虽然只能通过线上交流,但是在活动中嘉宾们的精彩分享和讨论也吸引了众多 Flutter 开发者互动交流,畅谈创新和合作。为了帮助更多开发者们更顺利地进行开发工作,我们将公开活动中嘉宾们分享的内容,并带你回顾精彩亮点,希望能对你有所帮助。 @@ -47,6 +47,6 @@ Google Flutter 团队产品经理 Zoey 邀请了三位来自 Flutter 社区的 ## **在交流中成长** -![]({{site.flutter-files-cn}}/posts/images/2021/04/263874312041a.png) 积极健康的交流平台是开发者们成长的土壤,诚恳有效的信息交流是开发工作的养分。如果你在观看视频的过程中有任何问题和反馈,欢迎在**文章下方进行留言**发表你的想法,我们会对留言进行整理反馈,请持续关注。很高兴能看到大家为构建良好社区做出努力,请畅所欲言! +![]({{site.flutter-files-cn}}posts/images/2021/04/263874312041a.png) 积极健康的交流平台是开发者们成长的土壤,诚恳有效的信息交流是开发工作的养分。如果你在观看视频的过程中有任何问题和反馈,欢迎在**文章下方进行留言**发表你的想法,我们会对留言进行整理反馈,请持续关注。很高兴能看到大家为构建良好社区做出努力,请畅所欲言! Flutter 在不断更新进步以使开发者们的工作更加得心应手,我们期待看到你使用 Flutter 来构建更多精彩的应用! \ No newline at end of file diff --git a/src/content/posts/flutter-engage-event-recap.md b/src/content/posts/flutter-engage-event-recap.md index 741a8c64ec..53175e7c2b 100644 --- a/src/content/posts/flutter-engage-event-recap.md +++ b/src/content/posts/flutter-engage-event-recap.md @@ -3,7 +3,7 @@ title: Flutter Engage 活动精彩回顾 — 中文字幕视频 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/03/21051eef2d1ac.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/21051eef2d1ac.png) 在 Flutter Engage 预告之后,无数开发者充满期待并且在社区中积极讨论交流,分享见解。今天,我们正式发布 Flutter 2.0,并在 [Flutter Engage 活动](https://events.flutter.dev/) 中详细介绍了这一重大里程碑! @@ -13,7 +13,7 @@ toc: true ## 精彩分享 -![]({{site.flutter-files-cn}}/posts/images/2021/03/f0a76e3ccd730.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/03/f0a76e3ccd730.jpg) 让我们一起来快速了解一下本次 Flutter Engage 的精彩内容吧: @@ -49,7 +49,7 @@ Flutter 2.0 的发布是 Flutter 的一次重大升级和重要里程碑,它 ## 参与讨论 -![]({{site.flutter-files-cn}}/posts/images/2021/03/c7f8c04d839b4.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/c7f8c04d839b4.png) 欢迎你就 Flutter 2.0 发布的相关内容与我们交流!真诚地希望 Flutter Engage 可以让更多 Flutter 开发者有所收获。 diff --git a/src/content/posts/flutter-engage-warmup.md b/src/content/posts/flutter-engage-warmup.md index f8348105eb..0817a333fe 100644 --- a/src/content/posts/flutter-engage-warmup.md +++ b/src/content/posts/flutter-engage-warmup.md @@ -3,7 +3,7 @@ title: 加入 Flutter Engage,Pick 你的专属 Dash 形象! toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/03/bff7897911fed.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/bff7897911fed.png) ## Flutter Engage 活动精彩来袭 @@ -15,11 +15,11 @@ toc: true ## 你的专属 Dash 形象 - ![]({{site.flutter-files-cn}}/posts/images/2021/03/1456332436c3b.png) + ![]({{site.flutter-files-cn}}posts/images/2021/03/1456332436c3b.png) 欢迎一起 [设计你的专属 Dashatar 形象](https://dashatar.flutter.cn/),TA 会拥有何种身份,附加哪些属性,都由你决定。不消片刻,专属萌宠形象就会跃然于屏。你也可以在社区中尽情展示你 Dashatar 的魅力,听起来是不是很有趣?我们也期待看到你的专属 Dashatar 形象,快来大展身手吧! -![]({{site.flutter-files-cn}}/posts/images/2021/03/192f79dc604eb.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/192f79dc604eb.png) ## 期待关注 diff --git a/src/content/posts/flutter-forward-2023-recap.md b/src/content/posts/flutter-forward-2023-recap.md index e36932d2a1..c72b8afbc3 100644 --- a/src/content/posts/flutter-forward-2023-recap.md +++ b/src/content/posts/flutter-forward-2023-recap.md @@ -3,7 +3,7 @@ title: 与 Flutter 共创未来 | Flutter Forward 活动精彩回顾 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2023/02/QXD8vj.jpg) +![]({{site.flutter-files-cn}}posts/images/2023/02/QXD8vj.jpg) *作者 / Google 开发者框架和语言 (含 Flutter、Dart 和 Go) 产品经理 & 用户体验总监 Tim Sneath* @@ -18,7 +18,7 @@ Flutter 是一个界面工具包,它让应用开发者只需编写一套代码 事实证明 Flutter 深受欢迎: 迄今为止已有超过 70 万款使用 Flutter 打造的应用上架。Flutter 的使用者中既有 [志存高远的小型初创公司](https://flutter.dev/showcase/so-vegan "志存高远的小型初创公司"),也不乏 [有关键需求的大型成熟企业](https://flutter.dev/showcase/credit-agricole "有关键需求的大型成熟企业")。Flutter 的价值还让 Google 内部团队受益,[Google 课堂](https://edu.google.com/workspace-for-education/classroom/ "Google 课堂") 等团队借助 Flutter 为移动和 Web 用户提供优质解决方案。我们还在其他开发者工具中添加了对 Flutter 的支持,这些工具包括 [Google Ads](https://developers.google.cn/admob/flutter/quick-start "Google Ads")、[Google Maps](https://codelabs.developers.google.com/codelabs/google-maps-in-flutter#0 "Google Maps")、[Google Pay](https://pub.flutter-io.cn/packages/pay "Google Pay"),当然还有 [Firebase](https://firebase.google.cn/docs/flutter/setup?platform=ios)。 - + △ Google 课堂与 Flutter @@ -36,7 +36,7 @@ Flutter 的第一个版本提供了用于构建 Android 和 iOS 移动应用的 *特别说明: 我们在这里预先介绍的功能仍处于开发阶段,可能会在未来几个月发生重大变更。在现阶段展示这些功能旨在让早期采纳者有机会参与进来、做出贡献。* -![]({{site.flutter-files-cn}}/posts/images/2023/02/FaQLxh.png) +![]({{site.flutter-files-cn}}posts/images/2023/02/FaQLxh.png) ## **突破性的图形性能** @@ -44,25 +44,25 @@ Flutter 的第一个版本提供了用于构建 Android 和 iOS 移动应用的 在 Flutter Forward 活动中,我们展示了 Flutter 的下一代渲染引擎 **[Impeller](https://github.com/flutter/flutter/wiki/Impeller "Impeller")** 取得的更多进展。Impeller 专为 Flutter 优化,提高图形管线方面的灵活性和控制力,并为我们带来了新的机会。Impeller 使用预编译的着色器,可减少运行时由着色器编译引起的丢帧,从而实现更加可预测的性能。它利用了 Metal 和 Vulkan 的基元类型,二者分别是 iOS 和 Android 中的现代底层图形 API。以及有效地运用了并发机制,将同一帧的工作负载分散到多个线程中。 -![△ Impeller 为 Wonderous 这类要求较高的图形应用带来了丝般顺滑的性能。Wonderous 是一款带你探索世界奇观的精美应用,这里展示了它的最新版本,可根据不同的设备和外形规格调整其界面。你可前往 [https://wonderous.app](https://wonderous.app "wonderous.app") 下载该应用。]({{site.flutter-files-cn}}/posts/images/2023/02/a3Dk7v.png) +![△ Impeller 为 Wonderous 这类要求较高的图形应用带来了丝般顺滑的性能。Wonderous 是一款带你探索世界奇观的精美应用,这里展示了它的最新版本,可根据不同的设备和外形规格调整其界面。你可前往 [https://wonderous.app](https://wonderous.app "wonderous.app") 下载该应用。]({{site.flutter-files-cn}}posts/images/2023/02/a3Dk7v.png) △ Impeller 为 Wonderous 这类要求较高的图形应用带来了丝般顺滑的性能。Wonderous 是一款带你探索世界奇观的精美应用,这里展示了它的最新版本,可根据不同的设备和外形规格调整其界面。你可前往 [https://wonderous.app](https://wonderous.app "wonderous.app") 下载该应用。 除了提供流畅的界面,在某些情况下,Impeller 还可以显著提高性能。下面这个视频中的 demo 就完美诠释了这一点。左侧是一个使用 SVG 剪切构建的万花筒应用,该应用使用了当前的默认渲染器。向下滚动页面时,渲染所用时间会超过每帧的预算,导致性能下降、帧率跌至 7-10 fps。右侧是同一个应用,但采用了 Impeller,能以 60 fps 的帧率流畅渲染。 - + △ 万花筒应用示例,展示了使用 Impeller 可提高图形性能 从头开始构建带来的一个好处是,Impeller 的架构可支持全新的使用用例。得益于新引入的 **对自定义着色器的支持**,我们已经有了一些 [令人惊叹的新 demo](https://twitter.com/reNotANumber/status/1599717360096620544 "令人惊叹的新 demo"),展示了与 Flutter widget 层次结构的无缝集成。此外,我们并未止步于移动端,还在 Web 端发布了对自定义着色器的早期支持。现在你可以使用同一套代码,在 iOS、Android 和浏览器中提供硬件加速的体验。 -![Flutter 现在支持在 Web 端使用像素着色器,让你可实现各种炫酷的视觉效果。(图片提供者: [Erick Ghaumez](https://medium.com/u/21767146c3d4?source=post_page-----b94ce089f49c "Erick Ghaumez"))]({{site.flutter-files-cn}}/posts/images/2023/02/BNbAEb.png) +![Flutter 现在支持在 Web 端使用像素着色器,让你可实现各种炫酷的视觉效果。(图片提供者: [Erick Ghaumez](https://medium.com/u/21767146c3d4?source=post_page-----b94ce089f49c "Erick Ghaumez"))]({{site.flutter-files-cn}}posts/images/2023/02/BNbAEb.png) △ Flutter 现在支持在 Web 端使用像素着色器,让你可实现各种炫酷的视觉效果。(图片提供者: [Erick Ghaumez](https://medium.com/u/21767146c3d4?source=post_page-----b94ce089f49c "Erick Ghaumez")) 另外,我们已经着手开展 **使 Flutter 支持 3D 图形** 的早期工作。在主题演讲中,我们演示了你可以导入使用 [Blender](https://www.blender.org/ "Blender") 创建的模型,甚至可以利用热重载技术,在 Blender 中实时迭代模型,然后在正运行的应用中查看结果。虽然该功能还处于早期阶段,但我们对所实现的初始性能以及将 3D 集成到其他 Flutter 体验中的潜力满怀期待。 -![△ 这个有趣的 Dash demo 展现了 Impeller 让 Flutter 能够渲染 3D 图形。]({{site.flutter-files-cn}}/posts/images/2023/02/kYeQ6b.png) +![△ 这个有趣的 Dash demo 展现了 Impeller 让 Flutter 能够渲染 3D 图形。]({{site.flutter-files-cn}}posts/images/2023/02/kYeQ6b.png) △ 这个有趣的 Dash demo 展现了 Impeller 让 Flutter 能够渲染 3D 图形。 @@ -78,7 +78,7 @@ Flutter 的第一个版本提供了用于构建 Android 和 iOS 移动应用的 这两项新功能相结合,使得 Flutter 可在 Web 端解锁一些令人期待的新用例。我们在 Flutter Forward 活动中展示了一个 [概念验证 demo](https://flutter-forward-demos.web.app/#/ "概念验证 demo "),你可以看到一个嵌入在 HTML 网页中的简单 Flutter 应用。使用 CSS,我们可以实现动画旋转效果;即使在旋转时,Flutter 内容也一直可供互动。该 demo 还展示了你可以使用 HTML 按钮和 JavaScript 事件处理脚本来改变 Flutter 的状态,反之亦然。我们认为,这项功能正式推出后,将在使用 Flutter 向现有 Web 应用增加互动方面,带来更多可能性。 -![△ 利用 "元素嵌入" 功能,你可以将 Flutter 嵌入
元素中并使用 CSS 来设置其样式。]({{site.flutter-files-cn}}/posts/images/2023/02/tAcjsa.png) +![△ 利用 "元素嵌入" 功能,你可以将 Flutter 嵌入
元素中并使用 CSS 来设置其样式。]({{site.flutter-files-cn}}posts/images/2023/02/tAcjsa.png) △ 利用 "元素嵌入" 功能,你可以将 Flutter 嵌入
元素中并使用 CSS 来设置其样式。 @@ -94,7 +94,7 @@ Flutter 的第一个版本提供了用于构建 Android 和 iOS 移动应用的 吸引开发者关注的另一种平台架构是 [RISC-V](https://en.wikipedia.org/wiki/RISC-V "RISC-V"),这是一种为广泛使用而设计的开放式标准指令集架构 (ISA)。Android 团队最近 [在支持 RISC-V 方面的工作](https://www.youtube.com/watch?v=70O_RmTWP58 "他们在支持 RISC-V 方面所做的工作") 有所进展。我们也很高兴地宣布 **Dart 现在支持 RISC-V**,相关工作的目标是让 Flutter 能够在陆续上市的 RISC-V 设备上运行。尽管生产级 RISC-V 硬件仍处于起步阶段,但我们依然在 Flutter Forward 活动中展示了目前为止在 [ClockworkPi DevTerm Kit R-01](https://www.clockworkpi.com/product-page/devterm-kit-r01 "ClockworkPi DevTerm Kit R-01") 上取得的进展,它是一个运行 Linux 的自组装便携式终端设备。我们认为在嵌入式场景中,尤其应该支持 RISC-V,Flutter 可以在此情景中为各类需求提供强大的界面工具包。 -![△ 一台正在运行 Dart 控制台应用的 ClockworkPi DevTerm R-01 (一款实验性 RISC-V 电脑)]({{site.flutter-files-cn}}/posts/images/2023/02/6mBeRT.png) +![△ 一台正在运行 Dart 控制台应用的 ClockworkPi DevTerm R-01 (一款实验性 RISC-V 电脑)]({{site.flutter-files-cn}}posts/images/2023/02/6mBeRT.png) △ 一台正在运行 Dart 控制台应用的 ClockworkPi DevTerm R-01 (一款实验性 RISC-V 电脑) @@ -104,7 +104,7 @@ Flutter 的第一个版本提供了用于构建 Android 和 iOS 移动应用的 一直以来我们都在为推动 Dart 语言的健康发展做出努力。在 Flutter Forward 活动中,我们带大家抢鲜了解了一些重要的新 Dart 语言功能的初步进展。对 **records 和 patterns** 的早期支持现已登陆开发渠道,这两项新的增强功能协同运用可以发挥出良好效果。 -![△ 一个简单的 records 和 patterns 示例,可返回和接收多个函数参数。]({{site.flutter-files-cn}}/posts/images/2023/02/jJMm1S.jpg) +![△ 一个简单的 records 和 patterns 示例,可返回和接收多个函数参数。]({{site.flutter-files-cn}}posts/images/2023/02/jJMm1S.jpg) △ 一个简单的 records 和 patterns 示例,可返回和接收多个函数参数。 @@ -112,7 +112,7 @@ Flutter 的第一个版本提供了用于构建 Android 和 iOS 移动应用的 当然,我们也在着力提升 Flutter 的开发者体验。继去年我们 [在 I/O 大会上宣布推出的](https://flutter.cn/posts/announcing-the-flutter-casual-games-toolkit "Flutter 休闲游戏工具包发布") 休闲游戏工具包大获成功之后,我们发布了 [**新闻工具包** 的第一个版本](https://medium.com/flutter/announcing-the-flutter-news-toolkit-180a0d32c012 "新闻工具包的第一个版本"),这将加速新闻发布商和其他内容提供方的移动应用开发,让他们无需从头开始设计应用就能触达移动端用户。它包含了打造以新闻报道为中心的应用所需的一切功能,包括导航和搜索、身份验证、广告植入、通知、档案和订阅,同时纳入了根据 Google 新闻计划的研究成果确定的最佳实践。我们要分享三个使用该工具包构建应用的非洲早期采纳者的故事,他们分别是摩洛哥最著名的新闻网站之一 [Hespress](https://www.hespress.com/ "摩洛哥最著名的新闻网站之一 Hespress")、尼日利亚的热门体育网站 [Bold Sports](https://boldsportsng.com/ "尼日利亚的热门体育网站 Bold Sports") 以及肯尼亚历史最悠久的报纸 [《The Standard》](https://www.standardmedia.co.ke/ "肯尼亚历史最悠久的报纸 《The Standard》")。 - + △ 观看三个非洲新闻发布商的故事,了解他们作为 Google 新闻工具包早期采纳者的体验。 @@ -122,12 +122,12 @@ Flutter 的第一个版本提供了用于构建 Android 和 iOS 移动应用的 下图对我们的发展方向进行了总结: -![]({{site.flutter-files-cn}}/posts/images/2023/02/rmxfey.png) +![]({{site.flutter-files-cn}}posts/images/2023/02/rmxfey.png) 除了自身拟定的开发方向,我们也很高兴看到 Flutter 生态系统继续蓬勃发展。例如,[FlutterFlow](https://flutterflow.io/ "FlutterFlow") 是一个用于开发原生移动应用的低代码构建工具,而 [Widgetbook](http://widgetbook.io/ "Widgetbook") 提供灵活的工具,供设计师和开发者协作开发用户界面。 最后,很高兴借此机会来到肯尼亚,领略了当地开发者的企业家精神和才华。非洲的 Flutter 社区充满活力;仅肯尼亚的 Flutter 用户群组就有超过 1,000 名开发者。我们很高兴 Flutter 能够为非洲的开发者带来新的机遇,让他们可以参与到快速增长的应用经济中。Klasha 就是诠释这一前景的优秀案例。这家公司借助 Flutter 快速进入市场,并解决了本地用户的问题。下面的视频介绍了他们使用 Flutter 的体验: - + △ Klasha ([https://klasha.com/](https://klasha.com/ "Klasha")) 的故事以及他们使用 Flutter 的体验。Klasha 是一家科技初创公司,其宗旨是让非洲消费者能够顺畅地买到世界各地的商品。 diff --git a/src/content/posts/flutter-forward-2023.md b/src/content/posts/flutter-forward-2023.md index 569f39454c..3bc83a8a27 100644 --- a/src/content/posts/flutter-forward-2023.md +++ b/src/content/posts/flutter-forward-2023.md @@ -3,11 +3,11 @@ title: 1 月 25 日见|Flutter Forward 活动日程表正式发布! toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2022/12/MLLUlG.jpeg) +![]({{site.flutter-files-cn}}posts/images/2022/12/MLLUlG.jpeg) 2023 年 1 月 25 日 (正月初四),我们将在肯尼亚首都内罗毕举办 Flutter Forward 大会,并同时开启线上直播。本次活动将展示最新的 Flutter 技术更新,包括一个主题演讲以及多个技术演讲和线上问答,全方位展示 Flutter 如何推动 UI 开发的发展,参加我们的活动,看看未来几年的 Flutter 会如何继续构建精彩! - + ## 活动日程表 @@ -15,7 +15,7 @@ toc: true 下方所述时间均为 **北京时间**: -![]({{site.flutter-files-cn}}/posts/images/2022/12/VFvbt9.jpg) +![]({{site.flutter-files-cn}}posts/images/2022/12/VFvbt9.jpg) ### 22:30 - 23:00 Flutter Keynote 预热 @@ -50,6 +50,6 @@ toc: true ## 活动报名 -![报名网址: https://flutter.cn/urls/ff]({{site.flutter-files-cn}}/posts/images/2022/12/Xhthub.jpg) +![报名网址: https://flutter.cn/urls/ff]({{site.flutter-files-cn}}posts/images/2022/12/Xhthub.jpg) 活动注册网站可能需要特别的网络访问,本次无需注册即可参与,但如果你注册了,我们会发送活动的更新和提醒。 diff --git a/src/content/posts/flutter-forward-china-live.md b/src/content/posts/flutter-forward-china-live.md index 0271d195fe..2469d0f0b8 100644 --- a/src/content/posts/flutter-forward-china-live.md +++ b/src/content/posts/flutter-forward-china-live.md @@ -3,7 +3,7 @@ title: 大年初四,Flutter Forward 中国社区直播活动与你不见不散 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2023/01/ab75b498bf387.png) +![]({{site.flutter-files-cn}}posts/images/2023/01/ab75b498bf387.png) 之前我们预告过,2023 年 1 月 25 日 (年初四),Flutter 团队将在肯尼亚首都内罗毕举办 [Flutter Forward 大会](/posts/flutter-forward-2023),并同时开启线上直播。本次活动将为展示最新的 Flutter 技术更新,包括一个主题演讲,以及多个技术演讲和线上问答, 全方位展示 Flutter 如何推动 UI 开发的发展。 @@ -41,6 +41,6 @@ Flutter Forward 主题演讲 ### 交流群 -![]({{site.flutter-files-cn}}/posts/images/2023/01/a883e31a1ae0b.jpg) +![]({{site.flutter-files-cn}}posts/images/2023/01/a883e31a1ae0b.jpg) 由于群聊二维码失效较快,请关注「Flutter 社区」公众号,回复关键字「FF活动」即可加入群聊。 \ No newline at end of file diff --git a/src/content/posts/flutter-highlight-2021.md b/src/content/posts/flutter-highlight-2021.md index fe3717aa2d..e139319d58 100644 --- a/src/content/posts/flutter-highlight-2021.md +++ b/src/content/posts/flutter-highlight-2021.md @@ -3,30 +3,30 @@ title: 回顾 2021 Flutter 精彩时刻 description: 祝愿各位 Flutter 开发者们虎年大吉、虎虎生威! --- -![Flutter新年]({{site.flutter-files-cn}}/posts/images/2022/01/6879bbc9b157d.png) +![Flutter新年]({{site.flutter-files-cn}}posts/images/2022/01/6879bbc9b157d.png) -![2]({{site.flutter-files-cn}}/posts/images/2022/01/752a1f9e5ac3f.png) +![2]({{site.flutter-files-cn}}posts/images/2022/01/752a1f9e5ac3f.png) 2021 年,Flutter 正式进入 2.x 系列的正式版发布,年初的 [Flutter 2 的发布](./announcing-flutter-2) 打开了一个新的“格局”,为 Flutter 的加入了第五大特色——「**可移植性**」,让 Flutter 从一个移动框架正式“升级”为一个「可移植框架」,目标是让 Flutter 应用基本可以不加变动地在多种平台上运行。通过 Flutter,开发者们可以为任何平台创建美观、快速且可移植的应用。3 月份,除了 [Web 平台发布稳定版](https://mp.weixin.qq.com/s/6oSwvPsMy6r4AW90aostiA) 之外,Flutter 也开始向桌面、可折叠和嵌入式设备上进行扩展。随之发布的 [Dart 2.12 正式版](./announcing-dart-2-12) 提供了健全的空安全和 FFI 的生产环境级支持。Dart 是一个站在 Flutter 背后的“秘密武器”,我们提到的很多 Flutter 的“闪光点”,实际很大程度要归功于 Dart: 包括我们熟知的有状态的热重载 (Stateful Hot-Reload),以及 Dart FFI 的成熟支撑了 Flutter 2 提到的「可移植性」,以及最新 Flutter 2.8 稳定版中关于性能的提升的部分,都离不开 Dart。 -![2.2]({{site.flutter-files-cn}}/posts/images/2022/01/2faa787ee6bae.png) +![2.2]({{site.flutter-files-cn}}posts/images/2022/01/2faa787ee6bae.png) 21 年 5 月下旬的 I/O 大会仍是在线上举办,[Flutter 2.2](https://mp.weixin.qq.com/s/tnQ1F7kvrxKrbRs8bSzMmg) 和 [Dart 2.13](https://mp.weixin.qq.com/s/pmfJ3Q8wJ_fM0VTNWeaSqg) 稳定版正式发布。除了不断进化的 Web 支持,Flutter 也在移动平台有了很多关于性能方面的改进,也着手从基础侧为 Flutter 增强扩展到其他平台进行改进。Flutter 2.2 着重改进开发体验,新项目会默认自动启用健全的空安全 ,Flutter 的开发者工具 (DevTools) 并和 IDE 插件都得以改进和更新,DartPad 也为教学者增加了引导式代码体验。Dart 2.13 对空安全加入了更多更新,并推出了开发者们非常期待的「类型别名」的新特性。 Flutter 生态里有一个非常重要的角色,就是围绕着 Flutter 发布的一些 Dart Package,这些 package 极大程度上帮助了开发者更好的构建 Flutter 应用。FlutterFire 是官方维护的方便 Flutter 应用集成 Firebase 服务的一系列插件合集,官方也将一批自己维护的插件移交给社区进行维护,这标志着 Flutter 已经远不是只有 Google 工程团队在“单打独斗”,整个社区都在为 Flutter 进行持续贡献。除了广大的开发者社区成员们的贡献之外,丰田、Canonical、三星、索尼、微软也都在持续为 Flutter 做出贡献。Flutter 不只是适用于开发者,也同样适用于设计师们,Adobe XD 是一款 UI/UX 设计和协作工具,你可以使用 xd-to-flutter 插件轻松的将设计稿转换为支持空安全的 Flutter 代码。I/O 期间,Flutter 团队还联合 VGV 团队发布并开源了一个 [使用 Flutter 和 Firebase 构建的 Web 应用](https://mp.weixin.qq.com/s/vEtpHNgsNNzl5Bln3Tfr1g) ——「Flutter 照相亭」,作为一个样例应用,开发者们可以学习应用是如何构建良好的拍照体验、优化 Web 的应用体验以及使用 Firebase 完成业务逻辑等。 -![2.5]({{site.flutter-files-cn}}/posts/images/2022/01/30914f7e0b7fe.png) +![2.5]({{site.flutter-files-cn}}posts/images/2022/01/30914f7e0b7fe.png) 21 年 9 月,Flutter 更新到了 [2.5 正式版](./whats-new-in-flutter-2-5),Dart 也发布了 [2.14 正式版](./announcing-dart-2-14),这个版本仍延续了过去的一些工作,继续进行一些重要的性能和工具改进,也同时加入了对 Material You 的支持等。从这个版本开始,Dart 对 Apple 芯片的支持正式在稳定版渠道推出,同时增加了很多共享的代码 lint 工具,pub.dev 上的评分引擎也开始使用其中的部分 lint 规则,package 发布工具也支持了识别和使用 `.gitignore` 来声明哪些需要忽略的内容,避免上传无用的代码片段等。随着 Dart 空安全特性的推出,有很多应用开发者和 package 开发者们已经开始跟进并应用了健全的空安全特性。除了稳步更新 Flutter 移动端的性能和开发体验,[Flutter Web 也发布了产品路线图](./flutter-2022-roadmap),力求让 Flutter 应用在 Web 平台的体验更自然。Flutter 团队几乎完全依靠 GitHub 等开源开放平台协作,所有的流程和代码改进都是向社区公开透明的,因此我们也在非常努力的推动国内的开发者参与全球社区贡献,并 [在每次的开发者调查中发声]({{site.bili.video}}/BV1CP4y1V7c9),很多新特性和改进都会在 GitHub Issue 上发布并公开征集反馈,开发者们的反馈和交互越多,Flutter 团队就越重视,越会投入资源去解决。 从 Play 商店的应用数量看,Flutter 应用数量从 21 年第一季度的 15 万+ 上升到第二季度的 20 万+,同时,21 年 4 月到 5 月,Play 商店中有超过八分之一的新应用是采用 Flutter 构建,21 年年末 Play 商店的 Flutter 应用数量对比第二季度几乎翻番,达到了 37.5 万+ 款应用。这些数字证明着 Flutter 的流行,以及受到越来越多开发者们的采纳和喜爱。开发者们对 Flutter 的采纳和喜爱也同时体现在很多开发者报告里,分析公司 SlashData 的报告里显示:Flutter 是如今最流行的跨平台开发框架,有 45% 的受访开发者选用;RedMonk 排名中提到“Dart 有显著上升”;StackOverflow 的开发者调查体现出开发者喜爱的编程语言里,Dart 排名第七、喜爱的框架里,Flutter 排名第二;JetBrains 2021 开发者生态系统现状报告中显示,在跨平台移动框架选择上,Flutter 的受欢迎程度持续增长,已经超越 React Native 成为最流行的跨平台移动框架。使用 Flutter 的头部公司和应用也包含了 BMW、ByteDance、滴滴、eBay、Grab、Greggs、贝壳、Norton、Philips Hue、PUBG、SHEIN、trip.com、WeChat 等 (*排名不分先后),截止 21 年末,全球的 Flutter 开发者数量已达 300 万以上,Flutter 也从最初的「便携式 UI 工具包」进化成「一个为环境计算打造的 UI 平台」。 -![2.8]({{site.flutter-files-cn}}/posts/images/2022/01/d914e399b45a1.png) +![2.8]({{site.flutter-files-cn}}posts/images/2022/01/d914e399b45a1.png) 2021 年的最后一次稳定版更新发布的是 [Flutter 2.8](./announcing-flutter-2-8) 和 [Dart 2.15](./announcing-dart-2-15),这个版本着重关注的是移动端平台的性能,由于重新设计和实现了 Dart 编程语言中 [isolate 的工作方式](https://mp.weixin.qq.com/s/WCvv7DXzWXNRaMtM-0u7pA),使得 isolate 所消耗的内存最高减少了 100 倍,体现在 Flutter 应用里就是启动性能和内存占用等性能都有非常大的提升,同时为了方便开发者们调试应用性能,新版的开发者工具 (DevTools) 加入了一个 Enhace Tracing (增强跟踪) 的功能,用于诊断消耗较大的、引起 UI 卡顿的 Widget 构建、布局和绘制操作。在 Web 的平台视图 (PlatformView) 方面,2.8 版本会复用平台视图之前创建的 canvas,提升性能减少滚动卡顿。围绕 package 生态,这次更新了一系列 Firebase 相关的插件,以及 Google 移动端广告 SDK 的插件,与此同时,你也可以通过 DartPad 工具直接使用部分 Firebase 插件和其他 package 了。2.8 还将桌面端的支持往前迈出了一大步,官方也在近期向全球开发者征集 [Flutter 桌面端的应用](https://mp.weixin.qq.com/s/RgUphbNnc6UTD05oppWnWA),以扩大测试覆盖率,为 Flutter 桌面端的稳定支持提供更多保障。 -![2:4:2022]({{site.flutter-files-cn}}/posts/images/2022/01/b7b3cf3eadea5.png) +![2:4:2022]({{site.flutter-files-cn}}posts/images/2022/01/b7b3cf3eadea5.png) 回望 2021,Flutter 的发展势头正旺、潜力无限,展望 2022,更是信心满满。尤其是桌面端的版本推进,马上就会进行一个新的 Flutter 产品更新发布,这次发布是针对 Windows 桌面应用程序开发者的,中国时间 2 月 4 号 (正月初四) 发布,届时我们也会关注并推送最新的信息。 @@ -34,14 +34,14 @@ Flutter 生态里有一个非常重要的角色,就是围绕着 Flutter 发布 我们今年为大家准备了两款 Flutter 红包封面,分别是 Dash 虎头帽和 Dash 迎新春 (迎新春款可通过领红包页面领取),去年的三只小秃头也限时返场,祝愿各位开发者们虎年红红火火,再创佳绩! -![]({{site.flutter-files-cn}}/posts/images/2022/01/f9dvuY.jpg) +![]({{site.flutter-files-cn}}posts/images/2022/01/f9dvuY.jpg) -![虎头帽封面二维码]({{site.flutter-files-cn}}/posts/images/2022/01/ehgTJi.jpg) +![虎头帽封面二维码]({{site.flutter-files-cn}}posts/images/2022/01/ehgTJi.jpg) -![]({{site.flutter-files-cn}}/posts/images/2022/01/fbbcc804ac6c7.png) +![]({{site.flutter-files-cn}}posts/images/2022/01/fbbcc804ac6c7.png) -![Dash 迎新春封面二维码]({{site.flutter-files-cn}}/posts/images/2022/01/jzJ8QQ.jpg) +![Dash 迎新春封面二维码]({{site.flutter-files-cn}}posts/images/2022/01/jzJ8QQ.jpg) -![]({{site.flutter-files-cn}}/posts/images/2022/01/3ZiOn9.jpg) +![]({{site.flutter-files-cn}}posts/images/2022/01/3ZiOn9.jpg) -![三小只封面二维码]({{site.flutter-files-cn}}/posts/images/2022/01/qnBir2.jpg) \ No newline at end of file +![三小只封面二维码]({{site.flutter-files-cn}}posts/images/2022/01/qnBir2.jpg) \ No newline at end of file diff --git a/src/content/posts/flutter-news-from-gdd-china-flutter1.9.md b/src/content/posts/flutter-news-from-gdd-china-flutter1.9.md index 6dad5848fe..e4d3597165 100644 --- a/src/content/posts/flutter-news-from-gdd-china-flutter1.9.md +++ b/src/content/posts/flutter-news-from-gdd-china-flutter1.9.md @@ -3,7 +3,7 @@ title: Flutter 1.9 正式发布 toc: true --- -![Google Developer Days taking place in China]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot9-release/flutter1-9-gdd-keynote.jpg){:width="95%"} +![Google Developer Days taking place in China]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot9-release/flutter1-9-gdd-keynote.jpg){:width="95%"} 本周对 [Flutter](http://flutter.cn) 意义非凡。Google 面向中国开发者举办的重量级年度盛会——[中国 Google 开发者大会](https://events.google.cn/intl/en/developerdays2019/) 于今日正式拉开帷幕。在主题演讲环节,Flutter 团队宣布推出最新稳定版: Flutter 1.9。这是 Flutter 迄今为止最大的一次版本更新,100 余位贡献者提交共计超过 1,500 份 pull request。Flutter 1.9 引入的新特性与更新涵盖范围广泛,包括 macOS Catalina 和 iOS 13 支持、工具支持优化、多项 Dart 语言新特性以及全新的 Material widget。 @@ -25,9 +25,9 @@ Flutter 1.9 也对 [Material](https://material-io.cn/) 组件和特性进行了 在 Flutter 1.9 中,我们新添加了若干 widget, 其中包括 ToggleButtons 和 ColorFiltered。 -![Flutter ToggleButtons Demo]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot9-release/image1phone.gif){:width="45%"} +![Flutter ToggleButtons Demo]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot9-release/image1phone.gif){:width="45%"} -![Flutter ColorFilter Demo]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot9-release/image2phone.gif){:width="45%"} +![Flutter ColorFilter Demo]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot9-release/image2phone.gif){:width="45%"} ToggleButtons widget 可将同一行的多个 ToggleButton widget 组合到一起,其中每个 widget 各自又由一组图标和文本 widget 构成。通过这种组合,开发者将得到一组外观与行为完全可自定义的按钮。它能为你的应用按钮实现更加多元化的设计——不论是单选还是多选,选择至少一个或是零个,尖角还是圆角、粗边或细边,图标或文本——ToggleButtons widget 全都可以满足。请查看 [ToggleButtons 示例](https://github.com/csells/flutter_toggle_buttons),了解以上需求的具体实现。 @@ -37,7 +37,7 @@ ToggleButtons widget 可将同一行的多个 ToggleButton widget 组合到一 我们还新增了南非语 (Afrikaans)、祖鲁语 (Zulu) 等 24 种语言的支持。 -![Table of languages supported]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot9-release/i18n.png){:width="95%"} +![Table of languages supported]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot9-release/i18n.png){:width="95%"} ## Dart 2.5 发布 @@ -51,7 +51,7 @@ ToggleButtons widget 可将同一行的多个 ToggleButton widget 组合到一 此外,我们也在一直改善 Flutter 应用中的错误信息质量。优化之后,信息的可读性、简洁性和可操作性均有明显提升。 -![Flutter error message]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot9-release/fluttererrormessage.png){:width="95%"} +![Flutter error message]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot9-release/fluttererrormessage.png){:width="95%"} 该项目由 Flutter 用户体验团队负责牵头,如果你想了解更多有关结构化错误显示的内容,请阅读 [更精准更简洁: Flutter 改进错误信息提示](https://medium.com/flutter/improving-flutters-error-messages-e098513cecf9)。我们才刚刚开始采用这些新格式,预计未来将有更多错误信息会以结构化的形式呈现。 @@ -61,7 +61,7 @@ ToggleButtons widget 可将同一行的多个 ToggleButton widget 组合到一 在你创建项目时,Flutter 会通过一个最小的 web/index.html 文件来生成一个 web 运行引擎 (web runner),其中 web/index.html 文件主要用于自举 (bootstrap) 基于 web 编译的 Flutter 代码,有了这文件后,你可使用 Flutter CLI 工具或 IDE 中的 Flutter 插件来编辑或运行针对 web 平台开发的 Flutter 应用。 -![screenshot of VS Code with web support enabled for Flutter]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot9-release/vscode.png){:width="95%"} +![screenshot of VS Code with web support enabled for Flutter]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot9-release/vscode.png){:width="95%"} 上图为启用了 Flutter web 支持的 VS Code 界面截屏。请注意 web/index.html 文件和顶部的下拉列表允许你选择 Chrome 作为目标设备。尽管 Flutter 的 web 支持还不成熟,但是我们在 Flutter 1.9 中朝着正确的方向迈进了一大步。 @@ -69,9 +69,9 @@ ToggleButtons widget 可将同一行的多个 ToggleButton widget 组合到一 我们的开发者已经构建了许多实用的 web 工具,下面就简单介绍一下 Flutter Widget Livebook 和 Panache。 -![Flutter Widget Livebook]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot9-release/communityexperiment1.png){:width="45%"} +![Flutter Widget Livebook]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot9-release/communityexperiment1.png){:width="45%"} -![Panache]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot9-release/communityexperiment2.png){:width="45%"} +![Panache]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot9-release/communityexperiment2.png){:width="45%"} [Flutter Widget Livebook](https://flutter-widget-livebook.blankapp.org/) 是一个在网页上展示 widget 运行效果的网站,它使用 Flutter 开发,并直接运行在网页上。[Panache](https://rxlabz.github.io/panache_web/) 则是一款为 Flutter 创建主题的工具,你可以下载创建好的主题,然后将其直接添加到代码中。 @@ -86,7 +86,7 @@ Bilibili 视频链接 {{site.bili.video}}/av67230699/ 现在,让我们插个轻松的话题,邀请你参加一个有趣的小游戏。请找到你手边的 Google Assistant 设备,然后对它说 “OK Google. Talk to Flutter Widget Quiz.” (OK Google, [为我接通 Flutter Widget 问答挑战赛](https://assistant.google.com/services/a/uid/000000f3a4034e91))。十分感谢 Flutter 社区对这份小测试的倾情贡献,期待各位小伙伴的精彩表现: -![Flutter Widget Quiz]({{site.flutter-files-cn}}/posts/images/2021/02/36cc2facf9626.png){:width="80%"} +![Flutter Widget Quiz]({{site.flutter-files-cn}}posts/images/2021/02/36cc2facf9626.png){:width="80%"} ## 结语 diff --git a/src/content/posts/flutter-pubg-mobile-dev-story.md b/src/content/posts/flutter-pubg-mobile-dev-story.md index f108f6b4d8..ffba606e12 100644 --- a/src/content/posts/flutter-pubg-mobile-dev-story.md +++ b/src/content/posts/flutter-pubg-mobile-dev-story.md @@ -23,7 +23,7 @@ image: > > 胡明春,PUBG MOBILE 开发团队高级工程师 -![]({{site.flutter-files-cn}}/posts/images/2023/02/SvqNgV.gif) +![]({{site.flutter-files-cn}}posts/images/2023/02/SvqNgV.gif) △ Flutter 打造的社区模块一直能保持稳定的帧率 @@ -41,7 +41,7 @@ image: > > 程建,PUBG MOBILE 开发团队高级工程师 -![]({{site.flutter-files-cn}}/posts/images/2023/02/Dqcz3s.png) +![]({{site.flutter-files-cn}}posts/images/2023/02/Dqcz3s.png) △ 一次编写,到处运行 @@ -59,7 +59,7 @@ image: > > 汪增灏,PUBG MOBILE 开发团队高级产品经理 -![]({{site.flutter-files-cn}}/posts/images/2023/02/rZVjEk.gif) +![]({{site.flutter-files-cn}}posts/images/2023/02/rZVjEk.gif) △ PUBG MOBILE 丰富的社区功能由 Flutter 打造 diff --git a/src/content/posts/flutter-slsa-progress.md b/src/content/posts/flutter-slsa-progress.md index 5f48f78bf5..235d5f2a07 100644 --- a/src/content/posts/flutter-slsa-progress.md +++ b/src/content/posts/flutter-slsa-progress.md @@ -19,7 +19,7 @@ Cocoon 是一个管理 Flutter Infra CI 的工具应用,我们已经实现了 Cocoon 不仅可以管理 Flutter Infra CI,还可以将多个 CI 服务与 GitHub 集成,使得团队在 GitHub 上开发变得更容易。Cocoon 通过了 SLSA 2 级的要求,这意味着 Cocoon 已经解决了 SLSA 1 和 2 级别中所有的安全问题。Google 的开源安全团队已经验证并审核了 Cocoon 具备 SLSA 2 级标准的要求。 -![]({{site.flutter-files-cn}}/posts/images/2022/10/99938ae2c6677.png) +![]({{site.flutter-files-cn}}posts/images/2022/10/99938ae2c6677.png) 我们为 `docs-flutter-dev`、`master-docs-flutter-dev` 和 `flutter-dashboard` 实施了额外的安全强化措施,使用基础设施即代码 (IaC) 系统实现身份识别和访问管理 (IAM)。这几个项目非常重要,他们为 Flutter 提供开发文档以及 Flutter 构建状态的仪表盘等。在 IaC 系统的管理下,安全权限的更改需要改动代码,没有批准则无法进行任何改动。也就是说,安全权限的改变是要通过版本控制系统来修改代码的,并且需要提供改变的理由。现有的 IAM 权限将会被减弱以遵循最小权限原则 (Principle of least privilege)。 diff --git a/src/content/posts/flutter-spring-2020-update.md b/src/content/posts/flutter-spring-2020-update.md index e4aabf6e70..0d41e5728f 100644 --- a/src/content/posts/flutter-spring-2020-update.md +++ b/src/content/posts/flutter-spring-2020-update.md @@ -16,7 +16,7 @@ Google Flutter 团队的工程师、产品经理、UX 研究人员、技术作 更学会了如何身处办公室之外继续完善 Flutter! 衷心希望大家也能不断进步,平安健康。 -![flutter-developers]({{site.flutter-files-cn}}/posts/flutter-cn/2020/flutter-spring-2020-update/flutter-developers.png){:width="85%"} +![flutter-developers]({{site.flutter-files-cn}}posts/flutter-cn/2020/flutter-spring-2020-update/flutter-developers.png){:width="85%"} ## Flutter 势头正盛 @@ -124,7 +124,7 @@ Nubank 选择了 Flutter,并在此后将其前端开发团队统一在同一 * [Nougat animation](https://codepen.io/phillywiggins/pen/gOaPNPY) (phillywiggins) * [Double pendulum](https://codepen.io/abhilas-csc/pen/qBOZKPj) (abhilas-csc) -![codepen support flutter]({{site.flutter-files-cn}}/posts/flutter-cn/2020/flutter-spring-2020-update/codepen-plus-flutter.png){:width="85%"} +![codepen support flutter]({{site.flutter-files-cn}}posts/flutter-cn/2020/flutter-spring-2020-update/codepen-plus-flutter.png){:width="85%"} 如果你正在寻找 Flutter 学习资源,我们现在在网上提供免费的 Flutter 入门课程。 这个由 Angela Yu 主讲的长达 10 小时的课程内含教程和代码实验室, diff --git a/src/content/posts/flutter-web-support-hits-the-stable-milestone.md b/src/content/posts/flutter-web-support-hits-the-stable-milestone.md index 9376595e8f..42d50a6eb8 100644 --- a/src/content/posts/flutter-web-support-hits-the-stable-milestone.md +++ b/src/content/posts/flutter-web-support-hits-the-stable-milestone.md @@ -3,7 +3,7 @@ title: Flutter Web 支持现已进入稳定版 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/03/90973fe9e93f5.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/90973fe9e93f5.png) *作者 / Mariam Hasnany, Product Manager, Flutter* @@ -19,7 +19,7 @@ Flutter 的首个版本支持 iOS 和 Android,开发者们已经用它在移 这篇文章介绍了我们迄今为止的工作成果,并分享了几个案例,意在帮助开发者在自己的应用中活用 Flutter 对 web 的支持。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/80f8ccc90315b.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/80f8ccc90315b.png) > △ [iRobot Education](https://edu.irobot.com/the-latest/building-a-coding-experience-for-all) 使用 Flutter 开发了 [iRobot Coding](https://code.irobot.com/) 应用,通过此 web 应用向大众提供编程学习体验 @@ -31,7 +31,7 @@ Flutter 是用 [Dart](https://dart.cn/) 编写的,而 Dart 能编译成 JavaSc 我们的方法是,建立一个在所有平台上都能使用的一致的工具包 (而不是建立两个有着各种微妙差异的独立框架),以确保开发者的代码运行时不会出现意外。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/edb077dfd7dda.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/edb077dfd7dda.png) Flutter 框架由 [一系列层结构](https://docs.flutter.cn/resources/technical-overview#layer-cakes-are-delicious) 组成,其中包含: @@ -50,7 +50,7 @@ Flutter 框架由 [一系列层结构](https://docs.flutter.cn/resources/technic 在此期间,我们对架构进行了重大改进,增加了一些功能,以便扩展和优化 Flutter 的 web 支持,新增内容主要集中在四个方面: **性能**、**web 专属功能**、**桌面硬件适配**,以及**插件**。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/f76550f48d532.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/f76550f48d532.png) ### **性能** @@ -58,13 +58,13 @@ Flutter 框架由 [一系列层结构](https://docs.flutter.cn/resources/technic 我们最早的工作是基于 DOM 的 HTML。在这种渲染模式中,Flutter 的 web 引擎会将每个生成的 Flutter 场景转换为 HTML、CSS 或 Canvas,并以 HTML 元素树的形式在页面上渲染为一帧。虽然 HTML 渲染器能够最大限度地兼容各种浏览器,且其代码体积较小,但 HTML 渲染器的重绘性能不太适合 Rive (使用 Flutter 构建而成,用于创建动态图像的协作工具) 这种图形密集型应用。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/3b7b18f434f16.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/3b7b18f434f16.png) > △ [Rive](https://rive.app/) 是一款创建自定义动画的工具,该团队已使用 web 版 Flutter 重新构建应用,并发布了测试版 为了提供高效渲染密集图形所需的保真度,我们开始尝试使用 [CanvasKit](https://skia.org/user/modules/canvaskit),它可使用 [WebAssembly](https://webassembly.org/) 和 [WebGL](https://www.khronos.org/webgl/) 通过 Skia 绘制命令在浏览器中进行渲染。我们发现 CanvasKit 渲染器的性能、保真度和准确度都更加理想,请看 Flutter 社区中才华横溢的德国开发者 [Felix Blaschke](https://github.com/felixblaschke) 的 [Flutter Plasma](https://flutterplasma.dev/) 演示——用 CanvasKit 创造的惊艳特效。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/c68e7a88df8ad.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/c68e7a88df8ad.png) > △ [Flutter Plasma](https://flutterplasma.dev/) 是由 Felix Blaschke 创建的演示,可在 Safari、Firefox、Edge 和 Chrome 上运行 @@ -83,7 +83,7 @@ Flutter 框架由 [一系列层结构](https://docs.flutter.cn/resources/technic Web 有很多优势,尤其是在全球的覆盖率。将你现有的 Flutter 应用带到 web 上的原因之一就是接触应用商店以外的用户。为了做到这一点,我们添加了 [自定义 URL 策略](https://docs.flutter.cn/development/ui/navigation/url-strategies),以确保你的用户只需点击 URL,就可以从任何地方访问你的应用。有了这个功能,你就可以控制地址栏中显示的 URL,以及你的应用在 web 上的路由。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/abd6aee377a66.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/abd6aee377a66.png) > △ Flutter Plasma 演示的 Showroom 页面,实际上就是一个基于 Flutter 自定义 URL 策略的 [url_strategy](https://pub.flutter-io.cn/packages/url_strategy) 插件示例 @@ -95,7 +95,7 @@ Web 有很多优势,尤其是在全球的覆盖率。将你现有的 Flutter Flutter 2 特别适合实现渐进式 web 应用 (PWA)。我们建议开发者使用 PWA,通过 Chrome 的 [Project Fugu](https://web.dev/fugu-status/),以安全和可信的方式,弥合移动端和 web 端应用之间的差异。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/0c26286d00f1c.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/0c26286d00f1c.png) > △ 发票管理应用 [Invoice Ninja](https://www.invoiceninja.com/) 推出的 PWA 应用与他们现有的 Flutter 移动应用使用相同的代码库 @@ -105,9 +105,9 @@ Flutter 2 特别适合实现渐进式 web 应用 (PWA)。我们建议开发者 尽管浏览器的形态大小各异,我们都希望提供美好的 Flutter web 体验。由于 Flutter 最初是为移动应用设计而成,因此 Flutter web 应用已经对移动浏览器的手势和滚动物理效果提供了很好的支持。但桌面浏览器 UI 的呈现和使用有所不同,所以我们对 Flutter 进行了相应的更新。 -比如,用户希望应用在桌面浏览器中运行时能够显示滚动条,以便通过鼠标或键盘进行控制。我们为桌面设备添加了 [可自定义的交互式滚动条]({{site.flutter-files-cn}}/flutter-design-docs/Updating_Scrollbars_(PUBLICLY_SHARED).docx),这意味着我们可为滚动条使用 [主题](https://api.flutter.cn/flutter/material/ScrollbarTheme-class.html),显示滚动条轨道,而且还可以拖动滑块。我们还扩展了 [PrimaryScrollController](https://api.flutter.cn/flutter/widgets/PrimaryScrollController-class.html),便于用户 [使用键盘快捷键进行滚动]({{site.flutter-files-cn}}/flutter-design-docs/Fallback_ScrollAction_(PUBLICLY_SHARED).docx),也省去了你使用自定义滚动视图的工作。 +比如,用户希望应用在桌面浏览器中运行时能够显示滚动条,以便通过鼠标或键盘进行控制。我们为桌面设备添加了 [可自定义的交互式滚动条]({{site.flutter-files-cn}}flutter-design-docs/Updating_Scrollbars_(PUBLICLY_SHARED).docx),这意味着我们可为滚动条使用 [主题](https://api.flutter.cn/flutter/material/ScrollbarTheme-class.html),显示滚动条轨道,而且还可以拖动滑块。我们还扩展了 [PrimaryScrollController](https://api.flutter.cn/flutter/widgets/PrimaryScrollController-class.html),便于用户 [使用键盘快捷键进行滚动]({{site.flutter-files-cn}}flutter-design-docs/Fallback_ScrollAction_(PUBLICLY_SHARED).docx),也省去了你使用自定义滚动视图的工作。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/72812bd5afb8b.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/03/72812bd5afb8b.jpg) > △ [Spica Technologies](https://spicatech.co.uk/) 为 [Zurich Insurance](https://www.zurich.com/) 构建的物业管理解决方案,这是用 Flutter web 为商务和桌面设备用户构建应用的杰出示例 @@ -136,7 +136,7 @@ Flutter 2 特别适合实现渐进式 web 应用 (PWA)。我们建议开发者 这个版本的相当一部分内容来自早期 web 用户的反馈信息和社区提交的 issue,这里我们要再次感谢大家的贡献!今后,我们的首要目标是快速处理大家的反馈,并及时解决 issue,以便大家专注于在所有目标平台上发布高质量的 Flutter 应用。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/7e72a89aa6bc5.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/7e72a89aa6bc5.png) > △ [Moi Mobiili](https://www.moi.fi/) 是一家现代移动虚拟网络运营商,最近使用 Flutter 推出了他们的 web 应用 @@ -149,7 +149,7 @@ Flutter 2 特别适合实现渐进式 web 应用 (PWA)。我们建议开发者 * 文本渲染和功能,比如对样式设置较为复杂的文本的选取,仍是我们要继续努力解决的功能之一。 * 我们也会继续努力改善插件生态系统,让 Google 发布的 package 在移动端和 web 端更加统一。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/be293ff0f6829.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/be293ff0f6829.png) > △ [Simplebet](https://simplebet.io/) 通过 Flutter 的 web 支持,在 Fanduel 现有的移动应用套件中构建了高度互动的嵌入式 NFL 和 NBA 投注体验 diff --git a/src/content/posts/google-2022-soas-5.md b/src/content/posts/google-2022-soas-5.md index b5f6facc11..a3617018fb 100644 --- a/src/content/posts/google-2022-soas-5.md +++ b/src/content/posts/google-2022-soas-5.md @@ -11,11 +11,11 @@ Google 谷歌发布的《2021 移动应用全球化指南》报告中提到, 根据 App Annie (data.ai) 发布的报告,过去 10 年,**中国开发者** 在全球应用下载市场份额 **增长了将近一倍**。根据 Statista 的发布统计报告,2021 年,全球应用下载数量 **超过 2300 亿次**,2015 - 2022 年中国手游海外市场收入逐年攀升,2022 年将达到 **798.4 亿元人民币**。 -![]({{site.flutter-files-cn}}/images/branding/soa/soa-s5-hero.gif) +![]({{site.flutter-files-cn}}images/branding/soa/soa-s5-hero.gif) 面向这样广阔的市场前景,到海外市场寻找自己的潜在客户群体成为很多开发者们的选择,Google 为国内的中小型手游和应用公司推出了 **Google 应用出海指南针** 计划,每一期内容均围绕 **开发、增长、营利** 为开发者带来干货满满的分享,今年举办的「应用出海指南针」第五期,为期两个月、每月为一个阶段,通过直播的方式在线上举办,现已 **开启报名通道**: -![也可以 [点击这里](https://flutter.cn/urls/soa-s5),或者扫描上方二维码报名参加]({{site.flutter-files-cn}}/posts/images/2022/05/a79e67ef54841.jpg) +![也可以 [点击这里](https://flutter.cn/urls/soa-s5),或者扫描上方二维码报名参加]({{site.flutter-files-cn}}posts/images/2022/05/a79e67ef54841.jpg) △ 可以 [点击这里](https://flutter.cn/urls/soa-s5),或者扫描上方二维码报名参加 @@ -27,7 +27,7 @@ Google 谷歌发布的《2021 移动应用全球化指南》报告中提到, ## 活动时间安排 -![]({{site.flutter-files-cn}}/images/branding/soa/soa-s5-event-timeline.png) +![]({{site.flutter-files-cn}}images/branding/soa/soa-s5-event-timeline.png) 本期应用出海指南针活动离报名截止时间 (6月5日) 只剩下 **不到两周的时间** 了,请各位感兴趣的开发者们抓紧时间报名。本期活动为期两个月,每个月为一个阶段,分别是入门周和进阶周阶段,每天直播时间是 14:00 - 16:30,详细安排如下: @@ -61,4 +61,4 @@ Google AdMob 团队和你共同探索市场新机会点,了解新赛道、新 ## 完整活动海报 -![]({{site.flutter-files-cn}}/images/branding/soa/soa-s5-flyer.png) +![]({{site.flutter-files-cn}}images/branding/soa/soa-s5-flyer.png) diff --git a/src/content/posts/google-i-o-2021-flutter-workshops.md b/src/content/posts/google-i-o-2021-flutter-workshops.md index 524968bc0f..38b56f2743 100644 --- a/src/content/posts/google-i-o-2021-flutter-workshops.md +++ b/src/content/posts/google-i-o-2021-flutter-workshops.md @@ -3,7 +3,7 @@ title: 实战合集 — I/O 2021 Flutter 研讨会 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/06/mjy4VZ.jpeg) +![]({{site.flutter-files-cn}}posts/images/2021/06/mjy4VZ.jpeg) 2021 年的 Google I/O 大会已圆满闭幕,本次大会带来了诸多关于各项谷歌开发技术产品的最新更新。在此次 I/O,[Flutter 发布了 2.2 版本](https://flutter.cn/posts/announcing-flutter-2-2?t=1),包括 Web 版的增强、更多 Material 图标、改进了的文本处理方式以及对 Windows UWP 的支持发布了 alpha 版本 [等](https://flutter.cn/posts/whats-new-in-flutter-2-2?t=1);Dart 也更新到了 [2.13 正式版](https://flutter.cn/posts/announcing-dart-2-13),推出了空安全的更新、类型别名、Dart FFI 以及性能的提升和云计算平台的支持等。 diff --git a/src/content/posts/google-io-2021-flutter-recap.md b/src/content/posts/google-io-2021-flutter-recap.md index 988253dffa..75d43d2da2 100644 --- a/src/content/posts/google-io-2021-flutter-recap.md +++ b/src/content/posts/google-io-2021-flutter-recap.md @@ -3,7 +3,7 @@ title: Flutter 不容错过的 7 大亮点 — Google I/O 精彩回顾 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/06/LbD38J.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/06/LbD38J.jpg) Flutter 在今年的 Google I/O 上发布了许多重磅更新,欢迎大家和我们一起了解其中不容错过的 7 大亮点: diff --git a/src/content/posts/how-its-made-i-o-photo-booth.md b/src/content/posts/how-its-made-i-o-photo-booth.md index 2ecc6c5dc6..4f2a7713cb 100644 --- a/src/content/posts/how-its-made-i-o-photo-booth.md +++ b/src/content/posts/how-its-made-i-o-photo-booth.md @@ -3,13 +3,13 @@ title: 用 Flutter 和 Firebase 轻松构建 Web 应用 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/11/da90dd75700e2.png) +![]({{site.flutter-files-cn}}posts/images/2021/11/da90dd75700e2.png) *作者 / Very Good Ventures Team* 我们 (Very Good Ventures 团队) 与 Google 合作,在今年 5 月推出了 [照相亭互动体验](https://photobooth.flutter.cn/) (Flutter Photo Booth)。你可以与深受喜爱的 Google 吉祥物合影: [Flutter 的 Dash](https://flutter.cn/dash)、Android Jetpack、Chrome 的 Dino 和 Firebase 的 Sparky,并用各种贴纸装饰照片,包括派对帽、披萨、时髦眼镜等。当然,你也可以通过社交媒体下载并分享,或者用作你的个人头像! -![△ Flutter 的 Dash、Firebase 的 Sparky、Android Jetpack 和 Chrome 的 Dino]({{site.flutter-files-cn}}/posts/images/2021/06/Rjow8V.png) +![△ Flutter 的 Dash、Firebase 的 Sparky、Android Jetpack 和 Chrome 的 Dino]({{site.flutter-files-cn}}posts/images/2021/06/Rjow8V.png) △ Flutter 的 Dash、Firebase 的 Sparky、Android Jetpack 和 Chrome 的 Dino @@ -76,11 +76,11 @@ Camera( 在 Flutter 团队的帮助下,我们将 VideoElement 放在 [DivElement](https://api.flutter.cn/flutter/dart-html/DivElement-class.html) 中,并更新 VideoElement 以填充 DivElement 的宽度和高度,解决了这个问题。这样一来,我们能够为视频元素应用镜像,同时因为父元素是 div,所以不会被 Flutter 覆盖翻转效果。如此一来,我们便获得了所需的镜像摄像头视图! -![△ 未镜像的视图]({{site.flutter-files-cn}}/posts/images/2021/06/rPthpJ.png) +![△ 未镜像的视图]({{site.flutter-files-cn}}posts/images/2021/06/rPthpJ.png) △ 未镜像的视图 -![△ 镜像视图]({{site.flutter-files-cn}}/posts/images/2021/06/CRBd2x.png) +![△ 镜像视图]({{site.flutter-files-cn}}posts/images/2021/06/CRBd2x.png) △ 镜像视图 @@ -149,7 +149,7 @@ Transform( 最后,我们创建了单独的 package 来确定你的设备是否支持触摸输入。可拖动、可调整大小的 widget 会根据触摸功能做出相应的调整。在具有触摸输入功能的设备上,你并不能看到调整大小的锚点和旋转图标,因为你可以通过双指张合和平移手势来直接操纵图像;而在不支持触摸输入的设备 (例如你的桌面设备) 上,我们则添加了锚点和旋转图标,以适应单击和拖动操作。 -![]({{site.flutter-files-cn}}/posts/images/2021/06/XfyErj.png) +![]({{site.flutter-files-cn}}posts/images/2021/06/XfyErj.png) ## **针对 Web 优化 Flutter** @@ -206,7 +206,7 @@ function renderSharePage(imageFileName: string, baseUrl: string): string { 成品如下所示: -![]({{site.flutter-files-cn}}/posts/images/2021/06/6TLvkS.png) +![]({{site.flutter-files-cn}}posts/images/2021/06/6TLvkS.png) 有关如何在 Flutter 项目中使用 Firebase 的更多信息,请查看 [此 Codelab](https://firebase.google.cn/codelabs/firebase-get-to-know-flutter#0)。 @@ -214,7 +214,7 @@ function renderSharePage(imageFileName: string, baseUrl: string): string { 本项目详细地示范了如何针对 Web 来构建应用的方法。令我们感到惊喜的是,与使用 Flutter 构建移动应用的体验相比,这个 Web 应用的构建工作流与之非常相似。我们必须考虑窗口大小、自适应、触摸与鼠标输入、图像加载时间、浏览器兼容性等元素,以及在构建 Web 应用时所必需考虑的其他所有因素。但是,我们仍然可以使用相同的模式、架构和编码标准来编写 Flutter 代码,这让我们在构建 Web 应用时感到非常自在。Flutter package 提供的工具和不断发展的生态系统,包括 Firebase 工具套件,帮助我们实现了 Flutter 照相亭。 -![△ 打造 Flutter 照相亭的 Very Good Ventures 团队]({{site.flutter-files-cn}}/posts/images/2021/11/0219cca9b22ab.png) +![△ 打造 Flutter 照相亭的 Very Good Ventures 团队]({{site.flutter-files-cn}}posts/images/2021/11/0219cca9b22ab.png) △ 打造 Flutter 照相亭的 Very Good Ventures 团队 diff --git a/src/content/posts/i-o-pinball.md b/src/content/posts/i-o-pinball.md index 424cc4408a..a9f233232e 100644 --- a/src/content/posts/i-o-pinball.md +++ b/src/content/posts/i-o-pinball.md @@ -9,7 +9,7 @@ image: *文/ Very Good Ventures 团队,5 月 11 日发表于 Flutter 官方博客* -![]({{site.flutter-files-cn}}/events/gdd2022/pinball/pinball_share_image.png) +![]({{site.flutter-files-cn}}events/gdd2022/pinball/pinball_share_image.png) Flutter 团队使用 Flutter 以及 Firebase 构建了一款经典的弹球游戏。 下面将会介绍我们是如何通过 Flame 游戏引擎将 [Flutter 弹球游戏](https://pinball.flutter.cn/ "Flutter 弹球游戏主页") 带到 Web 端的。 @@ -23,7 +23,7 @@ Flutter 弹球游戏使用了 Flame 提供的一系列特性,例如动画、 同时还借助了 Flutter 框架的基础架构。 如果你能用 Flutter 构建应用,你就获得 Flame 构建游戏所需的基础。 -![]({{site.flutter-files-cn}}/posts/images/2022/05/8Qcwcy.jpg) +![]({{site.flutter-files-cn}}posts/images/2022/05/8Qcwcy.jpg) ## 游戏循环 @@ -53,7 +53,7 @@ void update(double dt) { 组件需要知道在屏幕上渲染的前后顺序。 例如,当小球发射到斜坡上时,它的顺序会向前,这样就会让它看起来出现在斜坡的顶部。 -![]({{site.flutter-files-cn}}/posts/images/2022/05/Ko46wg.jpg) +![]({{site.flutter-files-cn}}posts/images/2022/05/Ko46wg.jpg) 弹球、弹射活塞、挡板以及 Chrome 小恐龙等等这些元素都是可活动的,这意味着它应该遵循真实世界的物理规则。 而且弹球也需要根据它在板子上的位置改变其大小。当弹球滚到顶部时, @@ -118,7 +118,7 @@ Body createBody() { 使用这些数据,Flame 中的 `SpriteAnimationComponent` 能够在一个循环中将所有图像编在一起, 使元素看起来在运动。 -![△ Sprite sheet 示例]({{site.flutter-files-cn}}/posts/images/2022/05/sMkc3K.jpg) +![△ Sprite sheet 示例]({{site.flutter-files-cn}}posts/images/2022/05/sMkc3K.jpg) △ Sprite sheet 示例 @@ -152,7 +152,7 @@ Flutter 弹球排行榜实时地显示世界各地玩家的最高分数。 我们使用 Firebase [Cloud Firestore](https://firebase.google.cn/docs/firestore "Firebase Cloud Firestore 文档") 记录排名前十的分数,将其显示在排行榜上。 当一个新的分数计入排行榜时,一个 [Cloud Function](https://firebase.google.cn/docs/functions "Firebase Cloud Function 文档") 会将分数按降序排列并删除目前不在前十的分数。 -![]({{site.flutter-files-cn}}/posts/images/2022/05/PTfsgf.png) +![]({{site.flutter-files-cn}}posts/images/2022/05/PTfsgf.png) ```dart /// Acquires top 10 [LeaderboardEntryData]s. @@ -190,7 +190,7 @@ Flutter 弹球游戏也适配了移动和桌面浏览器。 弹球游戏的主题取决于玩家在游戏开始前选择的角色。主题是由 `CharacterThemeCubit` 类控制的。 根据角色的选择,球的颜色、背景和其他元素都会更新。 -![]({{site.flutter-files-cn}}/posts/images/2022/05/BPnkOM.png) +![]({{site.flutter-files-cn}}posts/images/2022/05/BPnkOM.png) ```dart /// {@template character_theme} diff --git a/src/content/posts/introducing-flutter-3.md b/src/content/posts/introducing-flutter-3.md index 0cab698f84..25fa2da92a 100644 --- a/src/content/posts/introducing-flutter-3.md +++ b/src/content/posts/introducing-flutter-3.md @@ -7,7 +7,7 @@ image: path: https://files.flutter-io.cn/posts/flutter-cn/2022/introducing-flutter-3/flutter3_hero.png --- -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/introducing-flutter-3/flutter3_hero.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/introducing-flutter-3/flutter3_hero.png) _作者 / Tim Sneath, Google Flutter 和 Dart 产品组产品经理_ @@ -17,7 +17,7 @@ Flutter 3 实现了 Flutter 以移动端为中心扩展到多平台的产品规 创建 Flutter 的初衷是为了彻底改变应用开发:将 「Web 应用的迭代开发模式」与「硬件加速的图形渲染」和「像素级的控制」三者结合——之前只有游戏才能这么做。自 Flutter 1.0 Beta 版发布以来的四年里,我们逐渐在这些基础上发展,增加了新的框架功能和新的 widget,与底层平台进行了更深入的整合,还加入了丰富的 package 库,此外还进行了许多性能和工具等方面的改进。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/introducing-flutter-3/flutter-milestones.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/introducing-flutter-3/flutter-milestones.png) 随着 Flutter 逐渐产品走向成熟,越来越多的人开始用它来构建应用。今天,有超过 50 万个应用使用 Flutter 发布。来自 data.ai 等研究公司的分析以及公众的评价都可以表明,Flutter 正被许多细分领域的客户所使用。其使用场景非常广泛,从微信 (WeChat) 等社交应用,到 Betterment 和 Nubank 等金融和银行类应用,再到 SHEIN 和 trip.com 等商旅应用以及 Fastic、[Tabcorp](https://auspreneur.com.au/tabcorp-adopts-googles-flutter-platform/ "Tabcorp 使用 Google Flutter 平台进行构建") 等生活方式类的应用,还有 [My BMW](https://www.press.bmwgroup.com/global/article/detail/T0328610EN/the-my-bmw-app:-new-features-and-tech-insights-for-march-2021 "My BMW 应用: 2021 年 3 月的新特性更新和技术说明") 此类的硬件连接类应用,最后是巴西政府等公共机构的官方应用等等,都有 Flutter 在大放异彩。 @@ -49,7 +49,7 @@ Flutter 3 还对许多基本要素进行了改进,提高了性能,强化了 在这个版本中,我们对 [Material Design 3](https://m3.material-io.cn "Material Design 3 主页") 所做的支持工作已基本完成。开发者们现在可以尽情使用这套自适应性强、跨平台的设计系统,包括其动态颜色方案和经过更新的视觉组件。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/introducing-flutter-3/m3-support.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/introducing-flutter-3/m3-support.png) 我们也将在近期发布更详细的技术文章,并在其中更多介绍这部分内容,以及 Flutter 3 的许多其他新功能。 @@ -69,11 +69,11 @@ Firebase 是由 Google 提供的应用服务平台。[SlashData 的开发者基 对于大多数开发者来说,Flutter 是一个应用框架。但是,利用 Flutter 提供的硬件图形加速支持和 Flame 等开源游戏引擎,围绕休闲游戏开发而建立的社区也在不断壮大。我们希望让休闲游戏开发者更容易上手,所以在今天的 I/O 大会上,我们发布了 [Flutter 休闲游戏工具包](https://flutter.dev/games "Flutter 休闲游戏工具包") \(Casual Game Toolkit\),它提供了模板、最佳实践入门套件,还为你准备了可用于广告和云服务的赞助额度。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/introducing-flutter-3/announcing-flutter-casual-game-toolkit.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/introducing-flutter-3/announcing-flutter-casual-game-toolkit.png) 虽然 Flutter 并不是为高强度的 3D 动作游戏而设计的,但如今,一部分这类游戏在独立于游戏场景之外的用户界面部分也开始使用 Flutter 来实现,包括 PUBG Mobile 这样拥有数亿用户的流行游戏。在 I/O 大会上,我们想看看我们能把技术推进到什么程度,所以我们创建了一个有趣的弹球游戏,它使用到了 Firebase 和 Flutter 的 web 端支持。I/O Pinball 弹球游戏提供了一个定制桌面,围绕着 Google 最受欢迎的四个吉祥物进行设计,它们分别是: Flutter 的 Dash、Firebase 的 Sparky、Android 机器人和 Chrome 恐龙,你可以在这个游戏中与他人一较高下。我们希望通过这种有趣方式展示 Flutter 的多功能性。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/introducing-flutter-3/io-pinball.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/introducing-flutter-3/io-pinball.png) ## Flutter: 由 Google 支持,由社区驱动 diff --git a/src/content/posts/launching-flutter-12-at-mobile-world.md b/src/content/posts/launching-flutter-12-at-mobile-world.md index f81adcb279..6c9b510e0f 100644 --- a/src/content/posts/launching-flutter-12-at-mobile-world.md +++ b/src/content/posts/launching-flutter-12-at-mobile-world.md @@ -9,7 +9,7 @@ toc: true 其实,这个大会对 Flutter 有着特别的纪念意义,因为 Flutter 的首个 beta 测试版正是在去年的 MWC 大会上与大家见面的,自此以后,Flutter 的发展速度远[超我们的想象](http://sotagtrends.com/?tags=[ionic-framework,react-native,flutter,xamarin]&relative=false)。 如今我们再次聚首 MWC 大会,发布 Flutter 稳定版本的首个更新,以此庆祝 Flutter 诞生一周年。 -![announced-12-at-mwc19]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot2-release/announced-12-at-mwc19.png){:width="85%"} +![announced-12-at-mwc19]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot2-release/announced-12-at-mwc19.png){:width="85%"} ## Flutter 1.2 @@ -52,7 +52,7 @@ Android App Bundles 是一种新的封装格式,它能有效减小应用的体 - 源代码级调试器: 支持单步执行代码,设置断点并检查调用堆栈; - 日志记录视图: 显示应用所记录的活动以及网络、框架和垃圾回收等事件。 -![flutter-devtools-preview]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot2-release/flutter-devtools-preview.png){:width="85%"} +![flutter-devtools-preview]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot2-release/flutter-devtools-preview.png){:width="85%"} 为了给 Flutter 和 Dart 开发者创造更好的开发体验,我们将进一步加大对基于 web 的调试工具的投入。此外,随着 web 集成技术的不断发展,我们还计划将这些服务直接添加到 Visual Studio Code 等工具中。 @@ -66,7 +66,7 @@ Android App Bundles 是一种新的封装格式,它能有效减小应用的体 [Flutter Create 挑战赛](https://medium.com/flutter/the-flutter-create-winners-are-40980f2d20b3)将从本周起开始接收报名,你敢来参加吗?参赛者需要利用 Flutter 构建充满创意和趣味的精美应用,并把这一切全部浓缩到 5K 的 Dart 代码里。5K 并不多,按照普通 MP3 格式的标准来算,差不多相当于三分之一秒的音乐。但我们敢说,有了 Flutter 的帮助,即使是使用如此少量的代码,你也能制作出令人大开眼界的应用。 -![flutter-create-contest]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot2-release/flutter-create-contest-heroimg.png){:width="85%"} +![flutter-create-contest]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot2-release/flutter-create-contest-heroimg.png){:width="85%"} 挑战赛将于 4 月 7 日结束,因此你将有几周的时间来构建出色应用。我们准备了一些很棒的奖品,其中包括一台搭载 14 核处理器和 128GB 内存的[顶配版 iMac Pro 工作站](https://www.apple.com/imac-pro/specs/),价值超过 10,000 美元!我们将在 [Google I/O 大会](https://events.google.com/io/)上宣布获胜者名单,并且还会在此期间开展多个 Flutter 演讲、Codelab 课程和活动,敬请期待! @@ -74,7 +74,7 @@ Android App Bundles 是一种新的封装格式,它能有效减小应用的体 Flutter 现已进入 Github Top 20 软件库,与此同时,Flutter 全球社区也在以惊人的速度蓬勃发展,为世界各地的开发者正带去独特的编程乐趣——[印度清奈的开发者聚会](https://twitter.com/Nikkitagandhi/status/1099745911985467392),[尼日利亚哈科特港的报道](https://twitter.com/Zfinix1/status/1079892033060392962),[丹麦哥本哈根的应用](https://twitter.com/koorankka/status/1098579826355642368),以及[美国纽约的孵化工作室](https://www.hotreload.io/) —— 从中我们可以清楚地看到 Flutter 正在成为一种全球现象,而这一切都离不开你的贡献!Flutter 作为移动开发领域一股不容小觑的新生力量,不仅为开发者赢得了[亿万用户](https://play.google.com/store/apps/details?id=com.alibaba.intl.android.apps.poseidon),还[帮助创业者把理念推向市场](https://play.google.com/store/apps/details?id=com.kissaan.gomitra)。我们非常高兴看到你拥有如此多的创意,也希望能够帮助你使用 Flutter 来呈现这些创意。 -![flutter-deep-dive-srmu]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot2-release/flutter-deep-dive-srmu.jpg){:width="85%"} +![flutter-deep-dive-srmu]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot2-release/flutter-deep-dive-srmu.jpg){:width="85%"} *在印度 SRM 大学参加 Flutter 高级研讨会的与会者* @@ -82,4 +82,4 @@ Flutter 现已进入 Github Top 20 软件库,与此同时,Flutter 全球社 这个频道包含了大家非常喜爱的一些视频合集如 [Boring Flutter Development Show](https://www.youtube.com/playlist?list=PLjxrf2q8roU3ahJVrSgAnPjzkpGmL9Czl)、[Widget of the Week](https://www.youtube.com/playlist?list=PLjxrf2q8roU23XGwz3Km7sQZFTdB996iG) 和 [Flutter in Focus](https://www.youtube.com/playlist?list=PLjxrf2q8roU2HdJQDjJzOeO6J3FoFLWr2), 同时也欢迎前来学习 [Dream11 是如何使用 Flutter 的](https://youtu.be/lCeRZhoqEP8) ,以及 [其他的开发者故事](https://www.youtube.com/playlist?list=PLjxrf2q8roU33POuWi4bK0zvDpAHK6759)等。 -![welcome-to-flutter-yt-channel]({{site.flutter-files-cn}}/posts/flutter-cn/2019/flutter-1dot2-release/welcome-to-flutter-yt-channel.png){:width="85%"} +![welcome-to-flutter-yt-channel]({{site.flutter-files-cn}}posts/flutter-cn/2019/flutter-1dot2-release/welcome-to-flutter-yt-channel.png){:width="85%"} diff --git a/src/content/posts/partnering-with-github-on-an-supply-chain-security.md b/src/content/posts/partnering-with-github-on-an-supply-chain-security.md index bf867b0eee..8569a7bea8 100644 --- a/src/content/posts/partnering-with-github-on-an-supply-chain-security.md +++ b/src/content/posts/partnering-with-github-on-an-supply-chain-security.md @@ -17,9 +17,9 @@ image: Dart 产品经理 Michael Thomsen 表示:通过与 GitHub 团队的合作,Dart 开发者们可以在新的漏洞影响到客户之前发现和解决问题;GitHub 的高级产品经理 Courtney Claessens 也提到说,在供应链安全侧全面支持 Dart,不仅是对开源社区、开发者的支持,更能够帮助数百万使用 Dart 应用的用户们。 -![Dependabot 会检测 package 的更新并创建拉取请求以请求更新到最新版本]({{site.flutter-files-cn}}/posts/images/2022/10/18646812c0ce1.jpg) +![Dependabot 会检测 package 的更新并创建拉取请求以请求更新到最新版本]({{site.flutter-files-cn}}posts/images/2022/10/18646812c0ce1.jpg) -![Dependency Graph (依赖项关系图) 会展示出项目所依赖的其他 package]({{site.flutter-files-cn}}/posts/images/2022/10/813aca34d90a0.jpg) +![Dependency Graph (依赖项关系图) 会展示出项目所依赖的其他 package]({{site.flutter-files-cn}}posts/images/2022/10/813aca34d90a0.jpg) ## 发布 package 到 pub.dev 的安全最佳实践 @@ -27,7 +27,7 @@ Dart 产品经理 Michael Thomsen 表示:通过与 GitHub 团队的合作,Da 1. 使用 GitHub 的安全公告功能在你的代码仓库中创建新的安全公告,GitHub 会将这个纳入其 Advisory Database (安全咨询数据库) 中。 1. 为你的 GitHub 代码仓库配置安全策略,详细说明用户可以用什么样的方式报告安全问题。 -![为发布到 pub.dev 上的 package 创建安全公告 (Ecosystem 选择 Pub)]({{site.flutter-files-cn}}/posts/images/2022/10/ebd6c66d2ea67.jpg) +![为发布到 pub.dev 上的 package 创建安全公告 (Ecosystem 选择 Pub)]({{site.flutter-files-cn}}posts/images/2022/10/ebd6c66d2ea67.jpg) 上述提到的这些安全策略和功能均已面向所有用户发布 (私有仓库也只需要加入一点的额外配置),快去试试吧,保护自己的代码安全,刻不容缓。 diff --git a/src/content/posts/pub-beta-support-for-dependabot-version-updates.md b/src/content/posts/pub-beta-support-for-dependabot-version-updates.md index 3357624085..8a17943459 100644 --- a/src/content/posts/pub-beta-support-for-dependabot-version-updates.md +++ b/src/content/posts/pub-beta-support-for-dependabot-version-updates.md @@ -3,7 +3,7 @@ title: Dependabot 开始支持 pub package 版本检测 toc: true --- -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/pub-beta-support-for-dependabot-version-updates/pub-dependabot-hero.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/pub-beta-support-for-dependabot-version-updates/pub-dependabot-hero.png) 今年年初,我们发布了 [Flutter 2022 产品路线图](https://flutter.cn/posts/flutter-2022-roadmap),其中「基础设施建设」这部分提到:2022 年 Flutter 团队将增加对供应链的安全的投入,目的是达到符合基础设施 SLSA 4 级别中描述的要求。 diff --git a/src/content/posts/racing-forward-at-i-o-2023-with-flutter-and-dart.md b/src/content/posts/racing-forward-at-i-o-2023-with-flutter-and-dart.md index f4c37f370b..88ec57491e 100644 --- a/src/content/posts/racing-forward-at-i-o-2023-with-flutter-and-dart.md +++ b/src/content/posts/racing-forward-at-i-o-2023-with-flutter-and-dart.md @@ -3,7 +3,7 @@ title: 在 I/O 看未来 | Flutter 和 Dart 最新进展 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2023/07/21/Adqvxc.png) +![]({{site.flutter-files-cn}}posts/images/2023/07/21/Adqvxc.png) *作者 / Google 开发者框架和语言 (含 Flutter、Dart 和 Go) 产品经理/用户体验总监 Tim Sneath* @@ -11,7 +11,7 @@ toc: true 就在三个多月前,我们在肯尼亚内罗毕举行的 [Flutter Forward 大会](https://flutter.cn/posts/flutter-forward-2023-recap) 上为 Flutter 和 Dart 推出了一个大胆的新路线图。在此次 I/O 大会上,我们将通过介绍四个主题领域的最新动态,来分享我们在实现这一愿景方面取得的进展,这四个主题分别为: 突破性的图形性能、与 Web 应用和平台的无缝集成、对新兴架构的支持,以及对开发者体验的关注。 -![]({{site.flutter-files-cn}}/posts/images/2023/07/21/04KBGl.png) +![]({{site.flutter-files-cn}}posts/images/2023/07/21/04KBGl.png) 你可能已经了解到,Flutter 是一个界面工具包,它让应用开发者只需编写一套代码,即可构建移动应用、Web 应用、桌面应用和嵌入式设备应用。你可以使用 Flutter 构建精致**美观**的应用,完全掌控屏幕上的每一个像素。Flutter 具有如下独特优势: @@ -36,7 +36,7 @@ toc: true 通过在 Flutter 中重写 Google 课堂,我们提升了 Google 课堂的性能。该应用的新版本比旧版本的冷启动时间更短,你可以观看下面这则对比视频了解详情: - + 我们正在持续投入资源开发 package,以便将你的 Flutter 应用运用到 Google 开发者生态系统的其他方面。这包括对原生广告的 [Google Ads 支持](https://medium.com/flutter/2023-google-mobile-ads-updates-for-flutter-16b603df9ec9) 进行了重大更新;[新增了 Firebase 对 Windows 平台的支持,并改善了 Firebase 对 Web 的支持](https://github.com/firebase/flutterfire);同时还新增了对 [更深入的 Android 互操作性](https://io.google/2023/program/2f02692d-9a41-49c0-8786-1a22b7155628/) 的实验性支持。 @@ -112,6 +112,6 @@ Dart 3 引入了许多其他新功能,包括记录、模式和类修饰符, Flutter 不只是一个 *Google* 项目,而是一个*全员参与*的项目。我们非常感谢社区的多样性和热情参与,让 Flutter 蜕变至此。很高兴能与你一起完成这一使命,Flutter 将迈向更加光明的未来! - + Betterment 开发者故事: 使用 Flutter 规模化构建理财应用 diff --git a/src/content/posts/seamless-multi-platform-app-development-with-flutter.md b/src/content/posts/seamless-multi-platform-app-development-with-flutter.md index 600aad509a..9672e06ccc 100644 --- a/src/content/posts/seamless-multi-platform-app-development-with-flutter.md +++ b/src/content/posts/seamless-multi-platform-app-development-with-flutter.md @@ -3,7 +3,7 @@ title: 借助 Flutter 顺畅地开发多平台应用 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/04/VdWBeY.png) +![]({{site.flutter-files-cn}}posts/images/2021/04/VdWBeY.png) Flutter 已于近期发布了 [Flutter 2](https://flutter.cn/posts/announcing-flutter-2),Flutter 和 Dart 的产品总监 Tim Sneath 在 2021 年三月上旬举办的 [Flutter Engage](https://flutter.cn/posts/flutter-engage-event-recap) 活动中表示,Flutter 致力于成为多平台 UI 工具包,为了 "彻底改变开发者眼中的应用构建方式,让他们从期望打造的体验来入手进行开发,而无需优先考虑目标平台"。 @@ -21,13 +21,13 @@ Flutter 2 可为 web 提供具有生产质量的支持,这意味着你可以 与移动应用一样,web 应用也有 2 个编译器。*dev_compiler* 适用于开发阶段,而 *dart2js* 则适用于部署阶段。将开发和部署阶段的编译器分开,一方面可优化开发周期生产力,另一方面则可优化正式应用的性能,使其快速运行。Flutter 支持以原生机器代码编译应用,这意味着你在发布已完工的应用时,无需再在虚拟机或 JavaScript 解释器中完成这步操作。 -![]({{site.flutter-files-cn}}/posts/images/2021/04/SjbcQq.png) +![]({{site.flutter-files-cn}}posts/images/2021/04/SjbcQq.png) Flutter 的 *dev_compiler* 具有与 JIT 编译相同的智能功能。因此,该命令只会重新编译受变动影响的代码,并堆积增量,从而确保开发循环快速进行。但是,与移动端支持热重载 (记住应用的状态) 不同,在 web 应用中,你需要手动启动热重载,并重建应用状态。 就像与以 Flutter 构建的移动应用一样,插件的存在使得应用能够与平台的原生库通信。许多 pub.dev 中现有的 Flutter 插件都已支持 web 应用。在 web 端运行 Flutter 应用时,你可以通过这些插件访问 JavaScript 库。如需查看某一插件是否受支持,只需前往 pub.dev 并搜索该插件即可。插件下方的标签会显示该插件所支持的平台。 -![]({{site.flutter-files-cn}}/posts/images/2021/04/4OS8ol.png) +![]({{site.flutter-files-cn}}posts/images/2021/04/4OS8ol.png) > 资料来源: [pub.flutter-io.cn/packages?q=url_launcher](https://pub.flutter-io.cn/packages?q=url_launcher) @@ -54,7 +54,7 @@ Flutter 的 *dev_compiler* 具有与 JIT 编译相同的智能功能。因此, 有了 [Flutter 2](https://flutter.cn/posts/whats-new-in-flutter-2-0),所有 Flutter widgets 均将支持可折叠设备。例如,在你使用对话框时,应用能感知到其位于折叠设备上,将内容显示在右边或左边的窗格中。 -![]({{site.flutter-files-cn}}/posts/images/2021/04/7msNxm.png) +![]({{site.flutter-files-cn}}posts/images/2021/04/7msNxm.png) 你也可以使用全新的双窗格 widget 来放置资源。借助此 widget,你可以在左侧或右侧窗格中放置资源。同时,该 widget 也能正确显示于单屏幕手机或平板类设备上。双窗格 widget 可轻松支持全新的设备类型。 diff --git a/src/content/posts/studying-developers-usage-of-ides-for-flutter-development.md b/src/content/posts/studying-developers-usage-of-ides-for-flutter-development.md index b2d9e82245..7c91efe808 100644 --- a/src/content/posts/studying-developers-usage-of-ides-for-flutter-development.md +++ b/src/content/posts/studying-developers-usage-of-ides-for-flutter-development.md @@ -15,7 +15,7 @@ Google 的 Flutter 团队负责构建和维护 Android Studio (基于 IntelliJ-I 在后文中,"Android Studio" 同时代表 "Android Studio" 和 "IntelliJ-IDEA"。 -![△ 图 1. 从 2021 年 8 月到 2022 年 7 月,使用每个 IDE 的 Flutter 开发者数量。图中可以看出 VS Code 在过去几个月中变得更受欢迎。]({{site.flutter-files-cn}}/posts/images/2022/10/3CRi1T.png) +![△ 图 1. 从 2021 年 8 月到 2022 年 7 月,使用每个 IDE 的 Flutter 开发者数量。图中可以看出 VS Code 在过去几个月中变得更受欢迎。]({{site.flutter-files-cn}}posts/images/2022/10/3CRi1T.png) △ 图 1. 从 2021 年 8 月到 2022 年 7 月,使用每个 IDE 的 Flutter 开发者数量。图中可以看出 VS Code 在过去几个月中变得更受欢迎。 @@ -27,7 +27,7 @@ Google 的 Flutter 团队负责构建和维护 Android Studio (基于 IntelliJ-I 在 2019 年第三季度,我们曾询问 Flutter 开发者为什么更喜欢他们使用最多的 IDE。最常见的回答是: 这个 IDE "我更熟悉"。 -![△ 图 2. 根据 2019 年第三季度的调研,80% 的 Android Studio 用户和 61% 的 VS Code 用户表示,他们选择 IDE 是因为对其更熟悉。]({{site.flutter-files-cn}}/posts/images/2022/10/eRDu2m.png) +![△ 图 2. 根据 2019 年第三季度的调研,80% 的 Android Studio 用户和 61% 的 VS Code 用户表示,他们选择 IDE 是因为对其更熟悉。]({{site.flutter-files-cn}}posts/images/2022/10/eRDu2m.png) △ 图 2. 根据 2019 年第三季度的调研,80% 的 Android Studio 用户和 61% 的 VS Code 用户表示,他们选择 IDE 是因为对其更熟悉。 @@ -39,7 +39,7 @@ Google 的 Flutter 团队负责构建和维护 Android Studio (基于 IntelliJ-I 我们还询问了对 Flutter 的 IDE 支持的满意度,VS Code 用户对此更为满意。(我们记录了开发者从 IDE 打开调研问卷时是在使用哪个 IDE。当开发者单击问卷链接时,我们会告知他们将对此信息进行记录。) -![△ 图 3. 有 93.3% 的 VS Code 用户对 Flutter 的 IDE 支持感到满意,只有 85.9% 的 Android Studio 用户对此感到满意。]({{site.flutter-files-cn}}/posts/images/2022/10/c3qTBb.png) +![△ 图 3. 有 93.3% 的 VS Code 用户对 Flutter 的 IDE 支持感到满意,只有 85.9% 的 Android Studio 用户对此感到满意。]({{site.flutter-files-cn}}posts/images/2022/10/c3qTBb.png) △ 图 3. 有 93.3% 的 VS Code 用户对 Flutter 的 IDE 支持感到满意,只有 85.9% 的 Android Studio 用户对此感到满意。 @@ -53,25 +53,25 @@ Google 的 Flutter 团队负责构建和维护 Android Studio (基于 IntelliJ-I 首先,有更多的 Flutter 开发者从 Android Studio 换成 VS Code。 -![△ 图 4. 更多开发者将主要 IDE 从 Android Studio (蓝色) 换成 VS Code (青色),反向改换的人则很少。]({{site.flutter-files-cn}}/posts/images/2022/10/MUECW1.png) +![△ 图 4. 更多开发者将主要 IDE 从 Android Studio (蓝色) 换成 VS Code (青色),反向改换的人则很少。]({{site.flutter-files-cn}}posts/images/2022/10/MUECW1.png) △ 图 4. 更多开发者将主要 IDE 从 Android Studio (蓝色) 换成 VS Code (青色),反向改换的人则很少。 如下图所示,转用 VS Code 的人喜欢它的性能 (82%) 和易用性 (63%)。另一方面,转用 Android Studio 的人喜欢它的功能 (51%)、与 Flutter 工具的集成 (39%) 以及与原生平台的集成 (27%)。 -![△ 图 5. 转用其他 IDE 的理由。]({{site.flutter-files-cn}}/posts/images/2022/10/QMEE8p.png) +![△ 图 5. 转用其他 IDE 的理由。]({{site.flutter-files-cn}}posts/images/2022/10/QMEE8p.png) △ 图 5. 转用其他 IDE 的理由。 仍然有大约 23% 的 Flutter 开发者同时使用 VS Code 和 Android Studio。当询问他们为什么使用多个 IDE 时,最常见的回答是,VS Code 用户需要使用 Android Studio 和 Xcode 来实现特定于原生设备的功能,例如模拟器设置、构建配置、发布需求 (例如密钥生成和签名),以及开发 Flutter + 原生混合式应用。 -![△ 图 6. 22.5% 的 Flutter 开发者同时使用 VS Code 和 Android Studio。]({{site.flutter-files-cn}}/posts/images/2022/10/p11WTQ.png) +![△ 图 6. 22.5% 的 Flutter 开发者同时使用 VS Code 和 Android Studio。]({{site.flutter-files-cn}}posts/images/2022/10/p11WTQ.png) △ 图 6. 22.5% 的 Flutter 开发者同时使用 VS Code 和 Android Studio。 我们从调研中还了解到,不同国家或地区的 Flutter 开发者偏好不同的 IDE。尽管大多数 Flutter 开发者更偏好 VS Code,但中国的开发者相较于 VSCode (23%) 还是更偏好 Android Studio (56%)。我们发现这很有趣——Flutter 在全球范围内都有被广泛采用,但又往往处于不同的开发环境中。无论你来自哪个国家或地区,如果你有任何围绕这一倾向的故事,欢迎和我们分享。 -![△ 图 7. 不同国家或地区的 IDE 使用偏好。图表中各个国家或地区至少包含 100 名受访者。]({{site.flutter-files-cn}}/posts/images/2022/10/QGB3Ob.png) +![△ 图 7. 不同国家或地区的 IDE 使用偏好。图表中各个国家或地区至少包含 100 名受访者。]({{site.flutter-files-cn}}posts/images/2022/10/QGB3Ob.png) △ 图 7. 不同国家或地区的 IDE 使用偏好。图表中各个国家或地区至少包含 100 名受访者。 diff --git a/src/content/posts/use-flutter-to-speed-up-app-dev.md b/src/content/posts/use-flutter-to-speed-up-app-dev.md index 2638547f95..95e71ff39c 100644 --- a/src/content/posts/use-flutter-to-speed-up-app-dev.md +++ b/src/content/posts/use-flutter-to-speed-up-app-dev.md @@ -3,7 +3,7 @@ title: 使用 Flutter 加速应用开发 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/04/c1e6141049825.gif) +![]({{site.flutter-files-cn}}posts/images/2021/04/c1e6141049825.gif) *作者 / Larry McKenzie* @@ -87,7 +87,7 @@ Flutter 社区也非常活跃。如果你需要 Flutter 框架尚未提供的解 对于我们这样规模的团队,如果没有选择 Flutter,就没办法完成 eBay Motors 应用的开发。它让我们能够将资源集中到一起,这是分别构建两个平台应用的模式所无法实现的。Flutter 是帮助我们加快开发进程的加速器。 -![]({{site.flutter-files-cn}}/posts/images/2021/04/3ac77f1134a10.gif) +![]({{site.flutter-files-cn}}posts/images/2021/04/3ac77f1134a10.gif) 更多 Google Play 开发者播客节目,请移步《[Apps, Games & Insights 播客节目合辑](https://www.ximalaya.com/keji/34766927/)》,了解不同领域的开发者通过多种视角与主题,探讨海外市场开发与发行的经验心得。 diff --git a/src/content/posts/web-support-for-flutter-goes-beta.md b/src/content/posts/web-support-for-flutter-goes-beta.md index b1aaed7bda..249d318c96 100644 --- a/src/content/posts/web-support-for-flutter-goes-beta.md +++ b/src/content/posts/web-support-for-flutter-goes-beta.md @@ -29,7 +29,7 @@ toc: true Flutter 允许开发者使用同一套代码实现移动和 web 的跨平台体验。我们的一位早期使用者 [Journey](https://startyourjourney.io/) 就利用 Flutter 开发了一个多平台应用。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/vMoskP.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/vMoskP.png) > △ 社交应用 Journey 最近刚发布了一个使用 Flutter 开发的跨平台应用 @@ -39,7 +39,7 @@ Journey 的创始人 Luke O’Brien 给予了 Flutter 很高的评价: "我大 第二个使用场景在网站中内嵌一个小程序。这类程序通常功能丰富且以数据为中心,但是它们并不需要提供导航服务或者其它应用级别的复杂功能,比如说,你可以为现有网站添加一个新的汽车配置器、填字游戏或者交互式的可视化数据,这些都是该场景下比较典型的用例。我们的另一位早期使用者 [AEI Studio](https://studio.aei.dev/showcase/) 就开发了一系列聊天机器人并在 web 版的聊天对话框中内嵌了 Flutter,从而实现了动画,键盘文本输入等多项交互功能。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/2bGkk6.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/2bGkk6.png) > △ Weatherbot 是 AEI Studio 旗下的一款聊天机器人, @@ -69,13 +69,13 @@ Journey 的创始人 Luke O’Brien 给予了 Flutter 很高的评价: "我大 首先,我们在每个包的详情页面中列明了它所支持的平台,让开发者可以更轻松地判别这个包是否提供 web 支持。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/taG3uH.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/taG3uH.png) > △ pub.dev 包的详情页面显示了关于 SDK 和平台兼容性的标签 搜索 UI 也新增了若干过滤器,方便开发者找到提供 web 支持的包。我们基于新的 [平台清单标签](https://flutter.dev/docs/development/packages-and-plugins/developing-packages#plugin-platforms) 开发了该功能,你可通过 Flutter 1.12 获取这些标签。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/UxFyg9.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/UxFyg9.png) > △ pub.dev 的搜索 UI 添加了对 SDK 和平台的过滤器支持 diff --git a/src/content/posts/whats-new-in-flutter-2-0.md b/src/content/posts/whats-new-in-flutter-2-0.md index 70e3fb186c..04ee63ba91 100644 --- a/src/content/posts/whats-new-in-flutter-2-0.md +++ b/src/content/posts/whats-new-in-flutter-2-0.md @@ -13,7 +13,7 @@ Flutter 2 的发布也带来了许多振奋人心的内容。你可以阅读图 从现在开始,Flutter web 的支持已经从 Beta 版过渡到稳定阶段。随着首个稳定版本的发布,Flutter 通过对 web 平台的支持,将代码的复用性提升到了一个新高度。现在,当你平稳运行 Flutter 应用时,可以将 web 作为一个新的适配方向。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/6547ec1e75755.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/6547ec1e75755.png) > 作为一家致力于通过数字化实现卓越运营的现代移动虚拟网络运营商,[Moi Mobiili](https://www.moi.fi/) 选择使用 Flutter 构建其 Mun Moi 客户经理应用,并在近期发布了其 web 版应用。 @@ -33,13 +33,13 @@ pub.dev 已经发布了 [超过 1,000 个空安全 package](https://pub.flutter- Flutter 桌面版经过一系列大大小小的优化,才达到现在的质量。我们率先从文本编辑入手,确保其在每个支持平台上都能令 [文本选择点](https://github.com/flutter/flutter/pull/71756) 等基本功能获得如原生般的顺畅运行体验,并能够 [在键盘事件经过处理后将其取消](https://github.com/flutter/flutter/issues/33521)。在鼠标输入方面,我们也已确保,当处理触摸输入以及在 [Material](https://github.com/flutter/flutter/pull/74286) 和 [Cupertino](https://github.com/flutter/flutter/pull/73882) 设计语言的 TextField 和 TextFormField 中添加内置上下文菜单,并 [在 ReorderableListView 上提供抓取控点](https://github.com/flutter/flutter/pull/74299) 时,使用高精度定点设备的拖放事件将立即开始,没有任何延迟。另外,内置的上下文菜单已经添加至以 Material 和 Cupertino 为设计语言的 TextField 及 TextFormField widget 中,ReorderableListView widget 添加了抓取控点功能。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/a362da9373a9e.gif) +![]({{site.flutter-files-cn}}posts/images/2021/03/a362da9373a9e.gif) > ReorderableListView 现已支持抓取控点,便于鼠标轻松拖动 开发者可以使用 ReorderableListView 轻松移动项目,但用户需要长按项目以启用拖动操作。该设计在移动设备上很合理,但很少有桌面平台的用户会想到用鼠标长按某个项目来移动它,所以新版本提供了一个适用于鼠标或触摸输入的抓取控点。按照同样的思路,对于因平台而异的惯用功能,新版本提供了一个 [经过升级的滚动条](https://github.com/flutter/flutter/pull/71664),可使其与桌面平台完美适配。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/8f412222d985f.gif) +![]({{site.flutter-files-cn}}posts/images/2021/03/8f412222d985f.gif) > 新版本中的滚动条 widget 已适配桌面平台 @@ -47,7 +47,7 @@ Flutter 桌面版经过一系列大大小小的优化,才达到现在的质量 对于其他桌面平台的特定功能,本版本还为 Flutter 应用启用了命令行参数处理,这样一来,你可以通过在 Windows 文件资源管理器中双击鼠标等简单操作来打开应用中的文件。此外,我们还努力使 [Windows](https://github.com/flutter/engine/pull/23701) 和 [macOS](https://github.com/flutter/engine/pull/23924) 上的大小调整操作变得更加流畅,并面向全球用户推出了输入法 (IME) 支持。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/62d569de4af28.gif) +![]({{site.flutter-files-cn}}posts/images/2021/03/62d569de4af28.gif) > Flutter 桌面现支持输入法直接输入 @@ -71,7 +71,7 @@ Flutter 桌面版经过一系列大大小小的优化,才达到现在的质量 除了发布 Flutter 桌面 Beta 版外,我们也非常高兴地发布了 Google Mobile Ads SDK for Flutter 的公开 Beta 版。这是一个全新插件,除了原有的叠加格式 (叠加横幅、插页和激励视频广告),我们还在其中新增了内联横幅及原生广告。另外,我们还在此插件中提供了 Ad Manager 和 Admob 支持,无论你是何种规模的发布商,这款插件都能满足你的需求。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/2d7174f7a14d8.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/03/2d7174f7a14d8.jpg) 在公开发布 Beta 之前,我们邀请了一些客户参与试用这款插件。许多客户都使用了这些新增的广告格式成功地发布了应用。例如,Sua Musica (拉丁美洲最大的独立艺术家音乐平台,拥有超过 15,000 位认证音乐人和一千万活跃用户) 使用了 Google Mobile Ads SDK for Flutter 插件发布了新的应用。其广告展示量增加了 350%,点击率增加了 43%,千次展示收益上涨了 13%。 @@ -83,11 +83,11 @@ Flutter 桌面版经过一系列大大小小的优化,才达到现在的质量 新增的 [CupertinoSearchTextField](https://api.flutter.cn/flutter/cupertino/CupertinoSearchTextField-class.html) 为 iOS 提供了搜索栏 UI。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/a62ac8b91dd58.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/03/a62ac8b91dd58.jpg) [CupertinoFormSection](https://api.flutter.cn/flutter/cupertino/CupertinoFormSection-class.html)、[CupertinoFormRow](https://api.flutter.cn/flutter/cupertino/CupertinoFormRow-class.html) 和 [CupertinoTextFormFieldRow](https://api.flutter.cn/flutter/cupertino/CupertinoTextFormFieldRow-class.html) 等 widgets 则利用 iOS 的视觉美学简化了验证表单字段的生成。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/2c7bc09f2c6c5.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/2c7bc09f2c6c5.png) 除了为 iOS 新增功能以外,我们也在持续寻求 iOS 和 Flutter 在着色器和动画方面的 [整体性能优化](https://github.com/flutter/flutter/issues/60267#issuecomment-762786388)。iOS 仍然是 Flutter 的首要平台,我们将继续致力于为大家带来重要的新功能和性能提升。 @@ -95,13 +95,13 @@ Flutter 桌面版经过一系列大大小小的优化,才达到现在的质量 新版 Flutter 新增了两个 Widget,分别是 [AutocompleteCore](https://github.com/flutter/flutter/pull/62927) 和 ScaffoldMessenger。AutocompleteCore 是在你的 Flutter 应用中实现自动补全功能所需的基础功能。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/e40d0f6eccfcd.gif) +![]({{site.flutter-files-cn}}posts/images/2021/03/e40d0f6eccfcd.gif) 开发者对为 Flutter 增加 Autocomplete 功能的呼声很高,所以我们在新版本中提供了此功能。你现在即可使用,如果你想了解该功能的设计理念,请参阅 [设计文档](https://docs.google.com/document/d/1fV4FDNdcza1ITU7hlgweCDUZdWyCqd-rjz_J7K2KkfY/)。 同样,[ScaffoldMessenger](https://github.com/flutter/flutter/pull/64101) 可用于处理许多与消息提示 Snackbar 相关的问题,例如,它可以轻松创建 Snackbar 消息以响应 AppBar 操作、创建可在 Scaffold 转换之间持久保存的 Snackbar 消息,并能够在异步操作完成时显示 Snackbar 消息,即使用户已导航至使用不同 Scaffold 的页面时也不例外。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/aed84cb7b2ce7.gif) +![]({{site.flutter-files-cn}}posts/images/2021/03/aed84cb7b2ce7.gif) 你只需写一行代码,即可将所有这些更加便捷的新功能收入囊中。从现在开始,你可以使用此行代码来显示你的 Snackbar 消息: @@ -118,7 +118,7 @@ messenger.showSnackBar(SnackBar(content: Text(‘I can fly.’))); 过去,额外 Flutter 实例的内存占用量与第一个 Flutter 实例相同。在 Flutter 2 中,我们将创建额外 Flutter 引擎的静态内存占用量降低了约 99%,使每个实例的占用量大约为 180kB。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/81b71e6e83d2d.gif) +![]({{site.flutter-files-cn}}posts/images/2021/03/81b71e6e83d2d.gif) 提供该支持的新增 API 目前尚处于预览状态,在 [我们的文档里](https://docs.flutter.cn/development/add-to-app/multiple-flutters),你可以找到通过使用这种新模式的说明和 [示例项目](https://github.com/flutter/samples/tree/master/add_to_app/multiple_flutters)。随着这一变化的出现,我们强烈建议你在原生应用中创建多个 Flutter 引擎实例。 @@ -132,13 +132,13 @@ Flutter Fix 是一系列功能的组合。首先,我们为 dart 命令行工 举个例子,比如你的应用具有下面一行代码: -![]({{site.flutter-files-cn}}/posts/images/2021/03/8c4cb573969e2.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/03/8c4cb573969e2.jpg) > 使用已弃用的函数创建 Flutter widget 因为这个函数已经弃用,请使用下面的参数代替: -![]({{site.flutter-files-cn}}/posts/images/2021/03/78d1c0bbae193.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/03/78d1c0bbae193.jpg) > 替换已弃用的函数并创建 Flutter widget @@ -156,7 +156,7 @@ $ dart fix --apply 或者,如果你希望以交互方式在你喜欢的 IDE 中应用这些修复,也可以实现。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/a12a132d45d16.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/a12a132d45d16.png) 多年来,我们一直在标记已弃用的旧 API,现在我们制定了一个策略,明确 [何时真正移除弃用的 API](https://medium.com/flutter/deprecation-lifetime-in-flutter-e4d76ee738ad),而我们率先将其应用到了 Flutter 2 之中。尽管我们尚未捕捉到所有弃用 API,并将其以数据形式提供给 Flutter Fix,但我们会不断从之前弃用的 API 中获取更多内容,并在未来持续加入新的重大更改。我们的目标是尽全力将 Flutter API 打造的尽善尽美,同时保持代码的及时更新。 @@ -166,7 +166,7 @@ $ dart fix --apply 其中有一个新功能,可在你尚未启动 Flutter DevTools 2 时帮你锁定问题,那就是你的 IDE 能够发现常见的异常,并在 DevTools 中提出这个异常,以助你开展调试。例如,下面显示你的应用中抛出了一个溢出异常,系统在 Visual Studio Code 中提供了一个在 DevTools 中调试此问题的选项。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/608e8fe5872ec.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/608e8fe5872ec.png) > Flutter IDE 扩展的溢出异常提示通知 @@ -174,25 +174,25 @@ $ dart fix --apply 在 DevTools 开始运行后,你可通过标签上的新错误标识帮助自己追踪应用中出现的具体问题。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/0dd3177d5686b.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/0dd3177d5686b.png) > DevTools 中的红点可以帮助提醒应用中存在的错误部分 DevTools 的另一个新功能是能够轻松发现所显示的分辨率低于其实际分辨率的图像,这有助于追踪应用过大和内存占用过多等情况。若要启用此功能,请在 Flutter Inspector 中启用 Invert Oversized Images。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/045ae1f47d21f.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/045ae1f47d21f.png) > 启用 "反转超大尺寸图像 (Invert Oversized Images)" 选项,以突出显示异常图像 现在,当图像的实际分辨率明显大于其显示大小时,系统就会将其倒置,以便你在应用中轻松找到它。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/4dc22b9b72fb5.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/4dc22b9b72fb5.png) > "反转超大图像" 的操作示例 此外,为响应大量用户的要求,除了在 Flutter Inspector 的 Layout Explorer 中显示有关弹性布局的详细信息外,我们还添加了显示固定布局的功能,可便于你调试各种布局。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/b11256af35d94.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/b11256af35d94.png) > 新的 Layout Explorer 显示了 fixed 和 flex layout 的布局细节 @@ -219,13 +219,13 @@ DevTools 的另一个新功能是能够轻松发现所显示的分辨率低于 我们也为 IntelliJ 系列 IDE 的 Flutter 插件添加了一些适用于 Flutter 2 的新功能。首先,我们在其中新增了一个项目向导,该向导与 IntelliJ 中的新向导风格一致。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/e239fc16e88ab.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/e239fc16e88ab.png) -![]({{site.flutter-files-cn}}/posts/images/2021/03/41eb9c6d72ccc.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/41eb9c6d72ccc.png) 此外,如果你正在 Linux 上使用 IntelliJ 或 Android Studio,针对 [安装自 Snap Store 的 Flutter SDK](https://snapcraft.io/flutter) 进行编程,那么系统便会将 Flutter snap 路径添加到已知的 SDK 路径列表中。这使得 Flutter snap 用户可以更轻松地在 "Settings (设置)" 中配置 Flutter SDK。感谢 Marcus Tomlinson 对此作出的贡献! -![]({{site.flutter-files-cn}}/posts/images/2021/03/231b9293873b0.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/231b9293873b0.png) > 通过 Snap 安装 Flutter SDK,可以更轻松的在 Linux 上使用 Android Studio @@ -240,17 +240,17 @@ DevTools 的另一个新功能是能够轻松发现所显示的分辨率低于 适用于 Visual Studio Code 的 Flutter 扩展也针对 Flutter 2 进行了优化,我们首先引入了一些测试增强功能,例如重新运行失败测试的能力。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/7b6ddc9b0f723.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/7b6ddc9b0f723.png) 经过两年的逐步发展,对 Dart 的 LSP (语言服务器协议) 支持已经成为在 Flutter 扩展中将 Dart 分析器集成到 Visual Studio Code 中的默认方式。LSP 支持为 Flutter 开发带来了许多改进,包括在当前的 Dart 文件中应用特定的所有修复,以及能够补全代码以生成完整函数调用 (包括括号和所需参数) 的能力。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/d2ba55aae416d.gif) +![]({{site.flutter-files-cn}}posts/images/2021/03/d2ba55aae416d.gif) -![]({{site.flutter-files-cn}}/posts/images/2021/03/dcd04901b23b0.gif) +![]({{site.flutter-files-cn}}posts/images/2021/03/dcd04901b23b0.gif) LSP 支持不仅限于 Dart,它还支持 pubspec.yaml 及 analysis_options.yaml 文件中的代码补全。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/dcd04901b23b0.gif) +![]({{site.flutter-files-cn}}posts/images/2021/03/dcd04901b23b0.gif) 这仅仅是近期 Visual Studio Code 适用于 Flutter 的部分扩展更新。你可以阅读下列公告,了解全部更新内容: @@ -264,7 +264,7 @@ LSP 支持不仅限于 Dart,它还支持 pubspec.yaml 及 analysis_options.yam 如果不提 DartPad,那我们的工具更新就不能算完整,DartPad 现已更新并支持 Flutter 2。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/20cfd09d4ec0a.png) +![]({{site.flutter-files-cn}}posts/images/2021/03/20cfd09d4ec0a.png) > DartPad 已经升级到支持 Flutter 2 了 @@ -286,7 +286,7 @@ Flutter 开发体验不仅包括框架和工具;还包括为 Flutter 应用提 如果你正在寻找应用的崩溃报告,你可以考虑使用 Sentry,其已经发布了 [适用于 Flutter 应用的新 SDK](https://blog.sentry.io/2021/03/03/with-flutter-and-sentry-you-can-put-all-your-eggs-in-one-repo/)。 -![Sentry 崩溃报告工具已经支持 Flutter]({{site.flutter-files-cn}}/posts/images/2021/03/7d5f73ad3037b.jpg) +![Sentry 崩溃报告工具已经支持 Flutter]({{site.flutter-files-cn}}posts/images/2021/03/7d5f73ad3037b.jpg) > Sentry 崩溃报告工具已经支持 Flutter @@ -317,7 +317,7 @@ Flutter 开发体验不仅包括框架和工具;还包括为 Flutter 应用提 最后同样也是很重要的一点,如果软件包作者或用户有兴趣了解最新版本的软件包是否适用于最新版本的 Flutter,可以查看 Codemagic 的新 pub.green 网站以了解详情。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/59ffdf68da593.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/03/59ffdf68da593.jpg) Codemagic 发布了一个网站 pub.green 用来展示 package 和近期 Flutter 版本的兼容性结果 @@ -358,6 +358,6 @@ Codemagic 发布了一个网站 pub.green 用来展示 package 和近期 Flutter 最后,我想代表 Google Flutter 团队全体成员向开发者们说一句谢谢!感谢你们在过去的两年里推出了超过 15 万款 Flutter 应用,我们整理了一些团队喜欢的 Flutter 应用,在 [Flutter Engage 主题演讲](https://zhuanlan.zhihu.com/p/355036482) 上播放了这段视频,献给各位开发者和社区。 -![]({{site.flutter-files-cn}}/posts/images/2021/03/638471b80bffd.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/03/638471b80bffd.jpg) 如果没有各位开发者们对自己构建的 Flutter 应用的持续支持和热忱,这个具备全球活力的开发者社区就不可能成为现实,我们非常期待看到你接下来的作品! diff --git a/src/content/posts/whats-new-in-flutter-2-10.md b/src/content/posts/whats-new-in-flutter-2-10.md index 1b965d12bb..6b5e05bec2 100644 --- a/src/content/posts/whats-new-in-flutter-2-10.md +++ b/src/content/posts/whats-new-in-flutter-2-10.md @@ -11,7 +11,7 @@ Flutter 2.10 版已正式发布!虽然⾃ [上次稳定版本发布](./whats-n ⾸先,Flutter 2.10 版本带来了稳定的 Windows ⽀持,无需再通过 `--enable-windows-desktop` 标记来单独配置 Windows 桌面版应用程序的支持,因为它现在已经默认被启用! -![]({{site.flutter-files-cn}}/posts/images/2022/02/2b8921d82869b.jpg) +![]({{site.flutter-files-cn}}posts/images/2022/02/2b8921d82869b.jpg) 当然,此次稳定版发布肯定不只是“删掉”一个标记这么简单 ;-) 在 Flutter 2.10 的 Windows 支持中,也包含了对⽂本处理、键盘处理和键盘快捷键的⼴泛改进,以及直接与 Windows 集成的新方式、⽀持命令行参数、全球化⽂本输⼊和无障碍功能等。 @@ -21,19 +21,19 @@ Flutter 2.10 版已正式发布!虽然⾃ [上次稳定版本发布](./whats-n 此版本的 Flutter 包括由社区成员 [knopp](https://github.com/knopp "Flutter 社区成员 Matej 的 GitHub 主页") 提供的 **绘制脏区管理** 的初步⽀持,他为 [iOS/Metal 上的单个脏区域启⽤了选择性重绘](https://github.com/flutter/engine/pull/28801 "iOS/Metal 上的单个脏区域启⽤了选择性重绘")。这一变化将一些基准测试中九十分位和九十九分位的光栅化时间减少了一个数量级,并将这些基准测试中的 GPU 利⽤率从 90% 以上降低到了 10% 以下。 -![优化后的 Skia 渲染基准测试数据 1]({{site.flutter-files-cn}}/posts/images/2022/02/fa73031f55ece.jpg) +![优化后的 Skia 渲染基准测试数据 1]({{site.flutter-files-cn}}posts/images/2022/02/fa73031f55ece.jpg) 我们希望在未来的版本中,[将选择性重绘的优势引入到其他平台](https://github.com/flutter/engine/pull/29591 "将选择性重绘的优势引入到其他平台")。 在 [Flutter 2.8](./whats-new-in-flutter-2-8)。而在 Flutter 2.10 中,我们已经开始使⽤它 (`DisplayList`) 进行优化。例如,**[一种常见不透明层的情况现在已经以更高效的方式实现](https://github.com/flutter/engine/pull/29775 "一种常见不透明层的情况现以更高效的方式实现")**。即使在最坏的情况下,在我们基准测试中每帧光栅化时间也下降到了先前的三分之一以下。 -![优化后的 Skia 渲染基准测试数据 2]({{site.flutter-files-cn}}/posts/images/2022/02/7ef05091b9321.jpg) +![优化后的 Skia 渲染基准测试数据 2]({{site.flutter-files-cn}}posts/images/2022/02/7ef05091b9321.jpg) 随着我们继续开发记录格式,将来会继续将该优化扩展到更多的场景。 在 profile 和 release 模式下,Dart 代码将以 AOT 方式编译。这段代码的轻量和高效的关键来源于整个程序的类型流分析,它解锁了许多编译器优化和激进的摇树优化 (tree-shaking)。但由于类型流分析必须涵盖整个程序,因此可能会有些消耗性能。新版本带来了 [更快的类型流分析实现](https://dart.googlesource.com/sdk.git/+/e698500693603374ecc409e158f36c25bff45b12 "Flutter 新版本带来了更快的类型流分析实现")。在我们的基准测试中,Flutter 应⽤的总体构建时间下降了约 10%。 -![优化后的构建时间]({{site.flutter-files-cn}}/posts/images/2022/02/869bf3b91639b.jpg) +![优化后的构建时间]({{site.flutter-files-cn}}posts/images/2022/02/869bf3b91639b.jpg) 与往常一样,性能增强、减少内存使⽤和减少延迟是 Flutter 团队的⾸要任务。期待未来版本的进一步改进。 @@ -41,7 +41,7 @@ Flutter 2.10 版已正式发布!虽然⾃ [上次稳定版本发布](./whats-n 除了性能改进之外,我们还添加并增强了一些特定平台的功能。[luckysmg](https://github.com/luckysmg "luckysmg") 就为我们带来了一项 [iOS 上新的增强功能——更流畅的键盘动画](https://github.com/flutter/engine/pull/29281 "iOS 上新的增强功能——更流畅的键盘动画"),它会⾃动应用在你的应用中。 -![iOS 键盘过渡动画]({{site.flutter-files-cn}}/posts/images/2022/02/6bd64fc2cc49f.gif) +![iOS 键盘过渡动画]({{site.flutter-files-cn}}posts/images/2022/02/6bd64fc2cc49f.gif) 除此以外,我们还通过修复一些 [边缘情况崩溃提⾼了 iOS 相机插件的稳定性](https://github.com/flutter/plugins/pull/4619 "边缘情况崩溃提⾼了 iOS 相机插件的稳定性")。 @@ -60,7 +60,7 @@ Flutter 2.10 版本还包含许多针对 Android 平台的改进。现在在默 最后,在我们收到开发者们对于 Gradle 抛出让人费解的错误消息的反馈后,我们调整了 Flutter 命令行工具,现在它将 **为常⻅问题提供解决方法**。例如,如果你向你的应⽤添加了一个插件,该插件需要你提⾼最低支持的 Android SDK 版本,你现在会在错误信息中看到「Flutter Fix」的建议。 -![Gradle 错误提示]({{site.flutter-files-cn}}/posts/images/2022/02/37d95f749a27e.jpg) +![Gradle 错误提示]({{site.flutter-files-cn}}posts/images/2022/02/37d95f749a27e.jpg) 我们将继续为常⻅错误消息添加更多解决方法的建议,并希望获得你对其他错误消息的反馈,这些错误消息将显著帮助开发者处理同类问题。 @@ -68,7 +68,7 @@ Flutter 2.10 版本还包含许多针对 Android 平台的改进。现在在默 此版本还包含对 Web 平台的一些改进。例如,在先前的版本中,当鼠标拖动到多行文本框的边缘时,它不会正确地跟随滚动。在此版本中,当选择光标拖出了文本框时,文本框会进行滚动,浏览并选中对应的文字内容。此行为同时适⽤于 Web 平台和桌⾯端。 -![在 Web 平台选中并拖拽 TextField 光标]({{site.flutter-files-cn}}/posts/images/2022/02/516ce9d6c26e3.gif) +![在 Web 平台选中并拖拽 TextField 光标]({{site.flutter-files-cn}}posts/images/2022/02/516ce9d6c26e3.gif) Flutter 2.10 还包括对 Web 平台的另一项显著改进,我们也一直在寻求减少将 Flutter 应用运行到 Web 平台的开销,在先前的版本中,每次我们想要将原⽣ HTML 的 widget 引⼊ Flutter 应⽤时,我们都需要一个覆盖层 (Overlay) 作为我们对 Web 的平台视图 (Platform view) ⽀持的一部分。这些叠加层中的每一个都⽀持⾃定义绘制,但同时也代表了一定数量的性能开销。如果你的应⽤中有⼤量原⽣ HTML 的 widget (例如链接),那这将造成非常大性能开销。在这个版本中我们为 Web 平台构建了一个新的「⾮绘制的平台视图」,已经基本上消除了这种开销。我们已经 [将这种优化](https://github.com/flutter/plugins/pull/4578 "使用⾮绘制的平台视图优化") 应用到 [Link widget](https://pub.flutter-io.cn/documentation/url_launcher/latest/link/Link-class.html "Link widget API 文档") 中,这意味着如果你的 Flutter Web 应⽤中有⼤量的链接,它们将不再产生额外的性能消耗。随着时间的推移,我们会将此优化应⽤到其他的 widget。 @@ -94,7 +94,7 @@ final darkTheme = ThemeData(colorSchemeSeed: Colors.orange, brightness: Brightne 最后,我们添加了 [1028 个新的 Material 图标](https://github.com/flutter/flutter/pull/95007 "添加了 1028 个新 Material 图标的 PR")。 -![1028 个图标的部分预览]({{site.flutter-files-cn}}/posts/images/2022/02/8f784a556bba2.jpg) +![1028 个图标的部分预览]({{site.flutter-files-cn}}posts/images/2022/02/8f784a556bba2.jpg) 你可以在 [这个 issue 中](https://github.com/flutter/flutter/issues/91605 "在这里跟进 Material 3 的接入情况") 跟进 Material 3 的接入情况,并随时留下你的意见反馈。 @@ -112,21 +112,21 @@ final darkTheme = ThemeData(colorSchemeSeed: Colors.orange, brightness: Brightne 我们还进行了一些 [可⽤性更新](https://github.com/flutter/devtools/pull/3493 "为 DevTools 加入可⽤性更新的 PR"),包括 [改进在调试器变量窗格中检查⼤型列表和映射](https://github.com/flutter/devtools/pull/3497 "改进在调试器变量窗格中检查⼤型列表和映射") 的⽀持(感谢 [Elliott](https://github.com/elliette "Elliott 的 GitHub 主页"))。 -![在 DevTools 中查看大型列表和映射]({{site.flutter-files-cn}}/posts/images/2022/02/aaff408a25f10.gif) +![在 DevTools 中查看大型列表和映射]({{site.flutter-files-cn}}posts/images/2022/02/aaff408a25f10.gif) 最后,我们即将发布年度 DevTools 问卷调查!请提供你的反馈并帮助我们改善你的开发体验。 -![该调查提⽰将在 2 ⽉中旬的某个时间直接显⽰在 DevTools 中,敬请参与并踊跃反馈!]({{site.flutter-files-cn}}/posts/images/2022/02/2f802a49c7f72.jpg) +![该调查提⽰将在 2 ⽉中旬的某个时间直接显⽰在 DevTools 中,敬请参与并踊跃反馈!]({{site.flutter-files-cn}}posts/images/2022/02/2f802a49c7f72.jpg) ## VSCode 改进 Flutter 的 Visual Studio Code 扩展也获得了许多增强功能,包括 **在代码的更多位置预览颜色** 以及 [可更新颜色代码的颜⾊选择器](https://github.com/Dart-Code/Dart-Code/issues/3240 "VS Code 中加入了可更新颜色代码的颜⾊选择器")。 -![VSCode 的 Flutter 颜色选择器]({{site.flutter-files-cn}}/posts/images/2022/02/bcc4017326ad4.gif) +![VSCode 的 Flutter 颜色选择器]({{site.flutter-files-cn}}posts/images/2022/02/bcc4017326ad4.gif) 此外,如果你想成为 VSCode 的 Dart 和 Flutter 扩展的预发布版本的测试⼈员,你可以 [在你的扩展设置中切换到预发布版本](https://github.com/Dart-Code/Dart-Code/issues/3729 "将 Dart 和 Flutter 扩展切换到预发布版本")。 -![使用预发布版本的插件]({{site.flutter-files-cn}}/posts/images/2022/02/dc881f95347ef.jpg) +![使用预发布版本的插件]({{site.flutter-files-cn}}posts/images/2022/02/dc881f95347ef.jpg) 你可以在 flutter-announce 邮件列表的 [这一篇](https://groups.google.com/g/flutter-announce/c/lR-yn1s9HKk "flutter-announce 邮件列表中关于 VS Code 插件改进的文章") 阅读有关此更新的详细信息。 @@ -143,7 +143,7 @@ Dev 渠道现已被彻底移除。如果我们漏了一些没有移除的位置 ## 对 iOS 9.3.6 的⽀持进入尾声 -由于我们实验室中⽬标设备的使⽤减少和维护难度增加,我们正在 [调整对于 iOS 9.3.6 的支持]({{site.flutter-files-cn}}/flutter-design-docs/RFC_Move_32-bit_iOS_to_Best_Effort_Tier.pdf "RFC 文档: 调整对于 iOS 9.3.6 的支持"),[从「⽀持」到「尽力⽽为」](https://docs.flutter.cn/development/tools/sdk/release-notes/supported-platforms "对于 iOS 9.3.6 的支持从「⽀持」到「尽力⽽为」")。这意味着对 iOS 9.3.6 的⽀持和对 32 位 iOS 设备的⽀持将仅通过编码实践、Ad-Hoc 和社区测试来维护了。 +由于我们实验室中⽬标设备的使⽤减少和维护难度增加,我们正在 [调整对于 iOS 9.3.6 的支持]({{site.flutter-files-cn}}flutter-design-docs/RFC_Move_32-bit_iOS_to_Best_Effort_Tier.pdf "RFC 文档: 调整对于 iOS 9.3.6 的支持"),[从「⽀持」到「尽力⽽为」](https://docs.flutter.cn/development/tools/sdk/release-notes/supported-platforms "对于 iOS 9.3.6 的支持从「⽀持」到「尽力⽽为」")。这意味着对 iOS 9.3.6 的⽀持和对 32 位 iOS 设备的⽀持将仅通过编码实践、Ad-Hoc 和社区测试来维护了。 我们预计在 2022 年第三季度的 Flutter 稳定版本中放弃对 32 位 iOS 设备以及 iOS 版本 9 和 10 的 ⽀持。这意味着基于稳定的 Flutter SDK 构建的应⽤将不再在 32 位 iOS 设备上运行,并且 Flutter ⽀持的最低 iOS 版本将增加到 iOS 11。 diff --git a/src/content/posts/whats-new-in-flutter-2-2.md b/src/content/posts/whats-new-in-flutter-2-2.md index f6341bf74f..3305a184f4 100644 --- a/src/content/posts/whats-new-in-flutter-2-2.md +++ b/src/content/posts/whats-new-in-flutter-2-2.md @@ -3,7 +3,7 @@ title: Flutter 2.2 更新详解 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2021/05/fHLvPr.jpg) +![]({{site.flutter-files-cn}}posts/images/2021/05/fHLvPr.jpg) [Flutter 2.2 版](https://flutter.cn/posts/announcing-flutter-2-2?t=1)已正式发布!要获取新版本,你只需切换到 stable 渠道并更新目前安装的 Flutter,或前往 [docs.flutter.cn/get-started](https://docs.flutter.cn/get-started) 从头开始安装。 @@ -43,9 +43,9 @@ typedef OldClassName = NewClassName; 我们还对两个 web 渲染器都做了改进。在 HTML 渲染器上,我们添加了对 [字体特性](https://developer.mozilla.org/en-US/docs/Web/CSS/font-feature-settings) 的支持,以启用 [`FontFeature`](https://api.flutter-io.cn/flutter/dart-ui/FontFeature-class.html) 设置并使用 canvas API 渲染文本,从而使鼠标悬停处的文本能够显示在适当的位置。在 HTML 和 CanvasKit 渲染器上,我们新增了对着色器遮罩 (shader masks) 和 [`computeLineMetrics`](https://api.flutter-io.cn/flutter/painting/TextPainter/computeLineMetrics.html) 的支持,以解决 Flutter web 应用和移动应用两者不一致的问题。例如,开发者现在可以通过 [不透明度遮罩](https://api.flutter-io.cn/flutter/widgets/Opacity-class.html) 使用着色器遮罩实现淡出转场,并像在移动应用中一样使用 `computeLineMetrics`。 -无障碍功能不但是 Flutter web 的一大重点,也是整个 Flutter 的一个重心所在。按照设计,是通过构建 `SemanticsNode` 树来实现无障碍功能。Flutter web 应用的用户启用无障碍功能后,我们会生成一个与 `RenderObject` DOM 树并行的 DOM 树,并将语义属性转换为 Aira。在此版本中,我们改进了语义节点位置,消除了移动应用和 web 应用在使用转换 (transform) 时的不一致,这意味着在使用转换对 widget 进行样式设置时,焦点框会正确地显示在元素上方。如需直观了解其实际效果,你可以观看 Material Design 无障碍项目负责人 Victor Tsaran 的视频,了解他如何对 [Flutter Gallery App 使用 VoiceOver]({{site.flutter-files-cn}}/posts/images/2021/05/yFhscX.mp4)。 +无障碍功能不但是 Flutter web 的一大重点,也是整个 Flutter 的一个重心所在。按照设计,是通过构建 `SemanticsNode` 树来实现无障碍功能。Flutter web 应用的用户启用无障碍功能后,我们会生成一个与 `RenderObject` DOM 树并行的 DOM 树,并将语义属性转换为 Aira。在此版本中,我们改进了语义节点位置,消除了移动应用和 web 应用在使用转换 (transform) 时的不一致,这意味着在使用转换对 widget 进行样式设置时,焦点框会正确地显示在元素上方。如需直观了解其实际效果,你可以观看 Material Design 无障碍项目负责人 Victor Tsaran 的视频,了解他如何对 [Flutter Gallery App 使用 VoiceOver]({{site.flutter-files-cn}}posts/images/2021/05/yFhscX.mp4)。 - + 我们现在还提供一个适用于性能分析 (profile) 和发布 (release) 模式的命令行 flag,以供开发者访问语义节点调试树,并直观查看系统为其 web 应用创建的语义节点,从而对应用的无障碍功能进行调试。 @@ -62,7 +62,7 @@ $ flutter run -d chrome --profile \ 最后但也同样重要的是,最新版的 Flutter DevTools 现在还支持为你的 Flutter web 应用使用布局浏览器。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/5Ux1TW.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/5Ux1TW.png) 你现在可以在 web 应用中使用你所熟悉的布局调试工具,这与移动应用和桌面应用别无二致。 @@ -82,7 +82,7 @@ $ flutter run -d chrome --profile \ Flutter 平台自适应应用指南的 UX 部分以新的 [Material 大屏幕指南](https://material.io/blog/material-design-for-large-screens) 为基础。Material 团队在新发布的这一指南中,根据大屏幕的特性,修订了多篇主要的布局文章,调整了多个组件,并更新了 Design Kit。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/oXdq99.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/oXdq99.png) Flutter 的目标始终是让应用可以走得更高更远,而不仅是能够在多个平台上正常运行。不做到让你的应用能够良好适配所有目标平台,我们不会停下脚步。Flutter 能够为你提供所需支持,让你的应用不但能够覆盖多个目标平台,而且能够针对不同的屏幕尺寸、输入方式以及各平台的不同使用习惯而做出适当的调整。 @@ -90,14 +90,14 @@ Flutter 的目标始终是让应用可以走得更高更远,而不仅是能够 说起 Material 指南,此版本还纳入了两个独立的 PR,向 Flutter 中添加了更多 [Material 图标](https://github.com/flutter/flutter/pull/78311)。我们可爱的吉祥物 Dash 现在也有专属的图标了! -![]({{site.flutter-files-cn}}/posts/images/2021/05/U8KghW.png) -![]({{site.flutter-files-cn}}/posts/images/2021/05/3nWtj6.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/U8KghW.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/3nWtj6.png) 加上这些新图标,可供你的应用使用的 Material 图标总数现已突破 7,000 大关。如果你在这海量图标中寻找所需图标时遇到了困难,可以访问 [fonts.google.com/icons](https://fonts.google.com/icons),按类别和名称来搜索图标。 找到理想的图标后,你可以在新的 "Flutter" 标签页中查看有关如何使用该图标的说明。你也可以单独下载这个图标,将其用作应用中的独立资源。在你的 Flutter 应用中加入 Dash 的可爱形象从未如此简单。 -![通过名称搜索 Material 图标]({{site.flutter-files-cn}}/posts/images/2021/05/BmOCBD.png) +![通过名称搜索 Material 图标]({{site.flutter-files-cn}}posts/images/2021/05/BmOCBD.png) 通过名称搜索 Material 图标 @@ -133,7 +133,7 @@ class HomePage extends StatelessWidget { } ``` -![Flutter 2.2 可在按键事件于 widget 层次结构内向上传播的过程中将其取消;例如,你可以将 TAB 键用于将焦点从 TextField 切换到其他元素]({{site.flutter-files-cn}}/posts/images/2021/05/0YgCDW.png) +![Flutter 2.2 可在按键事件于 widget 层次结构内向上传播的过程中将其取消;例如,你可以将 TAB 键用于将焦点从 TextField 切换到其他元素]({{site.flutter-files-cn}}posts/images/2021/05/0YgCDW.png) Flutter 2.2 可在按键事件于 widget 层次结构内向上传播的过程中将其取消;例如,你可以将 TAB 键用于将焦点从 TextField 切换到其他元素 @@ -217,7 +217,7 @@ class ClearAction extends Action { } ``` -![一个糟糕的 TextField 示例,按下左箭头键或 ESC 键会清除文本]({{site.flutter-files-cn}}/posts/images/2021/05/hpCWg7.png) +![一个糟糕的 TextField 示例,按下左箭头键或 ESC 键会清除文本]({{site.flutter-files-cn}}posts/images/2021/05/hpCWg7.png) 一个糟糕的 TextField 示例,按下左箭头键或 ESC 键会清除文本 @@ -255,7 +255,7 @@ class HomePage extends StatelessWidget { 上述代码在桌面平台上运行时,将会显示一个滚动条: -![]({{site.flutter-files-cn}}/posts/images/2021/05/t8U8U6.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/t8U8U6.png) 如果你不喜欢滚动条的外观或不想让滚动条一直显示,可以设置 [`ScrollBarTheme`](https://api.flutter-io.cn/flutter/material/ThemeData/scrollbarTheme.html)。如果你不喜欢该默认行为,可以在应用层级或具体实例层级通过设置 [`ScrollBehavior`](https://api.flutter-io.cn/flutter/widgets/ScrollBehavior-class.html) 来对其进行更改。如需详细了解新的默认滚动条行为以及如何迁移代码以遵循新的最佳实践,请参阅 [Flutter 官方文档](https://docs.flutter.cn/release/breaking-changes/default-desktop-scrollbars)。 @@ -310,7 +310,7 @@ class HomePage extends StatelessWidget { 现在你可以自由使用任意换行的 TextSpan,只要其具备手势识别器,系统即会为其设置适当的鼠标指针。 -![]({{site.flutter-files-cn}}/posts/images/2021/05/fnraQI.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/fnraQI.png) 在此版本中,`TextSpan` 除了支持 `mouseCursor`,还支持 `onEnter` 和 `onExit`。这些改进看似细小,对用户体验的影响却大,能让 Flutter 应用提供更贴近用户预期的使用体验。 @@ -330,7 +330,7 @@ class HomePage extends StatelessWidget { 为解决这个问题,我们已在 dev 渠道中发布 [Skia 针对 Metal 新增对着色器预热的支持](https://github.com/flutter/flutter/issues/79298) 这一预览版功能。Flutter 现在会通过 Skia 在第一个帧工作负载开始之前对捆绑的着色器进行编译。 -![应用启动期间的预编译操作的跟踪记录]({{site.flutter-files-cn}}/posts/images/2021/05/6E40Xj.png) +![应用启动期间的预编译操作的跟踪记录]({{site.flutter-files-cn}}posts/images/2021/05/6E40Xj.png) 应用启动期间的预编译操作的跟踪记录 @@ -357,7 +357,7 @@ class HomePage extends StatelessWidget { 在 Android 平台上,此版本利用 Dart 的分拆式 AOT 编译功能来 [让 Flutter 应用能够在运行时下载内含预先编译的代码和资源的模块](https://github.com/flutter/flutter/pull/76192)。我们将这种可安装的分拆模块称为 "延迟加载组件"。由于可在需要时才下载代码和资源,应用的初始安装体积显著缩小。例如,我们实现了一个特殊版本的 Flutter Gallery 应用,将其中所有案例和 demo 都设为延迟加载,从而将初始安装体积缩减了 46%。 -![在 Flutter Gallery 应用中下载 Crane 案例]({{site.flutter-files-cn}}/posts/images/2021/05/TJQbmZ.gif) +![在 Flutter Gallery 应用中下载 Crane 案例]({{site.flutter-files-cn}}posts/images/2021/05/TJQbmZ.gif) 在 Flutter Gallery 应用中下载 Crane 案例 @@ -386,13 +386,13 @@ $ flutter run -d winuwp 由于构建的是在 Windows 沙盒环境中运行的 Windows UWP 应用,你需要在开发期间对应用的防火墙进行 localhost 穿透设置,以实现热重载和调试器断点等功能。为此,你可以按照 [Flutter 桌面文档页面](http://flutter.cn/desktop/#windows-uwp) 上的说明使用 *checknetisolation* 进行操作。完成相关操作后,你就可以在 Windows 上以 UWP 应用的形式运行你喜爱的 Flutter 应用了。 -![在 Windows UWP 容器中运行你喜爱的 Flutter 应用]({{site.flutter-files-cn}}/posts/images/2021/05/KxCQcf.png) +![在 Windows UWP 容器中运行你喜爱的 Flutter 应用]({{site.flutter-files-cn}}posts/images/2021/05/KxCQcf.png) 在 Windows UWP 容器中运行你喜爱的 Flutter 应用 -当然,你也可以运行一些更丰富有趣的 UWP 应用,例如这个 [视频]({{site.flutter-files-cn}}/posts/images/2021/05/q5hepO.mp4) 中在 Xbox 上运行的 Flutter 应用。 +当然,你也可以运行一些更丰富有趣的 UWP 应用,例如这个 [视频]({{site.flutter-files-cn}}posts/images/2021/05/q5hepO.mp4) 中在 Xbox 上运行的 Flutter 应用。 - + 我们要特此致谢 [clarkezone](https://github.com/clarkezone),从我加入 Flutter 团队时起,他就一直投身于实现这项功能。如需详细了解 Windows UWP alpha 版支持,请参阅 [官方文档](http://flutter.cn/desktop/#windows-uwp)。 @@ -400,7 +400,7 @@ $ flutter run -d winuwp 这项杰出贡献来自于 Flutter 社区的 Sony 软件工程师 [HidenoriMatsubayashi](https://github.com/HidenoriMatsubayashi)。他提交的 [ARM64 Linux 目标支持](https://github.com/flutter/flutter/pull/61221) 这条 PR 让你可以在 ARM64 Linux 机器上构建和运行 Flutter 应用。 -![在 ARM64 Linux 机器上运行你喜爱的 Flutter 应用]({{site.flutter-files-cn}}/posts/images/2021/05/tpaxju.png) +![在 ARM64 Linux 机器上运行你喜爱的 Flutter 应用]({{site.flutter-files-cn}}posts/images/2021/05/tpaxju.png) 在 ARM64 Linux 机器上运行你喜爱的 Flutter 应用 @@ -436,7 +436,7 @@ googleapis 插件为 185 个 [Google API](https://developers.google.cn/api-clien win32 package 堪称一件工程杰作,它使用 [Dart FFI](https://dart.cn/guides/libraries/c-interop) 封装了大部分常用 Win32 API 接口,让 Dart 代码无需依赖 C 编译器或 Windows SDK 即可使用这些 API。随着 Flutter 在 Windows 平台上越来越受关注,win32 package 成为了许多热门插件的关键依赖项,其中包括最热门 Flutter package 之一的 [path_provider](https://pub.flutter-io.cn/packages/path_provider)。为了挑战极限,其作者 [timsneath](https://github.com/timsneath) 创下了一些惊人壮举,例如使用纯 Win32 和纯 Dart 来实现 [notepad](https://github.com/timsneath/win32/tree/main/example/notepad) (记事本)、[snake](https://github.com/timsneath/win32/blob/main/example/snake.dart) (贪吃蛇) 和 [tetris](https://github.com/timsneath/win32/tree/main/example/tetris) (俄罗斯方块)。 -![仅使用 Dart FFI 和 Win32 接口实现的在 Windows 平台运行的俄罗斯方块游戏]({{site.flutter-files-cn}}/posts/images/2021/05/86UACo.png) +![仅使用 Dart FFI 和 Win32 接口实现的在 Windows 平台运行的俄罗斯方块游戏]({{site.flutter-files-cn}}posts/images/2021/05/86UACo.png) 仅使用 Dart FFI 和 Win32 接口实现的在 Windows 平台运行的俄罗斯方块游戏 @@ -460,13 +460,13 @@ FlutterFire 现在还支持 Firebase 新推出的 beta 版产品 [Firebase App C 内存跟踪方面的第一项改进: 跟踪对象的内存分配位置。这有助于找出导致内存泄漏的代码。 -![Flutter DevTools 内存标签页分配栈轨迹]({{site.flutter-files-cn}}/posts/images/2021/05/bi1jDH.png) +![Flutter DevTools 内存标签页分配栈轨迹]({{site.flutter-files-cn}}posts/images/2021/05/bi1jDH.png) Flutter DevTools 内存标签页分配栈轨迹 第二项改进: 向内存时间轴中注入自定义信息。这让你可以根据应用的具体情况添加标注,例如标出内存密集型工作的开始点和结束点,以验证是否适当地执行了清理。 -![Flutter DevTools 时间轴标签页自定义内存事件]({{site.flutter-files-cn}}/posts/images/2021/05/xQYYra.png) +![Flutter DevTools 时间轴标签页自定义内存事件]({{site.flutter-files-cn}}posts/images/2021/05/xQYYra.png) Flutter DevTools 时间轴标签页自定义内存事件 @@ -474,7 +474,7 @@ Flutter DevTools 时间轴标签页自定义内存事件 你需要排查的问题并不仅仅是那些与 Flutter 框架相关的运行时问题,有时还有与所依赖 package 相关的问题。随着 pub.dev 上的 Flutter 兼容 package 数量突破 15,000 大关,你的应用使用的 package 数量也很可能随之增长。有鉴于此,Flutter DevTools 中新加入了一个实验性的 **Provider** 标签页,由 [provider package](http://pub.flutter-io.cn/packages/provider) 本身及其他很多出色软件的开发者 [Remi Roussel](https://github.com/rrousselGit) 倾力打造。如果你运行的是最新版 Flutter,在你对一个包含 provider 插件的 Flutter 应用进行调试时,**Provider** 标签页就会自动显示。 -![实战演示: Flutter DevTools Provider 标签页]({{site.flutter-files-cn}}/posts/images/2021/05/Q04qlm.gif) +![实战演示: Flutter DevTools Provider 标签页]({{site.flutter-files-cn}}posts/images/2021/05/Q04qlm.gif) 实战演示: Flutter DevTools Provider 标签页 @@ -492,13 +492,13 @@ Provider 标签页会向你展示每个 provider 的相关数据,并会实时 在此版本中,针对 Flutter 的 Visual Studio Code 和 IntelliJ/Android Studio IDE 扩展也得到了更新。例如,Visual Studio Code 扩展现在支持两项额外的 Dart 代码重构: 内联函数和内联本地变量。 -![实战演示: 新的 "内联函数" Dart 重构]({{site.flutter-files-cn}}/posts/images/2021/05/bBJcfx.gif) +![实战演示: 新的 "内联函数" Dart 重构]({{site.flutter-files-cn}}posts/images/2021/05/bBJcfx.gif) 实战演示: 新的 "内联函数" Dart 重构 在 Android Studio/IntelliJ 扩展中,我们新增了一个在控制台中输出所有堆栈轨迹的选项。 -![你现在可以输出所有堆栈轨迹,而不仅限于第一条]({{site.flutter-files-cn}}/posts/images/2021/05/KKLGup.png) +![你现在可以输出所有堆栈轨迹,而不仅限于第一条]({{site.flutter-files-cn}}posts/images/2021/05/KKLGup.png) 你现在可以输出所有堆栈轨迹,而不仅限于第一条 @@ -515,7 +515,7 @@ Provider 标签页会向你展示每个 provider 的相关数据,并会实时 为了确保 Flutter 开发者社区蓬勃发展的同时让相关文档也能跟上脚步,Dart 和 Flutter 团队始终在想方设法改进和拓展相关培训内容的制作方法。在此版本中,我们为 DartPad 添加了一个新的分步式界面,让开发者在学习讲师主导的课程/讲座时可以方便地随堂动手实践。 -![实战演示: DartPad 课程/讲座随堂实践]({{site.flutter-files-cn}}/posts/images/2021/05/rOt9q7.png) +![实战演示: DartPad 课程/讲座随堂实践]({{site.flutter-files-cn}}posts/images/2021/05/rOt9q7.png) 实战演示: DartPad 课程/讲座随堂实践 @@ -525,9 +525,9 @@ Provider 标签页会向你展示每个 provider 的相关数据,并会实时 **社区聚焦: FlutterFlow** -FlutterFlow 是一个 "低代码" (low code) 应用设计和开发工具,用于在浏览器中构建应用。它提供了一个 "所见即所得" 环境,让你可根据实际 Firebase 数据来设计横跨多个页面的应用布局。此工具的目标是让你能够轻松执行大部分常见操作,并尽量减少你自己需要编写的代码量。实际上,在一次演示中,演示者不到一个小时就使用此工具构建出了一个包含多个页面、可帮助用户游览大都会艺术博物馆的完整移动应用,整个过程没有写一行代码。你可以在 YouTube 上观看整个过程的 [视频记录]({{site.flutter-files-cn}}/posts/images/2021/05/ilIETB.mp4)。 +FlutterFlow 是一个 "低代码" (low code) 应用设计和开发工具,用于在浏览器中构建应用。它提供了一个 "所见即所得" 环境,让你可根据实际 Firebase 数据来设计横跨多个页面的应用布局。此工具的目标是让你能够轻松执行大部分常见操作,并尽量减少你自己需要编写的代码量。实际上,在一次演示中,演示者不到一个小时就使用此工具构建出了一个包含多个页面、可帮助用户游览大都会艺术博物馆的完整移动应用,整个过程没有写一行代码。你可以在 YouTube 上观看整个过程的 [视频记录]({{site.flutter-files-cn}}posts/images/2021/05/ilIETB.mp4)。 - + ## **对兼容性有影响的重大变更** @@ -542,6 +542,6 @@ FlutterFlow 是一个 "低代码" (low code) 应用设计和开发工具,用 Google Flutter 团队全体同仁谨此向大家致以诚挚谢意!我们要感谢 Flutter 社区的每一个人,Flutter 取得的成绩离不开大家的每一份贡献。如今,Play 商店中有超过八分之一的新应用是采用 Flutter 构建而成,仅在 Play 商店就收录了多达 20 万款 Flutter 应用。Flutter 的迅猛发展势头出人意表。世界各地大大小小的应用团队都使用 Flutter 进行开发,为诸多平台上的用户打造优质体验。谢谢大家选择 Flutter! -![]({{site.flutter-files-cn}}/posts/images/2021/05/KTpWHI.png) +![]({{site.flutter-files-cn}}posts/images/2021/05/KTpWHI.png) 最后,以免你错过,不要忘了体验下在本次 I/O 大会推出的 [I/O Photo Booth web 应用](https://photobooth.flutter.cn/#/),它是由 Flutter 和 Firebase 构建而成的 web 应用,让你可以和 Dash 合拍萌萌的大头照。我们还 [开放了其源代码](https://github.com/flutter/photobooth),方便你进一步了解 Flutter web 最佳实践、相机插件 web 支持以及如何使用 Cloud Functions 函数来生成自定义社交内容。机不可失,赶紧一睹为快吧! diff --git a/src/content/posts/whats-new-in-flutter-2-5.md b/src/content/posts/whats-new-in-flutter-2-5.md index fd2af8d512..c7ed084a18 100644 --- a/src/content/posts/whats-new-in-flutter-2-5.md +++ b/src/content/posts/whats-new-in-flutter-2-5.md @@ -19,7 +19,7 @@ Flutter 2.5 带来了一些重要的性能和工具改进,以帮助开发者 举个例子,在我们的一个测试中,播放了一个 20 秒的 GIF 动画,GC 的次数从需要 400 次下降到只需 4 次。更少的主要 GC,意味着更少的涉及图像出现和消失的动画卡顿,更少的 CPU 和电量消耗。 -Flutter 2.5 的另一项性能改进是优化了 iOS 上 Dart 和 Objective-C/Swift、Android 上 Dart 和 Java/Kotlin 之间相互通信的延迟。作为 [调整消息通道]({{site.flutter-files-cn}}/flutter-design-docs/2021_Platform_Channel%20Performance_Tuneup.pdf "调整消息通道") 的一部分,我们从消息编解码器中移除了不必要的拷贝,在不同内容的大小和设备上减少了高达 50% 的延迟 (详见 [#25988](https://github.com/flutter/engine/pull/25988 "#25988")、[#26331](https://github.com/flutter/engine/pull/26331 "#26331"))。 +Flutter 2.5 的另一项性能改进是优化了 iOS 上 Dart 和 Objective-C/Swift、Android 上 Dart 和 Java/Kotlin 之间相互通信的延迟。作为 [调整消息通道]({{site.flutter-files-cn}}flutter-design-docs/2021_Platform_Channel%20Performance_Tuneup.pdf "调整消息通道") 的一部分,我们从消息编解码器中移除了不必要的拷贝,在不同内容的大小和设备上减少了高达 50% 的延迟 (详见 [#25988](https://github.com/flutter/engine/pull/25988 "#25988")、[#26331](https://github.com/flutter/engine/pull/26331 "#26331"))。 ![调整前后的 iOS 消息延迟](https://gglh6.g.forms.cn/gc-YrPSIwirzTDVJ6FqGK5Lugn1YsA_l5h8shX8W5ROi_2doeJO8h-835CDX4wsDBAyjMwQGp-Ytr9dBLnswV6xMOWWJJzAAkupJ62-Gy0IRxk-9bbtuq0r4OdshSzuAmTwS6oEI=s0) @@ -204,7 +204,7 @@ Visual Studio Code 测试运行器看起来与当前的 Dart 和 Flutter 测试 `$ flutter create -t skeleton my_app` -![新的 Flutter Skeleton 模板演示]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-5/flutter-skeleton-demo.gif) +![新的 Flutter Skeleton 模板演示]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-5/flutter-skeleton-demo.gif) 新的 Skeleton 模板,可生成包含两页的列表视图 Flutter 应用 (带详细视图),并遵循社区最佳实践。它的开发经过了大量的内部和外部评审,以提供一个更好的基础来构建一个达到产品级品质的应用。它支持以下功能: diff --git a/src/content/posts/whats-new-in-flutter-2-8.md b/src/content/posts/whats-new-in-flutter-2-8.md index edb66692ba..3f1d68f75e 100644 --- a/src/content/posts/whats-new-in-flutter-2-8.md +++ b/src/content/posts/whats-new-in-flutter-2-8.md @@ -31,7 +31,7 @@ Flutter 的首要目标是一如既往地保证其质量。我们花费了大量 某些场景下,开发者希望能同时看到 Flutter 和 Android 的性能追踪事件,又或者是在生产模式下查看追踪事件来更好地了解应用的性能问题。为了这一需求,Flutter 2.8 现在可以选择在应用启动后,将性能追踪事件发送至 Android 的事件记录器,在生产模式下也同样如此。 -![Flutter 性能追踪事件现在显示在 Android systrace 记录工具中(底部)]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/flutter-trace-event.png) +![Flutter 性能追踪事件现在显示在 Android systrace 记录工具中(底部)]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/flutter-trace-event.png) 此外,一些开发人员想要更多的关于光栅缓存行为的性能跟踪信息,以减少制作动画效果时的卡顿,这允许 Flutter 快速地对昂贵的、重复使用的图片进行复用而不是重新绘制。性能跟踪中的新的 **流事件** 让开发人员可以跟踪光栅缓存图片的生命周期。 @@ -39,15 +39,15 @@ Flutter 的首要目标是一如既往地保证其质量。我们花费了大量 对于调试性能问题,新版的开发者工具 (DevTools) 添加了一个新的「增强跟踪」功能,用来帮助开发者诊断消耗较大的构建、布局和绘制操作引起的 UI 卡顿。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/enable-trace-feat.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/enable-trace-feat.png) 启用任何一个追踪功能后,时间轴中将视情况展示 Widget 的构建、RenderObject 布局和 RenderObject 绘制的事件。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/render-draw-event.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/render-draw-event.png) 此外,新版的开发者工具也增加了应用启动性能的分析支持。该配置文件包含了从 Dart VM 初始化到第一帧 Flutter 渲染的 CPU 样本。在你按下「Profile app start up」按钮并加载应用启动配置文件后,你将看到为配置文件选择了「AppStartUp」标签。你还可以通过在可用用户标签列表中选择此用户标签过滤器(如果存在)来加载应用启动配置文件。选择此标签会显示你的应用启动的个人资料数据。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/profile-app-start.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/profile-app-start.png) ### Web 平台的平台视图 (PlatformView) @@ -64,7 +64,7 @@ Flutter 不仅仅是框架、引擎和工具——pub.dev 上现有超过 2w 个 首先也是最重要的是,[Google Mobile SDK for Flutter 已于 11 月正式发布](https://medium.com/flutter/announcing-general-availability-for-the-google-mobile-ads-sdk-for-flutter-574e51ea6783)。此版本支持 5 种广告格式,集成了 AdMob 和 Ad Manager 支持,并包含一个新的中转功能的测试版,可以帮助你优化广告展现的效果。有关将 Google Ads 集成到 Flutter 应用以及其他货币化选项的更多信息,请查看 [Flutter 网站上的页面](https://flutter.cn/monetization)。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/admob-sdk-flutter-ga.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/admob-sdk-flutter-ga.png) ### WebView 3.0 @@ -114,7 +114,7 @@ class _HomePageState extends State { 在 Flutter Web 上运行时,它会按你的预期工作: -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/webview_flutter-demo-in-2-8.gif) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/webview_flutter-demo-in-2-8.gif) 请注意,当前 `webview_flutter` 的 web 实现有许多限制,因为它是使用 iframe 构建的, iframe 仅支持简单的 URL 加载,无法控制加载的内容或与加载的内容交互。 @@ -139,7 +139,7 @@ Flutter 生态系统委员会再次召开会议,将以下 package 指定为 Fl * [dart_code_metrics](https://pub.flutter-io.cn/packages/dart_code_metrics): 一个帮助你分析和提高代码质量的静态分析工具; * 以及有着漂亮界面的 package: [flex_color_scheme](https://pub.flutter-io.cn/packages/flex_color_scheme)、[flutter_svg](https://pub.flutter-io.cn/packages/flutter_svg)、[feedback](https://pub.flutter-io.cn/packages/feedback)、[toggle_switch](https://pub.flutter-io.cn/packages/toggle_switch) 和 [auto_size_text](https://pub.flutter-io.cn/packages/auto_size_text)。 -![使用 flex_color_scheme 构建的可灵活折叠的应用]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/flex_color_scheme-demo-in-2-8.gif) +![使用 flex_color_scheme 构建的可灵活折叠的应用]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/flex_color_scheme-demo-in-2-8.gif) 祝贺这些 package 的作者,并感谢你通过你的辛勤工作支持 Flutter 社区。如果你有兴趣提名你最喜欢的 Flutter package 加入 Flutter Favorite 嘉奖,请按照 [Flutter Favorite 计划页面](https://docs.flutter.cn/development/packages-and-plugins/favorites) 上的指南和说明进行操作。 @@ -185,7 +185,7 @@ Flutter 生态中另一个重要组成是 FlutterFire,大约有三分之二的 [The FlutterFire plugins](http://firebase.flutter.dev/) 几乎已经全部从测试版转为文稳定版,可用于生产环境。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/flutterfire-website.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/flutterfire-website.png) Android、iOS 和网页版的插件已转为稳定版,包括 [Analytics](https://firebase.flutter.dev/docs/analytics/overview)、[Dynamic Links](https://firebase.flutter.dev/docs/dynamic-links/overview)、[In-App Messaging](https://firebase.flutter.dev/docs/in-app-messaging/overview/)、[Performance Monitoring](https://firebase.flutter.dev/docs/performance/overview)、[Realtime Database](https://firebase.flutter.dev/docs/database/overview)、[Remote Config](https://firebase.flutter.dev/docs/remote-config/overview) 和 [Installations](https://firebase.flutter.dev/docs/installations/overview)。有些 Firebase 库本身在部分平台上仍处于测试阶段,所以它的 Flutter 插件也会是测试版状态,比如 App Check 在 macOS 平台。但类似实时数据库 (Realtime Database)、分析 (Analytics)、远程配置 (Remote Config) 等 FlutterFire 插件已经在生产环境中可用了,可以选择试试看! @@ -222,7 +222,7 @@ static const FirebaseOptions web = FirebaseOptions( 如果你想为每个平台的初始化自定义数据结构的话,请使用这个 `flutterfire` 命令行工具完成: -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/flutterfire-cli.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/flutterfire-cli.png) 这个命令行工具会从每个平台的子文件夹中找到唯一的 bundle ID,进而用它来查找以及创建匹配的特定平台下的 Firebase 工程详情。这意味着你将省去下载 `.json`文件到 Android 工程、下载 `.plist` 文件到 iOS 和 macOS 工程的时间了,当然,也无需再复制粘贴代码到你的 Web 工程了。换句话说,无论你的应用要为哪些平台初始化 Firebase,这句代码都可以帮你做到。当然,这也可能不是唯一一处初始化代码的地方,比如你需要在 Android 或 iOS 中创建 Crashlytics 调试符号 (dSYM) 的时候。但至少可以针对新的 Firebase 工程能够快速跑起来。 @@ -230,13 +230,13 @@ static const FirebaseOptions web = FirebaseOptions( 由于我们可以只在 Dart 代码中初始化并使用 FlutterFire,那 DartPad 自然也就支持使用 Firebase 啦: -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/dartpad-flutterfire-demo.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/dartpad-flutterfire-demo.png) 这里有一个使用 Flutter 和 Firebase 构建的在线聊天的演示,所有这些都可以在 DartPad 中直接使用而无需安装任何内容。DartPad 对 Firebase 的支持已经包括了核心 API、身份验证和 Firestore,随着时间的推进,未来 DartPad 会支持更多 Firebase 服务。 另一个支持是在 FlutterFire 文档中直接内嵌了 DartPad 实例,比如 [Firestore 的示例页面](https://firebase.flutter.dev/docs/firestore/example/): -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/firestore-docs-with-dartpad.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/firestore-docs-with-dartpad.png) 在这个示例中,你将看到 Cloud Firestore 的文档以及 [示例应用](https://github.com/FirebaseExtended/flutterfire/tree/master/packages/cloud_firestore/cloud_firestore/example) 的代码,并且可以在浏览器中直接运行和编辑,无需安装任何软件。 @@ -246,7 +246,7 @@ static const FirebaseOptions web = FirebaseOptions( 今天我们很希望大家尝试一个新的 package,名为 [flutterfire_ui](https://pub.dev/packages/flutterfire_ui)。这个 package 可以用少量的代码构建一个基本的身份验证体验,例如,在 Firebase 项目中设置了使用邮箱和 Google 账号登录: -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/firebase-console-auth-page.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/firebase-console-auth-page.png) 通过这个配置你可以通过下面的代码构建一个身份验证: @@ -301,11 +301,11 @@ class AuthenticationGate extends StatelessWidget { 再加入一些其他配置的话,你还可以添加一些图像和自定义文本 (详情见 [本文档](https://firebase.flutter.dev/docs/ui/overview)),从而为你提供更全面的用户身份验证体验: -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/flutterfire_ui-auth-mobile.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/flutterfire_ui-auth-mobile.png) 上面这个截图是移动端的身份认证,不过因为 `flutterfire_ui` 的 UI 是响应性设计,因此在桌面浏览器上,它会是这样的效果: -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/flutterfire_ui-auth-desktop-browser.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/flutterfire_ui-auth-desktop-browser.png) 用户可以使用邮箱地址和密码直接完成登录,如果他们选择使用通过谷歌身份验证登录,不论是在移动端、Web 端还是桌面端,则将会看到常见的 Google 身份验证流程。如果用户还没有账户,他们可以点击注册按钮进入注册流程。用户登录之后就会有电子邮件验证、密码重置、登出以及社交账户绑定功能。通过电子邮件和密码的身份验证适用于所有平台,并支持使用 Google、Facebook 和 Twitter 账号登录,以及在 iOS 系统上支持通过 Apple ID 登录。`flutterfire_ui` 的身份认证支持多种场景和导航方案以及自定义和本地化选项等。查看 [FlutterFire UI 的文档](https://firebase.flutter.dev/docs/ui/overview/) 了解更多。 @@ -366,7 +366,7 @@ class UserListView extends StatelessWidget { 实际的运行效果如下: -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/flutterfire_ui-contact-demo.gif) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/flutterfire_ui-contact-demo.gif) 或者你想为用户提供对表格数据的增删改查功能,你可以使用 `FirestoreDataTable`: @@ -400,7 +400,7 @@ class FirestoreTableStory extends StatelessWidget { 效果是这样的: -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/firebase-table-crud-demo.gif) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/firebase-table-crud-demo.gif) 有关身份验证、列表视图和数据表的更多信息,[请查阅 flutterfire_ui 文档](https://firebase.flutter.dev/docs/ui/overview/)。这个 package 仍处于预览状态,可能会加入更多新的特性,如果你有任何使用的问题或者新的特性需求,请 [在 GitHub repo 里参与我们的讨论](https://github.com/FirebaseExtended/flutterfire/discussions/6978)。 @@ -440,25 +440,25 @@ Flutter 2.8 版本在 Windows、macOS 和 Linux 稳定版本的道路上又迈 此外,我们还在继续 [向 Flutter 扩展视觉密度的定义](https://github.com/flutter/flutter/pull/89353),暴露对话框对齐方式的设置,以便开发者可以实现更加友好的桌面 UI。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/flutter-desktop-dialog-demo.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/flutter-desktop-dialog-demo.png) 最后,Flutter 团队并不是唯一一个在为了 Flutter desktop 付出心血的团队。举个例子,Canonical 的桌面团队正在与 Invertase 合作,在 Linux 和 Windows 上开发最流行的 Flutter Firebase 插件。 你可以在 [Invertase 博客上](https://invertase.io/blog/announcing-flutterfire-desktop) 阅读有关预览版的更多信息。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/invertase-flutterfire-desktop-preview.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/invertase-flutterfire-desktop-preview.png) ## DartPad 如果没有工具的改进,那么这个 Flutter 新版本的发布是不完整的。我们将重点介绍 DartPad 的改进,其中最大的改进是对更多软件包的支持。事实上,目前共有 23 个 package 可供导入使用。除了几个 Firebase 服务之外,该列表还包括诸如 `bloc`、`characters`、`collection`、`google_fonts` 和 `flutter_riverpod` 等流行的 package。 DartPad 团队会继续添加新的 package,如果你想查看当前支持哪些 package 的话,可以单击右下角的信息图标。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/dartpad-support-packages-1211.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/dartpad-support-packages-1211.png) 如果你想了解未来我们向 DartPad 添加新 package 的计划,请查看 [Dart wiki 上的这篇文章](https://github.com/dart-lang/dart-pad/wiki/Adding-support-for-a-new-package)。 还有另一个新的 DartPad 功能也非常方便,在此之前,DartPad 总是以运行最新的稳定版本运行。在新版本中,你可以使用状态栏中新的 **Channel 菜单** 来切换到使用最新的 Beta 渠道版本以及先前稳定版本 (我们称为 "old channel" 旧渠道)。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2021/whats-new-in-flutter-2-8/dartpad-using-channel-switch.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2021/whats-new-in-flutter-2-8/dartpad-using-channel-switch.png) DartPad 里旧渠道的使用场景比如你正在撰写一篇博客文章,而最新的稳定版本还是特别流行,那这将非常有用。 diff --git a/src/content/posts/whats-new-in-flutter-3-16.md b/src/content/posts/whats-new-in-flutter-3-16.md index bed4df73bf..05358d3306 100644 --- a/src/content/posts/whats-new-in-flutter-3-16.md +++ b/src/content/posts/whats-new-in-flutter-3-16.md @@ -3,7 +3,7 @@ title: 了解 Flutter 3.16 功能更新 toc: true --- -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/QUKao8.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/QUKao8.png) *作者 / Kevin Chisholm* @@ -29,7 +29,7 @@ Material 库已更新至 3.10 版本 (2023 年 5 月),以匹配最新的 Mater Material 3 组件的外观主要由 [ThemeData.colorScheme] 和 [ThemeData.textTheme] 的值决定。ColorScheme.fromSeed() 是 Material 3 配色方案的首选方式,可以生成既美观又符合无障碍对比度要求的深色和浅色方案。你还可以使用 ColorScheme.fromImageProvider,以根据图像中的主色调生成配色方案。如果你想进一步自定义 Material 3 组件的外观,可以将组件主题添加到 ThemeData,例如 [ThemeData.segmentedButtonTheme](https://api.flutter.dev/flutter/material/SegmentedButtonThemeData-class.html) 或 [ThemeData.snackBarTheme](https://api.flutter.dev/flutter/material/SnackBarThemeData-class.html)。非空组件主题属性会覆盖组件的 API 文档中指定的默认值。 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/K8Yv1S.gif) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/K8Yv1S.gif) ## **支持 Material 3 动效** @@ -39,7 +39,7 @@ Material 3 组件的外观主要由 [ThemeData.colorScheme] 和 [ThemeData.textT 在原生 iOS 系统上,用户现在可以选择文本并启动提供多种标准服务的共享菜单。在此版本中,我们添加了查找、搜索和共享选项。 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/1xdYTo.gif) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/1xdYTo.gif) **用于指定全局文本缩放系数的 TextScaler** @@ -53,11 +53,11 @@ Flutter 的 SelectionArea 经过更新,可支持与使用鼠标单击或双击 * 双击: 选择点击位置的字词。 * 双击 + 拖动: 扩展所选词块。 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/WNxsJW.gif) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/WNxsJW.gif) * 长按 + 拖动: 扩展所选词块。 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/DV15eS.gif) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/DV15eS.gif) **可在焦点 widget 上操作的菜单项** @@ -69,11 +69,11 @@ Flutter 的 SelectionArea 经过更新,可支持与使用鼠标单击或双击 Mac 平台上的 Flutter 应用现在会按照《Apple 人机界面指南》对菜单中的快捷方式修饰符进行排序。([#129309](https://github.com/flutter/flutter/pull/129309)) -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/6X7zcv.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/6X7zcv.png) △ 排序前 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/SpqOqx.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/SpqOqx.png) △ 排序后 @@ -132,7 +132,7 @@ expect( 在此版本中,我们很高兴地与你分享,Impeller 已在 Android 上准备就绪,可用于在稳定渠道上收集预览版反馈。自今年早些时候,团队一直在努力为 Impeller 开发 Vulkan 后端,此次预览版包括收集 Impeller 在支持 Vulkan 的设备上表现的相关反馈。 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/aI8i0b.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/aI8i0b.png) △ 这张图表显示了在过去一年里,在对 Impeller 的 Vulkan 后端上运行的 Flutter Gallery 进行的转换性能基准测试中,99% 帧时间、90% 帧时间和平均帧光栅化时间都有所改善,由于卡顿更少、稳态帧率更高,用户可以直观地看到这些改善。在此测试结束时,由于我们从 Samsung S10 设备改用 Pixel 7 Pro 设备,导致数据大幅下降。尽管如此,趋势和整体结果仍然鼓舞人心。 @@ -162,7 +162,7 @@ expect( 除了关注 Vulkan 后端,自今年年初以来,团队还对 Impeller 中的文本性能进行了许多改进,这对 Android 和 iOS 都有好处。特别是我们改进了 Impeller 字形图集的管理以及在引擎的界面和光栅线程中划分文本工作负载的方式。因此,用户会注意到,即使处理繁重的文本工作负载,发生卡顿的情况也会减少。 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/CIjXNP.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/CIjXNP.png) △ 这张图表显示了在使用 Impeller 的 iPhone 11 上进行的其中一项大量文本基准测试中,99% 帧时间、90% 帧时间和平均帧光栅化时间均有减少 (以毫秒为单位)。特别是,90% 帧时间和平均帧光栅化时间几乎减半。 @@ -172,7 +172,7 @@ expect( 为了在采用异构多处理的移动设备上提供更好的性能支持,我们 [修改了引擎](https://github.com/flutter/engine/pull/45673),以便注重性能的线程 (例如,界面和光栅线程) 可适应设备更强大的内核。我们观察到,这一变化对一系列基准和设备产生了积极影响。在某些情况下,这种改善十分显著,99% 帧时间或 90% 帧时间至少减半。我们预计,经过此次更改后,无论在 Android 上使用 Skia 后端还是 Impeller 后端,用户都会注意到卡顿情况有所减少。在 iOS 设备上,因为更强大的内核和更弱的内核之间的差异较小,所以效果并不太明显。 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/k6NG07.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/k6NG07.png) △ 这张图表显示了,我们几乎所有 Android 基准和设备的最差帧时间、99% 帧时间、90% 帧时间以及平均帧构建时间和帧光栅化时间都有所改善。 @@ -186,11 +186,11 @@ expect( 在此版本中,Paint.enableDithering 属性被设置为 true,并且根据 [Flutter 的弃用策略](https://docs.flutter.dev/release/compatibility-policy#deprecation-policy) 已被弃用。抖动现在默认启用 (不再支持开发者可配置的抖动),你将不会再遇到渐变问题。你可以参阅 docs.flutter.dev 中的 [重大变更页面](https://docs.flutter.dev/release/breaking-changes/paint-enableDithering) 了解有关此更改的完整说明和迁移指南。 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/bQgAjF.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/bQgAjF.png) △ 之前 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/B5Hf62.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/B5Hf62.png) △ 之后 @@ -212,7 +212,7 @@ Flutter 时间轴事件现在显示在 Chrome DevTools 的性能面板中。([#1 你可以查看 [Web 应用的调试性能](https://docs.flutter.dev/perf/web-performance) 了解更多详细信息。 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/UPNvzF.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/UPNvzF.png) ## **Android** @@ -222,11 +222,11 @@ Flutter 时间轴事件现在显示在 Chrome DevTools 的性能面板中。([#1 通过此版本更新,使用鼠标在 Flutter 视图上的滚动速度与在 Android 设备上的滚动速度得以匹配。([44724](https://github.com/flutter/engine/pull/44724)) -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/ETOSTV.gif) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/ETOSTV.gif) 之前 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/7otNUZ.gif) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/7otNUZ.gif) 之后 @@ -234,7 +234,7 @@ Flutter 时间轴事件现在显示在 Chrome DevTools 的性能面板中。([#1 Android 14 版本包含预测性返回手势功能,允许你在设备上使用返回手势 "查看" 当前屏幕后面的主屏幕。此更新也为 Flutter 带来了预测性返回手势!你可以查看 [迁移指南](https://docs.flutter.dev/release/breaking-changes/android-predictive-back#migration-guide) 了解详情。 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/4KhBuj.gif) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/4KhBuj.gif) ## **iOS** @@ -242,7 +242,7 @@ Android 14 版本包含预测性返回手势功能,允许你在设备上使用 Flutter 现在可用于定位某些 [iOS 应用扩展](https://developer.apple.com/app-extensions/)。这意味着可以使用 Flutter widget 为某些类型的 iOS 应用扩展绘制界面。这并不适用于所有类型的应用扩展,因为 API (例如,主屏幕 widget) 或内存可能存在限制。 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/4KhBuj.gif) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/4KhBuj.gif) 你可以访问 docs.flutter.dev 中的 [添加 iOS 应用扩展](https://docs.flutter.dev/platform-integration/ios/app-extensions) 了解详情并查看有关如何定位 "共享" 扩展的示例。 @@ -254,7 +254,7 @@ Flutter 现在可用于定位某些 [iOS 应用扩展](https://developer.apple.c 敬请你持续关注更新的 Flutter Favorite 内容。你可以向委员会发送电子邮件消息 (电子邮件地址: [flutter-committee@googlegroups.com](mailto:flutter-committee@googlegroups.com)),来提名 package 或插件成为潜在的未来 Flutter Favorite,还可以提醒委员会注意任何其他问题。 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/nU9Tlr.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/nU9Tlr.png) **首届 package 生态系统网络峰会** @@ -264,7 +264,7 @@ Flutter 现在可用于定位某些 [iOS 应用扩展](https://developer.apple.c 利用 Google Maps Platform,你可以在 Google Cloud Console 的 "地图样式" 页面中自定义地图样式,而无需在每次更改样式时更新应用代码,即可享受自定义体验。 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/y6WCzC.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/y6WCzC.png) 如果你想要在 Flutter 中使用此功能,只需使用控制台中设置的地图 ID 即可引用地图: @@ -316,15 +316,15 @@ camera_android_camerax: ^0.5.0 感谢 [Provider](https://pub.flutter-io.cn/packages/provider)、[Drift](https://pub.flutter-io.cn/packages/drift) 和 [Patrol](https://pub.flutter-io.cn/packages/patrol) 的 package 作者,这个生态系统已经在构建中,你可以立即使用这些 package 的 DevTools 拓展! -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/YQrBwi.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/YQrBwi.png) Provider -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/q8T64M.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/q8T64M.png) Patrol -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/GLAYKW.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/GLAYKW.png) Drift @@ -337,7 +337,7 @@ Drift * 添加了对 DevTools 扩展的支持 * 添加了新的 "主" 屏幕,显示已连接应用的摘要 -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/pJ15aW.png) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/pJ15aW.png) 其他改进包括: @@ -361,7 +361,7 @@ Drift …… -![]({{site.flutter-files-cn}}/posts/images/2024/01/07/mZAXNH.jpg) +![]({{site.flutter-files-cn}}posts/images/2024/01/07/mZAXNH.jpg) ## **弃用和重大变更** diff --git a/src/content/posts/whats-new-in-flutter-3-19.md b/src/content/posts/whats-new-in-flutter-3-19.md index 4ddc7fe3fb..51ece04a90 100644 --- a/src/content/posts/whats-new-in-flutter-3-19.md +++ b/src/content/posts/whats-new-in-flutter-3-19.md @@ -19,7 +19,7 @@ Flutter 社区持续展现出令人赞叹的实力,有 168 名社区成员合 Google AI Dart SDK 已发布测试版,这使得你能够利用 Google 最新的 Gemini 系列 AI 模型,在 Dart 或 Flutter 应用中构建生成式 AI 功能。目前 pub.dev 上已提供 [google_generative_ai](https://pub.dev/packages/google_generative_ai "google_generative_ai") package。如要详细了解如何使用 Google AI Dart SDK 进行开发,你可以参阅 [此博文](https://medium.com/flutter/harness-the-gemini-api-in-your-dart-and-flutter-apps-00573e560381 "此博文"),或者直接查阅 [Dart 快速入门](https://ai.google.dev/tutorials/dart_quickstart "Dart 快速入门") 教程。 -![]({{site.flutter-files-cn}}/posts/images/2024/04/02/qgbYvO.jpg) +![]({{site.flutter-files-cn}}posts/images/2024/04/02/qgbYvO.jpg) ## **框架** @@ -85,7 +85,7 @@ Flutter 社区成员 [@AcarFurkan](https://github.com/AcarFurkan "@AcarFurkan") 在 Impeller 框架下,使用 Metal 的 iOS、macOS、模拟器环境中,以及支持 Vulkan 的 Android 设备中,Flutter 引擎现会在调试 build 和配置文件 build 中为时间轴上的每一帧报告 GPU 时间。这些 GPU 帧时间数据可以在 DevTools 的 "GPUTracer" 标题下进行查看。 -![]({{site.flutter-files-cn}}/posts/images/2024/04/02/yRc55g.png) +![]({{site.flutter-files-cn}}posts/images/2024/04/02/yRc55g.png) 请注意,由于不支持 Vulkan 的 Android 设备可能会错误报告其对于查询 GPU 时间的支持情况,因此,在这些设备上,Impeller 的 GPU 跟踪功能只能通过在 AndroidManifest.xml 文件中设置标志来启用。 @@ -107,7 +107,7 @@ Flutter 社区成员 [@AcarFurkan](https://github.com/AcarFurkan "@AcarFurkan") 此外,Impeller 不再对每一个背景滤镜都 [无条件地存储模板缓冲区](https://github.com/flutter/engine/pull/47397 "无条件地存储模板缓冲区")。相反,它现在会记录任何影响剪辑的操作,并在为背景滤镜恢复保存层时,将这些操作重放到一个新的模板缓冲区中。 -![]({{site.flutter-files-cn}}/posts/images/2024/04/02/u9wePi.png) +![]({{site.flutter-files-cn}}posts/images/2024/04/02/u9wePi.png) 通过这一变化,我们在采用 Vulkan 后端运行 Impeller 的 Pixel 7 Pro 上,对动画高级混合模式进行基准测试时,平均 GPU 帧时间从 55 毫秒显著提高到了 16 毫秒。同时,90% 的光栅线程 CPU 时间也从大约 110 毫秒下降到了 22 毫秒。 @@ -121,7 +121,7 @@ Flutter 社区成员 [@AcarFurkan](https://github.com/AcarFurkan "@AcarFurkan") 希望这款工具能成为简化你深层链接实现过程的第一步。我们将持续致力于为 iOS 平台提供 Web 检查支持,并在 iOS 和 Android 两个平台上都提供应用内检查支持! -![]({{site.flutter-files-cn}}/posts/images/2024/04/02/L4Lh5X.png) +![]({{site.flutter-files-cn}}posts/images/2024/04/02/L4Lh5X.png) ### **Share.invoke 支持** @@ -147,7 +147,7 @@ Android 应用可以添加自定义的文本选择菜单项,这些菜单项将 现在,Flutter 在 iOS 上的文本看起来更加紧凑且更接近原生风格。按照 Apple 的设计指南,iOS 上较小的字体应该排列得更为宽松以便在移动设备上阅读时更加舒适,而较大的字体则应设计得更为紧凑,以节省空间。在此之前,无论字号大小,我们都错误地采用了较为宽松的小字号样式。而现在,默认情况下 Flutter 将为较大的文本使用更为紧凑的字体样式。 -![]({{site.flutter-files-cn}}/posts/images/2024/04/02/rhliZA.png) +![]({{site.flutter-files-cn}}posts/images/2024/04/02/rhliZA.png) ### **DevTools** @@ -156,7 +156,7 @@ Android 应用可以添加自定义的文本选择菜单项,这些菜单项将 此版本的一些 DevTools 亮点包括: * 在 DevTools 中添加了一个新功能和屏幕,用于验证 Android 平台上的深层链接设置。 -* 在 "**增强跟踪**" (Enhance Tracing) 菜单中添加了一个选项,用于跟踪平台渠道活动。这对于带有插件的应用很有帮助。![]({{site.flutter-files-cn}}/posts/images/2024/04/02/zITKLa.png) +* 在 "**增强跟踪**" (Enhance Tracing) 菜单中添加了一个选项,用于跟踪平台渠道活动。这对于带有插件的应用很有帮助。![]({{site.flutter-files-cn}}posts/images/2024/04/02/zITKLa.png) * 性能和 CPU 分析器屏幕现在即使在没有连接任何应用的情况下也可访问。之前通过 DevTools 保存的性能数据或 CPU 配置文件,现在可以从这些屏幕上重新加载并查看。 * VS Code 中的 Flutter 侧边栏现在增加了新功能: 如果当前项目尚未启用新平台,用户可以直接启用新的平台。此外,侧边栏上的 DevTools 菜单现在提供一个选项,可让用户在外部浏览器窗口中打开 DevTools。 diff --git a/src/content/posts/whats-new-in-flutter-3-3.md b/src/content/posts/whats-new-in-flutter-3-3.md index a31e2a15b5..b16fc4e345 100644 --- a/src/content/posts/whats-new-in-flutter-3-3.md +++ b/src/content/posts/whats-new-in-flutter-3-3.md @@ -23,7 +23,7 @@ Flutter 3 是我们正式为全平台提供支持的一个重量级里程碑, 从今天起,一切都发生了变化。我们引入了 `SelectionArea` widget,它的子 widget 现已可以进行随意选择! -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/whats-new-in-flutter-3-3/image6.gif) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/whats-new-in-flutter-3-3/image6.gif) 只需使用 `SelectionArea` 包裹住路由显示的内容 \(例如 `Scaffold`\),Flutter 会替你处理好一切,你便可以享受到这项强力的新特性。 @@ -39,7 +39,7 @@ Flutter 3.3 优化了针对触控板的支持。Flutter 不仅提供了更丰富 4. 在 Flutter 3.3 以前,使用触控板滚动会拖动元素,因为 Flutter 将模拟的手势事件进行了下发 5. 从 Flutter 3.3 开始,使用触控板滚动会正确地滚动列表,因为 Flutter 会传递「滚动」事件,卡片不会识别这些事件,而列表会进行对应的处理 -想了解更多信息,请访问 [Flutter 触控板手势](<{{site.flutter-files-cn}}/flutter-design-docs/Flutter_Trackpad_Gestures_(PUBLICLY%20SHARED).pdf) 的设计文档,并且查看以下的拉取请求: +想了解更多信息,请访问 [Flutter 触控板手势](<{{site.flutter-files-cn}}flutter-design-docs/Flutter_Trackpad_Gestures_(PUBLICLY%20SHARED).pdf) 的设计文档,并且查看以下的拉取请求: * PR 89944: [在框架中支持触控板手势](https://github.com/flutter/flutter/pull/89944) * PR 31591: [iPad 上的触控版手势](https://github.com/flutter/engine/pull/31591) @@ -52,7 +52,7 @@ Flutter 3.3 优化了针对触控板的支持。Flutter 不仅提供了更丰富 感谢来自社区成员 [fbcouch](https://github.com/fbcouch) 的出彩贡献。Flutter 现在支持在 iPadOS 上使用 Apple Pencil 进行 [随手写](http://support.apple.com/zh-cn/guide/ipad/ipad355ab2a7/ipados) 输入。这项功能已默认在 `CupertinoTextField`、`TextField` 和 `EditableText` 上启用。只需要将 Flutter 升级到 3.3 就可以为你的用户带来这项新功能。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/whats-new-in-flutter-3-3/image7.gif) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/whats-new-in-flutter-3-3/image7.gif) ### 文本输入 @@ -66,17 +66,17 @@ Flutter 团队持续地在整合更多 Material Design 3 的组件到 Flutter ### IconButton 示例 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/whats-new-in-flutter-3-3/image9.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/whats-new-in-flutter-3-3/image9.png) ### Chip 示例 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/whats-new-in-flutter-3-3/image5.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/whats-new-in-flutter-3-3/image5.png) ### 中型和大型 AppBar 示例 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/whats-new-in-flutter-3-3/image8.gif) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/whats-new-in-flutter-3-3/image8.gif) -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/whats-new-in-flutter-3-3/image3.gif) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/whats-new-in-flutter-3-3/image3.gif) ## 桌面端平台 @@ -94,7 +94,7 @@ Flutter 团队持续地在整合更多 Material Design 3 的组件到 Flutter 当你的应用包含复杂的导航需求时,它可能会让你晕头转向。为了扩展 Flutter 的导航 API,团队发布了新版本的 [go\_router package](https://pub.flutter-io.cn/packages/go_router),让你在所有平台的路由逻辑设计变得更加简洁。 -go\_router package 由 Flutter 团队进行维护,通过声明式和基于 URL 的 API 让导航和 deep links 的处理变得更加轻松。最新的 5.0 版本让应用可以通过异步代码进行重定向,其中还包含了一些 [破坏性改动]({{site.flutter-files-cn}}/flutter-design-docs/[Draft]Go_Router%205.0%20migration%20guide%20(PUBLICLY%20SHARED).docx)。 +go\_router package 由 Flutter 团队进行维护,通过声明式和基于 URL 的 API 让导航和 deep links 的处理变得更加轻松。最新的 5.0 版本让应用可以通过异步代码进行重定向,其中还包含了一些 [破坏性改动]({{site.flutter-files-cn}}flutter-design-docs/[Draft]Go_Router%205.0%20migration%20guide%20(PUBLICLY%20SHARED).docx)。 更多内容请查看官方文档:[路由和导航](https://docs.flutter.cn/development/ui/navigation)。 @@ -102,7 +102,7 @@ go\_router package 由 Flutter 团队进行维护,通过声明式和基于 URL VS Code 的 Flutter 扩展也带来了添加依赖的更新。你可以使用 `Dart: Add Dependency` 命令加上逗号一次性添加多个依赖。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/whats-new-in-flutter-3-3/image1.gif) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/whats-new-in-flutter-3-3/image1.gif) 你可以查看以下内容了解自上一个 Flutter 稳定版本发布以来所有 VS Code 的 Flutter 插件的更新: @@ -128,7 +128,7 @@ VS Code 的 Flutter 扩展也带来了添加依赖的更新。你可以使用 ` 随着 [新增的 ui.ImmutableBuffer.fromAsset 的引入](https://github.com/flutter/engine/pull/32999)。这个加载过程同时也会更加快速,因为它会绕过之前方法通道所需的额外调度的开销。特别是在我们的基准测试中,图片的加载速度提升为原先的 2 倍左右。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/whats-new-in-flutter-3-3/image2.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/whats-new-in-flutter-3-3/image2.png) 更多相关信息,请查看官方文档:[添加 ImageProvider.loadBuffer](https://docs.flutter.cn/release/breaking-changes/image-provider-load-buffer)。 @@ -150,7 +150,7 @@ VS Code 的 Flutter 扩展也带来了添加依赖的更新。你可以使用 ` ### FragmentProgram 更新 -用 GLSL  编写的并且在 `pubspec.yaml` 的 `shader:` 部分声明的片段着色器 \(Fragment shader\) 现在会自动编译成引擎可以正确识别的格式,并且自动绑定为应用的资源。有了这项改动,开发者无需再使用三方工具编译着色器。在未来,引擎的 FragmentProgram API 可能只能接受来自 Flutter 的工具构建。目前我们还没应用这项更改,但如 [FragmentProgram API 改进支持的设计文档]({{site.flutter-files-cn}}/flutter-design-docs/FragmentProgram_Support_Improvements%20(PUBLICLY_SHARED).pdf) 中所计划的,有可能在未来实行。 +用 GLSL  编写的并且在 `pubspec.yaml` 的 `shader:` 部分声明的片段着色器 \(Fragment shader\) 现在会自动编译成引擎可以正确识别的格式,并且自动绑定为应用的资源。有了这项改动,开发者无需再使用三方工具编译着色器。在未来,引擎的 FragmentProgram API 可能只能接受来自 Flutter 的工具构建。目前我们还没应用这项更改,但如 [FragmentProgram API 改进支持的设计文档]({{site.flutter-files-cn}}flutter-design-docs/FragmentProgram_Support_Improvements%20(PUBLICLY_SHARED).pdf) 中所计划的,有可能在未来实行。 想要了解更多内容,你可以查看这个 [Flutter 着色器示例](https://github.com/zanderso/fragment_shader_example)。 @@ -174,7 +174,7 @@ VS Code 的 Flutter 扩展也带来了添加依赖的更新。你可以使用 ` 你可以打开 `ios/Runner.xcworkspace` 并在 build setting 中将 Enable Bitcode 设置为 No 以关闭它。混合开发应用可以在宿主工程的 Xcode 项目中关闭它。 -![]({{site.flutter-files-cn}}/posts/flutter-cn/2022/whats-new-in-flutter-3-3/image4.png) +![]({{site.flutter-files-cn}}posts/flutter-cn/2022/whats-new-in-flutter-3-3/image4.png) 你可以查阅 [Apple 文档](https://help.apple.com/xcode/mac/11.0/index.html?localePath%3Den.lproj%23/devde46df08a) 了解更多关于 bitcode 分发的内容。 diff --git a/src/content/posts/whats-new-in-flutter-3.md b/src/content/posts/whats-new-in-flutter-3.md index 7c8dee565a..ca153c8bba 100644 --- a/src/content/posts/whats-new-in-flutter-3.md +++ b/src/content/posts/whats-new-in-flutter-3.md @@ -23,7 +23,7 @@ Linux 和 macOS 平台的支持已进入稳定状态,内含下列功能: 现在你可以使用 `PlatformMenuBar` widget 在 macOS 上创建平台渲染的菜单栏,支持插入仅限该平台使用的菜单,并控制 macOS 应用菜单中的显示内容。 -![△ 级联菜单示意]({{site.flutter-files-cn}}/posts/images/2022/05/QHCvSV.gif) +![△ 级联菜单示意]({{site.flutter-files-cn}}posts/images/2022/05/QHCvSV.gif) △ 级联菜单示意 @@ -55,7 +55,7 @@ Flutter 3 支持可折叠移动设备。通过由 Microsoft 牵头的合作, 作为合作的一部分,[MediaQuery](https://api.flutter-io.cn/flutter/widgets/MediaQuery-class.html) 现在包含一个 [DisplayFeature](https://api.flutter-io.cn/flutter/dart-ui/DisplayFeature-class.html) 列表,用以描述设备组件状态,包括铰链、折叠状态和屏幕刘海等。此外,[DisplayFeatureSubScreen](https://api.flutter-io.cn/flutter/widgets/DisplayFeatureSubScreen-class.html) widget 包含的子 widget 的位置现在不会与 `DisplayFeature` 的边界重叠,并且已经用于框架的默认对话框和弹出窗口,使 Flutter 默认即可动态适应这些元素的位置。 -![]({{site.flutter-files-cn}}/posts/images/2022/05/Nqhj5g.png) +![]({{site.flutter-files-cn}}posts/images/2022/05/Nqhj5g.png) 非常感谢 Microsoft 团队。另外我们还要特别鸣谢 [@andreidiaconu](https://github.com/andreidiaconu) 所做出的贡献! diff --git a/src/content/posts/wonderous-explore-the-world-with-flutter.md b/src/content/posts/wonderous-explore-the-world-with-flutter.md index b4bdb5df8e..844c09f200 100644 --- a/src/content/posts/wonderous-explore-the-world-with-flutter.md +++ b/src/content/posts/wonderous-explore-the-world-with-flutter.md @@ -9,11 +9,11 @@ image: 探索世界奇观,并体验 Flutter 的强大之处。 -![]({{site.flutter-files-cn}}/posts/images/2022/09/vUAjc5.png) +![]({{site.flutter-files-cn}}posts/images/2022/09/vUAjc5.png) Flutter 的愿景是让你能够在空白画布上绘制出不受限制的精美应用。最近,通过与 gskinner 团队的通力合作,我们打造了一个全新的移动应用 Wonderous 来实现这个愿景。我们采用不同以往的设计系统,借助于 Flutter 为 Wonderous 创建出了极具表现力的界面,这个界面为移动设备量身定制并实现了设计者的创意愿景。 -![Wonderous 应用截图]({{site.flutter-files-cn}}/posts/images/2022/09/xCWqni.png) +![Wonderous 应用截图]({{site.flutter-files-cn}}posts/images/2022/09/xCWqni.png) △ Wonderous 应用截图 @@ -29,7 +29,7 @@ Flutter 的愿景是让你能够在空白画布上绘制出不受限制的精美 5. 创建其他人可以从中学习的材料及文档。在接下来的几周,gskinner 团队将发布更多关于 Wonderous 的内容,其中包括关于如何创建动画、如何整合无障碍功能以及应用性能最佳实践的具体信息。敬请期待! -![]({{site.flutter-files-cn}}/posts/images/2022/09/KL1vRF.png) +![]({{site.flutter-files-cn}}posts/images/2022/09/KL1vRF.png) 在 App Store 或 Google Play 商店中下载 Wonderous 之后,你可能想要探索以下内容: diff --git a/src/content/reference/flutter-cli.md b/src/content/reference/flutter-cli.md index 48711d3576..8e01bb85c6 100644 --- a/src/content/reference/flutter-cli.md +++ b/src/content/reference/flutter-cli.md @@ -125,8 +125,8 @@ You can also get details on `pub` commands — for example, 你还可以获取关于 `pub` 命令的帮助信息 —— 例如, `flutter help pub outdated`。 -[`dart`]: {{site.dart-site}}/tools/dart-tool -[`dart analyze`]: {{site.dart-site}}/tools/dart-analyze -[`dart format`]: {{site.dart-site}}/tools/dart-format -[`dart pub`]: {{site.dart-site}}/tools/dart-pub -[`dart test`]: {{site.dart-site}}/tools/dart-test +[`dart`]: {{site.dart-site}}tools/dart-tool +[`dart analyze`]: {{site.dart-site}}tools/dart-analyze +[`dart format`]: {{site.dart-site}}tools/dart-format +[`dart pub`]: {{site.dart-site}}tools/dart-pub +[`dart test`]: {{site.dart-site}}tools/dart-test diff --git a/src/content/reference/security-false-positives.md b/src/content/reference/security-false-positives.md index 37893c390c..3f9cf3d510 100644 --- a/src/content/reference/security-false-positives.md +++ b/src/content/reference/security-false-positives.md @@ -210,4 +210,4 @@ legitimate security vulnerability, we would greatly appreciate if you would report it: * [Flutter security policy](/security) -* [Dart security policy]({{site.dart-site}}/security) +* [Dart security policy]({{site.dart-site}}security) diff --git a/src/content/reference/user-surveys.md b/src/content/reference/user-surveys.md index 4d8fcaf7a9..e8dd3ced45 100644 --- a/src/content/reference/user-surveys.md +++ b/src/content/reference/user-surveys.md @@ -34,4 +34,4 @@ To mute survey announcements, you might do one of the following: [Disabling analytics reporting](/reference/crash-reporting#disabling-analytics-reporting). -[Medium]: {{site.flutter-medium}}/search?q=survey +[Medium]: {{site.flutter-medium}}search?q=survey diff --git a/src/content/release/archive-whats-new.md b/src/content/release/archive-whats-new.md index 41f5dd555e..62be4054ce 100644 --- a/src/content/release/archive-whats-new.md +++ b/src/content/release/archive-whats-new.md @@ -60,17 +60,17 @@ publication since Flutter 3.13: * [Dart & Flutter DevTools Extensions][dt-ext] * [Building your next casual game with Flutter][games-2] -[3.16-umbrella]: {{site.flutter-medium}}/flutter-3-16-dart-3-2-high-level-umbrella-post-b9218b17f0f7 +[3.16-umbrella]: {{site.flutter-medium}}flutter-3-16-dart-3-2-high-level-umbrella-post-b9218b17f0f7 [Casual Games Toolkit]: /resources/games-toolkit -[Dart 3.2 release]: {{site.medium}}/dartlang/dart-3-2-c8de8fe1b91f -[dt-ext]: {{site.flutter-medium}}/dart-flutter-devtools-extensions-c8bc1aaf8e5f -[fcd]: {{site.flutter-medium}}/introducing-the-flutter-consulting-directory-f6fc4c1d2ba3 -[games-2]: {{site.flutter-medium}}/building-your-next-casual-game-with-flutter-716ef457e440 -[ibm]: {{site.flutter-medium}}/how-ibm-is-creating-a-flutter-center-of-excellence-3c6a3c025441 +[Dart 3.2 release]: {{site.medium}}dartlang/dart-3-2-c8de8fe1b91f +[dt-ext]: {{site.flutter-medium}}dart-flutter-devtools-extensions-c8bc1aaf8e5f +[fcd]: {{site.flutter-medium}}introducing-the-flutter-consulting-directory-f6fc4c1d2ba3 +[games-2]: {{site.flutter-medium}}building-your-next-casual-game-with-flutter-716ef457e440 +[ibm]: {{site.flutter-medium}}how-ibm-is-creating-a-flutter-center-of-excellence-3c6a3c025441 [impeller]: /perf/impeller -[ls]: {{site.flutter-medium}}/developing-flutter-apps-for-large-screens-53b7b0e17f10 +[ls]: {{site.flutter-medium}}developing-flutter-apps-for-large-screens-53b7b0e17f10 [ios-app-ext]: /platform-integration/ios/app-extensions -[What's new in Flutter 3.16]: {{site.flutter-medium}}/whats-new-in-flutter-3-16-dba6cb1015d1 +[What's new in Flutter 3.16]: {{site.flutter-medium}}whats-new-in-flutter-3-16-dba6cb1015d1 ## 16 August 2023: 3.13 release @@ -116,8 +116,8 @@ recipes into the sidenav. * [The `Editable.onCaretChanged` callback is removed][editable-onCaretChanged] * Also check out the [deprecated APIs since 3.10][deprecated-3.10] -[blog-general]: {{site.flutter-medium}}/whats-new-in-flutter-3-13-479d9b11df4d -[Dart 3.1 & a retrospective on functional style programming in Dart 3]: {{site.medium}}/dartlang/dart-3-1-a-retrospective-on-functional-style-programming-in-dart-3-a1f4b3a7cdda +[blog-general]: {{site.flutter-medium}}whats-new-in-flutter-3-13-479d9b11df4d +[Dart 3.1 & a retrospective on functional style programming in Dart 3]: {{site.medium}}dartlang/dart-3-1-a-retrospective-on-functional-style-programming-in-dart-3-a1f4b3a7cdda [Flutter Favorites program]: /packages-and-plugins/favorites [breaking-changes]: /release/breaking-changes [deprecated-3.10]: /release/breaking-changes/3-10-deprecations @@ -132,7 +132,7 @@ The following codelab has been published since Flutter 3.10: * [Adding a Home Screen widget to your Flutter app][home-screen] -[home-screen]: {{site.codelabs}}/flutter-home-screen-widgets +[home-screen]: {{site.codelabs}}flutter-home-screen-widgets **Articles** @@ -143,9 +143,9 @@ publication since Flutter 3.10: * [How it's made: I/O Flip][] * [Flutter 2023 Q1 survey results][] -[Flutter 2023 Q1 survey results]: {{site.flutter-medium}}/flutter-2023-q1-survey-api-breaking-changes-deep-linking-and-more-7ff692f974e0 -[How it's made: I/O Flip]: {{site.flutter-medium}}/how-its-made-i-o-flip-da9d8184ef57 -[The Future of iOS development with Flutter]: {{site.flutter-medium}}/the-future-of-ios-development-with-flutter-833aa9779fac +[Flutter 2023 Q1 survey results]: {{site.flutter-medium}}flutter-2023-q1-survey-api-breaking-changes-deep-linking-and-more-7ff692f974e0 +[How it's made: I/O Flip]: {{site.flutter-medium}}how-its-made-i-o-flip-da9d8184ef57 +[The Future of iOS development with Flutter]: {{site.flutter-medium}}the-future-of-ios-development-with-flutter-833aa9779fac **What's coming** @@ -192,10 +192,10 @@ Flutter SDK, so stay tuned for updates as they are ready. For more information, check out the [Flutter 3.13 blog post][blog-games]. -[blog-games]: {{site.flutter-medium}}/whats-new-in-flutter-3-13-479d9b11df4d#30b2 -[blog-impeller]: {{site.flutter-medium}}/whats-new-in-flutter-3-13-479d9b11df4d#a7be -[blog-material]: {{site.flutter-medium}}/whats-new-in-flutter-3-13-479d9b11df4d#4c90 -[blog-scrolling]: {{site.flutter-medium}}/whats-new-in-flutter-3-13-479d9b11df4d#02dc +[blog-games]: {{site.flutter-medium}}whats-new-in-flutter-3-13-479d9b11df4d#30b2 +[blog-impeller]: {{site.flutter-medium}}whats-new-in-flutter-3-13-479d9b11df4d#a7be +[blog-material]: {{site.flutter-medium}}whats-new-in-flutter-3-13-479d9b11df4d#4c90 +[blog-scrolling]: {{site.flutter-medium}}whats-new-in-flutter-3-13-479d9b11df4d#02dc [Material 3]: {{site.material}} [Material Design for Flutter]: /ui/design/material @@ -210,9 +210,9 @@ but you can also check out the [3.10 blog post][] and the You might also check out [Introducing Dart 3][]. -[3.10 blog post]: {{site.flutter-medium}}/whats-new-in-flutter-3-10-b21db2c38c73 +[3.10 blog post]: {{site.flutter-medium}}whats-new-in-flutter-3-10-b21db2c38c73 [3.10 release notes]: /release/release-notes/release-notes-3.10.0 -[Introducing Dart 3]: {{site.medium}}/dartlang/announcing-dart-3-53f065a10635 +[Introducing Dart 3]: {{site.medium}}dartlang/announcing-dart-3-53f065a10635 **Docs updated or added since the 3.7 release** @@ -281,9 +281,9 @@ The following codelabs have been published since Flutter 3.7: based on Google product names. The PaLM API gives you access to Google's state-of-the-art large language models. -[Building next generation UIs in Flutter]: {{site.codelabs}}/codelabs/flutter-next-gen-uis#0 -[Records and Patterns in Dart 3]: {{site.codelabs}}/codelabs/dart-patterns-records -[Create haikus about Google products with the PaLM API and Flutter]: {{site.codelabs}}/haiku-generator +[Building next generation UIs in Flutter]: {{site.codelabs}}codelabs/flutter-next-gen-uis#0 +[Records and Patterns in Dart 3]: {{site.codelabs}}codelabs/dart-patterns-records +[Create haikus about Google products with the PaLM API and Flutter]: {{site.codelabs}}haiku-generator **Articles** @@ -293,8 +293,8 @@ publication since Flutter 3.7: * [Flutter in 2023: strategy and roadmap][] * [Wonderous nominated for Webby Award][] -[Wonderous nominated for Webby Award]: {{site.flutter-medium}}/wonderous-nominated-for-webby-award-8e00e2a648c2 -[Flutter in 2023: strategy and roadmap]: {{site.flutter-medium}}/flutter-in-2023-strategy-and-roadmap-60efc8d8b0c7 +[Wonderous nominated for Webby Award]: {{site.flutter-medium}}wonderous-nominated-for-webby-award-8e00e2a648c2 +[Flutter in 2023: strategy and roadmap]: {{site.flutter-medium}}flutter-in-2023-strategy-and-roadmap-60efc8d8b0c7 ## 25 Jan 2023: Flutter Forward: 3.7 release @@ -306,10 +306,10 @@ but you can also check out the [3.7 blog post][] and the You might also check out [What's next for Flutter][] and [Introducing Dart 3 alpha][]. -[3.7 blog post]: {{site.flutter-medium}}/whats-new-in-flutter-3-7-38cbea71133c +[3.7 blog post]: {{site.flutter-medium}}whats-new-in-flutter-3-7-38cbea71133c [3.7 release notes]: /release/release-notes/release-notes-3.7.0 -[Introducing Dart 3 alpha]: {{site.medium}}/dartlang/dart-3-alpha-f1458fb9d232 -[What's next for Flutter]: {{site.flutter-medium}}/whats-next-for-flutter-b94ce089f49c +[Introducing Dart 3 alpha]: {{site.medium}}dartlang/dart-3-alpha-f1458fb9d232 +[What's next for Flutter]: {{site.flutter-medium}}whats-next-for-flutter-b94ce089f49c **Docs updated or added since the 3.3 release** @@ -391,8 +391,8 @@ and [Introducing Dart 3 alpha][]. [Flutter FAQ]: /resources/faq [Flutter for SwiftUI developers]: /get-started/flutter-for/swiftui-devs [Internationalizing Flutter apps]: /ui/accessibility-and-internationalization/internationalization -[Introducing isolate background channels]: {{site.medium}}/flutter/introducing-background-isolate-channels-7a299609cad8 -[Learning Dart as a Swift developer]: {{site.dart-site}}/guides/language/coming-from/swift-to-dart +[Introducing isolate background channels]: {{site.flutter-medium}}introducing-background-isolate-channels-7a299609cad8 +[Learning Dart as a Swift developer]: {{site.dart-site}}guides/language/coming-from/swift-to-dart [Security false positives]: /reference/security-false-positives [Using the memory view]: /tools/devtools/memory [Writing and using fragment shaders]: /ui/design/graphics/fragment-shaders @@ -439,12 +439,12 @@ codelabs to support multiplatform. The [codelabs & workshops][] page is updated to reflect the latest available codelabs. -[Add a user authentication flow to a Flutter app using FirebaseUI]: {{site.firebase}}/codelabs/firebase-auth-in-flutter-apps -[Building a game with Flutter and Flame]: {{site.codelabs}}/codelabs/flutter-flame-game +[Add a user authentication flow to a Flutter app using FirebaseUI]: {{site.firebase}}codelabs/firebase-auth-in-flutter-apps +[Building a game with Flutter and Flame]: {{site.codelabs}}codelabs/flutter-flame-game [codelabs & workshops]: /codelabs -[Local development for your Flutter apps using the Firebase Emulator Suite]: {{site.firebase}}/codelabs/get-started-firebase-emulators-and-flutter -[Using FFI in a Flutter plugin]: {{site.codelabs}}/codelabs/flutter-ffigen -[Your first Flutter app]: {{site.codelabs}}/codelabs/flutter-codelab-first +[Local development for your Flutter apps using the Firebase Emulator Suite]: {{site.firebase}}codelabs/get-started-firebase-emulators-and-flutter +[Using FFI in a Flutter plugin]: {{site.codelabs}}codelabs/flutter-ffigen +[Your first Flutter app]: {{site.codelabs}}codelabs/flutter-codelab-first **Articles** @@ -464,16 +464,16 @@ publication since the last stable release: * [Supporting six platforms with two keyboards][] * [Studying developer's usage of IDEs for Flutter development][] -[Announcing the Flutter News Toolkit]: {{site.flutter-medium}}/announcing-the-flutter-news-toolkit-180a0d32c012 -[Adapting Wonderous to larger device formats]: {{site.flutter-medium}}/adapting-wonderous-to-larger-device-formats-ac51e1c00bc0 -[How can we improve the Flutter experience for desktop?]: {{site.medium}}/flutter/how-can-we-improve-the-flutter-experience-for-desktop-70b34bff9392 -[How it's made: Holobooth]: {{site.flutter-medium}}/how-its-made-holobooth-6473f3d018dd -[Introducing background isolate channels]: {{site.flutter-medium}}/introducing-background-isolate-channels-7a299609cad8 -[Material 3 for Flutter]: {{site.flutter-medium}}/material-3-for-flutter-d417a8a65564 -[Playful typography with Flutter]: {{site.medium}}/flutter/playful-typography-with-flutter-f030385058b4 -[Studying developer's usage of IDEs for Flutter development]: {{site.medium}}/flutter/studying-developers-usage-of-ides-for-flutter-development-4c0a648a48 -[Supporting six platforms with two keyboards]: {{site.medium}}/flutter/what-we-learned-from-the-flutter-q3-2022-survey-9b78803accd2 -[What we learned from the Flutter Q3 2022 survey]: {{site.medium}}/flutter/what-we-learned-from-the-flutter-q3-2022-survey-9b78803accd2 +[Announcing the Flutter News Toolkit]: {{site.flutter-medium}}announcing-the-flutter-news-toolkit-180a0d32c012 +[Adapting Wonderous to larger device formats]: {{site.flutter-medium}}adapting-wonderous-to-larger-device-formats-ac51e1c00bc0 +[How can we improve the Flutter experience for desktop?]: {{site.flutter-medium}}how-can-we-improve-the-flutter-experience-for-desktop-70b34bff9392 +[How it's made: Holobooth]: {{site.flutter-medium}}how-its-made-holobooth-6473f3d018dd +[Introducing background isolate channels]: {{site.flutter-medium}}introducing-background-isolate-channels-7a299609cad8 +[Material 3 for Flutter]: {{site.flutter-medium}}material-3-for-flutter-d417a8a65564 +[Playful typography with Flutter]: {{site.flutter-medium}}playful-typography-with-flutter-f030385058b4 +[Studying developer's usage of IDEs for Flutter development]: {{site.flutter-medium}}studying-developers-usage-of-ides-for-flutter-development-4c0a648a48 +[Supporting six platforms with two keyboards]: {{site.flutter-medium}}what-we-learned-from-the-flutter-q3-2022-survey-9b78803accd2 +[What we learned from the Flutter Q3 2022 survey]: {{site.flutter-medium}}what-we-learned-from-the-flutter-q3-2022-survey-9b78803accd2 ## 31 Aug 2022: Flutter Vikings: 3.3 release @@ -484,8 +484,8 @@ and [Dart 2.18: Objective-C & Swift interop][] (free articles on Medium), and the [Flutter 3.3 release notes][3.3 release notes]. [3.3 release notes]: /release/release-notes/release-notes-3.3.0 -[Dart 2.18: Objective-C & Swift interop]: {{site.medium}}/dartlang/dart-2-18-f4b3101f146c -[What's new in Flutter 3.3]: {{site.medium}}/flutter/whats-new-in-flutter-3-3-893c7b9af1ff +[Dart 2.18: Objective-C & Swift interop]: {{site.medium}}dartlang/dart-2-18-f4b3101f146c +[What's new in Flutter 3.3]: {{site.flutter-medium}}whats-new-in-flutter-3-3-893c7b9af1ff **Docs updated or added since the 3.0 release** @@ -513,7 +513,7 @@ and the [Flutter 3.3 release notes][3.3 release notes]. page has been updated with this advice. [Build and release a Windows desktop app]: /deployment/windows -[Developer mode]: {{site.apple-dev}}/documentation/xcode/enabling-developer-mode-on-a-device +[Developer mode]: {{site.apple-dev}}documentation/xcode/enabling-developer-mode-on-a-device [Handling errors in Flutter]: /testing/errors [macOS install]: /get-started/install/macos/mobile-ios#install-and-configure-xcode [navigation and routing overview]: /ui/navigation @@ -527,10 +527,10 @@ and [Dart 2.17: Productivity and integration][] (free articles on Medium), and the [Flutter 3 release notes][]. -[Dart 2.17: Productivity and integration]: {{site.medium}}/dartlang/dart-2-17-b216bfc80c5d +[Dart 2.17: Productivity and integration]: {{site.medium}}dartlang/dart-2-17-b216bfc80c5d [Flutter 3 release notes]: /release/release-notes/release-notes-3.0.0 -[Introducing Flutter 3]: {{site.medium}}/flutter/introducing-flutter-3-5eb69151622f -[What's new in Flutter 3]: {{site.medium}}/flutter/whats-new-in-flutter-3-8c74a5bc32d0 +[Introducing Flutter 3]: {{site.flutter-medium}}introducing-flutter-3-5eb69151622f +[What's new in Flutter 3]: {{site.flutter-medium}}whats-new-in-flutter-3-8c74a5bc32d0 **Docs updated or added since the 2.10 release** @@ -573,13 +573,13 @@ and the [Flutter 3 release notes][]. [Learning Dart as a JavaScript developer][js-to-dart]. Stay tuned for similar articles on Swift and C#. -[dart-whats-new]: {{site.dart-site}}/guides/whats-new +[dart-whats-new]: {{site.dart-site}}guides/whats-new [dart.dev]: {{site.dart-site}} [Desktop]: /platform-integration/desktop -[Flutter Firebase get started guide]: {{site.firebase}}/docs/flutter/setup +[Flutter Firebase get started guide]: {{site.firebase}}docs/flutter/setup [Games page]: {{site.main-url}}/games [Games doc page]: /resources/games-toolkit -[js-to-dart]: {{site.dart-site}}/guides/language/coming-from/js-to-dart +[js-to-dart]: {{site.dart-site}}guides/language/coming-from/js-to-dart [macOS install page]: /get-started/install/macos **Codelabs and workshops** @@ -593,8 +593,8 @@ We have a new codelab since the last stable release: Also, check out the workshops written by our GDEs and available on the [Flutter community blog][]. -[Flutter community blog]: {{site.medium}}/@flutter_community/622b52f70173 -[Take your Flutter app from boring to beautiful]: {{site.codelabs}}/codelabs/flutter-boring-to-beautiful +[Flutter community blog]: {{site.medium}}@flutter_community/622b52f70173 +[Take your Flutter app from boring to beautiful]: {{site.codelabs}}codelabs/flutter-boring-to-beautiful **Videos** @@ -617,8 +617,8 @@ free articles on Medium. -[Announcing Flutter for Windows]: {{site.flutter-medium}}/announcing-flutter-for-windows-6979d0d01fed -[What's new in Flutter 2.10]: {{site.flutter-medium}}/whats-new-in-flutter-2-10-5aafb0314b12 +[Announcing Flutter for Windows]: {{site.flutter-medium}}announcing-flutter-for-windows-6979d0d01fed +[What's new in Flutter 2.10]: {{site.flutter-medium}}whats-new-in-flutter-2-10-5aafb0314b12 --- @@ -628,8 +628,8 @@ Flutter 2.8 is live! For details, see [Announcing Flutter 2.8][] and [What's new in Flutter 2.8][]. -[Announcing Flutter 2.8]: {{site.flutter-medium}}/announcing-flutter-2-8-31d2cb7e19f5 -[What's new in Flutter 2.8]: {{site.flutter-medium}}/whats-new-in-flutter-2-8-d085b763d181 +[Announcing Flutter 2.8]: {{site.flutter-medium}}announcing-flutter-2-8-31d2cb7e19f5 +[What's new in Flutter 2.8]: {{site.flutter-medium}}whats-new-in-flutter-2-8-d085b763d181 ## 08 Sep 2021: 2.5 release @@ -659,17 +659,17 @@ publication since the last stable release: * [Google I/O Spotlight: Flutter in action at ByteDance][] * [Improving Platform Channel Performance in Flutter][] -[Adding Flutter to your existing iOS and Android codebases]: {{site.flutter-medium}}/adding-flutter-to-your-existing-ios-and-android-codebases-3e2c5a4797c1 -[What's new in Flutter 2.5]: {{site.flutter-medium}}/whats-new-in-flutter-2-5-6f080c3f3dc -[Flutter Hot Reload]: {{site.flutter-medium}}/flutter-hot-reload-f3c5994e2cee -[Google I/O Spotlight: Flutter in action at ByteDance]: {{site.flutter-medium}}/google-i-o-spotlight-flutter-in-action-at-bytedance-c22f4b6dc9ef -[GSoC'21: Creating a desktop sample for Flutter]: {{site.flutter-medium}}/gsoc-21-creating-a-desktop-sample-for-flutter-7d77e74812d6 -[Improving Platform Channel Performance in Flutter]: {{site.flutter-medium}}/improving-platform-channel-performance-in-flutter-e5b4e5df04af -[Raster thread performance optimization tips]: {{site.flutter-medium}}/raster-thread-performance-optimization-tips-e949b9dbcf06 -[README]: {{site.repo.this}}/#flutter-website +[Adding Flutter to your existing iOS and Android codebases]: {{site.flutter-medium}}adding-flutter-to-your-existing-ios-and-android-codebases-3e2c5a4797c1 +[What's new in Flutter 2.5]: {{site.flutter-medium}}whats-new-in-flutter-2-5-6f080c3f3dc +[Flutter Hot Reload]: {{site.flutter-medium}}flutter-hot-reload-f3c5994e2cee +[Google I/O Spotlight: Flutter in action at ByteDance]: {{site.flutter-medium}}google-i-o-spotlight-flutter-in-action-at-bytedance-c22f4b6dc9ef +[GSoC'21: Creating a desktop sample for Flutter]: {{site.flutter-medium}}gsoc-21-creating-a-desktop-sample-for-flutter-7d77e74812d6 +[Improving Platform Channel Performance in Flutter]: {{site.flutter-medium}}improving-platform-channel-performance-in-flutter-e5b4e5df04af +[Raster thread performance optimization tips]: {{site.flutter-medium}}raster-thread-performance-optimization-tips-e949b9dbcf06 +[README]: {{site.repo.this}}#flutter-website [Using Actions and Shortcuts]: /ui/interactivity/actions-and-shortcuts -[What can we do to better improve Flutter?]: {{site.flutter-medium}}/what-can-we-do-better-to-improve-flutter-q2-2021-user-survey-results-1037fb8f057b -[Writing a good code sample]: {{site.flutter-medium}}/writing-a-good-code-sample-323358edd9f3 +[What can we do to better improve Flutter?]: {{site.flutter-medium}}what-can-we-do-better-to-improve-flutter-q2-2021-user-survey-results-1037fb8f057b +[Writing a good code sample]: {{site.flutter-medium}}writing-a-good-code-sample-323358edd9f3 --- @@ -744,26 +744,26 @@ publication since the last stable release: * [How It's Made: I/O Photo Booth][] * [Which factors affected users' decisions to adopt Flutter? - Q1 2021 user survey results][Q1 2021 survey] -[Adding in-app purchases to your Flutter app]: {{site.codelabs}}/codelabs/flutter-in-app-purchases -[Announcing Flutter 2.2]: {{site.flutter-medium}}/announcing-flutter-2-2-at-google-i-o-2021-92f0fcbd7ef9 -[Build Voice Bots for Android with Dialogflow Essentials & Flutter]: {{site.codelabs}}/codelabs/dialogflow-flutter +[Adding in-app purchases to your Flutter app]: {{site.codelabs}}codelabs/flutter-in-app-purchases +[Announcing Flutter 2.2]: {{site.flutter-medium}}announcing-flutter-2-2-at-google-i-o-2021-92f0fcbd7ef9 +[Build Voice Bots for Android with Dialogflow Essentials & Flutter]: {{site.codelabs}}codelabs/dialogflow-flutter [Building your first Flutter app]: {{site.yt.watch}}?v=Z6KZ3cTGBWw -[DartPad Sharing Guide (using a Gist file)]: {{site.github}}/dart-lang/dart-pad/wiki/Sharing-Guide -[DartPad Workshop Authoring Guide]: {{site.github}}/dart-lang/dart-pad/wiki/Workshop-Authoring-Guide +[DartPad Sharing Guide (using a Gist file)]: {{site.github}}dart-lang/dart-pad/wiki/Sharing-Guide +[DartPad Workshop Authoring Guide]: {{site.github}}dart-lang/dart-pad/wiki/Workshop-Authoring-Guide [Deferred components]: /perf/deferred-components [Embedded Support for Flutter]: /embedded -[Embedding DartPad in your web page]: {{site.github}}/dart-lang/dart-pad/wiki/Embedding-Guide +[Embedding DartPad in your web page]: {{site.github}}dart-lang/dart-pad/wiki/Embedding-Guide [Firebase for Flutter]: {{site.yt.watch}}?v=4wunbF29Kkg [Flutter and Dialogflow voice bots]: {{site.yt.watch}}?v=O7JfSF3CJ84 -[Get to know Firebase for Flutter]: {{site.firebase}}/codelabs/firebase-get-to-know-flutter#0 +[Get to know Firebase for Flutter]: {{site.firebase}}codelabs/firebase-get-to-know-flutter#0 [Google APIs]: /data-and-backend/google-apis -[How It's Made: I/O Photo Booth]: {{site.flutter-medium}}/how-its-made-i-o-photo-booth-3b8355d35883 +[How It's Made: I/O Photo Booth]: {{site.flutter-medium}}how-its-made-i-o-photo-booth-3b8355d35883 [Inherited widgets]: {{site.yt.watch}}?v=LFcGPS6cGrY [Memory view page]: /tools/devtools/memory [Null safety]: {{site.yt.watch}}?v=HdKwuHQvArY [Slivers]: {{site.yt.watch}}?v=YY-_yrZdjGc -[Q1 2021 survey]: {{site.flutter-medium}}/which-factors-affected-users-decisions-to-adopt-flutter-q1-2021-user-survey-results-563e61fc68c9 -[What's New in Flutter 2.2]: {{site.flutter-medium}}/whats-new-in-flutter-2-2-fd00c65e2039 +[Q1 2021 survey]: {{site.flutter-medium}}which-factors-affected-users-decisions-to-adopt-flutter-q1-2021-user-survey-results-563e61fc68c9 +[What's New in Flutter 2.2]: {{site.flutter-medium}}whats-new-in-flutter-2-2-fd00c65e2039 --- @@ -837,41 +837,41 @@ publication since the last stable release: * [Testable Flutter and Cloud Firestore][] * [Performance testing on the web][] -[Accessible expression with Material Icons and Flutter]: {{site.flutter-medium}}/accessible-expression-with-material-icons-and-flutter-e3f3f622200b -[Adding AdMob banner and native inline ads to a Flutter app]: {{site.codelabs}}/codelabs/admob-inline-ads-in-flutter +[Accessible expression with Material Icons and Flutter]: {{site.flutter-medium}}accessible-expression-with-material-icons-and-flutter-e3f3f622200b +[Adding AdMob banner and native inline ads to a Flutter app]: {{site.codelabs}}codelabs/admob-inline-ads-in-flutter [Adding a Flutter view to an Android app]: /add-to-app/android/add-flutter-view -[Announcing Dart null safety beta]: {{site.flutter-medium}}/announcing-dart-null-safety-beta-4491da22077a -[Announcing Dart 2.12]: {{site.medium}}/dartlang/announcing-dart-2-12-499a6e689c87 -[Announcing Flutter 2]: {{site.google-blog}}/2021/03/announcing-flutter-2.html -[comp]: {{site.flutter-medium}}/providing-operating-system-compatibility-on-a-large-scale-374cc2fb0dad +[Announcing Dart null safety beta]: {{site.flutter-medium}}announcing-dart-null-safety-beta-4491da22077a +[Announcing Dart 2.12]: {{site.medium}}dartlang/announcing-dart-2-12-499a6e689c87 +[Announcing Flutter 2]: {{site.google-blog}}2021/03/announcing-flutter-2.html +[comp]: {{site.flutter-medium}}providing-operating-system-compatibility-on-a-large-scale-374cc2fb0dad [Configuring the URL strategy on the web]: /ui/navigation/url-strategies [Creating responsive and adaptive apps]: /ui/adaptive-responsive -[Dart sound null safety: technical preview 2]: {{site.flutter-medium}}/null-safety-flutter-tech-preview-cb5c98aba187 -[Deprecation Lifetime in Flutter]: {{site.flutter-medium}}/deprecation-lifetime-in-flutter-e4d76ee738ad +[Dart sound null safety: technical preview 2]: {{site.flutter-medium}}null-safety-flutter-tech-preview-cb5c98aba187 +[Deprecation Lifetime in Flutter]: {{site.flutter-medium}}deprecation-lifetime-in-flutter-e4d76ee738ad [Desktop support for Flutter]: /platform-integration/desktop [Flutter Ads]: {{site.main-url}}/monetization [Flutter 2 release notes]: /release/release-notes/release-notes-2.0.0 [Flutter Fix]: /tools/flutter-fix [Flutter inspector]: /tools/devtools/inspector -[Flutter web support hits the stable milestone]: {{site.flutter-medium}}/flutter-web-support-hits-the-stable-milestone-d6b84e83b425 +[Flutter web support hits the stable milestone]: {{site.flutter-medium}}flutter-web-support-hits-the-stable-milestone-d6b84e83b425 [implement deep linking]: /ui/navigation/deep-linking [internationalization]: /ui/accessibility-and-internationalization/internationalization -[Join us for #30DaysOfFlutter]: {{site.flutter-medium}}/join-us-for-30daysofflutter-9993e3ec847b +[Join us for #30DaysOfFlutter]: {{site.flutter-medium}}join-us-for-30daysofflutter-9993e3ec847b [More thoughts about performance]: /perf/appendix -[New ad formats for Flutter]: {{site.flutter-medium}}/new-ads-beta-inline-banner-and-native-support-for-the-flutter-mobile-ads-plugin-e48a7e9a0e64 -[perf-H1-2020]: {{site.flutter-medium}}/flutter-performance-updates-in-the-first-half-of-2020-5c597168b6bb +[New ad formats for Flutter]: {{site.flutter-medium}}new-ads-beta-inline-banner-and-native-support-for-the-flutter-mobile-ads-plugin-e48a7e9a0e64 +[perf-H1-2020]: {{site.flutter-medium}}flutter-performance-updates-in-the-first-half-of-2020-5c597168b6bb [performance]: /perf [Performance faq]: /perf/faq [Performance metrics]: /perf/metrics -[Performance testing on the web]: {{site.flutter-medium}}/performance-testing-on-the-web-25323252de69 -[Q3]: {{site.flutter-medium}}/flutter-on-the-web-slivers-and-platform-specific-issues-user-survey-results-from-q3-2020-f8034236b2a8 -[Q4]: {{site.flutter-medium}}/are-you-happy-with-flutter-q4-2020-user-survey-results-41cdd90aaa48 -[Testable Flutter and Cloud Firestore]: {{site.flutter-medium}}/flutter/testable-flutter-and-cloud-firestore-1cf2fbbce97b -[Updates on Flutter Testing]: {{site.flutter-medium}}/updates-on-flutter-testing-f54aa9f74c7e +[Performance testing on the web]: {{site.flutter-medium}}performance-testing-on-the-web-25323252de69 +[Q3]: {{site.flutter-medium}}flutter-on-the-web-slivers-and-platform-specific-issues-user-survey-results-from-q3-2020-f8034236b2a8 +[Q4]: {{site.flutter-medium}}are-you-happy-with-flutter-q4-2020-user-survey-results-41cdd90aaa48 +[Testable Flutter and Cloud Firestore]: {{site.flutter-medium}}flutter/testable-flutter-and-cloud-firestore-1cf2fbbce97b +[Updates on Flutter Testing]: {{site.flutter-medium}}updates-on-flutter-testing-f54aa9f74c7e [Using multiple Flutter instances]: /add-to-app/multiple-flutters [Web FAQ]: /platform-integration/web/faq [Web support for Flutter]: /platform-integration/web -[What's new in Flutter 2]: {{site.flutter-medium}}/whats-new-in-flutter-2-0-fe8e95ecc65 +[What's new in Flutter 2]: {{site.flutter-medium}}whats-new-in-flutter-2-0-fe8e95ecc65 [Who is Dash?]: /dash [write integration tests using the integration_test package]: /testing/integration-tests @@ -928,24 +928,24 @@ publication since the last stable release: * [Updates on Flutter and Firebase][] [add an iOS App Clip]: /platform-integration/ios/ios-app-clip -[animations]: {{site.pub}}/packages/animations -[Announcing Flutter 1.22]: {{site.flutter-medium}}/announcing-flutter-1-22-44f146009e5f -[Announcing Flutter Windows Alpha]: {{site.flutter-medium}}/announcing-flutter-windows-alpha-33982cd0f433 +[animations]: {{site.pub-pkg}}animations +[Announcing Flutter 1.22]: {{site.flutter-medium}}announcing-flutter-1-22-44f146009e5f +[Announcing Flutter Windows Alpha]: {{site.flutter-medium}}announcing-flutter-windows-alpha-33982cd0f433 [App Size tool]: /tools/devtools/app-size -[Building Beautiful Transitions with Material Motion for Flutter]: {{site.codelabs}}/codelabs/material-motion-flutter +[Building Beautiful Transitions with Material Motion for Flutter]: {{site.codelabs}}codelabs/material-motion-flutter [cupertino-icons]: /release/breaking-changes/cupertino-icons-1.0.0 [Developing for iOS 14]: /platform-integration/ios/ios-debugging -[google_maps_flutter]: {{site.pub}}/packages/google_maps_flutter -[Handling web gestures in Flutter]: {{site.flutter-medium}}/handling-web-gestures-in-flutter-e16946a04745 -[Integration testing with flutter_driver]: {{site.flutter-medium}}/integration-testing-with-flutter-driver-36f66ede5cf2 -[Learn testing with the new Flutter sample]: {{site.flutter-medium}}/learn-testing-with-the-new-flutter-sample-gsoc20-work-product-e872c7f6492a -[Learning Flutter's new navigation and routing]: {{site.flutter-medium}}/learning-flutters-new-navigation-and-routing-system-7c9068155ade -[Platform channel examples]: {{site.flutter-medium}}/platform-channel-examples-7edeaeba4a66 +[google_maps_flutter]: {{site.pub-pkg}}google_maps_flutter +[Handling web gestures in Flutter]: {{site.flutter-medium}}handling-web-gestures-in-flutter-e16946a04745 +[Integration testing with flutter_driver]: {{site.flutter-medium}}integration-testing-with-flutter-driver-36f66ede5cf2 +[Learn testing with the new Flutter sample]: {{site.flutter-medium}}learn-testing-with-the-new-flutter-sample-gsoc20-work-product-e872c7f6492a +[Learning Flutter's new navigation and routing]: {{site.flutter-medium}}learning-flutters-new-navigation-and-routing-system-7c9068155ade +[Platform channel examples]: {{site.flutter-medium}}platform-channel-examples-7edeaeba4a66 [Android views]: /platform-integration/android/platform-views [iOS views]: /platform-integration/ios/platform-views -[Supporting iOS 14 and Xcode 12 with Flutter]: {{site.flutter-medium}}/supporting-ios-14-and-xcode-12-with-flutter-15fe0062e98b -[Updates on Flutter and Firebase]: {{site.flutter-medium}}/updates-on-flutter-and-firebase-8076f70bc90e -[webview_flutter]: {{site.pub}}/packages/webview_flutter +[Supporting iOS 14 and Xcode 12 with Flutter]: {{site.flutter-medium}}supporting-ios-14-and-xcode-12-with-flutter-15fe0062e98b +[Updates on Flutter and Firebase]: {{site.flutter-medium}}updates-on-flutter-and-firebase-8076f70bc90e +[webview_flutter]: {{site.pub-pkg}}webview_flutter ## 05 Aug 2020: 1.20 release @@ -1016,40 +1016,40 @@ publication since the last stable release: * [Going deeper with Flutter's web support][] * [Flutter Performance Updates in 2019][] -[Adding Admob Ads to a Flutter app]: {{site.codelabs}}/codelabs/admob-ads-in-flutter/ -[Announcing Adobe XD Support for Flutter]: {{site.flutter-medium}}/announcing-adobe-xd-support-for-flutter-4b3dd55ff40e -[Announcing Flutter 1.20]: {{site.flutter-medium}}/announcing-flutter-1-20-2aaf68c89c75 -[Building performant Flutter widgets]: {{site.flutter-medium}}/building-performant-flutter-widgets-3b2558aa08fa +[Adding Admob Ads to a Flutter app]: {{site.codelabs}}codelabs/admob-ads-in-flutter/ +[Announcing Adobe XD Support for Flutter]: {{site.flutter-medium}}announcing-adobe-xd-support-for-flutter-4b3dd55ff40e +[Announcing Flutter 1.20]: {{site.flutter-medium}}announcing-flutter-1-20-2aaf68c89c75 +[Building performant Flutter widgets]: {{site.flutter-medium}}building-performant-flutter-widgets-3b2558aa08fa [codelabs landing]: /codelabs [Desktop support]: /platform-integration/desktop -[dev-tools]: {{site.flutter-medium}}/new-tools-for-flutter-developers-built-in-flutter-a122cb4eec86 +[dev-tools]: {{site.flutter-medium}}new-tools-for-flutter-developers-built-in-flutter-a122cb4eec86 [Developing for iOS 14 beta]: /platform-integration/ios/ios-debugging -[Enums with Extensions in Dart]: {{site.flutter-medium}}/enums-with-extensions-dart-460c42ea51f7 -[Flutter and Desktop apps]: {{site.flutter-medium}}/flutter-and-desktop-3a0dd0f8353e +[Enums with Extensions in Dart]: {{site.flutter-medium}}enums-with-extensions-dart-460c42ea51f7 +[Flutter and Desktop apps]: {{site.flutter-medium}}flutter-and-desktop-3a0dd0f8353e [Flutter architectural overview]: /resources/architectural-overview [Flutter books]: /resources/books [Flutter codelabs]: /codelabs [Flutter Day]: https://events.withgoogle.com/flutter-day/ -[Flutter Package Ecosystem Update]: {{site.flutter-medium}}/flutter-package-ecosystem-update-d50645f2d7bc -[Flutter Performance Updates in 2019]: {{site.flutter-medium}}/going-deeper-with-flutters-web-support-66d7ad95eb5224 -[Going deeper with Flutter's web support]: {{site.flutter-medium}}/going-deeper-with-flutters-web-support-66d7ad95eb52 -[Handling 404: Page not found error in Flutter]: {{site.flutter-medium}}/handling-404-page-not-found-error-in-flutter-731f5a9fba29 -[How to write a Flutter plugin]: {{site.codelabs}}/codelabs/write-flutter-plugin +[Flutter Package Ecosystem Update]: {{site.flutter-medium}}flutter-package-ecosystem-update-d50645f2d7bc +[Flutter Performance Updates in 2019]: {{site.flutter-medium}}going-deeper-with-flutters-web-support-66d7ad95eb5224 +[Going deeper with Flutter's web support]: {{site.flutter-medium}}going-deeper-with-flutters-web-support-66d7ad95eb52 +[Handling 404: Page not found error in Flutter]: {{site.flutter-medium}}handling-404-page-not-found-error-in-flutter-731f5a9fba29 +[How to write a Flutter plugin]: {{site.codelabs}}codelabs/write-flutter-plugin [installing Flutter on Linux using snapd.]: /get-started/install/linux -[Managing issues in a large-scale open source project]: {{site.flutter-medium}}/managing-issues-in-a-large-scale-open-source-project-b3be6eecae2b -[How to debug layout issues with the Flutter Inspector]: {{site.flutter-medium}}/how-to-debug-layout-issues-with-the-flutter-inspector-87460a7b9db -[Multi-platform Firestore Flutter]: {{site.codelabs}}/codelabs/friendlyeats-flutter/ -[q1-2020]: {{site.flutter-medium}}/what-are-the-important-difficult-tasks-for-flutter-devs-q1-2020-survey-results-a5ef2305429b +[Managing issues in a large-scale open source project]: {{site.flutter-medium}}managing-issues-in-a-large-scale-open-source-project-b3be6eecae2b +[How to debug layout issues with the Flutter Inspector]: {{site.flutter-medium}}how-to-debug-layout-issues-with-the-flutter-inspector-87460a7b9db +[Multi-platform Firestore Flutter]: {{site.codelabs}}codelabs/friendlyeats-flutter/ +[q1-2020]: {{site.flutter-medium}}what-are-the-important-difficult-tasks-for-flutter-devs-q1-2020-survey-results-a5ef2305429b [Reducing shader compilation jank on mobile]: /perf/shader -[shaking]: {{site.flutter-medium}}/optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading-535fbe3cd674 -[Two Months of #FlutterGoodNewsWednesday]: {{site.flutter-medium}}/two-months-of-fluttergoodnewswednesday-a12e60bab782 -[ubuntu]: {{site.flutter-medium}}/announcing-flutter-linux-alpha-with-canonical-19eb824590a9 -[Understanding null safety]: {{site.dart-site}}/null-safety/understanding-null-safety -[Using a plugin with a Flutter web app]: {{site.codelabs}}/codelabs/web-url-launcher/ -[web-perf]: {{site.flutter-medium}}/improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation-6b3601087a2b -[What's new with the Slider widget?]: {{site.flutter-medium}}/whats-new-with-the-slider-widget-ce48a22611a3 -[What we learned from the Flutter Q2 2020 survey]: {{site.flutter-medium}}/what-we-learned-from-the-flutter-q2-2020-survey-a4f1fc8faac9 -[Write a Flutter desktop application]: {{site.codelabs}}/codelabs/flutter-github-graphql-client/ +[shaking]: {{site.flutter-medium}}optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading-535fbe3cd674 +[Two Months of #FlutterGoodNewsWednesday]: {{site.flutter-medium}}two-months-of-fluttergoodnewswednesday-a12e60bab782 +[ubuntu]: {{site.flutter-medium}}announcing-flutter-linux-alpha-with-canonical-19eb824590a9 +[Understanding null safety]: {{site.dart-site}}null-safety/understanding-null-safety +[Using a plugin with a Flutter web app]: {{site.codelabs}}codelabs/web-url-launcher/ +[web-perf]: {{site.flutter-medium}}improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation-6b3601087a2b +[What's new with the Slider widget?]: {{site.flutter-medium}}whats-new-with-the-slider-widget-ce48a22611a3 +[What we learned from the Flutter Q2 2020 survey]: {{site.flutter-medium}}what-we-learned-from-the-flutter-q2-2020-survey-a4f1fc8faac9 +[Write a Flutter desktop application]: {{site.codelabs}}codelabs/flutter-github-graphql-client/ ## 06 May 2020: Work-From-Home: 1.17 release @@ -1109,33 +1109,33 @@ Other newness: * [Modern Flutter plugin development][] [add2app]: /add-to-app/android/plugin-setup -[Animation deep dive]: {{site.flutter-medium}}/animation-deep-dive-39d3ffea111f +[Animation deep dive]: {{site.flutter-medium}}animation-deep-dive-39d3ffea111f [animations landing page]: /ui/animations -[Announcing a free Flutter introductory course]: {{site.flutter-medium}}/learn-flutter-for-free-c9bc3b898c4d -[Announcing CodePen support for Flutter]: {{site.flutter-medium}}/announcing-codepen-support-for-flutter-bb346406fe50 -[Announcing Flutter 1.17]: {{site.flutter-medium}}/announcing-flutter-1-17-4182d8af7f8e -[Custom implicit animations in Flutter…with TweenAnimationBuilder]: {{site.flutter-medium}}/custom-implicit-animations-in-flutter-with-tweenanimationbuilder-c76540b47185 +[Announcing a free Flutter introductory course]: {{site.flutter-medium}}learn-flutter-for-free-c9bc3b898c4d +[Announcing CodePen support for Flutter]: {{site.flutter-medium}}announcing-codepen-support-for-flutter-bb346406fe50 +[Announcing Flutter 1.17]: {{site.flutter-medium}}announcing-flutter-1-17-4182d8af7f8e +[Custom implicit animations in Flutter…with TweenAnimationBuilder]: {{site.flutter-medium}}custom-implicit-animations-in-flutter-with-tweenanimationbuilder-c76540b47185 [Developing packages and plugins]: /packages-and-plugins/developing-packages [Developing plugin packages]: /packages-and-plugins/developing-packages#federated-plugins -[Directional animations with build-in explicit animations]: {{site.flutter-medium}}/directional-animations-with-built-in-explicit-animations-3e7c5e6fbbd7 -[Flutter Medium]: {{site.medium}}/flutter -[Flutter Spring 2020 update]: {{site.flutter-medium}}/spring-2020-update-f723d898d7af -[Flutter web: Navigating URLs using named routes]: {{site.flutter-medium}}/web-navigating-urls-using-named-routes-307e1b1e2050 -[Flutter web support updates]: {{site.flutter-medium}}/web-support-updates-8b14bfe6a908 +[Directional animations with build-in explicit animations]: {{site.flutter-medium}}directional-animations-with-built-in-explicit-animations-3e7c5e6fbbd7 +[Flutter Medium]: {{site.medium}}flutter +[Flutter Spring 2020 update]: {{site.flutter-medium}}spring-2020-update-f723d898d7af +[Flutter web: Navigating URLs using named routes]: {{site.flutter-medium}}web-navigating-urls-using-named-routes-307e1b1e2050 +[Flutter web support updates]: {{site.flutter-medium}}web-support-updates-8b14bfe6a908 [hot reload]: /tools/hot-reload -[How to choose which Flutter animation widget is right for you?]: {{site.flutter-medium}}/how-to-choose-which-flutter-animation-widget-is-right-for-you-79ecfb7e72b5 -[How to embed a Flutter application in a website using DartPad]: {{site.flutter-medium}}/how-to-embed-a-flutter-application-in-a-website-using-dartpad-b8fd0ee8c4b9 -[How to float an overlay widget over a (possibly transformed) UI widget]: {{site.flutter-medium}}/how-to-float-an-overlay-widget-over-a-possibly-transformed-ui-widget-1d15ca7667b6 -[How to write a Flutter web plugin, Part 2]: {{site.flutter-medium}}/how-to-write-a-flutter-web-plugin-part-2-afdddb69ece6 -[Improving Flutter with your opinion - Q4 2019 survey results]: {{site.flutter-medium}}/improving-flutter-with-your-opinion-q4-2019-survey-results-ba0e6721bf23 -[Introducing Google Fonts for Flutter v 1.0.0!]: {{site.flutter-medium}}/introducing-google-fonts-for-flutter-v-1-0-0-c0e993617118 -[It's Time: The Flutter Clock contest results]: {{site.flutter-medium}}/its-time-the-flutter-clock-contest-results-dcebe2eb3957 +[How to choose which Flutter animation widget is right for you?]: {{site.flutter-medium}}how-to-choose-which-flutter-animation-widget-is-right-for-you-79ecfb7e72b5 +[How to embed a Flutter application in a website using DartPad]: {{site.flutter-medium}}how-to-embed-a-flutter-application-in-a-website-using-dartpad-b8fd0ee8c4b9 +[How to float an overlay widget over a (possibly transformed) UI widget]: {{site.flutter-medium}}how-to-float-an-overlay-widget-over-a-possibly-transformed-ui-widget-1d15ca7667b6 +[How to write a Flutter web plugin, Part 2]: {{site.flutter-medium}}how-to-write-a-flutter-web-plugin-part-2-afdddb69ece6 +[Improving Flutter with your opinion - Q4 2019 survey results]: {{site.flutter-medium}}improving-flutter-with-your-opinion-q4-2019-survey-results-ba0e6721bf23 +[Introducing Google Fonts for Flutter v 1.0.0!]: {{site.flutter-medium}}introducing-google-fonts-for-flutter-v-1-0-0-c0e993617118 +[It's Time: The Flutter Clock contest results]: {{site.flutter-medium}}its-time-the-flutter-clock-contest-results-dcebe2eb3957 [Obfuscating Dart code]: /deployment/obfuscate -[package for pre-canned Material widget animations]: {{site.pub}}/packages/animations -[Modern Flutter plugin development]: {{site.flutter-medium}}/modern-flutter-plugin-development-4c3ee015cf5a +[package for pre-canned Material widget animations]: {{site.pub-pkg}}animations +[Modern Flutter plugin development]: {{site.flutter-medium}}modern-flutter-plugin-development-4c3ee015cf5a [Supporting the new Android plugin APIs]: /release/breaking-changes/plugin-api-migration [Understanding constraints]: /ui/layout/constraints -[When should I use AnimatedBuilder or AnimatedWidget?]: {{site.flutter-medium}}/when-should-i-useanimatedbuilder-or-animatedwidget-57ecae0959e8 +[When should I use AnimatedBuilder or AnimatedWidget?]: {{site.flutter-medium}}when-should-i-useanimatedbuilder-or-animatedwidget-57ecae0959e8 ## 11 Dec 2019: Flutter Interact: 1.12 release @@ -1184,18 +1184,18 @@ Other newness: Happy Fluttering! [add Flutter to an existing app]: /add-to-app -[Announcing Flutter 1.12: What a year!]: {{site.flutter-medium}}/announcing-flutter-1-12-what-a-year-22c256ba525d +[Announcing Flutter 1.12: What a year!]: {{site.flutter-medium}}announcing-flutter-1-12-what-a-year-22c256ba525d [app size]: /perf/app-size#ios [building a web app with Flutter]: /platform-integration/web/building -[Flutter: the first UI platform designed for ambient computing]: {{site.google-blog}}/2019/12/flutter-ui-ambient-computing.html?m=1 +[Flutter: the first UI platform designed for ambient computing]: {{site.google-blog}}2019/12/flutter-ui-ambient-computing.html?m=1 [Flutter Favorite program]: /packages-and-plugins/favorites [Flutter 1.12.13]: /release/release-notes/release-notes-1.12.13 [Flutter Gallery]: {{site.gallery-archive}} [Flutter Layout Explorer]: /tools/devtools/inspector#flutter-layout-explorer -[Flutter Medium publication]: {{site.medium}}/flutter +[Flutter Medium publication]: {{site.medium}}flutter [Migrating your plugin to the new Android APIs]: /release/breaking-changes/plugin-api-migration [implicit animations]: /codelabs/implicit-animations -[Web support for Flutter goes beta]: {{site.flutter-medium}}/web-support-for-flutter-goes-beta-35b64a1217c0 +[Web support for Flutter goes beta]: {{site.flutter-medium}}web-support-for-flutter-goes-beta-35b64a1217c0 [write your first Flutter app on the web]: /get-started/codelab-web [Get started]: /get-started/install @@ -1258,19 +1258,19 @@ Happy Fluttering! [1.9.1 release notes]: /release/release-notes/release-notes-1.9.1 [building a web application]: /platform-integration/web/building -[`ColorFiltered`]: {{site.api}}/flutter/widgets/ColorFiltered-class.html -[ColorFiltered demo]: {{site.github}}/csells/flutter_color_filter +[`ColorFiltered`]: {{site.api}}flutter/widgets/ColorFiltered-class.html +[ColorFiltered demo]: {{site.github}}csells/flutter_color_filter [creating responsive apps]: /ui/adaptive-responsive [Flutter for web]: /platform-integration/web -[Flutter news from GDD China: uniting Flutter on web and mobile, and introducing Flutter 1.9]: {{site.google-blog}}/2019/09/flutter-news-from-gdd-china-flutter1.9.html?m=1 -[Improving Flutter's Error Messages]: {{site.flutter-medium}}/improving-flutters-error-messages-e098513cecf9 +[Flutter news from GDD China: uniting Flutter on web and mobile, and introducing Flutter 1.9]: {{site.google-blog}}2019/09/flutter-news-from-gdd-china-flutter1.9.html?m=1 +[Improving Flutter's Error Messages]: {{site.flutter-medium}}improving-flutters-error-messages-e098513cecf9 [Performance view]: /tools/devtools/performance [preparing a web app for release]: /deployment/web -[`SelectableText`]: {{site.api}}/flutter/material/SelectableText-class.html +[`SelectableText`]: {{site.api}}flutter/material/SelectableText-class.html [Showcase]: {{site.main-url}}/showcase -[`ToggleButtons`]: {{site.api}}/flutter/material/ToggleButtons-class.html -[ToggleButtons demo]: {{site.github}}/csells/flutter_toggle_buttons -[Upgrading from package:flutter_web to the Flutter SDK]: {{site.repo.flutter}}/wiki/Upgrading-from-package:flutter_web-to-the-Flutter-SDK +[`ToggleButtons`]: {{site.api}}flutter/material/ToggleButtons-class.html +[ToggleButtons demo]: {{site.github}}csells/flutter_toggle_buttons +[Upgrading from package:flutter_web to the Flutter SDK]: {{site.repo.flutter}}wiki/Upgrading-from-package:flutter_web-to-the-Flutter-SDK [using the dart:ffi library]: /platform-integration/android/c-interop ## 09 Jul 2019: 1.7 release @@ -1310,16 +1310,16 @@ component and how to customize it, see [1.7.8 release notes]: /release/release-notes/release-notes-1.7.8 [Animate a page route transition]: /cookbook/animation/page-route-animation -[Announcing Flutter 1.7]: {{site.flutter-medium}}/announcing-flutter-1-7-9cab4f34eacf +[Announcing Flutter 1.7]: {{site.flutter-medium}}announcing-flutter-1-7-9cab4f34eacf [Cookbook]: /cookbook [Debugging]: /testing/debugging [Debugging apps programmatically]: /testing/code-debugging [Flutter's build modes]: /testing/build-modes -[Material RangeSlider in Flutter]: {{site.flutter-medium}}/material-range-slider-in-flutter-a285c6e3447d +[Material RangeSlider in Flutter]: {{site.flutter-medium}}material-range-slider-in-flutter-a285c6e3447d [Performance best practices]: /perf/best-practices [Performance profiling]: /perf/ui-performance [Preparing an Android app for release]: /deployment/android -[`RangeSlider`]: {{site.api}}/flutter/material/RangeSlider-class.html +[`RangeSlider`]: {{site.api}}flutter/material/RangeSlider-class.html [Simple app state management]: /data-and-backend/state-mgmt/simple ## 07 May 2019: Google I/O 2019: 1.5 release @@ -1333,7 +1333,7 @@ We are updating DartPad to work with Flutter. Try the new Basic Flutter layout codelab and tell us what you think! [download the release]: /release/archive -[Flutter 1.5]: {{site.google-blog}}/2019/05/Flutter-io19.html +[Flutter 1.5]: {{site.google-blog}}2019/05/Flutter-io19.html [1.5.4 release notes]: /release/release-notes/release-notes-1.5.4 ## 26 Feb 2019: 1.2 release @@ -1371,7 +1371,7 @@ If you have questions or comments about any of these docs, [Android Studio/IntelliJ]: /tools/android-studio [different state management options]: /data-and-backend/state-mgmt/options [ephemeral vs app state]: /data-and-backend/state-mgmt/ephemeral-vs-app -[file-issue]: {{site.repo.this}}/issues +[file-issue]: {{site.repo.this}}issues [introduction]: /data-and-backend/state-mgmt/intro [1.2.1 release notes]: /release/release-notes/release-notes-1.2.1 [state management advice]: /data-and-backend/state-mgmt/intro @@ -1381,7 +1381,7 @@ If you have questions or comments about any of these docs, [VS Code]: /tools/vs-code [widget inspector]: /tools/devtools/inspector -[version 1.2]: {{site.google-blog}}/2019/02/launching-flutter-12-at-mobile-world.html +[version 1.2]: {{site.google-blog}}2019/02/launching-flutter-12-at-mobile-world.html ## 05 Nov 2018: new website @@ -1416,7 +1416,7 @@ If you have questions or comments about the revamped site, [a native debugger _and_ a Dart debugger to your app]: /testing/oem-debuggers [Background Dart processes]: /packages-and-plugins/background-processes [community]: {{site.main-url}}/community -[file an issue]: {{site.repo.this}}/issues +[file an issue]: {{site.repo.this}}issues [front]: / [Inside Flutter]: /resources/inside-flutter [State management]: /data-and-backend/state-mgmt diff --git a/src/content/release/archive.md b/src/content/release/archive.md index 200d39ba57..2c30bc32e5 100644 --- a/src/content/release/archive.md +++ b/src/content/release/archive.md @@ -99,7 +99,7 @@ please follow us on Weibo: [Flutter Community](https://weibo.com/u/6723427904)! 我们会在社区微博上发布一条信息,欢迎关注 [Flutter 社区](https://weibo.com/u/6723427904) 微博账号! -[Flutter's channels]: {{site.repo.flutter}}/wiki/Flutter-build-release-channels +[Flutter's channels]: {{site.repo.flutter}}wiki/Flutter-build-release-channels [release notes]: /release/release-notes [GitHub repo]: {{site.repo.flutter}} -[Installation bundles]: {{site.repo.flutter}}/wiki/Flutter-Installation-Bundles +[Installation bundles]: {{site.repo.flutter}}wiki/Flutter-Installation-Bundles diff --git a/src/content/release/breaking-changes/1-22-deprecations.md b/src/content/release/breaking-changes/1-22-deprecations.md index 97c1b798f4..390a2236c9 100644 --- a/src/content/release/breaking-changes/1-22-deprecations.md +++ b/src/content/release/breaking-changes/1-22-deprecations.md @@ -22,10 +22,10 @@ primary source to aid in migration. A A [design document][] and [article][] are available for more context on Flutter's deprecation policy. -[Deprecation Policy]: {{site.repo.flutter}}/wiki/Tree-hygiene#deprecation +[Deprecation Policy]: {{site.repo.flutter}}wiki/Tree-hygiene#deprecation [quick reference sheet]: /go/deprecations-removed-after-1-22 [design document]: /go/deprecation-lifetime -[article]: {{site.flutter-medium}}/deprecation-lifetime-in-flutter-e4d76ee738ad +[article]: {{site.flutter-medium}}deprecation-lifetime-in-flutter-e4d76ee738ad ## Changes @@ -84,11 +84,11 @@ Relevant PRs: * Deprecated in [#20649][] * Removed in [#73604][] -[`CupertinoAlertDialog`]: {{site.api}}/flutter/cupertino/CupertinoAlertDialog-class.html -[`CupertinoPopupSurface`]: {{site.api}}/flutter/cupertino/CupertinoPopupSurface-class.html -[Deprecate CupertinoDialog class]: {{site.repo.flutter}}/issues/20397 -[#20649]: {{site.repo.flutter}}/pull/20649 -[#73604]: {{site.repo.flutter}}/pull/73604 +[`CupertinoAlertDialog`]: {{site.api}}flutter/cupertino/CupertinoAlertDialog-class.html +[`CupertinoPopupSurface`]: {{site.api}}flutter/cupertino/CupertinoPopupSurface-class.html +[Deprecate CupertinoDialog class]: {{site.repo.flutter}}issues/20397 +[#20649]: {{site.repo.flutter}}pull/20649 +[#73604]: {{site.repo.flutter}}pull/73604 --- @@ -148,13 +148,13 @@ Relevant PRs: * Deprecated in [#23759][] * Removed in [#73745][] -[`CupertinoNavigationBar`]: {{site.api}}/flutter/cupertino/CupertinoNavigationBar-class.html -[`CupertinoSliverNavigationBar`]: {{site.api}}/flutter/cupertino/CupertinoSliverNavigationBar-class.html -[`CupertinoTheme`]: {{site.api}}/flutter/cupertino/CupertinoTheme-class.html -[`CupertinoThemeData`]: {{site.api}}/flutter/cupertino/CupertinoThemeData-class.html -[Create a CupertinoApp and a CupertinoTheme]: {{site.repo.flutter}}/issues/18037 -[#23759]: {{site.repo.flutter}}/pull/23759 -[#73745]: {{site.repo.flutter}}/pull/73745 +[`CupertinoNavigationBar`]: {{site.api}}flutter/cupertino/CupertinoNavigationBar-class.html +[`CupertinoSliverNavigationBar`]: {{site.api}}flutter/cupertino/CupertinoSliverNavigationBar-class.html +[`CupertinoTheme`]: {{site.api}}flutter/cupertino/CupertinoTheme-class.html +[`CupertinoThemeData`]: {{site.api}}flutter/cupertino/CupertinoThemeData-class.html +[Create a CupertinoApp and a CupertinoTheme]: {{site.repo.flutter}}issues/18037 +[#23759]: {{site.repo.flutter}}pull/23759 +[#73745]: {{site.repo.flutter}}pull/73745 --- @@ -198,10 +198,10 @@ Relevant PRs: * Deprecated in [#41859][] * Removed in [#72017][] -[`CupertinoTextThemeData`]: {{site.api}}/flutter/cupertino/CupertinoTextThemeData-class.html -[Revise CupertinoColors and CupertinoTheme for dynamic colors]: {{site.repo.flutter}}/issues/35541 -[#41859]: {{site.repo.flutter}}/pull/41859 -[#72017]: {{site.repo.flutter}}/pull/72017 +[`CupertinoTextThemeData`]: {{site.api}}flutter/cupertino/CupertinoTextThemeData-class.html +[Revise CupertinoColors and CupertinoTheme for dynamic colors]: {{site.repo.flutter}}issues/35541 +[#41859]: {{site.repo.flutter}}pull/41859 +[#72017]: {{site.repo.flutter}}pull/72017 --- @@ -246,11 +246,11 @@ Relevant PRs: * Deprecated in [#28602][] * Removed in [#72395][] -[`PointerEnterEvent`]: {{site.api}}/flutter/gestures/PointerEnterEvent-class.html -[`PointerExitEvent`]: {{site.api}}/flutter/gestures/PointerExitEvent-class.html -[PointerEnterEvent and PointerExitEvent can only be created from hover events]: {{site.repo.flutter}}/issues/29696 -[#28602]: {{site.repo.flutter}}/pull/28602 -[#72395]: {{site.repo.flutter}}/pull/72395 +[`PointerEnterEvent`]: {{site.api}}flutter/gestures/PointerEnterEvent-class.html +[`PointerExitEvent`]: {{site.api}}flutter/gestures/PointerExitEvent-class.html +[PointerEnterEvent and PointerExitEvent can only be created from hover events]: {{site.repo.flutter}}issues/29696 +[#28602]: {{site.repo.flutter}}pull/28602 +[#72395]: {{site.repo.flutter}}pull/72395 --- @@ -289,10 +289,10 @@ Relevant PRs: * Deprecated in [#15303][] * Removed in [#72532][] -[`showDialog`]: {{site.api}}/flutter/material/showDialog.html -[showDialog should take a builder rather than a child]: {{site.repo.flutter}}/issues/14341 -[#15303]: {{site.repo.flutter}}/pull/15303 -[#72532]: {{site.repo.flutter}}/pull/72532 +[`showDialog`]: {{site.api}}flutter/material/showDialog.html +[showDialog should take a builder rather than a child]: {{site.repo.flutter}}issues/14341 +[#15303]: {{site.repo.flutter}}pull/15303 +[#72532]: {{site.repo.flutter}}pull/72532 --- @@ -336,14 +336,14 @@ Relevant PRs: * Deprecated in [#26259][] * Removed in [#72890][] -[`Scaffold`]: {{site.api}}/flutter/material/Scaffold-class.html -[Show warning when nesting Scaffolds]: {{site.repo.flutter}}/issues/23106 -[SafeArea with keyboard]: {{site.repo.flutter}}/issues/25758 -[Double stacked material scaffolds shouldn't double resizeToAvoidBottomPadding]: {{site.repo.flutter}}/issues/12084 -[viewInsets and padding on Window and MediaQueryData should define how they interact]: {{site.repo.flutter}}/issues/15424 -[bottom overflow issue, when using textfields inside tabbarview]: {{site.repo.flutter}}/issues/20295 -[#26259]: {{site.repo.flutter}}/pull/26259 -[#72890]: {{site.repo.flutter}}/pull/72890 +[`Scaffold`]: {{site.api}}flutter/material/Scaffold-class.html +[Show warning when nesting Scaffolds]: {{site.repo.flutter}}issues/23106 +[SafeArea with keyboard]: {{site.repo.flutter}}issues/25758 +[Double stacked material scaffolds shouldn't double resizeToAvoidBottomPadding]: {{site.repo.flutter}}issues/12084 +[viewInsets and padding on Window and MediaQueryData should define how they interact]: {{site.repo.flutter}}issues/15424 +[bottom overflow issue, when using textfields inside tabbarview]: {{site.repo.flutter}}issues/20295 +[#26259]: {{site.repo.flutter}}pull/26259 +[#72890]: {{site.repo.flutter}}pull/72890 --- @@ -420,20 +420,20 @@ Relevant PRs: * Deprecated in [#37544][] * Removed in [#73746][] -[`ButtonTheme`]: {{site.api}}/flutter/material/ButtonTheme-class.html -[`ButtonBarTheme`]: {{site.api}}/flutter/material/ButtonBarTheme-class.html -[`ButtonBar`]: {{site.api}}/flutter/material/ButtonBar-class.html -[`TextButtonTheme`]: {{site.api}}/flutter/material/TextButtonTheme-class.html -[`TextButton`]: {{site.api}}/flutter/material/TextButton-class.html -[`ElevatedButtonTheme`]: {{site.api}}/flutter/material/ElevatedButtonTheme-class.html -[`ElevatedButton`]: {{site.api}}/flutter/material/ElevatedButton-class.html -[`OutlinedButtonTheme`]: {{site.api}}/flutter/material/OutlinedButtonTheme-class.html -[`OutlinedButton`]: {{site.api}}/flutter/material/OutlinedButton-class.html -[ButtonTheme.bar uses accent color when it should be using primary color]: {{site.repo.flutter}}/issues/31333 -[ThemeData.accentColor has insufficient contrast for text]: {{site.repo.flutter}}/issues/19946 -[Increased height as a result of changes to materialTapTargetSize affecting AlertDialog/ButtonBar heights]: {{site.repo.flutter}}/issues/20585 -[#37544]: {{site.repo.flutter}}/pull/37544 -[#73746]: {{site.repo.flutter}}/pull/73746 +[`ButtonTheme`]: {{site.api}}flutter/material/ButtonTheme-class.html +[`ButtonBarTheme`]: {{site.api}}flutter/material/ButtonBarTheme-class.html +[`ButtonBar`]: {{site.api}}flutter/material/ButtonBar-class.html +[`TextButtonTheme`]: {{site.api}}flutter/material/TextButtonTheme-class.html +[`TextButton`]: {{site.api}}flutter/material/TextButton-class.html +[`ElevatedButtonTheme`]: {{site.api}}flutter/material/ElevatedButtonTheme-class.html +[`ElevatedButton`]: {{site.api}}flutter/material/ElevatedButton-class.html +[`OutlinedButtonTheme`]: {{site.api}}flutter/material/OutlinedButtonTheme-class.html +[`OutlinedButton`]: {{site.api}}flutter/material/OutlinedButton-class.html +[ButtonTheme.bar uses accent color when it should be using primary color]: {{site.repo.flutter}}issues/31333 +[ThemeData.accentColor has insufficient contrast for text]: {{site.repo.flutter}}issues/19946 +[Increased height as a result of changes to materialTapTargetSize affecting AlertDialog/ButtonBar heights]: {{site.repo.flutter}}issues/20585 +[#37544]: {{site.repo.flutter}}pull/37544 +[#73746]: {{site.repo.flutter}}pull/73746 --- @@ -479,16 +479,16 @@ Relevant PRs: * Deprecated in [#34051][] * Removed in [#73747][] -[`InlineSpan`]: {{site.api}}/flutter/painting/InlineSpan-class.html -[`TextSpan`]: {{site.api}}/flutter/painting/TextSpan-class.html -[`PlaceholderSpan`]: {{site.api}}/flutter/painting/PlaceholderSpan-class.html -[`WidgetSpan`]: {{site.api}}/flutter/widgets/WidgetSpan-class.html -[Text: support inline images]: {{site.repo.flutter}}/issues/2022 -[#30069]: {{site.repo.flutter}}/pull/30069 -[#33946]: {{site.repo.flutter}}/pull/33946 -[#33794]: {{site.repo.flutter}}/pull/33794 -[#34051]: {{site.repo.flutter}}/pull/34051 -[#73747]: {{site.repo.flutter}}/pull/73747 +[`InlineSpan`]: {{site.api}}flutter/painting/InlineSpan-class.html +[`TextSpan`]: {{site.api}}flutter/painting/TextSpan-class.html +[`PlaceholderSpan`]: {{site.api}}flutter/painting/PlaceholderSpan-class.html +[`WidgetSpan`]: {{site.api}}flutter/widgets/WidgetSpan-class.html +[Text: support inline images]: {{site.repo.flutter}}issues/2022 +[#30069]: {{site.repo.flutter}}pull/30069 +[#33946]: {{site.repo.flutter}}pull/33946 +[#33794]: {{site.repo.flutter}}pull/33794 +[#34051]: {{site.repo.flutter}}pull/34051 +[#73747]: {{site.repo.flutter}}pull/73747 --- @@ -534,12 +534,12 @@ Relevant PRs: * Deprecated in [#39535][] * Removed in [#73748][] -[`RenderView`]: {{site.api}}/flutter/rendering/RenderView-class.html -[`TextSpan`]: {{site.api}}/flutter/widgets/WidgetsFlutterBinding-class.html -[`WidgetsFlutterBinding`]: {{site.api}}/flutter/widgets/WidgetsFlutterBinding-class.html -[WidgetsFlutterBinding.ensureInitialized() takes down splash screen too early]: {{site.repo.flutter}}/issues/39494 -[#39535]: {{site.repo.flutter}}/pull/39535 -[#73748]: {{site.repo.flutter}}/pull/73748 +[`RenderView`]: {{site.api}}flutter/rendering/RenderView-class.html +[`TextSpan`]: {{site.api}}flutter/widgets/WidgetsFlutterBinding-class.html +[`WidgetsFlutterBinding`]: {{site.api}}flutter/widgets/WidgetsFlutterBinding-class.html +[WidgetsFlutterBinding.ensureInitialized() takes down splash screen too early]: {{site.repo.flutter}}issues/39494 +[#39535]: {{site.repo.flutter}}pull/39535 +[#73748]: {{site.repo.flutter}}pull/73748 --- @@ -588,15 +588,15 @@ Relevant PRs: * Deprecated in [#42953][] * Removed in [#73749][] -[`Layer`]: {{site.api}}/flutter/rendering/Layer-class.html -[`MouseRegion`]: {{site.api}}/flutter/widgets/MouseRegion-class.html -[`RenderMouseRegion`]: {{site.api}}/flutter/rendering/RenderMouseRegion-class.html -[`AnnotatedRegionLayer`]: {{site.api}}/flutter/rendering/AnnotatedRegionLayer-class.html -[`AnnotationResult`]: {{site.api}}/flutter/rendering/AnnotationResult-class.html -[Breaking Proposal: MouseRegion defaults to opaque; Layers are required to implement findAnnotations]: {{site.repo.flutter}}/issues/38488 -[#37896]: {{site.repo.flutter}}/pull/37896 -[#42953]: {{site.repo.flutter}}/pull/42953 -[#73749]: {{site.repo.flutter}}/pull/73749 +[`Layer`]: {{site.api}}flutter/rendering/Layer-class.html +[`MouseRegion`]: {{site.api}}flutter/widgets/MouseRegion-class.html +[`RenderMouseRegion`]: {{site.api}}flutter/rendering/RenderMouseRegion-class.html +[`AnnotatedRegionLayer`]: {{site.api}}flutter/rendering/AnnotatedRegionLayer-class.html +[`AnnotationResult`]: {{site.api}}flutter/rendering/AnnotationResult-class.html +[Breaking Proposal: MouseRegion defaults to opaque; Layers are required to implement findAnnotations]: {{site.repo.flutter}}issues/38488 +[#37896]: {{site.repo.flutter}}pull/37896 +[#42953]: {{site.repo.flutter}}pull/42953 +[#73749]: {{site.repo.flutter}}pull/73749 --- @@ -638,12 +638,12 @@ Relevant PRs: * Deprecated in [#38464][] * Removed in [#73750][] -[`ServicesBinding`]: {{site.api}}/flutter/services/ServicesBinding-mixin.html -[`BinaryMessenger`]: {{site.api}}/flutter/services/BinaryMessenger-class.html -[Flutter synchronization support for Espresso/EarlGrey]: {{site.repo.flutter}}/issues/37409 -[#37489]: {{site.repo.flutter}}/pull/37489 -[#38464]: {{site.repo.flutter}}/pull/38464 -[#73750]: {{site.repo.flutter}}/pull/73750 +[`ServicesBinding`]: {{site.api}}flutter/services/ServicesBinding-mixin.html +[`BinaryMessenger`]: {{site.api}}flutter/services/BinaryMessenger-class.html +[Flutter synchronization support for Espresso/EarlGrey]: {{site.repo.flutter}}issues/37409 +[#37489]: {{site.repo.flutter}}pull/37489 +[#38464]: {{site.repo.flutter}}pull/38464 +[#73750]: {{site.repo.flutter}}pull/73750 --- @@ -724,15 +724,15 @@ Relevant PRs: * [#72901][] * [#73751][] -[`Type`]: {{site.api}}/flutter/dart-core/Type-class.html -[`BuildContext`]: {{site.api}}/flutter/widgets/BuildContext-class.html -[`Element`]: {{site.api}}/flutter/widgets/Element-class.html -[`StatefulElement`]: {{site.api}}/flutter/widgets/StatefulElement-class.html -[#44189]: {{site.repo.flutter}}/pull/44189 -[#69620]: {{site.repo.flutter}}/pull/69620 -[#72903]: {{site.repo.flutter}}/pull/72903 -[#72901]: {{site.repo.flutter}}/pull/72901 -[#73751]: {{site.repo.flutter}}/pull/73751 +[`Type`]: {{site.api}}flutter/dart-core/Type-class.html +[`BuildContext`]: {{site.api}}flutter/widgets/BuildContext-class.html +[`Element`]: {{site.api}}flutter/widgets/Element-class.html +[`StatefulElement`]: {{site.api}}flutter/widgets/StatefulElement-class.html +[#44189]: {{site.repo.flutter}}pull/44189 +[#69620]: {{site.repo.flutter}}pull/69620 +[#72903]: {{site.repo.flutter}}pull/72903 +[#72901]: {{site.repo.flutter}}pull/72901 +[#73751]: {{site.repo.flutter}}pull/73751 --- @@ -782,11 +782,11 @@ Relevant PRs: * Deprecated in [#45941][] * Removed in [#72893][] -[`WidgetsBinding`]: {{site.api}}/flutter/widgets/WidgetsBinding-mixin.html -[#45135]: {{site.repo.flutter}}/pull/45135 -[#45588]: {{site.repo.flutter}}/pull/45588 -[#45941]: {{site.repo.flutter}}/pull/45941 -[#72893]: {{site.repo.flutter}}/pull/72893 +[`WidgetsBinding`]: {{site.api}}flutter/widgets/WidgetsBinding-mixin.html +[#45135]: {{site.repo.flutter}}pull/45135 +[#45588]: {{site.repo.flutter}}pull/45588 +[#45941]: {{site.repo.flutter}}pull/45941 +[#72893]: {{site.repo.flutter}}pull/72893 --- @@ -823,10 +823,10 @@ Relevant PRs: * Deprecated in [#38836][] * Removed in [#73754][] -[`WaitForCondition`]: {{site.api}}/flutter/flutter_driver/WaitForCondition-class.html -[#37736]: {{site.repo.flutter}}/pull/37736 -[#38836]: {{site.repo.flutter}}/pull/38836 -[#73754]: {{site.repo.flutter}}/pull/73754 +[`WaitForCondition`]: {{site.api}}flutter/flutter_driver/WaitForCondition-class.html +[#37736]: {{site.repo.flutter}}pull/37736 +[#38836]: {{site.repo.flutter}}pull/38836 +[#73754]: {{site.repo.flutter}}pull/73754 --- diff --git a/src/content/release/breaking-changes/2-10-deprecations.md b/src/content/release/breaking-changes/2-10-deprecations.md index 2f35f06ec7..c6dd8d41da 100644 --- a/src/content/release/breaking-changes/2-10-deprecations.md +++ b/src/content/release/breaking-changes/2-10-deprecations.md @@ -16,7 +16,7 @@ primary source to aid in migration. A [quick reference sheet][] is available as well. -[Deprecation Policy]: {{site.repo.flutter}}/wiki/Tree-hygiene#deprecation +[Deprecation Policy]: {{site.repo.flutter}}wiki/Tree-hygiene#deprecation [quick reference sheet]: /go/deprecations-removed-after-2-10 ## Changes @@ -90,17 +90,17 @@ API documentation: Relevant issues: -* [Issue 67898]({{site.repo.flutter}}/issues/67898) +* [Issue 67898]({{site.repo.flutter}}issues/67898) Relevant PRs: -* Deprecated in [#68086]({{site.repo.flutter}}/pull/68086) -* Removed in [#98539]({{site.repo.flutter}}/pull/98539) +* Deprecated in [#68086]({{site.repo.flutter}}pull/68086) +* Removed in [#98539]({{site.repo.flutter}}pull/98539) [In-depth migration guide available]: /release/breaking-changes/use-maxLengthEnforcement-instead-of-maxLengthEnforced -[`TextField`]: {{site.api}}/flutter/material/TextField-class.html -[`TextFormField`]: {{site.api}}/flutter/material/TextFormField-class.html -[`CupertinoTextField`]: {{site.api}}/flutter/cupertino/CupertinoTextField-class.html +[`TextField`]: {{site.api}}flutter/material/TextField-class.html +[`TextFormField`]: {{site.api}}flutter/material/TextFormField-class.html +[`CupertinoTextField`]: {{site.api}}flutter/cupertino/CupertinoTextField-class.html --- @@ -137,11 +137,11 @@ API documentation: Relevant PRs: -* Deprecated in [#66043]({{site.repo.flutter}}/pull/66043) -* Removed in [#98541]({{site.repo.flutter}}/pull/98541) +* Deprecated in [#66043]({{site.repo.flutter}}pull/66043) +* Removed in [#98541]({{site.repo.flutter}}pull/98541) -[`VelocityTracker`]: {{site.api}}/flutter/gestures/VelocityTracker-class.html -[`PointerDeviceKind`]: {{site.api}}/flutter/dart-ui/PointerDeviceKind.html +[`VelocityTracker`]: {{site.api}}flutter/gestures/VelocityTracker-class.html +[`PointerDeviceKind`]: {{site.api}}flutter/dart-ui/PointerDeviceKind.html --- @@ -171,16 +171,16 @@ API documentation: Relevant issues: -* [Issue 50133]({{site.repo.flutter}}/issues/50133) +* [Issue 50133]({{site.repo.flutter}}issues/50133) Relevant PRs: -* Deprecated in [#50546]({{site.repo.flutter}}/issues/50546) -* Removed in [#98543]({{site.repo.flutter}}/issues/98543) +* Deprecated in [#50546]({{site.repo.flutter}}issues/50546) +* Removed in [#98543]({{site.repo.flutter}}issues/98543) [Material Date Picker Redesign]: /go/material-date-picker-redesign -[`CalendarDatePicker`]: {{site.api}}/flutter/material/CalendarDatePicker-class.html -[`showDatePicker`]: {{site.api}}/flutter/material/showDatePicker.html +[`CalendarDatePicker`]: {{site.api}}flutter/material/CalendarDatePicker-class.html +[`showDatePicker`]: {{site.api}}flutter/material/showDatePicker.html --- @@ -277,23 +277,23 @@ API documentation: Relevant PRs: -* New API added in [#59702]({{site.repo.flutter}}/issues/59702) -* Deprecated in [#73352]({{site.repo.flutter}}/issues/73352) -* Removed in [#98546]({{site.repo.flutter}}/issues/98546) +* New API added in [#59702]({{site.repo.flutter}}issues/59702) +* Deprecated in [#73352]({{site.repo.flutter}}issues/73352) +* Removed in [#98546]({{site.repo.flutter}}issues/98546) [In-depth migration guide available for detailed styling]: /release/breaking-changes/buttons [New Material buttons and themes]: /go/material-button-migration-guide -[`ButtonStyle`]: {{site.api}}/flutter/material/ButtonStyle-class.html -[`ButtonStyleButton`]: {{site.api}}/flutter/material/ButtonStyleButton-class.html -[`ElevatedButton`]: {{site.api}}/flutter/material/ElevatedButton-class.html -[`ElevatedButtonTheme`]: {{site.api}}/flutter/material/ElevatedButtonTheme-class.html -[`ElevatedButtonThemeData`]: {{site.api}}/flutter/material/ElevatedButtonThemeData-class.html -[`OutlinedButton`]: {{site.api}}/flutter/material/OutlinedButton-class.html -[`OutlinedButtonTheme`]: {{site.api}}/flutter/material/OutlinedButtonTheme-class.html -[`OutlinedButtonThemeData`]: {{site.api}}/flutter/material/OutlinedButtonThemeData-class.html -[`TextButton`]: {{site.api}}/flutter/material/TextButton-class.html -[`TextButtonTheme`]: {{site.api}}/flutter/material/TextButtonTheme-class.html -[`TextButtonThemeData`]: {{site.api}}/flutter/material/TextButtonThemeData-class.html +[`ButtonStyle`]: {{site.api}}flutter/material/ButtonStyle-class.html +[`ButtonStyleButton`]: {{site.api}}flutter/material/ButtonStyleButton-class.html +[`ElevatedButton`]: {{site.api}}flutter/material/ElevatedButton-class.html +[`ElevatedButtonTheme`]: {{site.api}}flutter/material/ElevatedButtonTheme-class.html +[`ElevatedButtonThemeData`]: {{site.api}}flutter/material/ElevatedButtonThemeData-class.html +[`OutlinedButton`]: {{site.api}}flutter/material/OutlinedButton-class.html +[`OutlinedButtonTheme`]: {{site.api}}flutter/material/OutlinedButtonTheme-class.html +[`OutlinedButtonThemeData`]: {{site.api}}flutter/material/OutlinedButtonThemeData-class.html +[`TextButton`]: {{site.api}}flutter/material/TextButton-class.html +[`TextButtonTheme`]: {{site.api}}flutter/material/TextButtonTheme-class.html +[`TextButtonThemeData`]: {{site.api}}flutter/material/TextButtonThemeData-class.html --- @@ -347,21 +347,21 @@ API documentation: Relevant issues: -* [Issue 57218]({{site.repo.flutter}}/issues/57218) -* [Issue 62921]({{site.repo.flutter}}/issues/62921) +* [Issue 57218]({{site.repo.flutter}}issues/57218) +* [Issue 62921]({{site.repo.flutter}}issues/62921) Relevant PRs: -* New API added in [#64101]({{site.repo.flutter}}/issues/64101) -* Deprecated in [#67947]({{site.repo.flutter}}/issues/67947) -* Removed in [#98549]({{site.repo.flutter}}/issues/98549) +* New API added in [#64101]({{site.repo.flutter}}issues/64101) +* Deprecated in [#67947]({{site.repo.flutter}}issues/67947) +* Removed in [#98549]({{site.repo.flutter}}issues/98549) [In-depth migration guide available]: /release/breaking-changes/scaffold-messenger [ScaffoldMessenger Design]: /go/scaffold-messenger [SnackBar Delivery]: https://youtu.be/sYG7HAGu_Eg?t=10271 [Widget of the Week]: https://youtu.be/lytQi-slT5Y -[`ScaffoldMessenger`]: {{site.api}}/flutter/material/ScaffoldMessenger-class.html -[`SnackBar`]: {{site.api}}/flutter/material/SnackBar-class.html +[`ScaffoldMessenger`]: {{site.api}}flutter/material/ScaffoldMessenger-class.html +[`SnackBar`]: {{site.api}}flutter/material/SnackBar-class.html --- @@ -395,11 +395,11 @@ API documentation: * [`RectangularSliderTrackShape`][] Relevant PRs: -* Animation changed in [#30390]({{site.repo.flutter}}/issues/30390) -* Deprecated in [#65246]({{site.repo.flutter}}/issues/65246) -* Removed in [#98613]({{site.repo.flutter}}/issues/98613) +* Animation changed in [#30390]({{site.repo.flutter}}issues/30390) +* Deprecated in [#65246]({{site.repo.flutter}}issues/65246) +* Removed in [#98613]({{site.repo.flutter}}issues/98613) -[`RectangularSliderTrackShape`]: {{site.api}}/flutter/material/RectangularSliderTrackShape-class.html +[`RectangularSliderTrackShape`]: {{site.api}}flutter/material/RectangularSliderTrackShape-class.html --- @@ -461,20 +461,20 @@ API documentation: Relevant issues: -* [Issue 17635]({{site.repo.flutter}}/issues/17635) -* [Issue 56082]({{site.repo.flutter}}/issues/56082) -* [Issue 61227]({{site.repo.flutter}}/issues/61227) +* [Issue 17635]({{site.repo.flutter}}issues/17635) +* [Issue 56082]({{site.repo.flutter}}issues/56082) +* [Issue 61227]({{site.repo.flutter}}issues/61227) Relevant PRs: -* New API added in [#62014]({{site.repo.flutter}}/issues/62014) -* Deprecated in [#66485]({{site.repo.flutter}}/issues/66482) -* Removed in [#98578]({{site.repo.flutter}}/issues/98578) +* New API added in [#62014]({{site.repo.flutter}}issues/62014) +* Deprecated in [#66485]({{site.repo.flutter}}issues/66482) +* Removed in [#98578]({{site.repo.flutter}}issues/98578) [In-depth migration guide available]: /release/breaking-changes/text-selection-theme [Text Selection Theme]: /go/text-selection-theme -[`ThemeData`]: {{site.api}}/flutter/material/ThemeData-class.html -[`TextSelectionThemeData`]: {{site.api}}/flutter/material/TextSelectionThemeData-class.html +[`ThemeData`]: {{site.api}}flutter/material/ThemeData-class.html +[`TextSelectionThemeData`]: {{site.api}}flutter/material/TextSelectionThemeData-class.html --- @@ -513,15 +513,15 @@ API documentation: Relevant issues: -* Resolved [#75505]({{site.repo.flutter}}/issues/75502) +* Resolved [#75505]({{site.repo.flutter}}issues/75502) Relevant PRs: -* Deprecated in [#75541]({{site.repo.flutter}}/issues/75541) -* Removed in [#98582]({{site.repo.flutter}}/issues/98582) +* Deprecated in [#75541]({{site.repo.flutter}}issues/75541) +* Removed in [#98582]({{site.repo.flutter}}issues/98582) -[`RenderEditable`]: {{site.api}}/flutter/rendering/RenderEditable-class.html -[`TextSelectionDelegate`]: {{site.api}}/flutter/services/TextSelectionDelegate-mixin.html +[`RenderEditable`]: {{site.api}}flutter/rendering/RenderEditable-class.html +[`TextSelectionDelegate`]: {{site.api}}flutter/services/TextSelectionDelegate-mixin.html --- @@ -562,16 +562,16 @@ API documentation: Relevant issues: -* Resolved [#66030]({{site.repo.flutter}}/issues/66030) +* Resolved [#66030]({{site.repo.flutter}}issues/66030) Relevant PRs: -* Deprecated in [#66305]({{site.repo.flutter}}/issues/66305) -* Removed in [#98583]({{site.repo.flutter}}/issues/98583) +* Deprecated in [#66305]({{site.repo.flutter}}issues/66305) +* Removed in [#98583]({{site.repo.flutter}}issues/98583) [In-depth migration guide available]: /release/breaking-changes/clip-behavior -[`Stack`]: {{site.api}}/flutter/widgets/Stack-class.html -[`Clip`]: {{site.api}}/flutter/dart-ui/Clip.html +[`Stack`]: {{site.api}}flutter/widgets/Stack-class.html +[`Clip`]: {{site.api}}flutter/dart-ui/Clip.html --- @@ -593,10 +593,10 @@ API documentation: Relevant PRs: -* Deprecated in [#45940]({{site.repo.flutter}}/issues/45940) -* Removed in [#98615]({{site.repo.flutter}}/issues/98615) +* Deprecated in [#45940]({{site.repo.flutter}}issues/45940) +* Removed in [#98615]({{site.repo.flutter}}issues/98615) -[`SemanticsEvent`]: {{site.api}}/flutter/semantics/SemanticsEvent-class.html +[`SemanticsEvent`]: {{site.api}}flutter/semantics/SemanticsEvent-class.html --- @@ -645,14 +645,14 @@ API documentation: Relevant issues: -* [Issue 63269]({{site.repo.flutter}}/issues/63269) +* [Issue 63269]({{site.repo.flutter}}issues/63269) Relevant PRs: -* Deprecated in [#64254]({{site.repo.flutter}}/issues/64254) -* Removed in [#98616]({{site.repo.flutter}}/issues/98616) +* Deprecated in [#64254]({{site.repo.flutter}}issues/64254) +* Removed in [#98616]({{site.repo.flutter}}issues/98616) -[`RenderObjectElement`]: {{site.api}}/flutter/widgets/RenderObjectElement-class.html +[`RenderObjectElement`]: {{site.api}}flutter/widgets/RenderObjectElement-class.html --- diff --git a/src/content/release/breaking-changes/2-2-deprecations.md b/src/content/release/breaking-changes/2-2-deprecations.md index 220f93d422..ed86b41a41 100644 --- a/src/content/release/breaking-changes/2-2-deprecations.md +++ b/src/content/release/breaking-changes/2-2-deprecations.md @@ -15,7 +15,7 @@ All affected APIs have been compiled into this primary source to aid in migration. A [quick reference sheet][] is available as well. -[Deprecation Policy]: {{site.repo.flutter}}/wiki/Tree-hygiene#deprecation +[Deprecation Policy]: {{site.repo.flutter}}wiki/Tree-hygiene#deprecation [quick reference sheet]: /go/deprecations-removed-after-2-2 ## Changes @@ -108,12 +108,12 @@ Relevant PRs: * Deprecated in [#46115][] * Removed in [#83923][] -[`InputDecoration`]: {{site.api}}/flutter/material/InputDecoration-class.html -[`InputDecorationTheme`]: {{site.api}}/flutter/material/InputDecorationTheme-class.html -[`FloatingLabelBehavior`]: {{site.api}}/flutter/material/FloatingLabelBehavior-class.html -[InputDecoration: option to always float label]: {{site.repo.flutter}}/issues/30664 -[#46115]: {{site.repo.flutter}}/pull/46115 -[#83923]: {{site.repo.flutter}}/pull/83923 +[`InputDecoration`]: {{site.api}}flutter/material/InputDecoration-class.html +[`InputDecorationTheme`]: {{site.api}}flutter/material/InputDecorationTheme-class.html +[`FloatingLabelBehavior`]: {{site.api}}flutter/material/FloatingLabelBehavior-class.html +[InputDecoration: option to always float label]: {{site.repo.flutter}}issues/30664 +[#46115]: {{site.repo.flutter}}pull/46115 +[#83923]: {{site.repo.flutter}}pull/83923 --- @@ -268,10 +268,10 @@ Relevant PRs: * Removed in [#83924][] [Update the TextTheme API]: /go/update-text-theme-api -[`TextTheme`]: {{site.api}}/flutter/material/TextTheme-class.html -[Migrate TextTheme to 2018 APIs]: {{site.repo.flutter}}/issues/45745 -[#48547]: {{site.repo.flutter}}/pull/48547 -[#83924]: {{site.repo.flutter}}/pull/83924 +[`TextTheme`]: {{site.api}}flutter/material/TextTheme-class.html +[Migrate TextTheme to 2018 APIs]: {{site.repo.flutter}}issues/45745 +[#48547]: {{site.repo.flutter}}pull/48547 +[#83924]: {{site.repo.flutter}}pull/83924 --- @@ -324,10 +324,10 @@ Relevant PRs: * Removed in [#83924][] [Update the TextTheme API]: /go/update-text-theme-api -[`Typography`]: {{site.api}}/flutter/material/Typography-class.html -[Migrate TextTheme to 2018 APIs]: {{site.repo.flutter}}/issues/45745 -[#48547]: {{site.repo.flutter}}/pull/48547 -[#83924]: {{site.repo.flutter}}/pull/83924 +[`Typography`]: {{site.api}}flutter/material/Typography-class.html +[Migrate TextTheme to 2018 APIs]: {{site.repo.flutter}}issues/45745 +[#48547]: {{site.repo.flutter}}pull/48547 +[#83924]: {{site.repo.flutter}}pull/83924 --- diff --git a/src/content/release/breaking-changes/2-5-deprecations.md b/src/content/release/breaking-changes/2-5-deprecations.md index 5c94f0c97b..cbebc13a7c 100644 --- a/src/content/release/breaking-changes/2-5-deprecations.md +++ b/src/content/release/breaking-changes/2-5-deprecations.md @@ -16,7 +16,7 @@ primary source to aid in migration. A [quick reference sheet][] is available as well. -[Deprecation Policy]: {{site.repo.flutter}}/wiki/Tree-hygiene#deprecation +[Deprecation Policy]: {{site.repo.flutter}}wiki/Tree-hygiene#deprecation [quick reference sheet]: /go/deprecations-removed-after-2-5 ## Changes @@ -98,22 +98,22 @@ API documentation: Relevant issues: -* [Issue 56363]({{site.repo.flutter}}/issues/56363) -* [Issue 18885]({{site.repo.flutter}}/issues/18885) -* [Issue 15404]({{site.repo.flutter}}/issues/15404) -* [Issue 36154]({{site.repo.flutter}}/issues/36154) -* [Issue 48876]({{site.repo.flutter}}/issues/48876) +* [Issue 56363]({{site.repo.flutter}}issues/56363) +* [Issue 18885]({{site.repo.flutter}}issues/18885) +* [Issue 15404]({{site.repo.flutter}}issues/15404) +* [Issue 36154]({{site.repo.flutter}}issues/36154) +* [Issue 48876]({{site.repo.flutter}}issues/48876) Relevant PRs: -* Deprecated in [#59766]({{site.repo.flutter}}/pull/59766) -* Removed in [#90292]({{site.repo.flutter}}/pull/90292) +* Deprecated in [#59766]({{site.repo.flutter}}pull/59766) +* Removed in [#90292]({{site.repo.flutter}}pull/90292) -[`Form`]: {{site.api}}/flutter/widgets/Form-class.html -[`FormField`]: {{site.api}}/flutter/widgets/FormField-class.html -[`TextFormField`]: {{site.api}}/flutter/material/TextFormField-class.html -[`DropdownButtonFormField`]: {{site.api}}/flutter/material/DropdownButtonFormField-class.html -[`AutovalidateMode`]: {{site.api}}/flutter/widgets/AutovalidateMode-class.html +[`Form`]: {{site.api}}flutter/widgets/Form-class.html +[`FormField`]: {{site.api}}flutter/widgets/FormField-class.html +[`TextFormField`]: {{site.api}}flutter/material/TextFormField-class.html +[`DropdownButtonFormField`]: {{site.api}}flutter/material/DropdownButtonFormField-class.html +[`AutovalidateMode`]: {{site.api}}flutter/widgets/AutovalidateMode-class.html --- @@ -161,17 +161,17 @@ API documentation: Relevant issues: -* [Issue 25507]({{site.repo.flutter}}/issues/25507) +* [Issue 25507]({{site.repo.flutter}}issues/25507) Relevant PRs: -* Deprecated in [#56413]({{site.repo.flutter}}/pull/56413) -* Removed in [#90293]({{site.repo.flutter}}/pull/90293) +* Deprecated in [#56413]({{site.repo.flutter}}pull/56413) +* Removed in [#90293]({{site.repo.flutter}}pull/90293) [Control SliverPersistentHeader's showOnScreen Behavior]: https://docs.google.com/document/d/1BZhxy176uUnqOCnXdnHM1XetS9mw9WIyUAOE-dgVdUM/edit?usp=sharing -[`FloatingHeaderSnapConfiguration`]: {{site.api}}/flutter/rendering/FloatingHeaderSnapConfiguration-class.html -[`SliverPersistentHeaderDelegate`]: {{site.api}}/flutter/widgets/SliverPersistentHeaderDelegate-class.html -[`TickerProvider`]: {{site.api}}/flutter/scheduler/TickerProvider-class.html +[`FloatingHeaderSnapConfiguration`]: {{site.api}}flutter/rendering/FloatingHeaderSnapConfiguration-class.html +[`SliverPersistentHeaderDelegate`]: {{site.api}}flutter/widgets/SliverPersistentHeaderDelegate-class.html +[`TickerProvider`]: {{site.api}}flutter/scheduler/TickerProvider-class.html --- @@ -246,17 +246,17 @@ API documentation: Relevant issues: -* [Issue 55218]({{site.repo.flutter}}/issues/55218) +* [Issue 55218]({{site.repo.flutter}}issues/55218) Relevant PRs: -* Deprecated in [#60320]({{site.repo.flutter}}/issues/60320) -* Removed in [#90294]({{site.repo.flutter}}/issues/90294) +* Deprecated in [#60320]({{site.repo.flutter}}issues/60320) +* Removed in [#90294]({{site.repo.flutter}}issues/90294) -[Flutter Hybrid Composition]: {{site.repo.flutter}}/wiki/Hybrid-Composition -[`AndroidViewController`]: {{site.api}}/flutter/services/AndroidViewController-class.html -[`TextureAndroidViewController`]: {{site.api}}/flutter/services/TextureAndroidViewController-class.html -[`SurfaceAndroidViewController`]: {{site.api}}/flutter/services/SurfaceAndroidViewController-class.html +[Flutter Hybrid Composition]: {{site.repo.flutter}}wiki/Hybrid-Composition +[`AndroidViewController`]: {{site.api}}flutter/services/AndroidViewController-class.html +[`TextureAndroidViewController`]: {{site.api}}flutter/services/TextureAndroidViewController-class.html +[`SurfaceAndroidViewController`]: {{site.api}}flutter/services/SurfaceAndroidViewController-class.html --- @@ -302,10 +302,10 @@ API documentation: Relevant PRs: -* Deprecated in [#59120]({{site.repo.flutter}}/issues/59120) -* Removed in [#90296]({{site.repo.flutter}}/issues/90296) +* Deprecated in [#59120]({{site.repo.flutter}}issues/59120) +* Removed in [#90296]({{site.repo.flutter}}issues/90296) -[`FilteringTextInputFormatter`]: {{site.api}}/flutter/services/FilteringTextInputFormatter-class.html +[`FilteringTextInputFormatter`]: {{site.api}}flutter/services/FilteringTextInputFormatter-class.html --- @@ -351,14 +351,14 @@ API documentation: Relevant PRs: -* Deprecated in [#59127]({{site.repo.flutter}}/issues/59127) -* Removed in [#90295]({{site.repo.flutter}}/issues/90295) +* Deprecated in [#59127]({{site.repo.flutter}}issues/59127) +* Removed in [#90295]({{site.repo.flutter}}issues/90295) [In-depth migration guide available]: /release/breaking-changes/bottom-navigation-title-to-label [BottomNavigationBarItem title]: /go/bottom-navigation-bar-title-deprecation -[`BottomNavigationBarItem`]: {{site.api}}/flutter/widgets/BottomNavigationBarItem-class.html -[`BottomNavigationBar`]: {{site.api}}/flutter/material/BottomNavigationBar-class.html -[`Tooltip`]: {{site.api}}/flutter/material/Tooltip-class.html +[`BottomNavigationBarItem`]: {{site.api}}flutter/widgets/BottomNavigationBarItem-class.html +[`BottomNavigationBar`]: {{site.api}}flutter/material/BottomNavigationBar-class.html +[`Tooltip`]: {{site.api}}flutter/material/Tooltip-class.html --- @@ -412,16 +412,16 @@ Relevant PRs: * Removed from `package:platform` in [PR #38][] * Updated Flutter to use `package:platform` 3.1.0 in [PR #94603][] -[`Platform.packageRoot`]: {{site.dart.api}}/stable/2.15.1/dart-io/Platform/packageRoot.html -[`Isolate.packageRoot`]: {{site.dart.api}}/stable/2.15.1/dart-isolate/Isolate/packageRoot.html -[`Platform.packageRoot`]: {{site.pub-api}}/platform/3.0.0/platform/Platform/packageRoot.html +[`Platform.packageRoot`]: {{site.dart.api}}stable/2.15.1/dart-io/Platform/packageRoot.html +[`Isolate.packageRoot`]: {{site.dart.api}}stable/2.15.1/dart-isolate/Isolate/packageRoot.html +[`Platform.packageRoot`]: {{site.pub-api}}platform/3.0.0/platform/Platform/packageRoot.html [dart-deprecated]: https://dart-review.googlesource.com/c/sdk/+/59100/16/CHANGELOG.md -[`Platform.packageConfig`]: {{site.dart.api}}/stable/2.15.1/dart-io/Platform/packageConfig.html -[`Isolate.packageConfig`]: {{site.dart.api}}/stable/2.15.1/dart-isolate/Isolate/packageConfig.html -[`Platform.packageConfig`]: {{site.pub-api}}/platform/3.0.0/platform/Platform/packageConfig.html -[#47769]: {{site.github}}/dart-lang/sdk/issues/47769 -[PR #38]: {{site.github}}/google/platform.dart/pull/38 -[PR #94603]: {{site.repo.flutter}}/pull/94603 +[`Platform.packageConfig`]: {{site.dart.api}}stable/2.15.1/dart-io/Platform/packageConfig.html +[`Isolate.packageConfig`]: {{site.dart.api}}stable/2.15.1/dart-isolate/Isolate/packageConfig.html +[`Platform.packageConfig`]: {{site.pub-api}}platform/3.0.0/platform/Platform/packageConfig.html +[#47769]: {{site.github}}dart-lang/sdk/issues/47769 +[PR #38]: {{site.github}}google/platform.dart/pull/38 +[PR #94603]: {{site.repo.flutter}}pull/94603 --- diff --git a/src/content/release/breaking-changes/3-10-deprecations.md b/src/content/release/breaking-changes/3-10-deprecations.md index a364f0ea0e..36101b599f 100644 --- a/src/content/release/breaking-changes/3-10-deprecations.md +++ b/src/content/release/breaking-changes/3-10-deprecations.md @@ -15,7 +15,7 @@ All affected APIs have been compiled into this primary source to aid in migration. A [quick reference sheet][] is available as well. -[Deprecation Policy]: {{site.repo.flutter}}/wiki/Tree-hygiene#deprecation +[Deprecation Policy]: {{site.repo.flutter}}wiki/Tree-hygiene#deprecation [quick reference sheet]: /go/deprecations-removed-after-3-10 ## Changes @@ -63,10 +63,10 @@ Relevant PRs: * Deprecated in [#87281][] * Removed in [#125893][] -[`ThemeData`]: {{site.api}}/flutter/material/ThemeData-class.html +[`ThemeData`]: {{site.api}}flutter/material/ThemeData-class.html -[#87281]: {{site.repo.flutter}}/pull/87281 -[#125893]: {{site.repo.flutter}}/pull/125893 +[#87281]: {{site.repo.flutter}}pull/87281 +[#125893]: {{site.repo.flutter}}pull/125893 --- @@ -117,12 +117,12 @@ Relevant PRs: * Deprecated in [#87839][] * Removed in [#127042][] -[`OverscrollIndicatorNotification`]: {{site.api}}/flutter/widgets/OverscrollIndicatorNotification-class.html -[`StretchingOverscrollIndicator`]: {{site.api}}/flutter/widgets/StretchingOverscrollIndicator-class.html -[`GlowingOverscrollIndicator`]: {{site.api}}/flutter/widgets/GlowingOverscrollIndicator-class.html +[`OverscrollIndicatorNotification`]: {{site.api}}flutter/widgets/OverscrollIndicatorNotification-class.html +[`StretchingOverscrollIndicator`]: {{site.api}}flutter/widgets/StretchingOverscrollIndicator-class.html +[`GlowingOverscrollIndicator`]: {{site.api}}flutter/widgets/GlowingOverscrollIndicator-class.html -[#87839]: {{site.repo.flutter}}/pull/87839 -[#127042]: {{site.repo.flutter}}/pull/127042 +[#87839]: {{site.repo.flutter}}pull/87839 +[#127042]: {{site.repo.flutter}}pull/127042 --- @@ -180,10 +180,10 @@ Relevant PRs: [ColorScheme for Material 3]: /go/colorscheme-m3 -[`ColorScheme`]: {{site.api}}/flutter/material/ColorScheme-class.html +[`ColorScheme`]: {{site.api}}flutter/material/ColorScheme-class.html -[#93427]: {{site.repo.flutter}}/pull/93427 -[#127124]: {{site.repo.flutter}}/pull/127124 +[#93427]: {{site.repo.flutter}}pull/93427 +[#127124]: {{site.repo.flutter}}pull/127124 --- @@ -238,12 +238,12 @@ Relevant PRs: [Material Theme System Updates]: /go/material-theme-system-updates -[`Theme`]: {{site.api}}/flutter/material/Theme-class.html -[`ThemeData`]: {{site.api}}/flutter/material/Theme-class.html -[`Brightness`]: {{site.api}}/flutter/dart-ui/Brightness.html +[`Theme`]: {{site.api}}flutter/material/Theme-class.html +[`ThemeData`]: {{site.api}}flutter/material/Theme-class.html +[`Brightness`]: {{site.api}}flutter/dart-ui/Brightness.html -[#93396]: {{site.repo.flutter}}/pull/93396 -[#127238]: {{site.repo.flutter}}/pull/127238 +[#93396]: {{site.repo.flutter}}pull/93396 +[#127238]: {{site.repo.flutter}}pull/127238 --- @@ -328,16 +328,16 @@ Relevant PRs: * Removed in [#127351][] -[`RawScrollbar`]: {{site.api}}/flutter/widgets/RawScrollbar-class.html -[`Scrollbar`]: {{site.api}}/flutter/material/Scrollbar-class.html -[`CupertinoScrollbar`]: {{site.api}}/flutter/cupertino/CupertinoScrollbar-class.html -[`ScrollbarThemeData`]: {{site.api}}/flutter/material/ScrollbarThemeData-class.html -[`MaterialStateProperty`]: {{site.api}}/flutter/material/MaterialStateProperty-class.html -[`MaterialState`]: {{site.api}}/flutter/material/MaterialState.html +[`RawScrollbar`]: {{site.api}}flutter/widgets/RawScrollbar-class.html +[`Scrollbar`]: {{site.api}}flutter/material/Scrollbar-class.html +[`CupertinoScrollbar`]: {{site.api}}flutter/cupertino/CupertinoScrollbar-class.html +[`ScrollbarThemeData`]: {{site.api}}flutter/material/ScrollbarThemeData-class.html +[`MaterialStateProperty`]: {{site.api}}flutter/material/MaterialStateProperty-class.html +[`MaterialState`]: {{site.api}}flutter/material/MaterialState.html -[#96957]: {{site.repo.flutter}}/pull/96957 -[#97173]: {{site.repo.flutter}}/pull/97173 -[#127351]: {{site.repo.flutter}}/pull/127351 +[#96957]: {{site.repo.flutter}}pull/96957 +[#97173]: {{site.repo.flutter}}pull/97173 +[#127351]: {{site.repo.flutter}}pull/127351 --- @@ -424,10 +424,10 @@ Relevant PRs: * Deprecated in [#83337][] * Removed in [#129657][] -[`AnimationSheetBuilder`]: {{site.api}}/flutter/flutter_test/AnimationSheetBuilder-class.html +[`AnimationSheetBuilder`]: {{site.api}}flutter/flutter_test/AnimationSheetBuilder-class.html -[#83337]: {{site.repo.flutter}}/pull/83337 -[#129657]: {{site.repo.flutter}}/pull/129657 +[#83337]: {{site.repo.flutter}}pull/83337 +[#129657]: {{site.repo.flutter}}pull/129657 --- @@ -485,13 +485,13 @@ Relevant PRs: * Deprecated in [#89952][] * Removed in [#129663][] -[`testWidgets`]: {{site.api}}/flutter/flutter_test/testWidgets.html -[`TestWidgetsFlutterBinding`]: {{site.api}}/flutter/flutter_test/TestWidgetsFlutterBinding-class.html -[`AutomatedTestWidgetsFlutterBinding`]: {{site.api}}/flutter/flutter_test/AutomatedTestWidgetsFlutterBinding-class.html -[`LiveTestWidgetsFlutterBinding`]: {{site.api}}/flutter/flutter_test/LiveTestWidgetsFlutterBinding-class.html +[`testWidgets`]: {{site.api}}flutter/flutter_test/testWidgets.html +[`TestWidgetsFlutterBinding`]: {{site.api}}flutter/flutter_test/TestWidgetsFlutterBinding-class.html +[`AutomatedTestWidgetsFlutterBinding`]: {{site.api}}flutter/flutter_test/AutomatedTestWidgetsFlutterBinding-class.html +[`LiveTestWidgetsFlutterBinding`]: {{site.api}}flutter/flutter_test/LiveTestWidgetsFlutterBinding-class.html -[#89952]: {{site.repo.flutter}}/pull/89952 -[#129663]: {{site.repo.flutter}}/pull/129663 +[#89952]: {{site.repo.flutter}}pull/89952 +[#129663]: {{site.repo.flutter}}pull/129663 --- diff --git a/src/content/release/breaking-changes/3-13-deprecations.md b/src/content/release/breaking-changes/3-13-deprecations.md index 604cec3071..f4e79fb8eb 100644 --- a/src/content/release/breaking-changes/3-13-deprecations.md +++ b/src/content/release/breaking-changes/3-13-deprecations.md @@ -16,7 +16,7 @@ primary source to aid in migration. To further aid your migration, check out this [quick reference sheet][]. -[Deprecation Policy]: {{site.repo.flutter}}/wiki/Tree-hygiene#deprecation +[Deprecation Policy]: {{site.repo.flutter}}wiki/Tree-hygiene#deprecation [quick reference sheet]: /go/deprecations-removed-after-3-13 ## Changes @@ -84,14 +84,14 @@ Relevant PRs: * Deprecated in [#96174][] * Removed in [#134486][] -[`DeletableChipAttributes`]: {{site.api}}/flutter/material/DeletableChipAttributes-class.html -[`Chip`]: {{site.api}}/flutter/material/Chip-class.html -[`RawChip`]: {{site.api}}/flutter/material/RawChip-class.html -[`InputChip`]: {{site.api}}/flutter/material/InputChip-class.html -[`MaterialLocalizations.deleteButtonTooltip`]: {{site.api}}/flutter/material/MaterialLocalizations/deleteButtonTooltip.html +[`DeletableChipAttributes`]: {{site.api}}flutter/material/DeletableChipAttributes-class.html +[`Chip`]: {{site.api}}flutter/material/Chip-class.html +[`RawChip`]: {{site.api}}flutter/material/RawChip-class.html +[`InputChip`]: {{site.api}}flutter/material/InputChip-class.html +[`MaterialLocalizations.deleteButtonTooltip`]: {{site.api}}flutter/material/MaterialLocalizations/deleteButtonTooltip.html -[#96174]: {{site.repo.flutter}}/pull/96174 -[#134486]: {{site.repo.flutter}}/pull/134486 +[#96174]: {{site.repo.flutter}}pull/96174 +[#134486]: {{site.repo.flutter}}pull/134486 --- @@ -132,8 +132,8 @@ Relevant PRs: * Deprecated in [#99088][] * Removed in [#133173][] -[#99088]: {{site.repo.flutter}}/pull/99088 -[#133173]: {{site.repo.flutter}}/pull/133173 +[#99088]: {{site.repo.flutter}}pull/99088 +[#133173]: {{site.repo.flutter}}pull/133173 --- @@ -173,10 +173,10 @@ Relevant PRs: * Deprecated in [#100990][] * Removed in [#133175][] -[`PlatformViewsService`]: {{site.api}}/flutter/services/PlatformViewsService-class.html +[`PlatformViewsService`]: {{site.api}}flutter/services/PlatformViewsService-class.html -[#100990]: {{site.repo.flutter}}/pull/100990 -[#133175]: {{site.repo.flutter}}/pull/133175 +[#100990]: {{site.repo.flutter}}pull/100990 +[#133175]: {{site.repo.flutter}}pull/133175 --- @@ -219,11 +219,11 @@ Relevant PRs: * Deprecated in [#100381][] * Removed in [#134485][] -[`TextSelectionOverlay`]: {{site.api}}/flutter/widgets/TextSelectionOverlay-class.html -[`SelectionOverlay`]: {{site.api}}/flutter/widgets/SelectionOverlay-class.html +[`TextSelectionOverlay`]: {{site.api}}flutter/widgets/TextSelectionOverlay-class.html +[`SelectionOverlay`]: {{site.api}}flutter/widgets/SelectionOverlay-class.html -[#100381]: {{site.repo.flutter}}/pull/100381 -[#134485]: {{site.repo.flutter}}/pull/134485 +[#100381]: {{site.repo.flutter}}pull/100381 +[#134485]: {{site.repo.flutter}}pull/134485 --- @@ -307,14 +307,14 @@ Relevant PRs: * Deprecated in [#100234][] * Removed in [#133181][] -[`ScrollBehavior`]: {{site.api}}/flutter/widgets/ScrollBehavior-class.html -[`MaterialScrollBehavior`]: {{site.api}}/flutter/material/MaterialScrollBehavior-class.html -[`ThemeData`]: {{site.api}}/flutter/material/ThemeData-class.html -[`GlowingOverscrollIndicator`]: {{site.api}}/flutter/widgets/GlowingOverscrollIndicator-class.html -[`StretchingOverscrollIndicator`]: {{site.api}}/flutter/widgets/StretchingOverscrollIndicator-class.html +[`ScrollBehavior`]: {{site.api}}flutter/widgets/ScrollBehavior-class.html +[`MaterialScrollBehavior`]: {{site.api}}flutter/material/MaterialScrollBehavior-class.html +[`ThemeData`]: {{site.api}}flutter/material/ThemeData-class.html +[`GlowingOverscrollIndicator`]: {{site.api}}flutter/widgets/GlowingOverscrollIndicator-class.html +[`StretchingOverscrollIndicator`]: {{site.api}}flutter/widgets/StretchingOverscrollIndicator-class.html -[#100234]: {{site.repo.flutter}}/pull/100234 -[#133181]: {{site.repo.flutter}}/pull/133181 +[#100234]: {{site.repo.flutter}}pull/100234 +[#133181]: {{site.repo.flutter}}pull/133181 --- @@ -364,12 +364,12 @@ Relevant PRs: * Deprecated in [#103496][] * Removed in [#132679][] -[`PaintingBinding`]: {{site.api}}/flutter/painting/PaintingBinding-mixin.html -[`ImageProvider`]: {{site.api}}/flutter/painting/ImageProvider-class.html -[`DecoderBufferCallback`]: {{site.api}}/flutter/painting/DecoderBufferCallback.html +[`PaintingBinding`]: {{site.api}}flutter/painting/PaintingBinding-mixin.html +[`ImageProvider`]: {{site.api}}flutter/painting/ImageProvider-class.html +[`DecoderBufferCallback`]: {{site.api}}flutter/painting/DecoderBufferCallback.html -[#103496]: {{site.repo.flutter}}/pull/103496 -[#132679]: {{site.repo.flutter}}/pull/132679 +[#103496]: {{site.repo.flutter}}pull/103496 +[#132679]: {{site.repo.flutter}}pull/132679 --- @@ -447,12 +447,12 @@ Relevant PRs: * Deprecated in [#99443][] * Removed in [#131098][] -[`WidgetTester`]: {{site.api}}/flutter/flutter_test/WidgetTester-class.html -[`TestWidgetsFlutterBinding`]: {{site.api}}/flutter/flutter_test/TestWidgetsFlutterBinding-class.html -[`TestPlatformDispatcher`]: {{site.api}}/flutter/flutter_test/TestPlatformDispatcher-class.html +[`WidgetTester`]: {{site.api}}flutter/flutter_test/WidgetTester-class.html +[`TestWidgetsFlutterBinding`]: {{site.api}}flutter/flutter_test/TestWidgetsFlutterBinding-class.html +[`TestPlatformDispatcher`]: {{site.api}}flutter/flutter_test/TestPlatformDispatcher-class.html -[#99443]: {{site.repo.flutter}}/pull/99443 -[#131098]: {{site.repo.flutter}}/pull/131098 +[#99443]: {{site.repo.flutter}}pull/99443 +[#131098]: {{site.repo.flutter}}pull/131098 --- diff --git a/src/content/release/breaking-changes/3-16-deprecations.md b/src/content/release/breaking-changes/3-16-deprecations.md index a6bb79bce3..ea4e681e4b 100644 --- a/src/content/release/breaking-changes/3-16-deprecations.md +++ b/src/content/release/breaking-changes/3-16-deprecations.md @@ -16,7 +16,7 @@ primary source to aid in migration. To further aid your migration, check out this [quick reference sheet][]. -[Deprecation Policy]: {{site.repo.flutter}}/wiki/Tree-hygiene#deprecation +[Deprecation Policy]: {{site.repo.flutter}}wiki/Tree-hygiene#deprecation [quick reference sheet]: /go/deprecations-removed-after-3-16 ## Changes @@ -100,13 +100,13 @@ Relevant PRs: * Deprecated in [#105291][] * Removed in [#139267][] -[`TextButton`]: {{site.api}}/flutter/material/TextButton-class.html -[`ElevatedButton`]: {{site.api}}/flutter/material/ElevatedButton-class.html -[`OutlinedButton`]: {{site.api}}/flutter/material/OutlinedButton-class.html -[`ButtonStyle`]: {{site.api}}/flutter/material/ButtonStyle-class.html +[`TextButton`]: {{site.api}}flutter/material/TextButton-class.html +[`ElevatedButton`]: {{site.api}}flutter/material/ElevatedButton-class.html +[`OutlinedButton`]: {{site.api}}flutter/material/OutlinedButton-class.html +[`ButtonStyle`]: {{site.api}}flutter/material/ButtonStyle-class.html -[#105291]: {{site.repo.flutter}}/pull/105291 -[#139267]: {{site.repo.flutter}}/pull/139267 +[#105291]: {{site.repo.flutter}}pull/105291 +[#139267]: {{site.repo.flutter}}pull/139267 --- @@ -152,10 +152,10 @@ Relevant PRs: * Deprecated in [#109070][] * Removed in [#139080][] -[`ThemeData`]: {{site.api}}/flutter/material/ThemeData-class.html +[`ThemeData`]: {{site.api}}flutter/material/ThemeData-class.html -[#109070]: {{site.repo.flutter}}/pull/109070 -[#139080]: {{site.repo.flutter}}/pull/139080 +[#109070]: {{site.repo.flutter}}pull/109070 +[#139080]: {{site.repo.flutter}}pull/139080 --- @@ -202,14 +202,14 @@ Relevant PRs: * Deprecated in [#109702][] * Removed in [#139260][] -[`Navigator`]: {{site.api}}/flutter/widgets/Navigator-class.html -[`NavigatorState`]: {{site.api}}/flutter/widgets/NavigatorState-class.html -[`FocusScope`]: {{site.api}}/flutter/widgets/FocusScope-class.html -[`FocusScopeNode`]: {{site.api}}/flutter/widgets/FocusScopeNode-class.html -[`FocusNode`]: {{site.api}}/flutter/widgets/FocusNode-class.html +[`Navigator`]: {{site.api}}flutter/widgets/Navigator-class.html +[`NavigatorState`]: {{site.api}}flutter/widgets/NavigatorState-class.html +[`FocusScope`]: {{site.api}}flutter/widgets/FocusScope-class.html +[`FocusScopeNode`]: {{site.api}}flutter/widgets/FocusScopeNode-class.html +[`FocusNode`]: {{site.api}}flutter/widgets/FocusNode-class.html -[#109702]: {{site.repo.flutter}}/pull/109702 -[#139260]: {{site.repo.flutter}}/pull/139260 +[#109702]: {{site.repo.flutter}}pull/109702 +[#139260]: {{site.repo.flutter}}pull/139260 --- @@ -252,10 +252,10 @@ Relevant PRs: * Deprecated in [#104565][] * Removed in [#138509][] -[`PlatformMenuBar`]: {{site.api}}/flutter/widgets/PlatformMenuBar-class.html +[`PlatformMenuBar`]: {{site.api}}flutter/widgets/PlatformMenuBar-class.html -[#104565]: {{site.repo.flutter}}/pull/104565 -[#138509]: {{site.repo.flutter}}/pull/138509 +[#104565]: {{site.repo.flutter}}pull/104565 +[#138509]: {{site.repo.flutter}}pull/138509 --- @@ -267,7 +267,7 @@ IDEs and other customer to migrate. Expect the `TextTheme` deprecations to be removed in the next cycle, which will be announced again when it comes. -[previously announced]: https://groups.google.com/g/flutter-announce/c/DLnuqZo714o +[previously announced]: {{site.groups}}g/flutter-announce/c/DLnuqZo714o --- diff --git a/src/content/release/breaking-changes/3-19-deprecations.md b/src/content/release/breaking-changes/3-19-deprecations.md index d91dff9c7a..48858d12fa 100644 --- a/src/content/release/breaking-changes/3-19-deprecations.md +++ b/src/content/release/breaking-changes/3-19-deprecations.md @@ -16,7 +16,7 @@ primary source to aid in migration. To further aid your migration, check out this [quick reference sheet][]. -[Deprecation Policy]: {{site.repo.flutter}}/wiki/Tree-hygiene#deprecation +[Deprecation Policy]: {{site.repo.flutter}}wiki/Tree-hygiene#deprecation [quick reference sheet]: /go/deprecations-removed-after-3-19 ## Changes @@ -170,10 +170,10 @@ Relevant PRs: * Deprecated in [#109817][] * Removed in [#139255][] -[`TextButton`]: {{site.api}}/flutter/material/TextTheme-class.html +[`TextButton`]: {{site.api}}flutter/material/TextTheme-class.html -[#109817]: {{site.repo.flutter}}/pull/109817 -[#139255]: {{site.repo.flutter}}/pull/139255 +[#109817]: {{site.repo.flutter}}pull/109817 +[#139255]: {{site.repo.flutter}}pull/139255 --- @@ -242,17 +242,17 @@ Relevant PRs: * Deprecated in [#110162][], [#111080][], and [#97972][] * Removed in [#144178][], [#144080][], [#144079][], and [#144078][] -[`ThemeData`]: {{site.api}}/flutter/material/ThemeData-class.html -[`ColorScheme`]: {{site.api}}/flutter/material/ColorScheme-class.html -[`BottomAppBarTheme`]: {{site.api}}/flutter/material/BottomAppBarTheme-class.html +[`ThemeData`]: {{site.api}}flutter/material/ThemeData-class.html +[`ColorScheme`]: {{site.api}}flutter/material/ColorScheme-class.html +[`BottomAppBarTheme`]: {{site.api}}flutter/material/BottomAppBarTheme-class.html -[#110162]: {{site.repo.flutter}}/pull/110162 -[#111080]: {{site.repo.flutter}}/pull/111080 -[#97972]: {{site.repo.flutter}}/pull/97972 -[#144178]: {{site.repo.flutter}}/pull/144178 -[#144080]: {{site.repo.flutter}}/pull/144080 -[#144079]: {{site.repo.flutter}}/pull/144079 -[#144078]: {{site.repo.flutter}}/pull/144078 +[#110162]: {{site.repo.flutter}}pull/110162 +[#111080]: {{site.repo.flutter}}pull/111080 +[#97972]: {{site.repo.flutter}}pull/97972 +[#144178]: {{site.repo.flutter}}pull/144178 +[#144080]: {{site.repo.flutter}}pull/144080 +[#144079]: {{site.repo.flutter}}pull/144079 +[#144078]: {{site.repo.flutter}}pull/144078 --- @@ -369,10 +369,10 @@ Relevant PRs: * Deprecated in [#110616][] * Removed in [#143990][] -[`CupertinoContextMenu`]: {{site.api}}/flutter/cupertino/CupertinoContextMenu-class.html +[`CupertinoContextMenu`]: {{site.api}}flutter/cupertino/CupertinoContextMenu-class.html -[#110616]: {{site.repo.flutter}}/pull/110616 -[#143990]: {{site.repo.flutter}}/pull/143990 +[#110616]: {{site.repo.flutter}}pull/110616 +[#143990]: {{site.repo.flutter}}pull/143990 --- @@ -433,13 +433,13 @@ Relevant PRs: * Deprecated in [#111706][] * Removed in [#144180][] -[`Scrollbar`]: {{site.api}}/flutter/material/Scrollbar-class.html -[`ScrollbarThemeData`]: {{site.api}}/flutter/material/ScrollbarThemeData-class.html -[`MaterialState`]: {{site.api}}/flutter/material/MaterialState-class.html -[`MaterialStateProperty`]: {{site.api}}/flutter/material/MaterialStateProperty-class.html +[`Scrollbar`]: {{site.api}}flutter/material/Scrollbar-class.html +[`ScrollbarThemeData`]: {{site.api}}flutter/material/ScrollbarThemeData-class.html +[`MaterialState`]: {{site.api}}flutter/material/MaterialState-class.html +[`MaterialStateProperty`]: {{site.api}}flutter/material/MaterialStateProperty-class.html -[#111706]: {{site.repo.flutter}}/pull/111706 -[#144180]: {{site.repo.flutter}}/pull/144180 +[#111706]: {{site.repo.flutter}}pull/111706 +[#144180]: {{site.repo.flutter}}pull/144180 --- @@ -482,10 +482,10 @@ Relevant PRs: * Deprecated in [#108384][] * Removed in [#143961][] -[`KeepAliveHandle`]: {{site.api}}/flutter/widgets/KeepAliveHandle-class.html +[`KeepAliveHandle`]: {{site.api}}flutter/widgets/KeepAliveHandle-class.html -[#108384]: {{site.repo.flutter}}/pull/108384 -[#143961]: {{site.repo.flutter}}/pull/143961 +[#108384]: {{site.repo.flutter}}pull/108384 +[#143961]: {{site.repo.flutter}}pull/143961 --- @@ -529,11 +529,11 @@ Relevant PRs: * Deprecated in [#109014][] * Removed in [#142500][] -[`InteractiveViewer`]: {{site.api}}/flutter/widgets/InteractiveViewer-class.html -[`PanAxis`]: {{site.api}}/flutter/widgets/PanAxis.html +[`InteractiveViewer`]: {{site.api}}flutter/widgets/InteractiveViewer-class.html +[`PanAxis`]: {{site.api}}flutter/widgets/PanAxis.html -[#109014]: {{site.repo.flutter}}/pull/109014 -[#142500]: {{site.repo.flutter}}/pull/142500 +[#109014]: {{site.repo.flutter}}pull/109014 +[#142500]: {{site.repo.flutter}}pull/142500 --- @@ -573,10 +573,10 @@ Relevant PRs: * Deprecated in [#114459][] * Removed in [#143960][] -[`MediaQuery`]: {{site.api}}/flutter/widgets/MediaQuery-class.html +[`MediaQuery`]: {{site.api}}flutter/widgets/MediaQuery-class.html -[#114459]: {{site.repo.flutter}}/pull/114459 -[#143960]: {{site.repo.flutter}}/pull/143960 +[#114459]: {{site.repo.flutter}}pull/114459 +[#143960]: {{site.repo.flutter}}pull/143960 --- @@ -604,13 +604,13 @@ Relevant PRs: * Deprecated in [#113793][] * Removed in [#143974][] -[`AnimatedGrid`]: {{site.api}}/flutter/widgets/AnimatedGrid-class.html -[`AnimatedList`]: {{site.api}}/flutter/widgets/AnimatedList-class.html -[`AnimatedItemBuilder`]: {{site.api}}/flutter/widgets/AnimatedItemBuilder.html -[`AnimatedRemovedItemBuilder`]: {{site.api}}/flutter/widgets/AnimatedRemovedItemBuilder.html +[`AnimatedGrid`]: {{site.api}}flutter/widgets/AnimatedGrid-class.html +[`AnimatedList`]: {{site.api}}flutter/widgets/AnimatedList-class.html +[`AnimatedItemBuilder`]: {{site.api}}flutter/widgets/AnimatedItemBuilder.html +[`AnimatedRemovedItemBuilder`]: {{site.api}}flutter/widgets/AnimatedRemovedItemBuilder.html -[#113793]: {{site.repo.flutter}}/pull/113793 -[#143974]: {{site.repo.flutter}}/pull/143974 +[#113793]: {{site.repo.flutter}}pull/113793 +[#143974]: {{site.repo.flutter}}pull/143974 --- @@ -654,10 +654,10 @@ Relevant PRs: * Deprecated in [#82939][] * Removed in [#143979][] -[`FlutterDriver`]: {{site.api}}/flutter/flutter_driver/FlutterDriver-class.html +[`FlutterDriver`]: {{site.api}}flutter/flutter_driver/FlutterDriver-class.html -[#82939]: {{site.repo.flutter}}/pull/82939 -[#143979]: {{site.repo.flutter}}/pull/143979 +[#82939]: {{site.repo.flutter}}pull/82939 +[#143979]: {{site.repo.flutter}}pull/143979 --- @@ -706,10 +706,10 @@ Relevant PRs: * Deprecated in [#79310][] * Removed in [#143983][] -[`TimelineSummary`]: {{site.api}}/flutter/flutter_driver/TimelineSummary-class.html +[`TimelineSummary`]: {{site.api}}flutter/flutter_driver/TimelineSummary-class.html -[#79310]: {{site.repo.flutter}}/pull/79310 -[#143983]: {{site.repo.flutter}}/pull/143983 +[#79310]: {{site.repo.flutter}}pull/79310 +[#143983]: {{site.repo.flutter}}pull/143983 ### `Android Platform Views on API 22 and below ` @@ -730,7 +730,7 @@ removed this cycle, to allow more time for migration. Expect these deprecations to be removed in the next cycle, which will be announced again when the time comes. -[previously announced]: https://groups.google.com/g/flutter-announce/c/8XjXpUKlnf8 +[previously announced]: {{site.groups}}g/flutter-announce/c/8XjXpUKlnf8 --- diff --git a/src/content/release/breaking-changes/3-3-deprecations.md b/src/content/release/breaking-changes/3-3-deprecations.md index 01e49cb450..627c012d8c 100644 --- a/src/content/release/breaking-changes/3-3-deprecations.md +++ b/src/content/release/breaking-changes/3-3-deprecations.md @@ -15,7 +15,7 @@ All affected APIs have been compiled into this primary source to aid in migration. A [quick reference sheet][] is available as well. -[Deprecation Policy]: {{site.repo.flutter}}/wiki/Tree-hygiene#deprecation +[Deprecation Policy]: {{site.repo.flutter}}wiki/Tree-hygiene#deprecation [quick reference sheet]: /go/deprecations-removed-after-3-3 ## Changes @@ -129,10 +129,10 @@ Relevant PRs: * Deprecated in [#78673][] * Removed in [#111711][] -[`RenderConstraintsTransformBox`]: {{site.api}}/flutter/rendering/RenderConstraintsTransformBox-class.html -[`ConstraintsTransformBox`]: {{site.api}}/flutter/widgets/ConstraintsTransformBox-class.html -[#78673]: {{site.repo.flutter}}/pull/78673 -[#111711]: {{site.repo.flutter}}/pull/111711 +[`RenderConstraintsTransformBox`]: {{site.api}}flutter/rendering/RenderConstraintsTransformBox-class.html +[`ConstraintsTransformBox`]: {{site.api}}flutter/widgets/ConstraintsTransformBox-class.html +[#78673]: {{site.repo.flutter}}pull/78673 +[#111711]: {{site.repo.flutter}}pull/111711 --- @@ -190,12 +190,12 @@ Relevant PRs: * Deprecated in [#79160][] * Removed in [#111713][] -[`Draggable`]: {{site.api}}/flutter/widgets/Draggable-class.html -[`LongPressDraggable`]: {{site.api}}/flutter/widgets/LongPressDraggable-class.html -[`DragAnchorStrategy`]: {{site.api}}/flutter/widgets/DragAnchorStrategy.html -[#73143]: {{site.repo.flutter}}/pull/73143 -[#79160]: {{site.repo.flutter}}/pull/79160 -[#111713]: {{site.repo.flutter}}/pull/111713 +[`Draggable`]: {{site.api}}flutter/widgets/Draggable-class.html +[`LongPressDraggable`]: {{site.api}}flutter/widgets/LongPressDraggable-class.html +[`DragAnchorStrategy`]: {{site.api}}flutter/widgets/DragAnchorStrategy.html +[#73143]: {{site.repo.flutter}}pull/73143 +[#79160]: {{site.repo.flutter}}pull/79160 +[#111713]: {{site.repo.flutter}}pull/111713 --- @@ -254,11 +254,11 @@ Relevant PRs: [In-depth migration guide available]: /release/breaking-changes/default-desktop-scrollbars [Exposing & Updating ScrollBehaviors]: /go/exposing-scroll-behaviors -[`ScrollBehavior`]: {{site.api}}/flutter/widgets/ScrollBehavior-class.html -[Scrollbars should be always visible and instantiated by default on web and desktop]: {{site.repo.flutter}}/issues/40107 -[#76739]: {{site.repo.flutter}}/pull/76739 -[#78588]: {{site.repo.flutter}}/pull/78588 -[#111715]: {{site.repo.flutter}}/pull/111715 +[`ScrollBehavior`]: {{site.api}}flutter/widgets/ScrollBehavior-class.html +[Scrollbars should be always visible and instantiated by default on web and desktop]: {{site.repo.flutter}}issues/40107 +[#76739]: {{site.repo.flutter}}pull/76739 +[#78588]: {{site.repo.flutter}}pull/78588 +[#111715]: {{site.repo.flutter}}pull/111715 --- diff --git a/src/content/release/breaking-changes/3-7-deprecations.md b/src/content/release/breaking-changes/3-7-deprecations.md index a305b56bb7..dab1370051 100644 --- a/src/content/release/breaking-changes/3-7-deprecations.md +++ b/src/content/release/breaking-changes/3-7-deprecations.md @@ -15,7 +15,7 @@ All affected APIs have been compiled into this primary source to aid in migration. A [quick reference sheet][] is available as well. -[Deprecation Policy]: {{site.repo.flutter}}/wiki/Tree-hygiene#deprecation +[Deprecation Policy]: {{site.repo.flutter}}wiki/Tree-hygiene#deprecation [quick reference sheet]: /go/deprecations-removed-after-3-7 ## Changes @@ -97,27 +97,27 @@ Relevant PRs: * Deprecated in [#81858][] * Removed in [#119572][] -[`GestureRecognizer`]: {{site.api}}/flutter/gestures/GestureRecognizer-class.html -[`EagerGestureRecognizer`]: {{site.api}}/flutter/gestures/EagerGestureRecognizer-class.html -[`ForcePressGestureRecognizer`]: {{site.api}}/flutter/gestures/ForcePressGestureRecognizer-class.html -[`LongPressGestureRecognizer`]: {{site.api}}/flutter/gestures/LongPressGestureRecognizer-class.html -[`DragGestureRecognizer`]: {{site.api}}/flutter/gestures/DragGestureRecognizer-class.html -[`VerticalDragGestureRecognizer`]: {{site.api}}/flutter/gestures/VerticalDragGestureRecognizer-class.html -[`HorizontalDragGestureRecognizer`]: {{site.api}}/flutter/gestures/HorizontalDragGestureRecognizer-class.html -[`MultiDragGestureRecognizer`]: {{site.api}}/flutter/gestures/MultiDragGestureRecognizer-class.html -[`ImmediateMultiDragGestureRecognizer`]: {{site.api}}/flutter/gestures/ImmediateMultiDragGestureRecognizer-class.html -[`HorizontalMultiDragGestureRecognizer`]: {{site.api}}/flutter/gestures/HorizontalMultiDragGestureRecognizer-class.html -[`VerticalMultiDragGestureRecognizer`]: {{site.api}}/flutter/gestures/VerticalMultiDragGestureRecognizer-class.html -[`DelayedMultiDragGestureRecognizer`]: {{site.api}}/flutter/gestures/DelayedMultiDragGestureRecognizer-class.html -[`DoubleTapGestureRecognizer`]: {{site.api}}/flutter/gestures/DoubleTapGestureRecognizer-class.html -[`MultiTapGestureRecognizer`]: {{site.api}}/flutter/gestures/MultiTapGestureRecognizer-class.html -[`OneSequenceGestureRecognizer`]: {{site.api}}/flutter/gestures/OneSequenceGestureRecognizer-class.html -[`PrimaryPointerGestureRecognizer`]: {{site.api}}/flutter/gestures/PrimaryPointerGestureRecognizer-class.html -[`ScaleGestureRecognizer`]: {{site.api}}/flutter/gestures/ScaleGestureRecognizer-class.html - - -[#81858]: {{site.repo.flutter}}/pull/81858 -[#119572]: {{site.repo.flutter}}/pull/119572 +[`GestureRecognizer`]: {{site.api}}flutter/gestures/GestureRecognizer-class.html +[`EagerGestureRecognizer`]: {{site.api}}flutter/gestures/EagerGestureRecognizer-class.html +[`ForcePressGestureRecognizer`]: {{site.api}}flutter/gestures/ForcePressGestureRecognizer-class.html +[`LongPressGestureRecognizer`]: {{site.api}}flutter/gestures/LongPressGestureRecognizer-class.html +[`DragGestureRecognizer`]: {{site.api}}flutter/gestures/DragGestureRecognizer-class.html +[`VerticalDragGestureRecognizer`]: {{site.api}}flutter/gestures/VerticalDragGestureRecognizer-class.html +[`HorizontalDragGestureRecognizer`]: {{site.api}}flutter/gestures/HorizontalDragGestureRecognizer-class.html +[`MultiDragGestureRecognizer`]: {{site.api}}flutter/gestures/MultiDragGestureRecognizer-class.html +[`ImmediateMultiDragGestureRecognizer`]: {{site.api}}flutter/gestures/ImmediateMultiDragGestureRecognizer-class.html +[`HorizontalMultiDragGestureRecognizer`]: {{site.api}}flutter/gestures/HorizontalMultiDragGestureRecognizer-class.html +[`VerticalMultiDragGestureRecognizer`]: {{site.api}}flutter/gestures/VerticalMultiDragGestureRecognizer-class.html +[`DelayedMultiDragGestureRecognizer`]: {{site.api}}flutter/gestures/DelayedMultiDragGestureRecognizer-class.html +[`DoubleTapGestureRecognizer`]: {{site.api}}flutter/gestures/DoubleTapGestureRecognizer-class.html +[`MultiTapGestureRecognizer`]: {{site.api}}flutter/gestures/MultiTapGestureRecognizer-class.html +[`OneSequenceGestureRecognizer`]: {{site.api}}flutter/gestures/OneSequenceGestureRecognizer-class.html +[`PrimaryPointerGestureRecognizer`]: {{site.api}}flutter/gestures/PrimaryPointerGestureRecognizer-class.html +[`ScaleGestureRecognizer`]: {{site.api}}flutter/gestures/ScaleGestureRecognizer-class.html + + +[#81858]: {{site.repo.flutter}}pull/81858 +[#119572]: {{site.repo.flutter}}pull/119572 --- @@ -200,19 +200,19 @@ Removed in: * [#120932][] [Accent color migration guide]: /release/breaking-changes/theme-data-accent-properties -[`ThemeData`]: {{site.api}}/flutter/widgets/Draggable-class.html -[`ColorScheme`]: {{site.api}}/flutter/widgets/LongPressDraggable-class.html -[#56639]: {{site.repo.flutter}}/pull/56639 -[#84748]: {{site.repo.flutter}}/pull/84748 -[#56918]: {{site.repo.flutter}}/pull/56918 -[#91772]: {{site.repo.flutter}}/pull/91772 -[#92822]: {{site.repo.flutter}}/pull/92822 -[#81336]: {{site.repo.flutter}}/pull/81336 -[#85144]: {{site.repo.flutter}}/pull/85144 -[#118658]: {{site.repo.flutter}}/pull/118658 -[#119360]: {{site.repo.flutter}}/pull/119360 -[#120577]: {{site.repo.flutter}}/pull/120577 -[#120932]: {{site.repo.flutter}}/pull/120932 +[`ThemeData`]: {{site.api}}flutter/widgets/Draggable-class.html +[`ColorScheme`]: {{site.api}}flutter/widgets/LongPressDraggable-class.html +[#56639]: {{site.repo.flutter}}pull/56639 +[#84748]: {{site.repo.flutter}}pull/84748 +[#56918]: {{site.repo.flutter}}pull/56918 +[#91772]: {{site.repo.flutter}}pull/91772 +[#92822]: {{site.repo.flutter}}pull/92822 +[#81336]: {{site.repo.flutter}}pull/81336 +[#85144]: {{site.repo.flutter}}pull/85144 +[#118658]: {{site.repo.flutter}}pull/118658 +[#119360]: {{site.repo.flutter}}pull/119360 +[#120577]: {{site.repo.flutter}}pull/120577 +[#120932]: {{site.repo.flutter}}pull/120932 --- @@ -294,21 +294,21 @@ Removed in: * [#120575][] -[`AppBar`]: {{site.api}}/flutter/material/AppBar-class.html -[`SliverAppBar`]: {{site.api}}/flutter/material/SliverAppBar-class.html -[`AppBarTheme`]: {{site.api}}/flutter/material/AppBarTheme-class.html -[#86127]: {{site.repo.flutter}}/pull/86127 -[#70645]: {{site.repo.flutter}}/pull/70645 -[#67921]: {{site.repo.flutter}}/pull/67921 -[#67497]: {{site.repo.flutter}}/pull/67497 -[#50606]: {{site.repo.flutter}}/pull/50606 -[#51820]: {{site.repo.flutter}}/pull/51820 -[#61618]: {{site.repo.flutter}}/pull/61618 -[#86198]: {{site.repo.flutter}}/pull/86198 -[#71184]: {{site.repo.flutter}}/pull/71184 -[#120618]: {{site.repo.flutter}}/pull/120618 -[#119253]: {{site.repo.flutter}}/pull/119253 -[#120575]: {{site.repo.flutter}}/pull/120575 +[`AppBar`]: {{site.api}}flutter/material/AppBar-class.html +[`SliverAppBar`]: {{site.api}}flutter/material/SliverAppBar-class.html +[`AppBarTheme`]: {{site.api}}flutter/material/AppBarTheme-class.html +[#86127]: {{site.repo.flutter}}pull/86127 +[#70645]: {{site.repo.flutter}}pull/70645 +[#67921]: {{site.repo.flutter}}pull/67921 +[#67497]: {{site.repo.flutter}}pull/67497 +[#50606]: {{site.repo.flutter}}pull/50606 +[#51820]: {{site.repo.flutter}}pull/51820 +[#61618]: {{site.repo.flutter}}pull/61618 +[#86198]: {{site.repo.flutter}}pull/86198 +[#71184]: {{site.repo.flutter}}pull/71184 +[#120618]: {{site.repo.flutter}}pull/120618 +[#119253]: {{site.repo.flutter}}pull/119253 +[#120575]: {{site.repo.flutter}}pull/120575 --- @@ -370,14 +370,14 @@ Removed in: * [#11957][] -[`SystemChrome`]: {{site.api}}/flutter/services/SystemChrome-class.html -[#35748]: {{site.repo.flutter}}/pull/35748 -[#40974]: {{site.repo.flutter}}/pull/40974 -[#44033]: {{site.repo.flutter}}/pull/44033 -[#63761]: {{site.repo.flutter}}/pull/63761 -[#69999]: {{site.repo.flutter}}/pull/69999 -[#81303]: {{site.repo.flutter}}/pull/81303 -[#11957]: {{site.repo.flutter}}/pull/11957 +[`SystemChrome`]: {{site.api}}flutter/services/SystemChrome-class.html +[#35748]: {{site.repo.flutter}}pull/35748 +[#40974]: {{site.repo.flutter}}pull/40974 +[#44033]: {{site.repo.flutter}}pull/44033 +[#63761]: {{site.repo.flutter}}pull/63761 +[#69999]: {{site.repo.flutter}}pull/69999 +[#81303]: {{site.repo.flutter}}pull/81303 +[#11957]: {{site.repo.flutter}}pull/11957 --- @@ -425,10 +425,10 @@ Removed in: * [#119187][] -[`SystemNavigator`]: {{site.api}}/flutter/services/SystemNavigator-class.html -[#82594]: {{site.repo.flutter}}/pull/82594 -[#82574]: {{site.repo.flutter}}/pull/82574 -[#119187]: {{site.repo.flutter}}/pull/119187 +[`SystemNavigator`]: {{site.api}}flutter/services/SystemNavigator-class.html +[#82594]: {{site.repo.flutter}}pull/82594 +[#82574]: {{site.repo.flutter}}pull/82574 +[#119187]: {{site.repo.flutter}}pull/119187 --- @@ -477,10 +477,10 @@ Removed in: * [#119186][] -[`AnimatedSize`]: {{site.api}}/flutter/widgets/AnimatedSize-class.html -[#80554]: {{site.repo.flutter}}/pull/80554 -[#81067]: {{site.repo.flutter}}/pull/81067 -[#119186]: {{site.repo.flutter}}/pull/119186 +[`AnimatedSize`]: {{site.api}}flutter/widgets/AnimatedSize-class.html +[#80554]: {{site.repo.flutter}}pull/80554 +[#81067]: {{site.repo.flutter}}pull/81067 +[#119186]: {{site.repo.flutter}}pull/119186 --- diff --git a/src/content/release/breaking-changes/actions-api-revision.md b/src/content/release/breaking-changes/actions-api-revision.md index 2bb826f795..3ae6ca9226 100644 --- a/src/content/release/breaking-changes/actions-api-revision.md +++ b/src/content/release/breaking-changes/actions-api-revision.md @@ -329,12 +329,12 @@ Relevant PRs: * [Revise Action API][] * [Make Action.enabled be isEnabled(Intent intent) instead][] -[`Action`]: {{site.api}}/flutter/widgets/Action-class.html -[`ActionDispatcher`]: {{site.api}}/flutter/widgets/ActionDispatcher-class.html -[`Actions`]: {{site.api}}/flutter/widgets/Actions-class.html -[`Intent`]: {{site.api}}/flutter/widgets/Intent-class.html -[Issue 53276]: {{site.repo.flutter}}/issues/53276 -[`LocalKey`]: {{site.api}}/flutter/foundation/LocalKey-class.html -[Make Action.enabled be isEnabled(Intent intent) instead]: {{site.repo.flutter}}/pull/55230 -[Revise Action API]: {{site.repo.flutter}}/pull/42940 -[`Shortcuts`]: {{site.api}}/flutter/widgets/Shortcuts-class.html +[`Action`]: {{site.api}}flutter/widgets/Action-class.html +[`ActionDispatcher`]: {{site.api}}flutter/widgets/ActionDispatcher-class.html +[`Actions`]: {{site.api}}flutter/widgets/Actions-class.html +[`Intent`]: {{site.api}}flutter/widgets/Intent-class.html +[Issue 53276]: {{site.repo.flutter}}issues/53276 +[`LocalKey`]: {{site.api}}flutter/foundation/LocalKey-class.html +[Make Action.enabled be isEnabled(Intent intent) instead]: {{site.repo.flutter}}pull/55230 +[Revise Action API]: {{site.repo.flutter}}pull/42940 +[`Shortcuts`]: {{site.api}}flutter/widgets/Shortcuts-class.html diff --git a/src/content/release/breaking-changes/add-applifecyclestate-hidden.md b/src/content/release/breaking-changes/add-applifecyclestate-hidden.md index 87deac1d3a..054a2c3f35 100644 --- a/src/content/release/breaking-changes/add-applifecyclestate-hidden.md +++ b/src/content/release/breaking-changes/add-applifecyclestate-hidden.md @@ -82,6 +82,6 @@ Relevant PRs: * [PR 42418][]: Adds `AppLifecycleState.hidden` enum value -[PR 42418]: {{site.repo.engine}}/pull/42418 -[`WidgetsBindingObserver.didChangeAppLifecycleState`]: {{site.api}}/flutter/widgets/WidgetsBindingObserver/didChangeAppLifecycleState.html -[`AppLifecycleState`]: {{site.api}}/flutter/dart-ui/AppLifecycleState.html +[PR 42418]: {{site.repo.engine}}pull/42418 +[`WidgetsBindingObserver.didChangeAppLifecycleState`]: {{site.api}}flutter/widgets/WidgetsBindingObserver/didChangeAppLifecycleState.html +[`AppLifecycleState`]: {{site.api}}flutter/dart-ui/AppLifecycleState.html diff --git a/src/content/release/breaking-changes/add-currentAutofillScope-to-TextInputClient.md b/src/content/release/breaking-changes/add-currentAutofillScope-to-TextInputClient.md index 70cadd09ea..6509128a5e 100644 --- a/src/content/release/breaking-changes/add-currentAutofillScope-to-TextInputClient.md +++ b/src/content/release/breaking-changes/add-currentAutofillScope-to-TextInputClient.md @@ -97,8 +97,8 @@ Relevant PR: * [Framework PR that added autofill support][] -[Framework PR that added autofill support]: {{site.repo.flutter}}/pull/52126 -[Issue 13015: Autofill support]: {{site.repo.flutter}}/issues/13015 +[Framework PR that added autofill support]: {{site.repo.flutter}}pull/52126 +[Issue 13015: Autofill support]: {{site.repo.flutter}}issues/13015 -[`AutofillGroup`]: {{site.api}}/flutter/widgets/AutofillGroup-class.html -[`TextInputClient.currentAutofillScope`]: {{site.api}}/flutter/services/TextInputClient/currentAutofillScope.html +[`AutofillGroup`]: {{site.api}}flutter/widgets/AutofillGroup-class.html +[`TextInputClient.currentAutofillScope`]: {{site.api}}flutter/services/TextInputClient/currentAutofillScope.html diff --git a/src/content/release/breaking-changes/add-showAutocorrectionPromptRect.md b/src/content/release/breaking-changes/add-showAutocorrectionPromptRect.md index dc6fbfbcd2..a5af28a999 100644 --- a/src/content/release/breaking-changes/add-showAutocorrectionPromptRect.md +++ b/src/content/release/breaking-changes/add-showAutocorrectionPromptRect.md @@ -100,6 +100,6 @@ Relevant PR: * [iOS UITextInput autocorrection prompt][] -[iOS UITextInput autocorrection prompt]: {{site.repo.flutter}}/pull/54119/ -[Issue 12920]: {{site.repo.flutter}}/issues/12920 -[`TextInputClient`]: {{site.api}}/flutter/services/TextInputClient-class.html +[iOS UITextInput autocorrection prompt]: {{site.repo.flutter}}pull/54119/ +[Issue 12920]: {{site.repo.flutter}}issues/12920 +[`TextInputClient`]: {{site.api}}flutter/services/TextInputClient-class.html diff --git a/src/content/release/breaking-changes/android-14-nonlinear-text-scaling-migration.md b/src/content/release/breaking-changes/android-14-nonlinear-text-scaling-migration.md index a9d4e48797..f75f2c079f 100644 --- a/src/content/release/breaking-changes/android-14-nonlinear-text-scaling-migration.md +++ b/src/content/release/breaking-changes/android-14-nonlinear-text-scaling-migration.md @@ -73,8 +73,8 @@ See also: * [Deprecate `textScaleFactor` in favor of `TextScaler`][] -[Android 14 nonlinear font scaling]: {{site.android-dev}}/about/versions/14/features#non-linear-font-scaling +[Android 14 nonlinear font scaling]: {{site.android-dev}}about/versions/14/features#non-linear-font-scaling [Deprecate `textScaleFactor` in favor of `TextScaler`]: /release/breaking-changes/deprecate-textscalefactor -[`TextScaler`]: {{site.api}}/flutter/painting/TextScaler-class.html -[New font scaling system (Issue 116231)]: {{site.repo.flutter}}/issues/116231 -[Implementing TextScaler for nonlinear text scaling]: {{site.repo.engine}}/pull/44907 +[`TextScaler`]: {{site.api}}flutter/painting/TextScaler-class.html +[New font scaling system (Issue 116231)]: {{site.repo.flutter}}issues/116231 +[Implementing TextScaler for nonlinear text scaling]: {{site.repo.engine}}pull/44907 diff --git a/src/content/release/breaking-changes/android-activity-control-surface-attach.md b/src/content/release/breaking-changes/android-activity-control-surface-attach.md index be4ec6cb5f..c581da6978 100644 --- a/src/content/release/breaking-changes/android-activity-control-surface-attach.md +++ b/src/content/release/breaking-changes/android-activity-control-surface-attach.md @@ -131,12 +131,12 @@ UI components attached to the FlutterEngine causes event crosstalk -[`ActivityAware`]: {{site.api}}/javadoc/io/flutter/embedding/engine/plugins/activity/ActivityAware.html -[`ActivityControlSurface`]: {{site.api}}/javadoc/io/flutter/embedding/engine/plugins/activity/ActivityControlSurface.html -[`FlutterActivity`]: {{site.api}}/javadoc/io/flutter/embedding/android/FlutterActivity.html -[`FlutterEngine`]: {{site.api}}/javadoc/io/flutter/embedding/engine/FlutterEngine.html -[`FlutterFragment`]: {{site.api}}/javadoc/io/flutter/embedding/android/FlutterFragment.html -[`FlutterView`]: {{site.api}}/javadoc/io/flutter/view/FlutterView.html -[`getActivityControlSurface()`]: {{site.api}}/javadoc/io/flutter/embedding/engine/FlutterEngine.html#getActivityControlSurface-- -[Issue #66192]: {{site.repo.flutter}}/issues/66192. -[Issue #21272]: {{site.repo.engine}}/pull/21272 +[`ActivityAware`]: {{site.api}}javadoc/io/flutter/embedding/engine/plugins/activity/ActivityAware.html +[`ActivityControlSurface`]: {{site.api}}javadoc/io/flutter/embedding/engine/plugins/activity/ActivityControlSurface.html +[`FlutterActivity`]: {{site.api}}javadoc/io/flutter/embedding/android/FlutterActivity.html +[`FlutterEngine`]: {{site.api}}javadoc/io/flutter/embedding/engine/FlutterEngine.html +[`FlutterFragment`]: {{site.api}}javadoc/io/flutter/embedding/android/FlutterFragment.html +[`FlutterView`]: {{site.api}}javadoc/io/flutter/view/FlutterView.html +[`getActivityControlSurface()`]: {{site.api}}javadoc/io/flutter/embedding/engine/FlutterEngine.html#getActivityControlSurface-- +[Issue #66192]: {{site.repo.flutter}}issues/66192. +[Issue #21272]: {{site.repo.engine}}pull/21272 diff --git a/src/content/release/breaking-changes/android-java-gradle-migration-guide.md b/src/content/release/breaking-changes/android-java-gradle-migration-guide.md index 2392ce96c0..39b8bdbb39 100644 --- a/src/content/release/breaking-changes/android-java-gradle-migration-guide.md +++ b/src/content/release/breaking-changes/android-java-gradle-migration-guide.md @@ -117,5 +117,5 @@ A few notes to be aware of: * Upgrading to Flutter 3.10 won't fix this issue. [deprecated Gradle classes]: https://docs.gradle.org/7.6/javadoc/deprecated-list.html -[issue 122609]: {{site.repo.flutter}}/issues/122609 +[issue 122609]: {{site.repo.flutter}}issues/122609 [splitting out ApplicationId from PackageName]: http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename diff --git a/src/content/release/breaking-changes/android-predictive-back.md b/src/content/release/breaking-changes/android-predictive-back.md index 5e3f4d597b..5aa9fb5bd4 100644 --- a/src/content/release/breaking-changes/android-predictive-back.md +++ b/src/content/release/breaking-changes/android-predictive-back.md @@ -18,12 +18,12 @@ to predictive back behavior. For more info, check out [Issue #132504][]. ::: -[Issue #132504]: {{site.github}}/flutter/flutter/issues/132504#issuecomment-2025776552 +[Issue #132504]: {{site.repo.flutter}}issues/132504#issuecomment-2025776552 ## Background Android 14 introduced the -[Predictive Back feature]({{site.android-dev}}/guide/navigation/predictive-back-gesture), +[Predictive Back feature]({{site.android-dev}}guide/navigation/predictive-back-gesture), which allows the user to peek behind the current route during a valid back gesture and decide whether to continue back or to cancel the gesture. This was incompatible with Flutter's navigation APIs that allow the developer to cancel a @@ -333,7 +333,7 @@ return PopScope( This will be unnecessary on future versions of Android. 1. Set `android:enableOnBackInvokedCallback="true"` in `android/app/src/main/AndroidManifest.xml`. If needed, refer to - [Android's full guide]({{site.android-dev}}/guide/navigation/custom-back/predictive-back-gesture) + [Android's full guide]({{site.android-dev}}guide/navigation/custom-back/predictive-back-gesture) for migrating Android apps to support predictive back. 1. Make sure you're using version `3.14.0-7.0.pre` of Flutter or greater. 1. Run the app and perform a back gesture (swipe from the left side of @@ -368,15 +368,15 @@ Relevant PRs: * [Predictive Back support for root routes][] * [Platform channel for predictive back][] -[`PopScope`]: {{site.api}}/flutter/widgets/PopScope-class.html -[`NavigatorPopHandler`]: {{site.api}}/flutter/widgets/NavigatorPopHandler-class.html -[`PopEntry`]: {{site.api}}/flutter/widgets/PopEntry-class.html -[`Form.canPop`]: {{site.api}}/flutter/widgets/Form/canPop.html -[`Form.onPopInvoked`]: {{site.api}}/flutter/widgets/Form/onPopInvoked.html -[`Route.popDisposition`]: {{site.api}}/flutter/widgets/Route/popDisposition.html -[`ModalRoute.registerPopEntry`]: {{site.api}}/flutter/widgets/ModalRoute/registerPopEntry.html -[`ModalRoute.unregisterPopEntry`]: {{site.api}}/flutter/widgets/ModalRoute/unregisterPopEntry.html - -[Issue 109513]: {{site.repo.flutter}}/issues/109513 -[Predictive back support for root routes]: {{site.repo.flutter}}/pull/120385 -[Platform channel for predictive back]: {{site.repo.engine}}/pull/39208 +[`PopScope`]: {{site.api}}flutter/widgets/PopScope-class.html +[`NavigatorPopHandler`]: {{site.api}}flutter/widgets/NavigatorPopHandler-class.html +[`PopEntry`]: {{site.api}}flutter/widgets/PopEntry-class.html +[`Form.canPop`]: {{site.api}}flutter/widgets/Form/canPop.html +[`Form.onPopInvoked`]: {{site.api}}flutter/widgets/Form/onPopInvoked.html +[`Route.popDisposition`]: {{site.api}}flutter/widgets/Route/popDisposition.html +[`ModalRoute.registerPopEntry`]: {{site.api}}flutter/widgets/ModalRoute/registerPopEntry.html +[`ModalRoute.unregisterPopEntry`]: {{site.api}}flutter/widgets/ModalRoute/unregisterPopEntry.html + +[Issue 109513]: {{site.repo.flutter}}issues/109513 +[Predictive back support for root routes]: {{site.repo.flutter}}pull/120385 +[Platform channel for predictive back]: {{site.repo.engine}}pull/39208 diff --git a/src/content/release/breaking-changes/android-setIsRunningInRobolectricTest-removed.md b/src/content/release/breaking-changes/android-setIsRunningInRobolectricTest-removed.md index f54dc5aad0..84d7cd8542 100644 --- a/src/content/release/breaking-changes/android-setIsRunningInRobolectricTest-removed.md +++ b/src/content/release/breaking-changes/android-setIsRunningInRobolectricTest-removed.md @@ -55,9 +55,9 @@ and the following [commit][] added a [PR 20473][] further refactored `FlutterLoader` and `FlutterJNI` to allow for additional mocking and testing. -[commit]: {{site.repo.engine}}/commit/15f5696c4139a21e1fc54014ce17d01f6ad1737c#diff-f928557f2d60773a8435366400fa42ed -[engine commit]: {{site.repo.engine}}/commit/15f5696c4139a21e1fc54014ce17d01f6ad1737c#diff-599e1d64442183ead768757cca6805c3L154 -[PR 20473]: {{site.repo.engine}}/pull/20473 +[commit]: {{site.repo.engine}}commit/15f5696c4139a21e1fc54014ce17d01f6ad1737c#diff-f928557f2d60773a8435366400fa42ed +[engine commit]: {{site.repo.engine}}commit/15f5696c4139a21e1fc54014ce17d01f6ad1737c#diff-599e1d64442183ead768757cca6805c3L154 +[PR 20473]: {{site.repo.engine}}pull/20473 to allow for additional mocking/testing. ## Migration guide diff --git a/src/content/release/breaking-changes/android-surface-plugins.md b/src/content/release/breaking-changes/android-surface-plugins.md index 960f3dd0e2..5adef51fcc 100644 --- a/src/content/release/breaking-changes/android-surface-plugins.md +++ b/src/content/release/breaking-changes/android-surface-plugins.md @@ -87,13 +87,13 @@ Relevant PRs: [Vulkan]: https://source.android.com/docs/core/graphics/arch-vulkan [`HardwareBuffer`]: https://developer.android.com/reference/android/hardware/HardwareBuffer [`Surface`]: https://developer.android.com/reference/android/view/Surface -[`SurfaceProducer`]: {{site.api}}/javadoc/io/flutter/view/TextureRegistry.SurfaceProducer.html +[`SurfaceProducer`]: {{site.api}}javadoc/io/flutter/view/TextureRegistry.SurfaceProducer.html [`SurfaceTexture`]: https://source.android.com/docs/core/graphics/arch-st -[`createSurfaceProducer`]: {{site.api}}/javadoc/io/flutter/view/TextureRegistry.html#createSurfaceProducer() -[`createSurfaceTexture`]: {{site.api}}/javadoc/io/flutter/view/TextureRegistry.html#createSurfaceTexture() -[`getSurface()`]: {{site.api}}/javadoc/io/flutter/view/TextureRegistry.SurfaceProducer.html#getSurface() -[Issue 139702]: {{site.repo.flutter}}/issues/139702 -[Issue 145930]: {{site.repo.flutter}}/issues/145930 -[PR 51061]: {{site.repo.engine}}/pull/51061 -[PR 6456]: {{site.repo.packages}}/pull/6456 -[PR 6461]: {{site.repo.packages}}/pull/6461 +[`createSurfaceProducer`]: {{site.api}}javadoc/io/flutter/view/TextureRegistry.html#createSurfaceProducer() +[`createSurfaceTexture`]: {{site.api}}javadoc/io/flutter/view/TextureRegistry.html#createSurfaceTexture() +[`getSurface()`]: {{site.api}}javadoc/io/flutter/view/TextureRegistry.SurfaceProducer.html#getSurface() +[Issue 139702]: {{site.repo.flutter}}issues/139702 +[Issue 145930]: {{site.repo.flutter}}issues/145930 +[PR 51061]: {{site.repo.engine}}pull/51061 +[PR 6456]: {{site.repo.packages}}pull/6456 +[PR 6461]: {{site.repo.packages}}pull/6461 diff --git a/src/content/release/breaking-changes/android-v1-embedding-create-deprecation.md b/src/content/release/breaking-changes/android-v1-embedding-create-deprecation.md index c2ffb78b4d..47d61b0eaa 100644 --- a/src/content/release/breaking-changes/android-v1-embedding-create-deprecation.md +++ b/src/content/release/breaking-changes/android-v1-embedding-create-deprecation.md @@ -20,7 +20,7 @@ to migrate following the instructions in [Supporting the new Android plugins APIs][]. [Android Migration Summary]: /go/android-migration-summary -[Upgrading pre 1.12 Android projects]: {{site.repo.flutter}}/wiki/Upgrading-pre-1.12-Android-projects +[Upgrading pre 1.12 Android projects]: {{site.repo.flutter}}wiki/Upgrading-pre-1.12-Android-projects [Supporting the new Android plugins APIs]: /release/breaking-changes/plugin-api-migration ## Context diff --git a/src/content/release/breaking-changes/androidx-migration.md b/src/content/release/breaking-changes/androidx-migration.md index b5dcab34d2..3336e055ac 100644 --- a/src/content/release/breaking-changes/androidx-migration.md +++ b/src/content/release/breaking-changes/androidx-migration.md @@ -31,7 +31,7 @@ more frequently than the Android platform. 这意味着它提供了向后的兼容性, 并且更新频率比 Android 平台更频繁。 -[AndroidX]: {{site.android-dev}}/jetpack/androidx +[AndroidX]: {{site.android-dev}}jetpack/androidx ## Common Questions @@ -115,7 +115,7 @@ is compatible with AndroidX. 请发布新的 AndroidX 版本到 pub 并更新你的 `CHANGELOG.md`, 以表明该新版本与 AndroidX 兼容。 -[Android Studio]: {{site.android-dev}}/studio +[Android Studio]: {{site.android-dev}}studio ### What if I can't use Android Studio? @@ -184,8 +184,8 @@ mustn't depend on any [old build artifact][] or 不能依赖于任何 [旧构建工件][old build artifact] 和 [旧支持库类][old Support Library class]。 -[old build artifact]: {{site.android-dev}}/jetpack/androidx/migrate/artifact-mappings -[old Support Library class]: {{site.android-dev}}/jetpack/androidx/migrate/class-mappings +[old build artifact]: {{site.android-dev}}jetpack/androidx/migrate/artifact-mappings +[old Support Library class]: {{site.android-dev}}jetpack/androidx/migrate/class-mappings In an app or module project, the file `android/gradle.properties` @@ -245,4 +245,4 @@ to the title of the issue. [在 GitHub 提出一个 issue][Open an issue on GitHub] 并在 issue 的标题中添加 `[androidx-migration]`。 -[Open an issue on GitHub]: {{site.repo.flutter}}/issues/new/choose +[Open an issue on GitHub]: {{site.repo.flutter}}issues/new/choose diff --git a/src/content/release/breaking-changes/animation-sheet-builder-display.md b/src/content/release/breaking-changes/animation-sheet-builder-display.md index c7acfcbd4f..d4c33e3ec0 100644 --- a/src/content/release/breaking-changes/animation-sheet-builder-display.md +++ b/src/content/release/breaking-changes/animation-sheet-builder-display.md @@ -155,7 +155,7 @@ Relevant PR: * [Test WidgetTester handling test pointers][] -[`AnimationSheetBuilder`]: {{site.api}}/flutter/flutter_test/AnimationSheetBuilder-class.html -[`AnimationSheetBuilder.collate`]: {{site.api}}/flutter/flutter_test/AnimationSheetBuilder/collate.html -[golden testing]: {{site.repo.flutter}}/wiki/Writing-a-golden-file-test-for-package%3Aflutter -[Test WidgetTester handling test pointers]: {{site.repo.flutter}}/pull/83337 +[`AnimationSheetBuilder`]: {{site.api}}flutter/flutter_test/AnimationSheetBuilder-class.html +[`AnimationSheetBuilder.collate`]: {{site.api}}flutter/flutter_test/AnimationSheetBuilder/collate.html +[golden testing]: {{site.repo.flutter}}wiki/Writing-a-golden-file-test-for-package%3Aflutter +[Test WidgetTester handling test pointers]: {{site.repo.flutter}}pull/83337 diff --git a/src/content/release/breaking-changes/annotations-return-local-position-relative-to-object.md b/src/content/release/breaking-changes/annotations-return-local-position-relative-to-object.md index 317eae15d5..edb26b9227 100644 --- a/src/content/release/breaking-changes/annotations-return-local-position-relative-to-object.md +++ b/src/content/release/breaking-changes/annotations-return-local-position-relative-to-object.md @@ -96,7 +96,7 @@ Relevant PR: * [Make Annotation's localPosition relative to object][] -[`AnnotatedRegionLayer`]: {{site.api}}/flutter/rendering/AnnotatedRegionLayer-class.html -[`AnnotationEntry`]: {{site.api}}/flutter/rendering/AnnotationEntry-class.html -[Issue #49568]: {{site.repo.flutter}}/issues/49568 -[Make Annotation's localPosition relative to object]: {{site.repo.flutter}}/pull/50157 +[`AnnotatedRegionLayer`]: {{site.api}}flutter/rendering/AnnotatedRegionLayer-class.html +[`AnnotationEntry`]: {{site.api}}flutter/rendering/AnnotationEntry-class.html +[Issue #49568]: {{site.repo.flutter}}issues/49568 +[Make Annotation's localPosition relative to object]: {{site.repo.flutter}}pull/50157 diff --git a/src/content/release/breaking-changes/asset-manifest-dot-json.md b/src/content/release/breaking-changes/asset-manifest-dot-json.md index 99ec08c992..fd14292629 100644 --- a/src/content/release/breaking-changes/asset-manifest-dot-json.md +++ b/src/content/release/breaking-changes/asset-manifest-dot-json.md @@ -86,7 +86,7 @@ Relevant issues: * When building a Flutter app, the flutter tool generates an AssetManifest.json file that is unused by the framework [(Issue #143577)][] -[`AssetBundle`]: {{site.api}}/flutter/services/AssetBundle-class.html -[`AssetManifest`]: {{site.api}}/flutter/services/AssetManifest-class.html -[(Issue #143577)]: {{site.repo.flutter}}/issues/143577 -[standard_message_codec]: {{site.pub-pkg}}/standard_message_codec +[`AssetBundle`]: {{site.api}}flutter/services/AssetBundle-class.html +[`AssetManifest`]: {{site.api}}flutter/services/AssetManifest-class.html +[(Issue #143577)]: {{site.repo.flutter}}issues/143577 +[standard_message_codec]: {{site.pub-pkg}}standard_message_codec diff --git a/src/content/release/breaking-changes/bottom-navigation-title-to-label.md b/src/content/release/breaking-changes/bottom-navigation-title-to-label.md index b503e291bd..58f4a38ac1 100644 --- a/src/content/release/breaking-changes/bottom-navigation-title-to-label.md +++ b/src/content/release/breaking-changes/bottom-navigation-title-to-label.md @@ -70,7 +70,7 @@ Breaking change proposal: * [Breaking Change: Bottom Navigation Item Title][] -[`BottomNavigationBarItem`]: {{site.api}}/flutter/widgets/BottomNavigationBarItem-class.html +[`BottomNavigationBarItem`]: {{site.api}}flutter/widgets/BottomNavigationBarItem-class.html [Breaking Change: Bottom Navigation Item Title]: /go/bottom-navigation-bar-title-deprecation -[PR 59127]: {{site.repo.flutter}}/pull/59127 -[PR 60655]: {{site.repo.flutter}}/pull/60655 +[PR 59127]: {{site.repo.flutter}}pull/59127 +[PR 60655]: {{site.repo.flutter}}pull/60655 diff --git a/src/content/release/breaking-changes/buildtextspan-buildcontext.md b/src/content/release/breaking-changes/buildtextspan-buildcontext.md index 724eee33d3..d302ad1ba1 100644 --- a/src/content/release/breaking-changes/buildtextspan-buildcontext.md +++ b/src/content/release/breaking-changes/buildtextspan-buildcontext.md @@ -155,8 +155,8 @@ Relevant PRs: * [Revert "Add BuildContext parameter to TextEditingController.buildTextSpan" #73503][] * [Add BuildContext parameter to TextEditingController.buildTextSpan #72344][] -[Add BuildContext parameter to TextEditingController.buildTextSpan #72344]: {{site.repo.flutter}}/pull/72344 -[Issue #72343]: {{site.repo.flutter}}/issues/72343 -[Reland "Add BuildContext parameter to TextEditingController.buildTextSpan" #73510]: {{site.repo.flutter}}/pull/73510 -[Revert "Add BuildContext parameter to TextEditingController.buildTextSpan" #73503]: {{site.repo.flutter}}/pull/73503 -[`TextEditingController.buildTextSpan`]: {{site.api}}/flutter/widgets/TextEditingController/buildTextSpan.html +[Add BuildContext parameter to TextEditingController.buildTextSpan #72344]: {{site.repo.flutter}}pull/72344 +[Issue #72343]: {{site.repo.flutter}}issues/72343 +[Reland "Add BuildContext parameter to TextEditingController.buildTextSpan" #73510]: {{site.repo.flutter}}pull/73510 +[Revert "Add BuildContext parameter to TextEditingController.buildTextSpan" #73503]: {{site.repo.flutter}}pull/73503 +[`TextEditingController.buildTextSpan`]: {{site.api}}flutter/widgets/TextEditingController/buildTextSpan.html diff --git a/src/content/release/breaking-changes/buttons.md b/src/content/release/breaking-changes/buttons.md index f26343e695..8efcbfbd10 100644 --- a/src/content/release/breaking-changes/buttons.md +++ b/src/content/release/breaking-changes/buttons.md @@ -668,17 +668,17 @@ Relevant PRs: * [PR 73352: Deprecated obsolete Material classes: FlatButton, RaisedButton, OutlineButton][] -[`ButtonStyle`]: {{site.api}}/flutter/material/ButtonStyle-class.html -[`ButtonStyleButton`]: {{site.api}}/flutter/material/ButtonStyleButton-class.html -[`ElevatedButton`]: {{site.api}}/flutter/material/ElevatedButton-class.html -[`ElevatedButtonTheme`]: {{site.api}}/flutter/material/ElevatedButtonTheme-class.html -[`ElevatedButtonThemeData`]: {{site.api}}/flutter/material/ElevatedButtonThemeData-class.html -[`OutlinedButton`]: {{site.api}}/flutter/material/OutlinedButton-class.html -[`OutlinedButtonTheme`]: {{site.api}}/flutter/material/OutlinedButtonTheme-class.html -[`OutlinedButtonThemeData`]: {{site.api}}/flutter/material/OutlinedButtonThemeData-class.html -[`TextButton`]: {{site.api}}/flutter/material/TextButton-class.html -[`TextButtonTheme`]: {{site.api}}/flutter/material/TextButtonTheme-class.html -[`TextButtonThemeData`]: {{site.api}}/flutter/material/TextButtonThemeData-class.html - -[PR 59702: New Button Universe]: {{site.repo.flutter}}/pull/59702 -[PR 73352: Deprecated obsolete Material classes: FlatButton, RaisedButton, OutlineButton]: {{site.repo.flutter}}/pull/73352 +[`ButtonStyle`]: {{site.api}}flutter/material/ButtonStyle-class.html +[`ButtonStyleButton`]: {{site.api}}flutter/material/ButtonStyleButton-class.html +[`ElevatedButton`]: {{site.api}}flutter/material/ElevatedButton-class.html +[`ElevatedButtonTheme`]: {{site.api}}flutter/material/ElevatedButtonTheme-class.html +[`ElevatedButtonThemeData`]: {{site.api}}flutter/material/ElevatedButtonThemeData-class.html +[`OutlinedButton`]: {{site.api}}flutter/material/OutlinedButton-class.html +[`OutlinedButtonTheme`]: {{site.api}}flutter/material/OutlinedButtonTheme-class.html +[`OutlinedButtonThemeData`]: {{site.api}}flutter/material/OutlinedButtonThemeData-class.html +[`TextButton`]: {{site.api}}flutter/material/TextButton-class.html +[`TextButtonTheme`]: {{site.api}}flutter/material/TextButtonTheme-class.html +[`TextButtonThemeData`]: {{site.api}}flutter/material/TextButtonThemeData-class.html + +[PR 59702: New Button Universe]: {{site.repo.flutter}}pull/59702 +[PR 73352: Deprecated obsolete Material classes: FlatButton, RaisedButton, OutlineButton]: {{site.repo.flutter}}pull/73352 diff --git a/src/content/release/breaking-changes/can-request-focus.md b/src/content/release/breaking-changes/can-request-focus.md index c6681aa27d..ef8652cae0 100644 --- a/src/content/release/breaking-changes/can-request-focus.md +++ b/src/content/release/breaking-changes/can-request-focus.md @@ -82,12 +82,12 @@ Relevant PRs: * [Add requestFocusOnTap to DropdownMenu][] * [Replace TextField.canRequestFocus with TextField.focusNode.canRequestFocus][] -[`DropdownMenu`]: {{site.api}}/flutter/material/DropdownMenu-class.html -[`FocusNode.canRequestFocus`]: {{site.api}}/flutter/widgets/FocusNode/canRequestFocus.html -[`TextField.canRequestFocus`]: {{site.api}}/flutter/material/TextField/canRequestFocus.html -[`TextField.focusNode`]: {{site.api}}/flutter/material/TextField/focusNode.html - -[Broken selection on TextField if canRequestFocus: false]: {{site.repo.flutter}}/issues/130011 -[DropdownMenu Disable text input]: {{site.repo.flutter}}/issues/116587 -[Replace TextField.canRequestFocus with TextField.focusNode.canRequestFocus]: {{site.repo.flutter}}/pull/130164 -[Add requestFocusOnTap to DropdownMenu]: {{site.repo.flutter}}/pull/117504 +[`DropdownMenu`]: {{site.api}}flutter/material/DropdownMenu-class.html +[`FocusNode.canRequestFocus`]: {{site.api}}flutter/widgets/FocusNode/canRequestFocus.html +[`TextField.canRequestFocus`]: {{site.api}}flutter/material/TextField/canRequestFocus.html +[`TextField.focusNode`]: {{site.api}}flutter/material/TextField/focusNode.html + +[Broken selection on TextField if canRequestFocus: false]: {{site.repo.flutter}}issues/130011 +[DropdownMenu Disable text input]: {{site.repo.flutter}}issues/116587 +[Replace TextField.canRequestFocus with TextField.focusNode.canRequestFocus]: {{site.repo.flutter}}pull/130164 +[Add requestFocusOnTap to DropdownMenu]: {{site.repo.flutter}}pull/117504 diff --git a/src/content/release/breaking-changes/checkbox-fillColor.md b/src/content/release/breaking-changes/checkbox-fillColor.md index ff365510be..442517aad1 100644 --- a/src/content/release/breaking-changes/checkbox-fillColor.md +++ b/src/content/release/breaking-changes/checkbox-fillColor.md @@ -123,7 +123,7 @@ Relevant PRs: * [`Checkbox.fillColor` should be applied to checkbox's background color when it is unchecked.][] -[`Checkbox.fillColor`]: {{site.api}}/flutter/material/Checkbox/fillColor.html +[`Checkbox.fillColor`]: {{site.api}}flutter/material/Checkbox/fillColor.html -[Add `backgroundColor` to `Checkbox` and `CheckboxThemeData`]: {{site.repo.flutter}}/issues/123386 -[`Checkbox.fillColor` should be applied to checkbox's background color when it is unchecked.]: {{site.repo.flutter}}/pull/125643 +[Add `backgroundColor` to `Checkbox` and `CheckboxThemeData`]: {{site.repo.flutter}}issues/123386 +[`Checkbox.fillColor` should be applied to checkbox's background color when it is unchecked.]: {{site.repo.flutter}}pull/125643 diff --git a/src/content/release/breaking-changes/chip-usedeletebuttontooltip-migration.md b/src/content/release/breaking-changes/chip-usedeletebuttontooltip-migration.md index 070194cc2e..8aa3a6ab55 100644 --- a/src/content/release/breaking-changes/chip-usedeletebuttontooltip-migration.md +++ b/src/content/release/breaking-changes/chip-usedeletebuttontooltip-migration.md @@ -85,9 +85,9 @@ Relevant PR: * [Deprecate `useDeleteButtonTooltip` for Chips][] -[`Chip`]: {{site.api}}/flutter/material/Chip-class.html -[`InputChip`]: {{site.api}}/flutter/material/InputChip-class.html -[`RawChip`]: {{site.api}}/flutter/material/RawChip-class.html +[`Chip`]: {{site.api}}flutter/material/Chip-class.html +[`InputChip`]: {{site.api}}flutter/material/InputChip-class.html +[`RawChip`]: {{site.api}}flutter/material/RawChip-class.html -[Deprecate `useDeleteButtonTooltip` for Chips]: {{site.repo.flutter}}/pull/96174 +[Deprecate `useDeleteButtonTooltip` for Chips]: {{site.repo.flutter}}pull/96174 [Flutter fix]: /tools/flutter-fix diff --git a/src/content/release/breaking-changes/clip-behavior.md b/src/content/release/breaking-changes/clip-behavior.md index 0346cdd9fd..2eb3b15793 100644 --- a/src/content/release/breaking-changes/clip-behavior.md +++ b/src/content/release/breaking-changes/clip-behavior.md @@ -177,24 +177,24 @@ Relevant PRs: * [PR 21703][]: Default clipBehavior of ClipRect to hardEdge * [PR 21826][]: Missing default hardEdge clip for ClipRectLayer -[PR 5420]: {{site.repo.engine}}/pull/5420 -[PR 5647]: {{site.repo.engine}}/pull/5647 -[PR 5670]: {{site.repo.engine}}/pull/5670 -[PR 5853]: {{site.repo.engine}}/pull/5853 -[PR 5868]: {{site.repo.engine}}/pull/5868 -[PR 5952]: {{site.repo.engine}}/pull/5952 -[PR 5973]: {{site.repo.engine}}/pull/5937 -[PR 18576]: {{site.repo.flutter}}/pull/18576 -[PR 18616]: {{site.repo.flutter}}/pull/18616 -[PR 20205]: {{site.repo.flutter}}/pull/20205 -[PR 20538]: {{site.repo.flutter}}/pull/20538 -[PR 20751]: {{site.repo.flutter}}/pull/20751 -[PR 20752]: {{site.repo.flutter}}/pull/20752 -[PR 21012]: {{site.repo.flutter}}/pull/21012 -[PR 21703]: {{site.repo.flutter}}/pull/21703 -[PR 21826]: {{site.repo.flutter}}/pull/21826 - -[`Clip`]: {{site.api}}/flutter/dart-ui/Clip.html -[Issue 13736]: {{site.repo.flutter}}/issues/13736 -[Issue 18057]: {{site.repo.flutter}}/issues/18057 -[Issue 21830]: {{site.repo.flutter}}/issues/21830 +[PR 5420]: {{site.repo.engine}}pull/5420 +[PR 5647]: {{site.repo.engine}}pull/5647 +[PR 5670]: {{site.repo.engine}}pull/5670 +[PR 5853]: {{site.repo.engine}}pull/5853 +[PR 5868]: {{site.repo.engine}}pull/5868 +[PR 5952]: {{site.repo.engine}}pull/5952 +[PR 5973]: {{site.repo.engine}}pull/5937 +[PR 18576]: {{site.repo.flutter}}pull/18576 +[PR 18616]: {{site.repo.flutter}}pull/18616 +[PR 20205]: {{site.repo.flutter}}pull/20205 +[PR 20538]: {{site.repo.flutter}}pull/20538 +[PR 20751]: {{site.repo.flutter}}pull/20751 +[PR 20752]: {{site.repo.flutter}}pull/20752 +[PR 21012]: {{site.repo.flutter}}pull/21012 +[PR 21703]: {{site.repo.flutter}}pull/21703 +[PR 21826]: {{site.repo.flutter}}pull/21826 + +[`Clip`]: {{site.api}}flutter/dart-ui/Clip.html +[Issue 13736]: {{site.repo.flutter}}issues/13736 +[Issue 18057]: {{site.repo.flutter}}issues/18057 +[Issue 21830]: {{site.repo.flutter}}issues/21830 diff --git a/src/content/release/breaking-changes/clipboard-data-required.md b/src/content/release/breaking-changes/clipboard-data-required.md index 4a6773a3be..044d728d23 100644 --- a/src/content/release/breaking-changes/clipboard-data-required.md +++ b/src/content/release/breaking-changes/clipboard-data-required.md @@ -61,7 +61,7 @@ Relevant PRs: * [Assert at least one clipboard data variant is provided][] -[`ClipboardData constructor`]: {{site.api}}/flutter/services/ClipboardData/ClipboardData.html -[`Clipboard.setData`]: {{site.api}}/flutter/services/Clipboard/setData.html -[PR 122446]: {{site.repo.flutter}}/pull/122446 -[Assert at least one clipboard data variant is provided]: {{site.repo.flutter}}/pull/122446 +[`ClipboardData constructor`]: {{site.api}}flutter/services/ClipboardData/ClipboardData.html +[`Clipboard.setData`]: {{site.api}}flutter/services/Clipboard/setData.html +[PR 122446]: {{site.repo.flutter}}pull/122446 +[Assert at least one clipboard data variant is provided]: {{site.repo.flutter}}pull/122446 diff --git a/src/content/release/breaking-changes/container-color.md b/src/content/release/breaking-changes/container-color.md index 4df3158d86..70b34b13ac 100644 --- a/src/content/release/breaking-changes/container-color.md +++ b/src/content/release/breaking-changes/container-color.md @@ -92,9 +92,9 @@ Relevant PR: * [Colored box and container optimization #50979][] -[`Container`]: {{site.api}}/flutter/widgets/Container-class.html -[`ColoredBox`]: {{site.api}}/flutter/widgets/ColoredBox-class.html -[`BoxDecoration`]: {{site.api}}/flutter/painting/BoxDecoration-class.html -[Issue 9672]: {{site.repo.flutter}}/issues/9672 -[Issue 28753]: {{site.repo.flutter}}/issues/28753 -[Colored box and container optimization #50979]: {{site.repo.flutter}}/pull/50979 +[`Container`]: {{site.api}}flutter/widgets/Container-class.html +[`ColoredBox`]: {{site.api}}flutter/widgets/ColoredBox-class.html +[`BoxDecoration`]: {{site.api}}flutter/painting/BoxDecoration-class.html +[Issue 9672]: {{site.repo.flutter}}issues/9672 +[Issue 28753]: {{site.repo.flutter}}issues/28753 +[Colored box and container optimization #50979]: {{site.repo.flutter}}pull/50979 diff --git a/src/content/release/breaking-changes/context-menus.md b/src/content/release/breaking-changes/context-menus.md index 0d0f497bd6..21ea8501b5 100644 --- a/src/content/release/breaking-changes/context-menus.md +++ b/src/content/release/breaking-changes/context-menus.md @@ -36,7 +36,7 @@ context menu widgets. Here's an example that shows how to add a **Send email** button to the default context menus whenever an email address is selected. The full code can be found in the samples repository in -[email_button_page.dart]({{site.repo.samples}}/blob/main/experimental/context_menus/lib/email_button_page.dart) +[email_button_page.dart]({{site.repo.samples}}blob/main/experimental/context_menus/lib/email_button_page.dart) on GitHub. ```dart @@ -65,7 +65,7 @@ TextField( ``` A large number of examples of different custom context menus are available -[in the samples repo]({{site.repo.samples}}/tree/main/experimental/context_menus) +[in the samples repo]({{site.repo.samples}}tree/main/experimental/context_menus) on GitHub. All related deprecated features were flagged with the deprecation warning "Use @@ -76,16 +76,16 @@ All related deprecated features were flagged with the deprecation warning "Use In general, any previous changes to context menus that have been deprecated now require the use of the `contextMenuBuilder` parameter on the relevant text-editing or text-selection widget ( -[on `TextField`]({{site.api}}/flutter/material/TextField/contextMenuBuilder.html), +[on `TextField`]({{site.api}}flutter/material/TextField/contextMenuBuilder.html), for example). Return a built-in context menu widget like -[`AdaptiveTextSelectionToolbar`]({{site.api}}/flutter/material/AdaptiveTextSelectionToolbar-class.html) +[`AdaptiveTextSelectionToolbar`]({{site.api}}flutter/material/AdaptiveTextSelectionToolbar-class.html) to use Flutter's built-in context menus, or return your own widget for something totally custom. To transition to `contextMenuBuilder`, the following parameters and classes have been deprecated. -### [`ToolbarOptions`]({{site.api}}/flutter/widgets/ToolbarOptions-class.html) +### [`ToolbarOptions`]({{site.api}}flutter/widgets/ToolbarOptions-class.html) This class was previously used to explicitly enable or disable certain buttons in a context menu. Before this change, you might have passed it into `TextField` @@ -140,7 +140,7 @@ TextField( ) ``` -### [`TextSelectionControls.canCut`]({{site.api}}/flutter/widgets/TextSelectionControls/canCut.html) and other button booleans +### [`TextSelectionControls.canCut`]({{site.api}}flutter/widgets/TextSelectionControls/canCut.html) and other button booleans These booleans previously had the same effect of enabling and disabling certain buttons as `ToolbarOptions.cut`, and so on had. Before this change, you might @@ -158,7 +158,7 @@ class _MyMaterialTextSelectionControls extends MaterialTextSelectionControls { See the previous section on `ToolbarOptions` for how to achieve a similar effect with `contextMenuBuilder`. -### [`TextSelectionControls.handleCut`]({{site.api}}/flutter/widgets/TextSelectionControls/handleCut.html) and other button callbacks +### [`TextSelectionControls.handleCut`]({{site.api}}flutter/widgets/TextSelectionControls/handleCut.html) and other button callbacks These functions allowed the modification of the callback called when the buttons were pressed. Before this change, you might have been modifying context menu @@ -219,10 +219,10 @@ TextField( A full example of modifying a built-in context menu action can be found in the samples repository in -[modified_action_page.dart]({{site.repo.samples}}/blob/main/experimental/context_menus/lib/modified_action_page.dart) +[modified_action_page.dart]({{site.repo.samples}}blob/main/experimental/context_menus/lib/modified_action_page.dart) on GitHub. -### [`buildToolbar`]({{site.api}}/flutter/widgets/TextSelectionControls/buildToolbar.html) +### [`buildToolbar`]({{site.api}}flutter/widgets/TextSelectionControls/buildToolbar.html) This function generated the context menu widget similarly to `contextMenuBuilder`, but required more setup to use. Before this change, you @@ -312,7 +312,7 @@ class _MyTextField extends StatelessWidget { A full example of building a custom context menu can be found in the samples repository in -[`custom_menu_page.dart`]({{site.repo.samples}}/blob/main/experimental/context_menus/lib/custom_menu_page.dart) +[`custom_menu_page.dart`]({{site.repo.samples}}blob/main/experimental/context_menus/lib/custom_menu_page.dart) on GitHub. ## Timeline @@ -324,23 +324,23 @@ In stable release: 3.7.0 API documentation: -* [`TextField.contextMenuBuilder`]({{site.api}}/flutter/material/TextField/contextMenuBuilder.html) -* [`AdaptiveTextSelectionToolbar`]({{site.api}}/flutter/material/AdaptiveTextSelectionToolbar-class.html) +* [`TextField.contextMenuBuilder`]({{site.api}}flutter/material/TextField/contextMenuBuilder.html) +* [`AdaptiveTextSelectionToolbar`]({{site.api}}flutter/material/AdaptiveTextSelectionToolbar-class.html) Relevant issues: -* [Simple custom text selection toolbars]({{site.repo.flutter}}/issues/73574) -* [Right click menu outside of text fields]({{site.repo.flutter}}/issues/98272) -* [Text editing for desktop - stable]({{site.repo.flutter}}/issues/90563) -* [Ability to disable context menu on TextFields]({{site.repo.flutter}}/issues/79796) -* [Missing APIs for text selection toolbar styling]({{site.repo.flutter}}/issues/22210) -* [Enable copy toolbar in all widgets]({{site.repo.flutter}}/issues/49996) -* [Disable context menu from browser]({{site.repo.flutter}}/issues/78671) -* [Custom context menus don't show up for Flutter web]({{site.repo.flutter}}/issues/84219) +* [Simple custom text selection toolbars]({{site.repo.flutter}}issues/73574) +* [Right click menu outside of text fields]({{site.repo.flutter}}issues/98272) +* [Text editing for desktop - stable]({{site.repo.flutter}}issues/90563) +* [Ability to disable context menu on TextFields]({{site.repo.flutter}}issues/79796) +* [Missing APIs for text selection toolbar styling]({{site.repo.flutter}}issues/22210) +* [Enable copy toolbar in all widgets]({{site.repo.flutter}}issues/49996) +* [Disable context menu from browser]({{site.repo.flutter}}issues/78671) +* [Custom context menus don't show up for Flutter web]({{site.repo.flutter}}issues/84219) Relevant PRs: -* [ContextMenus]({{site.repo.flutter}}/pull/107193) -* [Ability to disable the browser's context menu on web]({{site.repo.flutter}}/pull/118194) -* [Ability to disable the browser's context menu on web (engine)]({{site.repo.engine}}/pull/38682) -* [Custom context menus in SelectableRegion on web]({{site.repo.flutter}}/pull/121653) +* [ContextMenus]({{site.repo.flutter}}pull/107193) +* [Ability to disable the browser's context menu on web]({{site.repo.flutter}}pull/118194) +* [Ability to disable the browser's context menu on web (engine)]({{site.repo.engine}}pull/38682) +* [Custom context menus in SelectableRegion on web]({{site.repo.flutter}}pull/121653) diff --git a/src/content/release/breaking-changes/cupertino-icons-1.0.0.md b/src/content/release/breaking-changes/cupertino-icons-1.0.0.md index 4e3674efff..869ff19be8 100644 --- a/src/content/release/breaking-changes/cupertino-icons-1.0.0.md +++ b/src/content/release/breaking-changes/cupertino-icons-1.0.0.md @@ -129,4 +129,4 @@ In stable release: 1.22 ## References [0.1.3 icons]: https://raw.githubusercontent.com/flutter/cupertino_icons/master/map.png -[`CupertinoIcons`]: {{site.api}}/flutter/cupertino/CupertinoIcons-class.html +[`CupertinoIcons`]: {{site.api}}flutter/cupertino/CupertinoIcons-class.html diff --git a/src/content/release/breaking-changes/cupertino-tab-bar-localizations.md b/src/content/release/breaking-changes/cupertino-tab-bar-localizations.md index 21520894b1..e8916899ff 100644 --- a/src/content/release/breaking-changes/cupertino-tab-bar-localizations.md +++ b/src/content/release/breaking-changes/cupertino-tab-bar-localizations.md @@ -166,11 +166,11 @@ Relevant PR: * [PR 55336: Adding tabSemanticsLabel to CupertinoLocalizations][] * [PR 56582: Update Tab semantics in Cupertino to be the same as Material][] -[`CupertinoTabBar`]: {{site.api}}/flutter/cupertino/CupertinoTabBar-class.html -[`Localizations`]: {{site.api}}/flutter/widgets/Localizations-class.html -[`DefaultCupertinoLocalizations`]: {{site.api}}/flutter/cupertino/DefaultCupertinoLocalizations-class.html -[`Semantics`]: {{site.api}}/flutter/widgets/Semantics-class.html -[`CupertinoApp`]: {{site.api}}/flutter/cupertino/CupertinoApp-class.html +[`CupertinoTabBar`]: {{site.api}}flutter/cupertino/CupertinoTabBar-class.html +[`Localizations`]: {{site.api}}flutter/widgets/Localizations-class.html +[`DefaultCupertinoLocalizations`]: {{site.api}}flutter/cupertino/DefaultCupertinoLocalizations-class.html +[`Semantics`]: {{site.api}}flutter/widgets/Semantics-class.html +[`CupertinoApp`]: {{site.api}}flutter/cupertino/CupertinoApp-class.html [Internationalizing Flutter Apps]: /ui/accessibility-and-internationalization/internationalization -[PR 55336: Adding tabSemanticsLabel to CupertinoLocalizations]: {{site.repo.flutter}}/pull/55336 -[PR 56582: Update Tab semantics in Cupertino to be the same as Material]: {{site.repo.flutter}}/pull/56582#issuecomment-625497951 +[PR 55336: Adding tabSemanticsLabel to CupertinoLocalizations]: {{site.repo.flutter}}pull/55336 +[PR 56582: Update Tab semantics in Cupertino to be the same as Material]: {{site.repo.flutter}}pull/56582#issuecomment-625497951 diff --git a/src/content/release/breaking-changes/default-desktop-scrollbars.md b/src/content/release/breaking-changes/default-desktop-scrollbars.md index deb37e75fe..72973ea675 100644 --- a/src/content/release/breaking-changes/default-desktop-scrollbars.md +++ b/src/content/release/breaking-changes/default-desktop-scrollbars.md @@ -274,13 +274,13 @@ Relevant PRs: * [Automatically applying Scrollbars on desktop platforms with configurable ScrollBehaviors][] -[`ScrollConfiguration`]: {{site.api}}/flutter/widgets/ScrollConfiguration-class.html -[`ScrollBehavior`]: {{site.api}}/flutter/widgets/ScrollBehavior-class.html -[`MaterialScrollBehavior`]: {{site.api}}/flutter/material/MaterialScrollBehavior-class.html -[`CupertinoScrollBehavior`]: {{site.api}}/flutter/cupertino/CupertinoScrollBehavior-class.html -[`Scrollbar`]: {{site.api}}/flutter/material/Scrollbar-class.html -[`CupertinoScrollbar`]: {{site.api}}/flutter/cupertino/CupertinoScrollbar-class.html -[Issue #40107]: {{site.repo.flutter}}/issues/40107 -[Issue #70866]: {{site.repo.flutter}}/issues/70866 -[Exposing ScrollBehaviors for app-wide settings]: {{site.repo.flutter}}/pull/76739 -[Automatically applying Scrollbars on desktop platforms with configurable ScrollBehaviors]: {{site.repo.flutter}}/pull/78588 +[`ScrollConfiguration`]: {{site.api}}flutter/widgets/ScrollConfiguration-class.html +[`ScrollBehavior`]: {{site.api}}flutter/widgets/ScrollBehavior-class.html +[`MaterialScrollBehavior`]: {{site.api}}flutter/material/MaterialScrollBehavior-class.html +[`CupertinoScrollBehavior`]: {{site.api}}flutter/cupertino/CupertinoScrollBehavior-class.html +[`Scrollbar`]: {{site.api}}flutter/material/Scrollbar-class.html +[`CupertinoScrollbar`]: {{site.api}}flutter/cupertino/CupertinoScrollbar-class.html +[Issue #40107]: {{site.repo.flutter}}issues/40107 +[Issue #70866]: {{site.repo.flutter}}issues/70866 +[Exposing ScrollBehaviors for app-wide settings]: {{site.repo.flutter}}pull/76739 +[Automatically applying Scrollbars on desktop platforms with configurable ScrollBehaviors]: {{site.repo.flutter}}pull/78588 diff --git a/src/content/release/breaking-changes/default-scroll-behavior-drag.md b/src/content/release/breaking-changes/default-scroll-behavior-drag.md index 68825ff451..3bb71d4341 100644 --- a/src/content/release/breaking-changes/default-scroll-behavior-drag.md +++ b/src/content/release/breaking-changes/default-scroll-behavior-drag.md @@ -206,12 +206,12 @@ Relevant PRs: * [Deprecate GestureDetector.kind in favor of new supportedDevices][] -[`ScrollConfiguration`]: {{site.api}}/flutter/widgets/ScrollConfiguration-class.html -[`ScrollBehavior`]: {{site.api}}/flutter/widgets/ScrollBehavior-class.html -[`MaterialScrollBehavior`]: {{site.api}}/flutter/material/MaterialScrollBehavior-class.html -[`CupertinoScrollBehavior`]: {{site.api}}/flutter/cupertino/CupertinoScrollBehavior-class.html -[`PointerDeviceKind`]: {{site.api}}/flutter/dart-ui/PointerDeviceKind-class.html -[`GestureDetector`]: {{site.api}}/flutter/widgets/GestureDetector-class.html -[Issue #71322]: {{site.repo.flutter}}/issues/71322 -[Reject mouse drags by default in scrollables]: {{site.repo.flutter}}/pull/81569 -[Deprecate GestureDetector.kind in favor of new supportedDevices]: {{site.repo.flutter}}/pull/81858 +[`ScrollConfiguration`]: {{site.api}}flutter/widgets/ScrollConfiguration-class.html +[`ScrollBehavior`]: {{site.api}}flutter/widgets/ScrollBehavior-class.html +[`MaterialScrollBehavior`]: {{site.api}}flutter/material/MaterialScrollBehavior-class.html +[`CupertinoScrollBehavior`]: {{site.api}}flutter/cupertino/CupertinoScrollBehavior-class.html +[`PointerDeviceKind`]: {{site.api}}flutter/dart-ui/PointerDeviceKind-class.html +[`GestureDetector`]: {{site.api}}flutter/widgets/GestureDetector-class.html +[Issue #71322]: {{site.repo.flutter}}issues/71322 +[Reject mouse drags by default in scrollables]: {{site.repo.flutter}}pull/81569 +[Deprecate GestureDetector.kind in favor of new supportedDevices]: {{site.repo.flutter}}pull/81858 diff --git a/src/content/release/breaking-changes/deprecate-buttonbar.md b/src/content/release/breaking-changes/deprecate-buttonbar.md index 81ffca4553..5bd8621ac9 100644 --- a/src/content/release/breaking-changes/deprecate-buttonbar.md +++ b/src/content/release/breaking-changes/deprecate-buttonbar.md @@ -147,7 +147,7 @@ Relevant PRs: - [`Deprecate `ButtonBar`, `ButtonBarThemeData`, and `ThemeData.buttonBarTheme`][] -[`OverflowBar`]: {{site.api}}/flutter/widgets/OverflowBar-class.html -[`ButtonBar`]: {{site.api}}/flutter/material/ButtonBar-class.html -[Issue #127955]: {{site.repo.flutter}}/issues/127955 -[`Deprecate `ButtonBar`, `ButtonBarThemeData`, and `ThemeData.buttonBarTheme`]: {{site.repo.flutter}}/pull/145523 +[`OverflowBar`]: {{site.api}}flutter/widgets/OverflowBar-class.html +[`ButtonBar`]: {{site.api}}flutter/material/ButtonBar-class.html +[Issue #127955]: {{site.repo.flutter}}issues/127955 +[`Deprecate `ButtonBar`, `ButtonBarThemeData`, and `ThemeData.buttonBarTheme`]: {{site.repo.flutter}}pull/145523 diff --git a/src/content/release/breaking-changes/deprecate-textscalefactor.md b/src/content/release/breaking-changes/deprecate-textscalefactor.md index a5e406252f..443a461512 100644 --- a/src/content/release/breaking-changes/deprecate-textscalefactor.md +++ b/src/content/release/breaking-changes/deprecate-textscalefactor.md @@ -301,13 +301,13 @@ Relevant PRs: * [Replaces `textScaleFactor` with `TextScaler`][] -[Android 14 nonlinear font scaling]: {{site.android-dev}}/about/versions/14/features#non-linear-font-scaling -[`TextScaler`]: {{site.api}}/flutter/painting/TextScaler-class.html -[`MediaQuery.textScalerOf`]: {{site.api}}/flutter/widgets/MediaQuery/textScalerOf.html -[`MediaQuery.maybeTextScalerOf`]: {{site.api}}/flutter/widgets/MediaQuery/maybeTextScalerOf.html -[`MediaQuery.withNoTextScaling`]: {{site.api}}/flutter/widgets/MediaQuery/withNoTextScaling.html -[`MediaQuery.withClampedTextScaling`]: {{site.api}}/flutter/widgets/MediaQuery/withClampedTextScaling.html - -[New font scaling system (Issue 116231)]: {{site.repo.flutter}}/issues/116231 -[Replaces `textScaleFactor` with `TextScaler`]: {{site.repo.flutter}}/pull/128522 +[Android 14 nonlinear font scaling]: {{site.android-dev}}about/versions/14/features#non-linear-font-scaling +[`TextScaler`]: {{site.api}}flutter/painting/TextScaler-class.html +[`MediaQuery.textScalerOf`]: {{site.api}}flutter/widgets/MediaQuery/textScalerOf.html +[`MediaQuery.maybeTextScalerOf`]: {{site.api}}flutter/widgets/MediaQuery/maybeTextScalerOf.html +[`MediaQuery.withNoTextScaling`]: {{site.api}}flutter/widgets/MediaQuery/withNoTextScaling.html +[`MediaQuery.withClampedTextScaling`]: {{site.api}}flutter/widgets/MediaQuery/withClampedTextScaling.html + +[New font scaling system (Issue 116231)]: {{site.repo.flutter}}issues/116231 +[Replaces `textScaleFactor` with `TextScaler`]: {{site.repo.flutter}}pull/128522 diff --git a/src/content/release/breaking-changes/describe-enum.md b/src/content/release/breaking-changes/describe-enum.md index a9896ccee7..e1a737aef4 100644 --- a/src/content/release/breaking-changes/describe-enum.md +++ b/src/content/release/breaking-changes/describe-enum.md @@ -28,7 +28,7 @@ of `something`, which a lot of users wanted. Now, the `name` getter does this. The `describeEnum` function is being deprecated, so the `EnumProperty` class is updated to only accept `Enum` objects. -[enhanced enums]: {{site.dart-site}}/language/enums#declaring-enhanced-enums +[enhanced enums]: {{site.dart-site}}language/enums#declaring-enhanced-enums ## Description of change @@ -89,8 +89,8 @@ Relevant PRs: * [Deprecate `describeEnum` PR][] -[`describeEnum`]: {{site.api}}/flutter/lib/src/foundation/describeEnum.html -[`EnumProperty`]: {{site.api}}/flutter/lib/src/foundation/EnumProperty.html +[`describeEnum`]: {{site.api}}flutter/lib/src/foundation/describeEnum.html +[`EnumProperty`]: {{site.api}}flutter/lib/src/foundation/EnumProperty.html -[Cleanup SemanticsFlag and SemanticsAction issue]: {{site.repo.flutter}}/issues/123346 -[Deprecate `describeEnum` PR]: {{site.repo.flutter}}/pull/125016 +[Cleanup SemanticsFlag and SemanticsAction issue]: {{site.repo.flutter}}issues/123346 +[Deprecate `describeEnum` PR]: {{site.repo.flutter}}pull/125016 diff --git a/src/content/release/breaking-changes/dialog-border-radius.md b/src/content/release/breaking-changes/dialog-border-radius.md index 27096a5fb2..dd081b454f 100644 --- a/src/content/release/breaking-changes/dialog-border-radius.md +++ b/src/content/release/breaking-changes/dialog-border-radius.md @@ -88,9 +88,9 @@ Relevant PR: * [PR 58829: Matching Material Spec for Dialog shape][] -[`Dialog`]: {{site.api}}/flutter/material/Dialog-class.html -[`SimpleDialog`]: {{site.api}}/flutter/material/SimpleDialog-class.html -[`AlertDialog`]: {{site.api}}/flutter/material/AlertDialog-class.html -[`showTimePicker`]: {{site.api}}/flutter/material/showTimePicker.html -[`showDatePicker`]: {{site.api}}/flutter/material/showDatePicker.html -[PR 58829: Matching Material Spec for Dialog shape]: {{site.repo.flutter}}/pull/58829 +[`Dialog`]: {{site.api}}flutter/material/Dialog-class.html +[`SimpleDialog`]: {{site.api}}flutter/material/SimpleDialog-class.html +[`AlertDialog`]: {{site.api}}flutter/material/AlertDialog-class.html +[`showTimePicker`]: {{site.api}}flutter/material/showTimePicker.html +[`showDatePicker`]: {{site.api}}flutter/material/showDatePicker.html +[PR 58829: Matching Material Spec for Dialog shape]: {{site.repo.flutter}}pull/58829 diff --git a/src/content/release/breaking-changes/dispose.md b/src/content/release/breaking-changes/dispose.md index c25dfdb2ef..77d6e9b165 100644 --- a/src/content/release/breaking-changes/dispose.md +++ b/src/content/release/breaking-changes/dispose.md @@ -61,4 +61,4 @@ in the body of the failed method `dispose`. ## Timeline -See the progress and status [in the tracking issue]({{site.repo.flutter}}/issues/134787). +See the progress and status [in the tracking issue]({{site.repo.flutter}}issues/134787). diff --git a/src/content/release/breaking-changes/editable-text-focus-attachment.md b/src/content/release/breaking-changes/editable-text-focus-attachment.md index 6b40b67a1a..6e2fbc1b0a 100644 --- a/src/content/release/breaking-changes/editable-text-focus-attachment.md +++ b/src/content/release/breaking-changes/editable-text-focus-attachment.md @@ -111,5 +111,5 @@ Relevant PR: * [Move text editing Actions to EditableTextState][] -[`EditableText`]: {{site.api}}/flutter/widgets/EditableText-class.html -[Move text editing Actions to EditableTextState]: {{site.repo.flutter}}/pull/90684 +[`EditableText`]: {{site.api}}flutter/widgets/EditableText-class.html +[Move text editing Actions to EditableTextState]: {{site.repo.flutter}}pull/90684 diff --git a/src/content/release/breaking-changes/editable-text-scroll-into-view.md b/src/content/release/breaking-changes/editable-text-scroll-into-view.md index 1bb51bf7aa..7b95c14627 100644 --- a/src/content/release/breaking-changes/editable-text-scroll-into-view.md +++ b/src/content/release/breaking-changes/editable-text-scroll-into-view.md @@ -34,8 +34,8 @@ In stable release: 3.13.0 API documentation: -* [`EditableText`]({{site.api}}/flutter/widgets/EditableText-class.html) +* [`EditableText`]({{site.api}}flutter/widgets/EditableText-class.html) Relevant PRs: -* [109114: Remove Editable.onCaretChanged callback]({{site.repo.flutter}}/pull/109114) +* [109114: Remove Editable.onCaretChanged callback]({{site.repo.flutter}}pull/109114) diff --git a/src/content/release/breaking-changes/eliminating-nullok-parameters.md b/src/content/release/breaking-changes/eliminating-nullok-parameters.md index 91f2e5c445..9967280ac4 100644 --- a/src/content/release/breaking-changes/eliminating-nullok-parameters.md +++ b/src/content/release/breaking-changes/eliminating-nullok-parameters.md @@ -200,54 +200,54 @@ Relevant PRs: * [Remove vestigial `nullOk` parameter from `Localizations.localeOf`][] * [Remove `nullOk` from `Actions.invoke`, add `Actions.maybeInvoke`][] -[`MediaQuery.of`]: {{site.api}}/flutter/widgets/MediaQuery/of.html -[`Navigator.of`]: {{site.api}}/flutter/widgets/Navigator/of.html -[`ScaffoldMessenger.of`]: {{site.api}}/flutter/material/ScaffoldMessenger/of.html -[`Scaffold.of`]: {{site.api}}/flutter/material/Scaffold/of.html -[`Router.of`]: {{site.api}}/flutter/widgets/Router/of.html -[`Localizations.localeOf`]: {{site.api}}/flutter/widgets/Localizations/localeOf.html -[`FocusTraversalOrder.of`]: {{site.api}}/flutter/widgets/FocusTraversalOrder/of.html -[`FocusTraversalGroup.of`]: {{site.api}}/flutter/widgets/FocusTraversalGroup/of.html -[`Focus.of`]: {{site.api}}/flutter/widgets/Focus/of.html -[`Actions.handler`]: {{site.api}}/flutter/widgets/Actions/handler.html -[`Actions.find`]: {{site.api}}/flutter/widgets/Actions/find.html -[`Actions.invoke`]: {{site.api}}/flutter/widgets/Actions/invoke.html -[`AnimatedList.of`]: {{site.api}}/flutter/widgets/AnimatedList/of.html -[`SliverAnimatedList.of`]: {{site.api}}/flutter/widgets/SliverAnimatedList/of.html -[`CupertinoDynamicColor.resolve`]: {{site.api}}/flutter/cupertino/CupertinoDynamicColor/resolve.html -[`CupertinoDynamicColor.resolveFrom`]: {{site.api}}/flutter/cupertino/CupertinoDynamicColor/resolveFrom.html -[`CupertinoUserInterfaceLevel.of`]: {{site.api}}/flutter/cupertino/CupertinoUserInterfaceLevel/of.html -[`CupertinoTheme.brightnessOf`]: {{site.api}}/flutter/cupertino/CupertinoTheme/brightnessOf.html -[`CupertinoThemeData.resolveFrom`]: {{site.api}}/flutter/cupertino/CupertinoThemeData/resolveFrom.html -[`NoDefaultCupertinoThemeData.resolveFrom`]: {{site.api}}/flutter/cupertino/NoDefaultCupertinoThemeData/resolveFrom.html -[`CupertinoTextThemeData.resolveFrom`]: {{site.api}}/flutter/cupertino/CupertinoTextThemeData/resolveFrom.html -[`MaterialBasedCupertinoThemeData.resolveFrom`]: {{site.api}}/flutter/material/MaterialBasedCupertinoThemeData/resolveFrom.html -[`MediaQuery.maybeOf`]: {{site.api}}/flutter/widgets/MediaQuery/maybeOf.html -[`Navigator.maybeOf`]: {{site.api}}/flutter/widgets/Navigator/maybeOf.html -[`ScaffoldMessenger.maybeOf`]: {{site.api}}/flutter/material/ScaffoldMessenger/maybeOf.html -[`Scaffold.maybeOf`]: {{site.api}}/flutter/material/Scaffold/maybeOf.html -[`Router.maybeOf`]: {{site.api}}/flutter/widgets/Router/maybeOf.html -[`Localizations.maybeLocaleOf`]: {{site.api}}/flutter/widgets/Localizations/maybeLocaleOf.html -[`FocusTraversalOrder.maybeOf`]: {{site.api}}/flutter/widgets/FocusTraversalOrder/maybeOf.html -[`FocusTraversalGroup.maybeOf`]: {{site.api}}/flutter/widgets/FocusTraversalGroup/maybeOf.html -[`Focus.maybeOf`]: {{site.api}}/flutter/widgets/Focus/maybeOf.html -[`Actions.maybeFind`]: {{site.api}}/flutter/widgets/Actions/maybeFind.html -[`Actions.maybeInvoke`]: {{site.api}}/flutter/widgets/Actions/maybeInvoke.html -[`AnimatedList.maybeOf`]: {{site.api}}/flutter/widgets/AnimatedList/maybeOf.html -[`SliverAnimatedList.maybeOf`]: {{site.api}}/flutter/widgets/SliverAnimatedList/maybeOf.html -[`CupertinoDynamicColor.maybeResolve`]: {{site.api}}/flutter/cupertino/CupertinoDynamicColor/maybeResolve.html -[`CupertinoUserInterfaceLevel.maybeOf`]: {{site.api}}/flutter/cupertino/CupertinoUserInterfaceLevel/maybeOf.html -[`CupertinoTheme.maybeBrightnessOf`]: {{site.api}}/flutter/cupertino/CupertinoTheme/maybeBrightnessOf.html -[`InheritedWidget`]: {{site.api}}/flutter/widgets/InheritedWidget-class.html -[Issue 68637]: {{site.repo.flutter}}/issues/68637 -[Remove `nullOk` in `MediaQuery.of`]: {{site.repo.flutter}}/pull/68736 -[Remove `nullOk` in `Navigator.of`]: {{site.repo.flutter}}/pull/70726 -[Remove `nullOk` parameter from `AnimatedList.of` and `SliverAnimatedList.of`]: {{site.repo.flutter}}/pull/68925 -[Remove `nullOk` parameter from `Shortcuts.of`, `Actions.find`, and `Actions.handler`]: {{site.repo.flutter}}/pull/68921 -[Remove `nullOk` parameter from `Focus.of`, `FocusTraversalOrder.of`, and `FocusTraversalGroup.of`]: {{site.repo.flutter}}/pull/68917 -[Remove `nullOk` parameter from `Localizations.localeOf`]: {{site.repo.flutter}}/pull/68911 -[Remove `nullOk` parameter from `Router.of`]: {{site.repo.flutter}}/pull/68910 -[Remove `nullOk` from `Scaffold.of` and `ScaffoldMessenger.of`]: {{site.repo.flutter}}/pull/68908 -[Remove `nullOk` parameter from Cupertino color resolution APIs]: {{site.repo.flutter}}/pull/68905 -[Remove vestigial `nullOk` parameter from `Localizations.localeOf`]: {{site.repo.flutter}}/pull/74657 -[Remove `nullOk` from `Actions.invoke`, add `Actions.maybeInvoke`]: {{site.repo.flutter}}/pull/74680 +[`MediaQuery.of`]: {{site.api}}flutter/widgets/MediaQuery/of.html +[`Navigator.of`]: {{site.api}}flutter/widgets/Navigator/of.html +[`ScaffoldMessenger.of`]: {{site.api}}flutter/material/ScaffoldMessenger/of.html +[`Scaffold.of`]: {{site.api}}flutter/material/Scaffold/of.html +[`Router.of`]: {{site.api}}flutter/widgets/Router/of.html +[`Localizations.localeOf`]: {{site.api}}flutter/widgets/Localizations/localeOf.html +[`FocusTraversalOrder.of`]: {{site.api}}flutter/widgets/FocusTraversalOrder/of.html +[`FocusTraversalGroup.of`]: {{site.api}}flutter/widgets/FocusTraversalGroup/of.html +[`Focus.of`]: {{site.api}}flutter/widgets/Focus/of.html +[`Actions.handler`]: {{site.api}}flutter/widgets/Actions/handler.html +[`Actions.find`]: {{site.api}}flutter/widgets/Actions/find.html +[`Actions.invoke`]: {{site.api}}flutter/widgets/Actions/invoke.html +[`AnimatedList.of`]: {{site.api}}flutter/widgets/AnimatedList/of.html +[`SliverAnimatedList.of`]: {{site.api}}flutter/widgets/SliverAnimatedList/of.html +[`CupertinoDynamicColor.resolve`]: {{site.api}}flutter/cupertino/CupertinoDynamicColor/resolve.html +[`CupertinoDynamicColor.resolveFrom`]: {{site.api}}flutter/cupertino/CupertinoDynamicColor/resolveFrom.html +[`CupertinoUserInterfaceLevel.of`]: {{site.api}}flutter/cupertino/CupertinoUserInterfaceLevel/of.html +[`CupertinoTheme.brightnessOf`]: {{site.api}}flutter/cupertino/CupertinoTheme/brightnessOf.html +[`CupertinoThemeData.resolveFrom`]: {{site.api}}flutter/cupertino/CupertinoThemeData/resolveFrom.html +[`NoDefaultCupertinoThemeData.resolveFrom`]: {{site.api}}flutter/cupertino/NoDefaultCupertinoThemeData/resolveFrom.html +[`CupertinoTextThemeData.resolveFrom`]: {{site.api}}flutter/cupertino/CupertinoTextThemeData/resolveFrom.html +[`MaterialBasedCupertinoThemeData.resolveFrom`]: {{site.api}}flutter/material/MaterialBasedCupertinoThemeData/resolveFrom.html +[`MediaQuery.maybeOf`]: {{site.api}}flutter/widgets/MediaQuery/maybeOf.html +[`Navigator.maybeOf`]: {{site.api}}flutter/widgets/Navigator/maybeOf.html +[`ScaffoldMessenger.maybeOf`]: {{site.api}}flutter/material/ScaffoldMessenger/maybeOf.html +[`Scaffold.maybeOf`]: {{site.api}}flutter/material/Scaffold/maybeOf.html +[`Router.maybeOf`]: {{site.api}}flutter/widgets/Router/maybeOf.html +[`Localizations.maybeLocaleOf`]: {{site.api}}flutter/widgets/Localizations/maybeLocaleOf.html +[`FocusTraversalOrder.maybeOf`]: {{site.api}}flutter/widgets/FocusTraversalOrder/maybeOf.html +[`FocusTraversalGroup.maybeOf`]: {{site.api}}flutter/widgets/FocusTraversalGroup/maybeOf.html +[`Focus.maybeOf`]: {{site.api}}flutter/widgets/Focus/maybeOf.html +[`Actions.maybeFind`]: {{site.api}}flutter/widgets/Actions/maybeFind.html +[`Actions.maybeInvoke`]: {{site.api}}flutter/widgets/Actions/maybeInvoke.html +[`AnimatedList.maybeOf`]: {{site.api}}flutter/widgets/AnimatedList/maybeOf.html +[`SliverAnimatedList.maybeOf`]: {{site.api}}flutter/widgets/SliverAnimatedList/maybeOf.html +[`CupertinoDynamicColor.maybeResolve`]: {{site.api}}flutter/cupertino/CupertinoDynamicColor/maybeResolve.html +[`CupertinoUserInterfaceLevel.maybeOf`]: {{site.api}}flutter/cupertino/CupertinoUserInterfaceLevel/maybeOf.html +[`CupertinoTheme.maybeBrightnessOf`]: {{site.api}}flutter/cupertino/CupertinoTheme/maybeBrightnessOf.html +[`InheritedWidget`]: {{site.api}}flutter/widgets/InheritedWidget-class.html +[Issue 68637]: {{site.repo.flutter}}issues/68637 +[Remove `nullOk` in `MediaQuery.of`]: {{site.repo.flutter}}pull/68736 +[Remove `nullOk` in `Navigator.of`]: {{site.repo.flutter}}pull/70726 +[Remove `nullOk` parameter from `AnimatedList.of` and `SliverAnimatedList.of`]: {{site.repo.flutter}}pull/68925 +[Remove `nullOk` parameter from `Shortcuts.of`, `Actions.find`, and `Actions.handler`]: {{site.repo.flutter}}pull/68921 +[Remove `nullOk` parameter from `Focus.of`, `FocusTraversalOrder.of`, and `FocusTraversalGroup.of`]: {{site.repo.flutter}}pull/68917 +[Remove `nullOk` parameter from `Localizations.localeOf`]: {{site.repo.flutter}}pull/68911 +[Remove `nullOk` parameter from `Router.of`]: {{site.repo.flutter}}pull/68910 +[Remove `nullOk` from `Scaffold.of` and `ScaffoldMessenger.of`]: {{site.repo.flutter}}pull/68908 +[Remove `nullOk` parameter from Cupertino color resolution APIs]: {{site.repo.flutter}}pull/68905 +[Remove vestigial `nullOk` parameter from `Localizations.localeOf`]: {{site.repo.flutter}}pull/74657 +[Remove `nullOk` from `Actions.invoke`, add `Actions.maybeInvoke`]: {{site.repo.flutter}}pull/74680 diff --git a/src/content/release/breaking-changes/enterText-trailing-caret.md b/src/content/release/breaking-changes/enterText-trailing-caret.md index 3d8cfb957f..2324a47ef8 100644 --- a/src/content/release/breaking-changes/enterText-trailing-caret.md +++ b/src/content/release/breaking-changes/enterText-trailing-caret.md @@ -114,8 +114,8 @@ Relevant PR: * [enterText to move the caret to the end][] -[`WidgetTester.enterText`]: {{site.api}}/flutter/flutter_test/WidgetTester/enterText.html -[`TestTextInput.enterText`]: {{site.api}}/flutter/flutter_test/TestTextInput/enterText.html +[`WidgetTester.enterText`]: {{site.api}}flutter/flutter_test/WidgetTester/enterText.html +[`TestTextInput.enterText`]: {{site.api}}flutter/flutter_test/TestTextInput/enterText.html -[Issue 79494]: {{site.repo.flutter}}/issues/79494 -[enterText to move the caret to the end]: {{site.repo.flutter}}/pull/79506 +[Issue 79494]: {{site.repo.flutter}}issues/79494 +[enterText to move the caret to the end]: {{site.repo.flutter}}pull/79506 diff --git a/src/content/release/breaking-changes/fab-theme-data-accent-properties.md b/src/content/release/breaking-changes/fab-theme-data-accent-properties.md index 48296c99f1..1f2a79bb91 100644 --- a/src/content/release/breaking-changes/fab-theme-data-accent-properties.md +++ b/src/content/release/breaking-changes/fab-theme-data-accent-properties.md @@ -144,13 +144,13 @@ Other: * [Material Theme System Updates][] -[`accentIconTheme`]: {{site.api}}/flutter/material/ThemeData/accentIconTheme.html -[`FloatingActionButton`]: {{site.api}}/flutter/material/FloatingActionButton/foregroundColor.html -[`FloatingActionButtonThemeData`]: {{site.api}}/flutter/material/FloatingActionButtonThemeData-class.html -[Material Design spec]: {{site.material}}/styles/color +[`accentIconTheme`]: {{site.api}}flutter/material/ThemeData/accentIconTheme.html +[`FloatingActionButton`]: {{site.api}}flutter/material/FloatingActionButton/foregroundColor.html +[`FloatingActionButtonThemeData`]: {{site.api}}flutter/material/FloatingActionButtonThemeData-class.html +[Material Design spec]: {{site.material}}styles/color [Material Theme System Updates]: /go/material-theme-system-updates [Remove FAB Accent Theme Dependency]: /go/remove-fab-accent-theme-dependency -[secondary color]: {{site.material}}/styles/color/the-color-system/color-roles#904230ec-ae73-4f0f-8bff-4024a036ca66 -[Step 1 of 2]: {{site.repo.flutter}}/pull/48435 -[Step 2 of 2]: {{site.repo.flutter}}/pull/46923 -[`ThemeData`]: {{site.api}}/flutter/material/ThemeData/floatingActionButtonTheme.html +[secondary color]: {{site.material}}styles/color/the-color-system/color-roles#904230ec-ae73-4f0f-8bff-4024a036ca66 +[Step 1 of 2]: {{site.repo.flutter}}pull/48435 +[Step 2 of 2]: {{site.repo.flutter}}pull/46923 +[`ThemeData`]: {{site.api}}flutter/material/ThemeData/floatingActionButtonTheme.html diff --git a/src/content/release/breaking-changes/flutter-driver-migration.md b/src/content/release/breaking-changes/flutter-driver-migration.md index de37e6720f..2e649fa55b 100644 --- a/src/content/release/breaking-changes/flutter-driver-migration.md +++ b/src/content/release/breaking-changes/flutter-driver-migration.md @@ -297,4 +297,4 @@ testWidgets('scroll, tap on the last item (Zedoary), verify selected', [Integration testing]: /testing/integration-tests [widget testing]: /testing/overview#widget-tests -[Example Project]: {{site.repo.this}}/tree/{{site.branch}}/examples/integration_test_migration +[Example Project]: {{site.repo.this}}tree/{{site.branch}}/examples/integration_test_migration diff --git a/src/content/release/breaking-changes/flutter-gradle-plugin-apply.md b/src/content/release/breaking-changes/flutter-gradle-plugin-apply.md index e706a90a08..89a9f5d32e 100644 --- a/src/content/release/breaking-changes/flutter-gradle-plugin-apply.md +++ b/src/content/release/breaking-changes/flutter-gradle-plugin-apply.md @@ -266,4 +266,4 @@ latest versions of build files. [legacy, imperative apply script method]: https://docs.gradle.org/8.5/userguide/plugins.html#sec:script_plugins [declarative plugins {} block]: https://docs.gradle.org/8.5/userguide/plugins.html#sec:plugins_block [plugins block]: https://docs.gradle.org/current/userguide/plugins.html#plugins_dsl_limitations -[issue #135392]: https://github.com/flutter/flutter/issues/135392 +[issue #135392]: {{site.repo.flutter}}issues/135392 diff --git a/src/content/release/breaking-changes/flutter-lints-package.md b/src/content/release/breaking-changes/flutter-lints-package.md index 0e93b11230..e774b6e9e3 100644 --- a/src/content/release/breaking-changes/flutter-lints-package.md +++ b/src/content/release/breaking-changes/flutter-lints-package.md @@ -121,13 +121,13 @@ Relevant PRs: * [Add flutter_lints package][] * [Integrate package:flutter_lints into templates][] -[Add flutter_lints package]: {{site.repo.packages}}/pull/343 -[`analysis_options_user.yaml`]: {{site.repo.flutter}}/blob/master/packages/flutter/lib/analysis_options_user.yaml -[Customizing static analysis]: {{site.dart-site}}/guides/language/analysis-options -[dart analyzer]: {{site.dart-site}}/guides/language/analysis-options -[IDE with Dart support]: {{site.dart-site}}/tools#ides-and-editors -[Integrate package:flutter_lints into templates]: {{site.repo.flutter}}/pull/81417 -[Issue 78432 - Update lint set for Flutter applications]: {{site.repo.flutter}}/issues/78432 -[`package:flutter_lints`]: {{site.pub-pkg}}/flutter_lints -[`package:lints`]: {{site.pub}}/packages/lints -[Package dependencies]: {{site.dart-site}}/tools/pub/dependencies +[Add flutter_lints package]: {{site.repo.packages}}pull/343 +[`analysis_options_user.yaml`]: {{site.repo.flutter}}blob/master/packages/flutter/lib/analysis_options_user.yaml +[Customizing static analysis]: {{site.dart-site}}guides/language/analysis-options +[dart analyzer]: {{site.dart-site}}guides/language/analysis-options +[IDE with Dart support]: {{site.dart-site}}tools#ides-and-editors +[Integrate package:flutter_lints into templates]: {{site.repo.flutter}}pull/81417 +[Issue 78432 - Update lint set for Flutter applications]: {{site.repo.flutter}}issues/78432 +[`package:flutter_lints`]: {{site.pub-pkg}}flutter_lints +[`package:lints`]: {{site.pub-pkg}}lints +[Package dependencies]: {{site.dart-site}}tools/pub/dependencies diff --git a/src/content/release/breaking-changes/flutter-memory-allocations.md b/src/content/release/breaking-changes/flutter-memory-allocations.md index 2258f28012..67b930bce5 100644 --- a/src/content/release/breaking-changes/flutter-memory-allocations.md +++ b/src/content/release/breaking-changes/flutter-memory-allocations.md @@ -48,4 +48,4 @@ Relevant issues: * [Rename MemoryAllocations to FlutterMemoryAllocations (Issue 140622)][] -[Rename MemoryAllocations to FlutterMemoryAllocations (Issue 140622)]: {{site.repo.flutter}}/issues/140622 +[Rename MemoryAllocations to FlutterMemoryAllocations (Issue 140622)]: {{site.repo.flutter}}issues/140622 diff --git a/src/content/release/breaking-changes/forgetchild-call-super.md b/src/content/release/breaking-changes/forgetchild-call-super.md index 0395ec4b7b..bd33f9d10e 100644 --- a/src/content/release/breaking-changes/forgetchild-call-super.md +++ b/src/content/release/breaking-changes/forgetchild-call-super.md @@ -87,7 +87,7 @@ Relevant PRs: * [PR 43790: Fix global key error][] -[`Element`]: {{site.api}}/flutter/widgets/Element-class.html -[`forgetChild()`]: {{site.api}}/flutter/widgets/Element/forgetChild.html -[Issue 43780]: {{site.repo.flutter}}/issues/43780 -[PR 43790: Fix global key error]: {{site.repo.flutter}}/pull/46183 +[`Element`]: {{site.api}}flutter/widgets/Element-class.html +[`forgetChild()`]: {{site.api}}flutter/widgets/Element/forgetChild.html +[Issue 43780]: {{site.repo.flutter}}issues/43780 +[PR 43790: Fix global key error]: {{site.repo.flutter}}pull/46183 diff --git a/src/content/release/breaking-changes/form-field-autovalidation-api.md b/src/content/release/breaking-changes/form-field-autovalidation-api.md index 779a48e789..3c598eccf5 100644 --- a/src/content/release/breaking-changes/form-field-autovalidation-api.md +++ b/src/content/release/breaking-changes/form-field-autovalidation-api.md @@ -81,20 +81,20 @@ In stable release: 1.22 API documentation: -* [`AutovalidateMode`]({{site.api}}/flutter/widgets/AutovalidateMode.html) +* [`AutovalidateMode`]({{site.api}}flutter/widgets/AutovalidateMode.html) Relevant issues: -* [Issue 56363]({{site.repo.flutter}}/issues/56363) -* [Issue 18885]({{site.repo.flutter}}/issues/18885) -* [Issue 15404]({{site.repo.flutter}}/issues/15404) -* [Issue 36154]({{site.repo.flutter}}/issues/36154) -* [Issue 48876]({{site.repo.flutter}}/issues/48876) +* [Issue 56363]({{site.repo.flutter}}issues/56363) +* [Issue 18885]({{site.repo.flutter}}issues/18885) +* [Issue 15404]({{site.repo.flutter}}issues/15404) +* [Issue 36154]({{site.repo.flutter}}issues/36154) +* [Issue 48876]({{site.repo.flutter}}issues/48876) Relevant PRs: * [PR 56365: FormField should autovalidate only if its - content was changed]({{site.github}}/flutter/pull/56365) + content was changed]({{site.repo.organization}}pull/56365) * [PR 59766: FormField should autovalidate only if its content was changed - (fixed)]({{site.repo.flutter}}/pull/59766) + (fixed)]({{site.repo.flutter}}pull/59766) diff --git a/src/content/release/breaking-changes/gesture-recognizer-add-allowed-pointer.md b/src/content/release/breaking-changes/gesture-recognizer-add-allowed-pointer.md index 7711f81d31..4070405503 100644 --- a/src/content/release/breaking-changes/gesture-recognizer-add-allowed-pointer.md +++ b/src/content/release/breaking-changes/gesture-recognizer-add-allowed-pointer.md @@ -84,5 +84,5 @@ Relevant PR: * [Fix addAllowedPointer() overrides][] -[`OneSequenceGestureRecognizer`]: {{site.api}}/flutter/gestures/OneSequenceGestureRecognizer-class.html -[Fix addAllowedPointer() overrides]: {{site.repo.flutter}}/pull/82834 +[`OneSequenceGestureRecognizer`]: {{site.api}}flutter/gestures/OneSequenceGestureRecognizer-class.html +[Fix addAllowedPointer() overrides]: {{site.repo.flutter}}pull/82834 diff --git a/src/content/release/breaking-changes/hero-controller-scope.md b/src/content/release/breaking-changes/hero-controller-scope.md index b03fb30a9e..e36e5f1759 100644 --- a/src/content/release/breaking-changes/hero-controller-scope.md +++ b/src/content/release/breaking-changes/hero-controller-scope.md @@ -135,8 +135,8 @@ Relevant PR: * [Clean up hero controller scope][] -[Clean up hero controller scope]: {{site.repo.flutter}}/pull/60655 -[`Navigator`]: {{site.api}}/flutter/widgets/Navigator-class.html -[`HeroController`]: {{site.api}}/flutter/widgets/HeroController-class.html -[`HeroControllerScope`]: {{site.api}}/flutter/widgets/HeroControllerScope-class.html -[Issue 45938]: {{site.repo.flutter}}/issues/45938 +[Clean up hero controller scope]: {{site.repo.flutter}}pull/60655 +[`Navigator`]: {{site.api}}flutter/widgets/Navigator-class.html +[`HeroController`]: {{site.api}}flutter/widgets/HeroController-class.html +[`HeroControllerScope`]: {{site.api}}flutter/widgets/HeroControllerScope-class.html +[Issue 45938]: {{site.repo.flutter}}issues/45938 diff --git a/src/content/release/breaking-changes/ignoringsemantics-migration.md b/src/content/release/breaking-changes/ignoringsemantics-migration.md index 42b89c8b24..d637d82477 100644 --- a/src/content/release/breaking-changes/ignoringsemantics-migration.md +++ b/src/content/release/breaking-changes/ignoringsemantics-migration.md @@ -149,10 +149,10 @@ Relevant PRs: * [PR 120619][]: Fixes IgnorePointer and AbsorbPointer to only block user interactions in a11y. -[PR 120619]: {{site.repo.flutter}}/pull/120619 -[`IgnorePointer`]: {{site.api}}/flutter/widgets/IgnorePointer-class.html -[`AbsorbPointer`]: {{site.api}}/flutter/widgets/AbsorbPointer-class.html -[`SliverIgnorePointer`]: {{site.api}}/flutter/widgets/SliverIgnorePointer-class.html -[`RenderSliverIgnorePointer`]: {{site.api}}/flutter/rendering/RenderSliverIgnorePointer-class.html -[`RenderIgnorePointer`]: {{site.api}}/flutter/rendering/RenderIgnorePointer-class.html -[`RenderAbsorbPointer`]: {{site.api}}/flutter/rendering/RenderAbsorbPointer-class.html +[PR 120619]: {{site.repo.flutter}}pull/120619 +[`IgnorePointer`]: {{site.api}}flutter/widgets/IgnorePointer-class.html +[`AbsorbPointer`]: {{site.api}}flutter/widgets/AbsorbPointer-class.html +[`SliverIgnorePointer`]: {{site.api}}flutter/widgets/SliverIgnorePointer-class.html +[`RenderSliverIgnorePointer`]: {{site.api}}flutter/rendering/RenderSliverIgnorePointer-class.html +[`RenderIgnorePointer`]: {{site.api}}flutter/rendering/RenderIgnorePointer-class.html +[`RenderAbsorbPointer`]: {{site.api}}flutter/rendering/RenderAbsorbPointer-class.html diff --git a/src/content/release/breaking-changes/image-cache-and-provider.md b/src/content/release/breaking-changes/image-cache-and-provider.md index 8cca7a80f0..f3186632d0 100644 --- a/src/content/release/breaking-changes/image-cache-and-provider.md +++ b/src/content/release/breaking-changes/image-cache-and-provider.md @@ -139,11 +139,11 @@ Relevant PRs: * [Defer image decoding when scrolling fast #49389][] -[`ImageCache`]: {{site.api}}/flutter/painting/ImageCache-class.html -[`ImageProvider`]: {{site.api}}/flutter/painting/ImageProvider-class.html -[`ScrollAwareImageProvider`]: {{site.api}}/flutter/widgets/ScrollAwareImageProvider-class.html -[Issue #32143]: {{site.repo.flutter}}/issues/32143 -[Issue #44510]: {{site.repo.flutter}}/issues/44510 -[Issue #48305]: {{site.repo.flutter}}/issues/48305 -[Issue #48775]: {{site.repo.flutter}}/issues/48775 -[Defer image decoding when scrolling fast #49389]: {{site.repo.flutter}}/pull/49389 +[`ImageCache`]: {{site.api}}flutter/painting/ImageCache-class.html +[`ImageProvider`]: {{site.api}}flutter/painting/ImageProvider-class.html +[`ScrollAwareImageProvider`]: {{site.api}}flutter/widgets/ScrollAwareImageProvider-class.html +[Issue #32143]: {{site.repo.flutter}}issues/32143 +[Issue #44510]: {{site.repo.flutter}}issues/44510 +[Issue #48305]: {{site.repo.flutter}}issues/48305 +[Issue #48775]: {{site.repo.flutter}}issues/48775 +[Defer image decoding when scrolling fast #49389]: {{site.repo.flutter}}pull/49389 diff --git a/src/content/release/breaking-changes/image-provider-load-buffer.md b/src/content/release/breaking-changes/image-provider-load-buffer.md index 66b00f938c..5b8a7e5282 100644 --- a/src/content/release/breaking-changes/image-provider-load-buffer.md +++ b/src/content/release/breaking-changes/image-provider-load-buffer.md @@ -123,9 +123,9 @@ In stable release: 3.3.0 API documentation: -* [`ImmutableBuffer`]({{site.api}}/flutter/dart-ui/ImmutableBuffer-class.html) -* [`ImageProvider`]({{site.api}}/flutter/painting/ImageProvider-class.html) +* [`ImmutableBuffer`]({{site.api}}flutter/dart-ui/ImmutableBuffer-class.html) +* [`ImageProvider`]({{site.api}}flutter/painting/ImageProvider-class.html) Relevant PR: -* [Use immutable buffer for loading asset images]({{site.repo.flutter}}/pull/103496) +* [Use immutable buffer for loading asset images]({{site.repo.flutter}}pull/103496) diff --git a/src/content/release/breaking-changes/imagecache-large-images.md b/src/content/release/breaking-changes/imagecache-large-images.md index 1c83e93fb5..e3c77d9010 100644 --- a/src/content/release/breaking-changes/imagecache-large-images.md +++ b/src/content/release/breaking-changes/imagecache-large-images.md @@ -93,8 +93,8 @@ Other: * [`ImageCache` source][] -[Stopped increasing the cache size to accommodate large images]: {{site.repo.flutter}}/pull/47387 -[`ImageCache`]: {{site.api}}/flutter/painting/ImageCache-class.html -[`image_cache.dart`]: {{site.repo.flutter}}/blob/72a3d914ee5db0033332711224e728b8a5281d89/packages/flutter/lib/src/painting/image_cache.dart#L34 -[`ImageCache` source]: {{site.repo.flutter}}/blob/master/packages/flutter/lib/src/painting/image_cache.dart -[Issue 45643]: {{site.repo.flutter}}/issues/45643 +[Stopped increasing the cache size to accommodate large images]: {{site.repo.flutter}}pull/47387 +[`ImageCache`]: {{site.api}}flutter/painting/ImageCache-class.html +[`image_cache.dart`]: {{site.repo.flutter}}blob/72a3d914ee5db0033332711224e728b8a5281d89/packages/flutter/lib/src/painting/image_cache.dart#L34 +[`ImageCache` source]: {{site.repo.flutter}}blob/master/packages/flutter/lib/src/painting/image_cache.dart +[Issue 45643]: {{site.repo.flutter}}issues/45643 diff --git a/src/content/release/breaking-changes/index.md b/src/content/release/breaking-changes/index.md index 04f2e4d1ca..98c5f90150 100644 --- a/src/content/release/breaking-changes/index.md +++ b/src/content/release/breaking-changes/index.md @@ -48,10 +48,10 @@ release, and listed in alphabetical order: 它们按发行版本分类并按字母顺序排列。 [breaking change policy]: /release/compatibility-policy -[Flutter announce]: {{site.groups}}/forum/#!forum/flutter-announce -[Dart announce]: {{site.groups}}/a/dartlang.org/g/announce +[Flutter announce]: {{site.groups}}forum/#!forum/flutter-announce +[Dart announce]: {{site.groups}}a/dartlang.org/g/announce [`dart fix`]: /tools/flutter-fix -[test registry]: {{site.github}}/flutter/tests +[test registry]: {{site.repo.organization}}tests ### Not yet released to stable @@ -166,7 +166,7 @@ release, and listed in alphabetical order: * [Require one data variant for `ClipboardData` constructor][] * ["Zone mismatch" message][] -[Dart 3 changes in Flutter v3.10 and later]: {{site.dart-site}}/resources/dart-3-migration +[Dart 3 changes in Flutter v3.10 and later]: {{site.dart-site}}resources/dart-3-migration [Deprecated API removed after v3.7]: /release/breaking-changes/3-7-deprecations [Insert Content Text Input Client]: /release/breaking-changes/insert-content-text-input-client [Deprecated the window singleton]: /release/breaking-changes/window-singleton diff --git a/src/content/release/breaking-changes/insert-content-text-input-client.md b/src/content/release/breaking-changes/insert-content-text-input-client.md index 0ebf1b0549..515f0f3944 100644 --- a/src/content/release/breaking-changes/insert-content-text-input-client.md +++ b/src/content/release/breaking-changes/insert-content-text-input-client.md @@ -76,7 +76,7 @@ To learn how to do this, check out the [insertContent implementation][]. To prevent breaking changes to an interface, use `with TextInputClient` rather than `implements TextInputClient`. -[insertContent implementation]: {{site.api}}/flutter/services/TextInputClient/insertContent.html +[insertContent implementation]: {{site.api}}flutter/services/TextInputClient/insertContent.html ## Timeline @@ -87,13 +87,13 @@ In stable release: 3.10.0 API documentation: -* [`TextInputClient`]({{site.api}}/flutter/services/TextInputClient-class.html) +* [`TextInputClient`]({{site.api}}flutter/services/TextInputClient-class.html) Relevant issue: -* [Issue 20796]({{site.repo.flutter}}/issues/20796) +* [Issue 20796]({{site.repo.flutter}}issues/20796) Relevant PRs: -* [24224: Support Image Insertion on Android (engine)]({{site.repo.engine}}/pull/35619) -* [97437: Support Image Insertion on Android]({{site.repo.flutter}}/pull/110052) +* [24224: Support Image Insertion on Android (engine)]({{site.repo.engine}}pull/35619) +* [97437: Support Image Insertion on Android]({{site.repo.flutter}}pull/110052) diff --git a/src/content/release/breaking-changes/ios-flutterviewcontroller-splashscreenview-nullable.md b/src/content/release/breaking-changes/ios-flutterviewcontroller-splashscreenview-nullable.md index 5080964c84..f52a6ce5ba 100644 --- a/src/content/release/breaking-changes/ios-flutterviewcontroller-splashscreenview-nullable.md +++ b/src/content/release/breaking-changes/ios-flutterviewcontroller-splashscreenview-nullable.md @@ -79,5 +79,5 @@ Relevant PR: * [Make splashScreenView of FlutterViewController nullable][] -[Make splashScreenView of FlutterViewController nullable]: {{site.repo.engine}}/pull/34743 -[PR #34743]: {{site.repo.engine}}/pull/34743 +[Make splashScreenView of FlutterViewController nullable]: {{site.repo.engine}}pull/34743 +[PR #34743]: {{site.repo.engine}}pull/34743 diff --git a/src/content/release/breaking-changes/key-event-migration.md b/src/content/release/breaking-changes/key-event-migration.md index 15df8105fa..8501f60705 100644 --- a/src/content/release/breaking-changes/key-event-migration.md +++ b/src/content/release/breaking-changes/key-event-migration.md @@ -248,58 +248,58 @@ Relevant PRs: * [Deprecate RawKeyEvent, et al. and exempt uses in the framework.][] -[`debugKeyEventSimulatorTransitModeOverride`]: {{site.api}}/flutter/services/debugKeyEventSimulatorTransitModeOverride-class.html -[`Focus.onKey`]: {{site.api}}/flutter/services/Focus/onKey.html -[`FocusNode.attach`]: {{site.api}}/flutter/services/FocusNode/attach.html -[`FocusNode.onKey`]: {{site.api}}/flutter/services/FocusNode/onKey.html -[`FocusOnKeyCallback`]: {{site.api}}/flutter/services/FocusOnKeyCallback-class.html -[`FocusScope.onKey`]: {{site.api}}/flutter/services/FocusScope/onKey.html -[`FocusScopeNode.onKey`]: {{site.api}}/flutter/services/FocusScopeNode/onKey.html -[`GLFWKeyHelper`]: {{site.api}}/flutter/services/GLFWKeyHelper-class.html -[`GtkKeyHelper`]: {{site.api}}/flutter/services/GtkKeyHelper-class.html -[`KeyboardSide`]: {{site.api}}/flutter/services/KeyboardSide-class.html -[`KeyDataTransitMode`]: {{site.api}}/flutter/services/KeyDataTransitMode-class.html -[`KeyEventManager`]: {{site.api}}/flutter/services/KeyEventManager-class.html -[`KeyHelper`]: {{site.api}}/flutter/services/KeyHelper-class.html -[`KeyMessage`]: {{site.api}}/flutter/services/KeyMessage-class.html -[`KeyMessageHandler`]: {{site.api}}/flutter/services/KeyMessageHandler-class.html -[`KeySimulatorTransitModeVariant`]: {{site.api}}/flutter/services/KeySimulatorTransitModeVariant-class.html -[`ModifierKey`]: {{site.api}}/flutter/services/ModifierKey-class.html -[`RawKeyboard`]: {{site.api}}/flutter/services/RawKeyboard-class.html -[`RawKeyboardListener`]: {{site.api}}/flutter/services/RawKeyboardListener-class.html -[`RawKeyDownEvent`]: {{site.api}}/flutter/services/RawKeyDownEvent-class.html -[`RawKeyEvent`]: {{site.api}}/flutter/services/RawKeyEvent-class.html -[`RawKeyEventData`]: {{site.api}}/flutter/services/RawKeyEventData-class.html -[`RawKeyEventDataAndroid`]: {{site.api}}/flutter/services/RawKeyEventDataAndroid-class.html -[`RawKeyEventDataFuchsia`]: {{site.api}}/flutter/services/RawKeyEventDataFuchsia-class.html -[`RawKeyEventDataIos`]: {{site.api}}/flutter/services/RawKeyEventDataIos-class.html -[`RawKeyEventDataLinux`]: {{site.api}}/flutter/services/RawKeyEventDataLinux-class.html -[`RawKeyEventDataMacOs`]: {{site.api}}/flutter/services/RawKeyEventDataMacOs-class.html -[`RawKeyEventDataWeb`]: {{site.api}}/flutter/services/RawKeyEventDataWeb-class.html -[`RawKeyEventDataWindows`]: {{site.api}}/flutter/services/RawKeyEventDataWindows-class.html -[`RawKeyEventHandler`]: {{site.api}}/flutter/services/RawKeyEventHandler-class.html -[`RawKeyUpEvent`]: {{site.api}}/flutter/services/RawKeyUpEvent-class.html -[`ServicesBinding.keyEventManager`]: {{site.api}}/flutter/services/ServicesBinding/keyEventManager.html -[`Focus.onKeyEvent`]: {{site.api}}/flutter/services/Focus/onKeyEvent.html -[`FocusNode.onKeyEvent`]: {{site.api}}/flutter/services/FocusNode/onKeyEvent.html -[`FocusOnKeyEventCallback`]: {{site.api}}/flutter/services/FocusOnKeyEventCallback-class.html -[`FocusScope.onKeyEvent`]: {{site.api}}/flutter/services/FocusScope/onKeyEvent.html -[`FocusScopeNode.onKeyEvent`]: {{site.api}}/flutter/services/FocusScopeNode/onKeyEvent.html -[`HardwareKeyboard`]: {{site.api}}/flutter/services/HardwareKeyboard-class.html -[`HardwareKeyboard.isLogicalKeyPressed`]: {{site.api}}/flutter/services/HardwareKeyboard/isLogicalKeyPressed.html -[`KeyboardListener`]: {{site.api}}/flutter/services/KeyboardListener-class.html -[`KeyDownEvent`]: {{site.api}}/flutter/services/KeyDownEvent-class.html -[`KeyRepeatEvent`]: {{site.api}}/flutter/services/KeyRepeatEvent-class.html -[`KeyEvent`]: {{site.api}}/flutter/services/KeyEvent-class.html -[`KeyEventHandler`]: {{site.api}}/flutter/services/KeyEventHandler-class.html -[`KeyUpEvent`]: {{site.api}}/flutter/services/KeyUpEvent-class.html -[`RawKeyEvent.isKeyPressed`]: {{site.api}}/flutter/services/RawKeyEvent/isKeyPressed.html -[`RawKeyEvent.isControlPressed`]: {{site.api}}/flutter/services/RawKeyEvent/isControlPressed.html -[`RawKeyEvent.isShiftPressed`]: {{site.api}}/flutter/services/RawKeyEvent/isShiftPressed.html -[`RawKeyEvent.isAltPressed`]: {{site.api}}/flutter/services/RawKeyEvent/isAltPressed.html -[`RawKeyEvent.isMetaPressed`]: {{site.api}}/flutter/services/RawKeyEvent/isMetaPressed.html -[`RawKeyEvent.repeat`]: {{site.api}}/flutter/services/RawKeyEvent/repeat.html -[`RawKeyEventDataAndroid.eventSource`]: {{site.api}}/flutter/services/RawKeyEventDataAndroid/eventSource.html -[`KeyEvent.deviceType`]: {{site.api}}/flutter/services/KeyEvent/deviceType.html -[`RawKeyEvent` and `RawKeyboard`, et al should be deprecated and removed (Issue 136419)]: {{site.repo.flutter}}/issues/136419 -[Deprecate RawKeyEvent, et al. and exempt uses in the framework.]: {{site.repo.flutter}}/pull/136677 +[`debugKeyEventSimulatorTransitModeOverride`]: {{site.api}}flutter/services/debugKeyEventSimulatorTransitModeOverride-class.html +[`Focus.onKey`]: {{site.api}}flutter/services/Focus/onKey.html +[`FocusNode.attach`]: {{site.api}}flutter/services/FocusNode/attach.html +[`FocusNode.onKey`]: {{site.api}}flutter/services/FocusNode/onKey.html +[`FocusOnKeyCallback`]: {{site.api}}flutter/services/FocusOnKeyCallback-class.html +[`FocusScope.onKey`]: {{site.api}}flutter/services/FocusScope/onKey.html +[`FocusScopeNode.onKey`]: {{site.api}}flutter/services/FocusScopeNode/onKey.html +[`GLFWKeyHelper`]: {{site.api}}flutter/services/GLFWKeyHelper-class.html +[`GtkKeyHelper`]: {{site.api}}flutter/services/GtkKeyHelper-class.html +[`KeyboardSide`]: {{site.api}}flutter/services/KeyboardSide-class.html +[`KeyDataTransitMode`]: {{site.api}}flutter/services/KeyDataTransitMode-class.html +[`KeyEventManager`]: {{site.api}}flutter/services/KeyEventManager-class.html +[`KeyHelper`]: {{site.api}}flutter/services/KeyHelper-class.html +[`KeyMessage`]: {{site.api}}flutter/services/KeyMessage-class.html +[`KeyMessageHandler`]: {{site.api}}flutter/services/KeyMessageHandler-class.html +[`KeySimulatorTransitModeVariant`]: {{site.api}}flutter/services/KeySimulatorTransitModeVariant-class.html +[`ModifierKey`]: {{site.api}}flutter/services/ModifierKey-class.html +[`RawKeyboard`]: {{site.api}}flutter/services/RawKeyboard-class.html +[`RawKeyboardListener`]: {{site.api}}flutter/services/RawKeyboardListener-class.html +[`RawKeyDownEvent`]: {{site.api}}flutter/services/RawKeyDownEvent-class.html +[`RawKeyEvent`]: {{site.api}}flutter/services/RawKeyEvent-class.html +[`RawKeyEventData`]: {{site.api}}flutter/services/RawKeyEventData-class.html +[`RawKeyEventDataAndroid`]: {{site.api}}flutter/services/RawKeyEventDataAndroid-class.html +[`RawKeyEventDataFuchsia`]: {{site.api}}flutter/services/RawKeyEventDataFuchsia-class.html +[`RawKeyEventDataIos`]: {{site.api}}flutter/services/RawKeyEventDataIos-class.html +[`RawKeyEventDataLinux`]: {{site.api}}flutter/services/RawKeyEventDataLinux-class.html +[`RawKeyEventDataMacOs`]: {{site.api}}flutter/services/RawKeyEventDataMacOs-class.html +[`RawKeyEventDataWeb`]: {{site.api}}flutter/services/RawKeyEventDataWeb-class.html +[`RawKeyEventDataWindows`]: {{site.api}}flutter/services/RawKeyEventDataWindows-class.html +[`RawKeyEventHandler`]: {{site.api}}flutter/services/RawKeyEventHandler-class.html +[`RawKeyUpEvent`]: {{site.api}}flutter/services/RawKeyUpEvent-class.html +[`ServicesBinding.keyEventManager`]: {{site.api}}flutter/services/ServicesBinding/keyEventManager.html +[`Focus.onKeyEvent`]: {{site.api}}flutter/services/Focus/onKeyEvent.html +[`FocusNode.onKeyEvent`]: {{site.api}}flutter/services/FocusNode/onKeyEvent.html +[`FocusOnKeyEventCallback`]: {{site.api}}flutter/services/FocusOnKeyEventCallback-class.html +[`FocusScope.onKeyEvent`]: {{site.api}}flutter/services/FocusScope/onKeyEvent.html +[`FocusScopeNode.onKeyEvent`]: {{site.api}}flutter/services/FocusScopeNode/onKeyEvent.html +[`HardwareKeyboard`]: {{site.api}}flutter/services/HardwareKeyboard-class.html +[`HardwareKeyboard.isLogicalKeyPressed`]: {{site.api}}flutter/services/HardwareKeyboard/isLogicalKeyPressed.html +[`KeyboardListener`]: {{site.api}}flutter/services/KeyboardListener-class.html +[`KeyDownEvent`]: {{site.api}}flutter/services/KeyDownEvent-class.html +[`KeyRepeatEvent`]: {{site.api}}flutter/services/KeyRepeatEvent-class.html +[`KeyEvent`]: {{site.api}}flutter/services/KeyEvent-class.html +[`KeyEventHandler`]: {{site.api}}flutter/services/KeyEventHandler-class.html +[`KeyUpEvent`]: {{site.api}}flutter/services/KeyUpEvent-class.html +[`RawKeyEvent.isKeyPressed`]: {{site.api}}flutter/services/RawKeyEvent/isKeyPressed.html +[`RawKeyEvent.isControlPressed`]: {{site.api}}flutter/services/RawKeyEvent/isControlPressed.html +[`RawKeyEvent.isShiftPressed`]: {{site.api}}flutter/services/RawKeyEvent/isShiftPressed.html +[`RawKeyEvent.isAltPressed`]: {{site.api}}flutter/services/RawKeyEvent/isAltPressed.html +[`RawKeyEvent.isMetaPressed`]: {{site.api}}flutter/services/RawKeyEvent/isMetaPressed.html +[`RawKeyEvent.repeat`]: {{site.api}}flutter/services/RawKeyEvent/repeat.html +[`RawKeyEventDataAndroid.eventSource`]: {{site.api}}flutter/services/RawKeyEventDataAndroid/eventSource.html +[`KeyEvent.deviceType`]: {{site.api}}flutter/services/KeyEvent/deviceType.html +[`RawKeyEvent` and `RawKeyboard`, et al should be deprecated and removed (Issue 136419)]: {{site.repo.flutter}}issues/136419 +[Deprecate RawKeyEvent, et al. and exempt uses in the framework.]: {{site.repo.flutter}}pull/136677 diff --git a/src/content/release/breaking-changes/kotlin-version.md b/src/content/release/breaking-changes/kotlin-version.md index 3877412334..f16656d6d1 100644 --- a/src/content/release/breaking-changes/kotlin-version.md +++ b/src/content/release/breaking-changes/kotlin-version.md @@ -57,6 +57,6 @@ Relevant PR: * [PR 29585: Display Features support][] -[PR 29585: Display Features support]: {{site.repo.engine}}/pull/29585 +[PR 29585: Display Features support]: {{site.repo.engine}}pull/29585 -[1]: {{site.android-dev}}/guide/topics/large-screens/learn-about-foldables +[1]: {{site.android-dev}}guide/topics/large-screens/learn-about-foldables diff --git a/src/content/release/breaking-changes/layout-builder-optimization.md b/src/content/release/breaking-changes/layout-builder-optimization.md index 993959f251..bd14a7144d 100644 --- a/src/content/release/breaking-changes/layout-builder-optimization.md +++ b/src/content/release/breaking-changes/layout-builder-optimization.md @@ -298,10 +298,10 @@ Relevant PR: * [LayoutBuilder: skip calling builder when constraints are the same][6] [1]: /go/layout-builder-optimization -[2]: {{site.api}}/flutter/widgets/LayoutBuilder-class.html -[3]: {{site.api}}/flutter/widgets/SliverLayoutBuilder-class.html -[4]: {{site.api}}/flutter/widgets/LayoutBuilder/builder.html -[5]: {{site.api}}/flutter/widgets/OrientationBuilder-class.html -[6]: {{site.repo.flutter}}/pull/55414 -[7]: {{site.api}}/flutter/animation/Animation/addListener.html -[8]: {{site.repo.flutter}}/issues/6469 +[2]: {{site.api}}flutter/widgets/LayoutBuilder-class.html +[3]: {{site.api}}flutter/widgets/SliverLayoutBuilder-class.html +[4]: {{site.api}}flutter/widgets/LayoutBuilder/builder.html +[5]: {{site.api}}flutter/widgets/OrientationBuilder-class.html +[6]: {{site.repo.flutter}}pull/55414 +[7]: {{site.api}}flutter/animation/Animation/addListener.html +[8]: {{site.repo.flutter}}issues/6469 diff --git a/src/content/release/breaking-changes/material-3-default.md b/src/content/release/breaking-changes/material-3-default.md index 5a7b5b74a8..0553405f46 100644 --- a/src/content/release/breaking-changes/material-3-default.md +++ b/src/content/release/breaking-changes/material-3-default.md @@ -33,10 +33,10 @@ the word "legacy" and will eventually be deprecated and removed. Check out the [Material 3 gallery][] to test out all the new components and compare them with Material 2. -[`ThemeData.colorScheme`]: {{site.api}}/flutter/material/ThemeData/colorScheme.html -[`ThemeData.textTheme`]: {{site.api}}/flutter/material/ThemeData/textTheme.html -[`ThemeData.segmentedButtonTheme`]: {{site.api}}/flutter/material/ThemeData/segmentedButtonTheme.html -[`ThemeData.snackBarTheme`]: {{site.api}}/flutter/material/ThemeData/snackBarTheme.html +[`ThemeData.colorScheme`]: {{site.api}}flutter/material/ThemeData/colorScheme.html +[`ThemeData.textTheme`]: {{site.api}}flutter/material/ThemeData/textTheme.html +[`ThemeData.segmentedButtonTheme`]: {{site.api}}flutter/material/ThemeData/segmentedButtonTheme.html +[`ThemeData.snackBarTheme`]: {{site.api}}flutter/material/ThemeData/snackBarTheme.html ## Migration guide @@ -59,7 +59,7 @@ To fix this, manually migrate to the new widgets, such as [`NavigationBar`][]. For more details, check out the [Material 3 umbrella issue][] on GitHub. -[`NavigationBar`]: {{site.api}}/flutter/material/NavigationBar-class.html +[`NavigationBar`]: {{site.api}}flutter/material/NavigationBar-class.html ## Timeline @@ -88,10 +88,10 @@ Relevant PRs: [Material 3 gallery]: https://flutter.github.io/samples/web/material_3_demo/ -[Material 3 umbrella issue]: {{site.repo.flutter}}/issues/91605 +[Material 3 umbrella issue]: {{site.repo.flutter}}issues/91605 [Material Design for Flutter]: /ui/design/material -[`ThemeData.useMaterial3`]: {{site.api}}/flutter/material/ThemeData/useMaterial3.html -[Add support for M3 motion]: {{site.repo.flutter}}/issues/129942 -[Change the default for `ThemeData.useMaterial3` to true]: {{site.repo.flutter}}/pull/129724 -[Updated `ThemeData.useMaterial3` API doc, default is true]: {{site.repo.flutter}}/pull/130764 +[`ThemeData.useMaterial3`]: {{site.api}}flutter/material/ThemeData/useMaterial3.html +[Add support for M3 motion]: {{site.repo.flutter}}issues/129942 +[Change the default for `ThemeData.useMaterial3` to true]: {{site.repo.flutter}}pull/129724 +[Updated `ThemeData.useMaterial3` API doc, default is true]: {{site.repo.flutter}}pull/130764 diff --git a/src/content/release/breaking-changes/material-3-migration.md b/src/content/release/breaking-changes/material-3-migration.md index 4d9a2f02c1..4586bb0a9e 100644 --- a/src/content/release/breaking-changes/material-3-migration.md +++ b/src/content/release/breaking-changes/material-3-migration.md @@ -57,7 +57,7 @@ To generate a content-based dynamic color scheme, use the `ColorScheme.fromImageProvider` static method. For an example of generating a color scheme, check out the [`ColorScheme` from a network image][] sample. -[`ColorScheme` from a network image]: {{site.api}}/flutter/material/ColorScheme/fromImageProvider.html +[`ColorScheme` from a network image]: {{site.api}}flutter/material/ColorScheme/fromImageProvider.html Changes to Flutter Material 3 include a new background color. `ColorScheme.surfaceTint` indicates an elevated widget. @@ -196,7 +196,7 @@ ConstrainedBox( ), ``` -[`TextTheme`]: {{site.api}}/flutter/material/TextTheme-class.html +[`TextTheme`]: {{site.api}}flutter/material/TextTheme-class.html ### Components @@ -427,9 +427,9 @@ SegmentedButton( Check out the complete sample on [migrating from `ToggleButtons` to `SegmentedButton`][]. -[migrating from `BottomNavigationBar` to `NavigationBar`]: {{site.api}}/flutter/material/BottomNavigationBar-class.html#material.BottomNavigationBar.2 -[migrating from `Drawer` to `NavigationDrawer`]: {{site.api}}/flutter/material/Drawer-class.html#material.Drawer.2 -[migrating from `ToggleButtons` to `SegmentedButton`]: {{site.api}}/flutter/material/ToggleButtons-class.html#material.ToggleButtons.1 +[migrating from `BottomNavigationBar` to `NavigationBar`]: {{site.api}}flutter/material/BottomNavigationBar-class.html#material.BottomNavigationBar.2 +[migrating from `Drawer` to `NavigationDrawer`]: {{site.api}}flutter/material/Drawer-class.html#material.Drawer.2 +[migrating from `ToggleButtons` to `SegmentedButton`]: {{site.api}}flutter/material/ToggleButtons-class.html#material.ToggleButtons.1 #### New components @@ -463,27 +463,27 @@ Check out the complete sample on typically contains a title, an action button, and a close button at the top. -[`BottomNavigationBar`]: {{site.api}}/flutter/material/BottomNavigationBar-class.html -[`NavigationBar`]: {{site.api}}/flutter/material/NavigationBar-class.html -[`Drawer`]: {{site.api}}/flutter/material/Drawer-class.html -[`NavigationDrawer`]: {{site.api}}/flutter/material/NavigationDrawer-class.html -[`TabBar`]: {{site.api}}/flutter/material/TabBar-class.html -[`TabBar.secondary`]: {{site.api}}/flutter/material/TabBar/TabBar.secondary.html -[`TabBar.tabAlignment`]: {{site.api}}/flutter/material/TabBar/tabAlignment.html -[`SegmentedButton`]: {{site.api}}/flutter/material/SegmentedButton-class.html -[`ToggleButtons`]: {{site.api}}/flutter/material/ToggleButtons-class.html -[`MenuBar`]: {{site.api}}/flutter/material/MenuBar-class.html -[`MenuAnchor`]: {{site.api}}/flutter/material/MenuAnchor-class.html -[`DropdownMenu`]: {{site.api}}/flutter/material/DropdownMenu-class.html -[`SearchBar`]: {{site.api}}/flutter/material/SearchBar-class.html -[`SearchAnchor`]: {{site.api}}/flutter/material/SearchAnchor-class.html -[`Badge`]: {{site.api}}/flutter/material/Badge-class.html -[`FilledButton`]: {{site.api}}/flutter/material/FilledButton-class.html -[`FilledButton.tonal`]: {{site.api}}/flutter/material/FilledButton/FilledButton.tonal.html -[`FilterChip.elevated`]: {{site.api}}/flutter/material/FilterChip/FilterChip.elevated.html -[`ChoiceChip.elevated`]: {{site.api}}/flutter/material/ChoiceChip/ChoiceChip.elevated.html -[`ActionChip.elevated`]: {{site.api}}/flutter/material/ActionChip/ActionChip.elevated.html -[`Dialog.fullscreen`]: {{site.api}}/flutter/material/Dialog/Dialog.fullscreen.html +[`BottomNavigationBar`]: {{site.api}}flutter/material/BottomNavigationBar-class.html +[`NavigationBar`]: {{site.api}}flutter/material/NavigationBar-class.html +[`Drawer`]: {{site.api}}flutter/material/Drawer-class.html +[`NavigationDrawer`]: {{site.api}}flutter/material/NavigationDrawer-class.html +[`TabBar`]: {{site.api}}flutter/material/TabBar-class.html +[`TabBar.secondary`]: {{site.api}}flutter/material/TabBar/TabBar.secondary.html +[`TabBar.tabAlignment`]: {{site.api}}flutter/material/TabBar/tabAlignment.html +[`SegmentedButton`]: {{site.api}}flutter/material/SegmentedButton-class.html +[`ToggleButtons`]: {{site.api}}flutter/material/ToggleButtons-class.html +[`MenuBar`]: {{site.api}}flutter/material/MenuBar-class.html +[`MenuAnchor`]: {{site.api}}flutter/material/MenuAnchor-class.html +[`DropdownMenu`]: {{site.api}}flutter/material/DropdownMenu-class.html +[`SearchBar`]: {{site.api}}flutter/material/SearchBar-class.html +[`SearchAnchor`]: {{site.api}}flutter/material/SearchAnchor-class.html +[`Badge`]: {{site.api}}flutter/material/Badge-class.html +[`FilledButton`]: {{site.api}}flutter/material/FilledButton-class.html +[`FilledButton.tonal`]: {{site.api}}flutter/material/FilledButton/FilledButton.tonal.html +[`FilterChip.elevated`]: {{site.api}}flutter/material/FilterChip/FilterChip.elevated.html +[`ChoiceChip.elevated`]: {{site.api}}flutter/material/ChoiceChip/ChoiceChip.elevated.html +[`ActionChip.elevated`]: {{site.api}}flutter/material/ActionChip/ActionChip.elevated.html +[`Dialog.fullscreen`]: {{site.api}}flutter/material/Dialog/Dialog.fullscreen.html ## Timeline @@ -509,8 +509,8 @@ Relevant PRs: * [Updated `ThemeData.useMaterial3` API doc, default is true][] -[Material 3 umbrella issue]: {{site.repo.flutter}}/issues/91605 +[Material 3 umbrella issue]: {{site.repo.flutter}}issues/91605 [Material Design for Flutter]: /ui/design/material -[`ThemeData.useMaterial3`]: {{site.api}}/flutter/material/ThemeData/useMaterial3.html -[Change the default for `ThemeData.useMaterial3` to true]: {{site.repo.flutter}}/pull/129724 -[Updated `ThemeData.useMaterial3` API doc, default is true]: {{site.repo.flutter}}/pull/130764 +[`ThemeData.useMaterial3`]: {{site.api}}flutter/material/ThemeData/useMaterial3.html +[Change the default for `ThemeData.useMaterial3` to true]: {{site.repo.flutter}}pull/129724 +[Updated `ThemeData.useMaterial3` API doc, default is true]: {{site.repo.flutter}}pull/130764 diff --git a/src/content/release/breaking-changes/material-chip-button-semantics.md b/src/content/release/breaking-changes/material-chip-button-semantics.md index d62a8954a8..94e354fcae 100644 --- a/src/content/release/breaking-changes/material-chip-button-semantics.md +++ b/src/content/release/breaking-changes/material-chip-button-semantics.md @@ -156,19 +156,19 @@ Relevant PRs: * [PR 61048][]: Re-land "Tweaking Material Chip a11y semantics to match buttons (#60141) -[`ActionChip`]: {{site.api}}/flutter/material/ActionChip-class.html -[`Chip`]: {{site.api}}/flutter/material/Chip-class.html -[`ChoiceChip`]: {{site.api}}/flutter/material/ChoiceChip-class.html -[`FilterChip`]: {{site.api}}/flutter/material/FilterChip-class.html -[`InputChip`]: {{site.api}}/flutter/material/InputChip-class.html -[Material Buttons]: {{site.material}}/components/all-buttons -[Material Chips]: {{site.material}}/components/chips -[`Semantics`]: {{site.api}}/flutter/widgets/Semantics-class.html -[`SemanticsProperties.button`]: {{site.api}}/flutter/semantics/SemanticsProperties/button.html -[`SemanticsProperties.enabled`]: {{site.api}}/flutter/semantics/SemanticsProperties/enabled.html - -[Issue 58010]: {{site.repo.flutter}}/issues/58010 - -[PR 60141]: {{site.repo.flutter}}/pull/60141 -[PR 60645]: {{site.repo.flutter}}/pull/60645 -[PR 61048]: {{site.repo.flutter}}/pull/61048 +[`ActionChip`]: {{site.api}}flutter/material/ActionChip-class.html +[`Chip`]: {{site.api}}flutter/material/Chip-class.html +[`ChoiceChip`]: {{site.api}}flutter/material/ChoiceChip-class.html +[`FilterChip`]: {{site.api}}flutter/material/FilterChip-class.html +[`InputChip`]: {{site.api}}flutter/material/InputChip-class.html +[Material Buttons]: {{site.material}}components/all-buttons +[Material Chips]: {{site.material}}components/chips +[`Semantics`]: {{site.api}}flutter/widgets/Semantics-class.html +[`SemanticsProperties.button`]: {{site.api}}flutter/semantics/SemanticsProperties/button.html +[`SemanticsProperties.enabled`]: {{site.api}}flutter/semantics/SemanticsProperties/enabled.html + +[Issue 58010]: {{site.repo.flutter}}issues/58010 + +[PR 60141]: {{site.repo.flutter}}pull/60141 +[PR 60645]: {{site.repo.flutter}}pull/60645 +[PR 61048]: {{site.repo.flutter}}pull/61048 diff --git a/src/content/release/breaking-changes/material-localized-strings.md b/src/content/release/breaking-changes/material-localized-strings.md index 7ae9913197..68d1cb47f9 100644 --- a/src/content/release/breaking-changes/material-localized-strings.md +++ b/src/content/release/breaking-changes/material-localized-strings.md @@ -82,9 +82,9 @@ Relevant PR: * [PR 124711][]: Deprecates string for ReorderableList in material_localizations. -[PR 124711]: {{site.repo.flutter}}/pull/124711 -[`ReorderableListView`]: {{site.api}}/flutter/material/ReorderableListView-class.html -[`ReorderableList`]: {{site.api}}/flutter/widgets/ReorderableList-class.html -[`SliverReorderableList`]: {{site.api}}/flutter/widgets/SliverReorderableList-class.html -[`MaterialLocalizations`]: {{site.api}}/flutter/material/MaterialLocalizations-class.html -[`WidgetsLocalizations`]: {{site.api}}/flutter/widgets/WidgetsLocalizations-class.html +[PR 124711]: {{site.repo.flutter}}pull/124711 +[`ReorderableListView`]: {{site.api}}flutter/material/ReorderableListView-class.html +[`ReorderableList`]: {{site.api}}flutter/widgets/ReorderableList-class.html +[`SliverReorderableList`]: {{site.api}}flutter/widgets/SliverReorderableList-class.html +[`MaterialLocalizations`]: {{site.api}}flutter/material/MaterialLocalizations-class.html +[`WidgetsLocalizations`]: {{site.api}}flutter/widgets/WidgetsLocalizations-class.html diff --git a/src/content/release/breaking-changes/material-state.md b/src/content/release/breaking-changes/material-state.md index c5b8b9c950..c932579668 100644 --- a/src/content/release/breaking-changes/material-state.md +++ b/src/content/release/breaking-changes/material-state.md @@ -111,6 +111,6 @@ Relevant PRs: * [Widget State Properties][] -[Create widgets level support for State]: {{site.repo.flutter}}/issues/138270 +[Create widgets level support for State]: {{site.repo.flutter}}issues/138270 [Flutter fix]: /tools/flutter-fix -[Widget State Properties]: {{site.repo.flutter}}/pull/142151 \ No newline at end of file +[Widget State Properties]: {{site.repo.flutter}}pull/142151 \ No newline at end of file diff --git a/src/content/release/breaking-changes/menus-text-style.md b/src/content/release/breaking-changes/menus-text-style.md index be65df1207..f5c36cf6ae 100644 --- a/src/content/release/breaking-changes/menus-text-style.md +++ b/src/content/release/breaking-changes/menus-text-style.md @@ -193,13 +193,13 @@ Relevant PRs: * [Update default menu text styles for Material 3][] -[`MenuBar`]: {{site.api}}/flutter/material/MenuBar-class.html -[`MenuAnchor`]: {{site.api}}/flutter/material/MenuAnchor-class.html -[`MenuItemButton`]: {{site.api}}/flutter/material/MenuItemButton-class.html -[`MenuButtonTheme`]: {{site.api}}/flutter/material/MenuButtonTheme-class.html -[`DropdownMenu`]: {{site.api}}/flutter/material/DropdownMenu-class.html -[`DropdownMenuEntry`]: {{site.api}}/flutter/material/DropdownMenuEntry-class.html -[`DropdownMenuTheme`]: {{site.api}}/flutter/material/DropdownMenuTheme-class.html -[`TextTheme`]: {{site.api}}/flutter/material/TextTheme-class.html - -[Update default menu text styles for Material 3]: {{site.repo.flutter}}/pull/131930 +[`MenuBar`]: {{site.api}}flutter/material/MenuBar-class.html +[`MenuAnchor`]: {{site.api}}flutter/material/MenuAnchor-class.html +[`MenuItemButton`]: {{site.api}}flutter/material/MenuItemButton-class.html +[`MenuButtonTheme`]: {{site.api}}flutter/material/MenuButtonTheme-class.html +[`DropdownMenu`]: {{site.api}}flutter/material/DropdownMenu-class.html +[`DropdownMenuEntry`]: {{site.api}}flutter/material/DropdownMenuEntry-class.html +[`DropdownMenuTheme`]: {{site.api}}flutter/material/DropdownMenuTheme-class.html +[`TextTheme`]: {{site.api}}flutter/material/TextTheme-class.html + +[Update default menu text styles for Material 3]: {{site.repo.flutter}}pull/131930 diff --git a/src/content/release/breaking-changes/mock-platform-channels.md b/src/content/release/breaking-changes/mock-platform-channels.md index d64a6fb427..2f46ddce56 100644 --- a/src/content/release/breaking-changes/mock-platform-channels.md +++ b/src/content/release/breaking-changes/mock-platform-channels.md @@ -171,7 +171,7 @@ Relevant PR: * [PR #76288: Migrate to ChannelBuffers.push][] -[`TestDefaultBinaryMessenger`]: {{site.api}}/flutter/flutter_test/TestDefaultBinaryMessenger-class.html -[`TestDefaultBinaryMessengerBinding`]: {{site.api}}/flutter/flutter_test/TestDefaultBinaryMessengerBinding-mixin.html +[`TestDefaultBinaryMessenger`]: {{site.api}}flutter/flutter_test/TestDefaultBinaryMessenger-class.html +[`TestDefaultBinaryMessengerBinding`]: {{site.api}}flutter/flutter_test/TestDefaultBinaryMessengerBinding-mixin.html -[PR #76288: Migrate to ChannelBuffers.push]: {{site.repo.flutter}}/pull/76288 +[PR #76288: Migrate to ChannelBuffers.push]: {{site.repo.flutter}}pull/76288 diff --git a/src/content/release/breaking-changes/modal-router-semantics-order.md b/src/content/release/breaking-changes/modal-router-semantics-order.md index 9813a5ee7f..f939a8e04e 100644 --- a/src/content/release/breaking-changes/modal-router-semantics-order.md +++ b/src/content/release/breaking-changes/modal-router-semantics-order.md @@ -155,7 +155,7 @@ Relevant PR: * [PR 59290][] -[`ModalRoute`]: {{site.api}}/flutter/widgets/ModalRoute-class.html -[`OverlayEntry`]: {{site.api}}/flutter/widgets/OverlayEntry-class.html -[Issue 46625]: {{site.repo.flutter}}/issues/46625 -[PR 59290]: {{site.repo.flutter}}/pull/59290 +[`ModalRoute`]: {{site.api}}flutter/widgets/ModalRoute-class.html +[`OverlayEntry`]: {{site.api}}flutter/widgets/OverlayEntry-class.html +[Issue 46625]: {{site.repo.flutter}}issues/46625 +[PR 59290]: {{site.repo.flutter}}pull/59290 diff --git a/src/content/release/breaking-changes/mouse-tracker-moved-to-rendering.md b/src/content/release/breaking-changes/mouse-tracker-moved-to-rendering.md index 35a354abc3..c834cbc700 100644 --- a/src/content/release/breaking-changes/mouse-tracker-moved-to-rendering.md +++ b/src/content/release/breaking-changes/mouse-tracker-moved-to-rendering.md @@ -72,12 +72,12 @@ Relevant PR: * [Move mouse_tracking.dart to rendering][] -[Move annotations to a separate tree]: {{site.repo.flutter}}/issues/49568 -[Move mouse_tracking.dart to rendering]: {{site.repo.flutter}}/pull/52781 -[Transform mouse events to the local coordinate system]: {{site.repo.flutter}}/issues/33675 -[`MouseDetectorAnnotationFinder`]: {{site.api}}/flutter/gestures/MouseDetectorAnnotationFinder.html -[`MouseTracker`]: {{site.api}}/flutter/gestures/MouseTracker-class.html -[`MouseTrackerAnnotation`]: {{site.api}}/flutter/gestures/MouseTrackerAnnotation-class.html -[`PointerEnterEventListener`]: {{site.api}}/flutter/gestures/PointerEnterEventListener.html -[`PointerExitEventListener`]: {{site.api}}/flutter/gestures/PointerExitEventListener.html -[`PointerHoverEventListener`]: {{site.api}}/flutter/gestures/PointerHoverEventListener.html +[Move annotations to a separate tree]: {{site.repo.flutter}}issues/49568 +[Move mouse_tracking.dart to rendering]: {{site.repo.flutter}}pull/52781 +[Transform mouse events to the local coordinate system]: {{site.repo.flutter}}issues/33675 +[`MouseDetectorAnnotationFinder`]: {{site.api}}flutter/gestures/MouseDetectorAnnotationFinder.html +[`MouseTracker`]: {{site.api}}flutter/gestures/MouseTracker-class.html +[`MouseTrackerAnnotation`]: {{site.api}}flutter/gestures/MouseTrackerAnnotation-class.html +[`PointerEnterEventListener`]: {{site.api}}flutter/gestures/PointerEnterEventListener.html +[`PointerExitEventListener`]: {{site.api}}flutter/gestures/PointerExitEventListener.html +[`PointerHoverEventListener`]: {{site.api}}flutter/gestures/PointerHoverEventListener.html diff --git a/src/content/release/breaking-changes/mouse-tracker-no-longer-attaches-annotations.md b/src/content/release/breaking-changes/mouse-tracker-no-longer-attaches-annotations.md index 3c0aa8e8e6..dd13d67435 100644 --- a/src/content/release/breaking-changes/mouse-tracker-no-longer-attaches-annotations.md +++ b/src/content/release/breaking-changes/mouse-tracker-no-longer-attaches-annotations.md @@ -156,10 +156,10 @@ Relevant PRs: explained at _The change to onExit_. -[Improve MouseTracker lifecycle: Move checks to post-frame]: {{site.repo.flutter}}/issues/44631 -[Issue #44631]: {{site.repo.flutter}}/pull/44631 -[`MouseRegion`]: {{site.api}}/flutter/widgets/MouseRegion-class.html -[`MouseTracker`]: {{site.api}}/flutter/gestures/MouseTracker-class.html -[MouseTracker no longer requires annotations attached]: {{site.repo.flutter}}/issues/48453 -[`MouseTrackerAnnotation`]: {{site.api}}/flutter/gestures/MouseTrackerAnnotation-class.html -[`RenderMouseRegion`]: {{site.api}}/flutter/rendering/RenderMouseRegion-class.html +[Improve MouseTracker lifecycle: Move checks to post-frame]: {{site.repo.flutter}}issues/44631 +[Issue #44631]: {{site.repo.flutter}}pull/44631 +[`MouseRegion`]: {{site.api}}flutter/widgets/MouseRegion-class.html +[`MouseTracker`]: {{site.api}}flutter/gestures/MouseTracker-class.html +[MouseTracker no longer requires annotations attached]: {{site.repo.flutter}}issues/48453 +[`MouseTrackerAnnotation`]: {{site.api}}flutter/gestures/MouseTrackerAnnotation-class.html +[`RenderMouseRegion`]: {{site.api}}flutter/rendering/RenderMouseRegion-class.html diff --git a/src/content/release/breaking-changes/multi-touch-scrolling.md b/src/content/release/breaking-changes/multi-touch-scrolling.md index 85d61bcb11..6a1bcfe298 100644 --- a/src/content/release/breaking-changes/multi-touch-scrolling.md +++ b/src/content/release/breaking-changes/multi-touch-scrolling.md @@ -173,11 +173,11 @@ Relevant PRs: * [Introduce multi-touch drag strategies for DragGestureRecognizer][] -[`ScrollConfiguration`]: {{site.api}}/flutter/widgets/ScrollConfiguration-class.html -[`ScrollBehavior`]: {{site.api}}/flutter/widgets/ScrollBehavior-class.html -[`MaterialScrollBehavior`]: {{site.api}}/flutter/material/MaterialScrollBehavior-class.html -[`CupertinoScrollBehavior`]: {{site.api}}/flutter/cupertino/CupertinoScrollBehavior-class.html -[`MultitouchDragStrategy`]: {{site.api}}/flutter/gestures/MultitouchDragStrategy.html -[`DragGestureRecognizer`]: {{site.api}}/flutter/gestures/DragGestureRecognizer-class.html -[Issue #11884]: {{site.repo.flutter}}/issues/11884 -[Introduce multi-touch drag strategies for DragGestureRecognizer]: {{site.repo.flutter}}/pull/136708 +[`ScrollConfiguration`]: {{site.api}}flutter/widgets/ScrollConfiguration-class.html +[`ScrollBehavior`]: {{site.api}}flutter/widgets/ScrollBehavior-class.html +[`MaterialScrollBehavior`]: {{site.api}}flutter/material/MaterialScrollBehavior-class.html +[`CupertinoScrollBehavior`]: {{site.api}}flutter/cupertino/CupertinoScrollBehavior-class.html +[`MultitouchDragStrategy`]: {{site.api}}flutter/gestures/MultitouchDragStrategy.html +[`DragGestureRecognizer`]: {{site.api}}flutter/gestures/DragGestureRecognizer-class.html +[Issue #11884]: {{site.repo.flutter}}issues/11884 +[Introduce multi-touch drag strategies for DragGestureRecognizer]: {{site.repo.flutter}}pull/136708 diff --git a/src/content/release/breaking-changes/navigator-and-page-api.md b/src/content/release/breaking-changes/navigator-and-page-api.md index 1e0d981dda..766bdb2785 100644 --- a/src/content/release/breaking-changes/navigator-and-page-api.md +++ b/src/content/release/breaking-changes/navigator-and-page-api.md @@ -104,7 +104,7 @@ Relevant PR: * [Refactors page API][] -[Refactors page API]: {{site.repo.flutter}}/pull/137792 -[`Navigator`]: {{site.api}}/flutter/widgets/Navigator-class.html -[`PopScope`]: {{site.api}}/flutter/widgets/PopScope-class.html -[Issue 137458]: {{site.repo.flutter}}/issues/137458 +[Refactors page API]: {{site.repo.flutter}}pull/137792 +[`Navigator`]: {{site.api}}flutter/widgets/Navigator-class.html +[`PopScope`]: {{site.api}}flutter/widgets/PopScope-class.html +[Issue 137458]: {{site.repo.flutter}}issues/137458 diff --git a/src/content/release/breaking-changes/network-policy-ios-android.md b/src/content/release/breaking-changes/network-policy-ios-android.md index f2aaad63b9..f917339bbe 100644 --- a/src/content/release/breaking-changes/network-policy-ios-android.md +++ b/src/content/release/breaking-changes/network-policy-ios-android.md @@ -19,7 +19,7 @@ Use HTTPS instead. :::important This change over-restricted HTTP access on local networks beyond the -restrictions imposed by mobile platforms ([flutter/flutter#72723]({{site.repo.flutter}}/issues/72723)). +restrictions imposed by mobile platforms ([flutter/flutter#72723]({{site.repo.flutter}}issues/72723)). This change has since been reverted. ::: @@ -37,8 +37,8 @@ You can override this behavior by following the platform-specific guidelines to define a domain-specific network policy. See the migration guide below for details. -[API 28]: {{site.android-dev}}/training/articles/security-config#CleartextTrafficPermitted -[iOS 9]: {{site.apple-dev}}/documentation/bundleresources/information_property_list/nsapptransportsecurity +[API 28]: {{site.android-dev}}training/articles/security-config#CleartextTrafficPermitted +[iOS 9]: {{site.apple-dev}}documentation/bundleresources/information_property_list/nsapptransportsecurity Much like the platforms, the application can still open insecure socket connections. Flutter does not enforce @@ -101,8 +101,8 @@ We **do not** recommend you do this for your release builds. like to allow IP addresses, the only option is to allow cleartext connections in your app. -[network security config]: {{site.android-dev}}/training/articles/security-config#CleartextTrafficPermitted -[NSExceptionDomains]: {{site.apple-dev}}/documentation/bundleresources/information_property_list/nsapptransportsecurity/nsexceptiondomains +[network security config]: {{site.android-dev}}training/articles/security-config#CleartextTrafficPermitted +[NSExceptionDomains]: {{site.apple-dev}}documentation/bundleresources/information_property_list/nsapptransportsecurity/nsexceptiondomains ## Timeline @@ -121,5 +121,5 @@ Relevant PRs: * [PR 20218: Plumbing for setting domain network policy][] * [Introduce per-domain policy for strict secure connections][] -[PR 20218: Plumbing for setting domain network policy]: {{site.repo.engine}}/pull/20218 -[Introduce per-domain policy for strict secure connections]: {{site.github}}/dart-lang/sdk/commit/d878cfbf20375befa09f9bf85f0ba2b87b319427 +[PR 20218: Plumbing for setting domain network policy]: {{site.repo.engine}}pull/20218 +[Introduce per-domain policy for strict secure connections]: {{site.github}}dart-lang/sdk/commit/d878cfbf20375befa09f9bf85f0ba2b87b319427 diff --git a/src/content/release/breaking-changes/new-color-scheme-roles.md b/src/content/release/breaking-changes/new-color-scheme-roles.md index 649b9c18a6..3e0b1c60da 100644 --- a/src/content/release/breaking-changes/new-color-scheme-roles.md +++ b/src/content/release/breaking-changes/new-color-scheme-roles.md @@ -44,7 +44,7 @@ This change prevents the constructed `ColorScheme` from being too bright, even if the source color looks bright and had a high chroma (contained little black, white, and shades of grey). -[Material color utilities]: {{site.pub-pkg}}/material_color_utilities +[Material color utilities]: {{site.pub-pkg}}material_color_utilities ## Migration guide @@ -153,8 +153,8 @@ Relevant PRs: * [Introduce tone-based surfaces and accent color add-ons - Part 2][] * [Enhance ColorScheme.fromSeed with a new variant parameter][] -[Support tone-based surface and surface container ColorScheme roles]: {{site.repo.flutter}}/issues/115912 -[Support fidelity variant for ColorScheme.fromSeed]: {{site.repo.flutter}}/issues/[144649] -[Introduce tone-based surfaces and accent color add-ons - Part 1]: {{site.repo.flutter}}/pull/[142654] -[Introduce tone-based surfaces and accent color add-ons - Part 2]: {{site.repo.flutter}}/pull/[144273] -[Enhance ColorScheme.fromSeed with a new variant parameter]: {{site.repo.flutter}}/pull/[144805] +[Support tone-based surface and surface container ColorScheme roles]: {{site.repo.flutter}}issues/115912 +[Support fidelity variant for ColorScheme.fromSeed]: {{site.repo.flutter}}issues/[144649] +[Introduce tone-based surfaces and accent color add-ons - Part 1]: {{site.repo.flutter}}pull/[142654] +[Introduce tone-based surfaces and accent color add-ons - Part 2]: {{site.repo.flutter}}pull/[144273] +[Enhance ColorScheme.fromSeed with a new variant parameter]: {{site.repo.flutter}}pull/[144805] diff --git a/src/content/release/breaking-changes/notifications.md b/src/content/release/breaking-changes/notifications.md index 2fe6ec8013..90d6ae3f50 100644 --- a/src/content/release/breaking-changes/notifications.md +++ b/src/content/release/breaking-changes/notifications.md @@ -105,12 +105,12 @@ In stable release: 3.0.0 API documentation: -* [`Notification`]({{site.api}}/flutter/widgets/Notification-class.html) +* [`Notification`]({{site.api}}flutter/widgets/Notification-class.html) Relevant issues: -* [Issue 97849]({{site.repo.flutter}}/issues/97849) +* [Issue 97849]({{site.repo.flutter}}issues/97849) Relevant PRs: -* [improve Notification API performance]({{site.repo.flutter}}/pull/98451) +* [improve Notification API performance]({{site.repo.flutter}}pull/98451) diff --git a/src/content/release/breaking-changes/nullable-cupertinothemedata-brightness.md b/src/content/release/breaking-changes/nullable-cupertinothemedata-brightness.md index d26e783cf0..8f5d7a7aed 100644 --- a/src/content/release/breaking-changes/nullable-cupertinothemedata-brightness.md +++ b/src/content/release/breaking-changes/nullable-cupertinothemedata-brightness.md @@ -77,8 +77,8 @@ Relevant PR: * [Let material `ThemeData` dictate brightness if `cupertinoOverrideTheme.brightness` is null][] -[`CupertinoTheme.brightnessOf`]: {{site.api}}/flutter/cupertino/CupertinoTheme/brightnessOf.html -[`CupertinoThemeData.brightness`]: {{site.api}}/flutter/cupertino/NoDefaultCupertinoThemeData/brightness.html -[Issue 47255]: {{site.repo.flutter}}/issues/47255 -[Let material `ThemeData` dictate brightness if `cupertinoOverrideTheme.brightness` is null]: {{site.repo.flutter}}/pull/47249 +[`CupertinoTheme.brightnessOf`]: {{site.api}}flutter/cupertino/CupertinoTheme/brightnessOf.html +[`CupertinoThemeData.brightness`]: {{site.api}}flutter/cupertino/NoDefaultCupertinoThemeData/brightness.html +[Issue 47255]: {{site.repo.flutter}}issues/47255 +[Let material `ThemeData` dictate brightness if `cupertinoOverrideTheme.brightness` is null]: {{site.repo.flutter}}pull/47249 [Make `CupertinoThemeData.brightness nullable`]: /go/nullable-cupertinothemedata-brightness diff --git a/src/content/release/breaking-changes/overlay-entry-rebuilds.md b/src/content/release/breaking-changes/overlay-entry-rebuilds.md index c5eab04c9a..e7fc4315ae 100644 --- a/src/content/release/breaking-changes/overlay-entry-rebuilds.md +++ b/src/content/release/breaking-changes/overlay-entry-rebuilds.md @@ -109,12 +109,12 @@ Relevant PRs: * [Reland "Do not rebuild Routes when a new opaque Route is pushed on top"][] -[Do not rebuild Routes when a new opaque Route is pushed on top]: {{site.repo.flutter}}/pull/48900 -[Issue 45797]: {{site.repo.flutter}}/issues/45797 -[`Navigator`]: {{site.api}}/flutter/widgets/Navigator-class.html -[`Overlay`]: {{site.api}}/flutter/widgets/Overlay-class.html -[`OverlayEntry`]: {{site.api}}/flutter/widgets/OverlayEntry-class.html -[`OverlayRoute`]: {{site.api}}/flutter/widgets/OverlayRoute-class.html -[`Route`]: {{site.api}}/flutter/widgets/Route-class.html -[`setState`]: {{site.api}}/flutter/widgets/State/setState.html -[Reland "Do not rebuild Routes when a new opaque Route is pushed on top"]: {{site.repo.flutter}}/pull/49376 +[Do not rebuild Routes when a new opaque Route is pushed on top]: {{site.repo.flutter}}pull/48900 +[Issue 45797]: {{site.repo.flutter}}issues/45797 +[`Navigator`]: {{site.api}}flutter/widgets/Navigator-class.html +[`Overlay`]: {{site.api}}flutter/widgets/Overlay-class.html +[`OverlayEntry`]: {{site.api}}flutter/widgets/OverlayEntry-class.html +[`OverlayRoute`]: {{site.api}}flutter/widgets/OverlayRoute-class.html +[`Route`]: {{site.api}}flutter/widgets/Route-class.html +[`setState`]: {{site.api}}flutter/widgets/State/setState.html +[Reland "Do not rebuild Routes when a new opaque Route is pushed on top"]: {{site.repo.flutter}}pull/49376 diff --git a/src/content/release/breaking-changes/page-transition-replaced-by-ZoomPageTransitionBuilder.md b/src/content/release/breaking-changes/page-transition-replaced-by-ZoomPageTransitionBuilder.md index e894c628ae..29f0a49b51 100644 --- a/src/content/release/breaking-changes/page-transition-replaced-by-ZoomPageTransitionBuilder.md +++ b/src/content/release/breaking-changes/page-transition-replaced-by-ZoomPageTransitionBuilder.md @@ -30,7 +30,7 @@ When the current `TargetPlatform` doesn't have `PageTransitionsBuilder` defined in the `ThemeData.pageTransitionsTheme`, `ZoomPageTransitionsBuilder` is used as the default. -[Style guide for Flutter repo]: {{site.repo.flutter}}/wiki/Style-guide-for-Flutter-repo +[Style guide for Flutter repo]: {{site.repo.flutter}}wiki/Style-guide-for-Flutter-repo ## Description of change @@ -143,8 +143,8 @@ Relevant PR: * [PR 100812][] -[`ZoomPageTransitionsBuilder`]: {{site.api}}/flutter/material/ZoomPageTransitionsBuilder-class.html -[`FadeUpwardsPageTransitionsBuilder`]: {{site.api}}/flutter/material/FadeUpwardsPageTransitionsBuilder-class.html -[`PageTransitionsTheme`]: {{site.api}}/flutter/material/PageTransitionsTheme-class.html -[Issue 43277]: {{site.repo.flutter}}/issues/43277 -[PR 100812]: {{site.repo.flutter}}/pull/100812 +[`ZoomPageTransitionsBuilder`]: {{site.api}}flutter/material/ZoomPageTransitionsBuilder-class.html +[`FadeUpwardsPageTransitionsBuilder`]: {{site.api}}flutter/material/FadeUpwardsPageTransitionsBuilder-class.html +[`PageTransitionsTheme`]: {{site.api}}flutter/material/PageTransitionsTheme-class.html +[Issue 43277]: {{site.repo.flutter}}issues/43277 +[PR 100812]: {{site.repo.flutter}}pull/100812 diff --git a/src/content/release/breaking-changes/pageview-controller.md b/src/content/release/breaking-changes/pageview-controller.md index ad8d0f4a1a..9238b7dbc6 100644 --- a/src/content/release/breaking-changes/pageview-controller.md +++ b/src/content/release/breaking-changes/pageview-controller.md @@ -35,4 +35,4 @@ Relevant issues: * [PageView uses global controller, that is never disposed. (Issue 141119)][] -[PageView uses global controller, that is never disposed. (Issue 141119)]: {{site.repo.flutter}}/issues/141119 +[PageView uses global controller, that is never disposed. (Issue 141119)]: {{site.repo.flutter}}issues/141119 diff --git a/src/content/release/breaking-changes/paint-enableDithering.md b/src/content/release/breaking-changes/paint-enableDithering.md index ec3f18e427..35003276df 100644 --- a/src/content/release/breaking-changes/paint-enableDithering.md +++ b/src/content/release/breaking-changes/paint-enableDithering.md @@ -116,18 +116,18 @@ Relevant PRs: - [PR 44730][] - [PR 44912][] -[`Paint.enableDithering`]: {{site.api}}/flutter/dart-ui/Paint/enableDithering.html -[`matchesGoldenFile`]: {{site.api}}/flutter_test/matchesGoldenFile.html +[`Paint.enableDithering`]: {{site.api}}flutter/dart-ui/Paint/enableDithering.html +[`matchesGoldenFile`]: {{site.api}}flutter_test/matchesGoldenFile.html [Impeller]: /perf/impeller -[PR 13868]: {{site.repo.engine}}/pull/13868 -[PR 44181]: {{site.repo.engine}}/pull/44181 -[PR 44331]: {{site.repo.engine}}/pull/44331 -[PR 44522]: {{site.repo.engine}}/pull/44522 -[PR 44730]: {{site.repo.engine}}/pull/44730 -[PR 44912]: {{site.repo.engine}}/pull/44912 -[Issue 44134]: {{site.repo.flutter}}/issues/44134 -[Issue 112498]: {{site.repo.flutter}}/issues/112498 -[Issue 118073]: {{site.repo.flutter}}/issues/118073 -[Issue 134250]: {{site.repo.flutter}}/issues/134250 +[PR 13868]: {{site.repo.engine}}pull/13868 +[PR 44181]: {{site.repo.engine}}pull/44181 +[PR 44331]: {{site.repo.engine}}pull/44331 +[PR 44522]: {{site.repo.engine}}pull/44522 +[PR 44730]: {{site.repo.engine}}pull/44730 +[PR 44912]: {{site.repo.engine}}pull/44912 +[Issue 44134]: {{site.repo.flutter}}issues/44134 +[Issue 112498]: {{site.repo.flutter}}issues/112498 +[Issue 118073]: {{site.repo.flutter}}issues/118073 +[Issue 134250]: {{site.repo.flutter}}issues/134250 [Writing and using fragment shaders]: /ui/design/graphics/fragment-shaders -[`hsl_linear_gradient.frag`]: https://github.com/jonahwilliams/awesome_gradients/blob/a4e09c47ef1760bd7073beb60f49dad8ede5bb2e/shaders/hsl_linear_gradient.frag +[`hsl_linear_gradient.frag`]: {{site.github}}jonahwilliams/awesome_gradients/blob/a4e09c47ef1760bd7073beb60f49dad8ede5bb2e/shaders/hsl_linear_gradient.frag diff --git a/src/content/release/breaking-changes/parent-data-widget-generic-type.md b/src/content/release/breaking-changes/parent-data-widget-generic-type.md index 716ff009d4..b45afb21dc 100644 --- a/src/content/release/breaking-changes/parent-data-widget-generic-type.md +++ b/src/content/release/breaking-changes/parent-data-widget-generic-type.md @@ -133,5 +133,5 @@ Relevant PR: * [Make ParentDataWidget usable with different ancestor RenderObjectWidget types][] -[Make ParentDataWidget usable with different ancestor RenderObjectWidget types]: {{site.repo.flutter}}/pull/48541 -[`ParentDataWidget`]: {{site.api}}/flutter/widgets/ParentDataWidget-class.html +[Make ParentDataWidget usable with different ancestor RenderObjectWidget types]: {{site.repo.flutter}}pull/48541 +[`ParentDataWidget`]: {{site.api}}flutter/widgets/ParentDataWidget-class.html diff --git a/src/content/release/breaking-changes/platform-views-using-html-slots-web.md b/src/content/release/breaking-changes/platform-views-using-html-slots-web.md index f83c36f54e..e10e2fe10d 100644 --- a/src/content/release/breaking-changes/platform-views-using-html-slots-web.md +++ b/src/content/release/breaking-changes/platform-views-using-html-slots-web.md @@ -187,13 +187,13 @@ Relevant PRs: [`CSS height`]: https://developer.mozilla.org/en-US/docs/Web/CSS/height [`CSS width`]: https://developer.mozilla.org/en-US/docs/Web/CSS/width -[`HtmlElementView` widgets]: {{site.api}}/flutter/widgets/HtmlElementView-class.html -[`PlatformViewFactory` functions]: {{site.repo.engine}}/blob/58459a5e342f84c755919f2ad5029b22bcddd548/lib/web_ui/lib/src/engine/platform_views/content_manager.dart#L15-L18 +[`HtmlElementView` widgets]: {{site.api}}flutter/widgets/HtmlElementView-class.html +[`PlatformViewFactory` functions]: {{site.repo.engine}}blob/58459a5e342f84c755919f2ad5029b22bcddd548/lib/web_ui/lib/src/engine/platform_views/content_manager.dart#L15-L18 [design doc]: /go/web-slot-content -[issue-80524]: {{site.repo.flutter}}/issues/80524 -[pull-25747]: {{site.repo.engine}}/pull/25747 -[pull-364]: {{site.repo.packages}}/pull/364 -[pull-3964]: {{site.github}}/flutter/plugins/pull/3964 -[pull-82926]: {{site.repo.flutter}}/pull/82926 +[issue-80524]: {{site.repo.flutter}}issues/80524 +[pull-25747]: {{site.repo.engine}}pull/25747 +[pull-364]: {{site.repo.packages}}pull/364 +[pull-3964]: {{site.repo.organization}}plugins/pull/3964 +[pull-82926]: {{site.repo.flutter}}pull/82926 [shadow root]: https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot [slot elements]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot diff --git a/src/content/release/breaking-changes/plugin-api-migration.md b/src/content/release/breaking-changes/plugin-api-migration.md index 4f6eb0e1ac..29834bcad7 100644 --- a/src/content/release/breaking-changes/plugin-api-migration.md +++ b/src/content/release/breaking-changes/plugin-api-migration.md @@ -488,13 +488,13 @@ a non-UI configuration. 有关的引用并返回与 UI 无关的配置。 -[`ActivityAware`]: {{site.api}}/javadoc/io/flutter/embedding/engine/plugins/activity/ActivityAware.html +[`ActivityAware`]: {{site.api}}javadoc/io/flutter/embedding/engine/plugins/activity/ActivityAware.html [Basic plugin]: #basic-plugin -[battery plus package]: {{site.github}}/fluttercommunity/plus_plugins/tree/main/packages/battery_plus/battery_plus -[Flutter plugins]: {{site.pub}}/flutter/packages -[`FlutterPlugin`]: {{site.api}}/javadoc/io/flutter/embedding/engine/plugins/FlutterPlugin.html -[`PluginRegistry.Registrar`]: {{site.api}}/javadoc/io/flutter/plugin/common/PluginRegistry.Registrar.html -[`PluginRegistry.Registrar.activity()`]: {{site.api}}/javadoc/io/flutter/plugin/common/PluginRegistry.Registrar.html#activity-- -[`ServiceAware`]: {{site.api}}/javadoc/io/flutter/embedding/engine/plugins/service/ServiceAware.html -[Upgrading pre 1.12 Android projects]: {{site.repo.flutter}}/wiki/Upgrading-pre-1.12-Android-projects -[verified publisher]: {{site.dart-site}}/tools/pub/verified-publishers +[battery plus package]: {{site.github}}fluttercommunity/plus_plugins/tree/main/packages/battery_plus/battery_plus +[Flutter plugins]: {{site.pub}}flutter/packages +[`FlutterPlugin`]: {{site.api}}javadoc/io/flutter/embedding/engine/plugins/FlutterPlugin.html +[`PluginRegistry.Registrar`]: {{site.api}}javadoc/io/flutter/plugin/common/PluginRegistry.Registrar.html +[`PluginRegistry.Registrar.activity()`]: {{site.api}}javadoc/io/flutter/plugin/common/PluginRegistry.Registrar.html#activity-- +[`ServiceAware`]: {{site.api}}javadoc/io/flutter/embedding/engine/plugins/service/ServiceAware.html +[Upgrading pre 1.12 Android projects]: {{site.repo.flutter}}wiki/Upgrading-pre-1.12-Android-projects +[verified publisher]: {{site.dart-site}}tools/pub/verified-publishers diff --git a/src/content/release/breaking-changes/popscope-with-result.md b/src/content/release/breaking-changes/popscope-with-result.md index ece42f9f3d..15ebdca20a 100644 --- a/src/content/release/breaking-changes/popscope-with-result.md +++ b/src/content/release/breaking-changes/popscope-with-result.md @@ -135,11 +135,11 @@ Relevant PR: * [Add generic type for result in PopScope][] -[Add generic type for result in PopScope]: {{site.repo.flutter}}/pull/139164 -[`PopScope`]: {{site.api}}/flutter/widgets/PopScope-class.html -[`Route`]: {{site.api}}/flutter/widgets/Route-class.html -[`onPopInvoked`]: {{site.api}}/flutter/widgets/PopScope/onPopInvoked.html -[`onPopInvokedWithResult`]: {{site.api}}/flutter/widgets/PopScope/onPopInvokedWithResult.html -[`Form.onPopInvoked`]: {{site.api}}/flutter/widgets/Form/onPopInvoked.html -[`Form.onPopInvokedWithResult`]: {{site.api}}/flutter/widgets/Form/onPopInvokedWithResult.html -[Issue 137458]: {{site.repo.flutter}}/issues/137458 +[Add generic type for result in PopScope]: {{site.repo.flutter}}pull/139164 +[`PopScope`]: {{site.api}}flutter/widgets/PopScope-class.html +[`Route`]: {{site.api}}flutter/widgets/Route-class.html +[`onPopInvoked`]: {{site.api}}flutter/widgets/PopScope/onPopInvoked.html +[`onPopInvokedWithResult`]: {{site.api}}flutter/widgets/PopScope/onPopInvokedWithResult.html +[`Form.onPopInvoked`]: {{site.api}}flutter/widgets/Form/onPopInvoked.html +[`Form.onPopInvokedWithResult`]: {{site.api}}flutter/widgets/Form/onPopInvokedWithResult.html +[Issue 137458]: {{site.repo.flutter}}issues/137458 diff --git a/src/content/release/breaking-changes/primary-scroll-controller-desktop.md b/src/content/release/breaking-changes/primary-scroll-controller-desktop.md index e41ea3dfde..bfda585685 100644 --- a/src/content/release/breaking-changes/primary-scroll-controller-desktop.md +++ b/src/content/release/breaking-changes/primary-scroll-controller-desktop.md @@ -201,11 +201,11 @@ Relevant PRs: * [Updating PrimaryScrollController for Desktop][] -[`PrimaryScrollController`]: {{site.api}}/flutter/widgets/PrimaryScrollController-class.html -[`ScrollView`]: {{site.api}}/flutter/widgets/ScrollView-class.html -[`ScrollAction`]: {{site.api}}/flutter/widgets/ScrollAction-class.html -[`ScrollIntent`]: {{site.api}}/flutter/widgets/ScrollIntent-class.html -[`Scrollbar`]: {{site.api}}/flutter/material/Scrollbar-class.html +[`PrimaryScrollController`]: {{site.api}}flutter/widgets/PrimaryScrollController-class.html +[`ScrollView`]: {{site.api}}flutter/widgets/ScrollView-class.html +[`ScrollAction`]: {{site.api}}flutter/widgets/ScrollAction-class.html +[`ScrollIntent`]: {{site.api}}flutter/widgets/ScrollIntent-class.html +[`Scrollbar`]: {{site.api}}flutter/material/Scrollbar-class.html [Updating PrimaryScrollController]: https://docs.google.com/document/d/12OQx7h8UQzzAi0Kxh-saDC2dg7h2fghCCzwJ0ysPmZE/edit?usp=sharing&resourcekey=0-ATO-1Er3HO2HITm59I0IdA -[Issue #100264]: {{site.repo.flutter}}/issues/100264 -[Updating PrimaryScrollController for Desktop]: {{site.repo.flutter}}/pull/102099 +[Issue #100264]: {{site.repo.flutter}}issues/100264 +[Updating PrimaryScrollController for Desktop]: {{site.repo.flutter}}pull/102099 diff --git a/src/content/release/breaking-changes/raw-images-on-web-uses-correct-origin-and-colors.md b/src/content/release/breaking-changes/raw-images-on-web-uses-correct-origin-and-colors.md index ac1f73680f..0ef5c2fc78 100644 --- a/src/content/release/breaking-changes/raw-images-on-web-uses-correct-origin-and-colors.md +++ b/src/content/release/breaking-changes/raw-images-on-web-uses-correct-origin-and-colors.md @@ -167,12 +167,12 @@ Relevant PRs: * [Web: Reland: Fix BMP encoder][] * [Clarify ImageDescriptor.raw pixel order and add version detector][] -[`decodeImageFromPixels`]: {{site.api}}/flutter/dart-ui/decodeImageFromPixels.html -[`ImageDescriptor.raw`]: {{site.api}}/flutter/dart-ui/ImageDescriptor/ImageDescriptor.raw.html +[`decodeImageFromPixels`]: {{site.api}}flutter/dart-ui/decodeImageFromPixels.html +[`ImageDescriptor.raw`]: {{site.api}}flutter/dart-ui/ImageDescriptor/ImageDescriptor.raw.html -[Web: Regression in Master - PDF display distorted due to change in BMP Encoder]: {{site.repo.flutter}}/issues/93615 -[Web: ImageDescriptor.raw flips and inverts images (partial reason included)]: {{site.repo.flutter}}/issues/89610 +[Web: Regression in Master - PDF display distorted due to change in BMP Encoder]: {{site.repo.flutter}}issues/93615 +[Web: ImageDescriptor.raw flips and inverts images (partial reason included)]: {{site.repo.flutter}}issues/89610 -[engine#29593]: {{site.repo.engine}}/pull/29593 -[Web: Reland: Fix BMP encoder]: {{site.repo.engine}}/pull/29593 -[Clarify ImageDescriptor.raw pixel order and add version detector]: {{site.repo.engine}}/pull/30343 +[engine#29593]: {{site.repo.engine}}pull/29593 +[Web: Reland: Fix BMP encoder]: {{site.repo.engine}}pull/29593 +[Clarify ImageDescriptor.raw pixel order and add version detector]: {{site.repo.engine}}pull/30343 diff --git a/src/content/release/breaking-changes/renderbox-dry-layout.md b/src/content/release/breaking-changes/renderbox-dry-layout.md index cbfe6613e8..0f9f7d322d 100644 --- a/src/content/release/breaking-changes/renderbox-dry-layout.md +++ b/src/content/release/breaking-changes/renderbox-dry-layout.md @@ -110,14 +110,14 @@ Relevant PRs: * [Fixes Intrinsics for RenderParagraph and RenderWrap][] -[`RenderBox`]: {{site.api}}/flutter/rendering/RenderBox-class.html -[`RenderBox.computeMinIntrinsicWidth`]: {{site.api}}/flutter/rendering/RenderBox/computeMinIntrinsicWidth.html -[`computeMinInstrinsicWidth`]: {{site.api}}/flutter/rendering/RenderBox/computeMinIntrinsicWidth.html -[`computeDryLayout`]: {{site.api}}/flutter/rendering/RenderBox/computeDryLayout.html -[`getDryLayout`]: {{site.api}}/flutter/rendering/RenderBox/getDryLayout.html -[`performResize`]: {{site.api}}/flutter/rendering/RenderBox/performResize.html -[`RenderWrap`]: {{site.api}}/flutter/rendering/RenderWrap-class.html -[`RenderParagraph`]: {{site.api}}/flutter/rendering/RenderParagraph-class.html - -[Issue 48679]: {{site.repo.flutter}}/issues/48679 -[Fixes Intrinsics for RenderParagraph and RenderWrap]: {{site.repo.flutter}}/pull/70656 +[`RenderBox`]: {{site.api}}flutter/rendering/RenderBox-class.html +[`RenderBox.computeMinIntrinsicWidth`]: {{site.api}}flutter/rendering/RenderBox/computeMinIntrinsicWidth.html +[`computeMinInstrinsicWidth`]: {{site.api}}flutter/rendering/RenderBox/computeMinIntrinsicWidth.html +[`computeDryLayout`]: {{site.api}}flutter/rendering/RenderBox/computeDryLayout.html +[`getDryLayout`]: {{site.api}}flutter/rendering/RenderBox/getDryLayout.html +[`performResize`]: {{site.api}}flutter/rendering/RenderBox/performResize.html +[`RenderWrap`]: {{site.api}}flutter/rendering/RenderWrap-class.html +[`RenderParagraph`]: {{site.api}}flutter/rendering/RenderParagraph-class.html + +[Issue 48679]: {{site.repo.flutter}}issues/48679 +[Fixes Intrinsics for RenderParagraph and RenderWrap]: {{site.repo.flutter}}pull/70656 diff --git a/src/content/release/breaking-changes/rendereditable-layout-before-hit-test.md b/src/content/release/breaking-changes/rendereditable-layout-before-hit-test.md index 25c5793405..4803563a62 100644 --- a/src/content/release/breaking-changes/rendereditable-layout-before-hit-test.md +++ b/src/content/release/breaking-changes/rendereditable-layout-before-hit-test.md @@ -130,6 +130,6 @@ Relevant PR: * [PR 54479: Enable gesture recognizer in selectable rich text][] -[Issue 43494]: {{site.repo.flutter}}/issues/43494 -[`RenderEditable`]: {{site.api}}/flutter/rendering/RenderEditable-class.html -[PR 54479: Enable gesture recognizer in selectable rich text]: {{site.repo.flutter}}/pull/54479 +[Issue 43494]: {{site.repo.flutter}}issues/43494 +[`RenderEditable`]: {{site.api}}flutter/rendering/RenderEditable-class.html +[PR 54479: Enable gesture recognizer in selectable rich text]: {{site.repo.flutter}}pull/54479 diff --git a/src/content/release/breaking-changes/rendering-changes.md b/src/content/release/breaking-changes/rendering-changes.md index 20f1963229..62f00336d4 100644 --- a/src/content/release/breaking-changes/rendering-changes.md +++ b/src/content/release/breaking-changes/rendering-changes.md @@ -64,14 +64,14 @@ a slight difference: Relevant PRs: -* The `FlutterTest` font was added in: [Add new test font]({{site.repo.engine}}/pull/39809) -* The `FlutterTest` font was made the default in: [Make FlutterTest the default test font]({{site.repo.engine}}/pull/40188) +* The `FlutterTest` font was added in: [Add new test font]({{site.repo.engine}}pull/39809) +* The `FlutterTest` font was made the default in: [Make FlutterTest the default test font]({{site.repo.engine}}pull/40188) Wiki page: * [Flutter Test Fonts][] -[Flutter Test Fonts]: {{site.repo.flutter}}/wiki/Flutter-Test-Fonts -[TextDecoration.underline]: {{site.api}}/flutter/dart-ui/TextDecoration/underline-constant.html -[TextDecoration.overline]: {{site.api}}/flutter/dart-ui/TextDecoration/overline-constant.html -[TextDecoration.lineThrough]: {{site.api}}/flutter/dart-ui/TextDecoration/lineThrough-constant.html +[Flutter Test Fonts]: {{site.repo.flutter}}wiki/Flutter-Test-Fonts +[TextDecoration.underline]: {{site.api}}flutter/dart-ui/TextDecoration/underline-constant.html +[TextDecoration.overline]: {{site.api}}flutter/dart-ui/TextDecoration/overline-constant.html +[TextDecoration.lineThrough]: {{site.api}}flutter/dart-ui/TextDecoration/lineThrough-constant.html diff --git a/src/content/release/breaking-changes/route-information-uri.md b/src/content/release/breaking-changes/route-information-uri.md index 7bba51e5e9..d3213f2793 100644 --- a/src/content/release/breaking-changes/route-information-uri.md +++ b/src/content/release/breaking-changes/route-information-uri.md @@ -100,6 +100,6 @@ Relevant PRs: * [PR 119968][]: Implement url support for RouteInformation and didPushRouteInformation. -[PR 119968]: {{site.repo.flutter}}/pull/119968 -[`RouteInformation`]: {{site.api}}/flutter/widgets/RouteInformation-class.html -[`Uri`]: {{site.api}}/flutter/dart-core/Uri-class.html +[PR 119968]: {{site.repo.flutter}}pull/119968 +[`RouteInformation`]: {{site.api}}flutter/widgets/RouteInformation-class.html +[`Uri`]: {{site.api}}flutter/dart-core/Uri-class.html diff --git a/src/content/release/breaking-changes/route-navigator-refactoring.md b/src/content/release/breaking-changes/route-navigator-refactoring.md index a5e91ed9e0..283c884969 100644 --- a/src/content/release/breaking-changes/route-navigator-refactoring.md +++ b/src/content/release/breaking-changes/route-navigator-refactoring.md @@ -149,12 +149,12 @@ Relevant PR: * [PR 44930][] - Refactor the imperative api to continue working in the new navigation system -[Issue 45938: Router]: {{site.repo.flutter}}/issues/45938 -[`Navigator`]: {{site.api}}/flutter/widgets/Navigator-class.html -[`Navigator.pop`]: {{site.api}}/flutter/widgets/Navigator/pop.html -[`Navigator.canPop`]: {{site.api}}/flutter/widgets/Navigator/canPop.html +[Issue 45938: Router]: {{site.repo.flutter}}issues/45938 +[`Navigator`]: {{site.api}}flutter/widgets/Navigator-class.html +[`Navigator.pop`]: {{site.api}}flutter/widgets/Navigator/pop.html +[`Navigator.canPop`]: {{site.api}}flutter/widgets/Navigator/canPop.html [Router]: /go/navigator-with-router -[PR 44930]: {{site.repo.flutter}}/pull/44930 -[`Route`]: {{site.api}}/flutter/widgets/Route-class.html -[`Route.install`]: {{site.api}}/flutter/widgets/Route/install.html -[`RouteSetting.isInitialRoute`]: {{site.api}}/flutter/widgets/RouteSettings/isInitialRoute.html +[PR 44930]: {{site.repo.flutter}}pull/44930 +[`Route`]: {{site.api}}flutter/widgets/Route-class.html +[`Route.install`]: {{site.api}}flutter/widgets/Route/install.html +[`RouteSetting.isInitialRoute`]: {{site.api}}flutter/widgets/RouteSettings/isInitialRoute.html diff --git a/src/content/release/breaking-changes/route-transition-record-and-transition-delegate.md b/src/content/release/breaking-changes/route-transition-record-and-transition-delegate.md index bcab82b02c..3bfe6ed22f 100644 --- a/src/content/release/breaking-changes/route-transition-record-and-transition-delegate.md +++ b/src/content/release/breaking-changes/route-transition-record-and-transition-delegate.md @@ -143,8 +143,8 @@ Relevant PR: when there is still a route waiting -[Issue 45938: Navigator 2.0]: {{site.repo.flutter}}/issues/45938 -[`Navigator`]: {{site.api}}/flutter/widgets/Navigator-class.html -[PR 55998]: {{site.repo.flutter}}/pull/55998 -[`TransitionDelegate`]: {{site.api}}/flutter/widgets/TransitionDelegate-class.html -[`RouteTransitionRecord`]: {{site.api}}/flutter/widgets/RouteTransitionRecord-class.html +[Issue 45938: Navigator 2.0]: {{site.repo.flutter}}issues/45938 +[`Navigator`]: {{site.api}}flutter/widgets/Navigator-class.html +[PR 55998]: {{site.repo.flutter}}pull/55998 +[`TransitionDelegate`]: {{site.api}}flutter/widgets/TransitionDelegate-class.html +[`RouteTransitionRecord`]: {{site.api}}flutter/widgets/RouteTransitionRecord-class.html diff --git a/src/content/release/breaking-changes/routesettings-copywith-migration.md b/src/content/release/breaking-changes/routesettings-copywith-migration.md index 85c1c3ced5..f81bca6093 100644 --- a/src/content/release/breaking-changes/routesettings-copywith-migration.md +++ b/src/content/release/breaking-changes/routesettings-copywith-migration.md @@ -43,5 +43,5 @@ Relevant PRs: * [PR 113860][]: Removes RouteSetting.copyWith. -[PR 113860]: {{site.repo.flutter}}/pull/113860 -[`Page`]: {{site.api}}/flutter/widgets/Page-class.html +[PR 113860]: {{site.repo.flutter}}pull/113860 +[`Page`]: {{site.api}}flutter/widgets/Page-class.html diff --git a/src/content/release/breaking-changes/scaffold-messenger.md b/src/content/release/breaking-changes/scaffold-messenger.md index 32b1080db5..d0bd14c887 100644 --- a/src/content/release/breaking-changes/scaffold-messenger.md +++ b/src/content/release/breaking-changes/scaffold-messenger.md @@ -194,11 +194,11 @@ Relevant PRs: * [ScaffoldMessenger][] * [ScaffoldMessenger Migration][] -[`Scaffold`]: {{site.api}}/flutter/material/Scaffold-class.html -[`ScaffoldMessenger`]: {{site.api}}/flutter/material/ScaffoldMessenger-class.html -[`SnackBar`]: {{site.api}}/flutter/material/SnackBar-class.html -[`MaterialApp`]: {{site.api}}/flutter/material/MaterialApp-class.html -[Issue #57218]: {{site.repo.flutter}}/issues/57218 -[Issue #62921]: {{site.repo.flutter}}/issues/62921 -[ScaffoldMessenger]: {{site.repo.flutter}}/pull/64101 -[ScaffoldMessenger Migration]: {{site.repo.flutter}}/pull/64170 +[`Scaffold`]: {{site.api}}flutter/material/Scaffold-class.html +[`ScaffoldMessenger`]: {{site.api}}flutter/material/ScaffoldMessenger-class.html +[`SnackBar`]: {{site.api}}flutter/material/SnackBar-class.html +[`MaterialApp`]: {{site.api}}flutter/material/MaterialApp-class.html +[Issue #57218]: {{site.repo.flutter}}issues/57218 +[Issue #62921]: {{site.repo.flutter}}issues/62921 +[ScaffoldMessenger]: {{site.repo.flutter}}pull/64101 +[ScaffoldMessenger Migration]: {{site.repo.flutter}}pull/64170 diff --git a/src/content/release/breaking-changes/scribble-text-input-client.md b/src/content/release/breaking-changes/scribble-text-input-client.md index 7ad13c1561..f9f62b3de9 100644 --- a/src/content/release/breaking-changes/scribble-text-input-client.md +++ b/src/content/release/breaking-changes/scribble-text-input-client.md @@ -81,11 +81,11 @@ In stable release: 2.10 API documentation: -* [`TextInputClient`]({{site.api}}/flutter/services/TextInputClient-class.html) +* [`TextInputClient`]({{site.api}}flutter/services/TextInputClient-class.html) Relevant issues: -* [Issue 61278]({{site.repo.flutter}}/issues/61278) +* [Issue 61278]({{site.repo.flutter}}issues/61278) Relevant PRs: @@ -93,6 +93,6 @@ Relevant PRs: * [75472: Support Scribble Handwriting][] * [97437: Re-land Support Scribble Handwriting][] -[24224: Support Scribble Handwriting (engine)]: {{site.repo.engine}}/pull/24224 -[97437: Re-land Support Scribble Handwriting]: {{site.repo.flutter}}/pull/97437 -[75472: Support Scribble Handwriting]: {{site.repo.flutter}}/pull/75472 +[24224: Support Scribble Handwriting (engine)]: {{site.repo.engine}}pull/24224 +[97437: Re-land Support Scribble Handwriting]: {{site.repo.flutter}}pull/97437 +[75472: Support Scribble Handwriting]: {{site.repo.flutter}}pull/75472 diff --git a/src/content/release/breaking-changes/scrollable-alert-dialog.md b/src/content/release/breaking-changes/scrollable-alert-dialog.md index a59082fcac..d2a5727c17 100644 --- a/src/content/release/breaking-changes/scrollable-alert-dialog.md +++ b/src/content/release/breaking-changes/scrollable-alert-dialog.md @@ -194,9 +194,9 @@ Relevant PRs: * [Revert of original attempt to implement scrollable `AlertDialog`][] -[`AlertDialog`]: {{site.api}}/flutter/material/AlertDialog-class.html -[Original attempt to implement scrollable `AlertDialog`]: {{site.repo.flutter}}/pull/43226 -[Overflow exceptions with maximum accessibility font size]: {{site.repo.flutter}}/issues/42696 -[Revert of original attempt to implement scrollable `AlertDialog`]: {{site.repo.flutter}}/pull/44003 +[`AlertDialog`]: {{site.api}}flutter/material/AlertDialog-class.html +[Original attempt to implement scrollable `AlertDialog`]: {{site.repo.flutter}}pull/43226 +[Overflow exceptions with maximum accessibility font size]: {{site.repo.flutter}}issues/42696 +[Revert of original attempt to implement scrollable `AlertDialog`]: {{site.repo.flutter}}pull/44003 [Scrollable `AlertDialog`]: /go/scrollable-alert-dialog -[Update to `AlertDialog.scrollable`]: {{site.repo.flutter}}/pull/45079 +[Update to `AlertDialog.scrollable`]: {{site.repo.flutter}}pull/45079 diff --git a/src/content/release/breaking-changes/services-scheduler-dependency-reversed.md b/src/content/release/breaking-changes/services-scheduler-dependency-reversed.md index e2d9c64aae..1214e2ae6c 100644 --- a/src/content/release/breaking-changes/services-scheduler-dependency-reversed.md +++ b/src/content/release/breaking-changes/services-scheduler-dependency-reversed.md @@ -65,7 +65,7 @@ Relevant PRs: * [Reverse dependency between services and scheduler][] * [Revert bindings dependency workaround][] -[Reverse dependency between services and scheduler]: {{site.repo.flutter}}/pull/54212 -[Revert bindings dependency workaround]: {{site.repo.flutter}}/pull/54286 -[`SchedulerBinding`]: {{site.api}}/flutter/scheduler/SchedulerBinding-mixin.html -[`ServicesBinding`]: {{site.api}}/flutter/scheduler/ServicesBinding-mixin.html +[Reverse dependency between services and scheduler]: {{site.repo.flutter}}pull/54212 +[Revert bindings dependency workaround]: {{site.repo.flutter}}pull/54286 +[`SchedulerBinding`]: {{site.api}}flutter/scheduler/SchedulerBinding-mixin.html +[`ServicesBinding`]: {{site.api}}flutter/scheduler/ServicesBinding-mixin.html diff --git a/src/content/release/breaking-changes/shortcut-key-event-migration.md b/src/content/release/breaking-changes/shortcut-key-event-migration.md index be75e5458d..d759719110 100644 --- a/src/content/release/breaking-changes/shortcut-key-event-migration.md +++ b/src/content/release/breaking-changes/shortcut-key-event-migration.md @@ -165,9 +165,9 @@ Relevant PRs: * [Prepare ShortcutActivator and ShortcutManager to migrate to KeyEvent from RawKeyEvent][] -[`KeyEvent`]: {{site.api}}/flutter/services/KeyEvent-class.html -[`HardwareKeyboard`]: {{site.api}}/flutter/services/HardwareKeyboard-class.html -[`ShortcutActivator`]: {{site.api}}/flutter/widgets/ShortcutActivator-class.html -[`ShortcutManager`]: {{site.api}}/flutter/widgets/ShortcutManager-class.html -[`RawKeyEvent` and `RawKeyboard`, et al should be deprecated and removed (Issue 136419)]: {{site.repo.flutter}}/issues/136419 -[Prepare ShortcutActivator and ShortcutManager to migrate to KeyEvent from RawKeyEvent]: {{site.repo.flutter}}/pull/136854 +[`KeyEvent`]: {{site.api}}flutter/services/KeyEvent-class.html +[`HardwareKeyboard`]: {{site.api}}flutter/services/HardwareKeyboard-class.html +[`ShortcutActivator`]: {{site.api}}flutter/widgets/ShortcutActivator-class.html +[`ShortcutManager`]: {{site.api}}flutter/widgets/ShortcutManager-class.html +[`RawKeyEvent` and `RawKeyboard`, et al should be deprecated and removed (Issue 136419)]: {{site.repo.flutter}}issues/136419 +[Prepare ShortcutActivator and ShortcutManager to migrate to KeyEvent from RawKeyEvent]: {{site.repo.flutter}}pull/136854 diff --git a/src/content/release/breaking-changes/splash-screen-migration.md b/src/content/release/breaking-changes/splash-screen-migration.md index 072cfde10b..4e8e5dbeb0 100644 --- a/src/content/release/breaking-changes/splash-screen-migration.md +++ b/src/content/release/breaking-changes/splash-screen-migration.md @@ -125,6 +125,6 @@ prior to the 2.5 release. ``` -[`provideSplashScreen`]: {{site.api}}/javadoc/io/flutter/embedding/android/SplashScreenProvider.html#provideSplashScreen-- -[`FlutterActivity`]: {{site.api}}/javadoc/io/flutter/embedding/android/FlutterActivity.html +[`provideSplashScreen`]: {{site.api}}javadoc/io/flutter/embedding/android/SplashScreenProvider.html#provideSplashScreen-- +[`FlutterActivity`]: {{site.api}}javadoc/io/flutter/embedding/android/FlutterActivity.html [define a launch theme]: /platform-integration/android/splash-screen diff --git a/src/content/release/breaking-changes/supplemental-maybeOf-migration.md b/src/content/release/breaking-changes/supplemental-maybeOf-migration.md index bba07b8859..891238b97d 100644 --- a/src/content/release/breaking-changes/supplemental-maybeOf-migration.md +++ b/src/content/release/breaking-changes/supplemental-maybeOf-migration.md @@ -133,36 +133,36 @@ Relevant PRs: * [Add `Overlay.maybeOf`, make `Overlay.of` return a non-nullable instance][] [previous migration]: /release/breaking-changes/eliminating-nullok-parameters -[`unnecessary_non_null_assertion`]: {{site.dart-site}}/tools/diagnostic-messages#unnecessary_non_null_assertion -[`unnecessary_null_checks`]: {{site.dart-site}}/tools/linter-rules#unnecessary_null_checks -[`unnecessary_null_in_if_null_operators`]: {{site.dart-site}}/tools/linter-rules#unnecessary_null_in_if_null_operators -[`unnecessary_nullable_for_final_variable_declarations`]: {{site.dart-site}}/tools/linter-rules#unnecessary_nullable_for_final_variable_declarations -[`AutofillGroup.maybeOf`]: {{site.api}}/flutter/widgets/AutofillGroup/maybeOf.html -[`AutofillGroup.of`]: {{site.api}}/flutter/widgets/AutofillGroup/of.html -[`DefaultTabController.maybeOf`]: {{site.api}}/flutter/material/DefaultTabController/maybeOf.html -[`DefaultTabController.of`]: {{site.api}}/flutter/material/DefaultTabController/of.html -[`DefaultTextHeightBehavior.maybeOf`]: {{site.api}}/flutter/widgets/DefaultTextHeightBehavior/maybeOf.html -[`DefaultTextHeightBehavior.of`]: {{site.api}}/flutter/widgets/DefaultTextHeightBehavior/of.html -[`Form.maybeOf`]: {{site.api}}/flutter/widgets/Form/maybeOf.html -[`Form.of`]: {{site.api}}/flutter/widgets/Form/of.html -[`HeroControllerScope.maybeOf`]: {{site.api}}/flutter/widgets/HeroControllerScope/maybeOf.html -[`HeroControllerScope.of`]: {{site.api}}/flutter/widgets/HeroControllerScope/of.html -[`InheritedWidget`]: {{site.api}}/flutter/widgets/InheritedWidget-class.html -[`Material.maybeOf`]: {{site.api}}/flutter/material/Material/maybeOf.html -[`Material.of`]: {{site.api}}/flutter/material/Material/of.html -[`Overlay.maybeOf`]: {{site.api}}/flutter/widgets/Overlay/maybeOf.html -[`Overlay.of`]: {{site.api}}/flutter/widgets/Overlay/of.html -[`PageStorage.maybeOf`]: {{site.api}}/flutter/widgets/PageStorage/maybeOf.html -[`PageStorage.of`]: {{site.api}}/flutter/widgets/PageStorage/of.html -[`PrimaryScrollController.maybeOf`]: {{site.api}}/flutter/widgets/PrimaryScrollController/maybeOf.html -[`PrimaryScrollController.of`]: {{site.api}}/flutter/widgets/PrimaryScrollController/of.html -[`RenderAbstractViewport.maybeOf`]: {{site.api}}/flutter/rendering/RenderAbstractViewport/maybeOf.html -[`RenderAbstractViewport.of`]: {{site.api}}/flutter/rendering/RenderAbstractViewport/of.html -[`RestorationScope.maybeOf`]: {{site.api}}/flutter/widgets/RestorationScope/maybeOf.html -[`RestorationScope.of`]: {{site.api}}/flutter/widgets/RestorationScope/of.html -[`Scrollable.maybeOf`]: {{site.api}}/flutter/widgets/Scrollable/maybeOf.html -[`Scrollable.of`]: {{site.api}}/flutter/widgets/Scrollable/of.html -[`ScrollNotificationObserver.maybeOf`]: {{site.api}}/flutter/widgets/ScrollNotificationObserver/maybeOf.html -[`ScrollNotificationObserver.of`]: {{site.api}}/flutter/widgets/ScrollNotificationObserver/of.html -[Add `maybeOf` for all the cases when `of` returns nullable]: {{site.repo.flutter}}/pull/114120 -[Add `Overlay.maybeOf`, make `Overlay.of` return a non-nullable instance]: {{site.repo.flutter}}/pull/110811 +[`unnecessary_non_null_assertion`]: {{site.dart-site}}tools/diagnostic-messages#unnecessary_non_null_assertion +[`unnecessary_null_checks`]: {{site.dart-site}}tools/linter-rules#unnecessary_null_checks +[`unnecessary_null_in_if_null_operators`]: {{site.dart-site}}tools/linter-rules#unnecessary_null_in_if_null_operators +[`unnecessary_nullable_for_final_variable_declarations`]: {{site.dart-site}}tools/linter-rules#unnecessary_nullable_for_final_variable_declarations +[`AutofillGroup.maybeOf`]: {{site.api}}flutter/widgets/AutofillGroup/maybeOf.html +[`AutofillGroup.of`]: {{site.api}}flutter/widgets/AutofillGroup/of.html +[`DefaultTabController.maybeOf`]: {{site.api}}flutter/material/DefaultTabController/maybeOf.html +[`DefaultTabController.of`]: {{site.api}}flutter/material/DefaultTabController/of.html +[`DefaultTextHeightBehavior.maybeOf`]: {{site.api}}flutter/widgets/DefaultTextHeightBehavior/maybeOf.html +[`DefaultTextHeightBehavior.of`]: {{site.api}}flutter/widgets/DefaultTextHeightBehavior/of.html +[`Form.maybeOf`]: {{site.api}}flutter/widgets/Form/maybeOf.html +[`Form.of`]: {{site.api}}flutter/widgets/Form/of.html +[`HeroControllerScope.maybeOf`]: {{site.api}}flutter/widgets/HeroControllerScope/maybeOf.html +[`HeroControllerScope.of`]: {{site.api}}flutter/widgets/HeroControllerScope/of.html +[`InheritedWidget`]: {{site.api}}flutter/widgets/InheritedWidget-class.html +[`Material.maybeOf`]: {{site.api}}flutter/material/Material/maybeOf.html +[`Material.of`]: {{site.api}}flutter/material/Material/of.html +[`Overlay.maybeOf`]: {{site.api}}flutter/widgets/Overlay/maybeOf.html +[`Overlay.of`]: {{site.api}}flutter/widgets/Overlay/of.html +[`PageStorage.maybeOf`]: {{site.api}}flutter/widgets/PageStorage/maybeOf.html +[`PageStorage.of`]: {{site.api}}flutter/widgets/PageStorage/of.html +[`PrimaryScrollController.maybeOf`]: {{site.api}}flutter/widgets/PrimaryScrollController/maybeOf.html +[`PrimaryScrollController.of`]: {{site.api}}flutter/widgets/PrimaryScrollController/of.html +[`RenderAbstractViewport.maybeOf`]: {{site.api}}flutter/rendering/RenderAbstractViewport/maybeOf.html +[`RenderAbstractViewport.of`]: {{site.api}}flutter/rendering/RenderAbstractViewport/of.html +[`RestorationScope.maybeOf`]: {{site.api}}flutter/widgets/RestorationScope/maybeOf.html +[`RestorationScope.of`]: {{site.api}}flutter/widgets/RestorationScope/of.html +[`Scrollable.maybeOf`]: {{site.api}}flutter/widgets/Scrollable/maybeOf.html +[`Scrollable.of`]: {{site.api}}flutter/widgets/Scrollable/of.html +[`ScrollNotificationObserver.maybeOf`]: {{site.api}}flutter/widgets/ScrollNotificationObserver/maybeOf.html +[`ScrollNotificationObserver.of`]: {{site.api}}flutter/widgets/ScrollNotificationObserver/of.html +[Add `maybeOf` for all the cases when `of` returns nullable]: {{site.repo.flutter}}pull/114120 +[Add `Overlay.maybeOf`, make `Overlay.of` return a non-nullable instance]: {{site.repo.flutter}}pull/110811 diff --git a/src/content/release/breaking-changes/tab-alignment.md b/src/content/release/breaking-changes/tab-alignment.md index 91097c6247..a239e2a68a 100644 --- a/src/content/release/breaking-changes/tab-alignment.md +++ b/src/content/release/breaking-changes/tab-alignment.md @@ -102,9 +102,9 @@ Relevant PRs: * [Introduce `TabBar.tabAlignment`][] * [Fix Material 3 Scrollable `TabBar`][] -[`TabBar`]: {{site.api}}/flutter/material/TabBar-class.html -[`TabBar.tabAlignment`]: {{site.api}}/flutter/material/TabBar/tabAlignment.html -[`TabAlignment`]: {{site.api}}/flutter/material/TabAlignment.html +[`TabBar`]: {{site.api}}flutter/material/TabBar-class.html +[`TabBar.tabAlignment`]: {{site.api}}flutter/material/TabBar/tabAlignment.html +[`TabAlignment`]: {{site.api}}flutter/material/TabAlignment.html -[Introduce `TabBar.tabAlignment`]: {{site.repo.flutter}}/pull/125036 -[Fix Material 3 Scrollable `TabBar`]: {{site.repo.flutter}}/pull/131409 +[Introduce `TabBar.tabAlignment`]: {{site.repo.flutter}}pull/125036 +[Fix Material 3 Scrollable `TabBar`]: {{site.repo.flutter}}pull/131409 diff --git a/src/content/release/breaking-changes/target-platform-linux-windows.md b/src/content/release/breaking-changes/target-platform-linux-windows.md index 90ebbb0dcf..8c7a1de240 100644 --- a/src/content/release/breaking-changes/target-platform-linux-windows.md +++ b/src/content/release/breaking-changes/target-platform-linux-windows.md @@ -163,8 +163,8 @@ Relevant PR: * [Add Windows, and Linux as TargetPlatforms][] -[Add Windows, and Linux as TargetPlatforms]: {{site.repo.flutter}}/pull/51519 -[`debugDefaultTargetPlatformOverride`]: {{site.api}}/flutter/foundation/debugDefaultTargetPlatformOverride.html -[Issue #31366]: {{site.repo.flutter}}/issues/31366 -[`missing_enum_constant_in_switch`]: {{site.dart-site}}/tools/diagnostic-messages#missing_enum_constant_in_switch -[`TargetPlatform`]: {{site.api}}/flutter/foundation/TargetPlatform-class.html +[Add Windows, and Linux as TargetPlatforms]: {{site.repo.flutter}}pull/51519 +[`debugDefaultTargetPlatformOverride`]: {{site.api}}flutter/foundation/debugDefaultTargetPlatformOverride.html +[Issue #31366]: {{site.repo.flutter}}issues/31366 +[`missing_enum_constant_in_switch`]: {{site.dart-site}}tools/diagnostic-messages#missing_enum_constant_in_switch +[`TargetPlatform`]: {{site.api}}flutter/foundation/TargetPlatform-class.html diff --git a/src/content/release/breaking-changes/template.md b/src/content/release/breaking-changes/template.md index aed24f0063..377ec2e1b4 100644 --- a/src/content/release/breaking-changes/template.md +++ b/src/content/release/breaking-changes/template.md @@ -182,15 +182,15 @@ Relevant PRs: and a main channel (main-api) link. -[`ClassName`]: {{site.api}}/flutter/[link_to_relevant_page].html +[`ClassName`]: {{site.api}}flutter/[link_to_relevant_page].html {% include docs/main-api.md %} -[`ClassName`]: {{site.main-api}}/flutter/[link_to_relevant_page].html +[`ClassName`]: {{site.main-api}}flutter/[link_to_relevant_page].html -[Issue xxxx]: {{site.repo.flutter}}/issues/[link_to_actual_issue] -[Issue yyyy]: {{site.repo.flutter}}/issues/[link_to_actual_issue] -[PR title #1]: {{site.repo.flutter}}/pull/[link_to_actual_pr] -[PR title #2]: {{site.repo.flutter}}/pull/[link_to_actual_pr] +[Issue xxxx]: {{site.repo.flutter}}issues/[link_to_actual_issue] +[Issue yyyy]: {{site.repo.flutter}}issues/[link_to_actual_issue] +[PR title #1]: {{site.repo.flutter}}pull/[link_to_actual_pr] +[PR title #2]: {{site.repo.flutter}}pull/[link_to_actual_pr] {% endcomment %} diff --git a/src/content/release/breaking-changes/test-text-input.md b/src/content/release/breaking-changes/test-text-input.md index 9389a33a7d..311f5e34d0 100644 --- a/src/content/release/breaking-changes/test-text-input.md +++ b/src/content/release/breaking-changes/test-text-input.md @@ -120,7 +120,7 @@ Relevant PR: * [Reset state between tests][] -[Randomize test order to avoid global state]: {{site.repo.flutter}}/issues/47233 -[Reset state between tests]: {{site.repo.flutter}}/pull/47464 -[`TestTextInput`]: {{site.api}}/flutter/flutter_test/TestTextInput-class.html -[`WidgetTester`]: {{site.api}}/flutter/flutter_test/WidgetTester-class.html +[Randomize test order to avoid global state]: {{site.repo.flutter}}issues/47233 +[Reset state between tests]: {{site.repo.flutter}}pull/47464 +[`TestTextInput`]: {{site.api}}flutter/flutter_test/TestTextInput-class.html +[`WidgetTester`]: {{site.api}}flutter/flutter_test/WidgetTester-class.html diff --git a/src/content/release/breaking-changes/test-widgets-flutter-binding-clock.md b/src/content/release/breaking-changes/test-widgets-flutter-binding-clock.md index 9228045902..d6db48d14a 100644 --- a/src/content/release/breaking-changes/test-widgets-flutter-binding-clock.md +++ b/src/content/release/breaking-changes/test-widgets-flutter-binding-clock.md @@ -113,5 +113,5 @@ Relevant PRs: * [PR 54125][]: remove flutter_test quiver dep, use fake_async and clock instead -[`TestWidgetsFlutterBinding`]: {{site.api}}/flutter/flutter_test/TestWidgetsFlutterBinding-class.html -[PR 54125]: {{site.repo.flutter}}/pull/54125 +[`TestWidgetsFlutterBinding`]: {{site.api}}flutter/flutter_test/TestWidgetsFlutterBinding-class.html +[PR 54125]: {{site.repo.flutter}}pull/54125 diff --git a/src/content/release/breaking-changes/text-field-material-localizations.md b/src/content/release/breaking-changes/text-field-material-localizations.md index 9d99302657..1b20435a32 100644 --- a/src/content/release/breaking-changes/text-field-material-localizations.md +++ b/src/content/release/breaking-changes/text-field-material-localizations.md @@ -132,10 +132,10 @@ Relevant PR: * [PR 58831: Assert debugCheckHasMaterialLocalizations on TextField][] -[`TextField`]: {{site.api}}/flutter/material/TextField-class.html -[`Localizations`]: {{site.api}}/flutter/widgets/Localizations-class.html -[`MaterialLocalizations`]: {{site.api}}/flutter/material/MaterialLocalizations-class.html -[`DefaultMaterialLocalizations`]: {{site.api}}/flutter/material/DefaultMaterialLocalizations-class.html -[`MaterialApp`]: {{site.api}}/flutter/material/MaterialApp-class.html +[`TextField`]: {{site.api}}flutter/material/TextField-class.html +[`Localizations`]: {{site.api}}flutter/widgets/Localizations-class.html +[`MaterialLocalizations`]: {{site.api}}flutter/material/MaterialLocalizations-class.html +[`DefaultMaterialLocalizations`]: {{site.api}}flutter/material/DefaultMaterialLocalizations-class.html +[`MaterialApp`]: {{site.api}}flutter/material/MaterialApp-class.html [Internationalizing Flutter apps]: /ui/accessibility-and-internationalization/internationalization -[PR 58831: Assert debugCheckHasMaterialLocalizations on TextField]: {{site.repo.flutter}}/pull/58831 +[PR 58831: Assert debugCheckHasMaterialLocalizations on TextField]: {{site.repo.flutter}}pull/58831 diff --git a/src/content/release/breaking-changes/text-input-client-current-value.md b/src/content/release/breaking-changes/text-input-client-current-value.md index cbe3026334..6563ecf428 100644 --- a/src/content/release/breaking-changes/text-input-client-current-value.md +++ b/src/content/release/breaking-changes/text-input-client-current-value.md @@ -154,9 +154,9 @@ Relevant PR: * [Fix requestExistingInputState response][] -[`EditableText`]: {{site.api}}/flutter/widgets/EditableText-class.html -[Fix requestExistingInputState response]: {{site.repo.flutter}}/pull/47472 -[Issue 47137]: {{site.repo.flutter}}/issues/47137 -[`TextInput`]: {{site.api}}/flutter/services/TextInput-class.html -[`TextInputClient`]: {{site.api}}/flutter/services/TextInputClient-class.html -[`SystemChannels.textInput`]: {{site.api}}/flutter/services/SystemChannels/textInput-constant.html +[`EditableText`]: {{site.api}}flutter/widgets/EditableText-class.html +[Fix requestExistingInputState response]: {{site.repo.flutter}}pull/47472 +[Issue 47137]: {{site.repo.flutter}}issues/47137 +[`TextInput`]: {{site.api}}flutter/services/TextInput-class.html +[`TextInputClient`]: {{site.api}}flutter/services/TextInputClient-class.html +[`SystemChannels.textInput`]: {{site.api}}flutter/services/SystemChannels/textInput-constant.html diff --git a/src/content/release/breaking-changes/text-selection-theme.md b/src/content/release/breaking-changes/text-selection-theme.md index a3ab87ff65..9eae2d6b23 100644 --- a/src/content/release/breaking-changes/text-selection-theme.md +++ b/src/content/release/breaking-changes/text-selection-theme.md @@ -117,7 +117,7 @@ Relevant PRs: * [PR 62014: TextSelectionTheme support][] [Material Theme Updates]: /go/material-theme-system-updates -[PR 62014: TextSelectionTheme support]: {{site.repo.flutter}}/pull/62014 +[PR 62014: TextSelectionTheme support]: {{site.repo.flutter}}pull/62014 [Text Selection Theme]: /go/text-selection-theme -[`TextSelectionThemeData`]: {{site.api}}/flutter/material/TextSelectionThemeData-class.html -[`ThemeData`]: {{site.api}}/flutter/material/ThemeData-class.html +[`TextSelectionThemeData`]: {{site.api}}flutter/material/TextSelectionThemeData-class.html +[`ThemeData`]: {{site.api}}flutter/material/ThemeData-class.html diff --git a/src/content/release/breaking-changes/theme-data-accent-properties.md b/src/content/release/breaking-changes/theme-data-accent-properties.md index 6205aaec13..f8ccc98fe2 100644 --- a/src/content/release/breaking-changes/theme-data-accent-properties.md +++ b/src/content/release/breaking-changes/theme-data-accent-properties.md @@ -165,27 +165,27 @@ Other: * [Material Theme System Updates][] -[accentColor]: {{site.api}}/flutter/material/ThemeData/accentColor.html -[accentColorBrightness]: {{site.api}}/flutter/material/ThemeData/accentColorBrightness.html -[accentIconTheme]: {{site.api}}/flutter/material/ThemeData/accentIconTheme.html -[accentTextTheme]: {{site.api}}/flutter/material/ThemeData/accentTextTheme.html -[`CheckboxTheme`]: {{site.api}}/flutter/material/CheckboxTheme-class.html -[color-scheme-prop]: {{site.api}}/flutter/material/ThemeData/colorScheme.html -[`colorScheme.onSecondary`]: {{site.api}}/flutter/material/ColorScheme/onSecondary.html -[`colorScheme.secondary`]: {{site.api}}/flutter/material/ColorScheme/secondary.html -[`ColorScheme`]: {{site.api}}/flutter/material/ColorScheme-class.html -[Issue #56918]: {{site.repo.flutter}}/issues/56918 +[accentColor]: {{site.api}}flutter/material/ThemeData/accentColor.html +[accentColorBrightness]: {{site.api}}flutter/material/ThemeData/accentColorBrightness.html +[accentIconTheme]: {{site.api}}flutter/material/ThemeData/accentIconTheme.html +[accentTextTheme]: {{site.api}}flutter/material/ThemeData/accentTextTheme.html +[`CheckboxTheme`]: {{site.api}}flutter/material/CheckboxTheme-class.html +[color-scheme-prop]: {{site.api}}flutter/material/ThemeData/colorScheme.html +[`colorScheme.onSecondary`]: {{site.api}}flutter/material/ColorScheme/onSecondary.html +[`colorScheme.secondary`]: {{site.api}}flutter/material/ColorScheme/secondary.html +[`ColorScheme`]: {{site.api}}flutter/material/ColorScheme-class.html +[Issue #56918]: {{site.repo.flutter}}issues/56918 [FloatingActionButton and ThemeData's accent properties]: /release/breaking-changes/fab-theme-data-accent-properties -[`FloatingActionButton`]: {{site.api}}/flutter/material/FloatingActionButton-class.html -[`FloatingActionButtonThemeData`]: {{site.api}}/flutter/material/FloatingActionButtonThemeData-class.html -[Material Design spec]: {{site.material}}/styles/color +[`FloatingActionButton`]: {{site.api}}flutter/material/FloatingActionButton-class.html +[`FloatingActionButtonThemeData`]: {{site.api}}flutter/material/FloatingActionButtonThemeData-class.html +[Material Design spec]: {{site.material}}styles/color [Material Theme System Updates]: /go/material-theme-system-updates -[secondary color]: {{site.api}}/flutter/material/ColorScheme/secondary.html -[onSecondary color]: {{site.api}}/flutter/material/ColorScheme/onSecondary.html -[PR #81336]: {{site.repo.flutter}}/pull/81336 -[`TextStyle`]: {{site.api}}/flutter/painting/TextStyle-class.html -[text-scheme-prop]: {{site.api}}/flutter/material/ThemeData/textTheme.html -[`TextTheme`]: {{site.api}}/flutter/material/TextTheme-class.html -[`Theme`]: {{site.api}}/flutter/material/Theme-class.html -[`ThemeData`]: {{site.api}}/flutter/material/ThemeData-class.html -[`ThemeData.estimateBrightnessForColor()`]: {{site.api}}/flutter/material/ThemeData/estimateBrightnessForColor.html +[secondary color]: {{site.api}}flutter/material/ColorScheme/secondary.html +[onSecondary color]: {{site.api}}flutter/material/ColorScheme/onSecondary.html +[PR #81336]: {{site.repo.flutter}}pull/81336 +[`TextStyle`]: {{site.api}}flutter/painting/TextStyle-class.html +[text-scheme-prop]: {{site.api}}flutter/material/ThemeData/textTheme.html +[`TextTheme`]: {{site.api}}flutter/material/TextTheme-class.html +[`Theme`]: {{site.api}}flutter/material/Theme-class.html +[`ThemeData`]: {{site.api}}flutter/material/ThemeData-class.html +[`ThemeData.estimateBrightnessForColor()`]: {{site.api}}flutter/material/ThemeData/estimateBrightnessForColor.html diff --git a/src/content/release/breaking-changes/toggleable-active-color.md b/src/content/release/breaking-changes/toggleable-active-color.md index f034c937fb..ff1026e782 100644 --- a/src/content/release/breaking-changes/toggleable-active-color.md +++ b/src/content/release/breaking-changes/toggleable-active-color.md @@ -118,7 +118,7 @@ Relevant PRs: * [Deprecate `toggleableActiveColor`][]. -[`ThemeData.toggleableActiveColor`]: {{site.api}}/flutter/material/ThemeData/toggleableActiveColor.html -[`ColorScheme.secondary`]: {{site.api}}/flutter/material/ColorScheme/secondary.html -[`Switch` widget color doesn't use `ColorScheme`]: {{site.repo.flutter}}/issues/93709 -[Deprecate `toggleableActiveColor`]: {{site.repo.flutter}}/pull/97972 +[`ThemeData.toggleableActiveColor`]: {{site.api}}flutter/material/ThemeData/toggleableActiveColor.html +[`ColorScheme.secondary`]: {{site.api}}flutter/material/ColorScheme/secondary.html +[`Switch` widget color doesn't use `ColorScheme`]: {{site.repo.flutter}}issues/93709 +[Deprecate `toggleableActiveColor`]: {{site.repo.flutter}}pull/97972 diff --git a/src/content/release/breaking-changes/tooltip-semantics-order.md b/src/content/release/breaking-changes/tooltip-semantics-order.md index 603c83bc8f..46b6f59574 100644 --- a/src/content/release/breaking-changes/tooltip-semantics-order.md +++ b/src/content/release/breaking-changes/tooltip-semantics-order.md @@ -140,5 +140,5 @@ Relevant PRs: * [OverlayPortal.overlayChild contributes semantics to OverlayPortal instead of Overlay][] -[`Tooltip`]: {{site.api}}/flutter/material/Tooltip-class.html -[OverlayPortal.overlayChild contributes semantics to OverlayPortal instead of Overlay]: {{site.repo.flutter}}/pull/134921 +[`Tooltip`]: {{site.api}}flutter/material/Tooltip-class.html +[OverlayPortal.overlayChild contributes semantics to OverlayPortal instead of Overlay]: {{site.repo.flutter}}pull/134921 diff --git a/src/content/release/breaking-changes/trackpad-gestures.md b/src/content/release/breaking-changes/trackpad-gestures.md index 2da7033452..af0aaabb1d 100644 --- a/src/content/release/breaking-changes/trackpad-gestures.md +++ b/src/content/release/breaking-changes/trackpad-gestures.md @@ -573,14 +573,14 @@ Relevant PRs: * [Win32 trackpad gestures][] * [ChromeOS/Android trackpad gestures][] -[`GestureDetector`]: {{site.api}}/flutter/widgets/GestureDetector-class.html -[`GestureRecognizer`]: {{site.api}}/flutter/gestures/GestureRecognizer-class.html -[`RawGestureDetector`]: {{site.api}}/flutter/widgets/RawGestureDetector-class.html +[`GestureDetector`]: {{site.api}}flutter/widgets/GestureDetector-class.html +[`GestureRecognizer`]: {{site.api}}flutter/gestures/GestureRecognizer-class.html +[`RawGestureDetector`]: {{site.api}}flutter/widgets/RawGestureDetector-class.html [Flutter Trackpad Gestures]: https://docs.google.com/document/d/1oRvebwjpsC3KlxN1gOYnEdxtNpQDYpPtUFAkmTUe-K8 -[Issue 23604]: {{site.repo.flutter}}/issues/23604 -[Support trackpad gestures in framework]: {{site.repo.flutter}}/pull/89944 -[iPad trackpad gestures]: {{site.repo.engine}}/pull/31591 -[Linux trackpad gestures]: {{site.repo.engine}}/pull/31592 -[Mac trackpad gestures]: {{site.repo.engine}}/pull/31593 -[Win32 trackpad gestures]: {{site.repo.engine}}/pull/31594 -[ChromeOS/Android trackpad gestures]: {{site.repo.engine}}/pull/34060 +[Issue 23604]: {{site.repo.flutter}}issues/23604 +[Support trackpad gestures in framework]: {{site.repo.flutter}}pull/89944 +[iPad trackpad gestures]: {{site.repo.engine}}pull/31591 +[Linux trackpad gestures]: {{site.repo.engine}}pull/31592 +[Mac trackpad gestures]: {{site.repo.engine}}pull/31593 +[Win32 trackpad gestures]: {{site.repo.engine}}pull/31594 +[ChromeOS/Android trackpad gestures]: {{site.repo.engine}}pull/34060 diff --git a/src/content/release/breaking-changes/use-maxLengthEnforcement-instead-of-maxLengthEnforced.md b/src/content/release/breaking-changes/use-maxLengthEnforcement-instead-of-maxLengthEnforced.md index 0fc7844e6c..560418e2ed 100644 --- a/src/content/release/breaking-changes/use-maxLengthEnforcement-instead-of-maxLengthEnforced.md +++ b/src/content/release/breaking-changes/use-maxLengthEnforcement-instead-of-maxLengthEnforced.md @@ -244,10 +244,10 @@ Relevant PR: * [PR 68086][]: Introduce `MaxLengthEnforcement` [`MaxLengthEnforcement` design doc]: /go/max-length-enforcement -[`MaxLengthEnforcement`]: {{site.api}}/flutter/services/MaxLengthEnforcement.html -[`LengthLimitingTextInputFormatter`]: {{site.api}}/flutter/services/LengthLimitingTextInputFormatter-class.html -[`maxLength`]: {{site.api}}/flutter/services/LengthLimitingTextInputFormatter/maxLength.html -[Issue 63753]: {{site.repo.flutter}}/issues/63753 -[Issue 67898]: {{site.repo.flutter}}/issues/67898 -[PR 63754]: {{site.github}}//flutter/flutter/pull/63754 -[PR 68086]: {{site.repo.flutter}}/pull/68086 +[`MaxLengthEnforcement`]: {{site.api}}flutter/services/MaxLengthEnforcement.html +[`LengthLimitingTextInputFormatter`]: {{site.api}}flutter/services/LengthLimitingTextInputFormatter-class.html +[`maxLength`]: {{site.api}}flutter/services/LengthLimitingTextInputFormatter/maxLength.html +[Issue 63753]: {{site.repo.flutter}}issues/63753 +[Issue 67898]: {{site.repo.flutter}}issues/67898 +[PR 63754]: {{site.github}}/flutter/flutter/pull/63754 +[PR 68086]: {{site.repo.flutter}}pull/68086 diff --git a/src/content/release/breaking-changes/win-lifecycle-process-function.md b/src/content/release/breaking-changes/win-lifecycle-process-function.md index 8a5b5951ab..7deadef292 100644 --- a/src/content/release/breaking-changes/win-lifecycle-process-function.md +++ b/src/content/release/breaking-changes/win-lifecycle-process-function.md @@ -54,4 +54,4 @@ Relevant PRs: * [Reintroduce Windows lifecycle with guard for posthumous OnWindowStateEvent][] -[Reintroduce Windows lifecycle with guard for posthumous OnWindowStateEvent]: {{site.repo.engine}}/pull/44344 +[Reintroduce Windows lifecycle with guard for posthumous OnWindowStateEvent]: {{site.repo.engine}}pull/44344 diff --git a/src/content/release/breaking-changes/window-singleton.md b/src/content/release/breaking-changes/window-singleton.md index dd11c0028d..bf97604c24 100644 --- a/src/content/release/breaking-changes/window-singleton.md +++ b/src/content/release/breaking-changes/window-singleton.md @@ -366,15 +366,15 @@ Relevant PRs: * [Deprecates `TestWindow`][] -[`View.of`]: {{site.api}}/flutter/widgets/View/of.html -[`FlutterView`]: {{site.api}}/flutter/dart-ui/FlutterView-class.html -[`PlatformDispatcher`]: {{site.api}}/flutter/dart-ui/PlatformDispatcher-class.html -[`TestPlatformDispatcher`]: {{site.api}}/flutter/flutter_test/TestPlatformDispatcher-class.html -[`TestFlutterView`]: {{site.api}}/flutter/flutter_test/TestFlutterView-class.html -[`TestWidgetsFlutterBinding.window`]: {{site.api}}/flutter/flutter_test/TestWidgetsFlutterBinding/window.html -[Issue 116929]: {{site.repo.flutter}}/issues/116929 -[Issue 117481]: {{site.repo.flutter}}/issues/117481 -[Issue 121915]: {{site.repo.flutter}}/issues/121915 -[Deprecate SingletonFlutterWindow and global window singleton]: {{site.repo.engine}}/pull/39302 -[Deprecate BindingBase.window]: {{site.repo.flutter}}/pull/120998 -[Deprecates `TestWindow`]: {{site.repo.flutter}}/pull/122824 +[`View.of`]: {{site.api}}flutter/widgets/View/of.html +[`FlutterView`]: {{site.api}}flutter/dart-ui/FlutterView-class.html +[`PlatformDispatcher`]: {{site.api}}flutter/dart-ui/PlatformDispatcher-class.html +[`TestPlatformDispatcher`]: {{site.api}}flutter/flutter_test/TestPlatformDispatcher-class.html +[`TestFlutterView`]: {{site.api}}flutter/flutter_test/TestFlutterView-class.html +[`TestWidgetsFlutterBinding.window`]: {{site.api}}flutter/flutter_test/TestWidgetsFlutterBinding/window.html +[Issue 116929]: {{site.repo.flutter}}issues/116929 +[Issue 117481]: {{site.repo.flutter}}issues/117481 +[Issue 121915]: {{site.repo.flutter}}issues/121915 +[Deprecate SingletonFlutterWindow and global window singleton]: {{site.repo.engine}}pull/39302 +[Deprecate BindingBase.window]: {{site.repo.flutter}}pull/120998 +[Deprecates `TestWindow`]: {{site.repo.flutter}}pull/122824 diff --git a/src/content/release/breaking-changes/windows-build-architecture.md b/src/content/release/breaking-changes/windows-build-architecture.md index 63a02fb1c1..1a854e9821 100644 --- a/src/content/release/breaking-changes/windows-build-architecture.md +++ b/src/content/release/breaking-changes/windows-build-architecture.md @@ -42,7 +42,7 @@ build\windows\arm64\runner\Release\hello_world.exe If you use [`package:msix`][], update to version 3.16.7 or newer. -[`package:msix`]: {{site.pub-pkg}}/msix +[`package:msix`]: {{site.pub-pkg}}msix ## Timeline @@ -60,4 +60,4 @@ Relevant pull requests: * [Introduce architecture subdirectory for Windows build][] [flutter.dev/go/windows-arm64]: {{site.main-url}}/go/windows-arm64 -[Introduce architecture subdirectory for Windows build]: {{site.repo.flutter}}/pull/131843 +[Introduce architecture subdirectory for Windows build]: {{site.repo.flutter}}pull/131843 diff --git a/src/content/release/breaking-changes/windows-dark-mode.md b/src/content/release/breaking-changes/windows-dark-mode.md index b8a03ce777..43d6a4e2b1 100644 --- a/src/content/release/breaking-changes/windows-dark-mode.md +++ b/src/content/release/breaking-changes/windows-dark-mode.md @@ -41,5 +41,5 @@ flutter_window.obj : error LNK2019: unresolved external symbol "public: void __c [Flutter Gallery][] app. [run loop migration guide]: /release/breaking-changes/windows-run-loop -[PR 862]: {{site.repo.gallery-archive}}/pull/862/files +[PR 862]: {{site.repo.gallery-archive}}pull/862/files [Flutter Gallery]: {{site.gallery-archive}} \ No newline at end of file diff --git a/src/content/release/breaking-changes/windows-show-window-migration.md b/src/content/release/breaking-changes/windows-show-window-migration.md index 2e476441d6..43195be2cc 100644 --- a/src/content/release/breaking-changes/windows-show-window-migration.md +++ b/src/content/release/breaking-changes/windows-show-window-migration.md @@ -7,7 +7,7 @@ Flutter 3.13 fixed a [bug][] that could result in the window not being shown. Windows projects created using Flutter 3.7 or Flutter 3.10 need to be migrated to fix this issue. -[bug]: {{site.repo.flutter}}/issues/119415 +[bug]: {{site.repo.flutter}}issues/119415 ## Migration steps @@ -47,5 +47,5 @@ flutter_controller_->ForceRedraw(); [PR 995][] shows the migration work for the [Flutter Gallery][] app. -[PR 995]: {{site.repo.gallery-archive}}/pull/995/files +[PR 995]: {{site.repo.gallery-archive}}pull/995/files [Flutter Gallery]: {{site.gallery-archive}} \ No newline at end of file diff --git a/src/content/release/breaking-changes/windows-version-information.md b/src/content/release/breaking-changes/windows-version-information.md index e1f60fab73..1e25292112 100644 --- a/src/content/release/breaking-changes/windows-version-information.md +++ b/src/content/release/breaking-changes/windows-version-information.md @@ -85,5 +85,5 @@ flutter_window.obj : error LNK2019: unresolved external symbol "public: void __c [Build and release a Windows app]: /deployment/windows#updating-the-apps-version-number [run loop migration guide]: /release/breaking-changes/windows-run-loop -[PR 721]: {{site.repo.gallery-archive}}/pull/721/files +[PR 721]: {{site.repo.gallery-archive}}pull/721/files [Flutter Gallery]: {{site.gallery-archive}} \ No newline at end of file diff --git a/src/content/release/breaking-changes/zone-errors.md b/src/content/release/breaking-changes/zone-errors.md index 2d5ec0cbd0..64327653d9 100644 --- a/src/content/release/breaking-changes/zone-errors.md +++ b/src/content/release/breaking-changes/zone-errors.md @@ -148,7 +148,7 @@ Relevant PRs: * [PR 122836][]: Assert that runApp is called in the same zone as binding.ensureInitialized -[`Zone`]: {{site.api}}/flutter/dart-async/Zone-class.html -[`BindingBase.debugZoneErrorsAreFatal`]: {{site.api}}/flutter/foundation/BindingBase/debugZoneErrorsAreFatal.html -[Issue 94123]: {{site.repo.flutter}}/issues/94123 -[PR 122836]: {{site.repo.flutter}}/pull/122836 +[`Zone`]: {{site.api}}flutter/dart-async/Zone-class.html +[`BindingBase.debugZoneErrorsAreFatal`]: {{site.api}}flutter/foundation/BindingBase/debugZoneErrorsAreFatal.html +[Issue 94123]: {{site.repo.flutter}}issues/94123 +[PR 122836]: {{site.repo.flutter}}pull/122836 diff --git a/src/content/release/compatibility-policy.md b/src/content/release/compatibility-policy.md index 0e0b5ef5ea..57396fc769 100644 --- a/src/content/release/compatibility-policy.md +++ b/src/content/release/compatibility-policy.md @@ -34,8 +34,8 @@ the process in detail. 请向 [flutter/tests repository][] 提交 PR。 这个仓库中的 [README][flutter-tests-readme] 文件描述了具体流程。 -[flutter/tests repository]: {{site.github}}/flutter/tests -[flutter-tests-readme]: {{site.github}}/flutter/tests#adding-more-tests +[flutter/tests repository]: {{site.repo.organization}}tests +[flutter-tests-readme]: {{site.repo.organization}}tests#adding-more-tests ## Announcements and migration guides @@ -55,7 +55,7 @@ breaking changes. 我们提供一个受破坏性改动影响的 [迁移代码指南][guides for migrating code] 列表。 -[flutter-announce]: {{site.groups}}/forum/#!forum/flutter-announce +[flutter-announce]: {{site.groups}}forum/#!forum/flutter-announce [guides for migrating code]: /release/breaking-changes ## Deprecation policy @@ -108,5 +108,5 @@ migration guide. 或者 Harfbuzz(Flutter 使用的字体形状引擎),将会影响到已提交测试的改动。 这一类的改动不一定会被写入迁移指南。 -[separate breaking-change policy]: {{site.github}}/dart-lang/sdk/blob/main/docs/process/breaking-changes.md -[Dart announce]: {{site.groups}}/a/dartlang.org/g/announce +[separate breaking-change policy]: {{site.github}}dart-lang/sdk/blob/main/docs/process/breaking-changes.md +[Dart announce]: {{site.groups}}a/dartlang.org/g/announce diff --git a/src/content/release/release-notes/index.md b/src/content/release/release-notes/index.md index 7f3a44d249..d5a9938eb5 100644 --- a/src/content/release/release-notes/index.md +++ b/src/content/release/release-notes/index.md @@ -81,54 +81,54 @@ For information about bug-fix releases, check out * Earlier * [Archived release notes][] -[3.22.0 announcement]: {{site.flutter-medium}}/whats-new-in-flutter-3-22-fbde6c164fe3 +[3.22.0 announcement]: {{site.flutter-medium}}whats-new-in-flutter-3-22-fbde6c164fe3 [3.22.0 release notes & change log]: /release/release-notes/release-notes-3.22.0 [3.22.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-3-22 -[3.19.0 announcement]: {{site.flutter-medium}}/whats-new-in-flutter-3-19-58b1aae242d2 +[3.19.0 announcement]: {{site.flutter-medium}}whats-new-in-flutter-3-19-58b1aae242d2 [3.19.0 release notes & change log]: /release/release-notes/release-notes-3.19.0 [3.19.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-3-19 -[3.16.0 announcement]: {{site.flutter-medium}}/whats-new-in-flutter-3-16-dba6cb1015d1 +[3.16.0 announcement]: {{site.flutter-medium}}whats-new-in-flutter-3-16-dba6cb1015d1 [3.16.0 release notes & change log]: /release/release-notes/release-notes-3.16.0 [3.16.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-3-16 -[3.13.0 announcement]: {{site.flutter-medium}}/whats-new-in-flutter-3-13-479d9b11df4d +[3.13.0 announcement]: {{site.flutter-medium}}whats-new-in-flutter-3-13-479d9b11df4d [3.13.0 release notes & change log]: /release/release-notes/release-notes-3.13.0 [3.13.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-3-13 -[3.10.0 announcement]: {{site.flutter-medium}}/whats-new-in-flutter-3-10-b21db2c38c73 +[3.10.0 announcement]: {{site.flutter-medium}}whats-new-in-flutter-3-10-b21db2c38c73 [3.10.0 release notes & change log]: /release/release-notes/release-notes-3.10.0 [3.10.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-3-10 -[3.7.0 announcement]: {{site.flutter-medium}}/whats-new-in-flutter-3-7-38cbea71133c +[3.7.0 announcement]: {{site.flutter-medium}}whats-new-in-flutter-3-7-38cbea71133c [3.7.0 release notes & change log]: /release/release-notes/release-notes-3.7.0 [3.7.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-3-7 -[3.3.0 announcement]: {{site.flutter-medium}}/announcing-flutter-3-3-at-flutter-vikings-6f213e068793 +[3.3.0 announcement]: {{site.flutter-medium}}announcing-flutter-3-3-at-flutter-vikings-6f213e068793 [3.3.0 release notes & change log]: /release/release-notes/release-notes-3.3.0 [3.3.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-3-3 -[3.0.0 announcement]: {{site.flutter-medium}}/whats-new-in-flutter-3-8c74a5bc32d0 +[3.0.0 announcement]: {{site.flutter-medium}}whats-new-in-flutter-3-8c74a5bc32d0 [3.0.0 release notes & change log]: /release/release-notes/release-notes-3.0.0 [3.0.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-3 -[2.10.0 announcement]: {{site.flutter-medium}}/whats-new-in-flutter-2-10-5aafb0314b12 +[2.10.0 announcement]: {{site.flutter-medium}}whats-new-in-flutter-2-10-5aafb0314b12 [2.10.0 release notes & change log]: /release/release-notes/release-notes-2.10.0 [2.10.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-2-10 -[2.8.0 announcement]: {{site.flutter-medium}}/whats-new-in-flutter-2-8-d085b763d181 +[2.8.0 announcement]: {{site.flutter-medium}}whats-new-in-flutter-2-8-d085b763d181 [2.8.0 release notes & change log]: /release/release-notes/release-notes-2.8.0 -[2.5.0 announcement]: {{site.flutter-medium}}/whats-new-in-flutter-2-5-6f080c3f3dc +[2.5.0 announcement]: {{site.flutter-medium}}whats-new-in-flutter-2-5-6f080c3f3dc [2.5.0 release notes & change log]: /release/release-notes/release-notes-2.5.0 [2.5.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-2-5 -[2.2.0 announcement]: {{site.flutter-medium}}/whats-new-in-flutter-2-2-fd00c65e2039 +[2.2.0 announcement]: {{site.flutter-medium}}whats-new-in-flutter-2-2-fd00c65e2039 [2.2.0 release notes & change log]: /release/release-notes/release-notes-2.2.0 [2.2.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-2-2 -[2.0.0 announcement]: {{site.flutter-medium}}/whats-new-in-flutter-2-0-fe8e95ecc65 +[2.0.0 announcement]: {{site.flutter-medium}}whats-new-in-flutter-2-0-fe8e95ecc65 [2.0.0 release notes & change log]: /release/release-notes/release-notes-2.0.0 [2.0.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-2 -[1.22.0 announcement]: {{site.flutter-medium}}/announcing-flutter-1-22-stable-44f146009e5f +[1.22.0 announcement]: {{site.flutter-medium}}announcing-flutter-1-22-stable-44f146009e5f [1.22.0 release notes & change log]: /release/release-notes/release-notes-1.22.0 [1.22.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-1-22 -[1.20.0 announcement]: {{site.flutter-medium}}/announcing-flutter-1-20-2aaf68c89c75 +[1.20.0 announcement]: {{site.flutter-medium}}announcing-flutter-1-20-2aaf68c89c75 [1.20.0 release notes & change log]: /release/release-notes/release-notes-1.20.0 [1.20.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-1-20 -[1.17.0 announcement]: {{site.flutter-medium}}/announcing-flutter-1-17-4182d8af7f8e +[1.17.0 announcement]: {{site.flutter-medium}}announcing-flutter-1-17-4182d8af7f8e [1.17.0 release notes and change log]: /release/release-notes/release-notes-1.17.0 [1.17.0 breaking changes & migrations]: /release/breaking-changes#released-in-flutter-1-17 -[1.12.13 announcement]: {{site.flutter-medium}}/announcing-flutter-1-12-what-a-year-22c256ba525d +[1.12.13 announcement]: {{site.flutter-medium}}announcing-flutter-1-12-what-a-year-22c256ba525d [1.12.13 release notes and change log]: /release/release-notes/release-notes-1.12.13 [Archived release notes]: /release/release-notes/release-notes-archive -[Hotfixes to the Stable Channel]: {{site.repo.flutter}}/wiki/Hotfixes-to-the-Stable-Channel +[Hotfixes to the Stable Channel]: {{site.repo.flutter}}wiki/Hotfixes-to-the-Stable-Channel diff --git a/src/content/release/release-notes/release-notes-1.12.13.md b/src/content/release/release-notes/release-notes-1.12.13.md index 9199ecaf73..5050b3ca92 100644 --- a/src/content/release/release-notes/release-notes-1.12.13.md +++ b/src/content/release/release-notes/release-notes-1.12.13.md @@ -51,101 +51,101 @@ The following list includes breaking changes in this release. Please see the related announcements so that you can move forward with your code. -[37024]({{site.repo.flutter}}/pull/37024) [Implement PageView using SliverLayoutBuilder, Deprecate RenderSliverFillViewport](https://groups.google.com/g/flutter-announce/c/1CUo2GCjrD4/m/VGKsyVirFQAJ) +[37024]({{site.repo.flutter}}pull/37024) [Implement PageView using SliverLayoutBuilder, Deprecate RenderSliverFillViewport](https://groups.google.com/g/flutter-announce/c/1CUo2GCjrD4/m/VGKsyVirFQAJ) -[37739]({{site.repo.flutter}}/pull/37739) [Fix AnimationStatus for repeat(reverse: true) and animateWith](https://groups.google.com/g/flutter-announce/c/yYqqt4Z5IIo/m/3wRYBwSQEwAJ) +[37739]({{site.repo.flutter}}pull/37739) [Fix AnimationStatus for repeat(reverse: true) and animateWith](https://groups.google.com/g/flutter-announce/c/yYqqt4Z5IIo/m/3wRYBwSQEwAJ) -[37896]({{site.repo.flutter}}/pull/37896) [Add opacity control to MouseRegion. Add findAnnotations to Layer.](https://groups.google.com/g/flutter-announce/c/GHSNLpjzmPw/m/ozNXwdbHDwAJ) +[37896]({{site.repo.flutter}}pull/37896) [Add opacity control to MouseRegion. Add findAnnotations to Layer.](https://groups.google.com/g/flutter-announce/c/GHSNLpjzmPw/m/ozNXwdbHDwAJ) -[38481]({{site.repo.flutter}}/pull/38481) [Timer picker fidelity revision](https://groups.google.com/g/flutter-announce/c/cSwtxCpWWEU/m/LtZS9g6eAgAJ) +[38481]({{site.repo.flutter}}pull/38481) [Timer picker fidelity revision](https://groups.google.com/g/flutter-announce/c/cSwtxCpWWEU/m/LtZS9g6eAgAJ) -[38568]({{site.repo.flutter}}/pull/38568) [Normalize assert checking of clipBehavior](https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!searchin/flutter-announce/clipBehavior%7Csort:date/flutter-announce/VJaYV9R9usU/_mV1GV25DwAJ) +[38568]({{site.repo.flutter}}pull/38568) [Normalize assert checking of clipBehavior](https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!searchin/flutter-announce/clipBehavior%7Csort:date/flutter-announce/VJaYV9R9usU/_mV1GV25DwAJ) -[39079]({{site.repo.flutter}}/pull/39079) [fix widget built twice during warm up frame](https://groups.google.com/g/flutter-announce/c/m6ewfoO64mI/m/ziD4VmwUBQAJ) +[39079]({{site.repo.flutter}}pull/39079) [fix widget built twice during warm up frame](https://groups.google.com/g/flutter-announce/c/m6ewfoO64mI/m/ziD4VmwUBQAJ) -[39440]({{site.repo.flutter}}/pull/39440) [Allow gaps in the initial route](https://groups.google.com/g/flutter-announce/c/ysFSO3eScbs/m/GzPFkLuvAQAJ) +[39440]({{site.repo.flutter}}pull/39440) [Allow gaps in the initial route](https://groups.google.com/g/flutter-announce/c/ysFSO3eScbs/m/GzPFkLuvAQAJ) -[39919]({{site.repo.flutter}}/pull/39919) [CupertinoDatePicker & CupertinoTimerPicker dark mode](https://groups.google.com/g/flutter-announce/c/0DAdg-k_jDw/m/DUGLDQagAAAJ) +[39919]({{site.repo.flutter}}pull/39919) [CupertinoDatePicker & CupertinoTimerPicker dark mode](https://groups.google.com/g/flutter-announce/c/0DAdg-k_jDw/m/DUGLDQagAAAJ) -[40166]({{site.repo.flutter}}/pull/40166) [Added proper focus handling when pushing and popping routes](https://groups.google.com/g/flutter-announce/c/BjPKnOw5jzU/m/Ev-gUJ_VAwAJ) +[40166]({{site.repo.flutter}}pull/40166) [Added proper focus handling when pushing and popping routes](https://groups.google.com/g/flutter-announce/c/BjPKnOw5jzU/m/Ev-gUJ_VAwAJ) -[40179]({{site.repo.flutter}}/pull/40179) [Update PopupMenu layout](https://groups.google.com/g/flutter-announce/c/UlK3y9HWyBg/m/Dybr660DAAAJ) +[40179]({{site.repo.flutter}}pull/40179) [Update PopupMenu layout](https://groups.google.com/g/flutter-announce/c/UlK3y9HWyBg/m/Dybr660DAAAJ) -[40566]({{site.repo.flutter}}/pull/40566) [Remove CupertinoSystemColors in favor of CupertinoColors](https://groups.google.com/g/flutter-announce/c/pMYPTvjWCX4/m/UiocKCk0AQAJ) +[40566]({{site.repo.flutter}}pull/40566) [Remove CupertinoSystemColors in favor of CupertinoColors](https://groups.google.com/g/flutter-announce/c/pMYPTvjWCX4/m/UiocKCk0AQAJ) -[40690]({{site.repo.flutter}}/pull/40690) [CupertinoPageScaffold dark mode](https://groups.google.com/g/flutter-announce/c/r_2xpmKiLj4/m/-myr4ZRPAAAJ) +[40690]({{site.repo.flutter}}pull/40690) [CupertinoPageScaffold dark mode](https://groups.google.com/g/flutter-announce/c/r_2xpmKiLj4/m/-myr4ZRPAAAJ) -[41220]({{site.repo.flutter}}/pull/41220) [Add an ActivateAction to controls that use InkWell.](https://groups.google.com/g/flutter-announce/c/oLsxPDDRc6s/m/oCtHP3ejAAAJ) +[41220]({{site.repo.flutter}}pull/41220) [Add an ActivateAction to controls that use InkWell.](https://groups.google.com/g/flutter-announce/c/oLsxPDDRc6s/m/oCtHP3ejAAAJ) -[41857 Change the dark theme elevation overlay to use the colorScheme.onSurface]({{site.repo.flutter}}/pull/41857) +[41857 Change the dark theme elevation overlay to use the colorScheme.onSurface]({{site.repo.flutter}}pull/41857) -[42449]({{site.repo.flutter}}/pull/42449) [Increase TextField's minimum height from 40 to 48](https://groups.google.com/g/flutter-announce/c/RDyeXZK0fO8/m/rdkBzgw4DgAJ) +[42449]({{site.repo.flutter}}pull/42449) [Increase TextField's minimum height from 40 to 48](https://groups.google.com/g/flutter-announce/c/RDyeXZK0fO8/m/rdkBzgw4DgAJ) -[42470]({{site.repo.flutter}}/pull/42470) [No multiline password fields](https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/flutter-announce/Ken8TY_QiuY/qxJF2ugyBQAJ) +[42470]({{site.repo.flutter}}pull/42470) [No multiline password fields](https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/flutter-announce/Ken8TY_QiuY/qxJF2ugyBQAJ) -[42479]({{site.repo.flutter}}/pull/42479) [Make DropdownButton's disabledHint and hint behavior consistent](https://groups.google.com/g/flutter-announce/c/yHIl-zEXm5c/m/abpgrXuHDgAJ) +[42479]({{site.repo.flutter}}pull/42479) [Make DropdownButton's disabledHint and hint behavior consistent](https://groups.google.com/g/flutter-announce/c/yHIl-zEXm5c/m/abpgrXuHDgAJ) -[45135]({{site.repo.flutter}}/pull/45135) [Add option to delay rendering the first frame](https://groups.google.com/g/flutter-announce/c/kBf4cXjD2y4/m/lg19fDnaAgAJ) +[45135]({{site.repo.flutter}}pull/45135) [Add option to delay rendering the first frame](https://groups.google.com/g/flutter-announce/c/kBf4cXjD2y4/m/lg19fDnaAgAJ) ## Severe crash & performance bugs In every stable release, we make an effort to improve the quality of Flutter. In 1.12, we fixed several severe issues; this includes the following crashes and performance issues. -[40009]({{site.repo.flutter}}/pull/40009) Add null check to _IndicatorPainter._tabOffsetsEqual() to prevent crash +[40009]({{site.repo.flutter}}pull/40009) Add null check to _IndicatorPainter._tabOffsetsEqual() to prevent crash -[40263]({{site.repo.flutter}}/pull/40263) Fix crash on vswhere search from flutter doctor +[40263]({{site.repo.flutter}}pull/40263) Fix crash on vswhere search from flutter doctor -[40786]({{site.repo.flutter}}/pull/40786) Fix crash on vswhere query on missing installations +[40786]({{site.repo.flutter}}pull/40786) Fix crash on vswhere query on missing installations -[42342]({{site.repo.flutter}}/pull/42342) Fix DropdownButton crash when hint and selectedItemBuilder are simultaneously defined +[42342]({{site.repo.flutter}}pull/42342) Fix DropdownButton crash when hint and selectedItemBuilder are simultaneously defined -[44610]({{site.repo.flutter}}/pull/44610) Error Message for createState assertion +[44610]({{site.repo.flutter}}pull/44610) Error Message for createState assertion -[38814]({{site.repo.flutter}}/pull/38814) Add iOS backdrop filter benchmarks +[38814]({{site.repo.flutter}}pull/38814) Add iOS backdrop filter benchmarks -[38821]({{site.repo.flutter}}/pull/38821) Cache caret parameters +[38821]({{site.repo.flutter}}pull/38821) Cache caret parameters -[38861]({{site.repo.flutter}}/pull/38861) Replace deprecated onReportTimings w/ frameTimings +[38861]({{site.repo.flutter}}pull/38861) Replace deprecated onReportTimings w/ frameTimings -[39439]({{site.repo.flutter}}/pull/39439) Measure iOS CPU/GPU percentage +[39439]({{site.repo.flutter}}pull/39439) Measure iOS CPU/GPU percentage -[43676]({{site.repo.flutter}}/pull/43676) Allow multiple TimingsCallbacks +[43676]({{site.repo.flutter}}pull/43676) Allow multiple TimingsCallbacks -[45050]({{site.repo.flutter}}/pull/45050) Add a perf test for picture raster cache +[45050]({{site.repo.flutter}}pull/45050) Add a perf test for picture raster cache ## New features Flutter 1.12 introduces several new features including the -[SliverOpacity]({{site.api}}/flutter/widgets/SliverOpacity-class.html) +[SliverOpacity]({{site.api}}flutter/widgets/SliverOpacity-class.html) widget, the -[SliverAnimatedList]({{site.api}}/flutter/widgets/SliverAnimatedList-class.html), +[SliverAnimatedList]({{site.api}}flutter/widgets/SliverAnimatedList-class.html), and the ability to configure a stretch effect for a SliverAppBar. -[37416]({{site.repo.flutter}}/pull/37416) Add MediaQuery.systemGestureInsets to support Android Q +[37416]({{site.repo.flutter}}pull/37416) Add MediaQuery.systemGestureInsets to support Android Q -[39857]({{site.repo.flutter}}/pull/39857) Update ToggleButtons constraints default and add new constraints parameter +[39857]({{site.repo.flutter}}pull/39857) Update ToggleButtons constraints default and add new constraints parameter -[40161]({{site.repo.flutter}}/pull/40161) Add fullscreenDialog argument in PageRouteBuilder +[40161]({{site.repo.flutter}}pull/40161) Add fullscreenDialog argument in PageRouteBuilder -[40461]({{site.repo.flutter}}/pull/40461) Implement DropdownButton.selectedItemBuilder +[40461]({{site.repo.flutter}}pull/40461) Implement DropdownButton.selectedItemBuilder -[41415]({{site.repo.flutter}}/pull/41415) Expose API for resizing image caches +[41415]({{site.repo.flutter}}pull/41415) Expose API for resizing image caches -[42250]({{site.repo.flutter}}/pull/42250) SliverAppBar - Configurable overscroll stretch with callback feature & FlexibleSpaceBar support +[42250]({{site.repo.flutter}}pull/42250) SliverAppBar - Configurable overscroll stretch with callback feature & FlexibleSpaceBar support -[42485]({{site.repo.flutter}}/pull/42485) Re-landing SliverAnimatedList. +[42485]({{site.repo.flutter}}pull/42485) Re-landing SliverAnimatedList. -[42842]({{site.repo.flutter}}/pull/42842) Add "navigator" option to "showDialog" and "showGeneralDialog" +[42842]({{site.repo.flutter}}pull/42842) Add "navigator" option to "showDialog" and "showGeneralDialog" -[43286]({{site.repo.flutter}}/pull/43286) FadeInImage cacheWidth and cacheHeight support +[43286]({{site.repo.flutter}}pull/43286) FadeInImage cacheWidth and cacheHeight support -[44289]({{site.repo.flutter}}/pull/44289) SliverOpacity +[44289]({{site.repo.flutter}}pull/44289) SliverOpacity -[45127]({{site.repo.flutter}}/pull/45127) SliverIgnorePointer +[45127]({{site.repo.flutter}}pull/45127) SliverIgnorePointer -[45432]({{site.repo.flutter}}/pull/45432) Use RenderSliverPadding to inset SliverFillViewport +[45432]({{site.repo.flutter}}pull/45432) Use RenderSliverPadding to inset SliverFillViewport ## iOS support @@ -154,395 +154,395 @@ iOS continues to be a big investment area for Flutter. With this release, we've made a visual refresh to our Cupertino library to match the iOS 13 look. We now support dark mode in the Cupertino widgets, added two new widgets called -[CupertinoContextMenu]({{site.api}}/flutter/cupertino/CupertinoContextMenu-class.html) -and [CupertinoSlidingSegmentedControl]({{site.api}}/flutter/cupertino/CupertinoSlidingSegmentedControl-class.html), +[CupertinoContextMenu]({{site.api}}flutter/cupertino/CupertinoContextMenu-class.html) +and [CupertinoSlidingSegmentedControl]({{site.api}}flutter/cupertino/CupertinoSlidingSegmentedControl-class.html), and made improvements to segmented control widgets, -[CupertinoAlertDialog]({{site.api}}/flutter/cupertino/CupertinoAlertDialog-class.html), -and [CupertinoDatePicker]({{site.api}}/flutter/cupertino/CupertinoDatePicker-class.html) +[CupertinoAlertDialog]({{site.api}}flutter/cupertino/CupertinoAlertDialog-class.html), +and [CupertinoDatePicker]({{site.api}}flutter/cupertino/CupertinoDatePicker-class.html) -[36871]({{site.repo.flutter}}/pull/36871) Audit use of defaultTargetPlatform +[36871]({{site.repo.flutter}}pull/36871) Audit use of defaultTargetPlatform -[37719]({{site.repo.flutter}}/pull/37719) CupertinoDynamicColor and friends +[37719]({{site.repo.flutter}}pull/37719) CupertinoDynamicColor and friends -[38712]({{site.repo.flutter}}/pull/38712) Show process error when iOS install fails +[38712]({{site.repo.flutter}}pull/38712) Show process error when iOS install fails -[39056]({{site.repo.flutter}}/pull/39056) Fixed issues with Background Color #34741 +[39056]({{site.repo.flutter}}pull/39056) Fixed issues with Background Color #34741 -[39215]({{site.repo.flutter}}/pull/39215) CupertinoActionSheet dark mode & fidelity +[39215]({{site.repo.flutter}}pull/39215) CupertinoActionSheet dark mode & fidelity -[39289]({{site.repo.flutter}}/pull/39289) CupertinoActivityIndicator & CupertinoApp dark mode +[39289]({{site.repo.flutter}}pull/39289) CupertinoActivityIndicator & CupertinoApp dark mode -[39430]({{site.repo.flutter}}/pull/39430) make CupertinoDynamicColor const constructible +[39430]({{site.repo.flutter}}pull/39430) make CupertinoDynamicColor const constructible -[39463]({{site.repo.flutter}}/pull/39463) Update validation to support Xcode11 version +[39463]({{site.repo.flutter}}pull/39463) Update validation to support Xcode11 version -[39585]({{site.repo.flutter}}/pull/39585) remove fallback code for ios/usb artifacts +[39585]({{site.repo.flutter}}pull/39585) remove fallback code for ios/usb artifacts -[39590]({{site.repo.flutter}}/pull/39590) Fix user gesture in CupertinoPageRoute +[39590]({{site.repo.flutter}}pull/39590) Fix user gesture in CupertinoPageRoute -[39765]({{site.repo.flutter}}/pull/39765) CupertinoButton & Bottom tab bar dark mode +[39765]({{site.repo.flutter}}pull/39765) CupertinoButton & Bottom tab bar dark mode -[39927]({{site.repo.flutter}}/pull/39927) Make CupertinoDynamicColor.resolve return null when given a null color +[39927]({{site.repo.flutter}}pull/39927) Make CupertinoDynamicColor.resolve return null when given a null color -[40007]({{site.repo.flutter}}/pull/40007) CupertinoAlertDialog dark mode & CupertinoActionSheet fidelity +[40007]({{site.repo.flutter}}pull/40007) CupertinoAlertDialog dark mode & CupertinoActionSheet fidelity -[40100]({{site.repo.flutter}}/pull/40100) Fix a problem with disposing of focus nodes in tab scaffold +[40100]({{site.repo.flutter}}pull/40100) Fix a problem with disposing of focus nodes in tab scaffold -[40189]({{site.repo.flutter}}/pull/40189) Dark mode CupertinoNavigationBar +[40189]({{site.repo.flutter}}pull/40189) Dark mode CupertinoNavigationBar -[40447]({{site.repo.flutter}}/pull/40447) Implement mdns for flutter run +[40447]({{site.repo.flutter}}pull/40447) Implement mdns for flutter run -[40454]({{site.repo.flutter}}/pull/40454) Dark Mode R: Refresh Control +[40454]({{site.repo.flutter}}pull/40454) Dark Mode R: Refresh Control -[40466]({{site.repo.flutter}}/pull/40466) ModalRoutes ignore input when a (cupertino) pop transition is underway +[40466]({{site.repo.flutter}}pull/40466) ModalRoutes ignore input when a (cupertino) pop transition is underway -[40864]({{site.repo.flutter}}/pull/40864) Move iOS and Android gitignore rules into folders +[40864]({{site.repo.flutter}}pull/40864) Move iOS and Android gitignore rules into folders -[41326]({{site.repo.flutter}}/pull/41326) Exception when selecting in TextField +[41326]({{site.repo.flutter}}pull/41326) Exception when selecting in TextField -[41355]({{site.repo.flutter}}/pull/41355) fix bad indentations(mainly around collection literals) +[41355]({{site.repo.flutter}}pull/41355) fix bad indentations(mainly around collection literals) -[41384]({{site.repo.flutter}}/pull/41384) [flutter_tools] Report iOS mDNS lookup failures to analytics +[41384]({{site.repo.flutter}}pull/41384) [flutter_tools] Report iOS mDNS lookup failures to analytics -[41431]({{site.repo.flutter}}/pull/41431) Cupertino { TabScafold, TextSelection, TextField } dark mode & minor fidelity update +[41431]({{site.repo.flutter}}pull/41431) Cupertino { TabScafold, TextSelection, TextField } dark mode & minor fidelity update -[41473]({{site.repo.flutter}}/pull/41473) Missing trailing commas +[41473]({{site.repo.flutter}}pull/41473) Missing trailing commas -[41482]({{site.repo.flutter}}/pull/41482) [flutter_tool] Add analytics events for ios-mdns fallback success/failure +[41482]({{site.repo.flutter}}pull/41482) [flutter_tool] Add analytics events for ios-mdns fallback success/failure -[41644]({{site.repo.flutter}}/pull/41644) indent formal parameters correctly +[41644]({{site.repo.flutter}}pull/41644) indent formal parameters correctly -[41799]({{site.repo.flutter}}/pull/41799) Improved ios 13 scrollbar fidelity +[41799]({{site.repo.flutter}}pull/41799) Improved ios 13 scrollbar fidelity -[41828]({{site.repo.flutter}}/pull/41828) Set DEFINES_MODULE=YES in plugin templates +[41828]({{site.repo.flutter}}pull/41828) Set DEFINES_MODULE=YES in plugin templates -[41892]({{site.repo.flutter}}/pull/41892) Fix CupertinoActivityIndicator radius +[41892]({{site.repo.flutter}}pull/41892) Fix CupertinoActivityIndicator radius -[42025]({{site.repo.flutter}}/pull/42025) Localization refresh +[42025]({{site.repo.flutter}}pull/42025) Localization refresh -[42032]({{site.repo.flutter}}/pull/42032) Update CupertinoActivityIndicator colors and gradient +[42032]({{site.repo.flutter}}pull/42032) Update CupertinoActivityIndicator colors and gradient -[42533]({{site.repo.flutter}}/pull/42533) Disable arrow key focus navigation for text fields +[42533]({{site.repo.flutter}}pull/42533) Disable arrow key focus navigation for text fields -[42550]({{site.repo.flutter}}/pull/42550) Add enableSuggestions flag to TextField and TextFormField +[42550]({{site.repo.flutter}}pull/42550) Add enableSuggestions flag to TextField and TextFormField -[42563]({{site.repo.flutter}}/pull/42563) Adding thumb color customization functionality to CupertinoSlider +[42563]({{site.repo.flutter}}pull/42563) Adding thumb color customization functionality to CupertinoSlider -[42602]({{site.repo.flutter}}/pull/42602) Properly throw FlutterError when route builder returns null on CupertinoPageRoute +[42602]({{site.repo.flutter}}pull/42602) Properly throw FlutterError when route builder returns null on CupertinoPageRoute -[42775]({{site.repo.flutter}}/pull/42775) CupertinoSlidingSegmentedControl +[42775]({{site.repo.flutter}}pull/42775) CupertinoSlidingSegmentedControl -[42790]({{site.repo.flutter}}/pull/42790) This disables the up/down arrow focus navigation in text fields in a different way. +[42790]({{site.repo.flutter}}pull/42790) This disables the up/down arrow focus navigation in text fields in a different way. -[42924]({{site.repo.flutter}}/pull/42924) CupertinoDialogAction is missing super call +[42924]({{site.repo.flutter}}pull/42924) CupertinoDialogAction is missing super call -[42964]({{site.repo.flutter}}/pull/42964) Use PRODUCT_BUNDLE_IDENTIFIER from buildSettings to find correct bundle id on iOS when using flavors +[42964]({{site.repo.flutter}}pull/42964) Use PRODUCT_BUNDLE_IDENTIFIER from buildSettings to find correct bundle id on iOS when using flavors -[42967]({{site.repo.flutter}}/pull/42967) Pad CupertinoAlertDialog with MediaQuery viewInsets +[42967]({{site.repo.flutter}}pull/42967) Pad CupertinoAlertDialog with MediaQuery viewInsets -[43918]({{site.repo.flutter}}/pull/43918) CupertinoContextMenu (iOS 13) +[43918]({{site.repo.flutter}}pull/43918) CupertinoContextMenu (iOS 13) -[43932]({{site.repo.flutter}}/pull/43932) Update CupertinoSlidingSegmentedControl control/feedback mechanism +[43932]({{site.repo.flutter}}pull/43932) Update CupertinoSlidingSegmentedControl control/feedback mechanism -[44149]({{site.repo.flutter}}/pull/44149) Apply minimumDate & maximumDate constraints in CupertinoDatePicker date mode +[44149]({{site.repo.flutter}}pull/44149) Apply minimumDate & maximumDate constraints in CupertinoDatePicker date mode -[44391]({{site.repo.flutter}}/pull/44391) Segmented control quick double tap fix +[44391]({{site.repo.flutter}}pull/44391) Segmented control quick double tap fix -[44551]({{site.repo.flutter}}/pull/44551) Remove new unused elements +[44551]({{site.repo.flutter}}pull/44551) Remove new unused elements -[44743]({{site.repo.flutter}}/pull/44743) Sort Localization generation output +[44743]({{site.repo.flutter}}pull/44743) Sort Localization generation output -[44870]({{site.repo.flutter}}/pull/44870) Add -runFirstLaunch hint text +[44870]({{site.repo.flutter}}pull/44870) Add -runFirstLaunch hint text -[45124]({{site.repo.flutter}}/pull/45124) Analyze dartpad +[45124]({{site.repo.flutter}}pull/45124) Analyze dartpad -[11350]({{site.repo.engine}}/pull/11350) Firebase test for Platform Views on iOS +[11350]({{site.repo.engine}}pull/11350) Firebase test for Platform Views on iOS -[11390]({{site.repo.engine}}/pull/11390) preventDefault on touchend to show iOS keyboard +[11390]({{site.repo.engine}}pull/11390) preventDefault on touchend to show iOS keyboard -[11413]({{site.repo.engine}}/pull/11413) Ios simulator unittests seem to not consider the full compilation unit +[11413]({{site.repo.engine}}pull/11413) Ios simulator unittests seem to not consider the full compilation unit -[11530]({{site.repo.engine}}/pull/11530) Optionally strip bitcode when creating ios framework +[11530]({{site.repo.engine}}pull/11530) Optionally strip bitcode when creating ios framework -[11652]({{site.repo.engine}}/pull/11652) iOS platform view mutation XCUITests +[11652]({{site.repo.engine}}pull/11652) iOS platform view mutation XCUITests -[11802]({{site.repo.engine}}/pull/11802) Adjust iOS frame start times to match the platform info +[11802]({{site.repo.engine}}pull/11802) Adjust iOS frame start times to match the platform info -[11807]({{site.repo.engine}}/pull/11807) Fix deleting Thai vowel bug on iOS +[11807]({{site.repo.engine}}pull/11807) Fix deleting Thai vowel bug on iOS -[11817]({{site.repo.engine}}/pull/11817) Smooth out iOS irregular input events delivery +[11817]({{site.repo.engine}}pull/11817) Smooth out iOS irregular input events delivery -[11886]({{site.repo.engine}}/pull/11886) remove extra redundant channels setup in iOS embedding engine +[11886]({{site.repo.engine}}pull/11886) remove extra redundant channels setup in iOS embedding engine -[12078]({{site.repo.engine}}/pull/12078) Manage iOS contexts separately +[12078]({{site.repo.engine}}pull/12078) Manage iOS contexts separately -[12084]({{site.repo.engine}}/pull/12084) Guard availability of user notification related methods to iOS 10.0 +[12084]({{site.repo.engine}}pull/12084) Guard availability of user notification related methods to iOS 10.0 -[12192]({{site.repo.engine}}/pull/12192) Updating text field location in IOS as a pre-work for spellcheck +[12192]({{site.repo.engine}}pull/12192) Updating text field location in IOS as a pre-work for spellcheck -[12295]({{site.repo.engine}}/pull/12295) Issue 13238: on iOS, force an orientation change when the current orientation is not allowed +[12295]({{site.repo.engine}}pull/12295) Issue 13238: on iOS, force an orientation change when the current orientation is not allowed -[12404]({{site.repo.engine}}/pull/12404) Support accessibility labels on iOS switches. +[12404]({{site.repo.engine}}pull/12404) Support accessibility labels on iOS switches. -[12990]({{site.repo.engine}}/pull/12990) Fix for a11y crash on iOS +[12990]({{site.repo.engine}}pull/12990) Fix for a11y crash on iOS -[13029]({{site.repo.engine}}/pull/13029) Minimal test harness for iOS +[13029]({{site.repo.engine}}pull/13029) Minimal test harness for iOS -[13051]({{site.repo.engine}}/pull/13051) Don't bump iOS deployment target for Metal builds. +[13051]({{site.repo.engine}}pull/13051) Don't bump iOS deployment target for Metal builds. -[13093]({{site.repo.engine}}/pull/13093) iOS Platform View: Fixed overrelease of the observer. +[13093]({{site.repo.engine}}pull/13093) iOS Platform View: Fixed overrelease of the observer. -[13170]({{site.repo.engine}}/pull/13170) Issue 13238: on iOS, force an orientation change when the current orientation is not allowed +[13170]({{site.repo.engine}}pull/13170) Issue 13238: on iOS, force an orientation change when the current orientation is not allowed -[13449]({{site.repo.engine}}/pull/13449) Fix iOS crash when multiple platform views are in the scene +[13449]({{site.repo.engine}}pull/13449) Fix iOS crash when multiple platform views are in the scene -[13469]({{site.repo.engine}}/pull/13469) Fix stale platform view gr context on iOS +[13469]({{site.repo.engine}}pull/13469) Fix stale platform view gr context on iOS -[13651]({{site.repo.engine}}/pull/13651) Fixed the scroll direction for iOS horizontal accessibility scroll events. +[13651]({{site.repo.engine}}pull/13651) Fixed the scroll direction for iOS horizontal accessibility scroll events. -[13852]({{site.repo.engine}}/pull/13852) Do not default to downstream affinity on iOS insertText +[13852]({{site.repo.engine}}pull/13852) Do not default to downstream affinity on iOS insertText -[13857]({{site.repo.engine}}/pull/13857) Guard against orphaned semantic objects from referencing dead accessibility bridge on iOS +[13857]({{site.repo.engine}}pull/13857) Guard against orphaned semantic objects from referencing dead accessibility bridge on iOS -[1370]({{site.github}}/flutter/plugins/pull/1370) [camera] Pause/resume video recording for Android & iOS +[1370]({{site.repo.organization}}plugins/pull/1370) [camera] Pause/resume video recording for Android & iOS -[1999]({{site.github}}/flutter/plugins/pull/1999) [Connectivity] add a method to request location on iOS (for iOS 13) +[1999]({{site.repo.organization}}plugins/pull/1999) [Connectivity] add a method to request location on iOS (for iOS 13) -[2052]({{site.github}}/flutter/plugins/pull/2052) [instrumentation_adapter] Add stub iOS implementation and example app +[2052]({{site.repo.organization}}plugins/pull/2052) [instrumentation_adapter] Add stub iOS implementation and example app -[2068]({{site.github}}/flutter/plugins/pull/2068) [google_maps_flutter] Fix iOS MyLocationButton on iOS +[2068]({{site.repo.organization}}plugins/pull/2068) [google_maps_flutter] Fix iOS MyLocationButton on iOS -[2083]({{site.github}}/flutter/plugins/pull/2083) [image_picker] Fix a crash when picking video on iOS 13 and above. +[2083]({{site.repo.organization}}plugins/pull/2083) [image_picker] Fix a crash when picking video on iOS 13 and above. -[2131]({{site.github}}/flutter/plugins/pull/2131) [share]fix iOS crash when setting the subject to null +[2131]({{site.repo.organization}}plugins/pull/2131) [share]fix iOS crash when setting the subject to null -[2139]({{site.github}}/flutter/plugins/pull/2139) [google_maps_flutter] Add NonNull macro to reduce warnings in iOS +[2139]({{site.repo.organization}}plugins/pull/2139) [google_maps_flutter] Add NonNull macro to reduce warnings in iOS -[2191]({{site.github}}/flutter/plugins/pull/2191) [image_picker] Fix iOS build and analyzer warnings +[2191]({{site.repo.organization}}plugins/pull/2191) [image_picker] Fix iOS build and analyzer warnings -[2192]({{site.github}}/flutter/plugins/pull/2192) [in_app_purchase] Fix iOS build warning +[2192]({{site.repo.organization}}plugins/pull/2192) [in_app_purchase] Fix iOS build warning -[2275]({{site.github}}/flutter/plugins/pull/2275) Update cirrus to create IOS simulator on 13.2 an xCode 11 +[2275]({{site.repo.organization}}plugins/pull/2275) Update cirrus to create IOS simulator on 13.2 an xCode 11 -[2281]({{site.github}}/flutter/plugins/pull/2281) [connectivity] Fix reachability stream for iOS +[2281]({{site.repo.organization}}plugins/pull/2281) [connectivity] Fix reachability stream for iOS ## Android In this release, we've merged a list of changes to support Android 10, including a new activity zoom transition. -[37526]({{site.repo.flutter}}/pull/37526) catch errors during gradle update +[37526]({{site.repo.flutter}}pull/37526) catch errors during gradle update -[39126]({{site.repo.flutter}}/pull/39126) Fid app bundle in Gradle 3.5 +[39126]({{site.repo.flutter}}pull/39126) Fid app bundle in Gradle 3.5 -[39145]({{site.repo.flutter}}/pull/39145) Add missing files in the Gradle wrapper directory +[39145]({{site.repo.flutter}}pull/39145) Add missing files in the Gradle wrapper directory -[39312]({{site.repo.flutter}}/pull/39312) let flutter build aar use a local engine +[39312]({{site.repo.flutter}}pull/39312) let flutter build aar use a local engine -[39457]({{site.repo.flutter}}/pull/39457) Log flags in build apk and appbundle +[39457]({{site.repo.flutter}}pull/39457) Log flags in build apk and appbundle -[40640]({{site.repo.flutter}}/pull/40640) Exclude non Android plugins from Gradle build +[40640]({{site.repo.flutter}}pull/40640) Exclude non Android plugins from Gradle build -[41698]({{site.repo.flutter}}/pull/41698) Download android x64 release artifacts +[41698]({{site.repo.flutter}}pull/41698) Download android x64 release artifacts -[41933]({{site.repo.flutter}}/pull/41933) upload x64 android host release +[41933]({{site.repo.flutter}}pull/41933) upload x64 android host release -[41935]({{site.repo.flutter}}/pull/41935) [Android 10] Activity zoom transition +[41935]({{site.repo.flutter}}pull/41935) [Android 10] Activity zoom transition -[41946]({{site.repo.flutter}}/pull/41946) Do not validate the Android SDK when building an appbundle +[41946]({{site.repo.flutter}}pull/41946) Do not validate the Android SDK when building an appbundle -[42378]({{site.repo.flutter}}/pull/42378) remove println from flutter.gradle +[42378]({{site.repo.flutter}}pull/42378) remove println from flutter.gradle -[42401]({{site.repo.flutter}}/pull/42401) Add support for Android x86_64 ABI to Flutter +[42401]({{site.repo.flutter}}pull/42401) Add support for Android x86_64 ABI to Flutter -[42508]({{site.repo.flutter}}/pull/42508) Add Android x64 profile artifacts +[42508]({{site.repo.flutter}}pull/42508) Add Android x64 profile artifacts -[42966]({{site.repo.flutter}}/pull/42966) expand scope of rethrown gradle errors +[42966]({{site.repo.flutter}}pull/42966) expand scope of rethrown gradle errors -[43245]({{site.repo.flutter}}/pull/43245) Add smallestScreenSize to android:configChanges in the Android manifest template +[43245]({{site.repo.flutter}}pull/43245) Add smallestScreenSize to android:configChanges in the Android manifest template -[43282]({{site.repo.flutter}}/pull/43282) implement build aot with assemble for Android target platforms +[43282]({{site.repo.flutter}}pull/43282) implement build aot with assemble for Android target platforms -[43876]({{site.repo.flutter}}/pull/43876) Refactor flutter.gradle to use assemble directly +[43876]({{site.repo.flutter}}pull/43876) Refactor flutter.gradle to use assemble directly -[44534]({{site.repo.flutter}}/pull/44534) Improve performance of build APK (~50%) by running gen_snapshot concurrently +[44534]({{site.repo.flutter}}pull/44534) Improve performance of build APK (~50%) by running gen_snapshot concurrently -[45139]({{site.repo.flutter}}/pull/45139) Update Android CPU device detection +[45139]({{site.repo.flutter}}pull/45139) Update Android CPU device detection -[11345]({{site.repo.engine}}/pull/11345) [Android] Write MINIMAL_SDK required to use PlatformViews to exception message +[11345]({{site.repo.engine}}pull/11345) [Android] Write MINIMAL_SDK required to use PlatformViews to exception message -[11441]({{site.repo.engine}}/pull/11441) Android 10+ View.setSystemGestureExclusionRects +[11441]({{site.repo.engine}}pull/11441) Android 10+ View.setSystemGestureExclusionRects -[11451]({{site.repo.engine}}/pull/11451) Android 10+ View.getSystemGestureExclusionRects +[11451]({{site.repo.engine}}pull/11451) Android 10+ View.getSystemGestureExclusionRects -[12085]({{site.repo.engine}}/pull/12085) Enable platform view keyboard input on Android Q +[12085]({{site.repo.engine}}pull/12085) Enable platform view keyboard input on Android Q -[13059]({{site.repo.engine}}/pull/13059) Android targets create final zip artifacts +[13059]({{site.repo.engine}}pull/13059) Android targets create final zip artifacts -[13099]({{site.repo.engine}}/pull/13099) NO_SUGGESTIONS keyboard flag in Android +[13099]({{site.repo.engine}}pull/13099) NO_SUGGESTIONS keyboard flag in Android -[13262]({{site.repo.engine}}/pull/13262) Added Semantic header support on Android. +[13262]({{site.repo.engine}}pull/13262) Added Semantic header support on Android. -[2003]({{site.github}}/flutter/plugins/pull/2003) [video_player] Added formatHint to to override video format on Android +[2003]({{site.repo.organization}}plugins/pull/2003) [video_player] Added formatHint to to override video format on Android -[2029]({{site.github}}/flutter/plugins/pull/2029) fix android crash when pausing or resuming video on APIs lower than 24. +[2029]({{site.repo.organization}}plugins/pull/2029) fix android crash when pausing or resuming video on APIs lower than 24. -[2049]({{site.github}}/flutter/plugins/pull/2049) [path_provider] Android: Support multiple external storage options +[2049]({{site.repo.organization}}plugins/pull/2049) [path_provider] Android: Support multiple external storage options -[2208]({{site.github}}/flutter/plugins/pull/2208) delete all example/android/app/gradle.properties files +[2208]({{site.repo.organization}}plugins/pull/2208) delete all example/android/app/gradle.properties files -[2216]({{site.github}}/flutter/plugins/pull/2216) [battery]Use android.arch.lifecycle instead of androidx.lifecycle:lifecycle in +[2216]({{site.repo.organization}}plugins/pull/2216) [battery]Use android.arch.lifecycle instead of androidx.lifecycle:lifecycle in -[2239]({{site.github}}/flutter/plugins/pull/2239) [camera] Android: Improve image streaming by creating a request suita… +[2239]({{site.repo.organization}}plugins/pull/2239) [camera] Android: Improve image streaming by creating a request suita… ## Add to App feature We've made a significant upgrade to Add-to-App, the feature that allows you to integrate a Flutter module into your Android or iOS app. Can't wait to try it? Check out the [Add-to-App documentation](/add-to-app). -[41666]({{site.repo.flutter}}/pull/41666) Generate projects using the new Android embedding +[41666]({{site.repo.flutter}}pull/41666) Generate projects using the new Android embedding -[44369]({{site.repo.flutter}}/pull/44369) Flip enable-android-embedding-v2 flag +[44369]({{site.repo.flutter}}pull/44369) Flip enable-android-embedding-v2 flag -[40810]({{site.repo.flutter}}/pull/40810) Re-enable AAR plugins when an AndroidX failure occurred +[40810]({{site.repo.flutter}}pull/40810) Re-enable AAR plugins when an AndroidX failure occurred -[41820]({{site.repo.flutter}}/pull/41820) Added SystemNavigator.pop "animated" argument. +[41820]({{site.repo.flutter}}pull/41820) Added SystemNavigator.pop "animated" argument. -[12752]({{site.repo.engine}}/pull/12752) Enabled people to chose if SystemNavigator.pop is animated on iOS. +[12752]({{site.repo.engine}}pull/12752) Enabled people to chose if SystemNavigator.pop is animated on iOS. -[12069]({{site.repo.engine}}/pull/12069) Fold the calls for FlutterMain into the FlutterEngine constructor +[12069]({{site.repo.engine}}pull/12069) Fold the calls for FlutterMain into the FlutterEngine constructor -[39945]({{site.repo.flutter}}/pull/39945) added new lifecycle state +[39945]({{site.repo.flutter}}pull/39945) added new lifecycle state -[11913]({{site.repo.engine}}/pull/11913) Added new lifecycle enum +[11913]({{site.repo.engine}}pull/11913) Added new lifecycle enum -[45115]({{site.repo.flutter}}/pull/45115) fix ios_add2app_life_cycle license +[45115]({{site.repo.flutter}}pull/45115) fix ios_add2app_life_cycle license -[45133]({{site.repo.flutter}}/pull/45133) reland add lifecycle enum and fix the scheduleforcedframe +[45133]({{site.repo.flutter}}pull/45133) reland add lifecycle enum and fix the scheduleforcedframe -[45430]({{site.repo.flutter}}/pull/45430) Drops detached message until we can handle it properly +[45430]({{site.repo.flutter}}pull/45430) Drops detached message until we can handle it properly -[9525]({{site.repo.engine}}/pull/9525) Android Embedding Refactor PR36: Add splash screen support. +[9525]({{site.repo.engine}}pull/9525) Android Embedding Refactor PR36: Add splash screen support. -[9506]({{site.repo.engine}}/pull/9506) Synchronize main thread and gpu thread for first render frame +[9506]({{site.repo.engine}}pull/9506) Synchronize main thread and gpu thread for first render frame -[39600]({{site.repo.flutter}}/pull/39600) Let Material BackButton have a custom onPressed handler +[39600]({{site.repo.flutter}}pull/39600) Let Material BackButton have a custom onPressed handler -[9952]({{site.repo.engine}}/pull/9952) ios: Fixed the callback for the first frame so that it isn't predicated on having a splash screen. +[9952]({{site.repo.engine}}pull/9952) ios: Fixed the callback for the first frame so that it isn't predicated on having a splash screen. -[10145]({{site.repo.engine}}/pull/10145) Added integration test that tests that the first frame callback is called +[10145]({{site.repo.engine}}pull/10145) Added integration test that tests that the first frame callback is called -[42708]({{site.repo.flutter}}/pull/42708) Test the Android embedding v2 +[42708]({{site.repo.flutter}}pull/42708) Test the Android embedding v2 -[43221]({{site.repo.flutter}}/pull/43221) Migrate examples to the Android embedding v2 +[43221]({{site.repo.flutter}}pull/43221) Migrate examples to the Android embedding v2 -[9895]({{site.repo.engine}}/pull/9895) Android Embedding PR37: Separated FlutterActivity and FlutterFragment via FlutterActivityAndFragmentDelegate +[9895]({{site.repo.engine}}pull/9895) Android Embedding PR37: Separated FlutterActivity and FlutterFragment via FlutterActivityAndFragmentDelegate -[11890]({{site.repo.engine}}/pull/11890) Add some AppLifecycleTests +[11890]({{site.repo.engine}}pull/11890) Add some AppLifecycleTests -[12128]({{site.repo.engine}}/pull/12128) Make iOS FlutterViewController stop sending inactive/pause on app lifecycle events when not visible +[12128]({{site.repo.engine}}pull/12128) Make iOS FlutterViewController stop sending inactive/pause on app lifecycle events when not visible -[12232]({{site.repo.engine}}/pull/12232) FlutterViewController notify will dealloc +[12232]({{site.repo.engine}}pull/12232) FlutterViewController notify will dealloc -[13280]({{site.repo.engine}}/pull/13280) Android embedding API updates for plugin ecosystem +[13280]({{site.repo.engine}}pull/13280) Android embedding API updates for plugin ecosystem -[13349]({{site.repo.engine}}/pull/13349) Deprecated DartExecutor as BinaryMessenger and added a getBinaryMessenger() method. (#43202) +[13349]({{site.repo.engine}}pull/13349) Deprecated DartExecutor as BinaryMessenger and added a getBinaryMessenger() method. (#43202) -[13432]({{site.repo.engine}}/pull/13432) Release shim bindings when detaching +[13432]({{site.repo.engine}}pull/13432) Release shim bindings when detaching -[2232]({{site.github}}/flutter/plugins/pull/2232) [multiple] V2 embedding plugins use compileOnly +[2232]({{site.repo.organization}}plugins/pull/2232) [multiple] V2 embedding plugins use compileOnly -[1323]({{site.github}}/FirebaseExtended/flutterfire/pull/1323) [firebase_core][firebase_analytics] Fix bug with transitive lifecycle dependencies +[1323]({{site.github}}FirebaseExtended/flutterfire/pull/1323) [firebase_core][firebase_analytics] Fix bug with transitive lifecycle dependencies -[13445]({{site.repo.engine}}/pull/13445) Fizzle onConfigurationChanged if no FlutterView +[13445]({{site.repo.engine}}pull/13445) Fizzle onConfigurationChanged if no FlutterView -[44499]({{site.repo.flutter}}/pull/44499) Show a warning when a module uses a v1 only plugin +[44499]({{site.repo.flutter}}pull/44499) Show a warning when a module uses a v1 only plugin -[35100]({{site.repo.flutter}}/pull/35100) Add handling of 'TextInput.clearClient' message from platform to framework (#35054). +[35100]({{site.repo.flutter}}pull/35100) Add handling of 'TextInput.clearClient' message from platform to framework (#35054). -[13474]({{site.repo.engine}}/pull/13474) Request a reattach when creating the text input plugin on Android +[13474]({{site.repo.engine}}pull/13474) Request a reattach when creating the text input plugin on Android -[43959]({{site.repo.flutter}}/pull/43959) Respond to TextInputClient.reattach messages. +[43959]({{site.repo.flutter}}pull/43959) Respond to TextInputClient.reattach messages. -[509]({{site.github}}/flutter/cocoon/pull/509) Force the phone's screen on before running a test. +[509]({{site.repo.organization}}cocoon/pull/509) Force the phone's screen on before running a test. -[11792]({{site.repo.engine}}/pull/11792) Started logging warnings if we drop platform messages. +[11792]({{site.repo.engine}}pull/11792) Started logging warnings if we drop platform messages. -[12167]({{site.repo.engine}}/pull/12167) Channel buffers +[12167]({{site.repo.engine}}pull/12167) Channel buffers -[40165]({{site.repo.flutter}}/pull/40165) Channel buffers +[40165]({{site.repo.flutter}}pull/40165) Channel buffers -[12402]({{site.repo.engine}}/pull/12402) Resize channel buffers +[12402]({{site.repo.engine}}pull/12402) Resize channel buffers -[6879]({{site.repo.engine}}/pull/6879) Allow FlutterViewController to be released when not initialized with an engine +[6879]({{site.repo.engine}}pull/6879) Allow FlutterViewController to be released when not initialized with an engine -[9329]({{site.repo.engine}}/pull/9329) Fixed memory leak by way of accidental retain on implicit self +[9329]({{site.repo.engine}}pull/9329) Fixed memory leak by way of accidental retain on implicit self -[9347]({{site.repo.engine}}/pull/9347) Surrogate binary messenger +[9347]({{site.repo.engine}}pull/9347) Surrogate binary messenger -[9419]({{site.repo.engine}}/pull/9419) Has a binary messenger +[9419]({{site.repo.engine}}pull/9419) Has a binary messenger -[8387]({{site.repo.engine}}/pull/8387) Make the resource context primary on iOS +[8387]({{site.repo.engine}}pull/8387) Make the resource context primary on iOS -[11798]({{site.repo.engine}}/pull/11798) Manage resource and onscreen contexts using separate IOSGLContext objects +[11798]({{site.repo.engine}}pull/11798) Manage resource and onscreen contexts using separate IOSGLContext objects -[12277]({{site.repo.engine}}/pull/12277) Manage resource and onscreen contexts using separate IOSGLContext objects +[12277]({{site.repo.engine}}pull/12277) Manage resource and onscreen contexts using separate IOSGLContext objects -[13396]({{site.repo.engine}}/pull/13396) Made it so we clean up gl resources when view controllers get deleted. +[13396]({{site.repo.engine}}pull/13396) Made it so we clean up gl resources when view controllers get deleted. -[39157]({{site.repo.flutter}}/pull/39157) Use new Maven artifacts from Gradle +[39157]({{site.repo.flutter}}pull/39157) Use new Maven artifacts from Gradle -[39503]({{site.repo.flutter}}/pull/39503) Remove bitcode=NO from add-to-app flows +[39503]({{site.repo.flutter}}pull/39503) Remove bitcode=NO from add-to-app flows -[36793]({{site.repo.flutter}}/pull/36793) Vend Flutter module App.framework as a local CocoaPod pod to be installed by a host app +[36793]({{site.repo.flutter}}pull/36793) Vend Flutter module App.framework as a local CocoaPod pod to be installed by a host app -[37966]({{site.repo.flutter}}/pull/37966) Remove ephemeral directories during flutter clean +[37966]({{site.repo.flutter}}pull/37966) Remove ephemeral directories during flutter clean -[40302]({{site.repo.flutter}}/pull/40302) Set DEFINES_MODULE for FlutterPluginRegistrant to generate modulemap +[40302]({{site.repo.flutter}}pull/40302) Set DEFINES_MODULE for FlutterPluginRegistrant to generate modulemap -[37731]({{site.repo.flutter}}/pull/37731) Add metadata to indicate if the host app contains a Flutter module +[37731]({{site.repo.flutter}}pull/37731) Add metadata to indicate if the host app contains a Flutter module -[36805]({{site.repo.flutter}}/pull/36805) Allow flavors and custom build types in host app +[36805]({{site.repo.flutter}}pull/36805) Allow flavors and custom build types in host app -[26630]({{site.repo.flutter}}/pull/26630) Move flutter_assets to App.framework +[26630]({{site.repo.flutter}}pull/26630) Move flutter_assets to App.framework -[31463]({{site.repo.flutter}}/pull/31463) Disable all Dart fingerprinters +[31463]({{site.repo.flutter}}pull/31463) Disable all Dart fingerprinters -[35217]({{site.repo.flutter}}/pull/35217) Add flutter build aar +[35217]({{site.repo.flutter}}pull/35217) Add flutter build aar -[40927]({{site.repo.flutter}}/pull/40927) Make module pod headers public +[40927]({{site.repo.flutter}}pull/40927) Make module pod headers public -[44065]({{site.repo.flutter}}/pull/44065) Build ios framework +[44065]({{site.repo.flutter}}pull/44065) Build ios framework -[37206]({{site.repo.flutter}}/pull/37206) Test that modules built as AAR contain the right assets and artifacts +[37206]({{site.repo.flutter}}pull/37206) Test that modules built as AAR contain the right assets and artifacts -[44127]({{site.repo.flutter}}/pull/44127) build aar prints how to consume the artifacts +[44127]({{site.repo.flutter}}pull/44127) build aar prints how to consume the artifacts -[23782]({{site.repo.flutter}}/pull/23782) Add flutter_shared assets to module artifact +[23782]({{site.repo.flutter}}pull/23782) Add flutter_shared assets to module artifact -[22707]({{site.repo.flutter}}/pull/22707) Gradle plugin support for adding flutter as subproject to another Android app +[22707]({{site.repo.flutter}}pull/22707) Gradle plugin support for adding flutter as subproject to another Android app -[9893]({{site.repo.engine}}/pull/9893) Removed logic from FlutterAppDelegate into FlutterPluginAppLifeCycleDelegate +[9893]({{site.repo.engine}}pull/9893) Removed logic from FlutterAppDelegate into FlutterPluginAppLifeCycleDelegate -[9922]({{site.repo.engine}}/pull/9922) Split out lifecycle protocol +[9922]({{site.repo.engine}}pull/9922) Split out lifecycle protocol -[44026]({{site.repo.flutter}}/pull/44026) Exit tool if a plugin only supports the embedding v2 but the app doesn't +[44026]({{site.repo.flutter}}pull/44026) Exit tool if a plugin only supports the embedding v2 but the app doesn't -[44214]({{site.repo.flutter}}/pull/44214) Fix v1 embedding support heuristic for plugins +[44214]({{site.repo.flutter}}pull/44214) Fix v1 embedding support heuristic for plugins -[43994]({{site.repo.flutter}}/pull/43994) flutter build aar should also build plugins as AARs +[43994]({{site.repo.flutter}}pull/43994) flutter build aar should also build plugins as AARs -[13455]({{site.repo.engine}}/pull/13455) Automatically register plugins in FlutterEngine. (#43855) +[13455]({{site.repo.engine}}pull/13455) Automatically register plugins in FlutterEngine. (#43855) -[44011]({{site.repo.flutter}}/pull/44011) Move the plugin registrant to io.flutter.plugins and add the @Keep an… +[44011]({{site.repo.flutter}}pull/44011) Move the plugin registrant to io.flutter.plugins and add the @Keep an… -[44166]({{site.repo.flutter}}/pull/44166) Add v1 plugin register function into v2 plugin template +[44166]({{site.repo.flutter}}pull/44166) Add v1 plugin register function into v2 plugin template -[13394]({{site.repo.engine}}/pull/13394) Remove multiplexed Flutter Android Lifecycle. (#43663) +[13394]({{site.repo.engine}}pull/13394) Remove multiplexed Flutter Android Lifecycle. (#43663) -[45557]({{site.repo.flutter}}/pull/45557) Add a note to generated plugins files +[45557]({{site.repo.flutter}}pull/45557) Add a note to generated plugins files -[45379]({{site.repo.flutter}}/pull/45379) Add .flutter-plugins-dependencies to the project, which contains the app's plugin dependency graph +[45379]({{site.repo.flutter}}pull/45379) Add .flutter-plugins-dependencies to the project, which contains the app's plugin dependency graph [3850]({{site.repo.flutter}}-intellij/pull/3850) Support co-editing Flutter and Android in a single project @@ -554,401 +554,401 @@ We've made a significant upgrade to Add-to-App, the feature that allows you to i [4004]({{site.repo.flutter}}-intellij/pull/4004) Co-edit module created in Android Studio -[33297]({{site.repo.flutter}}/pull/33297) Instrument add to app flows +[33297]({{site.repo.flutter}}pull/33297) Instrument add to app flows -[33458]({{site.repo.flutter}}/pull/33458) Add to app measurement +[33458]({{site.repo.flutter}}pull/33458) Add to app measurement -[34189]({{site.repo.flutter}}/pull/34189) Instrument usage of include_flutter.groovy and xcode_backend.sh +[34189]({{site.repo.flutter}}pull/34189) Instrument usage of include_flutter.groovy and xcode_backend.sh -[13289]({{site.repo.engine}}/pull/13289) Made restarting the Engine remember the last entrypoint that was used. +[13289]({{site.repo.engine}}pull/13289) Made restarting the Engine remember the last entrypoint that was used. -[12370]({{site.repo.engine}}/pull/12370) Added a default entrypoint variable to match android syntax. +[12370]({{site.repo.engine}}pull/12370) Added a default entrypoint variable to match android syntax. -[10823]({{site.repo.engine}}/pull/10823) Expose isolateId for engine +[10823]({{site.repo.engine}}pull/10823) Expose isolateId for engine -[13264]({{site.repo.engine}}/pull/13264) Made restarting the Engine remember the last entrypoint that was used. +[13264]({{site.repo.engine}}pull/13264) Made restarting the Engine remember the last entrypoint that was used. -[13789]({{site.repo.engine}}/pull/13789) add recent packages to javadoc list +[13789]({{site.repo.engine}}pull/13789) add recent packages to javadoc list -[10481]({{site.repo.engine}}/pull/10481) Android embedding refactor pr40 add static engine cache +[10481]({{site.repo.engine}}pull/10481) Android embedding refactor pr40 add static engine cache -[29946]({{site.repo.flutter}}/pull/29946) Let CupertinoPageScaffold have tap status bar to scroll to top +[29946]({{site.repo.flutter}}pull/29946) Let CupertinoPageScaffold have tap status bar to scroll to top -[12587]({{site.repo.engine}}/pull/12587) Split out the logic to handle status bar touches into its own function +[12587]({{site.repo.engine}}pull/12587) Split out the logic to handle status bar touches into its own function -[44638]({{site.repo.flutter}}/pull/44638) Add module to create template help text +[44638]({{site.repo.flutter}}pull/44638) Add module to create template help text -[9351]({{site.repo.engine}}/pull/9351) Android Embedding Refactor PR32: Clean up logs in new embedding. +[9351]({{site.repo.engine}}pull/9351) Android Embedding Refactor PR32: Clean up logs in new embedding. -[6447]({{site.repo.engine}}/pull/6447) iOS Embedding Refactor +[6447]({{site.repo.engine}}pull/6447) iOS Embedding Refactor -[41794]({{site.repo.flutter}}/pull/41794) Updated the docstring for SystemNavigator.pop. +[41794]({{site.repo.flutter}}pull/41794) Updated the docstring for SystemNavigator.pop. -[9304]({{site.repo.engine}}/pull/9304) Decorate UIApplicationDelegate wrappers with matching UIKit deprecation +[9304]({{site.repo.engine}}pull/9304) Decorate UIApplicationDelegate wrappers with matching UIKit deprecation -[266]({{site.github}}/FirebaseExtended/flutterfire/pull/266) [firebase_performance] support v2 android embedding +[266]({{site.github}}FirebaseExtended/flutterfire/pull/266) [firebase_performance] support v2 android embedding -[274]({{site.github}}/FirebaseExtended/flutterfire/pull/274) [firebase_core] v2 embedding API +[274]({{site.github}}FirebaseExtended/flutterfire/pull/274) [firebase_core] v2 embedding API -[275]({{site.github}}/FirebaseExtended/flutterfire/pull/275) [firebase_ml_vision] v2 embedding API +[275]({{site.github}}FirebaseExtended/flutterfire/pull/275) [firebase_ml_vision] v2 embedding API -[282]({{site.github}}/FirebaseExtended/flutterfire/pull/282) [firebase_remote_config] Support v2 android embedder. +[282]({{site.github}}FirebaseExtended/flutterfire/pull/282) [firebase_remote_config] Support v2 android embedder. -[287]({{site.github}}/FirebaseExtended/flutterfire/pull/287) [firebase_database] Support v2 android embedder. +[287]({{site.github}}FirebaseExtended/flutterfire/pull/287) [firebase_database] Support v2 android embedder. -[1266]({{site.github}}/FirebaseExtended/flutterfire/pull/1266) [firebase_analytics] Support Android v2 embedding +[1266]({{site.github}}FirebaseExtended/flutterfire/pull/1266) [firebase_analytics] Support Android v2 embedding -[1295]({{site.github}}/FirebaseExtended/flutterfire/pull/1295) [firebase_storage] Support Android v2 embedding +[1295]({{site.github}}FirebaseExtended/flutterfire/pull/1295) [firebase_storage] Support Android v2 embedding -[1369]({{site.github}}/FirebaseExtended/flutterfire/pull/1369) Upgrade in-app-messaging to plugin api v2 +[1369]({{site.github}}FirebaseExtended/flutterfire/pull/1369) Upgrade in-app-messaging to plugin api v2 -[1370]({{site.github}}/FirebaseExtended/flutterfire/pull/1370) Upgrade crashlytics to v2 plugin API +[1370]({{site.github}}FirebaseExtended/flutterfire/pull/1370) Upgrade crashlytics to v2 plugin API -[1372]({{site.github}}/FirebaseExtended/flutterfire/pull/1372) [firebase_dynamic_links] support v2 embedding +[1372]({{site.github}}FirebaseExtended/flutterfire/pull/1372) [firebase_dynamic_links] support v2 embedding -[2142]({{site.github}}/flutter/plugins/pull/2142) [Connectivity] migrate to the new android embedding +[2142]({{site.repo.organization}}plugins/pull/2142) [Connectivity] migrate to the new android embedding -[2152]({{site.github}}/flutter/plugins/pull/2152) [battery] Support the v2 Android embedder +[2152]({{site.repo.organization}}plugins/pull/2152) [battery] Support the v2 Android embedder -[2155]({{site.github}}/flutter/plugins/pull/2155) [in_app_purchase] migrate to the v2 android embedding +[2155]({{site.repo.organization}}plugins/pull/2155) [in_app_purchase] migrate to the v2 android embedding -[2156]({{site.github}}/flutter/plugins/pull/2156) [Share] Support v2 android embedder. +[2156]({{site.repo.organization}}plugins/pull/2156) [Share] Support v2 android embedder. -[2157]({{site.github}}/flutter/plugins/pull/2157) [url_launcher] Migrate to the new embedding +[2157]({{site.repo.organization}}plugins/pull/2157) [url_launcher] Migrate to the new embedding -[2160]({{site.github}}/flutter/plugins/pull/2160) [package_info] Support the v2 Android embedder (with e2e tests) +[2160]({{site.repo.organization}}plugins/pull/2160) [package_info] Support the v2 Android embedder (with e2e tests) -[2162]({{site.github}}/flutter/plugins/pull/2162) [shared_preferences] Support v2 android embedder. +[2162]({{site.repo.organization}}plugins/pull/2162) [shared_preferences] Support v2 android embedder. -[2163]({{site.github}}/flutter/plugins/pull/2163) [device_info] Support v2 android embedder. +[2163]({{site.repo.organization}}plugins/pull/2163) [device_info] Support v2 android embedder. -[2164]({{site.github}}/flutter/plugins/pull/2164) [sensor] Support v2 android embedder. +[2164]({{site.repo.organization}}plugins/pull/2164) [sensor] Support v2 android embedder. -[2165]({{site.github}}/flutter/plugins/pull/2165) [camera] Migrate to the new embedding +[2165]({{site.repo.organization}}plugins/pull/2165) [camera] Migrate to the new embedding -[2167]({{site.github}}/flutter/plugins/pull/2167) [quick_actions] Support v2 android embedder. +[2167]({{site.repo.organization}}plugins/pull/2167) [quick_actions] Support v2 android embedder. -[2169]({{site.github}}/flutter/plugins/pull/2169) [flutter_webview] Migrate to the new embedding +[2169]({{site.repo.organization}}plugins/pull/2169) [flutter_webview] Migrate to the new embedding -[2193]({{site.github}}/flutter/plugins/pull/2193) [android_alarm_manager] migrate to the V2 Android embedding +[2193]({{site.repo.organization}}plugins/pull/2193) [android_alarm_manager] migrate to the V2 Android embedding -[2195]({{site.github}}/flutter/plugins/pull/2195) [android_intent] Cleanup the V2 migration +[2195]({{site.repo.organization}}plugins/pull/2195) [android_intent] Cleanup the V2 migration -[2196]({{site.github}}/flutter/plugins/pull/2196) [webview_flutter] (Trivial) Add V2 warnings +[2196]({{site.repo.organization}}plugins/pull/2196) [webview_flutter] (Trivial) Add V2 warnings -[2200]({{site.github}}/flutter/plugins/pull/2200) [flutter_webview] Revert v2 embedder support +[2200]({{site.repo.organization}}plugins/pull/2200) [flutter_webview] Revert v2 embedder support -[2204]({{site.github}}/flutter/plugins/pull/2204) [url_launcher] Re-land v2 embedding support +[2204]({{site.repo.organization}}plugins/pull/2204) [url_launcher] Re-land v2 embedding support -[2209]({{site.github}}/flutter/plugins/pull/2209) [webview_flutter] Re-land support v2 embedding support +[2209]({{site.repo.organization}}plugins/pull/2209) [webview_flutter] Re-land support v2 embedding support -[2226]({{site.github}}/flutter/plugins/pull/2226) [video_player] Add v2 embedding support +[2226]({{site.repo.organization}}plugins/pull/2226) [video_player] Add v2 embedding support -[2241]({{site.github}}/flutter/plugins/pull/2241) [Shared_preferences]suppress warnings +[2241]({{site.repo.organization}}plugins/pull/2241) [Shared_preferences]suppress warnings -[2284]({{site.github}}/flutter/plugins/pull/2284) [path_provider] Add v2 embedding support for +[2284]({{site.repo.organization}}plugins/pull/2284) [path_provider] Add v2 embedding support for -[2327]({{site.github}}/flutter/plugins/pull/2327) [android_alarm_manager] Update minimum Flutter version to 1.12.0 +[2327]({{site.repo.organization}}plugins/pull/2327) [android_alarm_manager] Update minimum Flutter version to 1.12.0 -[43461]({{site.repo.flutter}}/pull/43461) Fixed usage of optional types in swift integration test. +[43461]({{site.repo.flutter}}pull/43461) Fixed usage of optional types in swift integration test. -[13423]({{site.repo.engine}}/pull/13423) Automatically destroy FlutterEngine when created by FlutterActivity or FlutterFragment. +[13423]({{site.repo.engine}}pull/13423) Automatically destroy FlutterEngine when created by FlutterActivity or FlutterFragment. -[42958]({{site.repo.flutter}}/pull/42958) Turn off bitcode for integration tests and add-to-app templates +[42958]({{site.repo.flutter}}pull/42958) Turn off bitcode for integration tests and add-to-app templates -[13428]({{site.repo.engine}}/pull/13428) Set the install name at link time for darwin dylibs +[13428]({{site.repo.engine}}pull/13428) Set the install name at link time for darwin dylibs -[41333]({{site.repo.flutter}}/pull/41333) Merge Flutter assets in add to app +[41333]({{site.repo.flutter}}pull/41333) Merge Flutter assets in add to app -[39747]({{site.repo.flutter}}/pull/39747) Fix type mismatch in Gradle +[39747]({{site.repo.flutter}}pull/39747) Fix type mismatch in Gradle -[39986]({{site.repo.flutter}}/pull/39986) Enable Proguard by default on release mode +[39986]({{site.repo.flutter}}pull/39986) Enable Proguard by default on release mode -[40181]({{site.repo.flutter}}/pull/40181) Update Kotlin and Gradle version +[40181]({{site.repo.flutter}}pull/40181) Update Kotlin and Gradle version -[40282]({{site.repo.flutter}}/pull/40282) Flip the default for proguard +[40282]({{site.repo.flutter}}pull/40282) Flip the default for proguard -[40440]({{site.repo.flutter}}/pull/40440) Rename useProguard method, so Gradle doesn't get confused +[40440]({{site.repo.flutter}}pull/40440) Rename useProguard method, so Gradle doesn't get confused -[40453]({{site.repo.flutter}}/pull/40453) Enable R8 +[40453]({{site.repo.flutter}}pull/40453) Enable R8 -[40610]({{site.repo.flutter}}/pull/40610) Enable the resource shrinker +[40610]({{site.repo.flutter}}pull/40610) Enable the resource shrinker -[40900]({{site.repo.flutter}}/pull/40900) Stop using deprecated features from Gradle +[40900]({{site.repo.flutter}}pull/40900) Stop using deprecated features from Gradle -[40925]({{site.repo.flutter}}/pull/40925) Use AndroidX in new projects by default +[40925]({{site.repo.flutter}}pull/40925) Use AndroidX in new projects by default -[41142]({{site.repo.flutter}}/pull/41142) Add embedding as API dependency instead of compile only dependency +[41142]({{site.repo.flutter}}pull/41142) Add embedding as API dependency instead of compile only dependency -[41251]({{site.repo.flutter}}/pull/41251) Migrate examples and tests to AndroidX +[41251]({{site.repo.flutter}}pull/41251) Migrate examples and tests to AndroidX -[41254]({{site.repo.flutter}}/pull/41254) Test that flutter assets are contained in the APK +[41254]({{site.repo.flutter}}pull/41254) Test that flutter assets are contained in the APK -[41885]({{site.repo.flutter}}/pull/41885) Include embedding transitive dependencies in plugins +[41885]({{site.repo.flutter}}pull/41885) Include embedding transitive dependencies in plugins -[41942]({{site.repo.flutter}}/pull/41942) Use mergeResourcesProvider instead of deprecated mergeResources +[41942]({{site.repo.flutter}}pull/41942) Use mergeResourcesProvider instead of deprecated mergeResources -[42022]({{site.repo.flutter}}/pull/42022) Fix smoke test +[42022]({{site.repo.flutter}}pull/42022) Fix smoke test -[42306]({{site.repo.flutter}}/pull/42306) Ensure that flutter assets are copied in the AAR +[42306]({{site.repo.flutter}}pull/42306) Ensure that flutter assets are copied in the AAR -[42352]({{site.repo.flutter}}/pull/42352) Add android.permission.WAKE_LOCK permission to abstract_method_smoke_test +[42352]({{site.repo.flutter}}pull/42352) Add android.permission.WAKE_LOCK permission to abstract_method_smoke_test -[42360]({{site.repo.flutter}}/pull/42360) Add smoke test for the new Android embedding +[42360]({{site.repo.flutter}}pull/42360) Add smoke test for the new Android embedding -[42548]({{site.repo.flutter}}/pull/42548) Print message and log event when app isn't using AndroidX +[42548]({{site.repo.flutter}}pull/42548) Print message and log event when app isn't using AndroidX -[42684]({{site.repo.flutter}}/pull/42684) Remove isNewAndroidEmbeddingEnabled flag when reading an existing pro… +[42684]({{site.repo.flutter}}pull/42684) Remove isNewAndroidEmbeddingEnabled flag when reading an existing pro… -[42709]({{site.repo.flutter}}/pull/42709) Test Gradle on Windows +[42709]({{site.repo.flutter}}pull/42709) Test Gradle on Windows -[42981]({{site.repo.flutter}}/pull/42981) Remove GeneratedPluginRegistrant.java +[42981]({{site.repo.flutter}}pull/42981) Remove GeneratedPluginRegistrant.java -[43187]({{site.repo.flutter}}/pull/43187) Ensure android.enableR8 is appended to a new line +[43187]({{site.repo.flutter}}pull/43187) Ensure android.enableR8 is appended to a new line -[43479]({{site.repo.flutter}}/pull/43479) Refactor gradle.dart +[43479]({{site.repo.flutter}}pull/43479) Refactor gradle.dart -[43669]({{site.repo.flutter}}/pull/43669) Don't read AndroidManifest.xml if it doesn't exit +[43669]({{site.repo.flutter}}pull/43669) Don't read AndroidManifest.xml if it doesn't exit -[43674]({{site.repo.flutter}}/pull/43674) Add missing import +[43674]({{site.repo.flutter}}pull/43674) Add missing import -[43675]({{site.repo.flutter}}/pull/43675) Fix device lab tests +[43675]({{site.repo.flutter}}pull/43675) Fix device lab tests -[43927]({{site.repo.flutter}}/pull/43927) Fix stdout test +[43927]({{site.repo.flutter}}pull/43927) Fix stdout test -[43941]({{site.repo.flutter}}/pull/43941) Tweaks after the gradle.dart refactor +[43941]({{site.repo.flutter}}pull/43941) Tweaks after the gradle.dart refactor -[44301]({{site.repo.flutter}}/pull/44301) Don't print how to consume AARs when building plugins as AARs +[44301]({{site.repo.flutter}}pull/44301) Don't print how to consume AARs when building plugins as AARs -[44243]({{site.repo.flutter}}/pull/44243) Build local maven repo when using local engine +[44243]({{site.repo.flutter}}pull/44243) Build local maven repo when using local engine -[44302]({{site.repo.flutter}}/pull/44302) Don't add x86 nor x64 when building a local engine in debug mode +[44302]({{site.repo.flutter}}pull/44302) Don't add x86 nor x64 when building a local engine in debug mode -[44637]({{site.repo.flutter}}/pull/44637) Attach looks at future observatory URIs +[44637]({{site.repo.flutter}}pull/44637) Attach looks at future observatory URIs -[44783]({{site.repo.flutter}}/pull/44783) Forward ProcessException to error handlers +[44783]({{site.repo.flutter}}pull/44783) Forward ProcessException to error handlers -[44797]({{site.repo.flutter}}/pull/44797) Build AAR for all build variants by default +[44797]({{site.repo.flutter}}pull/44797) Build AAR for all build variants by default -[45439]({{site.repo.flutter}}/pull/45439) Fallback to protocol discovery if mdns returns null +[45439]({{site.repo.flutter}}pull/45439) Fallback to protocol discovery if mdns returns null -[45579]({{site.repo.flutter}}/pull/45579) Add integration test for transitive plugin dependencies +[45579]({{site.repo.flutter}}pull/45579) Add integration test for transitive plugin dependencies -[45743]({{site.repo.flutter}}/pull/45743) Android log reader reads any recent logs +[45743]({{site.repo.flutter}}pull/45743) Android log reader reads any recent logs -[45937]({{site.repo.flutter}}/pull/45937) Handle case where lastLogcatTimestamp is null +[45937]({{site.repo.flutter}}pull/45937) Handle case where lastLogcatTimestamp is null -[46040]({{site.repo.flutter}}/pull/46040) Enable Android embedding v2 on the beta, dev and stable channel +[46040]({{site.repo.flutter}}pull/46040) Enable Android embedding v2 on the beta, dev and stable channel -[46101]({{site.repo.flutter}}/pull/46101) Remove flutterBuildPluginAsAarFeature flag +[46101]({{site.repo.flutter}}pull/46101) Remove flutterBuildPluginAsAarFeature flag -[14136]({{site.repo.engine}}/pull/14136) Expanded our scenario_app docs. +[14136]({{site.repo.engine}}pull/14136) Expanded our scenario_app docs. -[14094]({{site.repo.engine}}/pull/14094) Started specifying the OS version for running the tests. +[14094]({{site.repo.engine}}pull/14094) Started specifying the OS version for running the tests. -[13421]({{site.repo.engine}}/pull/13421) FlutterAppDelegate: Added back in empty lifecycle methods +[13421]({{site.repo.engine}}pull/13421) FlutterAppDelegate: Added back in empty lifecycle methods -[13073]({{site.repo.engine}}/pull/13073) Removed retain cycle from notification center. +[13073]({{site.repo.engine}}pull/13073) Removed retain cycle from notification center. -[13006]({{site.repo.engine}}/pull/13006) Refactor: FlutterDartProject +[13006]({{site.repo.engine}}pull/13006) Refactor: FlutterDartProject -[44782]({{site.repo.flutter}}/pull/44782) Updated flutter/examples to further conform to new embedding: removed references to FlutterApplication, deleted all MainActivity's that were not necessary, removed all direct invocations of GeneratedPluginRegistrant. (#22529) +[44782]({{site.repo.flutter}}pull/44782) Updated flutter/examples to further conform to new embedding: removed references to FlutterApplication, deleted all MainActivity's that were not necessary, removed all direct invocations of GeneratedPluginRegistrant. (#22529) -[45740]({{site.repo.flutter}}/pull/45740) Do not delete output directory during flutter build ios-framework +[45740]({{site.repo.flutter}}pull/45740) Do not delete output directory during flutter build ios-framework -[45560]({{site.repo.flutter}}/pull/45560) Always compile with isysroot on iOS to point to SDK root +[45560]({{site.repo.flutter}}pull/45560) Always compile with isysroot on iOS to point to SDK root -[45436]({{site.repo.flutter}}/pull/45436) Always compile with -isysroot flag on iOS to point to SDK root +[45436]({{site.repo.flutter}}pull/45436) Always compile with -isysroot flag on iOS to point to SDK root -[45189]({{site.repo.flutter}}/pull/45189) Remove chmod to make Flutter framework headers unwritable +[45189]({{site.repo.flutter}}pull/45189) Remove chmod to make Flutter framework headers unwritable -[45136]({{site.repo.flutter}}/pull/45136) Remove FLUTTER_DEVICELAB_XCODE_PROVISIONING_CONFIG code paths +[45136]({{site.repo.flutter}}pull/45136) Remove FLUTTER_DEVICELAB_XCODE_PROVISIONING_CONFIG code paths -[44633]({{site.repo.flutter}}/pull/44633) Turn on bitcode for integration tests and add-to-app templates +[44633]({{site.repo.flutter}}pull/44633) Turn on bitcode for integration tests and add-to-app templates -[44625]({{site.repo.flutter}}/pull/44625) Release startup lock during long-lived build ios framework +[44625]({{site.repo.flutter}}pull/44625) Release startup lock during long-lived build ios framework -[44324]({{site.repo.flutter}}/pull/44324) Add swift_versions to plugin template podspec, include default CocoaPod version +[44324]({{site.repo.flutter}}pull/44324) Add swift_versions to plugin template podspec, include default CocoaPod version -[43915]({{site.repo.flutter}}/pull/43915) Observe logging from VM service on iOS 13 +[43915]({{site.repo.flutter}}pull/43915) Observe logging from VM service on iOS 13 -[43553]({{site.repo.flutter}}/pull/43553) Pass environment variables through to xcodebuild +[43553]({{site.repo.flutter}}pull/43553) Pass environment variables through to xcodebuild -[42872]({{site.repo.flutter}}/pull/42872) Remove use_modular_headers from Podfiles using libraries +[42872]({{site.repo.flutter}}pull/42872) Remove use_modular_headers from Podfiles using libraries -[42808]({{site.repo.flutter}}/pull/42808) Run flutter pub get before pod install in platform_view_ios__start_up test +[42808]({{site.repo.flutter}}pull/42808) Run flutter pub get before pod install in platform_view_ios__start_up test -[42254]({{site.repo.flutter}}/pull/42254) Update minimum version to Xcode 10.2 +[42254]({{site.repo.flutter}}pull/42254) Update minimum version to Xcode 10.2 -[42204]({{site.repo.flutter}}/pull/42204) Add use_modular_headers! to default Podfile +[42204]({{site.repo.flutter}}pull/42204) Add use_modular_headers! to default Podfile -[42029]({{site.repo.flutter}}/pull/42029) Always embed iOS Flutter.framework build mode version from Xcode configuration +[42029]({{site.repo.flutter}}pull/42029) Always embed iOS Flutter.framework build mode version from Xcode configuration -[41882]({{site.repo.flutter}}/pull/41882) Increase template Swift version from 4 to 5 +[41882]({{site.repo.flutter}}pull/41882) Increase template Swift version from 4 to 5 -[41491]({{site.repo.flutter}}/pull/41491) Skip pod initialization if version >= 1.8.0. +[41491]({{site.repo.flutter}}pull/41491) Skip pod initialization if version >= 1.8.0. -[40792]({{site.repo.flutter}}/pull/40792) Move build info checks from generating files to the xcode build +[40792]({{site.repo.flutter}}pull/40792) Move build info checks from generating files to the xcode build -[40611]({{site.repo.flutter}}/pull/40611) Warn when build number and version can't be parsed on iOS +[40611]({{site.repo.flutter}}pull/40611) Warn when build number and version can't be parsed on iOS -[40401]({{site.repo.flutter}}/pull/40401) Make FlutterPluginRegistrant a static framework so add-to-app can use static framework plugins +[40401]({{site.repo.flutter}}pull/40401) Make FlutterPluginRegistrant a static framework so add-to-app can use static framework plugins -[40174]({{site.repo.flutter}}/pull/40174) Keep Flutter.framework binaries writable so they can be code signed +[40174]({{site.repo.flutter}}pull/40174) Keep Flutter.framework binaries writable so they can be code signed -[40117]({{site.repo.flutter}}/pull/40117) Show outdated CocoaPods version in hint text +[40117]({{site.repo.flutter}}pull/40117) Show outdated CocoaPods version in hint text -[39539]({{site.repo.flutter}}/pull/39539) Keep Flutter.framework binaries writable so they can be code signed +[39539]({{site.repo.flutter}}pull/39539) Keep Flutter.framework binaries writable so they can be code signed -[39509]({{site.repo.flutter}}/pull/39509) Skip failing add2app test to unblock roll +[39509]({{site.repo.flutter}}pull/39509) Skip failing add2app test to unblock roll -[38992]({{site.repo.flutter}}/pull/38992) Clean Xcode workspace during flutter clean +[38992]({{site.repo.flutter}}pull/38992) Clean Xcode workspace during flutter clean -[38905]({{site.repo.flutter}}/pull/38905) Remove iphonesimulator from SUPPORTED_PLATFORMS for Profile and Release modes +[38905]({{site.repo.flutter}}pull/38905) Remove iphonesimulator from SUPPORTED_PLATFORMS for Profile and Release modes -[11357]({{site.repo.engine}}/pull/11357) Rename first frame method and notify FlutterActivity when full drawn (#38714 #36796). +[11357]({{site.repo.engine}}pull/11357) Rename first frame method and notify FlutterActivity when full drawn (#38714 #36796). -[11844]({{site.repo.engine}}/pull/11844) Updated API usage in scenario app by deleting unnecessary method. +[11844]({{site.repo.engine}}pull/11844) Updated API usage in scenario app by deleting unnecessary method. -[11902]({{site.repo.engine}}/pull/11902) Remove un-needed FragmentActivity import statements to facilitate proguard. +[11902]({{site.repo.engine}}pull/11902) Remove un-needed FragmentActivity import statements to facilitate proguard. -[12305]({{site.repo.engine}}/pull/12305) Introduce flutterfragmentactivity +[12305]({{site.repo.engine}}pull/12305) Introduce flutterfragmentactivity -[12328]({{site.repo.engine}}/pull/12328) Added javadoc comments to FlutterActivity and FlutterFragmentActivity. +[12328]({{site.repo.engine}}pull/12328) Added javadoc comments to FlutterActivity and FlutterFragmentActivity. -[12359]({{site.repo.engine}}/pull/12359) Forwards Flutter View to platform views and detaches when needed. +[12359]({{site.repo.engine}}pull/12359) Forwards Flutter View to platform views and detaches when needed. -[12362]({{site.repo.engine}}/pull/12362) Fixes race condition that was reported internally. +[12362]({{site.repo.engine}}pull/12362) Fixes race condition that was reported internally. -[12806]({{site.repo.engine}}/pull/12806) Move initialization into FlutterEngine +[12806]({{site.repo.engine}}pull/12806) Move initialization into FlutterEngine -[12987]({{site.repo.engine}}/pull/12987) Added FlutterActivity and FlutterFragment hook to cleanUpFlutterEngine() as symmetry for configureFlutterEngine(). (#41943) +[12987]({{site.repo.engine}}pull/12987) Added FlutterActivity and FlutterFragment hook to cleanUpFlutterEngine() as symmetry for configureFlutterEngine(). (#41943) -[13214]({{site.repo.engine}}/pull/13214) Forwards Activity result to FlutterFragment in FlutterFragmentActivity. +[13214]({{site.repo.engine}}pull/13214) Forwards Activity result to FlutterFragment in FlutterFragmentActivity. -[13215]({{site.repo.engine}}/pull/13215) Adds Dark Mode support to new Android embedding (this was accidentally missed previously). +[13215]({{site.repo.engine}}pull/13215) Adds Dark Mode support to new Android embedding (this was accidentally missed previously). -[13402]({{site.repo.engine}}/pull/13402) Converted ActivityAware and ServiceAware Lifecycles to opaque objects (#43670) +[13402]({{site.repo.engine}}pull/13402) Converted ActivityAware and ServiceAware Lifecycles to opaque objects (#43670) -[13660]({{site.repo.engine}}/pull/13660) Fix splash screen lookup. (#44131) +[13660]({{site.repo.engine}}pull/13660) Fix splash screen lookup. (#44131) -[13698]({{site.repo.engine}}/pull/13698) Fix plugin registrant reflection path. (#44161) +[13698]({{site.repo.engine}}pull/13698) Fix plugin registrant reflection path. (#44161) -[13738]({{site.repo.engine}}/pull/13738) Removed scary experimental warnings for new embedding. (#44314) +[13738]({{site.repo.engine}}pull/13738) Removed scary experimental warnings for new embedding. (#44314) -[13739]({{site.repo.engine}}/pull/13739) Point old plugin registry accessors to new embedding plugin accessors. (#44225) +[13739]({{site.repo.engine}}pull/13739) Point old plugin registry accessors to new embedding plugin accessors. (#44225) -[13743]({{site.repo.engine}}/pull/13743) Expose asset lookup from plugin binding. (#42019) +[13743]({{site.repo.engine}}pull/13743) Expose asset lookup from plugin binding. (#42019) -[13855]({{site.repo.engine}}/pull/13855) Add support for --dart-flags in FlutterShellArgs. (#44855) +[13855]({{site.repo.engine}}pull/13855) Add support for --dart-flags in FlutterShellArgs. (#44855) -[13932]({{site.repo.engine}}/pull/13932) Removed GET_ACTIVITIES flag from all manifest meta-data lookups. (#38891) +[13932]({{site.repo.engine}}pull/13932) Removed GET_ACTIVITIES flag from all manifest meta-data lookups. (#38891) -[2087]({{site.github}}/flutter/plugins/pull/2087) [android_alarm_manager] Update and migrate iOS example project +[2087]({{site.repo.organization}}plugins/pull/2087) [android_alarm_manager] Update and migrate iOS example project -[2088]({{site.github}}/flutter/plugins/pull/2088) [android_intent] Update and migrate iOS example project +[2088]({{site.repo.organization}}plugins/pull/2088) [android_intent] Update and migrate iOS example project -[2089]({{site.github}}/flutter/plugins/pull/2089) [battery] Update and migrate iOS example project +[2089]({{site.repo.organization}}plugins/pull/2089) [battery] Update and migrate iOS example project -[2090]({{site.github}}/flutter/plugins/pull/2090) [camera] Update and migrate iOS example project +[2090]({{site.repo.organization}}plugins/pull/2090) [camera] Update and migrate iOS example project -[2091]({{site.github}}/flutter/plugins/pull/2091) [connectivity] Update and migrate iOS example project +[2091]({{site.repo.organization}}plugins/pull/2091) [connectivity] Update and migrate iOS example project -[2092]({{site.github}}/flutter/plugins/pull/2092) [device_info] Update and migrate iOS example project +[2092]({{site.repo.organization}}plugins/pull/2092) [device_info] Update and migrate iOS example project -[2093]({{site.github}}/flutter/plugins/pull/2093) [google_maps_flutter] Update and migrate iOS example project +[2093]({{site.repo.organization}}plugins/pull/2093) [google_maps_flutter] Update and migrate iOS example project -[2094]({{site.github}}/flutter/plugins/pull/2094) [google_sign_in] Update and migrate iOS example project +[2094]({{site.repo.organization}}plugins/pull/2094) [google_sign_in] Update and migrate iOS example project -[2095]({{site.github}}/flutter/plugins/pull/2095) [image_picker] Update and migrate iOS example project +[2095]({{site.repo.organization}}plugins/pull/2095) [image_picker] Update and migrate iOS example project -[2096]({{site.github}}/flutter/plugins/pull/2096) [in_app_purchase] Update and migrate iOS example project +[2096]({{site.repo.organization}}plugins/pull/2096) [in_app_purchase] Update and migrate iOS example project -[2097]({{site.github}}/flutter/plugins/pull/2097) [local_auth] Update and migrate iOS example project +[2097]({{site.repo.organization}}plugins/pull/2097) [local_auth] Update and migrate iOS example project -[2098]({{site.github}}/flutter/plugins/pull/2098) [package_info] Update and migrate iOS example project +[2098]({{site.repo.organization}}plugins/pull/2098) [package_info] Update and migrate iOS example project -[2099]({{site.github}}/flutter/plugins/pull/2099) [path_provider] Update and migrate iOS example project +[2099]({{site.repo.organization}}plugins/pull/2099) [path_provider] Update and migrate iOS example project -[2100]({{site.github}}/flutter/plugins/pull/2100) [quick_actions] Update and migrate iOS example project +[2100]({{site.repo.organization}}plugins/pull/2100) [quick_actions] Update and migrate iOS example project -[2101]({{site.github}}/flutter/plugins/pull/2101) [sensors] Update and migrate iOS example project +[2101]({{site.repo.organization}}plugins/pull/2101) [sensors] Update and migrate iOS example project -[2102]({{site.github}}/flutter/plugins/pull/2102) [share] Update and migrate iOS example project +[2102]({{site.repo.organization}}plugins/pull/2102) [share] Update and migrate iOS example project -[2103]({{site.github}}/flutter/plugins/pull/2103) [shared_preferences] Update and migrate iOS example project +[2103]({{site.repo.organization}}plugins/pull/2103) [shared_preferences] Update and migrate iOS example project -[2109]({{site.github}}/flutter/plugins/pull/2109) [url_launcher] Update and migrate iOS example project +[2109]({{site.repo.organization}}plugins/pull/2109) [url_launcher] Update and migrate iOS example project -[2110]({{site.github}}/flutter/plugins/pull/2110) [video_player] Update and migrate iOS example project +[2110]({{site.repo.organization}}plugins/pull/2110) [video_player] Update and migrate iOS example project -[2115]({{site.github}}/flutter/plugins/pull/2115) [camera] Define clang modules in for iOS +[2115]({{site.repo.organization}}plugins/pull/2115) [camera] Define clang modules in for iOS -[2125]({{site.github}}/flutter/plugins/pull/2125) [in_app_purchase] Define clang module for iOS +[2125]({{site.repo.organization}}plugins/pull/2125) [in_app_purchase] Define clang module for iOS -[2128]({{site.github}}/flutter/plugins/pull/2128) [image_picker] Define clang module for iOS +[2128]({{site.repo.organization}}plugins/pull/2128) [image_picker] Define clang module for iOS -[2135]({{site.github}}/flutter/plugins/pull/2135) [android_alarm_manager] Define clang module for iOS +[2135]({{site.repo.organization}}plugins/pull/2135) [android_alarm_manager] Define clang module for iOS -[2137]({{site.github}}/flutter/plugins/pull/2137) [connectivity] Define clang module for iOS +[2137]({{site.repo.organization}}plugins/pull/2137) [connectivity] Define clang module for iOS -[2138]({{site.github}}/flutter/plugins/pull/2138) [device_info] Define clang module for iOS +[2138]({{site.repo.organization}}plugins/pull/2138) [device_info] Define clang module for iOS -[2144]({{site.github}}/flutter/plugins/pull/2144) [android_intent] Define clang module for iOS +[2144]({{site.repo.organization}}plugins/pull/2144) [android_intent] Define clang module for iOS -[2145]({{site.github}}/flutter/plugins/pull/2145) [instrumentation_adapter] Define clang module for iOS +[2145]({{site.repo.organization}}plugins/pull/2145) [instrumentation_adapter] Define clang module for iOS -[2146]({{site.github}}/flutter/plugins/pull/2146) [local_auth] Define clang module for iOS +[2146]({{site.repo.organization}}plugins/pull/2146) [local_auth] Define clang module for iOS -[2147]({{site.github}}/flutter/plugins/pull/2147) [path_provider] Define clang module for iOS +[2147]({{site.repo.organization}}plugins/pull/2147) [path_provider] Define clang module for iOS -[2148]({{site.github}}/flutter/plugins/pull/2148) [package_info] Define clang module for iOS +[2148]({{site.repo.organization}}plugins/pull/2148) [package_info] Define clang module for iOS -[2149]({{site.github}}/flutter/plugins/pull/2149) [quick_actions] Define clang module for iOS +[2149]({{site.repo.organization}}plugins/pull/2149) [quick_actions] Define clang module for iOS -[2175]({{site.github}}/flutter/plugins/pull/2175) [sensors] Define clang module for iOS +[2175]({{site.repo.organization}}plugins/pull/2175) [sensors] Define clang module for iOS -[2176]({{site.github}}/flutter/plugins/pull/2176) [shared_preferences] Define clang module for iOS +[2176]({{site.repo.organization}}plugins/pull/2176) [shared_preferences] Define clang module for iOS -[2177]({{site.github}}/flutter/plugins/pull/2177) [url_launcher] Define clang module for iOS +[2177]({{site.repo.organization}}plugins/pull/2177) [url_launcher] Define clang module for iOS -[2179]({{site.github}}/flutter/plugins/pull/2179) [battery] Define clang module for iOS +[2179]({{site.repo.organization}}plugins/pull/2179) [battery] Define clang module for iOS -[2180]({{site.github}}/flutter/plugins/pull/2180) [share] Define clang module for iOS +[2180]({{site.repo.organization}}plugins/pull/2180) [share] Define clang module for iOS -[2182]({{site.github}}/flutter/plugins/pull/2182) [google_maps_flutter] Define clang module for iOS, fix analyzer warnings +[2182]({{site.repo.organization}}plugins/pull/2182) [google_maps_flutter] Define clang module for iOS, fix analyzer warnings -[2183]({{site.github}}/flutter/plugins/pull/2183) [video_player] Define clang module for iOS +[2183]({{site.repo.organization}}plugins/pull/2183) [video_player] Define clang module for iOS -[2184]({{site.github}}/flutter/plugins/pull/2184) [google_sign_in] Define clang module for iOS +[2184]({{site.repo.organization}}plugins/pull/2184) [google_sign_in] Define clang module for iOS -[2185]({{site.github}}/flutter/plugins/pull/2185) [webview_flutter] Define clang module for iOS +[2185]({{site.repo.organization}}plugins/pull/2185) [webview_flutter] Define clang module for iOS -[2186]({{site.github}}/flutter/plugins/pull/2186) Run clang analyzer on iOS and macOS code in CI test when packages change +[2186]({{site.repo.organization}}plugins/pull/2186) Run clang analyzer on iOS and macOS code in CI test when packages change -[40302]({{site.repo.flutter}}/pull/40302) Set DEFINES_MODULE for FlutterPluginRegistrant to generate modulemap +[40302]({{site.repo.flutter}}pull/40302) Set DEFINES_MODULE for FlutterPluginRegistrant to generate modulemap -[2206]({{site.github}}/flutter/plugins/pull/2206) [flutter_plugin_android_lifecycle] Update README with new plugin name +[2206]({{site.repo.organization}}plugins/pull/2206) [flutter_plugin_android_lifecycle] Update README with new plugin name -[2207]({{site.github}}/flutter/plugins/pull/2207) [flutter_plugin_android_lifecycle] bump e2e depenency to 0.2.1 +[2207]({{site.repo.organization}}plugins/pull/2207) [flutter_plugin_android_lifecycle] bump e2e depenency to 0.2.1 -[2223]({{site.github}}/flutter/plugins/pull/2223) [flutter_plugin_android_lifecycle] register the e2e plugin in the example app +[2223]({{site.repo.organization}}plugins/pull/2223) [flutter_plugin_android_lifecycle] register the e2e plugin in the example app -[2243]({{site.github}}/flutter/plugins/pull/2243) [flutter_plugin_android_lifecycle] Adapt the FlutterLifecycleAdapter to the new embedding API +[2243]({{site.repo.organization}}plugins/pull/2243) [flutter_plugin_android_lifecycle] Adapt the FlutterLifecycleAdapter to the new embedding API -[44043]({{site.repo.flutter}}/pull/44043) Add Android embedding version analytics +[44043]({{site.repo.flutter}}pull/44043) Add Android embedding version analytics -[2120]({{site.github}}/flutter/plugins/pull/2120) [image_picker] fix crash when aar from 'flutter build aar' +[2120]({{site.repo.organization}}plugins/pull/2120) [image_picker] fix crash when aar from 'flutter build aar' -[2168]({{site.github}}/flutter/plugins/pull/2168) Add plugin for Android lifecycle in embedding +[2168]({{site.repo.organization}}plugins/pull/2168) Add plugin for Android lifecycle in embedding -[2174]({{site.github}}/flutter/plugins/pull/2174) [url_launcher] Enable androidx and jetifier in android gradle properties +[2174]({{site.repo.organization}}plugins/pull/2174) [url_launcher] Enable androidx and jetifier in android gradle properties -[11239]({{site.repo.engine}}/pull/11239) Remove dart entrypoint Intent parameter from FlutterActivity. (#38713) +[11239]({{site.repo.engine}}pull/11239) Remove dart entrypoint Intent parameter from FlutterActivity. (#38713) -[12469]({{site.repo.engine}}/pull/12469) Started asserting the FlutterEngine is running before communicating over channels. +[12469]({{site.repo.engine}}pull/12469) Started asserting the FlutterEngine is running before communicating over channels. -[13403]({{site.repo.engine}}/pull/13403) Use DartExecutor.getBinaryMessenger in FlutterNativeView instead of deprecated send methods +[13403]({{site.repo.engine}}pull/13403) Use DartExecutor.getBinaryMessenger in FlutterNativeView instead of deprecated send methods ## Material @@ -959,1378 +959,1378 @@ with dark mode support. Also, we added support for extending the height of the Scaffold's body behind the app bar, which was contributed by a community member! -[36998]({{site.repo.flutter}}/pull/36998) Added properties in DropdownButtonFormField to match DropdownButton +[36998]({{site.repo.flutter}}pull/36998) Added properties in DropdownButtonFormField to match DropdownButton -[37962]({{site.repo.flutter}}/pull/37962) Show search app bar theme +[37962]({{site.repo.flutter}}pull/37962) Show search app bar theme -[38583]({{site.repo.flutter}}/pull/38583) Added InheritedTheme +[38583]({{site.repo.flutter}}pull/38583) Added InheritedTheme -[38650]({{site.repo.flutter}}/pull/38650) Allow independent theming of Persistent and Modal bottom sheets +[38650]({{site.repo.flutter}}pull/38650) Allow independent theming of Persistent and Modal bottom sheets -[38709]({{site.repo.flutter}}/pull/38709) [Material] Add contentPadding property to SwitchListTile +[38709]({{site.repo.flutter}}pull/38709) [Material] Add contentPadding property to SwitchListTile -[38726]({{site.repo.flutter}}/pull/38726) Make disabled buttons/chips/text fields not be focusable. +[38726]({{site.repo.flutter}}pull/38726) Make disabled buttons/chips/text fields not be focusable. -[38813]({{site.repo.flutter}}/pull/38813) Add ToggleButtons.textStyle property +[38813]({{site.repo.flutter}}pull/38813) Add ToggleButtons.textStyle property -[38831]({{site.repo.flutter}}/pull/38831) [Material] Add clip property to bottom sheet and theme +[38831]({{site.repo.flutter}}pull/38831) [Material] Add clip property to bottom sheet and theme -[38898]({{site.repo.flutter}}/pull/38898) ToggleButtons test improvement +[38898]({{site.repo.flutter}}pull/38898) ToggleButtons test improvement -[39144]({{site.repo.flutter}}/pull/39144) Add the textAlignVertical param to TextFormField +[39144]({{site.repo.flutter}}pull/39144) Add the textAlignVertical param to TextFormField -[39156]({{site.repo.flutter}}/pull/39156) Added Scaffold.extendBodyBehindAppBar +[39156]({{site.repo.flutter}}pull/39156) Added Scaffold.extendBodyBehindAppBar -[39299]({{site.repo.flutter}}/pull/39299) Add showAboutDialog sample +[39299]({{site.repo.flutter}}pull/39299) Add showAboutDialog sample -[39333]({{site.repo.flutter}}/pull/39333) Allow independent theming of Persistent and Modal bottom sheets Background Color +[39333]({{site.repo.flutter}}pull/39333) Allow independent theming of Persistent and Modal bottom sheets Background Color -[39433]({{site.repo.flutter}}/pull/39433) Add helperMaxLines to InputDecoration and InputDecorationTheme +[39433]({{site.repo.flutter}}pull/39433) Add helperMaxLines to InputDecoration and InputDecorationTheme -[39572]({{site.repo.flutter}}/pull/39572) Prevent exception when creating a Divider borderSide +[39572]({{site.repo.flutter}}pull/39572) Prevent exception when creating a Divider borderSide -[39583]({{site.repo.flutter}}/pull/39583) Fix single action banner to ensure button alignment +[39583]({{site.repo.flutter}}pull/39583) Fix single action banner to ensure button alignment -[39627]({{site.repo.flutter}}/pull/39627) Default colorScheme data in ButtonThemeData (fix for #38655) +[39627]({{site.repo.flutter}}pull/39627) Default colorScheme data in ButtonThemeData (fix for #38655) -[39632]({{site.repo.flutter}}/pull/39632) Updates to debugFillProperties to test all properties in slider.dart and slider_test.dart +[39632]({{site.repo.flutter}}pull/39632) Updates to debugFillProperties to test all properties in slider.dart and slider_test.dart -[39903]({{site.repo.flutter}}/pull/39903) Fixed passing autofocus to MaterialButton, and when rebuilding Focus widget. +[39903]({{site.repo.flutter}}pull/39903) Fixed passing autofocus to MaterialButton, and when rebuilding Focus widget. -[39924]({{site.repo.flutter}}/pull/39924) Adds DartPad option to the DartDoc snippet generator. +[39924]({{site.repo.flutter}}pull/39924) Adds DartPad option to the DartDoc snippet generator. -[40390]({{site.repo.flutter}}/pull/40390) a11y improvements for textfield +[40390]({{site.repo.flutter}}pull/40390) a11y improvements for textfield -[40608]({{site.repo.flutter}}/pull/40608) Add the option to configure a chip check mark color +[40608]({{site.repo.flutter}}pull/40608) Add the option to configure a chip check mark color -[40641]({{site.repo.flutter}}/pull/40641) Add onLongPress to Buttons +[40641]({{site.repo.flutter}}pull/40641) Add onLongPress to Buttons -[40665]({{site.repo.flutter}}/pull/40665) Fix CupertinoTextField and TextField ToolbarOptions not changing +[40665]({{site.repo.flutter}}pull/40665) Fix CupertinoTextField and TextField ToolbarOptions not changing -[40713]({{site.repo.flutter}}/pull/40713) Material textselection context menu cannot disable select all +[40713]({{site.repo.flutter}}pull/40713) Material textselection context menu cannot disable select all -[40994]({{site.repo.flutter}}/pull/40994) Fix the ThemeData.copyWith toggleButtonsTheme argument type +[40994]({{site.repo.flutter}}pull/40994) Fix the ThemeData.copyWith toggleButtonsTheme argument type -[41120]({{site.repo.flutter}}/pull/41120) Dropdown Menu layout respects menu items intrinsic sizes +[41120]({{site.repo.flutter}}pull/41120) Dropdown Menu layout respects menu items intrinsic sizes -[41150]({{site.repo.flutter}}/pull/41150) Rebuild modal routes when the value of userGestureInProgress changes +[41150]({{site.repo.flutter}}pull/41150) Rebuild modal routes when the value of userGestureInProgress changes -[41172]({{site.repo.flutter}}/pull/41172) fix some bad indentations +[41172]({{site.repo.flutter}}pull/41172) fix some bad indentations -[41320]({{site.repo.flutter}}/pull/41320) [Material] Remove text ripple from TextFields +[41320]({{site.repo.flutter}}pull/41320) [Material] Remove text ripple from TextFields -[41338]({{site.repo.flutter}}/pull/41338) Fix ReorderableListView's use of child keys (#41334) +[41338]({{site.repo.flutter}}pull/41338) Fix ReorderableListView's use of child keys (#41334) -[41463]({{site.repo.flutter}}/pull/41463) [Chip] Make sure InkResponse is in the foreground on delete for chips with background color +[41463]({{site.repo.flutter}}pull/41463) [Chip] Make sure InkResponse is in the foreground on delete for chips with background color -[41625]({{site.repo.flutter}}/pull/41625) Update DefaultTabController to allow for zero tabs +[41625]({{site.repo.flutter}}pull/41625) Update DefaultTabController to allow for zero tabs -[41629]({{site.repo.flutter}}/pull/41629) [Material] Fix Tooltip to respect ambient Directionality +[41629]({{site.repo.flutter}}pull/41629) [Material] Fix Tooltip to respect ambient Directionality -[41632]({{site.repo.flutter}}/pull/41632) fix confusing 'popupTheme' variable name in a MaterialBannerTheme method +[41632]({{site.repo.flutter}}pull/41632) fix confusing 'popupTheme' variable name in a MaterialBannerTheme method -[41640]({{site.repo.flutter}}/pull/41640) some formatting changes +[41640]({{site.repo.flutter}}pull/41640) some formatting changes -[41650]({{site.repo.flutter}}/pull/41650) DropdownButton.style API doc example for differing button and menu item text styles +[41650]({{site.repo.flutter}}pull/41650) DropdownButton.style API doc example for differing button and menu item text styles -[41864]({{site.repo.flutter}}/pull/41864) Update BottomAppBar to use elevation overlays when in a dark theme +[41864]({{site.repo.flutter}}pull/41864) Update BottomAppBar to use elevation overlays when in a dark theme -[41972]({{site.repo.flutter}}/pull/41972) Add enableFeedback param to MaterialButton, RawMaterialButton and IconButton +[41972]({{site.repo.flutter}}pull/41972) Add enableFeedback param to MaterialButton, RawMaterialButton and IconButton -[42033]({{site.repo.flutter}}/pull/42033) Reprise: Dropdown Menu layout respects menu items intrinsic sizes +[42033]({{site.repo.flutter}}pull/42033) Reprise: Dropdown Menu layout respects menu items intrinsic sizes -[42189]({{site.repo.flutter}}/pull/42189) Fix regression with ModalBottomSheets not responding to changes in theme +[42189]({{site.repo.flutter}}pull/42189) Fix regression with ModalBottomSheets not responding to changes in theme -[42366]({{site.repo.flutter}}/pull/42366) TextStyle.fontFamily should override fontFamily parameter in ThemeData +[42366]({{site.repo.flutter}}pull/42366) TextStyle.fontFamily should override fontFamily parameter in ThemeData -[42404]({{site.repo.flutter}}/pull/42404) Add isDismissible configuration for showModalBottomSheet +[42404]({{site.repo.flutter}}pull/42404) Add isDismissible configuration for showModalBottomSheet -[42482]({{site.repo.flutter}}/pull/42482) Only dismiss dropdowns if the orientation changes, not the size. +[42482]({{site.repo.flutter}}pull/42482) Only dismiss dropdowns if the orientation changes, not the size. -[42554]({{site.repo.flutter}}/pull/42554) Fix route focusing and autofocus when reparenting focus nodes. +[42554]({{site.repo.flutter}}pull/42554) Fix route focusing and autofocus when reparenting focus nodes. -[42613]({{site.repo.flutter}}/pull/42613) Fix Tooltip implementation of PopupMenuButton +[42613]({{site.repo.flutter}}pull/42613) Fix Tooltip implementation of PopupMenuButton -[42683]({{site.repo.flutter}}/pull/42683) Optimize focus operations by caching descendants and ancestors. +[42683]({{site.repo.flutter}}pull/42683) Optimize focus operations by caching descendants and ancestors. -[42779]({{site.repo.flutter}}/pull/42779) Fix chip ripple bug — No longer two ripples +[42779]({{site.repo.flutter}}pull/42779) Fix chip ripple bug — No longer two ripples -[42811]({{site.repo.flutter}}/pull/42811) Add a Focus node to the DropdownButton, and adds an activation action for it. +[42811]({{site.repo.flutter}}pull/42811) Add a Focus node to the DropdownButton, and adds an activation action for it. -[42936]({{site.repo.flutter}}/pull/42936) Support AppBars with jumbo titles +[42936]({{site.repo.flutter}}pull/42936) Support AppBars with jumbo titles -[43213]({{site.repo.flutter}}/pull/43213) Add focus nodes, hover, and shortcuts to switches, checkboxes, and radio buttons. +[43213]({{site.repo.flutter}}pull/43213) Add focus nodes, hover, and shortcuts to switches, checkboxes, and radio buttons. -[43422]({{site.repo.flutter}}/pull/43422) trivial fixed AboutListTile having an empty icon placeholder when no icon set. +[43422]({{site.repo.flutter}}pull/43422) trivial fixed AboutListTile having an empty icon placeholder when no icon set. -[43511]({{site.repo.flutter}}/pull/43511) Improve DropdownButton assert message +[43511]({{site.repo.flutter}}pull/43511) Improve DropdownButton assert message -[43526]({{site.repo.flutter}}/pull/43526) Change PopupMenuButton.icon type to Widget +[43526]({{site.repo.flutter}}pull/43526) Change PopupMenuButton.icon type to Widget -[43722]({{site.repo.flutter}}/pull/43722) Make selected item get focus when dropdown is opened +[43722]({{site.repo.flutter}}pull/43722) Make selected item get focus when dropdown is opened -[43843]({{site.repo.flutter}}/pull/43843) Remove print and fix code formatting +[43843]({{site.repo.flutter}}pull/43843) Remove print and fix code formatting -[43848]({{site.repo.flutter}}/pull/43848) Don't allow Disabled InkWells to be focusable +[43848]({{site.repo.flutter}}pull/43848) Don't allow Disabled InkWells to be focusable -[43859]({{site.repo.flutter}}/pull/43859) Add convenience accessor for primaryFocus +[43859]({{site.repo.flutter}}pull/43859) Add convenience accessor for primaryFocus -[43946]({{site.repo.flutter}}/pull/43946) Adding subtitle to ExpansionTile +[43946]({{site.repo.flutter}}pull/43946) Adding subtitle to ExpansionTile -[43981]({{site.repo.flutter}}/pull/43981) Fix typo in app_bar.dart +[43981]({{site.repo.flutter}}pull/43981) Fix typo in app_bar.dart -[44029]({{site.repo.flutter}}/pull/44029) Use alphabetic baselines for layout of InputDecorator +[44029]({{site.repo.flutter}}pull/44029) Use alphabetic baselines for layout of InputDecorator -[44068]({{site.repo.flutter}}/pull/44068) Fix typo in tabs.dart +[44068]({{site.repo.flutter}}pull/44068) Fix typo in tabs.dart -[44076]({{site.repo.flutter}}/pull/44076) Typo on comments +[44076]({{site.repo.flutter}}pull/44076) Typo on comments -[44160]({{site.repo.flutter}}/pull/44160) Wire selectedItemBuilder through DropdownButtonFormField +[44160]({{site.repo.flutter}}pull/44160) Wire selectedItemBuilder through DropdownButtonFormField -[44296]({{site.repo.flutter}}/pull/44296) ModalBarrier and Drawer barrier prevents mouse events +[44296]({{site.repo.flutter}}pull/44296) ModalBarrier and Drawer barrier prevents mouse events -[44736]({{site.repo.flutter}}/pull/44736) Check in new diffs to material localizations +[44736]({{site.repo.flutter}}pull/44736) Check in new diffs to material localizations -[44787]({{site.repo.flutter}}/pull/44787) Fix snippets to include element ID in the output sample. +[44787]({{site.repo.flutter}}pull/44787) Fix snippets to include element ID in the output sample. -[44867]({{site.repo.flutter}}/pull/44867) FocusableActionDetector widget +[44867]({{site.repo.flutter}}pull/44867) FocusableActionDetector widget -[45081]({{site.repo.flutter}}/pull/45081) Remove duplicated expect from text field test +[45081]({{site.repo.flutter}}pull/45081) Remove duplicated expect from text field test -[45362]({{site.repo.flutter}}/pull/45362) Add widget of the week video embeddings +[45362]({{site.repo.flutter}}pull/45362) Add widget of the week video embeddings ## Text & Accessibility In Text and Accessibility, we have several enhancements in ButtonBar and AlertDialog to prevent text overflow. -[40468]({{site.repo.flutter}}/pull/40468) Propagate textfield character limits to semantics +[40468]({{site.repo.flutter}}pull/40468) Propagate textfield character limits to semantics -[41730]({{site.repo.flutter}}/pull/41730) Allow customization of label styles for semantics debugger +[41730]({{site.repo.flutter}}pull/41730) Allow customization of label styles for semantics debugger -[42344]({{site.repo.flutter}}/pull/42344) Add onVisible callback to snackbar. +[42344]({{site.repo.flutter}}pull/42344) Add onVisible callback to snackbar. -[42368]({{site.repo.flutter}}/pull/42368) Update android semantics test to match existing engine behavior. +[42368]({{site.repo.flutter}}pull/42368) Update android semantics test to match existing engine behavior. -[43193]({{site.repo.flutter}}/pull/43193) ButtonBar aligns in column when it overflows horizontally +[43193]({{site.repo.flutter}}pull/43193) ButtonBar aligns in column when it overflows horizontally -[43226]({{site.repo.flutter}}/pull/43226) Implement AlertDialog title/content overflow scroll +[43226]({{site.repo.flutter}}pull/43226) Implement AlertDialog title/content overflow scroll -[38573]({{site.repo.flutter}}/pull/38573) Clamp scrollOffset to prevent textfield bouncing +[38573]({{site.repo.flutter}}pull/38573) Clamp scrollOffset to prevent textfield bouncing -[41108]({{site.repo.flutter}}/pull/41108) Fixing a text editing bug happening when text field changes. +[41108]({{site.repo.flutter}}pull/41108) Fixing a text editing bug happening when text field changes. -[44605]({{site.repo.flutter}}/pull/44605) Changing RenderEditable.textAlign doesn't break hot reload anymore +[44605]({{site.repo.flutter}}pull/44605) Changing RenderEditable.textAlign doesn't break hot reload anymore ## Animation & Scroll For animation, we released the -[TweenAnimationBuilder]({{site.api}}/flutter/widgets/TweenAnimationBuilder-class.html) +[TweenAnimationBuilder]({{site.api}}flutter/widgets/TweenAnimationBuilder-class.html) for building custom implicit animations. For more information, check out this [TweenAnimationBuilder video](https://www.youtube.com/watch?reload=9&v=6KiPEqzJIKQ) on Youtube. -[38317]({{site.repo.flutter}}/pull/38317) TweenAnimationBuilder for building custom animations without managing an AnimationController +[38317]({{site.repo.flutter}}pull/38317) TweenAnimationBuilder for building custom animations without managing an AnimationController -[38979]({{site.repo.flutter}}/pull/38979) Adding onEnd callback to implicit animated widgets +[38979]({{site.repo.flutter}}pull/38979) Adding onEnd callback to implicit animated widgets -[43756]({{site.repo.flutter}}/pull/43756) Mark routes as opaque when added without animation +[43756]({{site.repo.flutter}}pull/43756) Mark routes as opaque when added without animation -[39142]({{site.repo.flutter}}/pull/39142) fix sliverfixedextent with sliverchildbuilderdelegate does not correc… +[39142]({{site.repo.flutter}}pull/39142) fix sliverfixedextent with sliverchildbuilderdelegate does not correc… -[44965]({{site.repo.flutter}}/pull/44965) Scroll scrollable to keep focused control visible. +[44965]({{site.repo.flutter}}pull/44965) Scroll scrollable to keep focused control visible. ## Web We increased our support for web, moving it from the dev channel to the beta channel. For more details, please check [web support blog post](https://medium.com/flutter/web-support-for-flutter-goes-beta-35b64a1217c0). -[37819]({{site.repo.flutter}}/pull/37819) Add HtmlElementView (the Flutter Web platform view) +[37819]({{site.repo.flutter}}pull/37819) Add HtmlElementView (the Flutter Web platform view) -[38723]({{site.repo.flutter}}/pull/38723) Handle compilation failures from web application +[38723]({{site.repo.flutter}}pull/38723) Handle compilation failures from web application -[38823]({{site.repo.flutter}}/pull/38823) Print service url when connecting to web applications +[38823]({{site.repo.flutter}}pull/38823) Print service url when connecting to web applications -[39006]({{site.repo.flutter}}/pull/39006) Add web workflow to default validators +[39006]({{site.repo.flutter}}pull/39006) Add web workflow to default validators -[39066]({{site.repo.flutter}}/pull/39066) Kill resident runner on browser disconnect. +[39066]({{site.repo.flutter}}pull/39066) Kill resident runner on browser disconnect. -[39073]({{site.repo.flutter}}/pull/39073) Add profile mode to flutter web applications +[39073]({{site.repo.flutter}}pull/39073) Add profile mode to flutter web applications -[39189]({{site.repo.flutter}}/pull/39189) fix source map loading and service protocol for flutter web +[39189]({{site.repo.flutter}}pull/39189) fix source map loading and service protocol for flutter web -[39344]({{site.repo.flutter}}/pull/39344) Upstream changes necessary for text editing in flutter web +[39344]({{site.repo.flutter}}pull/39344) Upstream changes necessary for text editing in flutter web -[39364]({{site.repo.flutter}}/pull/39364) Correct libraries path and remove dart:io and dart:isolate for dart platform +[39364]({{site.repo.flutter}}pull/39364) Correct libraries path and remove dart:io and dart:isolate for dart platform -[39414]({{site.repo.flutter}}/pull/39414) Make sure profile is forwarded through build web command +[39414]({{site.repo.flutter}}pull/39414) Make sure profile is forwarded through build web command -[39462]({{site.repo.flutter}}/pull/39462) Remove run in shell and add unit test for chrome launching +[39462]({{site.repo.flutter}}pull/39462) Remove run in shell and add unit test for chrome launching -[39543]({{site.repo.flutter}}/pull/39543) create .dart_tool if it is missing +[39543]({{site.repo.flutter}}pull/39543) create .dart_tool if it is missing -[39628]({{site.repo.flutter}}/pull/39628) Automatically generated registrants for web plugins +[39628]({{site.repo.flutter}}pull/39628) Automatically generated registrants for web plugins -[39748]({{site.repo.flutter}}/pull/39748) print launching on device message +[39748]({{site.repo.flutter}}pull/39748) print launching on device message -[39751]({{site.repo.flutter}}/pull/39751) Minor cleanup and prevent multiple exit +[39751]({{site.repo.flutter}}pull/39751) Minor cleanup and prevent multiple exit -[39752]({{site.repo.flutter}}/pull/39752) Add delay to recompile request for web +[39752]({{site.repo.flutter}}pull/39752) Add delay to recompile request for web -[39756]({{site.repo.flutter}}/pull/39756) remove web flag from create +[39756]({{site.repo.flutter}}pull/39756) remove web flag from create -[39774]({{site.repo.flutter}}/pull/39774) workaround for mangled web sdk source map packages +[39774]({{site.repo.flutter}}pull/39774) workaround for mangled web sdk source map packages -[39910]({{site.repo.flutter}}/pull/39910) If there are no web plugins, don't generate a plugin registrant +[39910]({{site.repo.flutter}}pull/39910) If there are no web plugins, don't generate a plugin registrant -[39950]({{site.repo.flutter}}/pull/39950) Register reload sources call and make 'r' restart for web +[39950]({{site.repo.flutter}}pull/39950) Register reload sources call and make 'r' restart for web -[39951]({{site.repo.flutter}}/pull/39951) Add "web" server device to allow running flutter for web on arbitrary browsers +[39951]({{site.repo.flutter}}pull/39951) Add "web" server device to allow running flutter for web on arbitrary browsers -[39983]({{site.repo.flutter}}/pull/39983) Update the supported library set for Flutter for web +[39983]({{site.repo.flutter}}pull/39983) Update the supported library set for Flutter for web -[39999]({{site.repo.flutter}}/pull/39999) Disable the performance overlay for web +[39999]({{site.repo.flutter}}pull/39999) Disable the performance overlay for web -[40175]({{site.repo.flutter}}/pull/40175) Ensure we send hot restart events for flutter web +[40175]({{site.repo.flutter}}pull/40175) Ensure we send hot restart events for flutter web -[40191]({{site.repo.flutter}}/pull/40191) add host and port to run configuration for web devices +[40191]({{site.repo.flutter}}pull/40191) add host and port to run configuration for web devices -[40301]({{site.repo.flutter}}/pull/40301) Allow skipping webOnlyInitializePlatform in Flutter for Web +[40301]({{site.repo.flutter}}pull/40301) Allow skipping webOnlyInitializePlatform in Flutter for Web -[40370]({{site.repo.flutter}}/pull/40370) rename port to web-port and hostname to web-hostname +[40370]({{site.repo.flutter}}pull/40370) rename port to web-port and hostname to web-hostname -[40465]({{site.repo.flutter}}/pull/40465) Pass --web-hostname and --web-port to release mode debugging options +[40465]({{site.repo.flutter}}pull/40465) Pass --web-hostname and --web-port to release mode debugging options -[40627]({{site.repo.flutter}}/pull/40627) Allow skipping chrome launch with --no-web-browser-launch +[40627]({{site.repo.flutter}}pull/40627) Allow skipping chrome launch with --no-web-browser-launch -[40757]({{site.repo.flutter}}/pull/40757) Fix visibility of web server device when Chrome is not available +[40757]({{site.repo.flutter}}pull/40757) Fix visibility of web server device when Chrome is not available -[41222]({{site.repo.flutter}}/pull/41222) Copy archived js part files out of dart_tool directory +[41222]({{site.repo.flutter}}pull/41222) Copy archived js part files out of dart_tool directory -[41347]({{site.repo.flutter}}/pull/41347) Fix timing issues in initialization of web resident runner +[41347]({{site.repo.flutter}}pull/41347) Fix timing issues in initialization of web resident runner -[41386]({{site.repo.flutter}}/pull/41386) Serve every html file under web +[41386]({{site.repo.flutter}}pull/41386) Serve every html file under web -[41397]({{site.repo.flutter}}/pull/41397) Keymap for Web +[41397]({{site.repo.flutter}}pull/41397) Keymap for Web -[41441]({{site.repo.flutter}}/pull/41441) Exit resident web runner on compilation failure +[41441]({{site.repo.flutter}}pull/41441) Exit resident web runner on compilation failure -[41545]({{site.repo.flutter}}/pull/41545) Add analytics tracking for compile and refresh times for Flutter Web +[41545]({{site.repo.flutter}}pull/41545) Add analytics tracking for compile and refresh times for Flutter Web -[41618]({{site.repo.flutter}}/pull/41618) Rename Server/web to Headless Server/headless-server +[41618]({{site.repo.flutter}}pull/41618) Rename Server/web to Headless Server/headless-server -[41695]({{site.repo.flutter}}/pull/41695) Add more information to cannot find Chrome message +[41695]({{site.repo.flutter}}pull/41695) Add more information to cannot find Chrome message -[41815]({{site.repo.flutter}}/pull/41815) [web] Make it clear that lowercase "r" can also perform hot restart +[41815]({{site.repo.flutter}}pull/41815) [web] Make it clear that lowercase "r" can also perform hot restart -[41906]({{site.repo.flutter}}/pull/41906) Ensure plugin registrants are generated in build_web +[41906]({{site.repo.flutter}}pull/41906) Ensure plugin registrants are generated in build_web -[41996]({{site.repo.flutter}}/pull/41996) [web] Always send the route name even if it's null +[41996]({{site.repo.flutter}}pull/41996) [web] Always send the route name even if it's null -[42144]({{site.repo.flutter}}/pull/42144) Don't eagerly call runMain when --start-paused is provided to web application +[42144]({{site.repo.flutter}}pull/42144) Don't eagerly call runMain when --start-paused is provided to web application -[42260]({{site.repo.flutter}}/pull/42260) Small cleanup of web code +[42260]({{site.repo.flutter}}pull/42260) Small cleanup of web code -[42289]({{site.repo.flutter}}/pull/42289) Ensure precache web works on dev branch +[42289]({{site.repo.flutter}}pull/42289) Ensure precache web works on dev branch -[42531]({{site.repo.flutter}}/pull/42531) Print correct hostname when web server is launched +[42531]({{site.repo.flutter}}pull/42531) Print correct hostname when web server is launched -[42676]({{site.repo.flutter}}/pull/42676) [web] Update web runner message with flutter.dev/web +[42676]({{site.repo.flutter}}pull/42676) [web] Update web runner message with flutter.dev/web -[42701]({{site.repo.flutter}}/pull/42701) serve correct content type from debug server +[42701]({{site.repo.flutter}}pull/42701) serve correct content type from debug server -[42857]({{site.repo.flutter}}/pull/42857) Fix progress indicators for release/profile builds of web. +[42857]({{site.repo.flutter}}pull/42857) Fix progress indicators for release/profile builds of web. -[42951]({{site.repo.flutter}}/pull/42951) implement debugTogglePlatform for the web +[42951]({{site.repo.flutter}}pull/42951) implement debugTogglePlatform for the web -[42970]({{site.repo.flutter}}/pull/42970) Rename headless server to web server +[42970]({{site.repo.flutter}}pull/42970) Rename headless server to web server -[43214]({{site.repo.flutter}}/pull/43214) For --profile builds on web, still use -O4 but unminified names. +[43214]({{site.repo.flutter}}pull/43214) For --profile builds on web, still use -O4 but unminified names. -[43573]({{site.repo.flutter}}/pull/43573) Catch MissingPortFile from web tooling. +[43573]({{site.repo.flutter}}pull/43573) Catch MissingPortFile from web tooling. -[43576]({{site.repo.flutter}}/pull/43576) Enable usage of experimental incremental compiler for web +[43576]({{site.repo.flutter}}pull/43576) Enable usage of experimental incremental compiler for web -[44028]({{site.repo.flutter}}/pull/44028) Support --no-resident on the web +[44028]({{site.repo.flutter}}pull/44028) Support --no-resident on the web -[44263]({{site.repo.flutter}}/pull/44263) Allow web server device to use extension if started with --start-paused +[44263]({{site.repo.flutter}}pull/44263) Allow web server device to use extension if started with --start-paused -[44268]({{site.repo.flutter}}/pull/44268) Switch from using app.progress to app.webLaunchUrl for passing web launch urls +[44268]({{site.repo.flutter}}pull/44268) Switch from using app.progress to app.webLaunchUrl for passing web launch urls -[44421]({{site.repo.flutter}}/pull/44421) switch web test to macOS +[44421]({{site.repo.flutter}}pull/44421) switch web test to macOS -[44744]({{site.repo.flutter}}/pull/44744) Ensure web-server does not force usage of dwds +[44744]({{site.repo.flutter}}pull/44744) Ensure web-server does not force usage of dwds -[44746]({{site.repo.flutter}}/pull/44746) Remove chrome device web integration test +[44746]({{site.repo.flutter}}pull/44746) Remove chrome device web integration test -[44830]({{site.repo.flutter}}/pull/44830) Update manual_tests to be able to run on macOS/web +[44830]({{site.repo.flutter}}pull/44830) Update manual_tests to be able to run on macOS/web -[45145]({{site.repo.flutter}}/pull/45145) cache sdkNameAndVersion logic for web devices +[45145]({{site.repo.flutter}}pull/45145) cache sdkNameAndVersion logic for web devices -[45286]({{site.repo.flutter}}/pull/45286) Fix experimental incremental web compiler for Windows +[45286]({{site.repo.flutter}}pull/45286) Fix experimental incremental web compiler for Windows -[11360]({{site.repo.engine}}/pull/11360) build legacy web SDK +[11360]({{site.repo.engine}}pull/11360) build legacy web SDK -[11421]({{site.repo.engine}}/pull/11421) sync Flutter Web engine to the latest +[11421]({{site.repo.engine}}pull/11421) sync Flutter Web engine to the latest -[11732]({{site.repo.engine}}/pull/11732) last flutter web sync: cc38319841 +[11732]({{site.repo.engine}}pull/11732) last flutter web sync: cc38319841 -[11796]({{site.repo.engine}}/pull/11796) Provide a hook for a plugin handler to receive messages on the web +[11796]({{site.repo.engine}}pull/11796) Provide a hook for a plugin handler to receive messages on the web -[12161]({{site.repo.engine}}/pull/12161) Ensure that the web image ImageShader implements Shader +[12161]({{site.repo.engine}}pull/12161) Ensure that the web image ImageShader implements Shader -[12335]({{site.repo.engine}}/pull/12335) [Web] Implement dark mode support for web +[12335]({{site.repo.engine}}pull/12335) [Web] Implement dark mode support for web -[12445]({{site.repo.engine}}/pull/12445) [web] filter test targets; cache host.dart compilation +[12445]({{site.repo.engine}}pull/12445) [web] filter test targets; cache host.dart compilation -[12712]({{site.repo.engine}}/pull/12712) Support correct keymap for web +[12712]({{site.repo.engine}}pull/12712) Support correct keymap for web -[12747]({{site.repo.engine}}/pull/12747) Add web implementation for channel_buffers.dart +[12747]({{site.repo.engine}}pull/12747) Add web implementation for channel_buffers.dart -[12753]({{site.repo.engine}}/pull/12753) [web] Don't require felt to be in PATH +[12753]({{site.repo.engine}}pull/12753) [web] Don't require felt to be in PATH -[12794]({{site.repo.engine}}/pull/12794) [web] Add support for path transform +[12794]({{site.repo.engine}}pull/12794) [web] Add support for path transform -[12811]({{site.repo.engine}}/pull/12811) [web] Implement basic radial gradient (TileMode.clamp, no transform) +[12811]({{site.repo.engine}}pull/12811) [web] Implement basic radial gradient (TileMode.clamp, no transform) -[13003]({{site.repo.engine}}/pull/13003) [web] Update the url when route is replaced +[13003]({{site.repo.engine}}pull/13003) [web] Update the url when route is replaced -[13066]({{site.repo.engine}}/pull/13066) [web] Add basic color per vertex drawVertices API support +[13066]({{site.repo.engine}}pull/13066) [web] Add basic color per vertex drawVertices API support -[13141]({{site.repo.engine}}/pull/13141) Enable/tweak web sdk source maps +[13141]({{site.repo.engine}}pull/13141) Enable/tweak web sdk source maps -[13161]({{site.repo.engine}}/pull/13161) Enable/tweak web sdk source maps, take 2 +[13161]({{site.repo.engine}}pull/13161) Enable/tweak web sdk source maps, take 2 -[13187]({{site.repo.engine}}/pull/13187) [web] Environment variable to disable felt snapshot +[13187]({{site.repo.engine}}pull/13187) [web] Environment variable to disable felt snapshot -[13190]({{site.repo.engine}}/pull/13190) [web] Fix canvas reuse metrics. Refactor drawVertices code. +[13190]({{site.repo.engine}}pull/13190) [web] Fix canvas reuse metrics. Refactor drawVertices code. -[13259]({{site.repo.engine}}/pull/13259) [web] Support -j to use goma in felt build +[13259]({{site.repo.engine}}pull/13259) [web] Support -j to use goma in felt build -[13268]({{site.repo.engine}}/pull/13268) [web] Support input action +[13268]({{site.repo.engine}}pull/13268) [web] Support input action -[13272]({{site.repo.engine}}/pull/13272) [web] [test] Adding firefox install functionality to the test platform +[13272]({{site.repo.engine}}pull/13272) [web] [test] Adding firefox install functionality to the test platform -[13296]({{site.repo.engine}}/pull/13296) [web] Cupertino dynamic color fix. +[13296]({{site.repo.engine}}pull/13296) [web] Cupertino dynamic color fix. -[13359]({{site.repo.engine}}/pull/13359) Web: fix Color subclass handling +[13359]({{site.repo.engine}}pull/13359) Web: fix Color subclass handling -[13462]({{site.repo.engine}}/pull/13462) [web] Get the size from visualviewport instead of window.innerHeight/innerW… +[13462]({{site.repo.engine}}pull/13462) [web] Get the size from visualviewport instead of window.innerHeight/innerW… -[13483]({{site.repo.engine}}/pull/13483) web: fix Paragraph.getBoxesForRange for zero-length ranges +[13483]({{site.repo.engine}}pull/13483) web: fix Paragraph.getBoxesForRange for zero-length ranges -[13634]({{site.repo.engine}}/pull/13634) [web] Ignore changes in *.ttf files in felt build watch mode +[13634]({{site.repo.engine}}pull/13634) [web] Ignore changes in *.ttf files in felt build watch mode -[13699]({{site.repo.engine}}/pull/13699) [web] Don't send keyboard events from text fields to flutter +[13699]({{site.repo.engine}}pull/13699) [web] Don't send keyboard events from text fields to flutter -[13722]({{site.repo.engine}}/pull/13722) [web] Proper support for text field's obscureText +[13722]({{site.repo.engine}}pull/13722) [web] Proper support for text field's obscureText -[13741]({{site.repo.engine}}/pull/13741) [web] Refactor text editing to handle any order of platform messages gracefully +[13741]({{site.repo.engine}}pull/13741) [web] Refactor text editing to handle any order of platform messages gracefully -[13748]({{site.repo.engine}}/pull/13748) [web] Support gif/webp animations, Speed up image drawing in BitmapCanvas. +[13748]({{site.repo.engine}}pull/13748) [web] Support gif/webp animations, Speed up image drawing in BitmapCanvas. -[13769]({{site.repo.engine}}/pull/13769) [web] Implement TextStyle.shadows +[13769]({{site.repo.engine}}pull/13769) [web] Implement TextStyle.shadows -[13779]({{site.repo.engine}}/pull/13779) [web] Fix path to svg for drrect +[13779]({{site.repo.engine}}pull/13779) [web] Fix path to svg for drrect -[13802]({{site.repo.engine}}/pull/13802) [web] Fix selectable text rendering +[13802]({{site.repo.engine}}pull/13802) [web] Fix selectable text rendering -[13809]({{site.repo.engine}}/pull/13809) [web] Fix blendmode for images +[13809]({{site.repo.engine}}pull/13809) [web] Fix blendmode for images -[13860]({{site.repo.engine}}/pull/13860) [web] Change canvas sibling transforms to 3d with z=0 to get around canvas rendering bug. +[13860]({{site.repo.engine}}pull/13860) [web] Change canvas sibling transforms to 3d with z=0 to get around canvas rendering bug. -[13901]({{site.repo.engine}}/pull/13901) [web] Fix single line bitmap canvas text shadow +[13901]({{site.repo.engine}}pull/13901) [web] Fix single line bitmap canvas text shadow -[13909]({{site.repo.engine}}/pull/13909) [web] Implement PathMetrics.length +[13909]({{site.repo.engine}}pull/13909) [web] Implement PathMetrics.length -[13922]({{site.repo.engine}}/pull/13922) [web] Flutter for web autocorrect support +[13922]({{site.repo.engine}}pull/13922) [web] Flutter for web autocorrect support -[13929]({{site.repo.engine}}/pull/13929) [web] Allow users to enable canvas text measurement +[13929]({{site.repo.engine}}pull/13929) [web] Allow users to enable canvas text measurement -[13940]({{site.repo.engine}}/pull/13940) [web] Fix Edge detection for correct dom_renderer reset +[13940]({{site.repo.engine}}pull/13940) [web] Fix Edge detection for correct dom_renderer reset -[13960]({{site.repo.engine}}/pull/13960) [web] Fix default line-height issue for Firefox +[13960]({{site.repo.engine}}pull/13960) [web] Fix default line-height issue for Firefox -[13981]({{site.repo.engine}}/pull/13981) [web] use Element.nodes instead of Element.children in text layout +[13981]({{site.repo.engine}}pull/13981) [web] use Element.nodes instead of Element.children in text layout -[2119]({{site.github}}/flutter/plugins/pull/2119) Add web url launcher +[2119]({{site.repo.organization}}plugins/pull/2119) Add web url launcher ## Desktop We are also moving macOS support from tech preview to alpha, enabling it in the dev channel. For more details, see the -[Flutter wiki]({{site.repo.flutter}}/wiki/Desktop-shells). +[Flutter wiki]({{site.repo.flutter}}wiki/Desktop-shells). -[37901]({{site.repo.flutter}}/pull/37901) [macos] Check for special keys before creating a logical key +[37901]({{site.repo.flutter}}pull/37901) [macos] Check for special keys before creating a logical key -[38748]({{site.repo.flutter}}/pull/38748) Create correctly structured framework for macOS +[38748]({{site.repo.flutter}}pull/38748) Create correctly structured framework for macOS -[38858]({{site.repo.flutter}}/pull/38858) Use GLFW-name artifacts on Windows and Linux +[38858]({{site.repo.flutter}}pull/38858) Use GLFW-name artifacts on Windows and Linux -[38909]({{site.repo.flutter}}/pull/38909) Add support for macOS release/profile mode (3 of 3) +[38909]({{site.repo.flutter}}pull/38909) Add support for macOS release/profile mode (3 of 3) -[39017]({{site.repo.flutter}}/pull/39017) Add "OneSequenceRecognizer.resolvePointer". Fix DragGestureRecognizer crash on multiple pointers +[39017]({{site.repo.flutter}}pull/39017) Add "OneSequenceRecognizer.resolvePointer". Fix DragGestureRecognizer crash on multiple pointers -[39264]({{site.repo.flutter}}/pull/39264) Add profile support on macOS +[39264]({{site.repo.flutter}}pull/39264) Add profile support on macOS -[39432]({{site.repo.flutter}}/pull/39432) Do not hide .git in zip for Windows +[39432]({{site.repo.flutter}}pull/39432) Do not hide .git in zip for Windows -[39702]({{site.repo.flutter}}/pull/39702) Fix macOS App.framework version symlink +[39702]({{site.repo.flutter}}pull/39702) Fix macOS App.framework version symlink -[39836]({{site.repo.flutter}}/pull/39836) Switch to the Win32 Windows embedding +[39836]({{site.repo.flutter}}pull/39836) Switch to the Win32 Windows embedding -[40011]({{site.repo.flutter}}/pull/40011) [windows] Searches for pre-release and 'all' Visual Studio installations +[40011]({{site.repo.flutter}}pull/40011) [windows] Searches for pre-release and 'all' Visual Studio installations -[40186]({{site.repo.flutter}}/pull/40186) Add shortcuts and actions for default focus traversal +[40186]({{site.repo.flutter}}pull/40186) Add shortcuts and actions for default focus traversal -[40194]({{site.repo.flutter}}/pull/40194) Add an ephemeral directory to Windows projects +[40194]({{site.repo.flutter}}pull/40194) Add an ephemeral directory to Windows projects -[40197]({{site.repo.flutter}}/pull/40197) [windows] Refactor to optimize vswhere queries +[40197]({{site.repo.flutter}}pull/40197) [windows] Refactor to optimize vswhere queries -[40294]({{site.repo.flutter}}/pull/40294) fix copy command and remove resolve sync for macOS assemble +[40294]({{site.repo.flutter}}pull/40294) fix copy command and remove resolve sync for macOS assemble -[40375]({{site.repo.flutter}}/pull/40375) Harden macOS build use of Xcode project getInfo +[40375]({{site.repo.flutter}}pull/40375) Harden macOS build use of Xcode project getInfo -[40393]({{site.repo.flutter}}/pull/40393) Convert build mode to lowercase in tool_backend +[40393]({{site.repo.flutter}}pull/40393) Convert build mode to lowercase in tool_backend -[40587]({{site.repo.flutter}}/pull/40587) Add an ephemeral directory for Linux +[40587]({{site.repo.flutter}}pull/40587) Add an ephemeral directory for Linux -[40730]({{site.repo.flutter}}/pull/40730) Invalidate macOS pods on plugin changes +[40730]({{site.repo.flutter}}pull/40730) Invalidate macOS pods on plugin changes -[40851]({{site.repo.flutter}}/pull/40851) Support create for macOS (app and plugin) +[40851]({{site.repo.flutter}}pull/40851) Support create for macOS (app and plugin) -[41015]({{site.repo.flutter}}/pull/41015) Add the beginnings of plugin support for Windows and Linux +[41015]({{site.repo.flutter}}pull/41015) Add the beginnings of plugin support for Windows and Linux -[41332]({{site.repo.flutter}}/pull/41332) Prevent PointerEnter[or Exit]Event from erasing event.down value +[41332]({{site.repo.flutter}}pull/41332) Prevent PointerEnter[or Exit]Event from erasing event.down value -[41551]({{site.repo.flutter}}/pull/41551) Pass Linux build mode on command line +[41551]({{site.repo.flutter}}pull/41551) Pass Linux build mode on command line -[41612]({{site.repo.flutter}}/pull/41612) AOT support for Linux Desktop I: switch Linux builds to assemble +[41612]({{site.repo.flutter}}pull/41612) AOT support for Linux Desktop I: switch Linux builds to assemble -[41747]({{site.repo.flutter}}/pull/41747) Add Profile entry to macOS Podfile +[41747]({{site.repo.flutter}}pull/41747) Add Profile entry to macOS Podfile -[42031]({{site.repo.flutter}}/pull/42031) Rewrite MouseTracker's tracking and notifying algorithm +[42031]({{site.repo.flutter}}pull/42031) Rewrite MouseTracker's tracking and notifying algorithm -[42235]({{site.repo.flutter}}/pull/42235) Reading deviceId for RawKeyEventDataAndroid event +[42235]({{site.repo.flutter}}pull/42235) Reading deviceId for RawKeyEventDataAndroid event -[42487]({{site.repo.flutter}}/pull/42487) refactor depfile usage and update linux rule +[42487]({{site.repo.flutter}}pull/42487) refactor depfile usage and update linux rule -[42861]({{site.repo.flutter}}/pull/42861) Add repeatCount to RawKeyEventDataAndroid +[42861]({{site.repo.flutter}}pull/42861) Add repeatCount to RawKeyEventDataAndroid -[42962]({{site.repo.flutter}}/pull/42962) Remove linux-x64 unpack logic +[42962]({{site.repo.flutter}}pull/42962) Remove linux-x64 unpack logic -[43238]({{site.repo.flutter}}/pull/43238) Fixing focus traversal when the node options are empty +[43238]({{site.repo.flutter}}pull/43238) Fixing focus traversal when the node options are empty -[43362]({{site.repo.flutter}}/pull/43362) Allow rebuilding of docker image, re-enable deploy gallery macos +[43362]({{site.repo.flutter}}pull/43362) Allow rebuilding of docker image, re-enable deploy gallery macos -[43758]({{site.repo.flutter}}/pull/43758) Split desktop config fallback variable by platform +[43758]({{site.repo.flutter}}pull/43758) Split desktop config fallback variable by platform -[44130]({{site.repo.flutter}}/pull/44130) Add command key bindings to macOS text editing and fix selection. +[44130]({{site.repo.flutter}}pull/44130) Add command key bindings to macOS text editing and fix selection. -[44410]({{site.repo.flutter}}/pull/44410) Add macOS fn key support. +[44410]({{site.repo.flutter}}pull/44410) Add macOS fn key support. -[44576]({{site.repo.flutter}}/pull/44576) [ci] Use the latest Cirrus Image for macOS +[44576]({{site.repo.flutter}}pull/44576) [ci] Use the latest Cirrus Image for macOS -[44620]({{site.repo.flutter}}/pull/44620) Bump memory requirements for tool_tests-general-linux +[44620]({{site.repo.flutter}}pull/44620) Bump memory requirements for tool_tests-general-linux -[44844]({{site.repo.flutter}}/pull/44844) Properly interpret modifiers on GLFW key events +[44844]({{site.repo.flutter}}pull/44844) Properly interpret modifiers on GLFW key events -[45264]({{site.repo.flutter}}/pull/45264) Add macOS hot reload test +[45264]({{site.repo.flutter}}pull/45264) Add macOS hot reload test -[45392]({{site.repo.flutter}}/pull/45392) [ci] more resources to Windows tasks +[45392]({{site.repo.flutter}}pull/45392) [ci] more resources to Windows tasks -[8507]({{site.repo.engine}}/pull/8507) Add texture support for macOS shell. +[8507]({{site.repo.engine}}pull/8507) Add texture support for macOS shell. -[11324]({{site.repo.engine}}/pull/11324) Clean up Windows and Linux build output +[11324]({{site.repo.engine}}pull/11324) Clean up Windows and Linux build output -[11327]({{site.repo.engine}}/pull/11327) [Windows] Update API for alternative Windows shell platform implementation +[11327]({{site.repo.engine}}pull/11327) [Windows] Update API for alternative Windows shell platform implementation -[11380]({{site.repo.engine}}/pull/11380) Use App.framework in macOS FlutterDartProject +[11380]({{site.repo.engine}}pull/11380) Use App.framework in macOS FlutterDartProject -[11386]({{site.repo.engine}}/pull/11386) Allow non-resizable windows in GLFW embedding +[11386]({{site.repo.engine}}pull/11386) Allow non-resizable windows in GLFW embedding -[11475]({{site.repo.engine}}/pull/11475) buildfix: support build windows release/profile mode(#32746) +[11475]({{site.repo.engine}}pull/11475) buildfix: support build windows release/profile mode(#32746) -[11828]({{site.repo.engine}}/pull/11828) [Windows] Address #36422 by adding a context for async resource uploading +[11828]({{site.repo.engine}}pull/11828) [Windows] Address #36422 by adding a context for async resource uploading -[12230]({{site.repo.engine}}/pull/12230) Add an initial macOS version of FlutterAppDelegate +[12230]({{site.repo.engine}}pull/12230) Add an initial macOS version of FlutterAppDelegate -[12234]({{site.repo.engine}}/pull/12234) [glfw/windows] Stops keeping track of input models +[12234]({{site.repo.engine}}pull/12234) [glfw/windows] Stops keeping track of input models -[12267]({{site.repo.engine}}/pull/12267) [macos] Stops keeping track of text input models +[12267]({{site.repo.engine}}pull/12267) [macos] Stops keeping track of text input models -[12276]({{site.repo.engine}}/pull/12276) Add system font change listener for windows +[12276]({{site.repo.engine}}pull/12276) Add system font change listener for windows -[12423]({{site.repo.engine}}/pull/12423) add windows embedding test +[12423]({{site.repo.engine}}pull/12423) add windows embedding test -[12809]({{site.repo.engine}}/pull/12809) Use the x64 host toolchain for x86 target gen_snapshot only on Linux +[12809]({{site.repo.engine}}pull/12809) Use the x64 host toolchain for x86 target gen_snapshot only on Linux -[12814]({{site.repo.engine}}/pull/12814) Enable all engine test on windows +[12814]({{site.repo.engine}}pull/12814) Enable all engine test on windows -[13300]({{site.repo.engine}}/pull/13300) Switch the MacOS Desktop embedder to using a thread configuration where the platform and render task runners are the same. +[13300]({{site.repo.engine}}pull/13300) Switch the MacOS Desktop embedder to using a thread configuration where the platform and render task runners are the same. -[13702]({{site.repo.engine}}/pull/13702) Fix editing selection and deletion on macOS +[13702]({{site.repo.engine}}pull/13702) Fix editing selection and deletion on macOS ## Framework We've fixed many bugs in this release to improve the quality and stability of our framework. -[38643]({{site.repo.flutter}}/pull/38643) PlatformViewLink handles focus +[38643]({{site.repo.flutter}}pull/38643) PlatformViewLink handles focus -[38699]({{site.repo.flutter}}/pull/38699) fix widgetspan does not work with ellipsis in text widget +[38699]({{site.repo.flutter}}pull/38699) fix widgetspan does not work with ellipsis in text widget -[38789]({{site.repo.flutter}}/pull/38789) Fix DragTarget not being rebuilt when a rejected Draggable enters #38786 +[38789]({{site.repo.flutter}}pull/38789) Fix DragTarget not being rebuilt when a rejected Draggable enters #38786 -[38930]({{site.repo.flutter}}/pull/38930) Implement system fonts system channel listener +[38930]({{site.repo.flutter}}pull/38930) Implement system fonts system channel listener -[38936]({{site.repo.flutter}}/pull/38936) Fix KeySet (and LogicalKeySet) hashCode calculation +[38936]({{site.repo.flutter}}pull/38936) Fix KeySet (and LogicalKeySet) hashCode calculation -[39059]({{site.repo.flutter}}/pull/39059) Explain const values in MediaQuery test file +[39059]({{site.repo.flutter}}pull/39059) Explain const values in MediaQuery test file -[39085]({{site.repo.flutter}}/pull/39085) Make inspector details subtree depth configurable. +[39085]({{site.repo.flutter}}pull/39085) Make inspector details subtree depth configurable. -[39089]({{site.repo.flutter}}/pull/39089) Correct InheritedTheme.captureAll() for multiple theme ancestors of the same type +[39089]({{site.repo.flutter}}pull/39089) Correct InheritedTheme.captureAll() for multiple theme ancestors of the same type -[39195]({{site.repo.flutter}}/pull/39195) respect reversed scroll views +[39195]({{site.repo.flutter}}pull/39195) respect reversed scroll views -[39252]({{site.repo.flutter}}/pull/39252) Adds relayout option to CustomMultiChildLayout. +[39252]({{site.repo.flutter}}pull/39252) Adds relayout option to CustomMultiChildLayout. -[39282]({{site.repo.flutter}}/pull/39282) Expose text metrics in TextPainter. +[39282]({{site.repo.flutter}}pull/39282) Expose text metrics in TextPainter. -[39354]({{site.repo.flutter}}/pull/39354) Add IterableFlagsProperty and use it on proxy box classes +[39354]({{site.repo.flutter}}pull/39354) Add IterableFlagsProperty and use it on proxy box classes -[39428]({{site.repo.flutter}}/pull/39428) Replace doc example text +[39428]({{site.repo.flutter}}pull/39428) Replace doc example text -[39446]({{site.repo.flutter}}/pull/39446) Add viewType to PlatformViewLink +[39446]({{site.repo.flutter}}pull/39446) Add viewType to PlatformViewLink -[39844]({{site.repo.flutter}}/pull/39844) Fix curve for popping heroes +[39844]({{site.repo.flutter}}pull/39844) Fix curve for popping heroes -[40099]({{site.repo.flutter}}/pull/40099) Fix double.infinity serialization +[40099]({{site.repo.flutter}}pull/40099) Fix double.infinity serialization -[40105]({{site.repo.flutter}}/pull/40105) Ensure frame is scheduled when root widget is attached +[40105]({{site.repo.flutter}}pull/40105) Ensure frame is scheduled when root widget is attached -[40119]({{site.repo.flutter}}/pull/40119) fix skips to include all channels +[40119]({{site.repo.flutter}}pull/40119) fix skips to include all channels -[40280]({{site.repo.flutter}}/pull/40280) PlatformView: recreate surface if the controller changes +[40280]({{site.repo.flutter}}pull/40280) PlatformView: recreate surface if the controller changes -[40306]({{site.repo.flutter}}/pull/40306) Restore offstage and ticker mode after hero pop and the from hero is null +[40306]({{site.repo.flutter}}pull/40306) Restore offstage and ticker mode after hero pop and the from hero is null -[40609]({{site.repo.flutter}}/pull/40609) Specify ifTrue and ifFalse for strut FlagProperty +[40609]({{site.repo.flutter}}pull/40609) Specify ifTrue and ifFalse for strut FlagProperty -[40635]({{site.repo.flutter}}/pull/40635) Return WidgetSpans from getSpanForPosition +[40635]({{site.repo.flutter}}pull/40635) Return WidgetSpans from getSpanForPosition -[40638]({{site.repo.flutter}}/pull/40638) Allow sending platform messages from plugins to the framework and implement EventChannel +[40638]({{site.repo.flutter}}pull/40638) Allow sending platform messages from plugins to the framework and implement EventChannel -[40709]({{site.repo.flutter}}/pull/40709) Fixed Selectable text align is broken +[40709]({{site.repo.flutter}}pull/40709) Fixed Selectable text align is broken -[40718]({{site.repo.flutter}}/pull/40718) Handle CR+LF end of line sequences in the license parser +[40718]({{site.repo.flutter}}pull/40718) Handle CR+LF end of line sequences in the license parser -[40775]({{site.repo.flutter}}/pull/40775) Use EdgeInsetsGeometry instead of EdgeInsets +[40775]({{site.repo.flutter}}pull/40775) Use EdgeInsetsGeometry instead of EdgeInsets -[40917]({{site.repo.flutter}}/pull/40917) AnimatedBuilder API Doc improvements +[40917]({{site.repo.flutter}}pull/40917) AnimatedBuilder API Doc improvements -[41145]({{site.repo.flutter}}/pull/41145) Explicitly set CocoaPods version +[41145]({{site.repo.flutter}}pull/41145) Explicitly set CocoaPods version -[41245]({{site.repo.flutter}}/pull/41245) Change the way ActionDispatcher is found. +[41245]({{site.repo.flutter}}pull/41245) Change the way ActionDispatcher is found. -[41329]({{site.repo.flutter}}/pull/41329) Refactor: Base tap gesture recognizer +[41329]({{site.repo.flutter}}pull/41329) Refactor: Base tap gesture recognizer -[41417]({{site.repo.flutter}}/pull/41417) Address previous comments, fix Intent.doNothing. +[41417]({{site.repo.flutter}}pull/41417) Address previous comments, fix Intent.doNothing. -[41763]({{site.repo.flutter}}/pull/41763) No longer rebuild Routes when MediaQuery updates +[41763]({{site.repo.flutter}}pull/41763) No longer rebuild Routes when MediaQuery updates -[41791]({{site.repo.flutter}}/pull/41791) Refactor: Make MouseTracker test concise with some utility functions +[41791]({{site.repo.flutter}}pull/41791) Refactor: Make MouseTracker test concise with some utility functions -[41803]({{site.repo.flutter}}/pull/41803) Fixed media query issues and added test to prevent it from coming back +[41803]({{site.repo.flutter}}pull/41803) Fixed media query issues and added test to prevent it from coming back -[41879]({{site.repo.flutter}}/pull/41879) Make MouseTracker.sendMouseNotifications private +[41879]({{site.repo.flutter}}pull/41879) Make MouseTracker.sendMouseNotifications private -[42076]({{site.repo.flutter}}/pull/42076) create gesture recognizers on attach and dispose on detach to avoid leaks +[42076]({{site.repo.flutter}}pull/42076) create gesture recognizers on attach and dispose on detach to avoid leaks -[42253]({{site.repo.flutter}}/pull/42253) Change modal barrier to dismissing on tap up +[42253]({{site.repo.flutter}}pull/42253) Change modal barrier to dismissing on tap up -[42484]({{site.repo.flutter}}/pull/42484) Gradient transform +[42484]({{site.repo.flutter}}pull/42484) Gradient transform -[42526]({{site.repo.flutter}}/pull/42526) Improve routers performance +[42526]({{site.repo.flutter}}pull/42526) Improve routers performance -[42558]({{site.repo.flutter}}/pull/42558) Use placeholder dimensions that reflect the final text layout +[42558]({{site.repo.flutter}}pull/42558) Use placeholder dimensions that reflect the final text layout -[42688]({{site.repo.flutter}}/pull/42688) Source Code Comment Typo Fixes +[42688]({{site.repo.flutter}}pull/42688) Source Code Comment Typo Fixes -[42777]({{site.repo.flutter}}/pull/42777) Fix memory leak in TransitionRoute +[42777]({{site.repo.flutter}}pull/42777) Fix memory leak in TransitionRoute -[42879]({{site.repo.flutter}}/pull/42879) Re-implement hardware keyboard text selection. +[42879]({{site.repo.flutter}}pull/42879) Re-implement hardware keyboard text selection. -[42953]({{site.repo.flutter}}/pull/42953) Soften layer breakage +[42953]({{site.repo.flutter}}pull/42953) Soften layer breakage -[43006]({{site.repo.flutter}}/pull/43006) Set default borderRadius to zero in ClipRRect (as documented) +[43006]({{site.repo.flutter}}pull/43006) Set default borderRadius to zero in ClipRRect (as documented) -[43246]({{site.repo.flutter}}/pull/43246) Tap.dart: Fixes the spacing to the right side of reason +[43246]({{site.repo.flutter}}pull/43246) Tap.dart: Fixes the spacing to the right side of reason -[43296]({{site.repo.flutter}}/pull/43296) Skip failing test to green build +[43296]({{site.repo.flutter}}pull/43296) Skip failing test to green build -[43467]({{site.repo.flutter}}/pull/43467) Fixed bug where we could accidently call a callback twice. +[43467]({{site.repo.flutter}}pull/43467) Fixed bug where we could accidently call a callback twice. -[43677]({{site.repo.flutter}}/pull/43677) add libzip cache artifact +[43677]({{site.repo.flutter}}pull/43677) add libzip cache artifact -[43684]({{site.repo.flutter}}/pull/43684) [flutter_runner] Use sky_engine from the topaz tree +[43684]({{site.repo.flutter}}pull/43684) [flutter_runner] Use sky_engine from the topaz tree -[43685]({{site.repo.flutter}}/pull/43685) Remove Poller class from flutter_tools +[43685]({{site.repo.flutter}}pull/43685) Remove Poller class from flutter_tools -[43739]({{site.repo.flutter}}/pull/43739) enable avoid_web_libraries_in_flutter +[43739]({{site.repo.flutter}}pull/43739) enable avoid_web_libraries_in_flutter -[43865]({{site.repo.flutter}}/pull/43865) Reorder show and setEditingState calls to the IMM +[43865]({{site.repo.flutter}}pull/43865) Reorder show and setEditingState calls to the IMM -[44150]({{site.repo.flutter}}/pull/44150) Manually roll engine to unred the tree +[44150]({{site.repo.flutter}}pull/44150) Manually roll engine to unred the tree -[44217]({{site.repo.flutter}}/pull/44217) Moving pointer event sanitizing to engine. +[44217]({{site.repo.flutter}}pull/44217) Moving pointer event sanitizing to engine. -[44233]({{site.repo.flutter}}/pull/44233) Remove yield from inherited model +[44233]({{site.repo.flutter}}pull/44233) Remove yield from inherited model -[44408]({{site.repo.flutter}}/pull/44408) Remove no longer needed clean up code +[44408]({{site.repo.flutter}}pull/44408) Remove no longer needed clean up code -[44422]({{site.repo.flutter}}/pull/44422) Remove TextRange, export it from dart:ui +[44422]({{site.repo.flutter}}pull/44422) Remove TextRange, export it from dart:ui -[44490]({{site.repo.flutter}}/pull/44490) Fix "node._relayoutBoundary == _relayoutBoundary" crash +[44490]({{site.repo.flutter}}pull/44490) Fix "node._relayoutBoundary == _relayoutBoundary" crash -[44611]({{site.repo.flutter}}/pull/44611) Convert to TextPosition for getWordBoundary +[44611]({{site.repo.flutter}}pull/44611) Convert to TextPosition for getWordBoundary -[44617]({{site.repo.flutter}}/pull/44617) Make disposing a ScrollPosition with pixels=null legal +[44617]({{site.repo.flutter}}pull/44617) Make disposing a ScrollPosition with pixels=null legal -[44622]({{site.repo.flutter}}/pull/44622) Track and use fallback TextAffinity for null affinity platform TextSelections. +[44622]({{site.repo.flutter}}pull/44622) Track and use fallback TextAffinity for null affinity platform TextSelections. -[44967]({{site.repo.flutter}}/pull/44967) Try a mildly prettier FlutterError and make it less drastic in release mode +[44967]({{site.repo.flutter}}pull/44967) Try a mildly prettier FlutterError and make it less drastic in release mode -[45083]({{site.repo.flutter}}/pull/45083) Fix draggable scrollable sheet scroll notification +[45083]({{site.repo.flutter}}pull/45083) Fix draggable scrollable sheet scroll notification -[45240]({{site.repo.flutter}}/pull/45240) implicit-casts:false in flutter_web_plugins +[45240]({{site.repo.flutter}}pull/45240) implicit-casts:false in flutter_web_plugins -[45249]({{site.repo.flutter}}/pull/45249) implicit-casts:false in flutter_goldens and flutter_goldens_client +[45249]({{site.repo.flutter}}pull/45249) implicit-casts:false in flutter_goldens and flutter_goldens_client ## Engine In this update, the core engine continues to see many improvements, including a fix that solves the long-requested scrolling performance issue on iPhoneX/Xs. -[9386]({{site.repo.engine}}/pull/9386) [glfw] Send the glfw key data to the framework. +[9386]({{site.repo.engine}}pull/9386) [glfw] Send the glfw key data to the framework. -[9498]({{site.repo.engine}}/pull/9498) Notify framework to clear input connection when app is backgrounded (#35054). +[9498]({{site.repo.engine}}pull/9498) Notify framework to clear input connection when app is backgrounded (#35054). -[9806]({{site.repo.engine}}/pull/9806) Reuse texture cache in ios_external_texture_gl. +[9806]({{site.repo.engine}}pull/9806) Reuse texture cache in ios_external_texture_gl. -[9864]({{site.repo.engine}}/pull/9864) Add capability to add AppDelegate as UNUserNotificationCenterDelegate +[9864]({{site.repo.engine}}pull/9864) Add capability to add AppDelegate as UNUserNotificationCenterDelegate -[9888]({{site.repo.engine}}/pull/9888) Provide dart vm initalize isolate callback so that children isolates belong to parent's isolate group. +[9888]({{site.repo.engine}}pull/9888) Provide dart vm initalize isolate callback so that children isolates belong to parent's isolate group. -[10154]({{site.repo.engine}}/pull/10154) Started taking advantage of Skia's new copyTableData to avoid superfluous copies. +[10154]({{site.repo.engine}}pull/10154) Started taking advantage of Skia's new copyTableData to avoid superfluous copies. -[10182]({{site.repo.engine}}/pull/10182) Made flutter startup faster by allowing initialization to be parallelized +[10182]({{site.repo.engine}}pull/10182) Made flutter startup faster by allowing initialization to be parallelized -[10326]({{site.repo.engine}}/pull/10326) copypixelbuffer causes crash +[10326]({{site.repo.engine}}pull/10326) copypixelbuffer causes crash -[10670]({{site.repo.engine}}/pull/10670) Expose LineMetrics in dart:ui +[10670]({{site.repo.engine}}pull/10670) Expose LineMetrics in dart:ui -[10945]({{site.repo.engine}}/pull/10945) De-dup FILE output for each license +[10945]({{site.repo.engine}}pull/10945) De-dup FILE output for each license -[11041]({{site.repo.engine}}/pull/11041) Add a BroadcastStream to FrameTiming +[11041]({{site.repo.engine}}pull/11041) Add a BroadcastStream to FrameTiming -[11049]({{site.repo.engine}}/pull/11049) Release _ongoingTouches when FlutterViewController dealloc +[11049]({{site.repo.engine}}pull/11049) Release _ongoingTouches when FlutterViewController dealloc -[11062]({{site.repo.engine}}/pull/11062) Provide a placeholder queue ID for the custom embedder task runner. +[11062]({{site.repo.engine}}pull/11062) Provide a placeholder queue ID for the custom embedder task runner. -[11063]({{site.repo.engine}}/pull/11063) Update ExternalViewEmbedder class comment. +[11063]({{site.repo.engine}}pull/11063) Update ExternalViewEmbedder class comment. -[11070]({{site.repo.engine}}/pull/11070) Platform View implemenation for Metal +[11070]({{site.repo.engine}}pull/11070) Platform View implemenation for Metal -[11210]({{site.repo.engine}}/pull/11210) Add Chrome to Dockerfile +[11210]({{site.repo.engine}}pull/11210) Add Chrome to Dockerfile -[11222]({{site.repo.engine}}/pull/11222) Dont present session twice +[11222]({{site.repo.engine}}pull/11222) Dont present session twice -[11224]({{site.repo.engine}}/pull/11224) Update metal layer drawable size on relayout. +[11224]({{site.repo.engine}}pull/11224) Update metal layer drawable size on relayout. -[11226]({{site.repo.engine}}/pull/11226) Make firebase testlab always pass +[11226]({{site.repo.engine}}pull/11226) Make firebase testlab always pass -[11228]({{site.repo.engine}}/pull/11228) Re-enable firebase test and don't use google login +[11228]({{site.repo.engine}}pull/11228) Re-enable firebase test and don't use google login -[11230]({{site.repo.engine}}/pull/11230) Update tflite_native and language_model revisions to match the Dart SDK +[11230]({{site.repo.engine}}pull/11230) Update tflite_native and language_model revisions to match the Dart SDK -[11256]({{site.repo.engine}}/pull/11256) Upgrade compiler to Clang 10. +[11256]({{site.repo.engine}}pull/11256) Upgrade compiler to Clang 10. -[11265]({{site.repo.engine}}/pull/11265) make it possible to disable debug symbols stripping +[11265]({{site.repo.engine}}pull/11265) make it possible to disable debug symbols stripping -[11270]({{site.repo.engine}}/pull/11270) Reset NSNetService delegate to nil,when stop service. +[11270]({{site.repo.engine}}pull/11270) Reset NSNetService delegate to nil,when stop service. -[11283]({{site.repo.engine}}/pull/11283) Fix objects equal to null not being detected as null +[11283]({{site.repo.engine}}pull/11283) Fix objects equal to null not being detected as null -[11300]({{site.repo.engine}}/pull/11300) Do not Prepare raster_cache if view_embedder is present +[11300]({{site.repo.engine}}pull/11300) Do not Prepare raster_cache if view_embedder is present -[11305]({{site.repo.engine}}/pull/11305) Fix a segfault in EmbedderTest.CanSpecifyCustomTaskRunner +[11305]({{site.repo.engine}}pull/11305) Fix a segfault in EmbedderTest.CanSpecifyCustomTaskRunner -[11306]({{site.repo.engine}}/pull/11306) Set FlutterMacOS podspec min version to 10.11 +[11306]({{site.repo.engine}}pull/11306) Set FlutterMacOS podspec min version to 10.11 -[11309]({{site.repo.engine}}/pull/11309) Fix change_install_name.py to be GN-friendly +[11309]({{site.repo.engine}}pull/11309) Fix change_install_name.py to be GN-friendly -[11310]({{site.repo.engine}}/pull/11310) When using a custom compositor, ensure the root canvas is flushed. +[11310]({{site.repo.engine}}pull/11310) When using a custom compositor, ensure the root canvas is flushed. -[11315]({{site.repo.engine}}/pull/11315) Do not add null task observers +[11315]({{site.repo.engine}}pull/11315) Do not add null task observers -[11330]({{site.repo.engine}}/pull/11330) Remove engine hash from the output artifact +[11330]({{site.repo.engine}}pull/11330) Remove engine hash from the output artifact -[11355]({{site.repo.engine}}/pull/11355) update sim script +[11355]({{site.repo.engine}}pull/11355) update sim script -[11356]({{site.repo.engine}}/pull/11356) Remove engine hash from pom filename +[11356]({{site.repo.engine}}pull/11356) Remove engine hash from pom filename -[11361]({{site.repo.engine}}/pull/11361) Include Java stack trace in method channel invocations +[11361]({{site.repo.engine}}pull/11361) Include Java stack trace in method channel invocations -[11367]({{site.repo.engine}}/pull/11367) Make message loop task entry containers thread safe +[11367]({{site.repo.engine}}pull/11367) Make message loop task entry containers thread safe -[11368]({{site.repo.engine}}/pull/11368) Switch to an incremental runloop for GLFW +[11368]({{site.repo.engine}}pull/11368) Switch to an incremental runloop for GLFW -[11374]({{site.repo.engine}}/pull/11374) Update scenarios readme +[11374]({{site.repo.engine}}pull/11374) Update scenarios readme -[11382]({{site.repo.engine}}/pull/11382) Trivial: remove empty line in the pom file +[11382]({{site.repo.engine}}pull/11382) Trivial: remove empty line in the pom file -[11384]({{site.repo.engine}}/pull/11384) Account for root surface transformation on the surfaces managed by the external view embedder. +[11384]({{site.repo.engine}}pull/11384) Account for root surface transformation on the surfaces managed by the external view embedder. -[11388]({{site.repo.engine}}/pull/11388) Allow overriding the GLFW pixel ratio +[11388]({{site.repo.engine}}pull/11388) Allow overriding the GLFW pixel ratio -[11392]({{site.repo.engine}}/pull/11392) Wire up software rendering in the test compositor. +[11392]({{site.repo.engine}}pull/11392) Wire up software rendering in the test compositor. -[11394]({{site.repo.engine}}/pull/11394) Avoid root surface acquisition during custom composition with software renderer. +[11394]({{site.repo.engine}}pull/11394) Avoid root surface acquisition during custom composition with software renderer. -[11395]({{site.repo.engine}}/pull/11395) Remove deprecated ThreadTest::GetThreadTaskRunner and use the newer CreateNewThread API. +[11395]({{site.repo.engine}}pull/11395) Remove deprecated ThreadTest::GetThreadTaskRunner and use the newer CreateNewThread API. -[11416]({{site.repo.engine}}/pull/11416) Shrink cirrus docker image: reduce RUN count, apt-get clean +[11416]({{site.repo.engine}}pull/11416) Shrink cirrus docker image: reduce RUN count, apt-get clean -[11419]({{site.repo.engine}}/pull/11419) Support non-60 refresh rate on PerformanceOverlay +[11419]({{site.repo.engine}}pull/11419) Support non-60 refresh rate on PerformanceOverlay -[11420]({{site.repo.engine}}/pull/11420) Fix touchpad scrolling on Chromebook +[11420]({{site.repo.engine}}pull/11420) Fix touchpad scrolling on Chromebook -[11423]({{site.repo.engine}}/pull/11423) Add tracing of the number of frames in flight in the pipeline. +[11423]({{site.repo.engine}}pull/11423) Add tracing of the number of frames in flight in the pipeline. -[11427]({{site.repo.engine}}/pull/11427) Skip empty platform view overlays. +[11427]({{site.repo.engine}}pull/11427) Skip empty platform view overlays. -[11436]({{site.repo.engine}}/pull/11436) update method for skia +[11436]({{site.repo.engine}}pull/11436) update method for skia -[11456]({{site.repo.engine}}/pull/11456) Update the ui.LineMetrics.height metric to be more useful to external users +[11456]({{site.repo.engine}}pull/11456) Update the ui.LineMetrics.height metric to be more useful to external users -[11473]({{site.repo.engine}}/pull/11473) Add missing newline at EOF +[11473]({{site.repo.engine}}pull/11473) Add missing newline at EOF -[11489]({{site.repo.engine}}/pull/11489) Ensure trailing newline before EOF in C++ sources +[11489]({{site.repo.engine}}pull/11489) Ensure trailing newline before EOF in C++ sources -[11520]({{site.repo.engine}}/pull/11520) Bitcode only for release +[11520]({{site.repo.engine}}pull/11520) Bitcode only for release -[11524]({{site.repo.engine}}/pull/11524) Reuse texture cache in ios_external_texture_gl +[11524]({{site.repo.engine}}pull/11524) Reuse texture cache in ios_external_texture_gl -[11528]({{site.repo.engine}}/pull/11528) Strip bitcode from gen_snapshot +[11528]({{site.repo.engine}}pull/11528) Strip bitcode from gen_snapshot -[11537]({{site.repo.engine}}/pull/11537) Add check to enable metal for import +[11537]({{site.repo.engine}}pull/11537) Add check to enable metal for import -[11550]({{site.repo.engine}}/pull/11550) Make Skia cache size channel respond with a value +[11550]({{site.repo.engine}}pull/11550) Make Skia cache size channel respond with a value -[11554]({{site.repo.engine}}/pull/11554) make engine, ui, and sdk rewriter inputs of dill construction +[11554]({{site.repo.engine}}pull/11554) make engine, ui, and sdk rewriter inputs of dill construction -[11576]({{site.repo.engine}}/pull/11576) Minor tweaks to the Doxygen theme. +[11576]({{site.repo.engine}}pull/11576) Minor tweaks to the Doxygen theme. -[11622]({{site.repo.engine}}/pull/11622) Include from font_asset_provider +[11622]({{site.repo.engine}}pull/11622) Include from font_asset_provider -[11635]({{site.repo.engine}}/pull/11635) [flutter_runner] Port Expose ViewBound Wireframe Functionality +[11635]({{site.repo.engine}}pull/11635) [flutter_runner] Port Expose ViewBound Wireframe Functionality -[11636]({{site.repo.engine}}/pull/11636) [fidl][flutter_runner] Port Migrate to new fit::optional compatible APIs +[11636]({{site.repo.engine}}pull/11636) [fidl][flutter_runner] Port Migrate to new fit::optional compatible APIs -[11638]({{site.repo.engine}}/pull/11638) Update CanvasSpy::onDrawEdgeAAQuad for Skia API change +[11638]({{site.repo.engine}}pull/11638) Update CanvasSpy::onDrawEdgeAAQuad for Skia API change -[11649]({{site.repo.engine}}/pull/11649) [flutter] Port: Run handle wait completers on the microtask queue +[11649]({{site.repo.engine}}pull/11649) [flutter] Port: Run handle wait completers on the microtask queue -[11654]({{site.repo.engine}}/pull/11654) Append newlines to EOF of all translation units. +[11654]({{site.repo.engine}}pull/11654) Append newlines to EOF of all translation units. -[11655]({{site.repo.engine}}/pull/11655) Don't crash while loading improperly formatted fonts on Safari +[11655]({{site.repo.engine}}pull/11655) Don't crash while loading improperly formatted fonts on Safari -[11669]({{site.repo.engine}}/pull/11669) Add style guide and formatting information +[11669]({{site.repo.engine}}pull/11669) Add style guide and formatting information -[11717]({{site.repo.engine}}/pull/11717) Return a JSON value for the Skia channel +[11717]({{site.repo.engine}}pull/11717) Return a JSON value for the Skia channel -[11722]({{site.repo.engine}}/pull/11722) Quote the font family name whenever setting the font-family property. +[11722]({{site.repo.engine}}pull/11722) Quote the font family name whenever setting the font-family property. -[11736]({{site.repo.engine}}/pull/11736) Add wasm to sky_engine +[11736]({{site.repo.engine}}pull/11736) Add wasm to sky_engine -[11776]({{site.repo.engine}}/pull/11776) [flutter_runner] Port over all the changes to the dart_runner cmx files +[11776]({{site.repo.engine}}pull/11776) [flutter_runner] Port over all the changes to the dart_runner cmx files -[11783]({{site.repo.engine}}/pull/11783) completely strip bitcode +[11783]({{site.repo.engine}}pull/11783) completely strip bitcode -[11795]({{site.repo.engine}}/pull/11795) Add a good reference source for font metrics. +[11795]({{site.repo.engine}}pull/11795) Add a good reference source for font metrics. -[11804]({{site.repo.engine}}/pull/11804) Incorporate View.setSystemGestureExclusionRects code review feedback from #11441 +[11804]({{site.repo.engine}}pull/11804) Incorporate View.setSystemGestureExclusionRects code review feedback from #11441 -[11808]({{site.repo.engine}}/pull/11808) Annotate nullability on FlutterEngine to make swift writing more ergonomic +[11808]({{site.repo.engine}}pull/11808) Annotate nullability on FlutterEngine to make swift writing more ergonomic -[11835]({{site.repo.engine}}/pull/11835) [CFE/VM] Fix merge/typo for bump to kernel version 29 +[11835]({{site.repo.engine}}pull/11835) [CFE/VM] Fix merge/typo for bump to kernel version 29 -[11839]({{site.repo.engine}}/pull/11839) Remove ENABLE_BITCODE from Scenarios test app +[11839]({{site.repo.engine}}pull/11839) Remove ENABLE_BITCODE from Scenarios test app -[11842]({{site.repo.engine}}/pull/11842) Fix RTL justification with newline by passing in full justify tracking var +[11842]({{site.repo.engine}}pull/11842) Fix RTL justification with newline by passing in full justify tracking var -[11847]({{site.repo.engine}}/pull/11847) Add a sample unit test target to flutter runner +[11847]({{site.repo.engine}}pull/11847) Add a sample unit test target to flutter runner -[11849]({{site.repo.engine}}/pull/11849) Support building standalone far packages with autogen manifests +[11849]({{site.repo.engine}}pull/11849) Support building standalone far packages with autogen manifests -[11875]({{site.repo.engine}}/pull/11875) [flutter_runner] Add common libs to the test far +[11875]({{site.repo.engine}}pull/11875) [flutter_runner] Add common libs to the test far -[11877]({{site.repo.engine}}/pull/11877) Finish plumbing message responses on method channels +[11877]({{site.repo.engine}}pull/11877) Finish plumbing message responses on method channels -[11880]({{site.repo.engine}}/pull/11880) Handle new navigation platform messages +[11880]({{site.repo.engine}}pull/11880) Handle new navigation platform messages -[11893]({{site.repo.engine}}/pull/11893) Add @Keep annotation +[11893]({{site.repo.engine}}pull/11893) Add @Keep annotation -[11899]({{site.repo.engine}}/pull/11899) Improve input method and Unicode character display(#30661) +[11899]({{site.repo.engine}}pull/11899) Improve input method and Unicode character display(#30661) -[12011]({{site.repo.engine}}/pull/12011) Cherry-picks for 1.9.1 +[12011]({{site.repo.engine}}pull/12011) Cherry-picks for 1.9.1 -[12016]({{site.repo.engine}}/pull/12016) [flutter_runner] Kernel platform files can now be built in topaz +[12016]({{site.repo.engine}}pull/12016) [flutter_runner] Kernel platform files can now be built in topaz -[12023]({{site.repo.engine}}/pull/12023) Fix multi span text ruler cache lookup failure. +[12023]({{site.repo.engine}}pull/12023) Fix multi span text ruler cache lookup failure. -[12026]({{site.repo.engine}}/pull/12026) [flutter_runner] Plumb Flutter component arguments to the Dart entrypoint +[12026]({{site.repo.engine}}pull/12026) [flutter_runner] Plumb Flutter component arguments to the Dart entrypoint -[12034]({{site.repo.engine}}/pull/12034) [flutter_runner] Refactor our build rules to make them more inline with topaz +[12034]({{site.repo.engine}}pull/12034) [flutter_runner] Refactor our build rules to make them more inline with topaz -[12048]({{site.repo.engine}}/pull/12048) [flutter_runner] Generate symbols for the Dart VM profiler +[12048]({{site.repo.engine}}pull/12048) [flutter_runner] Generate symbols for the Dart VM profiler -[12054]({{site.repo.engine}}/pull/12054) [flutter_runner] Port the accessibility bridge from Topaz +[12054]({{site.repo.engine}}pull/12054) [flutter_runner] Port the accessibility bridge from Topaz -[12076]({{site.repo.engine}}/pull/12076) Add a method to flutter_window_controller to destroy the current window. +[12076]({{site.repo.engine}}pull/12076) Add a method to flutter_window_controller to destroy the current window. -[12080]({{site.repo.engine}}/pull/12080) Don't quote generic font families +[12080]({{site.repo.engine}}pull/12080) Don't quote generic font families -[12081]({{site.repo.engine}}/pull/12081) Add GradientRadial paintStyle implementation +[12081]({{site.repo.engine}}pull/12081) Add GradientRadial paintStyle implementation -[12087]({{site.repo.engine}}/pull/12087) Don't launch the observatory by default on each embedder unit-test invocation. +[12087]({{site.repo.engine}}pull/12087) Don't launch the observatory by default on each embedder unit-test invocation. -[12204]({{site.repo.engine}}/pull/12204) Don't disable toString in release mode for dart:ui classes +[12204]({{site.repo.engine}}pull/12204) Don't disable toString in release mode for dart:ui classes -[12205]({{site.repo.engine}}/pull/12205) Don't load Roboto by default +[12205]({{site.repo.engine}}pull/12205) Don't load Roboto by default -[12218]({{site.repo.engine}}/pull/12218) Namespace patched SDK names to not conflict with Topaz +[12218]({{site.repo.engine}}pull/12218) Namespace patched SDK names to not conflict with Topaz -[12222]({{site.repo.engine}}/pull/12222) Do not generate kernel platform files on topaz tree +[12222]({{site.repo.engine}}pull/12222) Do not generate kernel platform files on topaz tree -[12226]({{site.repo.engine}}/pull/12226) [web_ui] add missing dispose handler for MethodCalls to flutter/platform_view +[12226]({{site.repo.engine}}pull/12226) [web_ui] add missing dispose handler for MethodCalls to flutter/platform_view -[12227]({{site.repo.engine}}/pull/12227) [web_ui] PersistedPlatformView attribute update handling to enable resizing +[12227]({{site.repo.engine}}pull/12227) [web_ui] PersistedPlatformView attribute update handling to enable resizing -[12228]({{site.repo.engine}}/pull/12228) pin and auto-install chrome version +[12228]({{site.repo.engine}}pull/12228) pin and auto-install chrome version -[12229]({{site.repo.engine}}/pull/12229) Improve check to render (or not) a DRRect when inner falls outside of outer on RecordingCanvas +[12229]({{site.repo.engine}}pull/12229) Improve check to render (or not) a DRRect when inner falls outside of outer on RecordingCanvas -[12249]({{site.repo.engine}}/pull/12249) Editable text fix +[12249]({{site.repo.engine}}pull/12249) Editable text fix -[12253]({{site.repo.engine}}/pull/12253) Implement Base32Decode +[12253]({{site.repo.engine}}pull/12253) Implement Base32Decode -[12256]({{site.repo.engine}}/pull/12256) Do not assume Platform.script is a Dart source file during training. +[12256]({{site.repo.engine}}pull/12256) Do not assume Platform.script is a Dart source file during training. -[12257]({{site.repo.engine}}/pull/12257) Re-enable ThreadChecker and fix associated failures +[12257]({{site.repo.engine}}pull/12257) Re-enable ThreadChecker and fix associated failures -[12258]({{site.repo.engine}}/pull/12258) Refactor and polish the 'felt' tool +[12258]({{site.repo.engine}}pull/12258) Refactor and polish the 'felt' tool -[12269]({{site.repo.engine}}/pull/12269) a11y: expose max character count for text fields +[12269]({{site.repo.engine}}pull/12269) a11y: expose max character count for text fields -[12273]({{site.repo.engine}}/pull/12273) Clean up after AppLifecycleTests +[12273]({{site.repo.engine}}pull/12273) Clean up after AppLifecycleTests -[12274]({{site.repo.engine}}/pull/12274) Store screenshot test output as Cirrus artifacts; do fuzzy comparison of non-matching screenshot pixels +[12274]({{site.repo.engine}}pull/12274) Store screenshot test output as Cirrus artifacts; do fuzzy comparison of non-matching screenshot pixels -[12275]({{site.repo.engine}}/pull/12275) Shuffle test order and repeat test runs once. +[12275]({{site.repo.engine}}pull/12275) Shuffle test order and repeat test runs once. -[12281]({{site.repo.engine}}/pull/12281) optionally skip builds +[12281]({{site.repo.engine}}pull/12281) optionally skip builds -[12282]({{site.repo.engine}}/pull/12282) [flutter_runner] Change the path to artifacts +[12282]({{site.repo.engine}}pull/12282) [flutter_runner] Change the path to artifacts -[12287]({{site.repo.engine}}/pull/12287) Adds PluginRegistry to the C++ client wrapper API +[12287]({{site.repo.engine}}pull/12287) Adds PluginRegistry to the C++ client wrapper API -[12288]({{site.repo.engine}}/pull/12288) Include firefox in check to quote font families +[12288]({{site.repo.engine}}pull/12288) Include firefox in check to quote font families -[12289]({{site.repo.engine}}/pull/12289) Fix flutter runner paths +[12289]({{site.repo.engine}}pull/12289) Fix flutter runner paths -[12303]({{site.repo.engine}}/pull/12303) Add a build command to felt +[12303]({{site.repo.engine}}pull/12303) Add a build command to felt -[12306]({{site.repo.engine}}/pull/12306) Fix the declaration of setSystemGestureExclusionRects to match the PlatformMessageHandler interface +[12306]({{site.repo.engine}}pull/12306) Fix the declaration of setSystemGestureExclusionRects to match the PlatformMessageHandler interface -[12307]({{site.repo.engine}}/pull/12307) Cleanup in web_ui +[12307]({{site.repo.engine}}pull/12307) Cleanup in web_ui -[12308]({{site.repo.engine}}/pull/12308) [flutter] Remove old A11y API's. +[12308]({{site.repo.engine}}pull/12308) [flutter] Remove old A11y API's. -[12318]({{site.repo.engine}}/pull/12318) Update canvaskit backend +[12318]({{site.repo.engine}}pull/12318) Update canvaskit backend -[12319]({{site.repo.engine}}/pull/12319) Add "type" to getDisplayRefreshRate protocol +[12319]({{site.repo.engine}}pull/12319) Add "type" to getDisplayRefreshRate protocol -[12320]({{site.repo.engine}}/pull/12320) Fix continuous event polling in the GLFW event loop +[12320]({{site.repo.engine}}pull/12320) Fix continuous event polling in the GLFW event loop -[12323]({{site.repo.engine}}/pull/12323) README for the felt tool +[12323]({{site.repo.engine}}pull/12323) README for the felt tool -[12330]({{site.repo.engine}}/pull/12330) Ensure DRRects without corners also draw. +[12330]({{site.repo.engine}}pull/12330) Ensure DRRects without corners also draw. -[12336]({{site.repo.engine}}/pull/12336) Check for index bounds in RTL handling for trailing whitespace runs. +[12336]({{site.repo.engine}}pull/12336) Check for index bounds in RTL handling for trailing whitespace runs. -[12340]({{site.repo.engine}}/pull/12340) [flutter_runner] Do not use pre-builts just yet +[12340]({{site.repo.engine}}pull/12340) [flutter_runner] Do not use pre-builts just yet -[12342]({{site.repo.engine}}/pull/12342) Update test to verify that secondary isolate gets shutdown before root isolate exits. +[12342]({{site.repo.engine}}pull/12342) Update test to verify that secondary isolate gets shutdown before root isolate exits. -[12343]({{site.repo.engine}}/pull/12343) [flutter_runner] Remove usages of shared snapshots from CC sources +[12343]({{site.repo.engine}}pull/12343) [flutter_runner] Remove usages of shared snapshots from CC sources -[12345]({{site.repo.engine}}/pull/12345) [flutter_runner] Port over the tuning advice for vulkan surface provider +[12345]({{site.repo.engine}}pull/12345) [flutter_runner] Port over the tuning advice for vulkan surface provider -[12346]({{site.repo.engine}}/pull/12346) [flutter_runner] Move from runner context to component context +[12346]({{site.repo.engine}}pull/12346) [flutter_runner] Move from runner context to component context -[12347]({{site.repo.engine}}/pull/12347) [flutter_runner][async] Migrate dart/flutter to new async-loop APIs +[12347]({{site.repo.engine}}pull/12347) [flutter_runner][async] Migrate dart/flutter to new async-loop APIs -[12348]({{site.repo.engine}}/pull/12348) [flutter_runner] Port the new compilation trace from topaz +[12348]({{site.repo.engine}}pull/12348) [flutter_runner] Port the new compilation trace from topaz -[12349]({{site.repo.engine}}/pull/12349) [flutter_runner] Explicitly set |trace_skia| to false +[12349]({{site.repo.engine}}pull/12349) [flutter_runner] Explicitly set |trace_skia| to false -[12350]({{site.repo.engine}}/pull/12350) [flutter_runner] Port vulkan surface changes +[12350]({{site.repo.engine}}pull/12350) [flutter_runner] Port vulkan surface changes -[12355]({{site.repo.engine}}/pull/12355) skip flaky test +[12355]({{site.repo.engine}}pull/12355) skip flaky test -[12363]({{site.repo.engine}}/pull/12363) Track "mouse leave" event +[12363]({{site.repo.engine}}pull/12363) Track "mouse leave" event -[12375]({{site.repo.engine}}/pull/12375) Sync dart_runner +[12375]({{site.repo.engine}}pull/12375) Sync dart_runner -[12395]({{site.repo.engine}}/pull/12395) Update --dart-vm-flags whitelist to include --write-service-info and --sample-buffer-duration +[12395]({{site.repo.engine}}pull/12395) Update --dart-vm-flags whitelist to include --write-service-info and --sample-buffer-duration -[12403]({{site.repo.engine}}/pull/12403) Don't send pointer events when the framework isn't ready yet +[12403]({{site.repo.engine}}pull/12403) Don't send pointer events when the framework isn't ready yet -[12410]({{site.repo.engine}}/pull/12410) Send TYPE_VIEW_FOCUSED for views with input focus. +[12410]({{site.repo.engine}}pull/12410) Send TYPE_VIEW_FOCUSED for views with input focus. -[12412]({{site.repo.engine}}/pull/12412) SkSL precompile +[12412]({{site.repo.engine}}pull/12412) SkSL precompile -[12426]({{site.repo.engine}}/pull/12426) Store fallback font names as a vector instead of a set. +[12426]({{site.repo.engine}}pull/12426) Store fallback font names as a vector instead of a set. -[12431]({{site.repo.engine}}/pull/12431) Interpret negative radii as 0 in recording_canvas.dart +[12431]({{site.repo.engine}}pull/12431) Interpret negative radii as 0 in recording_canvas.dart -[12432]({{site.repo.engine}}/pull/12432) Work around Samsung keyboard issue +[12432]({{site.repo.engine}}pull/12432) Work around Samsung keyboard issue -[12434]({{site.repo.engine}}/pull/12434) delete golden files; switch to flutter/goldens +[12434]({{site.repo.engine}}pull/12434) delete golden files; switch to flutter/goldens -[12435]({{site.repo.engine}}/pull/12435) add dart:html, dart:js, and dart:js_util to the copy of the Dart SDK used for analysis +[12435]({{site.repo.engine}}pull/12435) add dart:html, dart:js, and dart:js_util to the copy of the Dart SDK used for analysis -[12443]({{site.repo.engine}}/pull/12443) Force exit felt tool on sigint, sigterm +[12443]({{site.repo.engine}}pull/12443) Force exit felt tool on sigint, sigterm -[12446]({{site.repo.engine}}/pull/12446) Add support for JIT release mode +[12446]({{site.repo.engine}}pull/12446) Add support for JIT release mode -[12447]({{site.repo.engine}}/pull/12447) Reflect selection changes in Firefox for text editing +[12447]({{site.repo.engine}}pull/12447) Reflect selection changes in Firefox for text editing -[12448]({{site.repo.engine}}/pull/12448) Make kDoNotResizeDimension public so framework can use it directly +[12448]({{site.repo.engine}}pull/12448) Make kDoNotResizeDimension public so framework can use it directly -[12450]({{site.repo.engine}}/pull/12450) Adds support for 5 mouse buttons +[12450]({{site.repo.engine}}pull/12450) Adds support for 5 mouse buttons -[12453]({{site.repo.engine}}/pull/12453) Adding Link SemanticsFlag +[12453]({{site.repo.engine}}pull/12453) Adding Link SemanticsFlag -[12454]({{site.repo.engine}}/pull/12454) Add .mskp file to binary format +[12454]({{site.repo.engine}}pull/12454) Add .mskp file to binary format -[12470]({{site.repo.engine}}/pull/12470) [web_ui] Check if a pointer is already down for the specific device +[12470]({{site.repo.engine}}pull/12470) [web_ui] Check if a pointer is already down for the specific device -[12479]({{site.repo.engine}}/pull/12479) Refactoring text_editing.dart +[12479]({{site.repo.engine}}pull/12479) Refactoring text_editing.dart -[12563]({{site.repo.engine}}/pull/12563) Remove use of the blobs snapshot format from unittests +[12563]({{site.repo.engine}}pull/12563) Remove use of the blobs snapshot format from unittests -[12565]({{site.repo.engine}}/pull/12565) Remove references to topaz +[12565]({{site.repo.engine}}pull/12565) Remove references to topaz -[12573]({{site.repo.engine}}/pull/12573) [flutter_runner] Refactor thread_application pair to ActiveApplication +[12573]({{site.repo.engine}}pull/12573) [flutter_runner] Refactor thread_application pair to ActiveApplication -[12618]({{site.repo.engine}}/pull/12618) Add isFocusable to SemanticsFlag +[12618]({{site.repo.engine}}pull/12618) Add isFocusable to SemanticsFlag -[12681]({{site.repo.engine}}/pull/12681) Create a package-able incremental compiler +[12681]({{site.repo.engine}}pull/12681) Create a package-able incremental compiler -[12695]({{site.repo.engine}}/pull/12695) Add onUnregistered callback in 'Texture' and 'FlutterTexture' +[12695]({{site.repo.engine}}pull/12695) Add onUnregistered callback in 'Texture' and 'FlutterTexture' -[12698]({{site.repo.engine}}/pull/12698) [web_ui] Fixing invalid state bug for text editing +[12698]({{site.repo.engine}}pull/12698) [web_ui] Fixing invalid state bug for text editing -[12699]({{site.repo.engine}}/pull/12699) Adding 'pub get' to the 'compile_xxxx.sh' in the Scenario app +[12699]({{site.repo.engine}}pull/12699) Adding 'pub get' to the 'compile_xxxx.sh' in the Scenario app -[12700]({{site.repo.engine}}/pull/12700) Add missing flag for embedder. +[12700]({{site.repo.engine}}pull/12700) Add missing flag for embedder. -[12701]({{site.repo.engine}}/pull/12701) Cleanup: Made a macro to assert ARC is enabled. +[12701]({{site.repo.engine}}pull/12701) Cleanup: Made a macro to assert ARC is enabled. -[12706]({{site.repo.engine}}/pull/12706) Check for a null input method subtype +[12706]({{site.repo.engine}}pull/12706) Check for a null input method subtype -[12708]({{site.repo.engine}}/pull/12708) Cleanup: Turned on NS_ASSUME_NONNULL_BEGIN for FlutterViewController. +[12708]({{site.repo.engine}}pull/12708) Cleanup: Turned on NS_ASSUME_NONNULL_BEGIN for FlutterViewController. -[12710]({{site.repo.engine}}/pull/12710) Set transparent background in textarea elements +[12710]({{site.repo.engine}}pull/12710) Set transparent background in textarea elements -[12725]({{site.repo.engine}}/pull/12725) Expanded channel buffer resize to method channels. +[12725]({{site.repo.engine}}pull/12725) Expanded channel buffer resize to method channels. -[12728]({{site.repo.engine}}/pull/12728) Remove unused import in the scenario app +[12728]({{site.repo.engine}}pull/12728) Remove unused import in the scenario app -[12730]({{site.repo.engine}}/pull/12730) Stop setting the accessibility text if a node has SCOPES_ROUTE set. +[12730]({{site.repo.engine}}pull/12730) Stop setting the accessibility text if a node has SCOPES_ROUTE set. -[12733]({{site.repo.engine}}/pull/12733) [flutter_runner] Make rd and rx uniform +[12733]({{site.repo.engine}}pull/12733) [flutter_runner] Make rd and rx uniform -[12746]({{site.repo.engine}}/pull/12746) Send AccessibilityEvent.TYPE_VIEW_FOCUSED when input focus is set. +[12746]({{site.repo.engine}}pull/12746) Send AccessibilityEvent.TYPE_VIEW_FOCUSED when input focus is set. -[12754]({{site.repo.engine}}/pull/12754) Fix Metal builds by accounting for the updated SubmitFrame signature. +[12754]({{site.repo.engine}}pull/12754) Fix Metal builds by accounting for the updated SubmitFrame signature. -[12775]({{site.repo.engine}}/pull/12775) Added some thread asserts to the code and made ios_surface_ safe since +[12775]({{site.repo.engine}}pull/12775) Added some thread asserts to the code and made ios_surface_ safe since -[12777]({{site.repo.engine}}/pull/12777) Fix Metal builds. +[12777]({{site.repo.engine}}pull/12777) Fix Metal builds. -[12780]({{site.repo.engine}}/pull/12780) Restart all modern Samsung keyboard IMM +[12780]({{site.repo.engine}}pull/12780) Restart all modern Samsung keyboard IMM -[12783]({{site.repo.engine}}/pull/12783) Add a unit-test to verify that root surface transformation affects platform view coordinates. +[12783]({{site.repo.engine}}pull/12783) Add a unit-test to verify that root surface transformation affects platform view coordinates. -[12785]({{site.repo.engine}}/pull/12785) Fix bug in package script and add dev_compiler to list +[12785]({{site.repo.engine}}pull/12785) Fix bug in package script and add dev_compiler to list -[12793]({{site.repo.engine}}/pull/12793) Fixing selection issues in Firefox +[12793]({{site.repo.engine}}pull/12793) Fixing selection issues in Firefox -[12797]({{site.repo.engine}}/pull/12797) add option for bulk-updating screenshots; update screenshots (Work in progress +[12797]({{site.repo.engine}}pull/12797) add option for bulk-updating screenshots; update screenshots (Work in progress -[12798]({{site.repo.engine}}/pull/12798) [flutter_runner] Update the cmx files to include TZ support +[12798]({{site.repo.engine}}pull/12798) [flutter_runner] Update the cmx files to include TZ support -[12799]({{site.repo.engine}}/pull/12799) Disable EmbedderTest::CanLaunchAndShutdownMultipleTimes. +[12799]({{site.repo.engine}}pull/12799) Disable EmbedderTest::CanLaunchAndShutdownMultipleTimes. -[12800]({{site.repo.engine}}/pull/12800) Prettify all CMX files +[12800]({{site.repo.engine}}pull/12800) Prettify all CMX files -[12801]({{site.repo.engine}}/pull/12801) do not wrap font family name +[12801]({{site.repo.engine}}pull/12801) do not wrap font family name -[12802]({{site.repo.engine}}/pull/12802) Build gen_snapshot with a 64-bit host toolchain even if the target platform is 32-bit +[12802]({{site.repo.engine}}pull/12802) Build gen_snapshot with a 64-bit host toolchain even if the target platform is 32-bit -[12808]({{site.repo.engine}}/pull/12808) Added an embedder example +[12808]({{site.repo.engine}}pull/12808) Added an embedder example -[12813]({{site.repo.engine}}/pull/12813) Unblock SIGPROF on flutter_tester start +[12813]({{site.repo.engine}}pull/12813) Unblock SIGPROF on flutter_tester start -[12816]({{site.repo.engine}}/pull/12816) Enable sanitizer build variants. +[12816]({{site.repo.engine}}pull/12816) Enable sanitizer build variants. -[12821]({{site.repo.engine}}/pull/12821) Update buildroot to pull in ubsan updates. +[12821]({{site.repo.engine}}pull/12821) Update buildroot to pull in ubsan updates. -[12931]({{site.repo.engine}}/pull/12931) remove references to package:_chrome +[12931]({{site.repo.engine}}pull/12931) remove references to package:_chrome -[12958]({{site.repo.engine}}/pull/12958) Adding deviceId to KeyEventChannel enconding method +[12958]({{site.repo.engine}}pull/12958) Adding deviceId to KeyEventChannel enconding method -[12960]({{site.repo.engine}}/pull/12960) Fix typo on channel buffer debug output. +[12960]({{site.repo.engine}}pull/12960) Fix typo on channel buffer debug output. -[12974]({{site.repo.engine}}/pull/12974) Support empty strings and vectors in standard codec +[12974]({{site.repo.engine}}pull/12974) Support empty strings and vectors in standard codec -[12980]({{site.repo.engine}}/pull/12980) Made _printDebug only happen on debug builds of the engine for now. +[12980]({{site.repo.engine}}pull/12980) Made _printDebug only happen on debug builds of the engine for now. -[12982]({{site.repo.engine}}/pull/12982) Color matrix doc +[12982]({{site.repo.engine}}pull/12982) Color matrix doc -[12986]({{site.repo.engine}}/pull/12986) Prevent default when Tab is clicked +[12986]({{site.repo.engine}}pull/12986) Prevent default when Tab is clicked -[12988]({{site.repo.engine}}/pull/12988) Use the standard gen_snapshot target unless the platform requires host_targeting_host +[12988]({{site.repo.engine}}pull/12988) Use the standard gen_snapshot target unless the platform requires host_targeting_host -[12989]({{site.repo.engine}}/pull/12989) Unpublicize kDoNotResizeDimension +[12989]({{site.repo.engine}}pull/12989) Unpublicize kDoNotResizeDimension -[12991]({{site.repo.engine}}/pull/12991) Compile sanitizer suppressions list and file bugs as necessary. +[12991]({{site.repo.engine}}pull/12991) Compile sanitizer suppressions list and file bugs as necessary. -[12999]({{site.repo.engine}}/pull/12999) Started setting our debug background task id to invalid +[12999]({{site.repo.engine}}pull/12999) Started setting our debug background task id to invalid -[13001]({{site.repo.engine}}/pull/13001) Missing link flag +[13001]({{site.repo.engine}}pull/13001) Missing link flag -[13004]({{site.repo.engine}}/pull/13004) Allow embedders to disable causal async stacks in the Dart VM +[13004]({{site.repo.engine}}pull/13004) Allow embedders to disable causal async stacks in the Dart VM -[13005]({{site.repo.engine}}/pull/13005) Auto-formatter fixes for [BUILD.gn](http://build.gn/) files +[13005]({{site.repo.engine}}pull/13005) Auto-formatter fixes for [BUILD.gn](http://build.gn/) files -[13008]({{site.repo.engine}}/pull/13008) Integration with more of Skia's SkShaper/SkParagraph APIs +[13008]({{site.repo.engine}}pull/13008) Integration with more of Skia's SkShaper/SkParagraph APIs -[13009]({{site.repo.engine}}/pull/13009) Fixing Link Semantics Typo +[13009]({{site.repo.engine}}pull/13009) Fixing Link Semantics Typo -[13015]({{site.repo.engine}}/pull/13015) Fire PlatformViewController FlutterView callbacks +[13015]({{site.repo.engine}}pull/13015) Fire PlatformViewController FlutterView callbacks -[13042]({{site.repo.engine}}/pull/13042) Add "felt clean" command +[13042]({{site.repo.engine}}pull/13042) Add "felt clean" command -[13043]({{site.repo.engine}}/pull/13043) Add a task runner for the Win32 embedding +[13043]({{site.repo.engine}}pull/13043) Add a task runner for the Win32 embedding -[13044]({{site.repo.engine}}/pull/13044) Support keyboard types on mobile browsers +[13044]({{site.repo.engine}}pull/13044) Support keyboard types on mobile browsers -[13047]({{site.repo.engine}}/pull/13047) Allow embedders to specify arbitrary data to the isolate on launch. +[13047]({{site.repo.engine}}pull/13047) Allow embedders to specify arbitrary data to the isolate on launch. -[13049]({{site.repo.engine}}/pull/13049) Ignore thread leaks from Dart VM in tsan instrumented builds. +[13049]({{site.repo.engine}}pull/13049) Ignore thread leaks from Dart VM in tsan instrumented builds. -[13053]({{site.repo.engine}}/pull/13053) Set the Cirrus badge to only display status of the master branch. +[13053]({{site.repo.engine}}pull/13053) Set the Cirrus badge to only display status of the master branch. -[13056]({{site.repo.engine}}/pull/13056) Put Metal renderer selection behind runtime flag and plist opt-in. +[13056]({{site.repo.engine}}pull/13056) Put Metal renderer selection behind runtime flag and plist opt-in. -[13071]({{site.repo.engine}}/pull/13071) [dart_aot_runner] Add support for generating dart_aot snapshots +[13071]({{site.repo.engine}}pull/13071) [dart_aot_runner] Add support for generating dart_aot snapshots -[13074]({{site.repo.engine}}/pull/13074) [dart_aot_runner] Add rules to generate dart_aot binaries +[13074]({{site.repo.engine}}pull/13074) [dart_aot_runner] Add rules to generate dart_aot binaries -[13082]({{site.repo.engine}}/pull/13082) java imports/style +[13082]({{site.repo.engine}}pull/13082) java imports/style -[13085]({{site.repo.engine}}/pull/13085) Print more output when gen_package fails +[13085]({{site.repo.engine}}pull/13085) Print more output when gen_package fails -[13086]({{site.repo.engine}}/pull/13086) Gen package output corrected +[13086]({{site.repo.engine}}pull/13086) Gen package output corrected -[13088]({{site.repo.engine}}/pull/13088) felt: use rest args for specifying test targets +[13088]({{site.repo.engine}}pull/13088) felt: use rest args for specifying test targets -[13089]({{site.repo.engine}}/pull/13089) cleanup gen_package.py +[13089]({{site.repo.engine}}pull/13089) cleanup gen_package.py -[13090]({{site.repo.engine}}/pull/13090) Snapshot the felt tool for faster start-up +[13090]({{site.repo.engine}}pull/13090) Snapshot the felt tool for faster start-up -[13091]({{site.repo.engine}}/pull/13091) Remove persistent cache unittest timeout +[13091]({{site.repo.engine}}pull/13091) Remove persistent cache unittest timeout -[13094]({{site.repo.engine}}/pull/13094) Integrate more SkParagraph builder patches +[13094]({{site.repo.engine}}pull/13094) Integrate more SkParagraph builder patches -[13096]({{site.repo.engine}}/pull/13096) [dart_aot_runner] Use the host_toolchain to build kernels +[13096]({{site.repo.engine}}pull/13096) [dart_aot_runner] Use the host_toolchain to build kernels -[13097]({{site.repo.engine}}/pull/13097) Update felt README +[13097]({{site.repo.engine}}pull/13097) Update felt README -[13101]({{site.repo.engine}}/pull/13101) [dart_aot_runner] Generate vmservice aotsnapshots +[13101]({{site.repo.engine}}pull/13101) [dart_aot_runner] Generate vmservice aotsnapshots -[13103]({{site.repo.engine}}/pull/13103) [dart_aot_runner] Complete the port of dart_aot_runner +[13103]({{site.repo.engine}}pull/13103) [dart_aot_runner] Complete the port of dart_aot_runner -[13121]({{site.repo.engine}}/pull/13121) Change IO thread shader cache strategy +[13121]({{site.repo.engine}}pull/13121) Change IO thread shader cache strategy -[13122]({{site.repo.engine}}/pull/13122) refactoring chrome_installer +[13122]({{site.repo.engine}}pull/13122) refactoring chrome_installer -[13123]({{site.repo.engine}}/pull/13123) Upgrades the ICU version to 64.2 +[13123]({{site.repo.engine}}pull/13123) Upgrades the ICU version to 64.2 -[13124]({{site.repo.engine}}/pull/13124) Allow embedders to specify a render task runner description. +[13124]({{site.repo.engine}}pull/13124) Allow embedders to specify a render task runner description. -[13125]({{site.repo.engine}}/pull/13125) add the dart:__interceptors library to the dart sdk +[13125]({{site.repo.engine}}pull/13125) add the dart:__interceptors library to the dart sdk -[13126]({{site.repo.engine}}/pull/13126) [frontend_server] Include bytecode generation in the training run. +[13126]({{site.repo.engine}}pull/13126) [frontend_server] Include bytecode generation in the training run. -[13143]({{site.repo.engine}}/pull/13143) Add flutter_tester binary to the CIPD package +[13143]({{site.repo.engine}}pull/13143) Add flutter_tester binary to the CIPD package -[13144]({{site.repo.engine}}/pull/13144) Document //flutter/runtime/dart_vm +[13144]({{site.repo.engine}}pull/13144) Document //flutter/runtime/dart_vm -[13151]({{site.repo.engine}}/pull/13151) Remove incomplete static thread safety annotations. +[13151]({{site.repo.engine}}pull/13151) Remove incomplete static thread safety annotations. -[13153]({{site.repo.engine}}/pull/13153) Make the Dart isolate constructor private. +[13153]({{site.repo.engine}}pull/13153) Make the Dart isolate constructor private. -[13154]({{site.repo.engine}}/pull/13154) Fix an output file path for the frontend server package_incremental script +[13154]({{site.repo.engine}}pull/13154) Fix an output file path for the frontend server package_incremental script -[13157]({{site.repo.engine}}/pull/13157) Fix type error in SkVertices +[13157]({{site.repo.engine}}pull/13157) Fix type error in SkVertices -[13159]({{site.repo.engine}}/pull/13159) Move surface-based SceneBuilder implementation under surface/ +[13159]({{site.repo.engine}}pull/13159) Move surface-based SceneBuilder implementation under surface/ -[13162]({{site.repo.engine}}/pull/13162) Document //flutter/runtime/dart_isolate.h +[13162]({{site.repo.engine}}pull/13162) Document //flutter/runtime/dart_isolate.h -[13175]({{site.repo.engine}}/pull/13175) Remove redundant call to updateEditingState in sendKeyEvent +[13175]({{site.repo.engine}}pull/13175) Remove redundant call to updateEditingState in sendKeyEvent -[13176]({{site.repo.engine}}/pull/13176) Add repeatCount to FlutterKeyEvent +[13176]({{site.repo.engine}}pull/13176) Add repeatCount to FlutterKeyEvent -[13177]({{site.repo.engine}}/pull/13177) Update compiler to Clang 10. +[13177]({{site.repo.engine}}pull/13177) Update compiler to Clang 10. -[13182]({{site.repo.engine}}/pull/13182) If we get a 'down' event, add that device to the active devices. +[13182]({{site.repo.engine}}pull/13182) If we get a 'down' event, add that device to the active devices. -[13185]({{site.repo.engine}}/pull/13185) Adding firefox_installer.dart +[13185]({{site.repo.engine}}pull/13185) Adding firefox_installer.dart -[13192]({{site.repo.engine}}/pull/13192) Use window.devicePixelRatio in the CanvasKit backend +[13192]({{site.repo.engine}}pull/13192) Use window.devicePixelRatio in the CanvasKit backend -[13193]({{site.repo.engine}}/pull/13193) Custom compositor layers must take into account the device pixel ratio. +[13193]({{site.repo.engine}}pull/13193) Custom compositor layers must take into account the device pixel ratio. -[13196]({{site.repo.engine}}/pull/13196) Document //flutter/runtime/dart_snapshot.h +[13196]({{site.repo.engine}}pull/13196) Document //flutter/runtime/dart_snapshot.h -[13207]({{site.repo.engine}}/pull/13207) Wrap the text in text editing to fix selections. +[13207]({{site.repo.engine}}pull/13207) Wrap the text in text editing to fix selections. -[13209]({{site.repo.engine}}/pull/13209) Preserve stdout colors of subprocesses run by felt +[13209]({{site.repo.engine}}pull/13209) Preserve stdout colors of subprocesses run by felt -[13212]({{site.repo.engine}}/pull/13212) Add trace events around custom compositor callbacks. +[13212]({{site.repo.engine}}pull/13212) Add trace events around custom compositor callbacks. -[13218]({{site.repo.engine}}/pull/13218) Specify a human readable reason for an error from the embedder API. +[13218]({{site.repo.engine}}pull/13218) Specify a human readable reason for an error from the embedder API. -[13232]({{site.repo.engine}}/pull/13232) Avoid dereferencing IO manager weak pointers on the UI thread +[13232]({{site.repo.engine}}pull/13232) Avoid dereferencing IO manager weak pointers on the UI thread -[13237]({{site.repo.engine}}/pull/13237) Do not attempt to drain the SkiaUnrefQueue in the destructor +[13237]({{site.repo.engine}}pull/13237) Do not attempt to drain the SkiaUnrefQueue in the destructor -[13238]({{site.repo.engine}}/pull/13238) Allow embedders to update preferrred locales. +[13238]({{site.repo.engine}}pull/13238) Allow embedders to update preferrred locales. -[13239]({{site.repo.engine}}/pull/13239) Hold a reference to the Skia unref queue in UIDartState +[13239]({{site.repo.engine}}pull/13239) Hold a reference to the Skia unref queue in UIDartState -[13240]({{site.repo.engine}}/pull/13240) Update CanvasKit to 0.7.0 and flesh out painting +[13240]({{site.repo.engine}}pull/13240) Update CanvasKit to 0.7.0 and flesh out painting -[13241]({{site.repo.engine}}/pull/13241) Ignore *.obj files when gathering licenses +[13241]({{site.repo.engine}}pull/13241) Ignore *.obj files when gathering licenses -[13242]({{site.repo.engine}}/pull/13242) Update harfbuzz to 2.6.2, Roll buildroot to a518e +[13242]({{site.repo.engine}}pull/13242) Update harfbuzz to 2.6.2, Roll buildroot to a518e -[13255]({{site.repo.engine}}/pull/13255) Fix NPE in accessibility bridge +[13255]({{site.repo.engine}}pull/13255) Fix NPE in accessibility bridge -[13261]({{site.repo.engine}}/pull/13261) Updated license script to ignore testdata directories +[13261]({{site.repo.engine}}pull/13261) Updated license script to ignore testdata directories -[13265]({{site.repo.engine}}/pull/13265) Ensure we call into Engine from the UI taskrunner in Shell::EngineHasLivePorts() +[13265]({{site.repo.engine}}pull/13265) Ensure we call into Engine from the UI taskrunner in Shell::EngineHasLivePorts() -[13269]({{site.repo.engine}}/pull/13269) Send flag modified events to the framework +[13269]({{site.repo.engine}}pull/13269) Send flag modified events to the framework -[13270]({{site.repo.engine}}/pull/13270) Add recipe changelog +[13270]({{site.repo.engine}}pull/13270) Add recipe changelog -[13274]({{site.repo.engine}}/pull/13274) Fix decode feature detection in HtmlCodec +[13274]({{site.repo.engine}}pull/13274) Fix decode feature detection in HtmlCodec -[13275]({{site.repo.engine}}/pull/13275) Flesh out the CanvasKit backend some more +[13275]({{site.repo.engine}}pull/13275) Flesh out the CanvasKit backend some more -[13292]({{site.repo.engine}}/pull/13292) Disable flaky test ShellTest_ReportTimingsIsCalled. +[13292]({{site.repo.engine}}pull/13292) Disable flaky test ShellTest_ReportTimingsIsCalled. -[13295]({{site.repo.engine}}/pull/13295) Avoid accessing the Cocoa view on the GPU or IO task runners. +[13295]({{site.repo.engine}}pull/13295) Avoid accessing the Cocoa view on the GPU or IO task runners. -[13311]({{site.repo.engine}}/pull/13311) [recipe] Upload opt flutter_tester +[13311]({{site.repo.engine}}pull/13311) [recipe] Upload opt flutter_tester -[13314]({{site.repo.engine}}/pull/13314) Guarding EAGLContext used by Flutter +[13314]({{site.repo.engine}}pull/13314) Guarding EAGLContext used by Flutter -[13319]({{site.repo.engine}}/pull/13319) Add FlutterEngineRunsAOTCompiledDartCode to the embedder API. +[13319]({{site.repo.engine}}pull/13319) Add FlutterEngineRunsAOTCompiledDartCode to the embedder API. -[13321]({{site.repo.engine}}/pull/13321) Pass LinearTextFlag to SkFont - iOS13 letter spacing +[13321]({{site.repo.engine}}pull/13321) Pass LinearTextFlag to SkFont - iOS13 letter spacing -[13337]({{site.repo.engine}}/pull/13337) Bump dart/language_model to 9fJQZ0TrnAGQKrEtuL3-AXbUfPzYxqpN_OBHr9P4hE4C +[13337]({{site.repo.engine}}pull/13337) Bump dart/language_model to 9fJQZ0TrnAGQKrEtuL3-AXbUfPzYxqpN_OBHr9P4hE4C -[13342]({{site.repo.engine}}/pull/13342) Intercept SystemSound.play platform message before it's sent. +[13342]({{site.repo.engine}}pull/13342) Intercept SystemSound.play platform message before it's sent. -[13345]({{site.repo.engine}}/pull/13345) Expose platform view ID on embedder semantics node +[13345]({{site.repo.engine}}pull/13345) Expose platform view ID on embedder semantics node -[13360]({{site.repo.engine}}/pull/13360) Turn on RasterCache based on view hierarchy +[13360]({{site.repo.engine}}pull/13360) Turn on RasterCache based on view hierarchy -[13361]({{site.repo.engine}}/pull/13361) Expand on CanvasKit backend more +[13361]({{site.repo.engine}}pull/13361) Expand on CanvasKit backend more -[13364]({{site.repo.engine}}/pull/13364) [flutter_runner] Remove the checks for libdart profiler symbols +[13364]({{site.repo.engine}}pull/13364) [flutter_runner] Remove the checks for libdart profiler symbols -[13367]({{site.repo.engine}}/pull/13367) Delay metal drawable acquisition till frame submission. +[13367]({{site.repo.engine}}pull/13367) Delay metal drawable acquisition till frame submission. -[13391]({{site.repo.engine}}/pull/13391) Implement basic Picture.toImage via BitmapCanvas +[13391]({{site.repo.engine}}pull/13391) Implement basic Picture.toImage via BitmapCanvas -[13395]({{site.repo.engine}}/pull/13395) fix fml_unittes is not run during presubmit +[13395]({{site.repo.engine}}pull/13395) fix fml_unittes is not run during presubmit -[13397]({{site.repo.engine}}/pull/13397) [flutter_runner] Don't build far files twice +[13397]({{site.repo.engine}}pull/13397) [flutter_runner] Don't build far files twice -[13401]({{site.repo.engine}}/pull/13401) Reformat [BUILD.gn](http://build.gn/) files to comply with the format checker presubmit script +[13401]({{site.repo.engine}}pull/13401) Reformat [BUILD.gn](http://build.gn/) files to comply with the format checker presubmit script -[13405]({{site.repo.engine}}/pull/13405) Make sure root surface transformations survive resetting the matrix directly in Flow. +[13405]({{site.repo.engine}}pull/13405) Make sure root surface transformations survive resetting the matrix directly in Flow. -[13406]({{site.repo.engine}}/pull/13406) Fix the dry run mode of the GN format checker script +[13406]({{site.repo.engine}}pull/13406) Fix the dry run mode of the GN format checker script -[13407]({{site.repo.engine}}/pull/13407) Kick luci +[13407]({{site.repo.engine}}pull/13407) Kick luci -[13419]({{site.repo.engine}}/pull/13419) [dart_runner] Common libs need to exist for aot runner +[13419]({{site.repo.engine}}pull/13419) [dart_runner] Common libs need to exist for aot runner -[13424]({{site.repo.engine}}/pull/13424) Add isRunningInRobolectricTest back +[13424]({{site.repo.engine}}pull/13424) Add isRunningInRobolectricTest back -[13440]({{site.repo.engine}}/pull/13440) Switch to Cirrus Dockerfile as CI +[13440]({{site.repo.engine}}pull/13440) Switch to Cirrus Dockerfile as CI -[13444]({{site.repo.engine}}/pull/13444) Remove usage of yaml module from CIPD script +[13444]({{site.repo.engine}}pull/13444) Remove usage of yaml module from CIPD script -[13448]({{site.repo.engine}}/pull/13448) Duplicate the directory fd in fml::VisitFiles +[13448]({{site.repo.engine}}pull/13448) Duplicate the directory fd in fml::VisitFiles -[13451]({{site.repo.engine}}/pull/13451) Fix mDNS for iOS13 +[13451]({{site.repo.engine}}pull/13451) Fix mDNS for iOS13 -[13460]({{site.repo.engine}}/pull/13460) [dart] Makes the intl services available +[13460]({{site.repo.engine}}pull/13460) [dart] Makes the intl services available -[13461]({{site.repo.engine}}/pull/13461) CIPD needs the directory to be relative +[13461]({{site.repo.engine}}pull/13461) CIPD needs the directory to be relative -[13464]({{site.repo.engine}}/pull/13464) [recipe] Upload sky_engine to CIPD +[13464]({{site.repo.engine}}pull/13464) [recipe] Upload sky_engine to CIPD -[13468]({{site.repo.engine}}/pull/13468) Pass the automaticallyRegisterPlugins flag to the FlutterEngine constructor in FlutterActivityTest +[13468]({{site.repo.engine}}pull/13468) Pass the automaticallyRegisterPlugins flag to the FlutterEngine constructor in FlutterActivityTest -[13478]({{site.repo.engine}}/pull/13478) use check_output instead of check_call +[13478]({{site.repo.engine}}pull/13478) use check_output instead of check_call -[13479]({{site.repo.engine}}/pull/13479) Print the output +[13479]({{site.repo.engine}}pull/13479) Print the output -[13630]({{site.repo.engine}}/pull/13630) Fix bug where Enter doesn't add new line in multi-line fields +[13630]({{site.repo.engine}}pull/13630) Fix bug where Enter doesn't add new line in multi-line fields -[13642]({{site.repo.engine}}/pull/13642) Issues/39832 reland +[13642]({{site.repo.engine}}pull/13642) Issues/39832 reland -[13643]({{site.repo.engine}}/pull/13643) Ensure that the CAMetalLayer FBO attachments can be read from. +[13643]({{site.repo.engine}}pull/13643) Ensure that the CAMetalLayer FBO attachments can be read from. -[13649]({{site.repo.engine}}/pull/13649) Add 'Cough' test font and support multiple test fonts. +[13649]({{site.repo.engine}}pull/13649) Add 'Cough' test font and support multiple test fonts. -[13695]({{site.repo.engine}}/pull/13695) Fix Class.forName unchecked call warning +[13695]({{site.repo.engine}}pull/13695) Fix Class.forName unchecked call warning -[13697]({{site.repo.engine}}/pull/13697) Moves pointer event sanitizing to engine. +[13697]({{site.repo.engine}}pull/13697) Moves pointer event sanitizing to engine. -[13708]({{site.repo.engine}}/pull/13708) Ensure that the device pixel ratio is taken into account with window metrics in physical pixels. +[13708]({{site.repo.engine}}pull/13708) Ensure that the device pixel ratio is taken into account with window metrics in physical pixels. -[13710]({{site.repo.engine}}/pull/13710) Fix picture raster cache throttling +[13710]({{site.repo.engine}}pull/13710) Fix picture raster cache throttling -[13711]({{site.repo.engine}}/pull/13711) Imagefilter wrapper object +[13711]({{site.repo.engine}}pull/13711) Imagefilter wrapper object -[13719]({{site.repo.engine}}/pull/13719) Fix NPE in splash screen lookup +[13719]({{site.repo.engine}}pull/13719) Fix NPE in splash screen lookup -[13727]({{site.repo.engine}}/pull/13727) Add line boundary information to LineMetrics. +[13727]({{site.repo.engine}}pull/13727) Add line boundary information to LineMetrics. -[13728]({{site.repo.engine}}/pull/13728) Prefer SchedulerBinding.addTimingsCallback +[13728]({{site.repo.engine}}pull/13728) Prefer SchedulerBinding.addTimingsCallback -[13731]({{site.repo.engine}}/pull/13731) Expose the platform view mutator stack to custom compositors. +[13731]({{site.repo.engine}}pull/13731) Expose the platform view mutator stack to custom compositors. -[13735]({{site.repo.engine}}/pull/13735) Cleanup obsolete --strong option of front-end server +[13735]({{site.repo.engine}}pull/13735) Cleanup obsolete --strong option of front-end server -[13736]({{site.repo.engine}}/pull/13736) libtxt: pass an RTL bool flag instead of a bidiFlags enum to measureText +[13736]({{site.repo.engine}}pull/13736) libtxt: pass an RTL bool flag instead of a bidiFlags enum to measureText -[13742]({{site.repo.engine}}/pull/13742) Only specify --no-link-platform when not specifying --aot, roll dart-lang sdk +[13742]({{site.repo.engine}}pull/13742) Only specify --no-link-platform when not specifying --aot, roll dart-lang sdk -[13744]({{site.repo.engine}}/pull/13744) Create a new picture recorder even when the embedder supplied render target is recycled. +[13744]({{site.repo.engine}}pull/13744) Create a new picture recorder even when the embedder supplied render target is recycled. -[13747]({{site.repo.engine}}/pull/13747) Move TextRange from the framework to dart:ui. +[13747]({{site.repo.engine}}pull/13747) Move TextRange from the framework to dart:ui. -[13760]({{site.repo.engine}}/pull/13760) Implement Path.computeMetrics in the CanvasKit backend +[13760]({{site.repo.engine}}pull/13760) Implement Path.computeMetrics in the CanvasKit backend -[13762]({{site.repo.engine}}/pull/13762) Turn on RasterCache based on view hierarchy +[13762]({{site.repo.engine}}pull/13762) Turn on RasterCache based on view hierarchy -[13765]({{site.repo.engine}}/pull/13765) Change wordBoundary to take dynamic temporarily +[13765]({{site.repo.engine}}pull/13765) Change wordBoundary to take dynamic temporarily -[13768]({{site.repo.engine}}/pull/13768) Add ImageFilter and BackdropFilter to CanvasKit backend +[13768]({{site.repo.engine}}pull/13768) Add ImageFilter and BackdropFilter to CanvasKit backend -[13772]({{site.repo.engine}}/pull/13772) Move Path and PathMetrics from canvas.dart into their own files. No delta +[13772]({{site.repo.engine}}pull/13772) Move Path and PathMetrics from canvas.dart into their own files. No delta -[13780]({{site.repo.engine}}/pull/13780) Allow passing hot reload debugging flags through +[13780]({{site.repo.engine}}pull/13780) Allow passing hot reload debugging flags through -[13781]({{site.repo.engine}}/pull/13781) Create a WeakPtrFactory for use on the UI thread in VsyncWaiter +[13781]({{site.repo.engine}}pull/13781) Create a WeakPtrFactory for use on the UI thread in VsyncWaiter -[13782]({{site.repo.engine}}/pull/13782) Document the coordinate space of points in FlutterPointerEvent. +[13782]({{site.repo.engine}}pull/13782) Document the coordinate space of points in FlutterPointerEvent. -[13784]({{site.repo.engine}}/pull/13784) Add Helvetica and sans-serif as fallback font families +[13784]({{site.repo.engine}}pull/13784) Add Helvetica and sans-serif as fallback font families -[13785]({{site.repo.engine}}/pull/13785) Fix RendererContextSwitch result check in Rasterizer::MakeRasterSnapshot +[13785]({{site.repo.engine}}pull/13785) Fix RendererContextSwitch result check in Rasterizer::MakeRasterSnapshot -[13786]({{site.repo.engine}}/pull/13786) Take devicePixelRatio into account when drawing shadows +[13786]({{site.repo.engine}}pull/13786) Take devicePixelRatio into account when drawing shadows -[13795]({{site.repo.engine}}/pull/13795) Adds missing comma in EngineParagraphStyle.toString() +[13795]({{site.repo.engine}}pull/13795) Adds missing comma in EngineParagraphStyle.toString() -[13796]({{site.repo.engine}}/pull/13796) implement radial gradient in canvaskit backend +[13796]({{site.repo.engine}}pull/13796) implement radial gradient in canvaskit backend -[13799]({{site.repo.engine}}/pull/13799) Update version of dart/language_model distributed with flutter engine to latest +[13799]({{site.repo.engine}}pull/13799) Update version of dart/language_model distributed with flutter engine to latest -[13803]({{site.repo.engine}}/pull/13803) [build] Make --engine-version flag optional +[13803]({{site.repo.engine}}pull/13803) [build] Make --engine-version flag optional -[13805]({{site.repo.engine}}/pull/13805) Remove extra shadows from ParagraphStyle +[13805]({{site.repo.engine}}pull/13805) Remove extra shadows from ParagraphStyle -[13812]({{site.repo.engine}}/pull/13812) RendererContextSwitch guard flutter's gl context rework. +[13812]({{site.repo.engine}}pull/13812) RendererContextSwitch guard flutter's gl context rework. -[13829]({{site.repo.engine}}/pull/13829) [dart_runner] Initialize logging and tracing +[13829]({{site.repo.engine}}pull/13829) [dart_runner] Initialize logging and tracing -[13832]({{site.repo.engine}}/pull/13832) Remove unused import +[13832]({{site.repo.engine}}pull/13832) Remove unused import -[13848]({{site.repo.engine}}/pull/13848) Use Skia's matchStyleCSS3 to find bundled asset typefaces matching a font style +[13848]({{site.repo.engine}}pull/13848) Use Skia's matchStyleCSS3 to find bundled asset typefaces matching a font style -[13850]({{site.repo.engine}}/pull/13850) Fix test to account for pixel ratio transformations being framework responsibility. +[13850]({{site.repo.engine}}pull/13850) Fix test to account for pixel ratio transformations being framework responsibility. -[13851]({{site.repo.engine}}/pull/13851) Implement the rest of ui.Path methods for CanvasKit +[13851]({{site.repo.engine}}pull/13851) Implement the rest of ui.Path methods for CanvasKit -[13869]({{site.repo.engine}}/pull/13869) Changing test runner and platform to be browser independent +[13869]({{site.repo.engine}}pull/13869) Changing test runner and platform to be browser independent -[13881]({{site.repo.engine}}/pull/13881) Change edge conditions of getLineBoundary +[13881]({{site.repo.engine}}pull/13881) Change edge conditions of getLineBoundary -[13902]({{site.repo.engine}}/pull/13902) Adding opacity -> alpha method to Color class +[13902]({{site.repo.engine}}pull/13902) Adding opacity -> alpha method to Color class -[13903]({{site.repo.engine}}/pull/13903) Implement basic text rendering support in CanvasKit backend +[13903]({{site.repo.engine}}pull/13903) Implement basic text rendering support in CanvasKit backend -[13904]({{site.repo.engine}}/pull/13904) Fix withIn matcher distance function lookup +[13904]({{site.repo.engine}}pull/13904) Fix withIn matcher distance function lookup -[13907]({{site.repo.engine}}/pull/13907) allow ignoring toString, hashCode, and == in api_conform_test +[13907]({{site.repo.engine}}pull/13907) allow ignoring toString, hashCode, and == in api_conform_test -[13908]({{site.repo.engine}}/pull/13908) Made a way to turn off the OpenGL operations on the IO thread for backgrounded apps +[13908]({{site.repo.engine}}pull/13908) Made a way to turn off the OpenGL operations on the IO thread for backgrounded apps -[13918]({{site.repo.engine}}/pull/13918) Add virtual destructor to GPUSurfaceSoftwareDelegate. +[13918]({{site.repo.engine}}pull/13918) Add virtual destructor to GPUSurfaceSoftwareDelegate. -[13926]({{site.repo.engine}}/pull/13926) Add dev_compiler and frontend_server to package uploading rule +[13926]({{site.repo.engine}}pull/13926) Add dev_compiler and frontend_server to package uploading rule -[13934]({{site.repo.engine}}/pull/13934) Ensure we use the base CompositorContext's AcquireFrame method when screenshotting +[13934]({{site.repo.engine}}pull/13934) Ensure we use the base CompositorContext's AcquireFrame method when screenshotting -[13943]({{site.repo.engine}}/pull/13943) Made the thread checker print out the thread names on Apple platforms. +[13943]({{site.repo.engine}}pull/13943) Made the thread checker print out the thread names on Apple platforms. -[13945]({{site.repo.engine}}/pull/13945) Update SwiftShader to 5d1e854. +[13945]({{site.repo.engine}}pull/13945) Update SwiftShader to 5d1e854. -[13962]({{site.repo.engine}}/pull/13962) Added auto-reviewer config file +[13962]({{site.repo.engine}}pull/13962) Added auto-reviewer config file -[13975]({{site.repo.engine}}/pull/13975) Refactor to passing functions by const ref +[13975]({{site.repo.engine}}pull/13975) Refactor to passing functions by const ref -[14082]({{site.repo.engine}}/pull/14082) add pointer data santizing in flutter web engine +[14082]({{site.repo.engine}}pull/14082) add pointer data santizing in flutter web engine ## Plugins @@ -2347,50 +2347,50 @@ and upgrade your plugins accordingly. [Migrating your plugin to the new APIs]: /release/breaking-changes/plugin-api-migration -[1984]({{site.github}}/flutter/plugins/pull/1984) Remove Flutterfire plugins (moved to FirebaseExtended) +[1984]({{site.repo.organization}}plugins/pull/1984) Remove Flutterfire plugins (moved to FirebaseExtended) -[2004]({{site.github}}/flutter/plugins/pull/2004) [cirrus] Use flutter create for all_plugins test +[2004]({{site.repo.organization}}plugins/pull/2004) [cirrus] Use flutter create for all_plugins test -[2009]({{site.github}}/flutter/plugins/pull/2009) Fix unit test for sensors +[2009]({{site.repo.organization}}plugins/pull/2009) Fix unit test for sensors -[2036]({{site.github}}/flutter/plugins/pull/2036) video player version fix +[2036]({{site.repo.organization}}plugins/pull/2036) video player version fix -[2055]({{site.github}}/flutter/plugins/pull/2055) Point opensource site at new location +[2055]({{site.repo.organization}}plugins/pull/2055) Point opensource site at new location -[2084]({{site.github}}/flutter/plugins/pull/2084) [update] local_auth - intl version +[2084]({{site.repo.organization}}plugins/pull/2084) [update] local_auth - intl version -[2112]({{site.github}}/flutter/plugins/pull/2112) Run flutter_plugin_tools format +[2112]({{site.repo.organization}}plugins/pull/2112) Run flutter_plugin_tools format -[2141]({{site.github}}/flutter/plugins/pull/2141) BugFix: formatHint was meant for network streams. +[2141]({{site.repo.organization}}plugins/pull/2141) BugFix: formatHint was meant for network streams. -[2154]({{site.github}}/flutter/plugins/pull/2154) Use stable Flutter image as base +[2154]({{site.repo.organization}}plugins/pull/2154) Use stable Flutter image as base -[2161]({{site.github}}/flutter/plugins/pull/2161) Rename instrumentation_adapter plugin to e2e plugin +[2161]({{site.repo.organization}}plugins/pull/2161) Rename instrumentation_adapter plugin to e2e plugin -[2205]({{site.github}}/flutter/plugins/pull/2205) s/flutter_android_lifecycle/flutter_plugin_android_lifecycle/ +[2205]({{site.repo.organization}}plugins/pull/2205) s/flutter_android_lifecycle/flutter_plugin_android_lifecycle/ -[2230]({{site.github}}/flutter/plugins/pull/2230) Forbid ... implements UrlLauncherPlatform +[2230]({{site.repo.organization}}plugins/pull/2230) Forbid ... implements UrlLauncherPlatform -[2231]({{site.github}}/flutter/plugins/pull/2231) [cleanup] Remove AndroidX warning +[2231]({{site.repo.organization}}plugins/pull/2231) [cleanup] Remove AndroidX warning -[2236]({{site.github}}/flutter/plugins/pull/2236) Use package import to import files inside lib/ directory. +[2236]({{site.repo.organization}}plugins/pull/2236) Use package import to import files inside lib/ directory. -[2250]({{site.github}}/flutter/plugins/pull/2250) Run the publish with the pub version from flutter stable +[2250]({{site.repo.organization}}plugins/pull/2250) Run the publish with the pub version from flutter stable -[2260]({{site.github}}/flutter/plugins/pull/2260) Make setMockInitialValues handle non-prefixed keys +[2260]({{site.repo.organization}}plugins/pull/2260) Make setMockInitialValues handle non-prefixed keys -[2267]({{site.github}}/flutter/plugins/pull/2267) Bump google_maps_flutter pubspec version to match CHANGELOG +[2267]({{site.repo.organization}}plugins/pull/2267) Bump google_maps_flutter pubspec version to match CHANGELOG -[2271]({{site.github}}/flutter/plugins/pull/2271) [infra] Ignore analyzer issues in CI +[2271]({{site.repo.organization}}plugins/pull/2271) [infra] Ignore analyzer issues in CI -[2280]({{site.github}}/flutter/plugins/pull/2280) Add google_sign_in_web plugin. +[2280]({{site.repo.organization}}plugins/pull/2280) Add google_sign_in_web plugin. #### Plugin: Android Alarm Manager We added the ability to get id in the callback in the Android Alarm Manager plugin. -[1985]({{site.github}}/flutter/plugins/pull/1985) [android_alarm_manager] Added ability to get id in the callback +[1985]({{site.repo.organization}}plugins/pull/1985) [android_alarm_manager] Added ability to get id in the callback #### Plugin: Android Intent @@ -2402,26 +2402,26 @@ and upgrading it to the [new plugin API][]. [new plugin API]: /release/breaking-changes/plugin-api-migration -[2000]({{site.github}}/flutter/plugins/pull/2000) [android_intent] add flags option +[2000]({{site.repo.organization}}plugins/pull/2000) [android_intent] add flags option -[2045]({{site.github}}/flutter/plugins/pull/2045) [android_intent] Add action_application_details_settings +[2045]({{site.repo.organization}}plugins/pull/2045) [android_intent] Add action_application_details_settings -[2143]({{site.github}}/flutter/plugins/pull/2143) [android_intent] Migrate to the new embedding +[2143]({{site.repo.organization}}plugins/pull/2143) [android_intent] Migrate to the new embedding -[2188]({{site.github}}/flutter/plugins/pull/2188) [android_intent] Bump the Flutter SDK min version +[2188]({{site.repo.organization}}plugins/pull/2188) [android_intent] Bump the Flutter SDK min version -[2202]({{site.github}}/flutter/plugins/pull/2202) [android_intent] componentName must be provided before resolveActivity is called +[2202]({{site.repo.organization}}plugins/pull/2202) [android_intent] componentName must be provided before resolveActivity is called -[2221]({{site.github}}/flutter/plugins/pull/2221) [android_intent]remove AndroidX constraint +[2221]({{site.repo.organization}}plugins/pull/2221) [android_intent]remove AndroidX constraint -[2268]({{site.github}}/flutter/plugins/pull/2268) [android_intent] Add missing DartDocs +[2268]({{site.repo.organization}}plugins/pull/2268) [android_intent] Add missing DartDocs #### Plugin: Battery General bug fix in the Battery plugin. -[2189]({{site.github}}/flutter/plugins/pull/2189) [battery] relax the example app minimal required Flutter version +[2189]({{site.repo.organization}}plugins/pull/2189) [battery] relax the example app minimal required Flutter version #### Plugin: Camera @@ -2429,66 +2429,66 @@ General bug fix in the Battery plugin. We upgraded the Camera plugin to the [new plugin API][], and made some bug fixes. -[2057]({{site.github}}/flutter/plugins/pull/2057) [Camera] Fixes NullPointerException +[2057]({{site.repo.organization}}plugins/pull/2057) [Camera] Fixes NullPointerException -[2123]({{site.github}}/flutter/plugins/pull/2123) [camera] Fix event type check +[2123]({{site.repo.organization}}plugins/pull/2123) [camera] Fix event type check -[2219]({{site.github}}/flutter/plugins/pull/2219) [camera]remove androidx constraint +[2219]({{site.repo.organization}}plugins/pull/2219) [camera]remove androidx constraint #### Plugin: Connectivity General bug fixes in the Connectivity plugin. -[2212]({{site.github}}/flutter/plugins/pull/2212) [connectivity]remove AndroidX constraint +[2212]({{site.repo.organization}}plugins/pull/2212) [connectivity]remove AndroidX constraint -[2262]({{site.github}}/flutter/plugins/pull/2262) [connectivity] add more documentations, delete example/README +[2262]({{site.repo.organization}}plugins/pull/2262) [connectivity] add more documentations, delete example/README #### Plugin: e2e General bug fixes in the e2e plugin. -[2022]({{site.github}}/flutter/plugins/pull/2022) [instrumentation_adapter] Update README instructions +[2022]({{site.repo.organization}}plugins/pull/2022) [instrumentation_adapter] Update README instructions -[2023]({{site.github}}/flutter/plugins/pull/2023) [instrumentation_adapter] update boilerplate to use @Rule instead of FlutterTest +[2023]({{site.repo.organization}}plugins/pull/2023) [instrumentation_adapter] update boilerplate to use @Rule instead of FlutterTest -[2024]({{site.github}}/flutter/plugins/pull/2024) [instrumentation_adapter] update CODEOWNERS +[2024]({{site.repo.organization}}plugins/pull/2024) [instrumentation_adapter] update CODEOWNERS -[2051]({{site.github}}/flutter/plugins/pull/2051) [instrumentation_adapter] update for release +[2051]({{site.repo.organization}}plugins/pull/2051) [instrumentation_adapter] update for release -[2075]({{site.github}}/flutter/plugins/pull/2075) [instrumentation_adapter] Migrate example to AndroidX +[2075]({{site.repo.organization}}plugins/pull/2075) [instrumentation_adapter] Migrate example to AndroidX -[2178]({{site.github}}/flutter/plugins/pull/2178) [e2e] update README +[2178]({{site.repo.organization}}plugins/pull/2178) [e2e] update README -[2190]({{site.github}}/flutter/plugins/pull/2190) [e2e] Update to support new embedder +[2190]({{site.repo.organization}}plugins/pull/2190) [e2e] Update to support new embedder -[2233]({{site.github}}/flutter/plugins/pull/2233) [e2e] update README +[2233]({{site.repo.organization}}plugins/pull/2233) [e2e] update README #### Plugin: Google Maps Flutter We have made several improvements in the Google Maps plugin including adding support for displaying the traffic layer. -[1702]({{site.github}}/flutter/plugins/pull/1702) [google_maps_flutter]Marker drag event +[1702]({{site.repo.organization}}plugins/pull/1702) [google_maps_flutter]Marker drag event -[1767]({{site.github}}/flutter/plugins/pull/1767) [google_maps_flutter] Adds support for displaying the traffic layer +[1767]({{site.repo.organization}}plugins/pull/1767) [google_maps_flutter] Adds support for displaying the traffic layer -[1784]({{site.github}}/flutter/plugins/pull/1784) [google_maps_flutter] Allow (de-)serialization of CameraPosition +[1784]({{site.repo.organization}}plugins/pull/1784) [google_maps_flutter] Allow (de-)serialization of CameraPosition -[1933]({{site.github}}/flutter/plugins/pull/1933) [google_maps_flutter] Avoid unnecessary redraws +[1933]({{site.repo.organization}}plugins/pull/1933) [google_maps_flutter] Avoid unnecessary redraws -[2053]({{site.github}}/flutter/plugins/pull/2053) [google_maps_flutter] Fix analyzer failures relating to prefer_const_constructors +[2053]({{site.repo.organization}}plugins/pull/2053) [google_maps_flutter] Fix analyzer failures relating to prefer_const_constructors -[2065]({{site.github}}/flutter/plugins/pull/2065) [google_maps_flutter] Prefer const constructors. +[2065]({{site.repo.organization}}plugins/pull/2065) [google_maps_flutter] Prefer const constructors. -[2076]({{site.github}}/flutter/plugins/pull/2076) [google_maps_flutter] Clone cached elements in GoogleMap +[2076]({{site.repo.organization}}plugins/pull/2076) [google_maps_flutter] Clone cached elements in GoogleMap -[2108]({{site.github}}/flutter/plugins/pull/2108) [google_maps_flutter] Add Projection methods to google_maps +[2108]({{site.repo.organization}}plugins/pull/2108) [google_maps_flutter] Add Projection methods to google_maps -[2113]({{site.github}}/flutter/plugins/pull/2113) [google_maps_flutter] Avoid AbstractMethod crash +[2113]({{site.repo.organization}}plugins/pull/2113) [google_maps_flutter] Avoid AbstractMethod crash -[2242]({{site.github}}/flutter/plugins/pull/2242) [google_maps_flutter] Cast error.code to unsigned long to avoid using NSInteger as %ld format warnings. +[2242]({{site.repo.organization}}plugins/pull/2242) [google_maps_flutter] Cast error.code to unsigned long to avoid using NSInteger as %ld format warnings. #### Plugin: Google Sign In @@ -2500,80 +2500,80 @@ For more information, refer to [Federated plugins][]. [Federated plugins]: /packages-and-plugins/developing-packages#federated-plugins -[2059]({{site.github}}/flutter/plugins/pull/2059) [google_sign_in] Fix chained async methods in error handling zones +[2059]({{site.repo.organization}}plugins/pull/2059) [google_sign_in] Fix chained async methods in error handling zones -[2127]({{site.github}}/flutter/plugins/pull/2127) [google_sign_in] Fix deprecated API usage issue by upgrading CocoaPod to 5.0 +[2127]({{site.repo.organization}}plugins/pull/2127) [google_sign_in] Fix deprecated API usage issue by upgrading CocoaPod to 5.0 -[2244]({{site.github}}/flutter/plugins/pull/2244) [google_sign_in] Move plugin to its subdir to allow for federated implementations +[2244]({{site.repo.organization}}plugins/pull/2244) [google_sign_in] Move plugin to its subdir to allow for federated implementations -[2252]({{site.github}}/flutter/plugins/pull/2252) [google_sign_in] Handle new style URLs in GoogleUserCircleAvatar +[2252]({{site.repo.organization}}plugins/pull/2252) [google_sign_in] Handle new style URLs in GoogleUserCircleAvatar -[2266]({{site.github}}/flutter/plugins/pull/2266) [google_sign_in] Port plugin to use the federated Platform Interface +[2266]({{site.repo.organization}}plugins/pull/2266) [google_sign_in] Port plugin to use the federated Platform Interface #### Plugin: Image Picker General bug fixes in the Image Picker plugin. -[2070]({{site.github}}/flutter/plugins/pull/2070) [image_picker] swap width and height when source image orientation is left or right +[2070]({{site.repo.organization}}plugins/pull/2070) [image_picker] swap width and height when source image orientation is left or right -[2293]({{site.github}}/flutter/plugins/pull/2293) [image_picker]fix a crash when a non-image file is picked. +[2293]({{site.repo.organization}}plugins/pull/2293) [image_picker]fix a crash when a non-image file is picked. #### Plugin: In App Purchase General bug fixes in the In App Purchase plugin. -[2014]({{site.github}}/flutter/plugins/pull/2014) [In_App_Purchase] Avoids possible NullPointerException with background registrations. +[2014]({{site.repo.organization}}plugins/pull/2014) [In_App_Purchase] Avoids possible NullPointerException with background registrations. -[2016]({{site.github}}/flutter/plugins/pull/2016) [In_App_Purchase] Improve testability +[2016]({{site.repo.organization}}plugins/pull/2016) [In_App_Purchase] Improve testability -[2027]({{site.github}}/flutter/plugins/pull/2027) [in_app_purchase] Remove skipped driver test +[2027]({{site.repo.organization}}plugins/pull/2027) [in_app_purchase] Remove skipped driver test -[2215]({{site.github}}/flutter/plugins/pull/2215) [in_app_purchase] remove AndroidX constraint +[2215]({{site.repo.organization}}plugins/pull/2215) [in_app_purchase] remove AndroidX constraint #### Plugin: Local Auth General bug fixes in the Local Auth plugin. -[2047]({{site.github}}/flutter/plugins/pull/2047) [local_auth] Avoid user confirmation on face unlock +[2047]({{site.repo.organization}}plugins/pull/2047) [local_auth] Avoid user confirmation on face unlock -[2111]({{site.github}}/flutter/plugins/pull/2111) [local_auth] Api to stop authentication +[2111]({{site.repo.organization}}plugins/pull/2111) [local_auth] Api to stop authentication #### Plugin: Package Info General bug fixes in the Package Info plugin. -[2218]({{site.github}}/flutter/plugins/pull/2218) [package_info]remove AndroidX constraint +[2218]({{site.repo.organization}}plugins/pull/2218) [package_info]remove AndroidX constraint #### Plugin: Path Provider In the Path Provider plugin, we added getApplicationLibraryDirectory, which is contributed by a community member! -[1953]({{site.github}}/flutter/plugins/pull/1953) [path_provider] add getApplicationLibraryDirectory +[1953]({{site.repo.organization}}plugins/pull/1953) [path_provider] add getApplicationLibraryDirectory -[1993]({{site.github}}/flutter/plugins/pull/1993) [pathprovider] Fix fall through bug +[1993]({{site.repo.organization}}plugins/pull/1993) [pathprovider] Fix fall through bug -[2288]({{site.github}}/flutter/plugins/pull/2288) [path_provider] Add missing DartDocs +[2288]({{site.repo.organization}}plugins/pull/2288) [path_provider] Add missing DartDocs #### Plugin: Share Documentation update in the Share plugin. -[2297]({{site.github}}/flutter/plugins/pull/2297) [share] README update +[2297]({{site.repo.organization}}plugins/pull/2297) [share] README update #### Plugin: Shared Preferences General bug fixes in the Shared Preferences plugin. -[2241]({{site.github}}/flutter/plugins/pull/2241) [Shared_preferences]suppress warnings +[2241]({{site.repo.organization}}plugins/pull/2241) [Shared_preferences]suppress warnings -[2296]({{site.github}}/flutter/plugins/pull/2296) [shared_preferences] Add missing DartDoc +[2296]({{site.repo.organization}}plugins/pull/2296) [shared_preferences] Add missing DartDoc #### Plugin: Url launcher @@ -2584,19 +2584,19 @@ we have converted the Url launcher into a federated plugin to help it scale more efficiently to multiple platforms. For more information, refer to [Federated plugins][]. -[2038]({{site.github}}/flutter/plugins/pull/2038) [url_launcher] Removed reference to rootViewController during initialization +[2038]({{site.repo.organization}}plugins/pull/2038) [url_launcher] Removed reference to rootViewController during initialization -[2136]({{site.github}}/flutter/plugins/pull/2136) [url_launcher_web] Fix [README.md](http://readme.md/) pubspec example +[2136]({{site.repo.organization}}plugins/pull/2136) [url_launcher_web] Fix [README.md](http://readme.md/) pubspec example -[2217]({{site.github}}/plugins/pull/2217) [url_launcher] Add url_launcher_platform_interface package +[2217]({{site.github}}plugins/pull/2217) [url_launcher] Add url_launcher_platform_interface package -[2220]({{site.github}}/flutter/plugins/pull/2220) [url_launcher]remove AndroidX constraint +[2220]({{site.repo.organization}}plugins/pull/2220) [url_launcher]remove AndroidX constraint -[2228]({{site.github}}/flutter/plugins/pull/2228) [url_launcher] Use url_launcher_platform_interface to handle calls +[2228]({{site.repo.organization}}plugins/pull/2228) [url_launcher] Use url_launcher_platform_interface to handle calls -[2237]({{site.github}}/flutter/plugins/pull/2237) [url_launcher] Migrate url_launcher_web to the platform interface +[2237]({{site.repo.organization}}plugins/pull/2237) [url_launcher] Migrate url_launcher_web to the platform interface -[2274]({{site.github}}/flutter/plugins/pull/2274) [url_launcher] DartDoc and test improvements +[2274]({{site.repo.organization}}plugins/pull/2274) [url_launcher] DartDoc and test improvements #### Plugin: Video Player @@ -2607,17 +2607,17 @@ we have converted it into a federated plugin to help it scale more efficiently to multiple platforms. For more information, refer to [Federated plugins][]. -[1813]({{site.github}}/flutter/plugins/pull/1813) [video-player] add support for content uris as urls +[1813]({{site.repo.organization}}plugins/pull/1813) [video-player] add support for content uris as urls -[1998]({{site.github}}/flutter/plugins/pull/1998) [video_player] Fix deprecated member use +[1998]({{site.repo.organization}}plugins/pull/1998) [video_player] Fix deprecated member use -[2124]({{site.github}}/flutter/plugins/pull/2124) [video_player] Move [player dispose] to onUnregistered +[2124]({{site.repo.organization}}plugins/pull/2124) [video_player] Move [player dispose] to onUnregistered -[2158]({{site.github}}/flutter/plugins/pull/2158) [video_player] Basic test for VideoPlayerController initialization +[2158]({{site.repo.organization}}plugins/pull/2158) [video_player] Basic test for VideoPlayerController initialization -[2273]({{site.github}}/flutter/plugins/pull/2273) [video_player] Add platform interface +[2273]({{site.repo.organization}}plugins/pull/2273) [video_player] Add platform interface -[2286]({{site.github}}/flutter/plugins/pull/2286) [video_player] Improve DartDocs and test coverage +[2286]({{site.repo.organization}}plugins/pull/2286) [video_player] Improve DartDocs and test coverage #### Plugin: Webview Flutter @@ -2625,9 +2625,9 @@ For more information, refer to [Federated plugins][]. We upgraded the Webview Flutter plugin to the [new plugin API][], and made some bug fixes. -[1996]({{site.github}}/flutter/plugins/pull/1996) [webview_flutter] Allow underscores anywhere for Javascript Channel name +[1996]({{site.repo.organization}}plugins/pull/1996) [webview_flutter] Allow underscores anywhere for Javascript Channel name -[2257]({{site.github}}/flutter/plugins/pull/2257) [webview_flutter] Add async NavigationDelegates +[2257]({{site.repo.organization}}plugins/pull/2257) [webview_flutter] Add async NavigationDelegates ## Tooling @@ -2667,343 +2667,343 @@ In addition to the PRs listed below, please also check out the following release ### Tooling PRs -[37508]({{site.repo.flutter}}/pull/37508) build bundle with assemble +[37508]({{site.repo.flutter}}pull/37508) build bundle with assemble -[37642]({{site.repo.flutter}}/pull/37642) Unit test for build.dart::GenSnapshot +[37642]({{site.repo.flutter}}pull/37642) Unit test for build.dart::GenSnapshot -[37832]({{site.repo.flutter}}/pull/37832) add --exit and --match-host-platform defaults to devicelab runner +[37832]({{site.repo.flutter}}pull/37832) add --exit and --match-host-platform defaults to devicelab runner -[37845]({{site.repo.flutter}}/pull/37845) echo error messages to stderr +[37845]({{site.repo.flutter}}pull/37845) echo error messages to stderr -[38560]({{site.repo.flutter}}/pull/38560) refactor cocoapods validator to detect broken install +[38560]({{site.repo.flutter}}pull/38560) refactor cocoapods validator to detect broken install -[38576]({{site.repo.flutter}}/pull/38576) flutter_tools/version: git log.showSignature=false +[38576]({{site.repo.flutter}}pull/38576) flutter_tools/version: git log.showSignature=false -[38632]({{site.repo.flutter}}/pull/38632) Flutter Plugin Tool supports multi-platform plugin config +[38632]({{site.repo.flutter}}pull/38632) Flutter Plugin Tool supports multi-platform plugin config -[38654]({{site.repo.flutter}}/pull/38654) [flutter_tool] Remove some async file io +[38654]({{site.repo.flutter}}pull/38654) [flutter_tool] Remove some async file io -[38869]({{site.repo.flutter}}/pull/38869) Store file hashes per build configuration. +[38869]({{site.repo.flutter}}pull/38869) Store file hashes per build configuration. -[38894]({{site.repo.flutter}}/pull/38894) [flutter_tool] Move http request close under try-catch +[38894]({{site.repo.flutter}}pull/38894) [flutter_tool] Move http request close under try-catch -[38907]({{site.repo.flutter}}/pull/38907) Throw error when hot reload enters bad state +[38907]({{site.repo.flutter}}pull/38907) Throw error when hot reload enters bad state -[38920]({{site.repo.flutter}}/pull/38920) [flutter_tool] Handle crashes from doctor validators +[38920]({{site.repo.flutter}}pull/38920) [flutter_tool] Handle crashes from doctor validators -[38925]({{site.repo.flutter}}/pull/38925) [flutter_tool] Only send one crash report per run +[38925]({{site.repo.flutter}}pull/38925) [flutter_tool] Only send one crash report per run -[38932]({{site.repo.flutter}}/pull/38932) Add build warning for non-debug desktop builds +[38932]({{site.repo.flutter}}pull/38932) Add build warning for non-debug desktop builds -[39000]({{site.repo.flutter}}/pull/39000) Dont throw StateError when calling assemble +[39000]({{site.repo.flutter}}pull/39000) Dont throw StateError when calling assemble -[39005]({{site.repo.flutter}}/pull/39005) [flutter_tool] Teach crash reporter about HttpException +[39005]({{site.repo.flutter}}pull/39005) [flutter_tool] Teach crash reporter about HttpException -[39013]({{site.repo.flutter}}/pull/39013) Update package versions to latest +[39013]({{site.repo.flutter}}pull/39013) Update package versions to latest -[39052]({{site.repo.flutter}}/pull/39052) Make forward calls run interactively +[39052]({{site.repo.flutter}}pull/39052) Make forward calls run interactively -[39136]({{site.repo.flutter}}/pull/39136) [flutter_tool] Some additional input validation for 'version' +[39136]({{site.repo.flutter}}pull/39136) [flutter_tool] Some additional input validation for 'version' -[39140]({{site.repo.flutter}}/pull/39140) Move commands into their own shard +[39140]({{site.repo.flutter}}pull/39140) Move commands into their own shard -[39147]({{site.repo.flutter}}/pull/39147) Downgrade the AndroidX warning +[39147]({{site.repo.flutter}}pull/39147) Downgrade the AndroidX warning -[39274]({{site.repo.flutter}}/pull/39274) Use output dir instead of specific paths in assemble rules +[39274]({{site.repo.flutter}}pull/39274) Use output dir instead of specific paths in assemble rules -[39280]({{site.repo.flutter}}/pull/39280) [flutter_tool] Use a timeout for xcode showBuildSettings +[39280]({{site.repo.flutter}}pull/39280) [flutter_tool] Use a timeout for xcode showBuildSettings -[39358]({{site.repo.flutter}}/pull/39358) surface errors from build runner +[39358]({{site.repo.flutter}}pull/39358) surface errors from build runner -[39445]({{site.repo.flutter}}/pull/39445) [flutter_tool] Add onError callback to asyncGuard. Use it in Doctor +[39445]({{site.repo.flutter}}pull/39445) [flutter_tool] Add onError callback to asyncGuard. Use it in Doctor -[39524]({{site.repo.flutter}}/pull/39524) Register flutterVersion service in flutter_tools. +[39524]({{site.repo.flutter}}pull/39524) Register flutterVersion service in flutter_tools. -[39530]({{site.repo.flutter}}/pull/39530) keep symbols for profile +[39530]({{site.repo.flutter}}pull/39530) keep symbols for profile -[39541]({{site.repo.flutter}}/pull/39541) Handle single unsupported device +[39541]({{site.repo.flutter}}pull/39541) Handle single unsupported device -[39555]({{site.repo.flutter}}/pull/39555) Use feature flags to control build command visibility +[39555]({{site.repo.flutter}}pull/39555) Use feature flags to control build command visibility -[39558]({{site.repo.flutter}}/pull/39558) Filter error message from skip build script checks +[39558]({{site.repo.flutter}}pull/39558) Filter error message from skip build script checks -[39579]({{site.repo.flutter}}/pull/39579) [flutter_tools] Add a timeout to another showBuildSettings command +[39579]({{site.repo.flutter}}pull/39579) [flutter_tools] Add a timeout to another showBuildSettings command -[39654]({{site.repo.flutter}}/pull/39654) Use persisted build information to automatically clean old outputs +[39654]({{site.repo.flutter}}pull/39654) Use persisted build information to automatically clean old outputs -[39699]({{site.repo.flutter}}/pull/39699) Detecting when installing over MingW's Git Bash, fixing paths +[39699]({{site.repo.flutter}}pull/39699) Detecting when installing over MingW's Git Bash, fixing paths -[39781]({{site.repo.flutter}}/pull/39781) Add lib/generated_plugin_registrant.dart to gitignore +[39781]({{site.repo.flutter}}pull/39781) Add lib/generated_plugin_registrant.dart to gitignore -[39782]({{site.repo.flutter}}/pull/39782) Allow specifying a project for Xcode getInfo +[39782]({{site.repo.flutter}}pull/39782) Allow specifying a project for Xcode getInfo -[39899]({{site.repo.flutter}}/pull/39899) [flutter_tool] process.dart cleanup +[39899]({{site.repo.flutter}}pull/39899) [flutter_tool] process.dart cleanup -[39997]({{site.repo.flutter}}/pull/39997) Remove visibleForTesting annotation; this constructor is used outside… +[39997]({{site.repo.flutter}}pull/39997) Remove visibleForTesting annotation; this constructor is used outside… -[40029]({{site.repo.flutter}}/pull/40029) [BUG] Process all children of intent-filter instead of just the first one to identify default activity +[40029]({{site.repo.flutter}}pull/40029) [BUG] Process all children of intent-filter instead of just the first one to identify default activity -[40131]({{site.repo.flutter}}/pull/40131) ensure we use pub from flutter SDK +[40131]({{site.repo.flutter}}pull/40131) ensure we use pub from flutter SDK -[40159]({{site.repo.flutter}}/pull/40159) [flutter_tool] Kill a timing-out process before trying to drain its streams +[40159]({{site.repo.flutter}}pull/40159) [flutter_tool] Kill a timing-out process before trying to drain its streams -[40171]({{site.repo.flutter}}/pull/40171) Place hot reload artifacts in a temp directory +[40171]({{site.repo.flutter}}pull/40171) Place hot reload artifacts in a temp directory -[40195]({{site.repo.flutter}}/pull/40195) Make Swift plugin template swift-format compliant +[40195]({{site.repo.flutter}}pull/40195) Make Swift plugin template swift-format compliant -[40210]({{site.repo.flutter}}/pull/40210) make sure we launch with dwds +[40210]({{site.repo.flutter}}pull/40210) make sure we launch with dwds -[40259]({{site.repo.flutter}}/pull/40259) remove io and isolate from libraries +[40259]({{site.repo.flutter}}pull/40259) remove io and isolate from libraries -[40366]({{site.repo.flutter}}/pull/40366) Place existing dill into hot reload temp directory to boost initialization time +[40366]({{site.repo.flutter}}pull/40366) Place existing dill into hot reload temp directory to boost initialization time -[40368]({{site.repo.flutter}}/pull/40368) ensure dart2js does not compile unsupported packages +[40368]({{site.repo.flutter}}pull/40368) ensure dart2js does not compile unsupported packages -[40397]({{site.repo.flutter}}/pull/40397) Adds list required components when VS is not installed +[40397]({{site.repo.flutter}}pull/40397) Adds list required components when VS is not installed -[40410]({{site.repo.flutter}}/pull/40410) Remove fluter tool usage of protobuf +[40410]({{site.repo.flutter}}pull/40410) Remove fluter tool usage of protobuf -[40435]({{site.repo.flutter}}/pull/40435) [flutter_tool] Remove the synchronous -showBuildSettings +[40435]({{site.repo.flutter}}pull/40435) [flutter_tool] Remove the synchronous -showBuildSettings -[40472]({{site.repo.flutter}}/pull/40472) Dont kill other processes when starting desktop application +[40472]({{site.repo.flutter}}pull/40472) Dont kill other processes when starting desktop application -[40783]({{site.repo.flutter}}/pull/40783) ensure debug builds are only accessible through run +[40783]({{site.repo.flutter}}pull/40783) ensure debug builds are only accessible through run -[40795]({{site.repo.flutter}}/pull/40795) Update toolchain description to request the latest version +[40795]({{site.repo.flutter}}pull/40795) Update toolchain description to request the latest version -[40968]({{site.repo.flutter}}/pull/40968) add missing trailing commas in flutter_tools +[40968]({{site.repo.flutter}}pull/40968) add missing trailing commas in flutter_tools -[40988]({{site.repo.flutter}}/pull/40988) [flutter_tool] Report rss high watermark in command analytics events +[40988]({{site.repo.flutter}}pull/40988) [flutter_tool] Report rss high watermark in command analytics events -[41224]({{site.repo.flutter}}/pull/41224) fix flutter error report correct local widget +[41224]({{site.repo.flutter}}pull/41224) fix flutter error report correct local widget -[41304]({{site.repo.flutter}}/pull/41304) [flutter_tools] Allows adding multiple signal handlers +[41304]({{site.repo.flutter}}pull/41304) [flutter_tools] Allows adding multiple signal handlers -[41401]({{site.repo.flutter}}/pull/41401) Flutter build bundle without --precompiled should always perform a debug build. +[41401]({{site.repo.flutter}}pull/41401) Flutter build bundle without --precompiled should always perform a debug build. -[41406]({{site.repo.flutter}}/pull/41406) Retry devfs uploads in case they fail. +[41406]({{site.repo.flutter}}pull/41406) Retry devfs uploads in case they fail. -[41424]({{site.repo.flutter}}/pull/41424) Don't update last compiled time when compilation is rejected +[41424]({{site.repo.flutter}}pull/41424) Don't update last compiled time when compilation is rejected -[41447]({{site.repo.flutter}}/pull/41447) Switch to assemble API for dart2js +[41447]({{site.repo.flutter}}pull/41447) Switch to assemble API for dart2js -[41493]({{site.repo.flutter}}/pull/41493) [flutter_tool] Report to analytics when the tool is killed by a signal +[41493]({{site.repo.flutter}}pull/41493) [flutter_tool] Report to analytics when the tool is killed by a signal -[41514]({{site.repo.flutter}}/pull/41514) Ensure we find dart.exe on local engines +[41514]({{site.repo.flutter}}pull/41514) Ensure we find dart.exe on local engines -[41519]({{site.repo.flutter}}/pull/41519) Make desktop stopApp only apply to processes Flutter started +[41519]({{site.repo.flutter}}pull/41519) Make desktop stopApp only apply to processes Flutter started -[41583]({{site.repo.flutter}}/pull/41583) Add debugging option to write vmservice address to file after starting +[41583]({{site.repo.flutter}}pull/41583) Add debugging option to write vmservice address to file after starting -[41610]({{site.repo.flutter}}/pull/41610) track unused inputs in build_runner +[41610]({{site.repo.flutter}}pull/41610) track unused inputs in build_runner -[41621]({{site.repo.flutter}}/pull/41621) change logging in mDNS discovery to verbose-mode only +[41621]({{site.repo.flutter}}pull/41621) change logging in mDNS discovery to verbose-mode only -[41652]({{site.repo.flutter}}/pull/41652) [flutter_tools] Add more info to pub get failure event +[41652]({{site.repo.flutter}}pull/41652) [flutter_tools] Add more info to pub get failure event -[41687]({{site.repo.flutter}}/pull/41687) Use processManager.run() instead of manually capturing streams in test_utils getPackages() +[41687]({{site.repo.flutter}}pull/41687) Use processManager.run() instead of manually capturing streams in test_utils getPackages() -[41697]({{site.repo.flutter}}/pull/41697) Handle missing .packages file in the flutter tool for prebuilt artifacts +[41697]({{site.repo.flutter}}pull/41697) Handle missing .packages file in the flutter tool for prebuilt artifacts -[41735]({{site.repo.flutter}}/pull/41735) handle empty entry in asset list and add more explicit validation +[41735]({{site.repo.flutter}}pull/41735) handle empty entry in asset list and add more explicit validation -[41751]({{site.repo.flutter}}/pull/41751) Add support for downloading x86 JIT release artifact +[41751]({{site.repo.flutter}}pull/41751) Add support for downloading x86 JIT release artifact -[41788]({{site.repo.flutter}}/pull/41788) Reduce log verbosity by removing individual used files +[41788]({{site.repo.flutter}}pull/41788) Reduce log verbosity by removing individual used files -[41832]({{site.repo.flutter}}/pull/41832) Plumb --enable-asserts through to frontend_server invocation in debug… +[41832]({{site.repo.flutter}}pull/41832) Plumb --enable-asserts through to frontend_server invocation in debug… -[41862]({{site.repo.flutter}}/pull/41862) Make output directory a build input +[41862]({{site.repo.flutter}}pull/41862) Make output directory a build input -[41989]({{site.repo.flutter}}/pull/41989) Flutter doctor should require java 1.8+ +[41989]({{site.repo.flutter}}pull/41989) Flutter doctor should require java 1.8+ -[42008]({{site.repo.flutter}}/pull/42008) Restructure ProjectFileInvalidator.findInvalidated a bit +[42008]({{site.repo.flutter}}pull/42008) Restructure ProjectFileInvalidator.findInvalidated a bit -[42016]({{site.repo.flutter}}/pull/42016) [flutter_tool] Re-work analytics events to use labels and values +[42016]({{site.repo.flutter}}pull/42016) [flutter_tool] Re-work analytics events to use labels and values -[42026]({{site.repo.flutter}}/pull/42026) Stop leaking iproxy processes +[42026]({{site.repo.flutter}}pull/42026) Stop leaking iproxy processes -[42028]({{site.repo.flutter}}/pull/42028) Make ProjectFileInvalidator.findInvalidated able to use the async FileStat.stat +[42028]({{site.repo.flutter}}pull/42028) Make ProjectFileInvalidator.findInvalidated able to use the async FileStat.stat -[42187]({{site.repo.flutter}}/pull/42187) Be more verbose when pub fails +[42187]({{site.repo.flutter}}pull/42187) Be more verbose when pub fails -[42209]({{site.repo.flutter}}/pull/42209) Add error logging to flutter generate +[42209]({{site.repo.flutter}}pull/42209) Add error logging to flutter generate -[42243]({{site.repo.flutter}}/pull/42243) Improve trailing whitespace message +[42243]({{site.repo.flutter}}pull/42243) Improve trailing whitespace message -[42252]({{site.repo.flutter}}/pull/42252) catch argument error from Make +[42252]({{site.repo.flutter}}pull/42252) catch argument error from Make -[42353]({{site.repo.flutter}}/pull/42353) Add --cache-sksl flag to drive and run +[42353]({{site.repo.flutter}}pull/42353) Add --cache-sksl flag to drive and run -[42354]({{site.repo.flutter}}/pull/42354) Pass -Ddart.developer.causal_async_stacks=true to frontend_server invocations. +[42354]({{site.repo.flutter}}pull/42354) Pass -Ddart.developer.causal_async_stacks=true to frontend_server invocations. -[42364]({{site.repo.flutter}}/pull/42364) Wrap dwds in async guard, only catch known error types +[42364]({{site.repo.flutter}}pull/42364) Wrap dwds in async guard, only catch known error types -[42373]({{site.repo.flutter}}/pull/42373) Switch build commands to use process utils +[42373]({{site.repo.flutter}}pull/42373) Switch build commands to use process utils -[42376]({{site.repo.flutter}}/pull/42376) Add option to precache unsigned mac binaries. +[42376]({{site.repo.flutter}}pull/42376) Add option to precache unsigned mac binaries. -[42471]({{site.repo.flutter}}/pull/42471) Pass build mode-specific bytecode generation options to frontend_server. +[42471]({{site.repo.flutter}}pull/42471) Pass build mode-specific bytecode generation options to frontend_server. -[42476]({{site.repo.flutter}}/pull/42476) Refactor BuildMode into class, add jit_release configuration +[42476]({{site.repo.flutter}}pull/42476) Refactor BuildMode into class, add jit_release configuration -[42491]({{site.repo.flutter}}/pull/42491) Extra defensive programming for pub modification time assert +[42491]({{site.repo.flutter}}pull/42491) Extra defensive programming for pub modification time assert -[42538]({{site.repo.flutter}}/pull/42538) [flutter_tool] Improve yaml font map validation +[42538]({{site.repo.flutter}}pull/42538) [flutter_tool] Improve yaml font map validation -[42597]({{site.repo.flutter}}/pull/42597) Deflake wildcard asset test +[42597]({{site.repo.flutter}}pull/42597) Deflake wildcard asset test -[42655]({{site.repo.flutter}}/pull/42655) resident_web_runner doesn't close debug connection +[42655]({{site.repo.flutter}}pull/42655) resident_web_runner doesn't close debug connection -[42656]({{site.repo.flutter}}/pull/42656) Catch appInstanceId error +[42656]({{site.repo.flutter}}pull/42656) Catch appInstanceId error -[42668]({{site.repo.flutter}}/pull/42668) dispose devices on cleanupAtFinish() for run_cold.dart +[42668]({{site.repo.flutter}}pull/42668) dispose devices on cleanupAtFinish() for run_cold.dart -[42698]({{site.repo.flutter}}/pull/42698) Ensure we stop the status when browser connection is complete +[42698]({{site.repo.flutter}}pull/42698) Ensure we stop the status when browser connection is complete -[42791]({{site.repo.flutter}}/pull/42791) fix type error in manifest asset bundle +[42791]({{site.repo.flutter}}pull/42791) fix type error in manifest asset bundle -[42813]({{site.repo.flutter}}/pull/42813) Fix NPE in Chrome Device +[42813]({{site.repo.flutter}}pull/42813) Fix NPE in Chrome Device -[42972]({{site.repo.flutter}}/pull/42972) Do not produce an error when encountering a new type in a service response. +[42972]({{site.repo.flutter}}pull/42972) Do not produce an error when encountering a new type in a service response. -[42977]({{site.repo.flutter}}/pull/42977) switch dart2js build to depfile, remove Source.function +[42977]({{site.repo.flutter}}pull/42977) switch dart2js build to depfile, remove Source.function -[43016]({{site.repo.flutter}}/pull/43016) ensure we can disable --track-widget-creation in debug mode +[43016]({{site.repo.flutter}}pull/43016) ensure we can disable --track-widget-creation in debug mode -[43022]({{site.repo.flutter}}/pull/43022) Enable dump-skp-on-shader-compilation in drive +[43022]({{site.repo.flutter}}pull/43022) Enable dump-skp-on-shader-compilation in drive -[43042]({{site.repo.flutter}}/pull/43042) add samsungexynos7570 to list of known physical devices +[43042]({{site.repo.flutter}}pull/43042) add samsungexynos7570 to list of known physical devices -[43080]({{site.repo.flutter}}/pull/43080) Indent Kotlin code with 4 spaces +[43080]({{site.repo.flutter}}pull/43080) Indent Kotlin code with 4 spaces -[43180]({{site.repo.flutter}}/pull/43180) Adding missing break in plugin validation check +[43180]({{site.repo.flutter}}pull/43180) Adding missing break in plugin validation check -[43217]({{site.repo.flutter}}/pull/43217) [flutter_tool] Update analytics policy, send event on disable +[43217]({{site.repo.flutter}}pull/43217) [flutter_tool] Update analytics policy, send event on disable -[43219]({{site.repo.flutter}}/pull/43219) Add devfs for incremental compiler JavaScript bundle +[43219]({{site.repo.flutter}}pull/43219) Add devfs for incremental compiler JavaScript bundle -[43225]({{site.repo.flutter}}/pull/43225) Catch io.StdinException from failure to set stdin echo/line mode +[43225]({{site.repo.flutter}}pull/43225) Catch io.StdinException from failure to set stdin echo/line mode -[43281]({{site.repo.flutter}}/pull/43281) Add compiler configuration to support dartdevc target +[43281]({{site.repo.flutter}}pull/43281) Add compiler configuration to support dartdevc target -[43292]({{site.repo.flutter}}/pull/43292) initial bootstrap script for incremental compiler support +[43292]({{site.repo.flutter}}pull/43292) initial bootstrap script for incremental compiler support -[43381]({{site.repo.flutter}}/pull/43381) [flutter_tool] Use engine flutter_runner prebuilts +[43381]({{site.repo.flutter}}pull/43381) [flutter_tool] Use engine flutter_runner prebuilts -[43390]({{site.repo.flutter}}/pull/43390) catch ChromeDebugException from dwds +[43390]({{site.repo.flutter}}pull/43390) catch ChromeDebugException from dwds -[43401]({{site.repo.flutter}}/pull/43401) Handle permission error during flutter clean +[43401]({{site.repo.flutter}}pull/43401) Handle permission error during flutter clean -[43402]({{site.repo.flutter}}/pull/43402) Handle format error from vswhere +[43402]({{site.repo.flutter}}pull/43402) Handle format error from vswhere -[43403]({{site.repo.flutter}}/pull/43403) Handle version and option skew errors +[43403]({{site.repo.flutter}}pull/43403) Handle version and option skew errors -[43436]({{site.repo.flutter}}/pull/43436) Handle onError callback with optional argument +[43436]({{site.repo.flutter}}pull/43436) Handle onError callback with optional argument -[43448]({{site.repo.flutter}}/pull/43448) Don't html-escape in the plugin registrant templates. +[43448]({{site.repo.flutter}}pull/43448) Don't html-escape in the plugin registrant templates. -[43471]({{site.repo.flutter}}/pull/43471) flip track widget creation on by default +[43471]({{site.repo.flutter}}pull/43471) flip track widget creation on by default -[43544]({{site.repo.flutter}}/pull/43544) Catch AppConnectionException +[43544]({{site.repo.flutter}}pull/43544) Catch AppConnectionException -[43546]({{site.repo.flutter}}/pull/43546) Alias upgrade-packages => update-packages +[43546]({{site.repo.flutter}}pull/43546) Alias upgrade-packages => update-packages -[43577]({{site.repo.flutter}}/pull/43577) set trace to true for desktop builds +[43577]({{site.repo.flutter}}pull/43577) set trace to true for desktop builds -[43586]({{site.repo.flutter}}/pull/43586) Ensure Chrome is closed on tab close +[43586]({{site.repo.flutter}}pull/43586) Ensure Chrome is closed on tab close -[43598]({{site.repo.flutter}}/pull/43598) Catch failed daemon startup error +[43598]({{site.repo.flutter}}pull/43598) Catch failed daemon startup error -[43599]({{site.repo.flutter}}/pull/43599) catch failure to parse FLUTTER_STORAGE_BASE_URL +[43599]({{site.repo.flutter}}pull/43599) catch failure to parse FLUTTER_STORAGE_BASE_URL -[43602]({{site.repo.flutter}}/pull/43602) Don't indefinitely persist file hashes, handle more error conditions +[43602]({{site.repo.flutter}}pull/43602) Don't indefinitely persist file hashes, handle more error conditions -[43667]({{site.repo.flutter}}/pull/43667) Added a null check for ranges in the sourceReport map. +[43667]({{site.repo.flutter}}pull/43667) Added a null check for ranges in the sourceReport map. -[43725]({{site.repo.flutter}}/pull/43725) Add reloadMethod RPC +[43725]({{site.repo.flutter}}pull/43725) Add reloadMethod RPC -[43753]({{site.repo.flutter}}/pull/43753) pass --no-gen-bytecode to aot kernel compiler invocations +[43753]({{site.repo.flutter}}pull/43753) pass --no-gen-bytecode to aot kernel compiler invocations -[43764]({{site.repo.flutter}}/pull/43764) Update create.dart +[43764]({{site.repo.flutter}}pull/43764) Update create.dart -[43767]({{site.repo.flutter}}/pull/43767) check if libimobiledevice executables exist +[43767]({{site.repo.flutter}}pull/43767) check if libimobiledevice executables exist -[43800]({{site.repo.flutter}}/pull/43800) de-flake logger test +[43800]({{site.repo.flutter}}pull/43800) de-flake logger test -[43862]({{site.repo.flutter}}/pull/43862) Ensure target platform is passed is always passed +[43862]({{site.repo.flutter}}pull/43862) Ensure target platform is passed is always passed -[43870]({{site.repo.flutter}}/pull/43870) check for instanceof instead of runtimeType +[43870]({{site.repo.flutter}}pull/43870) check for instanceof instead of runtimeType -[43907]({{site.repo.flutter}}/pull/43907) Serve correct mime type on release dev server +[43907]({{site.repo.flutter}}pull/43907) Serve correct mime type on release dev server -[43908]({{site.repo.flutter}}/pull/43908) remove no-gen-bytecode flag +[43908]({{site.repo.flutter}}pull/43908) remove no-gen-bytecode flag -[43945]({{site.repo.flutter}}/pull/43945) Remove Source.behavior, fix bug in depfile invalidation +[43945]({{site.repo.flutter}}pull/43945) Remove Source.behavior, fix bug in depfile invalidation -[44017]({{site.repo.flutter}}/pull/44017) Asset server fix for sourcemaps +[44017]({{site.repo.flutter}}pull/44017) Asset server fix for sourcemaps -[44027]({{site.repo.flutter}}/pull/44027) Allow specifying device-vmservice-port and host-vmservice-port +[44027]({{site.repo.flutter}}pull/44027) Allow specifying device-vmservice-port and host-vmservice-port -[44032]({{site.repo.flutter}}/pull/44032) Copy chrome preferences to seeded data dir +[44032]({{site.repo.flutter}}pull/44032) Copy chrome preferences to seeded data dir -[44052]({{site.repo.flutter}}/pull/44052) Remove flutter_tool services code +[44052]({{site.repo.flutter}}pull/44052) Remove flutter_tool services code -[44083]({{site.repo.flutter}}/pull/44083) Add --dart-define option +[44083]({{site.repo.flutter}}pull/44083) Add --dart-define option -[44119]({{site.repo.flutter}}/pull/44119) [flutter_tool] --flutter_runner will download the debug symbols +[44119]({{site.repo.flutter}}pull/44119) [flutter_tool] --flutter_runner will download the debug symbols -[44146]({{site.repo.flutter}}/pull/44146) Remove flutter.yaml migration code +[44146]({{site.repo.flutter}}pull/44146) Remove flutter.yaml migration code -[44200]({{site.repo.flutter}}/pull/44200) Make ProjectFileInvalidator injectable +[44200]({{site.repo.flutter}}pull/44200) Make ProjectFileInvalidator injectable -[44221]({{site.repo.flutter}}/pull/44221) Use platform appropriate filepaths +[44221]({{site.repo.flutter}}pull/44221) Use platform appropriate filepaths -[44227]({{site.repo.flutter}}/pull/44227) [flutter_tool] Screenshot command must require device only for _kDeviceType +[44227]({{site.repo.flutter}}pull/44227) [flutter_tool] Screenshot command must require device only for _kDeviceType -[44278]({{site.repo.flutter}}/pull/44278) Do not pass obsolete --strong option to front-end server +[44278]({{site.repo.flutter}}pull/44278) Do not pass obsolete --strong option to front-end server -[44279]({{site.repo.flutter}}/pull/44279) link platform should be true for profile +[44279]({{site.repo.flutter}}pull/44279) link platform should be true for profile -[44360]({{site.repo.flutter}}/pull/44360) [flutter_tool] Stream artifact downloads to files +[44360]({{site.repo.flutter}}pull/44360) [flutter_tool] Stream artifact downloads to files -[44447]({{site.repo.flutter}}/pull/44447) implicit-casts:false on flutter_tools/lib +[44447]({{site.repo.flutter}}pull/44447) implicit-casts:false on flutter_tools/lib -[44481]({{site.repo.flutter}}/pull/44481) Provide specific field to accept depfiles in target class +[44481]({{site.repo.flutter}}pull/44481) Provide specific field to accept depfiles in target class -[44488]({{site.repo.flutter}}/pull/44488) Refactorings to testbed.run and testbed.test +[44488]({{site.repo.flutter}}pull/44488) Refactorings to testbed.run and testbed.test -[44574]({{site.repo.flutter}}/pull/44574) Print a message when modifying settings that you may need to reload IDE/editor +[44574]({{site.repo.flutter}}pull/44574) Print a message when modifying settings that you may need to reload IDE/editor -[44608]({{site.repo.flutter}}/pull/44608) Reduce some direct package:archive usage +[44608]({{site.repo.flutter}}pull/44608) Reduce some direct package:archive usage -[44753]({{site.repo.flutter}}/pull/44753) Always link desktop platforms +[44753]({{site.repo.flutter}}pull/44753) Always link desktop platforms -[44868]({{site.repo.flutter}}/pull/44868) Catch and display version check errors during doctor +[44868]({{site.repo.flutter}}pull/44868) Catch and display version check errors during doctor -[44933]({{site.repo.flutter}}/pull/44933) [flutter_tool] Don't crash when failing to delete downloaded artifacts +[44933]({{site.repo.flutter}}pull/44933) [flutter_tool] Don't crash when failing to delete downloaded artifacts -[44966]({{site.repo.flutter}}/pull/44966) Don't log stack traces to console on build failures +[44966]({{site.repo.flutter}}pull/44966) Don't log stack traces to console on build failures -[45011]({{site.repo.flutter}}/pull/45011) catch IOSDeviceNotFoundError in IOSDevice.startApp() +[45011]({{site.repo.flutter}}pull/45011) catch IOSDeviceNotFoundError in IOSDevice.startApp() -[45153]({{site.repo.flutter}}/pull/45153) implicit-casts:false on flutter_tools +[45153]({{site.repo.flutter}}pull/45153) implicit-casts:false on flutter_tools -[45236]({{site.repo.flutter}}/pull/45236) Improve time to development by initializing frontend_server concurrently with platform build +[45236]({{site.repo.flutter}}pull/45236) Improve time to development by initializing frontend_server concurrently with platform build -[45239]({{site.repo.flutter}}/pull/45239) implicit-casts:false in fuchsia_remote_debug_protocol +[45239]({{site.repo.flutter}}pull/45239) implicit-casts:false in fuchsia_remote_debug_protocol -[45303]({{site.repo.flutter}}/pull/45303) Allow unknown fields in pubspec plugin section +[45303]({{site.repo.flutter}}pull/45303) Allow unknown fields in pubspec plugin section -[45317]({{site.repo.flutter}}/pull/45317) de-null dartDefines in daemon mode +[45317]({{site.repo.flutter}}pull/45317) de-null dartDefines in daemon mode -[45319]({{site.repo.flutter}}/pull/45319) catch parse error from corrupt config +[45319]({{site.repo.flutter}}pull/45319) catch parse error from corrupt config -[45364]({{site.repo.flutter}}/pull/45364) Allow a no-op default_package key for a plugin platform +[45364]({{site.repo.flutter}}pull/45364) Allow a no-op default_package key for a plugin platform -[45407]({{site.repo.flutter}}/pull/45407) Don't crash if the tool cannot delete asset directory +[45407]({{site.repo.flutter}}pull/45407) Don't crash if the tool cannot delete asset directory -[46011]({{site.repo.flutter}}/pull/46011) [flutter_tool] Do not continue with a no-op 'upgrade' +[46011]({{site.repo.flutter}}pull/46011) [flutter_tool] Do not continue with a no-op 'upgrade' ## Full PR List @@ -3011,7 +3011,7 @@ In addition to the PRs listed below, please also check out the following release See the [full list](/release/release-notes/changelogs/changelog-1.12.13) of merged PRs for the 1.12 release. -[breaking change policy on the Flutter wiki]: {{site.repo.flutter}}/wiki/Tree-hygiene#handling-breaking-changes +[breaking change policy on the Flutter wiki]: {{site.repo.flutter}}wiki/Tree-hygiene#handling-breaking-changes [flutter-announce]: https://groups.google.com/g/flutter-announce [GitHub Octoverse report]: https://octoverse.github.com/ [this post from Ian Hickson]: https://groups.google.com/g/flutter-announce/c/Z09a317E21o diff --git a/src/content/release/release-notes/release-notes-3.0.0.md b/src/content/release/release-notes/release-notes-3.0.0.md index 72d243084e..fa4d9b3174 100644 --- a/src/content/release/release-notes/release-notes-3.0.0.md +++ b/src/content/release/release-notes/release-notes-3.0.0.md @@ -8,7 +8,7 @@ This page has release notes for 3.0.0. For information about subsequent bug-fix releases, see [Hotfixes to the Stable Channel][]. -[Hotfixes to the Stable Channel]: {{site.repo.flutter}}/wiki/Hotfixes-to-the-Stable-Channel +[Hotfixes to the Stable Channel]: {{site.repo.flutter}}wiki/Hotfixes-to-the-Stable-Channel ## If you see warnings about bindings @@ -87,7 +87,7 @@ If the error messages do not point to one of your dependencies, and `dart fix --apply` doesn't fix the issue, or if the warnings are fatal (for example, your application refuses to run), please -[file a bug]({{site.repo.flutter}}/issues/new/choose). +[file a bug]({{site.repo.flutter}}issues/new/choose). ## What's Changed diff --git a/src/content/release/release-notes/release-notes-3.10.0.md b/src/content/release/release-notes/release-notes-3.10.0.md index 8b0f30cf47..d0e87b5747 100644 --- a/src/content/release/release-notes/release-notes-3.10.0.md +++ b/src/content/release/release-notes/release-notes-3.10.0.md @@ -7,7 +7,7 @@ This page has release notes for 3.10.0. For information about subsequent bug-fix releases, see [Hotfixes to the Stable Channel][]. -[Hotfixes to the Stable Channel]: {{site.repo.flutter}}/wiki/Hotfixes-to-the-Stable-Channel +[Hotfixes to the Stable Channel]: {{site.repo.flutter}}wiki/Hotfixes-to-the-Stable-Channel ## Framework diff --git a/src/content/release/release-notes/release-notes-3.13.0.md b/src/content/release/release-notes/release-notes-3.13.0.md index ea7cb5abba..3bf7e5d0a9 100644 --- a/src/content/release/release-notes/release-notes-3.13.0.md +++ b/src/content/release/release-notes/release-notes-3.13.0.md @@ -7,7 +7,7 @@ This page has release notes for 3.13.0. For information about subsequent bug-fix releases, see [Hotfixes to the Stable Channel][]. -[Hotfixes to the Stable Channel]: {{site.repo.flutter}}/wiki/Hotfixes-to-the-Stable-Channel +[Hotfixes to the Stable Channel]: {{site.repo.flutter}}wiki/Hotfixes-to-the-Stable-Channel ## Framework diff --git a/src/content/release/release-notes/release-notes-3.16.0.md b/src/content/release/release-notes/release-notes-3.16.0.md index 2056c9284a..015ec38186 100644 --- a/src/content/release/release-notes/release-notes-3.16.0.md +++ b/src/content/release/release-notes/release-notes-3.16.0.md @@ -8,7 +8,7 @@ This page has release notes for 3.16.0. For information about subsequent bug-fix releases, see [Hotfixes to the Stable Channel][]. -[Hotfixes to the Stable Channel]: {{site.repo.flutter}}/wiki/Hotfixes-to-the-Stable-Channel +[Hotfixes to the Stable Channel]: {{site.repo.flutter}}wiki/Hotfixes-to-the-Stable-Channel ## Flutter diff --git a/src/content/release/release-notes/release-notes-3.19.0.md b/src/content/release/release-notes/release-notes-3.19.0.md index 7ca56f1130..227cdc4e05 100644 --- a/src/content/release/release-notes/release-notes-3.19.0.md +++ b/src/content/release/release-notes/release-notes-3.19.0.md @@ -8,7 +8,7 @@ This page has release notes for 3.19.0. For information about subsequent bug-fix releases, see [Hotfixes to the Stable Channel][]. -[Hotfixes to the Stable Channel]: {{site.repo.flutter}}/wiki/Hotfixes-to-the-Stable-Channel +[Hotfixes to the Stable Channel]: {{site.repo.flutter}}wiki/Hotfixes-to-the-Stable-Channel ## Flutter diff --git a/src/content/release/release-notes/release-notes-3.22.0.md b/src/content/release/release-notes/release-notes-3.22.0.md index 706da43001..07d8e312b5 100644 --- a/src/content/release/release-notes/release-notes-3.22.0.md +++ b/src/content/release/release-notes/release-notes-3.22.0.md @@ -8,7 +8,7 @@ This page has release notes for 3.22.0. For information about subsequent bug-fix releases, see [Hotfixes to the Stable Channel][]. -[Hotfixes to the Stable Channel]: {{site.repo.flutter}}/wiki/Hotfixes-to-the-Stable-Channel +[Hotfixes to the Stable Channel]: {{site.repo.flutter}}wiki/Hotfixes-to-the-Stable-Channel ## Flutter diff --git a/src/content/release/release-notes/release-notes-3.3.0.md b/src/content/release/release-notes/release-notes-3.3.0.md index 65a3405ea1..70efaea622 100644 --- a/src/content/release/release-notes/release-notes-3.3.0.md +++ b/src/content/release/release-notes/release-notes-3.3.0.md @@ -7,7 +7,7 @@ This page has release notes for 3.3.0. For information about subsequent bug-fix releases, see [Hotfixes to the Stable Channel][]. -[Hotfixes to the Stable Channel]: {{site.repo.flutter}}/wiki/Hotfixes-to-the-Stable-Channel +[Hotfixes to the Stable Channel]: {{site.repo.flutter}}wiki/Hotfixes-to-the-Stable-Channel ## What's changed diff --git a/src/content/release/release-notes/release-notes-3.7.0.md b/src/content/release/release-notes/release-notes-3.7.0.md index 7079c5173d..536b271d83 100644 --- a/src/content/release/release-notes/release-notes-3.7.0.md +++ b/src/content/release/release-notes/release-notes-3.7.0.md @@ -7,7 +7,7 @@ This page has release notes for 3.7.0. For information about subsequent bug-fix releases, see [Hotfixes to the Stable Channel][]. -[Hotfixes to the Stable Channel]: {{site.repo.flutter}}/wiki/Hotfixes-to-the-Stable-Channel +[Hotfixes to the Stable Channel]: {{site.repo.flutter}}wiki/Hotfixes-to-the-Stable-Channel ## What's changed diff --git a/src/content/release/upgrade.md b/src/content/release/upgrade.md index 889aee9637..7c09dbd24e 100644 --- a/src/content/release/upgrade.md +++ b/src/content/release/upgrade.md @@ -233,19 +233,19 @@ in the `pubspec.yaml` file. To identify out-of-date package dependencies and get advice on how to update them, use the `outdated` command. For details, see -the Dart [`pub outdated` documentation]({{site.dart-site}}/tools/pub/cmd/pub-outdated). +the Dart [`pub outdated` documentation]({{site.dart-site}}tools/pub/cmd/pub-outdated). 如果需要自动判断那些过时了的 package 依赖以及获取更新建议, 现在你可以使用 `outdated` 命令。更多相关的信息, -请参考 Dart 文档中关于 [`pub outdated`](https://dart.cn/tools/pub/cmd/pub-outdated) 的说明。 +请参考 Dart 文档中关于 [`pub outdated`]({{site.dart-site}}tools/pub/cmd/pub-outdated) 的说明。 ```console $ flutter pub outdated ``` [Flutter SDK archive]: /release/archive -[flutter-announce]: {{site.groups}}/forum/#!forum/flutter-announce -[pubspec.yaml]: {{site.dart-site}}/tools/pub/pubspec -[test registry]: {{site.repo.organization}}/tests -[contribute to Flutter]: {{site.repo.flutter}}/blob/main/CONTRIBUTING.md +[flutter-announce]: {{site.groups}}forum/#!forum/flutter-announce +[pubspec.yaml]: {{site.dart-site}}tools/pub/pubspec +[test registry]: {{site.repo.organization}}tests +[contribute to Flutter]: {{site.repo.flutter}}blob/main/CONTRIBUTING.md [migration guides]: /release/breaking-changes diff --git a/src/content/release/whats-new.md b/src/content/release/whats-new.md index 3b07d52a33..f8a5a89a93 100644 --- a/src/content/release/whats-new.md +++ b/src/content/release/whats-new.md @@ -40,12 +40,12 @@ and review the [Dart changelog][]. 你可以加入 [Dart Announce][] 邮件组或查看 [Dart 更新日志][Dart changelog] 了解 Dart 的更新内容。 -[Dart Announce]: {{site.groups}}/a/dartlang.org/g/announce -[Dart changelog]: {{site.github}}/dart-lang/sdk/blob/main/CHANGELOG.md -[flutter-announce]: {{site.groups}}/forum/#!forum/flutter-announce -[Flutter at Google I/O 2024 in 5 minutes]: {{site.youtube-site}}/watch?v=x2WOHonEwqM +[Dart Announce]: {{site.groups}}a/dartlang.org/g/announce +[Dart changelog]: {{site.github}}dart-lang/sdk/blob/main/CHANGELOG.md +[flutter-announce]: {{site.groups}}forum/#!forum/flutter-announce +[Flutter at Google I/O 2024 in 5 minutes]: {{site.youtube-site}}watch?v=x2WOHonEwqM [release notes]: /release/release-notes -[What's new in Flutter]: {{site.youtube-site}}/watch?v=lpnKWK-KEYs +[What's new in Flutter]: {{site.youtube-site}}watch?v=lpnKWK-KEYs ## 14 May 2024: Google I/O 3.22 release @@ -60,9 +60,9 @@ A future (and unspecified) Dart release will allow you to create your own macros. To learn more, check out [dart.dev/go/macros][]. -[3.22-tech]: {{site.flutter-medium}}/whats-new-in-flutter-3-22-fbde6c164fe3 -[3.22-umbrella]: {{site.flutter-medium}}/io24-5e211f708a37 -[Dart 3.4 release]: {{site.medium}}/dartlang/dart-3-4-bd8d23b4462a +[3.22-tech]: {{site.flutter-medium}}whats-new-in-flutter-3-22-fbde6c164fe3 +[3.22-umbrella]: {{site.flutter-medium}}io24-5e211f708a37 +[Dart 3.4 release]: {{site.medium}}dartlang/dart-3-4-bd8d23b4462a [dart.dev/go/macros]: http://dart.dev/go/macros **Docs updated or added since the 3.19 release** @@ -110,7 +110,7 @@ To learn more, check out [dart.dev/go/macros][]. [First week experience of Flutter]: /get-started/fwe [Flutter install]: /get-started/install [Flutter web app initialization]: /platform-integration/web/bootstrapping -[website README]: {{site.github}}/flutter/website/?tab=readme-ov-file#flutter-documentation-website +[website README]: {{site.repo.organization}}website/?tab=readme-ov-file#flutter-documentation-website [Support for WebAssembly (Wasm)]: /platform-integration/web/wasm [Transforming assets at build time]: /ui/assets/asset-transformation [Validate deep links]: /tools/devtools/deep-links @@ -130,9 +130,9 @@ and the [Flutter 3.19 technical blog post][3.19-tech]. You might also check out the [Dart 3.3 release][] blog post. -[3.19-tech]: {{site.flutter-medium}}/whats-new-in-flutter-3-19-58b1aae242d2 -[3.19-umbrella]: {{site.flutter-medium}}/starting-2024-strong-with-flutter-and-dart-cae9845264fe -[Dart 3.3 release]: {{site.medium}}/dartlang/new-in-dart-3-3-extension-types-javascript-interop-and-more-325bf2bf6c13 +[3.19-tech]: {{site.flutter-medium}}whats-new-in-flutter-3-19-58b1aae242d2 +[3.19-umbrella]: {{site.flutter-medium}}starting-2024-strong-with-flutter-and-dart-cae9845264fe +[Dart 3.3 release]: {{site.medium}}dartlang/new-in-dart-3-3-extension-types-javascript-interop-and-more-325bf2bf6c13 **Docs updated or added since the 3.16 release** @@ -145,10 +145,10 @@ You might also check out the [Dart 3.3 release][] blog post. [let us know][] if you have any feedback. * The [Concurrency and isolates][] page has been reworked. -[@TahaTesser]: {{site.github}}/TahaTesser +[@TahaTesser]: {{site.github}}TahaTesser [Concurrency and isolates]: /perf/isolates [Flutter install]: /get-started/install -[let us know]: {{site.github}}/flutter/website/issues/new/choose +[let us know]: {{site.repo.organization}}website/issues/new/choose [migrating from Material 2 to Material 3]: /release/breaking-changes/material-3-migration [Use themes to share colors and font styles]: /cookbook/design/themes @@ -158,8 +158,8 @@ You might also check out the [Dart 3.3 release][] blog post. [Flutter and Dart 2024 Roadmap][]. * Check out [Harness the Gemini API in your Dart and Flutter apps][]. -[Flutter and Dart 2024 Roadmap]: {{site.github}}/flutter/flutter/wiki/Roadmap -[Harness the Gemini API in your Dart and Flutter apps]: {{site.flutter-medium}}/harness-the-gemini-api-in-your-dart-and-flutter-apps-00573e560381 +[Flutter and Dart 2024 Roadmap]: {{site.repo.flutter}}wiki/Roadmap +[Harness the Gemini API in your Dart and Flutter apps]: {{site.flutter-medium}}harness-the-gemini-api-in-your-dart-and-flutter-apps-00573e560381 --- diff --git a/src/content/resources/ads-overview.md b/src/content/resources/ads-overview.md index 3a38f7e882..4161c26c54 100644 --- a/src/content/resources/ads-overview.md +++ b/src/content/resources/ads-overview.md @@ -37,15 +37,15 @@ the following packages support AdMob mediation: * Unity ([gma_mediation_unity][]) [Add ads to your mobile Flutter app or game]: /cookbook/plugins/google-mobile-ads -[Adding AdMob ads to a Flutter app]: {{site.codelabs}}/codelabs/admob-ads-in-flutter#0 -[Adding an AdMob banner and native inline ads to a Flutter app]: {{site.codelabs}}/codelabs/admob-inline-ads-in-flutter#0 -[gma_mediation_applovin]: {{site.pub-pkg}}/gma_mediation_applovin -[gma_mediation_dtexchange]: {{site.pub-pkg}}/gma_mediation_dtexchange -[gma_mediation_inmobi]: {{site.pub-pkg}}/gma_mediation_inmobi -[gma_mediation_ironsource]: {{site.pub-pkg}}/gma_mediation_ironsource -[gma_mediation_liftoffmonetize]: {{site.pub-pkg}}/gma_mediation_liftoffmonetize -[gma_mediation_meta]: {{site.pub-pkg}}/gma_mediation_meta -[gma_mediation_mintegral]: {{site.pub-pkg}}/gma_mediation_mintegral -[gma_mediation_pangle]: {{site.pub-pkg}}/gma_mediation_pangle -[gma_mediation_unity]: {{site.pub-pkg}}/gma_mediation_unity +[Adding AdMob ads to a Flutter app]: {{site.codelabs}}codelabs/admob-ads-in-flutter#0 +[Adding an AdMob banner and native inline ads to a Flutter app]: {{site.codelabs}}codelabs/admob-inline-ads-in-flutter#0 +[gma_mediation_applovin]: {{site.pub-pkg}}gma_mediation_applovin +[gma_mediation_dtexchange]: {{site.pub-pkg}}gma_mediation_dtexchange +[gma_mediation_inmobi]: {{site.pub-pkg}}gma_mediation_inmobi +[gma_mediation_ironsource]: {{site.pub-pkg}}gma_mediation_ironsource +[gma_mediation_liftoffmonetize]: {{site.pub-pkg}}gma_mediation_liftoffmonetize +[gma_mediation_meta]: {{site.pub-pkg}}gma_mediation_meta +[gma_mediation_mintegral]: {{site.pub-pkg}}gma_mediation_mintegral +[gma_mediation_pangle]: {{site.pub-pkg}}gma_mediation_pangle +[gma_mediation_unity]: {{site.pub-pkg}}gma_mediation_unity [mediation]: https://developers.google.com/admob/flutter/mediation diff --git a/src/content/resources/ai-overview.md b/src/content/resources/ai-overview.md index 3161dc878f..2d8b0ffdcf 100644 --- a/src/content/resources/ai-overview.md +++ b/src/content/resources/ai-overview.md @@ -20,7 +20,7 @@ The following resources can help you get started: * [Get started with the Gemini API in Dart or Flutter apps][tutorial] * [Google Generative AI SDK for Dart and Flutter][pkg] -[pkg]: {{site.pub-pkg}}/google_generative_ai +[pkg]: {{site.pub-pkg}}google_generative_ai [tutorial]: https://ai.google.dev/gemini-api/docs/get-started/dart Also, check out the following videos from Google I/O 2024: @@ -29,5 +29,5 @@ Also, check out the following videos from Google I/O 2024: * [Gemini API and Flutter: Practical, AI-driven apps with Google AI tools][gemini-video] -[gemini-video]: {{site.youtube-site}}/watch?v=B1RKFL6ASts -[vertex-video]: {{site.youtube-site}}/watch?v=V8P_S9OLI_I +[gemini-video]: {{site.youtube-site}}watch?v=B1RKFL6ASts +[vertex-video]: {{site.youtube-site}}watch?v=V8P_S9OLI_I diff --git a/src/content/resources/architectural-overview.md b/src/content/resources/architectural-overview.md index f8951be771..4631bb437c 100644 --- a/src/content/resources/architectural-overview.md +++ b/src/content/resources/architectural-overview.md @@ -152,13 +152,13 @@ and compile toolchain. [Impeller]: /perf/impeller The engine is exposed to the Flutter framework through -[`dart:ui`]({{site.repo.engine}}/tree/main/lib/ui), +[`dart:ui`]({{site.repo.engine}}tree/main/lib/ui), which wraps the underlying C++ code in Dart classes. This library exposes the lowest-level primitives, such as classes for driving input, graphics, and text rendering subsystems. 引擎将底层 C++ 代码包装成 Dart 代码,通过 -[`dart:ui`]({{site.github}}/flutter/engine/tree/master/lib/ui) +[`dart:ui`]({{site.repo.engine}}tree/master/lib/ui) 暴露给 Flutter 框架层。 该库暴露了最底层的原语,包括用于驱动输入、图形、和文本渲染的子系统的类。 @@ -171,76 +171,76 @@ a series of layers. Working from the bottom to the top, we have: 该框架提供了以 Dart 语言编写的现代响应式框架。 它包括由一系列层组成的一组丰富的平台,布局和基础库。从下层到上层,依次有: -- Basic **[foundational]({{site.api}}/flutter/foundation/foundation-library.html)** +- Basic **[foundational]({{site.api}}flutter/foundation/foundation-library.html)** classes, and building block services such as - **[animation]({{site.api}}/flutter/animation/animation-library.html), - [painting]({{site.api}}/flutter/painting/painting-library.html), and - [gestures]({{site.api}}/flutter/gestures/gestures-library.html)** that offer + **[animation]({{site.api}}flutter/animation/animation-library.html), + [painting]({{site.api}}flutter/painting/painting-library.html), and + [gestures]({{site.api}}flutter/gestures/gestures-library.html)** that offer commonly used abstractions over the underlying foundation. - 基础的 **[foundational]({{site.api}}/flutter/foundation/foundation-library.html)** - 类及一些基层之上的构建块服务,如 **[animation]({{site.api}}/flutter/animation/animation-library.html)、 - [painting]({{site.api}}/flutter/painting/painting-library.html) 和 - [gestures]({{site.api}}/flutter/gestures/gestures-library.html)**, + 基础的 **[foundational]({{site.api}}flutter/foundation/foundation-library.html)** + 类及一些基层之上的构建块服务,如 **[animation]({{site.api}}flutter/animation/animation-library.html)、 + [painting]({{site.api}}flutter/painting/painting-library.html) 和 + [gestures]({{site.api}}flutter/gestures/gestures-library.html)**, 它们可以提供上层常用的抽象。 - The **[rendering - layer]({{site.api}}/flutter/rendering/rendering-library.html)** provides an + layer]({{site.api}}flutter/rendering/rendering-library.html)** provides an abstraction for dealing with layout. With this layer, you can build a tree of renderable objects. You can manipulate these objects dynamically, with the tree automatically updating the layout to reflect your changes. - **[渲染层]({{site.api}}/flutter/rendering/rendering-library.html)** + **[渲染层]({{site.api}}flutter/rendering/rendering-library.html)** 用于提供操作布局的抽象。有了渲染层,你可以构建一棵可渲染对象的树。 在你动态更新这些对象时,渲染树也会自动根据你的变更来更新布局。 -- The **[widgets layer]({{site.api}}/flutter/widgets/widgets-library.html)** is +- The **[widgets layer]({{site.api}}flutter/widgets/widgets-library.html)** is a composition abstraction. Each render object in the rendering layer has a corresponding class in the widgets layer. In addition, the widgets layer allows you to define combinations of classes that you can reuse. This is the layer at which the reactive programming model is introduced. - **[widget 层]({{site.api}}/flutter/widgets/widgets-library.html)** + **[widget 层]({{site.api}}flutter/widgets/widgets-library.html)** 是一种组合的抽象。每一个渲染层中的渲染对象,都在 widgets 层中有一个对应的类。 此外,widgets 层让你可以自由组合你需要复用的各种类。 响应式编程模型就在该层级中被引入。 - The - **[Material]({{site.api}}/flutter/material/material-library.html)** + **[Material]({{site.api}}flutter/material/material-library.html)** and - **[Cupertino]({{site.api}}/flutter/cupertino/cupertino-library.html)** + **[Cupertino]({{site.api}}flutter/cupertino/cupertino-library.html)** libraries offer comprehensive sets of controls that use the widget layer's composition primitives to implement the Material or iOS design languages. - **[Material]({{site.api}}/flutter/material/material-library.html)** 和 - **[Cupertino]({{site.api}}/flutter/cupertino/cupertino-library.html)** 库 + **[Material]({{site.api}}flutter/material/material-library.html)** 和 + **[Cupertino]({{site.api}}flutter/cupertino/cupertino-library.html)** 库 提供了全面的 widgets 层的原语组合,这套组合分别实现了 Material 和 iOS 设计规范。 The Flutter framework is relatively small; many higher-level features that developers might use are implemented as packages, including platform plugins -like [camera]({{site.pub}}/packages/camera) and -[webview]({{site.pub}}/packages/webview_flutter), as well as platform-agnostic -features like [characters]({{site.pub}}/packages/characters), -[http]({{site.pub}}/packages/http), and -[animations]({{site.pub}}/packages/animations) that build upon the core Dart and +like [camera]({{site.pub-pkg}}camera) and +[webview]({{site.pub-pkg}}webview_flutter), as well as platform-agnostic +features like [characters]({{site.pub-pkg}}characters), +[http]({{site.pub-pkg}}http), and +[animations]({{site.pub-pkg}}animations) that build upon the core Dart and Flutter libraries. Some of these packages come from the broader ecosystem, covering services like [in-app -payments]({{site.pub}}/packages/square_in_app_payments), [Apple -authentication]({{site.pub}}/packages/sign_in_with_apple), and -[animations]({{site.pub}}/packages/lottie). +payments]({{site.pub-pkg}}square_in_app_payments), [Apple +authentication]({{site.pub-pkg}}sign_in_with_apple), and +[animations]({{site.pub-pkg}}lottie). Flutter 框架相对较小,因为一些开发者可能会使用到的更高层级的功能 已经被拆分到不同的软件包中,使用 Dart 和 Flutter 的核心库实现, 其中包括平台插件,例如 -[camera]({{site.pub}}/packages/camera) 和 -[webview]({{site.pub}}/packages/webview_flutter);与平台无关的功能,例如 -[characters]({{site.pub}}/packages/characters)、 -[http]({{site.pub}}/packages/http) 和 -[animations]({{site.pub}}/packages/animations)。 +[camera]({{site.pub-pkg}}camera) 和 +[webview]({{site.pub-pkg}}webview_flutter);与平台无关的功能,例如 +[characters]({{site.pub-pkg}}characters)、 +[http]({{site.pub-pkg}}http) 和 +[animations]({{site.pub-pkg}}animations)。 还有一些软件包来自于更为宽泛的生态系统中,例如 -[应用内支付]({{site.pub}}/packages/square_in_app_payments)、 -[Apple 认证]({{site.pub}}/packages/sign_in_with_apple) 和 -[Lottie 动画]({{site.pub}}/packages/lottie)。 +[应用内支付]({{site.pub-pkg}}square_in_app_payments)、 +[Apple 认证]({{site.pub-pkg}}sign_in_with_apple) 和 +[Lottie 动画]({{site.pub-pkg}}lottie)。 The rest of this overview broadly navigates down the layers, starting with the reactive paradigm of UI development. Then, we describe how widgets are composed @@ -287,9 +287,9 @@ pieces of a Flutter app. 由应用开发者进行管理。 -**Framework** ([source code]({{site.repo.flutter}}/tree/main/packages/flutter/lib)) +**Framework** ([source code]({{site.repo.flutter}}tree/main/packages/flutter/lib)) -**框架**([源代码]({{site.repo.flutter}}/tree/main/packages/flutter/lib)) +**框架**([源代码]({{site.repo.flutter}}tree/main/packages/flutter/lib)) * Provides higher-level API to build high-quality apps (for example, widgets, hit-testing, gesture detection, @@ -302,9 +302,9 @@ pieces of a Flutter app. 将应用的 widget 树构建至一个 Scene 中。 -**Engine** ([source code]({{site.repo.engine}}/tree/main/shell/common)) +**Engine** ([source code]({{site.repo.engine}}tree/main/shell/common)) -**引擎**([源代码]({{site.repo.engine}}/tree/main/shell/common)) +**引擎**([源代码]({{site.repo.engine}}tree/main/shell/common)) * Responsible for rasterizing composited scenes. @@ -324,9 +324,9 @@ pieces of a Flutter app. 使用 **嵌入层 API** 与平台进行整合。 -**Embedder** ([source code]({{site.repo.engine}}/tree/main/shell/platform)) +**Embedder** ([source code]({{site.repo.engine}}tree/main/shell/platform)) -**嵌入层**([源代码]({{site.repo.engine}}/tree/main/shell/platform)) +**嵌入层**([源代码]({{site.repo.engine}}tree/main/shell/platform)) * Coordinates with the underlying operating system for access to services like rendering surfaces, @@ -453,10 +453,10 @@ as often as once per rendered frame). This approach relies on certain characteristics of a language runtime (in particular, fast object instantiation and deletion). Fortunately, [Dart is particularly well suited for this -task]({{site.flutter-medium}}/flutter-dont-fear-the-garbage-collector-d69b3ff1ca30). +task]({{site.flutter-medium}}flutter-dont-fear-the-garbage-collector-d69b3ff1ca30). 这样的实现设计依赖于语言的运行时特征(特别是对象的快速实例化和清除)。 -幸运的是,[Dart 非常适合这份工作](https://medium.com/flutter/flutter-dont-fear-the-garbage-collector-d69b3ff1ca30)。 +幸运的是,[Dart 非常适合这份工作]({{site.flutter-medium}}flutter-dont-fear-the-garbage-collector-d69b3ff1ca30)。 ## Widgets @@ -532,18 +532,18 @@ efficiently updates the user interface. Flutter has its own implementations of each UI control, rather than deferring to those provided by the system: for example, there is a pure [Dart -implementation]({{site.api}}/flutter/cupertino/CupertinoSwitch-class.html) of both the +implementation]({{site.api}}flutter/cupertino/CupertinoSwitch-class.html) of both the [iOS Toggle -control]({{site.apple-dev}}/design/human-interface-guidelines/toggles) -and the [one for]({{site.api}}/flutter/material/Switch-class.html) the -[Android equivalent]({{site.material}}/components/switch). +control]({{site.apple-dev}}design/human-interface-guidelines/toggles) +and the [one for]({{site.api}}flutter/material/Switch-class.html) the +[Android equivalent]({{site.material}}components/switch). Flutter 拥有其自己的 UI 控制实现,而不是由系统自带的方法进行托管: 例如, -[iOS 的 Toggle 控件]({{site.apple-dev}}/design/human-interface-guidelines/toggles) -有一个 [对应的 widget]({{site.api}}/flutter/cupertino/CupertinoSwitch-class.html), -[Android 的选择控件]({{site.material}}/components/switch) -有一个 [对应的 widget]({{site.api}}/flutter/material/Switch-class.html)。 +[iOS 的 Toggle 控件]({{site.apple-dev}}design/human-interface-guidelines/toggles) +有一个 [对应的 widget]({{site.api}}flutter/cupertino/CupertinoSwitch-class.html), +[Android 的选择控件]({{site.material}}components/switch) +有一个 [对应的 widget]({{site.api}}flutter/material/Switch-class.html)。 This approach provides several benefits: @@ -606,7 +606,7 @@ and alignment being implemented as separate components rather than being built into the core. (This also contrasts with more traditional APIs where features like padding are built in to the common core of every layout component.) So, for example, to center a widget, rather than adjusting a notional `Align` property, -you wrap it in a [`Center`]({{site.api}}/flutter/widgets/Center-class.html) +you wrap it in a [`Center`]({{site.api}}flutter/widgets/Center-class.html) widget. 类的层次结构是有意的浅而广,以最大限度地增加可能的组合数量, @@ -615,7 +615,7 @@ widget. (这样的实现也与传统的 API 形成了对比,类似边距这样的功能通常都内置在了每个组件的公共核心内, Flutter 中的 widget 则不同。)因此,如果你需要将一个 widget 居中, 与其调整 `Align` 这样的属性,不如将它包裹在一个 -[`Center`]({{site.api}}/flutter/widgets/Center-class.html) widget 内。 +[`Center`]({{site.api}}flutter/widgets/Center-class.html) widget 内。 There are widgets for padding, alignment, rows, columns, and grids. These layout widgets do not have a visual representation of their own. Instead, their sole @@ -627,15 +627,15 @@ Flutter 中包含了边距、对齐、行、列和网格系列的 widgets。 而只用于控制其他 widgets 的部分布局条件。 Flutter 也包含了以这种组合方法组成的实用型 widgets。 -For example, [`Container`]({{site.api}}/flutter/widgets/Container-class.html), a +For example, [`Container`]({{site.api}}flutter/widgets/Container-class.html), a commonly used widget, is made up of several widgets responsible for layout, painting, positioning, and sizing. Specifically, Container is made up of the -[`LimitedBox`]({{site.api}}/flutter/widgets/LimitedBox-class.html), -[`ConstrainedBox`]({{site.api}}/flutter/widgets/ConstrainedBox-class.html), -[`Align`]({{site.api}}/flutter/widgets/Align-class.html), -[`Padding`]({{site.api}}/flutter/widgets/Padding-class.html), -[`DecoratedBox`]({{site.api}}/flutter/widgets/DecoratedBox-class.html), and -[`Transform`]({{site.api}}/flutter/widgets/Transform-class.html) widgets, as you +[`LimitedBox`]({{site.api}}flutter/widgets/LimitedBox-class.html), +[`ConstrainedBox`]({{site.api}}flutter/widgets/ConstrainedBox-class.html), +[`Align`]({{site.api}}flutter/widgets/Align-class.html), +[`Padding`]({{site.api}}flutter/widgets/Padding-class.html), +[`DecoratedBox`]({{site.api}}flutter/widgets/DecoratedBox-class.html), and +[`Transform`]({{site.api}}flutter/widgets/Transform-class.html) widgets, as you can see by reading its source code. A defining characteristic of Flutter is that you can drill down into the source for any widget and examine it. So, rather than subclassing `Container` to produce a customized effect, you can compose it @@ -643,15 +643,15 @@ and other widgets in novel ways, or just create a new widget using `Container` as inspiration. 例如,一个常用的 widget -[`Container`]({{site.api}}/flutter/widgets/Container-class.html), +[`Container`]({{site.api}}flutter/widgets/Container-class.html), 是由几个 widget 组合而成,包含了布局、绘制、定位和大小的功能。 更具体地说,Container 是由 -[`LimitedBox`]({{site.api}}/flutter/widgets/LimitedBox-class.html)、 -[`ConstrainedBox`]({{site.api}}/flutter/widgets/ConstrainedBox-class.html)、 -[`Align`]({{site.api}}/flutter/widgets/Align-class.html)、 -[`Padding`]({{site.api}}/flutter/widgets/Padding-class.html)、 -[`DecoratedBox`]({{site.api}}/flutter/widgets/DecoratedBox-class.html) 和 -[`Transform`]({{site.api}}/flutter/widgets/Transform-class.html) 组成的, +[`LimitedBox`]({{site.api}}flutter/widgets/LimitedBox-class.html)、 +[`ConstrainedBox`]({{site.api}}flutter/widgets/ConstrainedBox-class.html)、 +[`Align`]({{site.api}}flutter/widgets/Align-class.html)、 +[`Padding`]({{site.api}}flutter/widgets/Padding-class.html)、 +[`DecoratedBox`]({{site.api}}flutter/widgets/DecoratedBox-class.html) 和 +[`Transform`]({{site.api}}flutter/widgets/Transform-class.html) 组成的, 你也可以通过查看源码看到这些组合。 Flutter 有一个典型的特征,即你可以深入到任意一个 widget,查看其源码。 因此,你可以通过同样的方式组合其他的 widgets,也可以参考 `Container` 来创建其他的 widget, @@ -663,31 +663,31 @@ Flutter 有一个典型的特征,即你可以深入到任意一个 widget, As mentioned earlier, you determine the visual representation of a widget by overriding the -[`build()`]({{site.api}}/flutter/widgets/StatelessWidget/build.html) function to +[`build()`]({{site.api}}flutter/widgets/StatelessWidget/build.html) function to return a new element tree. This tree represents the widget's part of the user interface in more concrete terms. For example, a toolbar widget might have a build function that returns a [horizontal -layout]({{site.api}}/flutter/widgets/Row-class.html) of some -[text]({{site.api}}/flutter/widgets/Text-class.html) and -[various]({{site.api}}/flutter/material/IconButton-class.html) -[buttons]({{site.api}}/flutter/material/PopupMenuButton-class.html). As needed, +layout]({{site.api}}flutter/widgets/Row-class.html) of some +[text]({{site.api}}flutter/widgets/Text-class.html) and +[various]({{site.api}}flutter/material/IconButton-class.html) +[buttons]({{site.api}}flutter/material/PopupMenuButton-class.html). As needed, the framework recursively asks each widget to build until the tree is entirely described by [concrete renderable -objects]({{site.api}}/flutter/widgets/RenderObjectWidget-class.html). The +objects]({{site.api}}flutter/widgets/RenderObjectWidget-class.html). The framework then stitches together the renderable objects into a renderable object tree. 先前提到,你可以通过重写 -[`build()`]({{site.api}}/flutter/widgets/StatelessWidget/build.html) +[`build()`]({{site.api}}flutter/widgets/StatelessWidget/build.html) 方法,返回一个新的元素树,来定义视觉展示。 这棵树用更为具体的术语表示了 widget 在 UI 中的部分。 例如,工具栏 widget 的 build 方法可能会返回 -[水平布局]({{site.api}}/flutter/widgets/Row-class.html), -其中可能包含一些 [文字]({{site.api}}/flutter/widgets/Text-class.html), -[各种各样]({{site.api}}/flutter/material/IconButton-class.html) 的 -[按钮]({{site.api}}/flutter/material/PopupMenuButton-class.html)。 +[水平布局]({{site.api}}flutter/widgets/Row-class.html), +其中可能包含一些 [文字]({{site.api}}flutter/widgets/Text-class.html), +[各种各样]({{site.api}}flutter/material/IconButton-class.html) 的 +[按钮]({{site.api}}flutter/material/PopupMenuButton-class.html)。 根据需要,框架会递归请求每个 widget 进行构建,直到整棵树都被 -[具体的可渲染对象]({{site.api}}/flutter/widgets/RenderObjectWidget-class.html) +[具体的可渲染对象]({{site.api}}flutter/widgets/RenderObjectWidget-class.html) 描述为止。 然后,框架会将可渲染的对象缝合在一起,组成可渲染对象树。 @@ -738,20 +738,20 @@ widgets. Many widgets have no mutable state: they don't have any properties that change over time (for example, an icon or a label). These widgets subclass -[`StatelessWidget`]({{site.api}}/flutter/widgets/StatelessWidget-class.html). +[`StatelessWidget`]({{site.api}}flutter/widgets/StatelessWidget-class.html). 大部分 widget 都没有需要变更的状态:它们并不包含随时变化的属性(例如图标或者标签)。 这些 widget 会继承 -[`StatelessWidget`]({{site.api}}/flutter/widgets/StatelessWidget-class.html)。 +[`StatelessWidget`]({{site.api}}flutter/widgets/StatelessWidget-class.html)。 However, if the unique characteristics of a widget need to change based on user interaction or other factors, that widget is _stateful_. For example, if a widget has a counter that increments whenever the user taps a button, then the value of the counter is the state for that widget. When that value changes, the widget needs to be rebuilt to update its part of the UI. These widgets subclass -[`StatefulWidget`]({{site.api}}/flutter/widgets/StatefulWidget-class.html), and +[`StatefulWidget`]({{site.api}}flutter/widgets/StatefulWidget-class.html), and (because the widget itself is immutable) they store mutable state in a separate -class that subclasses [`State`]({{site.api}}/flutter/widgets/State-class.html). +class that subclasses [`State`]({{site.api}}flutter/widgets/State-class.html). `StatefulWidget`s don't have a build method; instead, their user interface is built through their `State` object. @@ -759,19 +759,19 @@ built through their `State` object. 例如,计数器 widget 在用户点击按钮时数字递增,那么计数值就是计数器 widget 的状态。 当值变化时,widget 则需要被重建以更新相关部分的 UI。 这些 widget 会继承 -[`StatefulWidget`]({{site.api}}/flutter/widgets/StatefulWidget-class.html), +[`StatefulWidget`]({{site.api}}flutter/widgets/StatefulWidget-class.html), 并且「可变的」状态会保存在继承 -[`State`]({{site.api}}/flutter/widgets/State-class.html) 的另一个子类中 +[`State`]({{site.api}}flutter/widgets/State-class.html) 的另一个子类中 (因为 widget 本身是不可变的)。 `StatefulWidget` 自身没有 build 方法,而在其对应的 `State` 对象中。 Whenever you mutate a `State` object (for example, by incrementing the counter), -you must call [`setState()`]({{site.api}}/flutter/widgets/State/setState.html) +you must call [`setState()`]({{site.api}}flutter/widgets/State/setState.html) to signal the framework to update the user interface by calling the `State`'s build method again. 每当你更改 `State` 对象时(例如计数增加),你需要调用 -[`setState()`]({{site.api}}/flutter/widgets/State/setState.html) +[`setState()`]({{site.api}}flutter/widgets/State/setState.html) 来告知框架,再次调用 `State` 的构建方法来更新 UI。 Having separate state and widget objects lets other widgets treat both stateless @@ -811,14 +811,14 @@ Widget build(BuildContext context) { As widget trees get deeper, however, passing state information up and down the tree hierarchy becomes cumbersome. So, a third widget type, -[`InheritedWidget`]({{site.api}}/flutter/widgets/InheritedWidget-class.html), +[`InheritedWidget`]({{site.api}}flutter/widgets/InheritedWidget-class.html), provides an easy way to grab data from a shared ancestor. You can use `InheritedWidget` to create a state widget that wraps a common ancestor in the widget tree, as shown in this example: 然而,随着 widget 树层级逐渐加深,依赖树形结构上下传递状态信息会变得十分麻烦。 这时,第三种类型的 widget—— -[`InheritedWidget`]({{site.api}}/flutter/widgets/InheritedWidget-class.html), +[`InheritedWidget`]({{site.api}}flutter/widgets/InheritedWidget-class.html), 提供了一种从共同的祖先节点获取数据的简易方法。 你可以使用 `InheritedWidget` 创建包含状态的 widget, 该 widget 会将一个共同的祖先节点包裹在 widget 树中,如下面的例子所示: @@ -837,28 +837,28 @@ final studentState = StudentState.of(context); The `of(context)` call takes the build context (a handle to the current widget location), and returns [the nearest ancestor in the -tree]({{site.api}}/flutter/widgets/BuildContext/dependOnInheritedWidgetOfExactType.html) +tree]({{site.api}}flutter/widgets/BuildContext/dependOnInheritedWidgetOfExactType.html) that matches the `StudentState` type. `InheritedWidget`s also offer an `updateShouldNotify()` method, which Flutter calls to determine whether a state change should trigger a rebuild of child widgets that use it. 调用 `of(context)` 会根据当前构建的上下文(即当前 widget 位置的句柄), 并返回类型为 `StudentState` 的 -[在树中距离最近的祖先节点]({{site.api}}/flutter/flutter/widgets/BuildContext/dependOnInheritedWidgetOfExactType.html)。 +[在树中距离最近的祖先节点]({{site.api}}flutter/flutter/widgets/BuildContext/dependOnInheritedWidgetOfExactType.html)。 `InheritedWidget` 同时也包含了 `updateShouldNotify()` 方法, Flutter 会调用它来判断依赖了某个状态的 widget 是否需要重建。 Flutter itself uses `InheritedWidget` extensively as part of the framework for shared state, such as the application's _visual theme_, which includes [properties like color and type -styles]({{site.api}}/flutter/material/ThemeData-class.html) that are +styles]({{site.api}}flutter/material/ThemeData-class.html) that are pervasive throughout an application. The `MaterialApp` `build()` method inserts a theme in the tree when it builds, and then deeper in the hierarchy a widget can use the `.of()` method to look up the relevant theme data, for example: `InheritedWidget` 在 Flutter 框架中被大量用于共享状态,例如应用的 **视觉主题**, 包含了应用于整个应用的 -[颜色和字体样式等属性]({{site.api}}/flutter/material/ThemeData-class.html)。 +[颜色和字体样式等属性]({{site.api}}flutter/material/ThemeData-class.html)。 `MaterialApp` 的 `build()` 方法会在构建时在树中插入一个主题, 更深层级的 widget 便可以使用 `.of()` 方法来查找相关的主题数据,例如: @@ -876,17 +876,17 @@ Container( As applications grow, more advanced state management approaches that reduce the ceremony of creating and using stateful widgets become more attractive. Many Flutter apps use utility packages like -[provider]({{site.pub}}/packages/provider), which provides a wrapper around +[provider]({{site.pub-pkg}}provider), which provides a wrapper around `InheritedWidget`. Flutter's layered architecture also enables alternative approaches to implement the transformation of state into UI, such as the -[flutter_hooks]({{site.pub}}/packages/flutter_hooks) package. +[flutter_hooks]({{site.pub-pkg}}flutter_hooks) package. 随着应用程序的不断迭代,更高级的状态管理方法变得更有吸引力, 它们可以减少有状态的 widget 的创建。 -许多 Flutter 应用使用了 [provider]({{site.pub}}/packages/provider) 用于状态管理, +许多 Flutter 应用使用了 [provider]({{site.pub-pkg}}provider) 用于状态管理, 它对 `InheritedWidget` 进行了进一步的包装。 Flutter 的分层架构也允许使用其他实现来替换状态至 UI 的方案,例如 -[flutter_hooks]({{site.pub}}/packages/flutter_hooks)。 +[flutter_hooks]({{site.pub-pkg}}flutter_hooks)。 ## Rendering and layout @@ -1022,7 +1022,7 @@ as necessary, based on its state. As an example, in the preceding code fragment, `Container` has `color` and `child` properties. From looking at the [source -code]({{site.repo.flutter}}/blob/02efffc134ab4ce4ff50a9ddd86c832efdb80462/packages/flutter/lib/src/widgets/container.dart#L401) +code]({{site.repo.flutter}}blob/02efffc134ab4ce4ff50a9ddd86c832efdb80462/packages/flutter/lib/src/widgets/container.dart#L401) for `Container`, you can see that if the color is not null, it inserts a `ColoredBox` representing the color: @@ -1031,7 +1031,7 @@ it inserts a `ColoredBox` representing the color: 在这个过程中,`build()` 方法可能会在必要时,根据状态引入新的 widget。 在上面的例子中,`Container` 的 `color` 和 `child` 就是典型的例子。 我们可以查看 `Container` 的 -[源代码]({{site.repo.flutter}}/blob/02efffc134ab4ce4ff50a9ddd86c832efdb80462/packages/flutter/lib/src/widgets/container.dart#L401), +[源代码]({{site.repo.flutter}}blob/02efffc134ab4ce4ff50a9ddd86c832efdb80462/packages/flutter/lib/src/widgets/container.dart#L401), 你会看到当 `color` 属性不为空时,`ColoredBox` 会被加入用于颜色布局。 ```dart @@ -1133,20 +1133,20 @@ rendered on the screen. 是所有 UI 框架的重点之一。 The base class for every node in the render tree is -[`RenderObject`]({{site.api}}/flutter/rendering/RenderObject-class.html), which +[`RenderObject`]({{site.api}}flutter/rendering/RenderObject-class.html), which defines an abstract model for layout and painting. This is extremely general: it does not commit to a fixed number of dimensions or even a Cartesian coordinate system (demonstrated by [this example of a polar coordinate -system]({{site.dartpad}}/?id=596b1d6331e3b9d7b00420085fab3e27)). Each +system]({{site.dartpad}}?id=596b1d6331e3b9d7b00420085fab3e27)). Each `RenderObject` knows its parent, but knows little about its children other than how to _visit_ them and their constraints. This provides `RenderObject` with sufficient abstraction to be able to handle a variety of use cases. 在渲染树中,每个节点的基类都是 -[`RenderObject`]({{site.api}}/flutter/rendering/RenderObject-class.html), +[`RenderObject`]({{site.api}}flutter/rendering/RenderObject-class.html), 该基类为布局和绘制定义了一个抽象模型。 这是再平凡不过的事情:它并不总是一个固定的大小,甚至不遵循笛卡尔坐标规律 -(根据该 [极坐标系的示例]({{site.dartpad}}/596b1d6331e3b9d7b00420085fab3e27) 所示)。 +(根据该 [极坐标系的示例]({{site.dartpad}}596b1d6331e3b9d7b00420085fab3e27) 所示)。 每一个 `RenderObject` 都了解其父节点的信息, 但对于其子节点,除了如何 **访问** 和获得他们的布局约束,并没有更多的信息。 这样的设计让 `RenderObject` 拥有高效的抽象能力,能够处理各种各样的使用场景。 @@ -1154,22 +1154,22 @@ sufficient abstraction to be able to handle a variety of use cases. During the build phase, Flutter creates or updates an object that inherits from `RenderObject` for each `RenderObjectElement` in the element tree. `RenderObject`s are primitives: -[`RenderParagraph`]({{site.api}}/flutter/rendering/RenderParagraph-class.html) +[`RenderParagraph`]({{site.api}}flutter/rendering/RenderParagraph-class.html) renders text, -[`RenderImage`]({{site.api}}/flutter/rendering/RenderImage-class.html) renders +[`RenderImage`]({{site.api}}flutter/rendering/RenderImage-class.html) renders an image, and -[`RenderTransform`]({{site.api}}/flutter/rendering/RenderTransform-class.html) +[`RenderTransform`]({{site.api}}flutter/rendering/RenderTransform-class.html) applies a transformation before painting its child. 在构建阶段,Flutter 会为 Element 树中的每个 `RenderObjectElement` 创建 或更新其对应的一个从 `RenderObject` 继承的对象。 `RenderObject` 实际上是原语: 渲染文字的 -[`RenderParagraph`]({{site.api}}/flutter/rendering/RenderParagraph-class.html)、 +[`RenderParagraph`]({{site.api}}flutter/rendering/RenderParagraph-class.html)、 渲染图片的 -[`RenderImage`]({{site.api}}/flutter/rendering/RenderImage-class.html) +[`RenderImage`]({{site.api}}flutter/rendering/RenderImage-class.html) 以及在绘制子节点内容前应用变换的 -[`RenderTransform`]({{site.api}}/flutter/rendering/RenderTransform-class.html) +[`RenderTransform`]({{site.api}}flutter/rendering/RenderTransform-class.html) 是更为上层的实现。 ![Differences between the widgets hierarchy and the element and render @@ -1201,11 +1201,11 @@ up](/assets/images/docs/arch-overview/constraints-sizes.png){:width="80%"} At the end of this single walk through the tree, every object has a defined size within its parent's constraints and is ready to be painted by calling the -[`paint()`]({{site.api}}/flutter/rendering/RenderObject/paint.html) +[`paint()`]({{site.api}}flutter/rendering/RenderObject/paint.html) method. 在遍历完一次树后,每个对象都通过父级约束而拥有了明确的大小,随时可以通过调用 -[`paint()`]({{site.api}}/flutter/rendering/RenderObject/paint.html) +[`paint()`]({{site.api}}flutter/rendering/RenderObject/paint.html) 进行渲染。 The box constraint model is very powerful as a way to layout objects in _O(n)_ @@ -1233,12 +1233,12 @@ time: This model works even when a child object needs to know how much space it has available to decide how it will render its content. By using a -[`LayoutBuilder`]({{site.api}}/flutter/widgets/LayoutBuilder-class.html) widget, +[`LayoutBuilder`]({{site.api}}flutter/widgets/LayoutBuilder-class.html) widget, the child object can examine the passed-down constraints and use those to determine how it will use them, for example: 这样的盒子约束模型,同样也适用于子节点对象需要知道有多少可用空间渲染其内容的场景, -通过使用 [`LayoutBuilder`]({{site.api}}/flutter/widgets/LayoutBuilder-class.html) widget, +通过使用 [`LayoutBuilder`]({{site.api}}flutter/widgets/LayoutBuilder-class.html) widget, 子节点可以得到从上层传递下来的约束,并合理利用该约束对象,使用方法如下: @@ -1302,7 +1302,7 @@ itself. The mechanism for obtaining the texture and participating in the app lifecycle of the underlying operating system inevitably varies depending on the unique concerns of that platform. The engine is platform-agnostic, presenting a [stable ABI (Application Binary -Interface)]({{site.repo.engine}}/blob/main/shell/platform/embedder/embedder.h) +Interface)]({{site.repo.engine}}blob/main/shell/platform/embedder/embedder.h) that provides a _platform embedder_ with a way to set up and use Flutter. 我们都知道,Flutter 的界面构建、布局、合成和绘制全都由 Flutter 自己完成, @@ -1320,9 +1320,9 @@ lifecycle, including input gestures (such as mouse, keyboard, touch), window sizing, thread management, and platform messages. Flutter includes platform embedders for Android, iOS, Windows, macOS, and Linux; you can also create a custom platform embedder, as in [this worked -example]({{site.github}}/chinmaygarde/fluttercast) that supports remoting +example]({{site.github}}chinmaygarde/fluttercast) that supports remoting Flutter sessions through a VNC-style framebuffer or [this worked example for -Raspberry Pi]({{site.github}}/ardera/flutter-pi). +Raspberry Pi]({{site.github}}ardera/flutter-pi). 平台嵌入层是用于呈现所有 Flutter 内容的原生系统应用, 它充当着宿主操作系统和 Flutter 之间的粘合剂的角色。 @@ -1332,9 +1332,9 @@ Raspberry Pi]({{site.github}}/ardera/flutter-pi). 窗口大小的变化、线程管理和平台消息的传递。 Flutter 拥有 Android、iOS、Windows、macOS 和 Linux 的平台嵌入层, 当然,开发者可以创建自定义的嵌入层,正如这个 -[可用的例子]({{site.github}}/chinmaygarde/fluttercast) +[可用的例子]({{site.github}}chinmaygarde/fluttercast) 以 VNC 风格的帧缓冲区支持了远程 Flutter,还有 -[支持树莓派运行的例子]{{site.github}}/ardera/flutter-pi)。 +[支持树莓派运行的例子]{{site.github}}ardera/flutter-pi)。 Each platform has its own set of APIs and constraints. Some brief platform-specific notes: @@ -1357,13 +1357,13 @@ platform-specific notes: - On Android, Flutter is, by default, loaded into the embedder as an `Activity`. The view is controlled by a - [`FlutterView`]({{site.api}}/javadoc/io/flutter/embedding/android/FlutterView.html), + [`FlutterView`]({{site.api}}javadoc/io/flutter/embedding/android/FlutterView.html), which renders Flutter content either as a view or a texture, depending on the composition and z-ordering requirements of the Flutter content. 在 Android 上,Flutter 默认作为一个 `Activity` 加载到嵌入层中。 此时视图是通过一个 - [`FlutterView`]({{site.api}}/javadoc/io/flutter/embedding/android/FlutterView.html) + [`FlutterView`]({{site.api}}javadoc/io/flutter/embedding/android/FlutterView.html) 进行控制的,基于 Flutter 内容的合成和 z 排列 (z-ordering) 的要求, 将 Flutter 的内容以视图模式或纹理模式进行呈现。 @@ -1454,12 +1454,12 @@ channel.setMethodCallHandler { Further examples of using platform channels, including examples for desktop platforms, can be found in the [flutter/packages]({{site.repo.packages}}) repository. There are also [thousands of plugins -already available]({{site.pub}}/flutter) for Flutter that cover many common +already available]({{site.pub}}flutter) for Flutter that cover many common scenarios, ranging from Firebase to ads to device hardware like camera and Bluetooth. 更多关于如何使用平台通道的例子,包括 macOS 平台的示例,可以在 -[flutter/plugins]({{site.github}}/flutter/plugins) 代码仓库 +[flutter/plugins]({{site.repo.organization}}plugins) 代码仓库 3找到。 ### Foreign Function Interface @@ -1473,7 +1473,7 @@ to native code using the `dart:ffi` library. The foreign function interface serialization is required to pass data. Instead, the Dart runtime provides the ability to allocate memory on the heap that is backed by a Dart object and make calls to statically or dynamically linked libraries. FFI is available for all -platforms other than web, where the [js package]({{site.pub}}/packages/js) +platforms other than web, where the [js package]({{site.pub-pkg}}js) serves an equivalent purpose. 对于基于 C 语言的 API,包括使用现代语言 Rust 或 Go 生成的代码, @@ -1481,7 +1481,7 @@ Dart 也提供了 `dart:ffi` 库,一套直接绑定原生代码的机制。 外部函数接口 (foreign function interface,FFI) 比平台通道更快,因为不需要序列化即可传递数据。 实际上,Dart 的运行时提供了在堆上分配 Dart 对象内存的支持,以及调用静态或动态链接库的能力。 除了 Web 平台外,FFI 在其他平台均可以使用,因为 Web 平台上的 -[js 包]({{site.pub}}/packages/js) 已经具有相同的用途。 +[js 包]({{site.pub-pkg}}js) 已经具有相同的用途。 To use FFI, you create a `typedef` for each of the Dart and unmanaged method signatures, and instruct the Dart VM to map between them. As an example, @@ -1539,16 +1539,16 @@ in their Flutter apps, such as a browser control. 对于需要在 Flutter 应用中展示原生组件(例如内置浏览器)的开发者来说,这是一个问题。 Flutter solves this by introducing platform view widgets -([`AndroidView`]({{site.api}}/flutter/widgets/AndroidView-class.html) -and [`UiKitView`]({{site.api}}/flutter/widgets/UiKitView-class.html)) +([`AndroidView`]({{site.api}}flutter/widgets/AndroidView-class.html) +and [`UiKitView`]({{site.api}}flutter/widgets/UiKitView-class.html)) that let you embed this kind of content on each platform. Platform views can be integrated with other Flutter content3. Each of these widgets acts as an intermediary to the underlying operating system. For example, on Android, `AndroidView` serves three primary functions: Flutter 通过引入了平台 widget -([`AndroidView`]({{site.api}}/flutter/widgets/AndroidView-class.html) 和 -[`UiKitView`]({{site.api}}/flutter/widgets/UiKitView-class.html)) +([`AndroidView`]({{site.api}}flutter/widgets/AndroidView-class.html) 和 +[`UiKitView`]({{site.api}}flutter/widgets/UiKitView-class.html)) 解决了这个问题,开发者可以在每一种平台上嵌入此类内容。 平台视图可以与其他的 Flutter 内容集成3。 这些 widget 充当了底层操作系统与 Flutter 之间的桥梁。 @@ -1579,10 +1579,10 @@ controls like Google Maps where reimplementing in Flutter isn't practical. Typically, a Flutter app instantiates these widgets in a `build()` method based on a platform test. As an example, from the -[google_maps_flutter]({{site.pub}}/packages/google_maps_flutter) plugin: +[google_maps_flutter]({{site.pub-pkg}}google_maps_flutter) plugin: 通常 Flutter 应用会在 `build()` 方法中基于平台判断来实例化这些 widget。 -例如在 [google_maps_flutter]({{site.pub}}/packages/google_maps_flutter) +例如在 [google_maps_flutter]({{site.pub-pkg}}google_maps_flutter) 插件中: ```dart @@ -1738,25 +1738,25 @@ developers will never write a line of code that runs into such a difference. 大部分开发者绝对可以无差异地编写这两种模式下的代码。 During development time, Flutter web uses -[`dartdevc`]({{site.dart-site}}/tools/dartdevc), a compiler that supports +[`dartdevc`]({{site.dart-site}}tools/dartdevc), a compiler that supports incremental compilation and therefore allows hot restart (although not currently hot reload) for apps. Conversely, when you are ready to create a production app -for the web, [`dart2js`]({{site.dart-site}}/tools/dart2js), Dart's +for the web, [`dart2js`]({{site.dart-site}}tools/dart2js), Dart's highly-optimized production JavaScript compiler is used, packaging the Flutter core and framework along with your application into a minified source file that can be deployed to any web server. Code can be offered in a single file or split into multiple files through [deferred imports][]. -[deferred imports]: {{site.dart-site}}/language/libraries#lazily-loading-a-library +[deferred imports]: {{site.dart-site}}language/libraries#lazily-loading-a-library 在进行开发时,Web 版本的 Flutter 使用支持增量编译的编译器 -[`dartdevc`]({{site.dart-site}}/tools/dartdevc) 进行编译, +[`dartdevc`]({{site.dart-site}}tools/dartdevc) 进行编译, 以支持应用热重启(尽管目前尚未支持热重载)。 相反,当你准备好创建一个生产环境的 Web 应用时,Dart 深度优化的编译器 -[`dart2js`]({{site.dart-site}}/tools/dart2js) 将会用于编译, +[`dart2js`]({{site.dart-site}}tools/dart2js) 将会用于编译, 将 Flutter 核心框架和你的应用打包至缩小的源文件中,可部署在任何服务器上。 代码可以在单个文件中提供,也可拆分至多个文件以 -[延迟加载库]({{site.dart-site}}/guides/language/language-tour#lazily-loading-a-library) +[延迟加载库]({{site.dart-site}}guides/language/language-tour#lazily-loading-a-library) 提供。 diff --git a/src/content/resources/books.md b/src/content/resources/books.md index 10125b7179..7bd89bb02e 100644 --- a/src/content/resources/books.md +++ b/src/content/resources/books.md @@ -37,8 +37,8 @@ Flutter 3.16(2023年11月)之前发布的任何内容 都不会体现 Flutter 当前默认的 Material 3 主题。 你可以在 Flutter 最新发布页面看到 [版本更新内容][what's new]。 -[file an issue]: {{site.repo.this}}/issues/new -[sample]: {{site.repo.this}}/pull/6019 +[file an issue]: {{site.repo.this}}issues/new +[sample]: {{site.repo.this}}pull/6019 [what's new]: /release/whats-new {% for book in books -%} diff --git a/src/content/resources/bootstrap-into-dart.md b/src/content/resources/bootstrap-into-dart.md index 7aaad9725c..4a655fb0aa 100644 --- a/src/content/resources/bootstrap-into-dart.md +++ b/src/content/resources/bootstrap-into-dart.md @@ -65,24 +65,24 @@ you to learn, too.
Learn how to use Streams, which are used extensively in the Dart core libraries. Streams can be used instead repeating callbacks. For example, the - [File class]({{site.api}}/flutter/dart-io/File-class.html) + [File class]({{site.api}}flutter/dart-io/File-class.html) uses Streams to read bytes from a file. -[异步编程: Streams 指南]({{site.dart-site}}/docs/tutorials/streams) -
这能够帮助你在 Dart 核心库中熟练使用 Streams。其中 Streams 可以用来替代重复使用的回调。比如,我们在 [File 类]({{site.api}}/flutter/dart-io/File-class.html) 中可以使用 Streams 从文件中读取字节。 +[异步编程: Streams 指南]({{site.dart-site}}docs/tutorials/streams) +
这能够帮助你在 Dart 核心库中熟练使用 Streams。其中 Streams 可以用来替代重复使用的回调。比如,我们在 [File 类]({{site.api}}flutter/dart-io/File-class.html) 中可以使用 Streams 从文件中读取字节。 Want to learn more and perhaps contribute? Check out the -[Dart community]({{site.dart-site}}/community). +[Dart community]({{site.dart-site}}community). -如果你想了解更多信息或是想要参与贡献,欢迎查看我们的 [Dart 社区]({{site.dart-site}}/community)。 +如果你想了解更多信息或是想要参与贡献,欢迎查看我们的 [Dart 社区]({{site.dart-site}}community)。 -[Asynchronous programming: futures, async, await]: {{site.dart-site}}/codelabs/async-await -[Asynchronous programming: streams]: {{site.dart-site}}/tutorials/language/streams +[Asynchronous programming: futures, async, await]: {{site.dart-site}}codelabs/async-await +[Asynchronous programming: streams]: {{site.dart-site}}tutorials/language/streams [Dart]: {{site.dart-site}} -[Dart community]: {{site.dart-site}}/community +[Dart community]: {{site.dart-site}}community [Dart is easy and fun to learn]: /resources/faq#why-did-flutter-choose-to-use-dart -[Effective Dart]: {{site.dart-site}}/guides/language/effective-dart -[`File`]: {{site.api}}/flutter/dart-io/File-class.html -[Learning Dart as a JavaScript developer]: {{site.dart-site}}/guides/language/coming-from/js-to-dart -[Language tour]: {{site.dart-site}}/language -[Library tour]: {{site.dart-site}}/guides/libraries/library-tour +[Effective Dart]: {{site.dart-site}}guides/language/effective-dart +[`File`]: {{site.api}}flutter/dart-io/File-class.html +[Learning Dart as a JavaScript developer]: {{site.dart-site}}guides/language/coming-from/js-to-dart +[Language tour]: {{site.dart-site}}language +[Library tour]: {{site.dart-site}}guides/libraries/library-tour diff --git a/src/content/resources/bug-reports.md b/src/content/resources/bug-reports.md index 1da329aaaa..b3339aa761 100644 --- a/src/content/resources/bug-reports.md +++ b/src/content/resources/bug-reports.md @@ -186,5 +186,5 @@ Follow these steps only if your issue is related to the [DartPad]: {{site.dartpad}} -[Flutter issue]: {{site.repo.flutter}}/issues/new/choose -[Website issue]: {{site.repo.this}}/issues/new/choose +[Flutter issue]: {{site.repo.flutter}}issues/new/choose +[Website issue]: {{site.repo.this}}issues/new/choose diff --git a/src/content/resources/courses.md b/src/content/resources/courses.md index 58407b178a..942345d747 100644 --- a/src/content/resources/courses.md +++ b/src/content/resources/courses.md @@ -44,4 +44,4 @@ To include your course, [submit a PR][]: [Dart & Flutter - Zero to Mastery 2023 - Keiko Corp. Food Reviews App]: https://academy.zerotomastery.io/courses/2092303/lectures/47623876 [Sticky Grouped Headers in Flutter]: https://academy.droidcon.com/course/sticky-grouped-headers-in-flutter [Flutter University - From Zero to Mastery]: https://www.fudeo.it/?utm_source=flutter_dev -[submit a PR]: {{site.repo.this}}/pulls +[submit a PR]: {{site.repo.this}}pulls diff --git a/src/content/resources/faq.md b/src/content/resources/faq.md index 4be95cdf18..3d98296bed 100644 --- a/src/content/resources/faq.md +++ b/src/content/resources/faq.md @@ -137,7 +137,7 @@ Flutter 的 [软件包生态][package ecosystem] 支持绝大多数硬件 (例如支付、云储存、验证以及 [广告][ads])。 [ads]: {{site.main-url}}/monetization -[package ecosystem]: {{site.pub}}/flutter +[package ecosystem]: {{site.pub}}flutter ### Who makes Flutter? @@ -192,7 +192,7 @@ Flutter 与其它工具的不同之处还在于,它只有一层简洁的 C/C++ 这种语言使得开发者可以轻松地进行阅读、更改、替换或删除。 这些特性都为开发者提供了巨大的系统控制权限,同时显著降低了访问大多数系统功能的门槛。 -[Dart]: {{site.dart-site}}/ +[Dart]: {{site.dart-site}} ### Should I build my next production app with Flutter? @@ -217,9 +217,9 @@ and address commonly-requested user features. Flutter 进行了高质量的持续交付更新,优化了稳定性、性能以及一些常见的用户需求。 -[Flutter 1]: {{site.google-blog}}/2018/12/flutter-10-googles-portable-ui-toolkit.html -[Flutter 2]: {{site.google-blog}}/2021/03/announcing-flutter-2.html -[Flutter 3]: {{site.google-blog}}/flutter/introducing-flutter-3-5eb69151622f +[Flutter 1]: {{site.google-blog}}2018/12/flutter-10-googles-portable-ui-toolkit.html +[Flutter 2]: {{site.google-blog}}2021/03/announcing-flutter-2.html +[Flutter 3]: {{site.google-blog}}flutter/introducing-flutter-3-5eb69151622f ## What does Flutter provide? @@ -291,9 +291,9 @@ of the many editors that support [editing Dart][]. 并配合能编辑 [Dart 语言的编辑器][editing Dart] 进行开发。 -[Android Studio]: {{site.android-dev}}/studio +[Android Studio]: {{site.android-dev}}studio [Android Studio/IntelliJ]: /tools/android-studio -[editing Dart]: {{site.dart-site}}/tools +[editing Dart]: {{site.dart-site}}tools [editor configuration]: /get-started/editor [IntelliJ IDEA]: https://www.jetbrains.com/idea/ [VS Code]: https://code.visualstudio.com/ @@ -395,10 +395,10 @@ such as [injectable][], [get_it][], [kiwi][], and [riverpod][]. 例如 [injectable][]、[get_it][]、[kiwi][] 和 [riverpod][]。 -[get_it]: {{site.pub}}/packages/get_it -[injectable]: {{site.pub}}/packages/injectable -[kiwi]: {{site.pub}}/packages/kiwi -[riverpod]: {{site.pub}}/packages/riverpod +[get_it]: {{site.pub-pkg}}get_it +[injectable]: {{site.pub-pkg}}injectable +[kiwi]: {{site.pub-pkg}}kiwi +[riverpod]: {{site.pub-pkg}}riverpod ## Technology @@ -829,13 +829,13 @@ To do that, see [Measuring your app's size][]. 想要测量应用体积,请查看 [测量你的应用体积][Measuring your app's size]。 -[apkanalyzer]: {{site.android-dev}}/studio/command-line/apkanalyzer -[built into Android Studio]: {{site.android-dev}}/studio/build/apk-analyzer -[deprecated bitcode in Xcode 14]: {{site.apple-dev}}/documentation/xcode-release-notes/xcode-14-release-notes -[iOS App Store Specific Considerations]: {{site.apple-dev}}/library/archive/qa/qa1795/_index.html#//apple_ref/doc/uid/DTS40014195-CH1-APP_STORE_CONSIDERATIONS +[apkanalyzer]: {{site.android-dev}}studio/command-line/apkanalyzer +[built into Android Studio]: {{site.android-dev}}studio/build/apk-analyzer +[deprecated bitcode in Xcode 14]: {{site.apple-dev}}documentation/xcode-release-notes/xcode-14-release-notes +[iOS App Store Specific Considerations]: {{site.apple-dev}}library/archive/qa/qa1795/_index.html#//apple_ref/doc/uid/DTS40014195-CH1-APP_STORE_CONSIDERATIONS [Measuring your app's size]: /perf/app-size -[minimal Flutter app]: {{site.repo.flutter}}/tree/75228a59dacc24f617272f7759677e242bbf74ec/examples/hello_world -[QA1795]: {{site.apple-dev}}/library/archive/qa/qa1795/_index.html +[minimal Flutter app]: {{site.repo.flutter}}tree/75228a59dacc24f617272f7759677e242bbf74ec/examples/hello_world +[QA1795]: {{site.apple-dev}}library/archive/qa/qa1795/_index.html ### How does Flutter define a pixel? @@ -844,7 +844,7 @@ and often refers to them merely as "pixels". Flutter's [`devicePixelRatio`][] expresses the ratio between physical pixels and logical CSS pixels. -[`devicePixelRatio`]: {{site.api}}/flutter/dart-html/Window/devicePixelRatio.html +[`devicePixelRatio`]: {{site.api}}flutter/dart-html/Window/devicePixelRatio.html ## Capabilities @@ -1026,7 +1026,7 @@ abstractions that are a best fit for their project. [is easy]: /packages-and-plugins/using-packages [platform and third-party APIs]: /platform-integration/platform-channels -[ready-made packages]: {{site.pub}}/flutter/ +[ready-made packages]: {{site.pub}}flutter/ ### Can I extend and customize the bundled widgets? @@ -1151,8 +1151,8 @@ iOS and Android. 学习如何使用平台通道访问 iOS 和 Android 上的电池状态信息。 -[`BasicMessageChannel`]: {{site.api}}/flutter/services/BasicMessageChannel-class.html -[example project]: {{site.repo.flutter}}/tree/main/examples/platform_channel +[`BasicMessageChannel`]: {{site.api}}flutter/services/BasicMessageChannel-class.html +[example project]: {{site.repo.flutter}}tree/main/examples/platform_channel [platform channels]: /platform-integration/platform-channels ### Does Flutter come with a reflection / mirrors system? @@ -1222,7 +1222,7 @@ Check out an [example of using isolates with Flutter][]. 你可以点击链接查看 [在 Flutter 中使用 isolate 的示例][example of using isolates with Flutter]。 -[example of using isolates with Flutter]: {{site.repo.flutter}}/blob/master/examples/layers/services/isolate.dart +[example of using isolates with Flutter]: {{site.repo.flutter}}blob/master/examples/layers/services/isolate.dart ### Can I run Dart code in the background of a Flutter app? @@ -1236,7 +1236,7 @@ iOS and Android. For more information, see the free Medium article 有关更多信息,你可以查看在 Medium 上的文章: [使用 Flutter 插件和 Geofencing 在后台运行 Dart 代码][backgnd]。 -[backgnd]: {{site.flutter-medium}}/executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124 +[backgnd]: {{site.flutter-medium}}executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124 ### Can I use JSON/XML/protobuffers (and so on) with Flutter? @@ -1318,7 +1318,7 @@ Chromebooks][]. to running Flutter on Chromebooks] 来获得相关信息。 -[issues related to running Flutter on Chromebooks]: {{site.repo.flutter}}/labels/platform-arc +[issues related to running Flutter on Chromebooks]: {{site.repo.flutter}}labels/platform-arc ### Is Flutter ABI compatible? @@ -1352,7 +1352,7 @@ subclassing `StatefulWidget`. You can read a more [关于 State.build 的讨论][detailed discussion on the API docs for `State.build`]。 -[detailed discussion on the API docs for `State.build`]: {{site.api}}/flutter/widgets/State/build.html +[detailed discussion on the API docs for `State.build`]: {{site.api}}flutter/widgets/State/build.html ### Where is Flutter's markup language? Why doesn't Flutter have a markup syntax? @@ -1677,41 +1677,41 @@ Flutter 是一个多范式的编程环境。过去几十年中许多编程技术 这种做法也使得 Flutter 能不依赖太多输入的情况下快速完成一个全新的布局。 -[`AnimatedDefaultTextStyle`]: {{site.api}}/flutter/widgets/AnimatedDefaultTextStyle-class.html -[`AnimatedPhysicalModel`]: {{site.api}}/flutter/widgets/AnimatedPhysicalModel-class.html -[`Center`]: {{site.api}}/flutter/widgets/Center-class.html -[`Chip`]: {{site.api}}/flutter/material/Chip-class.html -[`color`]: {{site.api}}/flutter/widgets/Icon/color.html -[`ConstrainedBox`]: {{site.api}}/flutter/widgets/ConstrainedBox-class.html -[`Divider`]: {{site.api}}/flutter/material/Divider-class.html -[`Future`]: {{site.api}}/flutter/dart-async/Future-class.html -[`GestureDetector`]: {{site.api}}/flutter/widgets/GestureDetector-class.html -[`GlobalKey`]: {{site.api}}/flutter/widgets/GlobalKey-class.html -[`icon`]: {{site.api}}/flutter/widgets/Icon/icon.html -[`Icon`]: {{site.api}}/flutter/widgets/Icon-class.html -[`IconTheme`]: {{site.api}}/flutter/widgets/IconTheme-class.html -[`InkWell`]: {{site.api}}/flutter/material/InkWell-class.html -[`Iterable`]: {{site.api}}/flutter/dart-core/Iterable-class.html -[`List`]: {{site.api}}/flutter/dart-core/List-class.html -[`Listenable`]: {{site.api}}/flutter/foundation/Listenable-class.html -[`Map`]: {{site.api}}/flutter/dart-core/Map-class.html -[`Material`]: {{site.api}}/flutter/material/Material-class.html -[`NotificationListener`]: {{site.api}}/flutter/widgets/NotificationListener-class.html -[`Padding`]: {{site.api}}/flutter/widgets/Padding-class.html -[popped]: {{site.api}}/flutter/widgets/Navigator/pop.html -[`Rect`]: {{site.api}}/flutter/dart-ui/Rect-class.html -[`RenderBox`]: {{site.api}}/flutter/rendering/RenderBox-class.html -[`RenderObject`]: {{site.api}}/flutter/rendering/RenderObject-class.html -[`Route`]: {{site.api}}/flutter/widgets/Route-class.html -[`ScrollPhysics`]: {{site.api}}/flutter/widgets/ScrollPhysics-class.html -[`Set`]: {{site.api}}/flutter/dart-core/Set-class.html -[`size`]: {{site.api}}/flutter/widgets/Icon/size.html -[`State`]: {{site.api}}/flutter/widgets/State-class.html -[`StatelessWidget`]: {{site.api}}/flutter/widgets/StatelessWidget-class.html -[`TextButton`]: {{site.api}}/flutter/material/TextButton-class.html -[`TextStyle`]: {{site.api}}/flutter/painting/TextStyle-class.html -[`UserAccountsDrawerHeader`]: {{site.api}}/flutter/material/UserAccountsDrawerHeader-class.html -[`Widget`]: {{site.api}}/flutter/widgets/Widget-class.html +[`AnimatedDefaultTextStyle`]: {{site.api}}flutter/widgets/AnimatedDefaultTextStyle-class.html +[`AnimatedPhysicalModel`]: {{site.api}}flutter/widgets/AnimatedPhysicalModel-class.html +[`Center`]: {{site.api}}flutter/widgets/Center-class.html +[`Chip`]: {{site.api}}flutter/material/Chip-class.html +[`color`]: {{site.api}}flutter/widgets/Icon/color.html +[`ConstrainedBox`]: {{site.api}}flutter/widgets/ConstrainedBox-class.html +[`Divider`]: {{site.api}}flutter/material/Divider-class.html +[`Future`]: {{site.api}}flutter/dart-async/Future-class.html +[`GestureDetector`]: {{site.api}}flutter/widgets/GestureDetector-class.html +[`GlobalKey`]: {{site.api}}flutter/widgets/GlobalKey-class.html +[`icon`]: {{site.api}}flutter/widgets/Icon/icon.html +[`Icon`]: {{site.api}}flutter/widgets/Icon-class.html +[`IconTheme`]: {{site.api}}flutter/widgets/IconTheme-class.html +[`InkWell`]: {{site.api}}flutter/material/InkWell-class.html +[`Iterable`]: {{site.api}}flutter/dart-core/Iterable-class.html +[`List`]: {{site.api}}flutter/dart-core/List-class.html +[`Listenable`]: {{site.api}}flutter/foundation/Listenable-class.html +[`Map`]: {{site.api}}flutter/dart-core/Map-class.html +[`Material`]: {{site.api}}flutter/material/Material-class.html +[`NotificationListener`]: {{site.api}}flutter/widgets/NotificationListener-class.html +[`Padding`]: {{site.api}}flutter/widgets/Padding-class.html +[popped]: {{site.api}}flutter/widgets/Navigator/pop.html +[`Rect`]: {{site.api}}flutter/dart-ui/Rect-class.html +[`RenderBox`]: {{site.api}}flutter/rendering/RenderBox-class.html +[`RenderObject`]: {{site.api}}flutter/rendering/RenderObject-class.html +[`Route`]: {{site.api}}flutter/widgets/Route-class.html +[`ScrollPhysics`]: {{site.api}}flutter/widgets/ScrollPhysics-class.html +[`Set`]: {{site.api}}flutter/dart-core/Set-class.html +[`size`]: {{site.api}}flutter/widgets/Icon/size.html +[`State`]: {{site.api}}flutter/widgets/State-class.html +[`StatelessWidget`]: {{site.api}}flutter/widgets/StatelessWidget-class.html +[`TextButton`]: {{site.api}}flutter/material/TextButton-class.html +[`TextStyle`]: {{site.api}}flutter/painting/TextStyle-class.html +[`UserAccountsDrawerHeader`]: {{site.api}}flutter/material/UserAccountsDrawerHeader-class.html +[`Widget`]: {{site.api}}flutter/widgets/Widget-class.html ## Project @@ -1739,9 +1739,9 @@ For more information, see our [Community][] page. [Community]: {{site.main-url}}/community [Discord]: https://discord.gg/N7Yshp4 -[issue tracker]: {{site.repo.flutter}}/issues +[issue tracker]: {{site.repo.flutter}}issues [{{site.email}}]: mailto:{{site.email}} -[Stack Overflow]: {{site.so}}/tags/flutter +[Stack Overflow]: {{site.so}}tags/flutter ### How do I get involved? @@ -1774,8 +1774,8 @@ For more information, see the [Community][] page. 最后,你可以与各个 Flutter 社区保持联系, 更多相关信息,请查阅我们的 [社区][Community] 页面。 -[Contributing guide]: {{site.repo.flutter}}/blob/master/CONTRIBUTING.md -[easy starter issues]: {{site.repo.flutter}}/issues?q=is%3Aopen+is%3Aissue+label%3A%22easy+fix%22 +[Contributing guide]: {{site.repo.flutter}}blob/master/CONTRIBUTING.md +[easy starter issues]: {{site.repo.flutter}}issues?q=is%3Aopen+is%3Aissue+label%3A%22easy+fix%22 ### Is Flutter open source? @@ -1814,7 +1814,7 @@ own license requirements. 另外,你使用的其他 Dart 代码包可能有其独有的许可协议。 [license file]: https://raw.githubusercontent.com/flutter/engine/master/sky/packages/sky_engine/LICENSE -[only one license]: {{site.repo.flutter}}/blob/master/LICENSE +[only one license]: {{site.repo.flutter}}blob/master/LICENSE ### How can I determine the licenses my Flutter application needs to show? @@ -1843,11 +1843,11 @@ There's an API to find the list of licenses you need to show: [`LicenseRegistry`][] 获得原始的许可内容。 -[`AboutListTile`]: {{site.api}}/flutter/material/AboutListTile-class.html -[`Drawer`]: {{site.api}}/flutter/material/Drawer-class.html -[`LicenseRegistry`]: {{site.api}}/flutter/foundation/LicenseRegistry-class.html -[`showAboutDialog`]: {{site.api}}/flutter/material/showAboutDialog.html -[`showLicensePage`]: {{site.api}}/flutter/material/showLicensePage.html +[`AboutListTile`]: {{site.api}}flutter/material/AboutListTile-class.html +[`Drawer`]: {{site.api}}flutter/material/Drawer-class.html +[`LicenseRegistry`]: {{site.api}}flutter/foundation/LicenseRegistry-class.html +[`showAboutDialog`]: {{site.api}}flutter/material/showAboutDialog.html +[`showLicensePage`]: {{site.api}}flutter/material/showLicensePage.html ### Who works on Flutter? @@ -1865,7 +1865,7 @@ we encourage you to join the community and 如果你喜欢 Flutter 的话,我们希望你加入开发者社区并 [做出贡献][contribute to Flutter]! -[contribute to Flutter]: {{site.repo.flutter}}/blob/master/CONTRIBUTING.md +[contribute to Flutter]: {{site.repo.flutter}}blob/master/CONTRIBUTING.md ### What are Flutter's guiding principles? @@ -1955,6 +1955,6 @@ apps built with Flutter should follow Apple's 任何提交到 Apple store 的 Flutter 应用都应该遵守 Apple 的 [规范][guidelines]。 -[guidelines]: {{site.apple-dev}}/app-store/review/guidelines/ +[guidelines]: {{site.apple-dev}}app-store/review/guidelines/ [Hamilton for iOS]: https://itunes.apple.com/us/app/hamilton-the-official-app/id1255231054?mt=8 [Reflectly]: https://apps.apple.com/us/app/reflectly-journal-ai-diary/id1241229134 diff --git a/src/content/resources/games-toolkit.md b/src/content/resources/games-toolkit.md index 1ea0f4fddf..d4f96cd642 100644 --- a/src/content/resources/games-toolkit.md +++ b/src/content/resources/games-toolkit.md @@ -139,9 +139,9 @@ Are you ready? To get started: 1. Write your game! 1. Deploy to both the Google Play and Apple stores. -[Add sound and music]: {{site.codelabs}}/codelabs/flutter-codelab-soloud -[2D physics game]: {{site.codelabs}}/codelabs/flutter-flame-forge2d -[word puzzle]: {{site.codelabs}}/codelabs/flutter-word-puzzle +[Add sound and music]: {{site.codelabs}}codelabs/flutter-codelab-soloud +[2D physics game]: {{site.codelabs}}codelabs/flutter-flame-forge2d +[word puzzle]: {{site.codelabs}}codelabs/flutter-word-puzzle ## Example games @@ -368,7 +368,7 @@ investigate other resources that our community recommended. [Cloud, Firebase]: https://cloud.google.com/free [Flame game engine]: https://flame-engine.org/ [Games]: {{site.main-url}}/games -[I/O Pinball Powered by Flutter and Firebase]: {{site.medium}}/flutter/di-o-pinball-powered-by-flutter-and-firebase-d22423f3f5d +[I/O Pinball Powered by Flutter and Firebase]: {{site.flutter-medium}}di-o-pinball-powered-by-flutter-and-firebase-d22423f3f5d [install Flutter]: /get-started/install [Tomb Toad]: https://play.google.com/store/apps/details?id=com.crescentmoongames.tombtoad [basic-template-readme]: {{games-gh}}/blob/main/templates/basic/README.md @@ -377,9 +377,9 @@ investigate other resources that our community recommended. [card-template]: {{games-gh}}/tree/main/templates/card [check your region's eligibility]: https://www.google.com/intl/en/ads/coupons/terms/flutter/ [discord-direct]: https://discord.com/login?redirect_to=%2Fchannels%2F509714518008528896%2F788415774938103829 -[firebase_crashlytics]: {{site.pub}}/packages/firebase_crashlytics -[flame-pkg]: {{site.pub}}/packages/flame -[flip-blog]: {{site.google-blog}}/2023/05/how-its-made-io-flip-adds-twist-to.html +[firebase_crashlytics]: {{site.pub-pkg}}firebase_crashlytics +[flame-pkg]: {{site.pub-pkg}}flame +[flip-blog]: {{site.google-blog}}2023/05/how-its-made-io-flip-adds-twist-to.html [flip-game]: https://flip.withgoogle.com/#/ [game-discord]: https://discord.gg/qUyQFVbV45 [game-repo]: {{games-gh}} @@ -387,41 +387,41 @@ investigate other resources that our community recommended. [runner-template-readme]: {{games-gh}}/blob/main/templates/endless_runner/README.md [runner-template]: {{games-gh}}/tree/main/templates/endless_runner -[Add AdMob ads to a Flutter app]: {{site.codelabs}}/codelabs/admob-ads-in-flutter -[Build next generation UIs in Flutter]: {{site.codelabs}}/codelabs/flutter-next-gen-uis -[firebase-crashlytics]: {{site.firebase}}/docs/crashlytics/get-started?platform=flutter +[Add AdMob ads to a Flutter app]: {{site.codelabs}}codelabs/admob-ads-in-flutter +[Build next generation UIs in Flutter]: {{site.codelabs}}codelabs/flutter-next-gen-uis +[firebase-crashlytics]: {{site.firebase}}docs/crashlytics/get-started?platform=flutter [ads-recipe]: /cookbook/plugins/google-mobile-ads -[iap-recipe]: {{site.codelabs}}/codelabs/flutter-in-app-purchases#0 +[iap-recipe]: {{site.codelabs}}codelabs/flutter-in-app-purchases#0 [leaderboard-recipe]: /cookbook/games/achievements-leaderboard [multiplayer-recipe]: /cookbook/games/firestore-multiplayer -[firebase-auth]: {{site.firebase}}/codelabs/firebase-auth-in-flutter-apps#0 -[Use the Foreign Function Interface in a Flutter plugin]: {{site.codelabs}}/codelabs/flutter-ffigen -[bonfire-pkg]: {{site.pub}}/packages/bonfire +[firebase-auth]: {{site.firebase}}codelabs/firebase-auth-in-flutter-apps#0 +[Use the Foreign Function Interface in a Flutter plugin]: {{site.codelabs}}codelabs/flutter-ffigen +[bonfire-pkg]: {{site.pub-pkg}}bonfire [CraftPix]: https://craftpix.net -[Add Firebase to your Flutter game]: {{site.firebase}}/docs/flutter/setup +[Add Firebase to your Flutter game]: {{site.firebase}}docs/flutter/setup [GIMP]: https://www.gimp.org [Game Developer Studio]: https://www.gamedeveloperstudio.com [Gaming UX and Revenue Optimizations for Apps]: {{site.main-url}}/go/games-revenue -[Paint API]: {{site.api}}/flutter/dart-ui/Paint-class.html +[Paint API]: {{site.api}}flutter/dart-ui/Paint-class.html [Special effects]: /cookbook/effects [Spriter Pro]: https://store.steampowered.com/app/332360/Spriter_Pro/ -[app_review]: {{site.pub-pkg}}/app_review -[audioplayers]: {{site.pub-pkg}}/audioplayers -[cbl_flutter]: {{site.pub-pkg}}/cbl_flutter -[firebase_crashlytics]: {{site.pub-pkg}}/firebase_crashlytics -[forge2d]: {{site.pub-pkg}}/forge2d -[game-svc-pkg]: {{site.pub-pkg}}/games_services -[rive]: {{site.pub-pkg}}/rive -[shared_preferences]: {{site.pub-pkg}}/shared_preferences -[spriteWidget]: {{site.pub-pkg}}/spritewidget -[sqflite]: {{site.pub-pkg}}/sqflite -[win32_gamepad]: {{site.pub-pkg}}/win32_gamepad -[read how the game was created in 6 weeks]: {{site.flutter-medium}}/how-we-built-the-new-super-dash-demo-in-flutter-and-flame-in-just-six-weeks-9c7aa2a5ad31 -[view the open source code repo]: {{site.github}}/flutter/super_dash +[app_review]: {{site.pub-pkg}}app_review +[audioplayers]: {{site.pub-pkg}}audioplayers +[cbl_flutter]: {{site.pub-pkg}}cbl_flutter +[firebase_crashlytics]: {{site.pub-pkg}}firebase_crashlytics +[forge2d]: {{site.pub-pkg}}forge2d +[game-svc-pkg]: {{site.pub-pkg}}games_services +[rive]: {{site.pub-pkg}}rive +[shared_preferences]: {{site.pub-pkg}}shared_preferences +[spriteWidget]: {{site.pub-pkg}}spritewidget +[sqflite]: {{site.pub-pkg}}sqflite +[win32_gamepad]: {{site.pub-pkg}}win32_gamepad +[read how the game was created in 6 weeks]: {{site.flutter-medium}}how-we-built-the-new-super-dash-demo-in-flutter-and-flame-in-just-six-weeks-9c7aa2a5ad31 +[view the open source code repo]: {{site.repo.organization}}super_dash [web]: https://superdash.flutter.dev/ [Tiled]: https://www.mapeditor.org/ -[flutter_soloud]: {{site.pub-pkg}}/flutter_soloud -[SoLoud codelab]: {{site.codelabs}}/codelabs/flutter-codelab-soloud +[flutter_soloud]: {{site.pub-pkg}}flutter_soloud +[SoLoud codelab]: {{site.codelabs}}codelabs/flutter-codelab-soloud ## Games Toolkit updates for Flutter 3.22 {:#updates} @@ -464,12 +464,12 @@ the Flutter 3.22 release: to help you optimize your Flutter web-based games and apps for lightning-fast loading speeds. -[@Marco Bavagnoli]: {{site.github}}/alnitak -[Add sound and music to your Flutter game with SoLoud]: {{site.codelabs}}/codelabs/flutter-codelab-soloud -[Best practices for optimizing Flutter web loading speed]: {{site.flutter-medium}}/best-practices-for-optimizing-flutter-web-loading-speed-7cc0df14ce5c -[Build a word puzzle with Flutter]: {{site.codelabs}}/codelabs/flutter-word-puzzle -[Build a 2D physics game with Flutter and Flame]: {{site.codelabs}}/codelabs/flutter-flame-forge2d -[Cheng Lin]: {{site.medium}}/@mhclin113_26002 +[@Marco Bavagnoli]: {{site.github}}alnitak +[Add sound and music to your Flutter game with SoLoud]: {{site.codelabs}}codelabs/flutter-codelab-soloud +[Best practices for optimizing Flutter web loading speed]: {{site.flutter-medium}}best-practices-for-optimizing-flutter-web-loading-speed-7cc0df14ce5c +[Build a word puzzle with Flutter]: {{site.codelabs}}codelabs/flutter-word-puzzle +[Build a 2D physics game with Flutter and Flame]: {{site.codelabs}}codelabs/flutter-flame-forge2d +[Cheng Lin]: {{site.medium}}@mhclin113_26002 [Forge2D]: {{site.pub-pkgs}}/forge2d ## Other new resources @@ -482,5 +482,5 @@ Check out the following videos: from Google I/O 2024. [Game Developer Conference (GDC)]: https://gdconf.com/ -[forge2d-video]: {{site.youtube-site}}/watch?v=nsnQJrYHHNQ -[gdc-talk]: {{site.youtube-site}}/watch?v=7mG_sW40tsw +[forge2d-video]: {{site.youtube-site}}watch?v=nsnQJrYHHNQ +[gdc-talk]: {{site.youtube-site}}watch?v=7mG_sW40tsw diff --git a/src/content/resources/in-app-purchases-overview.md b/src/content/resources/in-app-purchases-overview.md index 231015d722..037c330df6 100644 --- a/src/content/resources/in-app-purchases-overview.md +++ b/src/content/resources/in-app-purchases-overview.md @@ -15,4 +15,4 @@ The the following resources can help get you started: * [Add in-app purchases to your Flutter app][] (codelab) -[Add in-app purchases to your Flutter app]: {{site.codelabs}}/codelabs/flutter-in-app-purchases#0 +[Add in-app purchases to your Flutter app]: {{site.codelabs}}codelabs/flutter-in-app-purchases#0 diff --git a/src/content/resources/news-toolkit.md b/src/content/resources/news-toolkit.md index 758760069a..bd19cfa902 100644 --- a/src/content/resources/news-toolkit.md +++ b/src/content/resources/news-toolkit.md @@ -54,6 +54,6 @@ hesitate to [file an issue][]. ::: [toolkit]: https://flutter.github.io/news_toolkit/ -[blog]: {{site.flutter-medium}}/announcing-the-flutter-news-toolkit-180a0d32c012 +[blog]: {{site.flutter-medium}}announcing-the-flutter-news-toolkit-180a0d32c012 [video]: {{site.yt.watch}}?v=dukRAS-OUMM -[file an issue]: {{site.repo.flutter}}/issues +[file an issue]: {{site.repo.flutter}}issues diff --git a/src/content/resources/videos.md b/src/content/resources/videos.md index 41fb8bc750..fec471ce04 100644 --- a/src/content/resources/videos.md +++ b/src/content/resources/videos.md @@ -125,7 +125,7 @@ of the [Flutter channel's playlists][]. 上提供的一些系列视频。有关更多信息,请查看所有 [Flutter 频道的播放列表][Flutter channel's playlists]。 -[Flutter channel's playlists]: {{site.social.youtube}}/playlists +[Flutter channel's playlists]: {{site.social.youtube}}playlists [flutterdev YouTube channel]: {{site.social.youtube}} ### Decoding Flutter diff --git a/src/content/security/index.md b/src/content/security/index.md index c51755d428..6a12bc788c 100644 --- a/src/content/security/index.md +++ b/src/content/security/index.md @@ -59,9 +59,9 @@ in public that could put users at risk, For more details on how we handle security vulnerabilities, see our [security policy][]. -[Discord chat channels]: {{site.repo.flutter}}/wiki/Chat +[Discord chat channels]: {{site.repo.flutter}}wiki/Chat [known false positives]: /reference/security-false-positives -[security policy]: {{site.repo.flutter}}/security/policy +[security policy]: {{site.repo.flutter}}security/policy ## Flagging existing issues as security-related @@ -106,7 +106,7 @@ The best way to receive security updates is to subscribe to the technical release blog post. [Discord channel]: https://discord.gg/BS8KZyg -[flutter-announce]: {{site.groups}}/forum/#!forum/flutter-announce +[flutter-announce]: {{site.groups}}forum/#!forum/flutter-announce ## Best practices @@ -132,6 +132,6 @@ technical release blog post. be sure to update your fork and consider sharing your changes with the community. -[change log]: {{site.repo.flutter}}/wiki/Changelog +[change log]: {{site.repo.flutter}}wiki/Changelog [upgrade your package dependencies]: /release/upgrade diff --git a/src/content/testing/build-modes.md b/src/content/testing/build-modes.md index 448b66db92..f6e04cbd14 100644 --- a/src/content/testing/build-modes.md +++ b/src/content/testing/build-modes.md @@ -68,7 +68,7 @@ Debug 模式意味着: * [Assertions][] are enabled. - [断点]({{site.dart-site}}/guides/language/language-tour#assert) 是开启的。 + [断点]({{site.dart-site}}guides/language/language-tour#assert) 是开启的。 * Service extensions are enabled. @@ -270,12 +270,12 @@ For more information on the build modes, see [Flutter's build modes][] 文档。 [Android]: /deployment/android -[Assertions]: {{site.dart-site}}/language/error-handling#assert -[dart2js]: {{site.dart-site}}/tools/dart2js -[dartdevc]: {{site.dart-site}}/tools/dartdevc +[Assertions]: {{site.dart-site}}language/error-handling#assert +[dart2js]: {{site.dart-site}}tools/dart2js +[dartdevc]: {{site.dart-site}}tools/dartdevc [DevTools]: /tools/devtools -[Flutter wiki]: {{site.repo.flutter}}/wiki/Flutter's-modes -[Flutter's build modes]: {{site.repo.flutter}}/wiki/Flutter%27s-modes -[generate timeline events]: {{site.developers}}/web/tools/chrome-devtools/evaluate-performance/performance-reference +[Flutter wiki]: {{site.repo.flutter}}wiki/Flutter's-modes +[Flutter's build modes]: {{site.repo.flutter}}wiki/Flutter%27s-modes +[generate timeline events]: {{site.developers}}web/tools/chrome-devtools/evaluate-performance/performance-reference [hot reload]: /tools/hot-reload [iOS]: /deployment/ios diff --git a/src/content/testing/code-debugging.md b/src/content/testing/code-debugging.md index 94d1cd745c..553f34b5a5 100644 --- a/src/content/testing/code-debugging.md +++ b/src/content/testing/code-debugging.md @@ -22,7 +22,7 @@ Flutter engine running within an Android app process, check out [`flutter_gdb`][]. ::: -[`flutter_gdb`]: {{site.repo.engine}}/blob/main/sky/tools/flutter_gdb +[`flutter_gdb`]: {{site.repo.engine}}blob/main/sky/tools/flutter_gdb ## Add logging to your application @@ -784,55 +784,55 @@ To add an overlay to non-Material applications, add a [`GridPaper`][] widget. [Debugger]: /tools/devtools/debugger [Debugging]: /testing/debugging [DevTools]: /tools/devtools -[DiagnosticsProperty]: {{site.api}}/flutter/foundation/DiagnosticsProperty-class.html +[DiagnosticsProperty]: {{site.api}}flutter/foundation/DiagnosticsProperty-class.html [Flutter inspector]: /tools/devtools/inspector [Inspector view]: /tools/devtools/inspector [Logging view]: /tools/devtools/logging -[Material Design baseline grid]: {{site.material}}/foundations/layout/understanding-layout/spacing +[Material Design baseline grid]: {{site.material}}foundations/layout/understanding-layout/spacing [Profiling Flutter performance]: /perf/ui-performance [The performance overlay]: /perf/ui-performance#the-performance-overlay [Timeline events tab]: /tools/devtools/performance#timeline-events-tab -[Timeline]: {{site.dart.api}}/stable/dart-developer/Timeline-class.html -[`Center`]: {{site.api}}/flutter/widgets/Center-class.html -[`CupertinoApp`]: {{site.api}}/flutter/cupertino/CupertinoApp-class.html -[`Focus`]: {{site.api}}/flutter/widgets/Focus-class.html -[`GridPaper`]: {{site.api}}/flutter/widgets/GridPaper-class.html -[`MaterialApp` constructor]: {{site.api}}/flutter/material/MaterialApp/MaterialApp.html -[`MaterialApp`]: {{site.api}}/flutter/material/MaterialApp/MaterialApp.html -[`Material`]: {{site.api}}/flutter/material/Material-class.html -[`PerformanceOverlay.allEnabled()`]: {{site.api}}/flutter/widgets/PerformanceOverlay/PerformanceOverlay.allEnabled.html -[`RenderParagraph`]: {{site.api}}/flutter/rendering/RenderParagraph-class.html -[`RenderPositionedBox`]: {{site.api}}/flutter/rendering/RenderPositionedBox-class.html -[`TextButton`]: {{site.api}}/flutter/material/TextButton-class.html -[`WidgetsApp`]: {{site.api}}/flutter/widgets/WidgetsApp-class.html -[`_InkFeatures`]: {{site.api}}/flutter/material/InkFeature-class.html -[`debugDumpApp()`]: {{site.api}}/flutter/widgets/debugDumpApp.html -[`debugDumpFocusTree()`]: {{site.api}}/flutter/widgets/debugDumpFocusTree.html -[`debugDumpLayerTree()`]: {{site.api}}/flutter/rendering/debugDumpLayerTree.html -[`debugDumpRenderTree()`]: {{site.api}}/flutter/rendering/debugDumpRenderTree.html -[`debugDumpSemanticsTree()`]: {{site.api}}/flutter/rendering/debugDumpSemanticsTree.html -[`debugFocusChanges`]: {{site.api}}/flutter/widgets/debugFocusChanges.html -[`debugLabel`]: {{site.api}}/flutter/widgets/Focus/debugLabel.html -[`debugPaintBaselinesEnabled`]: {{site.api}}/flutter/rendering/debugPaintBaselinesEnabled.html -[`debugPaintLayerBordersEnabled`]: {{site.api}}/flutter/rendering/debugPaintLayerBordersEnabled.html -[`debugPaintPointersEnabled`]: {{site.api}}/flutter/rendering/debugPaintPointersEnabled.html -[`debugPaintSizeEnabled`]: {{site.api}}/flutter/rendering/debugPaintSizeEnabled.html -[`debugPrint()`]: {{site.api}}/flutter/foundation/debugPrint.html -[`debugPrintBeginFrameBanner`]: {{site.api}}/flutter/scheduler/debugPrintBeginFrameBanner.html -[`debugPrintEndFrameBanner`]: {{site.api}}/flutter/scheduler/debugPrintEndFrameBanner.html -[`debugPrintMarkNeedsLayoutStacks`]: {{site.api}}/flutter/rendering/debugPrintMarkNeedsLayoutStacks.html -[`debugPrintMarkNeedsPaintStacks`]: {{site.api}}/flutter/rendering/debugPrintMarkNeedsPaintStacks.html -[`debugPrintScheduleFrameStacks`]: {{site.api}}/flutter/scheduler/debugPrintScheduleFrameStacks.html -[`debugRepaintRainbowEnabled`]: {{site.api}}/flutter/rendering/debugRepaintRainbowEnabled.html -[`log()`]: {{site.api}}/flutter/dart-developer/log.html -[`setState()`]: {{site.api}}/flutter/widgets/State/setState.html -[`timeDilation`]: {{site.api}}/flutter/scheduler/timeDilation.html +[Timeline]: {{site.dart.api}}stable/dart-developer/Timeline-class.html +[`Center`]: {{site.api}}flutter/widgets/Center-class.html +[`CupertinoApp`]: {{site.api}}flutter/cupertino/CupertinoApp-class.html +[`Focus`]: {{site.api}}flutter/widgets/Focus-class.html +[`GridPaper`]: {{site.api}}flutter/widgets/GridPaper-class.html +[`MaterialApp` constructor]: {{site.api}}flutter/material/MaterialApp/MaterialApp.html +[`MaterialApp`]: {{site.api}}flutter/material/MaterialApp/MaterialApp.html +[`Material`]: {{site.api}}flutter/material/Material-class.html +[`PerformanceOverlay.allEnabled()`]: {{site.api}}flutter/widgets/PerformanceOverlay/PerformanceOverlay.allEnabled.html +[`RenderParagraph`]: {{site.api}}flutter/rendering/RenderParagraph-class.html +[`RenderPositionedBox`]: {{site.api}}flutter/rendering/RenderPositionedBox-class.html +[`TextButton`]: {{site.api}}flutter/material/TextButton-class.html +[`WidgetsApp`]: {{site.api}}flutter/widgets/WidgetsApp-class.html +[`_InkFeatures`]: {{site.api}}flutter/material/InkFeature-class.html +[`debugDumpApp()`]: {{site.api}}flutter/widgets/debugDumpApp.html +[`debugDumpFocusTree()`]: {{site.api}}flutter/widgets/debugDumpFocusTree.html +[`debugDumpLayerTree()`]: {{site.api}}flutter/rendering/debugDumpLayerTree.html +[`debugDumpRenderTree()`]: {{site.api}}flutter/rendering/debugDumpRenderTree.html +[`debugDumpSemanticsTree()`]: {{site.api}}flutter/rendering/debugDumpSemanticsTree.html +[`debugFocusChanges`]: {{site.api}}flutter/widgets/debugFocusChanges.html +[`debugLabel`]: {{site.api}}flutter/widgets/Focus/debugLabel.html +[`debugPaintBaselinesEnabled`]: {{site.api}}flutter/rendering/debugPaintBaselinesEnabled.html +[`debugPaintLayerBordersEnabled`]: {{site.api}}flutter/rendering/debugPaintLayerBordersEnabled.html +[`debugPaintPointersEnabled`]: {{site.api}}flutter/rendering/debugPaintPointersEnabled.html +[`debugPaintSizeEnabled`]: {{site.api}}flutter/rendering/debugPaintSizeEnabled.html +[`debugPrint()`]: {{site.api}}flutter/foundation/debugPrint.html +[`debugPrintBeginFrameBanner`]: {{site.api}}flutter/scheduler/debugPrintBeginFrameBanner.html +[`debugPrintEndFrameBanner`]: {{site.api}}flutter/scheduler/debugPrintEndFrameBanner.html +[`debugPrintMarkNeedsLayoutStacks`]: {{site.api}}flutter/rendering/debugPrintMarkNeedsLayoutStacks.html +[`debugPrintMarkNeedsPaintStacks`]: {{site.api}}flutter/rendering/debugPrintMarkNeedsPaintStacks.html +[`debugPrintScheduleFrameStacks`]: {{site.api}}flutter/scheduler/debugPrintScheduleFrameStacks.html +[`debugRepaintRainbowEnabled`]: {{site.api}}flutter/rendering/debugRepaintRainbowEnabled.html +[`log()`]: {{site.api}}flutter/dart-developer/log.html +[`setState()`]: {{site.api}}flutter/widgets/State/setState.html +[`timeDilation`]: {{site.api}}flutter/scheduler/timeDilation.html [debug mode]: /testing/build-modes#debug -[file an issue]: {{site.github}}/flutter/devtools/issues -[frame callback]: {{site.api}}/flutter/scheduler/SchedulerBinding/addPersistentFrameCallback.html +[file an issue]: {{site.repo.organization}}devtools/issues +[frame callback]: {{site.api}}flutter/scheduler/SchedulerBinding/addPersistentFrameCallback.html [profile mode]: /testing/build-modes#profile -[render-fill]: {{site.api}}/flutter/rendering/Layer/debugFillProperties.html -[rendering library]: {{site.api}}/flutter/rendering/rendering-library.html -[systrace]: {{site.android-dev}}/studio/profile/systrace -[widget-fill]: {{site.api}}/flutter/widgets/Widget/debugFillProperties.html -[`BoxConstraints`]: {{site.api}}/flutter/rendering/BoxConstraints-class.html \ No newline at end of file +[render-fill]: {{site.api}}flutter/rendering/Layer/debugFillProperties.html +[rendering library]: {{site.api}}flutter/rendering/rendering-library.html +[systrace]: {{site.android-dev}}studio/profile/systrace +[widget-fill]: {{site.api}}flutter/widgets/Widget/debugFillProperties.html +[`BoxConstraints`]: {{site.api}}flutter/rendering/BoxConstraints-class.html \ No newline at end of file diff --git a/src/content/testing/common-errors.md b/src/content/testing/common-errors.md index f6d35df4ea..5d3b888c17 100644 --- a/src/content/testing/common-errors.md +++ b/src/content/testing/common-errors.md @@ -19,8 +19,8 @@ future revisions, and your contributions are welcomed. Feel free to [open an issue][] or [submit a pull request][] to make this page more useful to you and the Flutter community. -[open an issue]: {{site.repo.this}}/issues/new/choose -[submit a pull request]: {{site.repo.this}}/pulls +[open an issue]: {{site.repo.this}}issues/new/choose +[submit a pull request]: {{site.repo.this}}pulls ## 'A RenderFlex overflowed…' @@ -141,9 +141,9 @@ The resources linked below provide further information about this error. * [How to debug layout issues with the Flutter Inspector][medium-article] * [Understanding constraints][] -[its source code]: {{site.repo.flutter}}/blob/c8e42b47f5ea8b5ff7bf2f2b0a2a8e765f1aa51d/packages/flutter/lib/src/widgets/basic.dart#L5166-L5174 +[its source code]: {{site.repo.flutter}}blob/c8e42b47f5ea8b5ff7bf2f2b0a2a8e765f1aa51d/packages/flutter/lib/src/widgets/basic.dart#L5166-L5174 [flexible-video]: {{site.yt.watch}}?v=CI7x0mAZiY0 -[medium-article]: {{site.flutter-medium}}/how-to-debug-layout-issues-with-the-flutter-inspector-87460a7b9db#738b +[medium-article]: {{site.flutter-medium}}how-to-debug-layout-issues-with-the-flutter-inspector-87460a7b9db#738b [Understanding constraints]: /ui/layout/constraints ## 'RenderBox was not laid out' @@ -511,7 +511,7 @@ check out the following video on -[controller-video]: {{site.api}}/flutter/widgets/PrimaryScrollController-class.html +[controller-video]: {{site.api}}flutter/widgets/PrimaryScrollController-class.html ## References diff --git a/src/content/testing/debugging.md b/src/content/testing/debugging.md index ebc433c4b9..f0fb4117fd 100644 --- a/src/content/testing/debugging.md +++ b/src/content/testing/debugging.md @@ -39,7 +39,7 @@ Flutter applications. Here are some of the available tools: check out [`flutter_gdb`][]. -[`flutter_gdb`]: {{site.repo.engine}}/blob/main/sky/tools/flutter_gdb +[`flutter_gdb`]: {{site.repo.engine}}blob/main/sky/tools/flutter_gdb ## Other resources diff --git a/src/content/testing/errors.md b/src/content/testing/errors.md index 277bb2c80f..83fce6d3bd 100644 --- a/src/content/testing/errors.md +++ b/src/content/testing/errors.md @@ -253,11 +253,11 @@ class MyApp extends StatelessWidget { } ``` -[`ErrorWidget.builder`]: {{site.api}}/flutter/widgets/ErrorWidget/builder.html -[`FlutterError.onError`]: {{site.api}}/flutter/foundation/FlutterError/onError.html -[`FlutterError.presentError`]: {{site.api}}/flutter/foundation/FlutterError/presentError.html -[`kReleaseMode`]: {{site.api}}/flutter/foundation/kReleaseMode-constant.html -[`MaterialApp.builder`]: {{site.api}}/flutter/material/MaterialApp/builder.html +[`ErrorWidget.builder`]: {{site.api}}flutter/widgets/ErrorWidget/builder.html +[`FlutterError.onError`]: {{site.api}}flutter/foundation/FlutterError/onError.html +[`FlutterError.presentError`]: {{site.api}}flutter/foundation/FlutterError/presentError.html +[`kReleaseMode`]: {{site.api}}flutter/foundation/kReleaseMode-constant.html +[`MaterialApp.builder`]: {{site.api}}flutter/material/MaterialApp/builder.html [reporting errors to a service]: /cookbook/maintenance/error-reporting -[`PlatformDispatcher.instance.onError`]: {{site.api}}/flutter/dart-ui/PlatformDispatcher/onError.html -[`PlatformDispatcher`]: {{site.api}}/flutter/dart-ui/PlatformDispatcher-class.html +[`PlatformDispatcher.instance.onError`]: {{site.api}}flutter/dart-ui/PlatformDispatcher/onError.html +[`PlatformDispatcher`]: {{site.api}}flutter/dart-ui/PlatformDispatcher-class.html diff --git a/src/content/testing/integration-tests/index.md b/src/content/testing/integration-tests/index.md index 21ae41ef21..33ca685944 100644 --- a/src/content/testing/integration-tests/index.md +++ b/src/content/testing/integration-tests/index.md @@ -587,23 +587,23 @@ on the Firebase TestLab section of the Firebase Console. To learn how to upload the .zip file from the command line, consult the [iOS Device Testing][] section in the README. -[`integration_test`]: {{site.repo.flutter}}/tree/main/packages/integration_test#integration_test -[Android Device Testing]: {{site.repo.flutter}}/tree/main/packages/integration_test#android-device-testing +[`integration_test`]: {{site.repo.flutter}}tree/main/packages/integration_test#integration_test +[Android Device Testing]: {{site.repo.flutter}}tree/main/packages/integration_test#android-device-testing [ChromeDriver]: https://googlechromelabs.github.io/chrome-for-testing/ [Download EdgeDriver]: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ -[Download GeckoDriver]: {{site.github}}/mozilla/geckodriver/releases +[Download GeckoDriver]: {{site.github}}mozilla/geckodriver/releases [Firebase Console]: http://console.firebase.google.com/ -[Firebase Test Lab section of the README]: {{site.repo.flutter}}/tree/main/packages/integration_test#firebase-test-lab -[Firebase Test Lab]: {{site.firebase}}/docs/test-lab -[Firebase TestLab iOS instructions]: {{site.firebase}}/docs/test-lab/ios/firebase-console -[flutter_test]: {{site.api}}/flutter/flutter_test/flutter_test-library.html +[Firebase Test Lab section of the README]: {{site.repo.flutter}}tree/main/packages/integration_test#firebase-test-lab +[Firebase Test Lab]: {{site.firebase}}docs/test-lab +[Firebase TestLab iOS instructions]: {{site.firebase}}docs/test-lab/ios/firebase-console +[flutter_test]: {{site.api}}flutter/flutter_test/flutter_test-library.html [Integration testing]: /testing/integration-tests -[iOS Device Testing]: {{site.repo.flutter}}/tree/main/packages/integration_test#ios-device-testing -[Running Flutter driver tests with web]: {{site.repo.flutter}}/wiki/Running-Flutter-Driver-tests-with-Web +[iOS Device Testing]: {{site.repo.flutter}}tree/main/packages/integration_test#ios-device-testing +[Running Flutter driver tests with web]: {{site.repo.flutter}}wiki/Running-Flutter-Driver-tests-with-Web [widget tests]: /testing/overview#widget-tests -[flutter_driver]: {{site.api}}/flutter/flutter_driver/flutter_driver-library.html -[integration_test usage]: {{site.repo.flutter}}/tree/main/packages/integration_test#usage +[flutter_driver]: {{site.api}}flutter/flutter_driver/flutter_driver-library.html +[integration_test usage]: {{site.repo.flutter}}tree/main/packages/integration_test#usage [samples]: {{site.repo.samples}} -[testing_app]: {{site.repo.samples}}/tree/main/testing_app/integration_test -[testWidgets]: {{site.api}}/flutter/flutter_test/testWidgets.html +[testing_app]: {{site.repo.samples}}tree/main/testing_app/integration_test +[testWidgets]: {{site.api}}flutter/flutter_test/testWidgets.html diff --git a/src/content/testing/native-debugging.md b/src/content/testing/native-debugging.md index 438e98eed6..c829ed0ded 100644 --- a/src/content/testing/native-debugging.md +++ b/src/content/testing/native-debugging.md @@ -506,9 +506,9 @@ You can find debugging resources on [Microsoft Learn][]. - [Visual Studio Debugger][] - [Learn to debug C++ code using Visual Studio][] -[Android Debug Bridge (adb)]: {{site.android-dev}}/studio/command-line/adb -[Debug your app]: {{site.android-dev}}/studio/debug -[Debugging]: {{site.apple-dev}}/support/debugging/ +[Android Debug Bridge (adb)]: {{site.android-dev}}studio/command-line/adb +[Debug your app]: {{site.android-dev}}studio/debug +[Debugging]: {{site.apple-dev}}support/debugging/ [developer.android.com]: {{site.android-dev}} [developer.apple.com]: {{site.apple-dev}} [DevTools]: /tools/devtools diff --git a/src/content/testing/overview.md b/src/content/testing/overview.md index 74207e845e..529a4123b8 100644 --- a/src/content/testing/overview.md +++ b/src/content/testing/overview.md @@ -128,8 +128,8 @@ integration services, see the following: [Codemagic CI/CD for Flutter]: https://blog.codemagic.io/getting-started-with-codemagic/ [Continuous delivery using fastlane with Flutter]: /deployment/cd#fastlane [Flutter CI/CD with Bitrise]: https://devcenter.bitrise.io/en/getting-started/quick-start-guides/getting-started-with-flutter-apps -[How to test a Flutter app]: {{site.codelabs}}/codelabs/flutter-app-testing +[How to test a Flutter app]: {{site.codelabs}}codelabs/flutter-app-testing [Test Flutter apps on Appcircle]: https://blog.appcircle.io/article/flutter-ci-cd-github-ios-android-web# [Test Flutter apps on Cirrus]: https://cirrus-ci.org/examples/#flutter -[Test Flutter apps on Travis]: {{site.flutter-medium}}/test-flutter-apps-on-travis-3fd5142ecd8c +[Test Flutter apps on Travis]: {{site.flutter-medium}}test-flutter-apps-on-travis-3fd5142ecd8c [integration testing page]: /testing/integration-tests diff --git a/src/content/testing/plugins-in-tests.md b/src/content/testing/plugins-in-tests.md index 70420fba9b..f6f5489ed4 100644 --- a/src/content/testing/plugins-in-tests.md +++ b/src/content/testing/plugins-in-tests.md @@ -40,7 +40,7 @@ MissingPluginException(No implementation found for method someMethodName on chan [Dart unit tests]: /cookbook/testing/unit/introduction [integration tests]: /cookbook/testing/integration/introduction -[widget tests]: {{site.api}}/flutter/flutter_test/flutter_test-library.html +[widget tests]: {{site.api}}flutter/flutter_test/flutter_test-library.html :::note Plugin implementations that [only use Dart][] @@ -149,5 +149,5 @@ You might also want to check out [Testing plugins][]. [platform channels]: /platform-integration/platform-channels -[`TestDefaultBinaryMessenger`]: {{site.api}}/flutter/flutter_test/TestDefaultBinaryMessenger-class.html +[`TestDefaultBinaryMessenger`]: {{site.api}}flutter/flutter_test/TestDefaultBinaryMessenger-class.html [Testing plugins]: /testing/testing-plugins diff --git a/src/content/testing/testing-plugins.md b/src/content/testing/testing-plugins.md index f210fe13db..d61fcfb989 100644 --- a/src/content/testing/testing-plugins.md +++ b/src/content/testing/testing-plugins.md @@ -86,17 +86,17 @@ so can be useful if your plugin can't be tested without native UI interactions. -[Espresso]: {{site.repo.packages}}/tree/main/packages/espresso -[GoogleTest]: {{site.github}}/google/googletest +[Espresso]: {{site.repo.packages}}tree/main/packages/espresso +[GoogleTest]: {{site.github}}google/googletest [integration tests]: /cookbook/testing/integration/introduction -[JUnit]: {{site.github}}/junit-team/junit4/wiki/Getting-started +[JUnit]: {{site.github}}junit-team/junit4/wiki/Getting-started [mocked in tests]: /testing/plugins-in-tests#mock-the-platform-channel [plugin-tests]: /packages-and-plugins/developing-packages#step-1-create-the-package-1 [unit tests]: /cookbook/testing/unit/introduction [widget tests]: /cookbook/testing/widget/introduction [won't be loaded]: /testing/plugins-in-tests -[XCTest]: {{site.apple-dev}}/documentation/xctest -[XCUITest]: {{site.apple-dev}}/library/archive/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/09-ui_testing.html +[XCTest]: {{site.apple-dev}}documentation/xctest +[XCUITest]: {{site.apple-dev}}library/archive/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/09-ui_testing.html ## Running tests @@ -202,8 +202,8 @@ Some extra considerations for plugin testing: * Dart unit tests that mock the platform channel, then call the plugin's public API and validate the results. -[Android Studio test UI]: {{site.android-dev}}/studio/test/test-in-android-studio +[Android Studio test UI]: {{site.android-dev}}studio/test/test-in-android-studio [general advice]: /testing/overview [Visual Studio test UI]: https://learn.microsoft.com/en-us/visualstudio/test/getting-started-with-unit-testing?view=vs-2022&tabs=dotnet%2Cmstest#run-unit-tests -[Xcode Test UI]: {{site.apple-dev}}/library/archive/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/05-running_tests.html +[Xcode Test UI]: {{site.apple-dev}}library/archive/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/05-running_tests.html diff --git a/src/content/tools/android-studio.md b/src/content/tools/android-studio.md index d48a07c9d6..f1737c4e5c 100644 --- a/src/content/tools/android-studio.md +++ b/src/content/tools/android-studio.md @@ -789,8 +789,8 @@ When filing new issues, include the output of [`flutter doctor`][]. [`flutter doctor`]: /resources/bug-reports#provide-some-flutter-diagnostics [Debugging Flutter apps]: /testing/debugging [Flutter plugin README]: {{site.repo.flutter}}-intellij/blob/master/README.md -["project view"]: {{site.android-dev}}/studio/projects/#ProjectView -[let us know]: {{site.repo.this}}/issues/new +["project view"]: {{site.android-dev}}studio/projects/#ProjectView +[let us know]: {{site.repo.this}}issues/new [Running DevTools from Android Studio]: /tools/devtools/android-studio [Hot reload]: /tools/hot-reload [Timeline view]: /tools/devtools/performance diff --git a/src/content/tools/devtools/app-size.md b/src/content/tools/devtools/app-size.md index 35d9a50b09..7943aba36e 100644 --- a/src/content/tools/devtools/app-size.md +++ b/src/content/tools/devtools/app-size.md @@ -426,4 +426,4 @@ to reduce an app's size are also discussed. [Diff tab]: #diff-tab [launch instructions]: /tools/devtools/overview#install-devtools [App Size Documentation]: /perf/app-size#breaking-down-the-size -[app-size-tutorial]: {{site.medium}}/@fluttergems/mastering-dart-flutter-devtools-app-size-tool-part-3-of-8-9be6e9ec42a2 +[app-size-tutorial]: {{site.medium}}@fluttergems/mastering-dart-flutter-devtools-app-size-tool-part-3-of-8-9be6e9ec42a2 diff --git a/src/content/tools/devtools/cpu-profiler.md b/src/content/tools/devtools/cpu-profiler.md index ae8e3abc77..745f8dc075 100644 --- a/src/content/tools/devtools/cpu-profiler.md +++ b/src/content/tools/devtools/cpu-profiler.md @@ -214,7 +214,7 @@ library, method name, or [`UserTag`][]. ![Screenshot of filter by tag menu](/assets/images/docs/tools/devtools/filter-by-tag.png) -[`UserTag`]: {{site.api}}/flutter/dart-developer/UserTag-class.html +[`UserTag`]: {{site.api}}flutter/dart-developer/UserTag-class.html ## Guidelines @@ -226,7 +226,7 @@ This adds vertical guidelines between parent and child in the tree. ![Screenshot of display options](/assets/images/docs/tools/devtools/display-options.png) -[analyze performance]: {{site.developers}}/web/tools/chrome-devtools/evaluate-performance/ +[analyze performance]: {{site.developers}}web/tools/chrome-devtools/evaluate-performance/ ## Other resources @@ -242,4 +242,4 @@ uses isolates for parallel computing. 请查看 [CPU 探测视图教程][profiler-tutorial]。 此外,还可以了解应用在使用隔离区进行并行计算时的 CPU 使用情况。 -[profiler-tutorial]: {{site.medium}}/@fluttergems/mastering-dart-flutter-devtools-cpu-profiler-view-part-6-of-8-31e24eae6bf8 +[profiler-tutorial]: {{site.medium}}@fluttergems/mastering-dart-flutter-devtools-cpu-profiler-view-part-6-of-8-31e24eae6bf8 diff --git a/src/content/tools/devtools/debugger.md b/src/content/tools/devtools/debugger.md index 321898d96b..0265d88ba4 100644 --- a/src/content/tools/devtools/debugger.md +++ b/src/content/tools/devtools/debugger.md @@ -39,7 +39,7 @@ check out [`flutter_gdb`][]. ::: -[`flutter_gdb`]: {{site.repo.engine}}/blob/main/sky/tools/flutter_gdb +[`flutter_gdb`]: {{site.repo.engine}}blob/main/sky/tools/flutter_gdb When you open the debugger tab, you should see the source for the main entry-point for your app loaded in the debugger. diff --git a/src/content/tools/devtools/deep-links.md b/src/content/tools/devtools/deep-links.md index 7a87d2c07b..24e56cfeaa 100644 --- a/src/content/tools/devtools/deep-links.md +++ b/src/content/tools/devtools/deep-links.md @@ -14,7 +14,7 @@ check out the Google I/O 2024 video, [No more broken links: Deep linking success in Flutter][]. ::: -[No more broken links: Deep linking success in Flutter]: {{site.youtube-site}}/watch?v=d7sZL6h1Elw +[No more broken links: Deep linking success in Flutter]: {{site.youtube-site}}watch?v=d7sZL6h1Elw The deep link view validates any deep links that are defined in your app. diff --git a/src/content/tools/devtools/extensions.md b/src/content/tools/devtools/extensions.md index e6762ee9ab..057a2f69a8 100644 --- a/src/content/tools/devtools/extensions.md +++ b/src/content/tools/devtools/extensions.md @@ -12,7 +12,7 @@ Extensions are distributed as part of a pub package, and they are dynamically loaded into DevTools when a user is debugging their app. -[DevTools extensions]: {{site.pub-pkg}}/devtools_extensions +[DevTools extensions]: {{site.pub-pkg}}devtools_extensions ## Use a DevTools extension @@ -59,4 +59,4 @@ check out the following video: -[article]: {{site.flutter-medium}}/dart-flutter-devtools-extensions-c8bc1aaf8e5f +[article]: {{site.flutter-medium}}dart-flutter-devtools-extensions-c8bc1aaf8e5f diff --git a/src/content/tools/devtools/inspector.md b/src/content/tools/devtools/inspector.md index 9ad973a56f..bcba0930a8 100644 --- a/src/content/tools/devtools/inspector.md +++ b/src/content/tools/devtools/inspector.md @@ -189,7 +189,7 @@ You might also find the following step-by-step article useful: [如何使用 Flutter Inspector 调试布局问题][debug-article] -[debug-article]: {{site.flutter-medium}}/how-to-debug-layout-issues-with-the-flutter-inspector-87460a7b9db +[debug-article]: {{site.flutter-medium}}how-to-debug-layout-issues-with-the-flutter-inspector-87460a7b9db ### Use the Layout Explorer @@ -387,9 +387,9 @@ The following links provide more info. 以下的链接提供了更多细节内容。 -* [Flutter documentation: timeDilation property]({{site.api}}/flutter/scheduler/timeDilation.html) +* [Flutter documentation: timeDilation property]({{site.api}}flutter/scheduler/timeDilation.html) - [Flutter 文档:timeDilation 属性]({{site.api}}/flutter/scheduler/timeDilation.html) + [Flutter 文档:timeDilation 属性]({{site.api}}flutter/scheduler/timeDilation.html) 以下的录屏展示了动画减速前后的对比。 @@ -479,7 +479,7 @@ with a dashed pink line with a scissors icon: 使用了诸如 [ClipRect Widget][] 进行裁剪的内容,会以粉红色的虚线加一个剪刀图标展示: -[ClipRect widget]: {{site.api}}/flutter/widgets/ClipRect-class.html +[ClipRect widget]: {{site.api}}flutter/widgets/ClipRect-class.html ![Screenshot of clip guidelines](/assets/images/docs/tools/devtools/debug-toggle-guidelines-clip.png) @@ -516,7 +516,7 @@ The [Baseline][] widget can be used to adjust baselines. [Baseline][] widget 可以用来调整基线。 -[Baseline]: {{site.api}}/flutter/widgets/Baseline-class.html +[Baseline]: {{site.api}}flutter/widgets/Baseline-class.html A line is drawn on any [render box][] that has a baseline set; alphabetic baselines are shown as green and ideographic as yellow. @@ -547,7 +547,7 @@ that changes color every time that box repaints. 该选项会为所有的 [RenderBox][render boxes] 绘制一层边框, 在它们重新绘制时改变颜色。 -[render boxes]: {{site.api}}/flutter/rendering/RenderBox-class.html +[render boxes]: {{site.api}}flutter/rendering/RenderBox-class.html This rotating rainbow of colors is useful for finding parts of your app that are repainting too often and potentially harming performance. @@ -562,7 +562,7 @@ the repainting to just the animation. 例如,一个小动画可能会导致整个页面一直在重绘。 将动画使用 [RepaintBoundary widget][] 嵌套,可以保证动画只会导致其本身重绘。 -[RepaintBoundary widget]: {{site.api}}/flutter/widgets/RepaintBoundary-class.html +[RepaintBoundary widget]: {{site.api}}flutter/widgets/RepaintBoundary-class.html Here the progress indicator causes its container to repaint: @@ -728,11 +728,11 @@ You can learn more at the following link: 以下的链接提供了更多细节内容: -* [Flutter documentation: debugInvertOversizedImages]({{site.api}}/flutter/painting/debugInvertOversizedImages.html) +* [Flutter documentation: debugInvertOversizedImages]({{site.api}}flutter/painting/debugInvertOversizedImages.html) - [Flutter 文档:debugInvertOversizedImages]({{site.api}}/flutter/painting/debugInvertOversizedImages.html) + [Flutter 文档:debugInvertOversizedImages]({{site.api}}flutter/painting/debugInvertOversizedImages.html) -[render box]: {{site.api}}/flutter/rendering/RenderBox-class.html +[render box]: {{site.api}}flutter/rendering/RenderBox-class.html ## Details Tree @@ -896,19 +896,19 @@ using DevTools, check out a guided 想要学习如何使用 DevTools 以可视化的方式调试布局问题, 可以阅读 [Flutter 布局检查器教程][inspector-tutorial]。 -[`Column`]: {{site.api}}/flutter/widgets/Column-class.html +[`Column`]: {{site.api}}flutter/widgets/Column-class.html [common problems when debugging]: /testing/debugging -[`crossAxisAlignment`]: {{site.api}}/flutter/widgets/Flex/crossAxisAlignment.html +[`crossAxisAlignment`]: {{site.api}}flutter/widgets/Flex/crossAxisAlignment.html [DartConf 2018 talk]: {{site.bili.video}}/BV1h4411575y/ [debug mode]: /testing/build-modes#debug -[`Flex`]: {{site.api}}/flutter/widgets/Flex-class.html -[flex layouts]: {{site.api}}/flutter/widgets/Flex-class.html -[`FlexFit`]: {{site.api}}/flutter/rendering/FlexFit.html -[`FlexParentData.fit`]: {{site.api}}/flutter/rendering/FlexParentData/fit.html -[`FlexParentData.flex`]: {{site.api}}/flutter/rendering/FlexParentData/flex.html -[`mainAxisAlignment`]: {{site.api}}/flutter/widgets/Flex/mainAxisAlignment.html -[`mainAxisSize`]: {{site.api}}/flutter/widgets/Flex/mainAxisSize.html -[`Row`]: {{site.api}}/flutter/widgets/Row-class.html -[`textDirection`]: {{site.api}}/flutter/widgets/Flex/textDirection.html +[`Flex`]: {{site.api}}flutter/widgets/Flex-class.html +[flex layouts]: {{site.api}}flutter/widgets/Flex-class.html +[`FlexFit`]: {{site.api}}flutter/rendering/FlexFit.html +[`FlexParentData.fit`]: {{site.api}}flutter/rendering/FlexParentData/fit.html +[`FlexParentData.flex`]: {{site.api}}flutter/rendering/FlexParentData/flex.html +[`mainAxisAlignment`]: {{site.api}}flutter/widgets/Flex/mainAxisAlignment.html +[`mainAxisSize`]: {{site.api}}flutter/widgets/Flex/mainAxisSize.html +[`Row`]: {{site.api}}flutter/widgets/Row-class.html +[`textDirection`]: {{site.api}}flutter/widgets/Flex/textDirection.html [Understanding constraints]: /ui/layout/constraints -[inspector-tutorial]: {{site.medium}}/@fluttergems/mastering-dart-flutter-devtools-flutter-inspector-part-2-of-8-bbff40692fc7 +[inspector-tutorial]: {{site.medium}}@fluttergems/mastering-dart-flutter-devtools-flutter-inspector-part-2-of-8-bbff40692fc7 diff --git a/src/content/tools/devtools/logging.md b/src/content/tools/devtools/logging.md index 2d697d11e9..bad6f72afe 100644 --- a/src/content/tools/devtools/logging.md +++ b/src/content/tools/devtools/logging.md @@ -84,4 +84,4 @@ and how to effectively use DevTools to analyze and debug Flutter apps faster, check out a guided [Logging View tutorial][logging-tutorial]. -[logging-tutorial]: {{site.medium}}/@fluttergems/mastering-dart-flutter-devtools-logging-view-part-5-of-8-b634f3a3af26 +[logging-tutorial]: {{site.medium}}@fluttergems/mastering-dart-flutter-devtools-logging-view-part-5-of-8-b634f3a3af26 diff --git a/src/content/tools/devtools/memory.md b/src/content/tools/devtools/memory.md index 60f0544217..d2b9884d8d 100644 --- a/src/content/tools/devtools/memory.md +++ b/src/content/tools/devtools/memory.md @@ -46,7 +46,7 @@ The Dart VM allocates memory for the object at the moment of the object creation and releases (or deallocates) the memory when the object is no longer used (see [Dart garbage collection][]). -[Dart garbage collection]: {{site.medium}}/flutter/flutter-dont-fear-the-garbage-collector-d69b3ff1ca30 +[Dart garbage collection]: {{site.flutter-medium}}flutter-dont-fear-the-garbage-collector-d69b3ff1ca30 ### Object types @@ -379,8 +379,8 @@ The quantities plotted on the y-axis are as follows: loaded, as well as all stack and heap memory. For more information, see [Dart VM internals][]. -[Command-line and server apps]: {{site.dart-site}}/server -[Custom Flutter engine embedders]: {{site.repo.flutter}}/wiki/Custom-Flutter-Engine-Embedders +[Command-line and server apps]: {{site.dart-site}}server +[Custom Flutter engine embedders]: {{site.repo.flutter}}wiki/Custom-Flutter-Engine-Embedders [Dart VM internals]: https://mrale.ph/dartvm/ [DevTools Performance view]: /tools/devtools/performance [Flutter architectural overview]: /resources/architectural-overview @@ -453,5 +453,5 @@ For more information, check out the following resources: * To understand Android memory structure, check out [Android: Memory allocation among processes][]. -[memory-tutorial]: {{site.medium}}/@fluttergems/mastering-dart-flutter-devtools-memory-view-part-7-of-8-e7f5aaf07e15 -[Android: Memory allocation among processes]: {{site.android-dev}}/topic/performance/memory-management +[memory-tutorial]: {{site.medium}}@fluttergems/mastering-dart-flutter-devtools-memory-view-part-7-of-8-e7f5aaf07e15 +[Android: Memory allocation among processes]: {{site.android-dev}}topic/performance/memory-management diff --git a/src/content/tools/devtools/network.md b/src/content/tools/devtools/network.md index 25df19c858..63a4bbb992 100644 --- a/src/content/tools/devtools/network.md +++ b/src/content/tools/devtools/network.md @@ -142,4 +142,4 @@ causes poor app performance. 该教程还使用网络视图来识别导致应用程序性能不佳的网络活动。 [timeline]: /tools/devtools/performance#timeline-events-tab -[network-tutorial]: {{site.medium}}/@fluttergems/mastering-dart-flutter-devtools-network-view-part-4-of-8-afce2463687c +[network-tutorial]: {{site.medium}}@fluttergems/mastering-dart-flutter-devtools-network-view-part-4-of-8-afce2463687c diff --git a/src/content/tools/devtools/overview.md b/src/content/tools/devtools/overview.md index ab1f89cbce..8cbbd1521f 100644 --- a/src/content/tools/devtools/overview.md +++ b/src/content/tools/devtools/overview.md @@ -173,14 +173,14 @@ in particular, its list of [other resources][]. For more information on using DevTools with Dart command-line apps, see the -[DevTools documentation on dart.dev]({{site.dart-site}}/tools/dart-devtools). +[DevTools documentation on dart.dev]({{site.dart-site}}tools/dart-devtools). 果你希望知道更多如何在命令行下使用开发者工具 (DevTools) 的话, -请参考这个页面 [Dart 开发者工具]({{site.dart-site}}/tools/dart-devtools). +请参考这个页面 [Dart 开发者工具]({{site.dart-site}}tools/dart-devtools). [Android Studio/IntelliJ]: /tools/devtools/android-studio [VS Code]: /tools/devtools/vscode [command line]: /tools/devtools/cli -[DevTools issue tracker]: {{site.github}}/flutter/devtools/issues +[DevTools issue tracker]: {{site.repo.organization}}devtools/issues [Debugging]: /testing/debugging [Other resources]: /testing/debugging#other-resources diff --git a/src/content/tools/devtools/performance.md b/src/content/tools/devtools/performance.md index 2f60695f5a..140b9624cc 100644 --- a/src/content/tools/devtools/performance.md +++ b/src/content/tools/devtools/performance.md @@ -329,8 +329,8 @@ Flutter 底层框架在构建帧、绘制场景和 你也可以使用 dart:developer [`Timeline`][] 和 [`TimelineTask`][] API 发送 你自己的时间线事件。 -[`Timeline`]: {{site.api}}/flutter/dart-developer/Timeline-class.html -[`TimelineTask`]: {{site.api}}/flutter/dart-developer/TimelineTask-class.html +[`Timeline`]: {{site.api}}flutter/dart-developer/Timeline-class.html +[`TimelineTask`]: {{site.api}}flutter/dart-developer/TimelineTask-class.html ![Screenshot of a timeline events tab](/assets/images/docs/tools/devtools/timeline-events-tab.png) @@ -506,7 +506,7 @@ detect jank using DevTools, check out a guided [Flutter performance profiling]: /perf/ui-performance [Reduce shader compilation jank on mobile]: /perf/shader [Import and export]: #import-and-export -[performance-tutorial]: {{site.medium}}/@fluttergems/mastering-dart-flutter-devtools-performance-view-part-8-of-8-4ae762f91230 +[performance-tutorial]: {{site.medium}}@fluttergems/mastering-dart-flutter-devtools-performance-view-part-8-of-8-4ae762f91230 [track-widgets]: {{site.yt.watch}}/_EYk-E29edo?t=623 [track-layouts]: {{site.yt.watch}}/_EYk-E29edo?t=676 [track-paints]: {{site.yt.watch}}/_EYk-E29edo?t=748 diff --git a/src/content/tools/devtools/release-notes/index.md b/src/content/tools/devtools/release-notes/index.md index be5bc2291b..51591abfc3 100644 --- a/src/content/tools/devtools/release-notes/index.md +++ b/src/content/tools/devtools/release-notes/index.md @@ -10,11 +10,11 @@ toc: false This page summarizes the changes in official stable releases of DevTools. To view a complete list of changes, check out the -[DevTools git log]({{site.repo.organization}}/devtools/commits/master). +[DevTools git log]({{site.repo.organization}}devtools/commits/master). 本篇链接的是 Flutter 和 Dart DevTools 的公告和发行注记。 如果你想查看完整的变更内容,你可以查看 -[DevTools 的 git 记录](https://github.com/flutter/devtools/commits/master)。 +[DevTools 的 git 记录]({{site.repo.organization}}devtools/commits/master)。 The Dart and Flutter SDKs include DevTools. To check your current version of DevTools, diff --git a/src/content/tools/flutter-fix.md b/src/content/tools/flutter-fix.md index 8db4dd18f0..5fed7f0699 100644 --- a/src/content/tools/flutter-fix.md +++ b/src/content/tools/flutter-fix.md @@ -135,6 +135,6 @@ on Flutter's Medium publication. [Flutter 废弃 API 的周期][Deprecation lifetime in Flutter] 文章。 -[Deprecation lifetime in Flutter]: {{site.flutter-medium}}/deprecation-lifetime-in-flutter-e4d76ee738ad -[`dart fix`]: {{site.dart-site}}/tools/dart-fix +[Deprecation lifetime in Flutter]: {{site.flutter-medium}}deprecation-lifetime-in-flutter-e4d76ee738ad +[`dart fix`]: {{site.dart-site}}tools/dart-fix [dart fix Decoding Flutter]: {{site.yt.watch}}?v=OBIuSrg_Quo diff --git a/src/content/tools/hot-reload.md b/src/content/tools/hot-reload.md index 5a1492da0b..062c9c671b 100644 --- a/src/content/tools/hot-reload.md +++ b/src/content/tools/hot-reload.md @@ -610,9 +610,9 @@ widgets and render objects. 最后,热重载机制在 Flutter 框架中触发所有现有的 widget 和渲染对象的重建/重新布局/重绘 (reassemble)。 -[static-variables]: {{site.dart-site}}/language/classes#static-variables -[const-new]: {{site.dart-site}}/language/variables#final-and-const -[Dart Virtual Machine (VM)]: {{site.dart-site}}/overview#platform +[static-variables]: {{site.dart-site}}language/classes#static-variables +[const-new]: {{site.dart-site}}language/variables#final-and-const +[Dart Virtual Machine (VM)]: {{site.dart-site}}overview#platform [Flutter editor]: /get-started/editor -[Issue 43574]: {{site.repo.flutter}}/issues/43574 -[kernel files]: {{site.github}}/dart-lang/sdk/tree/main/pkg/kernel +[Issue 43574]: {{site.repo.flutter}}issues/43574 +[kernel files]: {{site.github}}dart-lang/sdk/tree/main/pkg/kernel diff --git a/src/content/tools/pubspec.md b/src/content/tools/pubspec.md index 78b5f9b274..ead72269c4 100644 --- a/src/content/tools/pubspec.md +++ b/src/content/tools/pubspec.md @@ -73,7 +73,7 @@ the next time the project is built. ::: -[the pubspec file]: {{site.dart-site}}/tools/pub/pubspec +[the pubspec file]: {{site.dart-site}}tools/pub/pubspec [dart.dev]: {{site.dart-site}} When you create a new project with the @@ -230,10 +230,10 @@ and pubspec files, see the following: dart.dev 上介绍的 [避免提交的内容][What not to commit] -[Creating packages]: {{site.dart-site}}/guides/libraries/create-library-packages +[Creating packages]: {{site.dart-site}}guides/libraries/create-library-packages [Developing packages and plugins]: /packages-and-plugins/developing-packages [Federated plugins]: /packages-and-plugins/developing-packages#federated-plugins -[Glossary of package terms]: {{site.dart-site}}/tools/pub/glossary -[Package dependencies]: {{site.dart-site}}/tools/pub/dependencies +[Glossary of package terms]: {{site.dart-site}}tools/pub/glossary +[Package dependencies]: {{site.dart-site}}tools/pub/dependencies [Using packages]: /packages-and-plugins/using-packages -[What not to commit]: {{site.dart-site}}/guides/libraries/private-files#pubspeclock +[What not to commit]: {{site.dart-site}}guides/libraries/private-files#pubspeclock diff --git a/src/content/tools/sdk.md b/src/content/tools/sdk.md index 9b5ede5f04..c17a2891ce 100644 --- a/src/content/tools/sdk.md +++ b/src/content/tools/sdk.md @@ -80,8 +80,8 @@ The [`dart` CLI tool][] is available with the Flutter SDK at `flutter/bin/dart`. Flutter SDK 中提供了 [`dart` CLI 工具][`dart` CLI tool] (`flutter/bin/dart`)。 [Flutter DevTools]: /tools/devtools -[Dart SDK]: {{site.dart-site}}/tools/sdk -[`dart` CLI tool]: {{site.dart-site}}/tools/dart-tool +[Dart SDK]: {{site.dart-site}}tools/sdk +[`dart` CLI tool]: {{site.dart-site}}tools/dart-tool [`flutter` CLI tool]: /reference/flutter-cli [Install]: /get-started/install -[README file]: {{site.repo.flutter}}/blob/master/README.md +[README file]: {{site.repo.flutter}}blob/master/README.md diff --git a/src/content/tools/vs-code.md b/src/content/tools/vs-code.md index b2dc7e7798..6020d5ea70 100644 --- a/src/content/tools/vs-code.md +++ b/src/content/tools/vs-code.md @@ -679,8 +679,8 @@ When filing new issues, include [flutter doctor][] output. [Flutter inspector]: /tools/devtools/inspector [Flutter's build modes]: /testing/build-modes [Hot reload]: /tools/hot-reload -[let us know]: {{site.repo.this}}/issues/new -[issue tracker]: {{site.github}}/Dart-Code/Dart-Code/issues +[let us know]: {{site.repo.this}}issues/new +[issue tracker]: {{site.github}}Dart-Code/Dart-Code/issues [Running DevTools from VS Code]: /tools/devtools/vscode [Set up an editor]: /get-started/editor?tab=vscode [VS Code status bar]: /assets/images/docs/tools/vs-code/device_status_bar.png diff --git a/src/content/ui/accessibility-and-internationalization/accessibility.md b/src/content/ui/accessibility-and-internationalization/accessibility.md index 8dede3cb68..201f403aa2 100644 --- a/src/content/ui/accessibility-and-internationalization/accessibility.md +++ b/src/content/ui/accessibility-and-internationalization/accessibility.md @@ -378,7 +378,7 @@ except where you explicitly set it with `TextSpan.locale`. 通常来说,除非你设置了 `TextSpan.locale`,否则屏幕阅读器都会使用系统语言。 [Flutter Gallery]: {{site.gallery-archive}} -[`TextSpan.locale`]: {{site.api}}/flutter/painting/TextSpan/locale.html +[`TextSpan.locale`]: {{site.api}}flutter/painting/TextSpan/locale.html ## Sufficient contrast @@ -495,7 +495,7 @@ file (such as `test/a11y_test.dart` in the case of the Name Generator). 你可以在应用程序目录的 `test/widget_test.dart` 中添加 Guideline API 测试, 也可以将其作为单独的测试文件(如名称生成器中的 `test/a11y_test.dart`)。 -[Accessibility Guideline API]: {{site.api}}/flutter/flutter_test/AccessibilityGuideline-class.html +[Accessibility Guideline API]: {{site.api}}flutter/flutter_test/AccessibilityGuideline-class.html ## Testing accessibility on web @@ -604,13 +604,13 @@ the following articles written by community members: * [Flutter: Crafting a great experience for screen readers][] [CRPD]: https://www.un.org/development/desa/disabilities/convention-on-the-rights-of-persons-with-disabilities/article-9-accessibility.html -[A deep dive into Flutter's accessibility widgets]: {{site.medium}}/flutter-community/a-deep-dive-into-flutters-accessibility-widgets-eb0ef9455bc +[A deep dive into Flutter's accessibility widgets]: {{site.medium}}flutter-community/a-deep-dive-into-flutters-accessibility-widgets-eb0ef9455bc [Flutter: Crafting a great experience for screen readers]: https://blog.gskinner.com/archives/2022/09/flutter-crafting-a-great-experience-for-screen-readers.html [Accessibility Scanner]: https://play.google.com/store/apps/details?id=com.google.android.apps.accessibility.auditor&hl=en [**Large fonts**]: #large-fonts [**Screen readers**]: #screen-readers [Semantics in Flutter]: https://www.didierboelens.com/2018/07/semantics/ -[`Semantics` widget]: {{site.api}}/flutter/widgets/Semantics-class.html +[`Semantics` widget]: {{site.api}}flutter/widgets/Semantics-class.html [**Sufficient contrast**]: #sufficient-contrast [TalkBack]: https://support.google.com/accessibility/android/answer/6283677?hl=en [W3C recommends]: https://www.w3.org/TR/UNDERSTANDING-WCAG20/visual-audio-contrast-contrast.html diff --git a/src/content/ui/accessibility-and-internationalization/internationalization.md b/src/content/ui/accessibility-and-internationalization/internationalization.md index 0f83a7faab..1601ff4e6e 100644 --- a/src/content/ui/accessibility-and-internationalization/internationalization.md +++ b/src/content/ui/accessibility-and-internationalization/internationalization.md @@ -81,7 +81,7 @@ You can find the source code for this example in 你可以在 [`gen_l10n_example`][] 仓库找到源代码。 -[`gen_l10n_example`]: {{site.repo.this}}/tree/{{site.branch}}/examples/internationalization/gen_l10n_example +[`gen_l10n_example`]: {{site.repo.this}}tree/{{site.branch}}/examples/internationalization/gen_l10n_example ### Setting up an internation­alized app: the Flutter_localizations package {:#setting-up} @@ -198,7 +198,7 @@ constructor is still fully valid. 但是还是建议大家使用 `Locale.fromSubtags` 的构造函数, 因为它支持设置 [文字代码][`scriptCode`]。 -[`scriptCode`]: {{site.api}}/flutter/package-intl_locale/Locale/scriptCode.html +[`scriptCode`]: {{site.api}}flutter/package-intl_locale/Locale/scriptCode.html The elements of the `localizationsDelegates` list are factories that produce collections of localized values. @@ -222,7 +222,7 @@ structured, is covered in this page. 它们依赖的类型以及那些国际化的 Flutter app 通常是如何组织的, 可以继续阅读下面内容。 -[language-count]: {{site.api}}/flutter/flutter_localizations/GlobalMaterialLocalizations-class.html +[language-count]: {{site.api}}flutter/flutter_localizations/GlobalMaterialLocalizations-class.html ### Overriding the locale @@ -505,9 +505,9 @@ return MaterialApp( onGenerateTitle: (context) => DemoLocalizations.of(context).title, ``` -[App Resource Bundle]: {{site.github}}/google/app-resource-bundle -[`gen_l10n_example`]: {{site.repo.this}}/tree/{{site.branch}}/examples/internationalization/gen_l10n_example -[`MaterialApp.onGenerateTitle`]: {{site.api}}/flutter/material/MaterialApp/onGenerateTitle.html +[App Resource Bundle]: {{site.github}}google/app-resource-bundle +[`gen_l10n_example`]: {{site.repo.this}}tree/{{site.branch}}/examples/internationalization/gen_l10n_example +[`MaterialApp.onGenerateTitle`]: {{site.api}}flutter/material/MaterialApp/onGenerateTitle.html ### Placeholders, plurals, and selects @@ -794,7 +794,7 @@ Numbers, including those that represent currency values, are displayed very differently in different locales. The localizations generation tool in `flutter_localizations` uses the -[`NumberFormat`]({{site.api}}/flutter/intl/NumberFormat-class.html) +[`NumberFormat`]({{site.api}}flutter/intl/NumberFormat-class.html) class in the `intl` package to format numbers based on the locale and the desired format. @@ -802,7 +802,7 @@ numbers based on the locale and the desired format. 在不同的本地化环境中显示的方式大相径庭。 在 `flutter_localizations` 中的本地化生成工具 使用了 `intl` package 中的 -[`NumberFormat`]({{site.api}}/flutter/intl/NumberFormat-class.html) +[`NumberFormat`]({{site.api}}flutter/intl/NumberFormat-class.html) 类,根据本地化和所需的格式来格式化数字。 The `int`, `double`, and `number` types can use any of the @@ -915,7 +915,7 @@ In a Russian locale, it would produce "9.07.1959". AppLocalizations.of(context).helloWorldOn(DateTime.utc(1959, 7, 9)) ``` -[`DateFormat`]: {{site.api}}/flutter/intl/DateFormat-class.html +[`DateFormat`]: {{site.api}}flutter/intl/DateFormat-class.html ### Localizing for iOS: Updating the iOS app bundle @@ -1054,7 +1054,7 @@ should also be fully differentiated for more nuanced localization. 但是其他语言如法语(`fr_FR`,`fr_CA` 等等) 也应该为了更细致的本地化而做完全的区分。 -[`Localizations`]: {{site.api}}/flutter/widgets/WidgetsApp/supportedLocales.html +[`Localizations`]: {{site.api}}flutter/widgets/WidgetsApp/supportedLocales.html ### Tracking the locale: The Locale class and the Localizations widget @@ -1096,9 +1096,9 @@ You can always look up an app's current locale with Locale myLocale = Localizations.localeOf(context); ``` -[`Locale`]: {{site.api}}/flutter/dart-ui/Locale-class.html -[`WidgetsApp`]: {{site.api}}/flutter/widgets/WidgetsApp-class.html -[widgets-global]: {{site.api}}/flutter/flutter_localizations/GlobalWidgetsLocalizations-class.html +[`Locale`]: {{site.api}}flutter/dart-ui/Locale-class.html +[`WidgetsApp`]: {{site.api}}flutter/widgets/WidgetsApp-class.html +[widgets-global]: {{site.api}}flutter/flutter_localizations/GlobalWidgetsLocalizations-class.html ### Specifying the app's supported­Locales parameter @@ -1153,9 +1153,9 @@ MaterialApp( ); ``` -[`languageCode`]: {{site.api}}/flutter/dart-ui/Locale/languageCode.html -[`localeResolutionCallback`]: {{site.api}}/flutter/widgets/LocaleResolutionCallback.html -[`supportedLocales`]: {{site.api}}/flutter/material/MaterialApp/supportedLocales.html +[`languageCode`]: {{site.api}}flutter/dart-ui/Locale/languageCode.html +[`localeResolutionCallback`]: {{site.api}}flutter/widgets/LocaleResolutionCallback.html +[`supportedLocales`]: {{site.api}}flutter/material/MaterialApp/supportedLocales.html ### Configuring the l10n.yaml file @@ -1332,12 +1332,12 @@ static MaterialLocalizations of(BuildContext context) { tooltip: MaterialLocalizations.of(context).backButtonTooltip, ``` -[`InheritedWidget`]: {{site.api}}/flutter/widgets/InheritedWidget-class.html -[`load()`]: {{site.api}}/flutter/widgets/LocalizationsDelegate/load.html -[`LocalizationsDelegate`]: {{site.api}}/flutter/widgets/LocalizationsDelegate-class.html -[`Localizations.of(context,type)`]: {{site.api}}/flutter/widgets/Localizations/of.html -[`MaterialApp`]: {{site.api}}/flutter/material/MaterialApp-class.html -[`MaterialLocalizations`]: {{site.api}}/flutter/material/MaterialLocalizations-class.html +[`InheritedWidget`]: {{site.api}}flutter/widgets/InheritedWidget-class.html +[`load()`]: {{site.api}}flutter/widgets/LocalizationsDelegate/load.html +[`LocalizationsDelegate`]: {{site.api}}flutter/widgets/LocalizationsDelegate-class.html +[`Localizations.of(context,type)`]: {{site.api}}flutter/widgets/Localizations/of.html +[`MaterialApp`]: {{site.api}}flutter/material/MaterialApp-class.html +[`MaterialLocalizations`]: {{site.api}}flutter/material/MaterialLocalizations-class.html ### Defining a class for the app's localized resources @@ -1426,9 +1426,9 @@ In this case that would just be the `DemoLocalizations` class. 调用类的源码生成这个信息目录。在当前情况下, 就是 DemoLocalizations 的类(包含了 `Intl.message()` 调用)。 -[an example]: {{site.repo.this}}/tree/{{site.branch}}/examples/internationalization/minimal -[`intl`]: {{site.pub-pkg}}/intl -[`Intl.message()`]: {{site.pub-api}}/intl/latest/intl/Intl/message.html +[an example]: {{site.repo.this}}tree/{{site.branch}}/examples/internationalization/minimal +[`intl`]: {{site.pub-pkg}}intl +[`Intl.message()`]: {{site.pub-api}}intl/latest/intl/Intl/message.html ### Adding support for a new language @@ -1663,10 +1663,10 @@ const MaterialApp( ), ``` -[`add_language`]: {{site.repo.this}}/tree/{{site.branch}}/examples/internationalization/add_language/lib/main.dart +[`add_language`]: {{site.repo.this}}tree/{{site.branch}}/examples/internationalization/add_language/lib/main.dart -[flutter_localizations README]: {{site.repo.flutter}}/blob/master/packages/flutter_localizations/lib/src/l10n/README.md -[`GlobalMaterialLocalizations`]: {{site.api}}/flutter/flutter_localizations/GlobalMaterialLocalizations-class.html +[flutter_localizations README]: {{site.repo.flutter}}blob/master/packages/flutter_localizations/lib/src/l10n/README.md +[`GlobalMaterialLocalizations`]: {{site.api}}flutter/flutter_localizations/GlobalMaterialLocalizations-class.html ## Alternative internationalization workflows @@ -1758,7 +1758,7 @@ class DemoLocalizationsDelegate } ``` -[`SynchronousFuture`]: {{site.api}}/flutter/foundation/SynchronousFuture-class.html +[`SynchronousFuture`]: {{site.api}}flutter/foundation/SynchronousFuture-class.html ### Using the Dart intl tools @@ -1870,6 +1870,6 @@ check out [Using the Dart intl tools](#dart-tools). 如果你还未使用过 `intl` package,你可以阅读 [如何使用 Dart 的 intl 工具](#dart-tools)。 -[`intl_example`]: {{site.repo.this}}/tree/{{site.branch}}/examples/internationalization/intl_example -[`minimal`]: {{site.repo.this}}/tree/{{site.branch}}/examples/internationalization/minimal +[`intl_example`]: {{site.repo.this}}tree/{{site.branch}}/examples/internationalization/intl_example +[`minimal`]: {{site.repo.this}}tree/{{site.branch}}/examples/internationalization/minimal diff --git a/src/content/ui/adaptive-responsive/best-practices.md b/src/content/ui/adaptive-responsive/best-practices.md index 770ce8aad6..ddfdb593f3 100644 --- a/src/content/ui/adaptive-responsive/best-practices.md +++ b/src/content/ui/adaptive-responsive/best-practices.md @@ -113,8 +113,8 @@ To summarize: [an accessibility issue]: https://www.w3.org/WAI/WCAG21/Understanding/orientation.html [aim to support both orientations]: https://www.w3.org/WAI/WCAG21/Understanding/orientation.html -[lowest level]: {{site.android-dev}}/docs/quality-guidelines/large-screen-app-quality#T3-8 -[override a locked screen]: {{site.android-dev}}/guide/topics/large-screens/large-screen-compatibility-mode#per-app_overrides +[lowest level]: {{site.android-dev}}docs/quality-guidelines/large-screen-app-quality#T3-8 +[override a locked screen]: {{site.android-dev}}guide/topics/large-screens/large-screen-compatibility-mode#per-app_overrides ### Avoid orientation-based layouts @@ -168,7 +168,7 @@ capabilities can help your business logic code, check out the 2022 Google I/O talk, [Flutter lessons for federated plugin development][]. -[Flutter lessons for federated plugin development]: {{site.youtube-site}}/watch?v=GAnSNplNpCA +[Flutter lessons for federated plugin development]: {{site.youtube-site}}watch?v=GAnSNplNpCA ### Support a variety of input devices @@ -211,9 +211,9 @@ when the device's orientation changes, you might have to do a bit of math ([example][]) to change the scroll position on screen rotation. -[example]: {{site.github}}/gskinnerTeam/flutter-wonderous-app/blob/34e49a08084fbbe69ed67be948ab00ef23819313/lib/ui/screens/collection/widgets/_collection_list.dart#L39 -[`PageStorageKey`]: {{site.api}}/flutter/widgets/PageStorageKey-class.html -[Wonderous app]: {{site.github}}/gskinnerTeam/flutter-wonderous-app/blob/8a29d6709668980340b1b59c3d3588f123edd4d8/lib/ui/screens/wonder_events/widgets/_events_list.dart#L64 +[example]: {{site.repo.wonderous}}blob/34e49a08084fbbe69ed67be948ab00ef23819313/lib/ui/screens/collection/widgets/_collection_list.dart#L39 +[`PageStorageKey`]: {{site.api}}flutter/widgets/PageStorageKey-class.html +[Wonderous app]: {{site.repo.wonderous}}blob/8a29d6709668980340b1b59c3d3588f123edd4d8/lib/ui/screens/wonder_events/widgets/_events_list.dart#L64 ## Save app state @@ -235,6 +235,6 @@ where this occurred, check out in [Developing Flutter apps for Large screens][article], a free article on Medium. -[app state]: {{site.android-dev}}/jetpack/compose/state#store-state -[article]: {{site.flutter-medium}}/developing-flutter-apps-for-large-screens-53b7b0e17f10 -[state-loss]: {{site.flutter-medium}}/developing-flutter-apps-for-large-screens-53b7b0e17f10#:~:text=Problem%3A%20Folding/Unfolding%20causes%20state%2Dloss +[app state]: {{site.android-dev}}jetpack/compose/state#store-state +[article]: {{site.flutter-medium}}developing-flutter-apps-for-large-screens-53b7b0e17f10 +[state-loss]: {{site.flutter-medium}}developing-flutter-apps-for-large-screens-53b7b0e17f10#:~:text=Problem%3A%20Folding/Unfolding%20causes%20state%2Dloss diff --git a/src/content/ui/adaptive-responsive/general.md b/src/content/ui/adaptive-responsive/general.md index 2225129c91..59a6cba591 100644 --- a/src/content/ui/adaptive-responsive/general.md +++ b/src/content/ui/adaptive-responsive/general.md @@ -156,7 +156,7 @@ To work through an example that switches between a `NavigationRail` and a `NavigationBar`, check out the [Building an animated responsive app layout with Material 3][codelab]. -[codelab]: {{site.codelabs}}/codelabs/flutter-animated-responsive-layout +[codelab]: {{site.codelabs}}codelabs/flutter-animated-responsive-layout The next page discusses how to ensure that your app looks best on large screens and foldables. diff --git a/src/content/ui/adaptive-responsive/idioms.md b/src/content/ui/adaptive-responsive/idioms.md index 6e10713ded..3925ad2fbd 100644 --- a/src/content/ui/adaptive-responsive/idioms.md +++ b/src/content/ui/adaptive-responsive/idioms.md @@ -209,7 +209,7 @@ return const SelectableText.rich( ); ``` -[`SelectableText`]: {{site.api}}/flutter/material/SelectableText-class.html +[`SelectableText`]: {{site.api}}flutter/material/SelectableText-class.html ### Title bars @@ -229,7 +229,7 @@ This package lets you add whatever widgets you want to the This makes it easy to adapt the title bar as you navigate to different sections of the app. -[`bits_dojo`]: {{site.github}}/bitsdojo/bitsdojo_window +[`bits_dojo`]: {{site.github}}bitsdojo/bitsdojo_window ### Context menus and tooltips @@ -294,12 +294,12 @@ and hover for more information. Failing to meet those expectations can lead to disappointed users, or at least, a feeling that something isn't quite right. -[`anchored_popups`]: {{site.pub}}/packages/anchored_popups -[`context_menus`]: {{site.pub}}/packages/context_menus -[`custom_pop_up_menu`]: {{site.pub}}/packages/custom_pop_up_menu -[`flutter_portal`]: {{site.pub}}/packages/flutter_portal -[`super_tooltip`]: {{site.pub}}/packages/super_tooltip -[`Tooltip`]: {{site.api}}/flutter/material/Tooltip-class.html +[`anchored_popups`]: {{site.pub-pkg}}anchored_popups +[`context_menus`]: {{site.pub-pkg}}context_menus +[`custom_pop_up_menu`]: {{site.pub-pkg}}custom_pop_up_menu +[`flutter_portal`]: {{site.pub-pkg}}flutter_portal +[`super_tooltip`]: {{site.pub-pkg}}super_tooltip +[`Tooltip`]: {{site.api}}flutter/material/Tooltip-class.html ### Horizontal button order @@ -393,6 +393,6 @@ include the following: * Use one of the [pre-made list packages][] on pub.dev. -[`Draggable`]: {{site.api}}/flutter/widgets/Draggable-class.html -[`DragTarget`]: {{site.api}}/flutter/widgets/DragTarget-class.html -[pre-made list packages]: {{site.pub}}/packages?q=reorderable+list +[`Draggable`]: {{site.api}}flutter/widgets/Draggable-class.html +[`DragTarget`]: {{site.api}}flutter/widgets/DragTarget-class.html +[pre-made list packages]: {{site.pub-pkg}}?q=reorderable+list diff --git a/src/content/ui/adaptive-responsive/input.md b/src/content/ui/adaptive-responsive/input.md index 6ffad0e2d9..2f2577ab01 100644 --- a/src/content/ui/adaptive-responsive/input.md +++ b/src/content/ui/adaptive-responsive/input.md @@ -51,7 +51,7 @@ return Listener( ); ``` -[`Listener`]: {{site.api}}/flutter/widgets/Listener-class.html +[`Listener`]: {{site.api}}flutter/widgets/Listener-class.html ## Tab traversal and focus interactions @@ -108,11 +108,11 @@ class _BasicActionDetectorState extends State { } ``` -[`Actions`]: {{site.api}}/flutter/widgets/Actions-class.html -[`Focus`]: {{site.api}}/flutter/widgets/Focus-class.html -[`FocusableActionDetector`]: {{site.api}}/flutter/widgets/FocusableActionDetector-class.html -[`MouseRegion`]: {{site.api}}/flutter/widgets/MouseRegion-class.html -[`Shortcuts`]: {{site.api}}/flutter/widgets/Shortcuts-class.html +[`Actions`]: {{site.api}}flutter/widgets/Actions-class.html +[`Focus`]: {{site.api}}flutter/widgets/Focus-class.html +[`FocusableActionDetector`]: {{site.api}}flutter/widgets/FocusableActionDetector-class.html +[`MouseRegion`]: {{site.api}}flutter/widgets/MouseRegion-class.html +[`Shortcuts`]: {{site.api}}flutter/widgets/Shortcuts-class.html ### Controlling traversal order @@ -140,7 +140,7 @@ This class usually works well, but it's possible to modify this using another predefined `TraversalPolicy` class or by creating a custom policy. -[`FocusTraversalGroup`]: {{site.api}}/flutter/widgets/FocusTraversalGroup-class.html +[`FocusTraversalGroup`]: {{site.api}}flutter/widgets/FocusTraversalGroup-class.html ## Keyboard accelerators @@ -286,8 +286,8 @@ important when you're binding a Delete/Backspace accelerator for `Delete`, but then have child `TextFields` that the user might be typing in. -[`HardwareKeyboard`]: {{site.api}}/flutter/services/HardwareKeyboard-class.html -[`KeyboardListener`]: {{site.api}}/flutter/widgets/KeyboardListener-class.html +[`HardwareKeyboard`]: {{site.api}}flutter/services/HardwareKeyboard-class.html +[`KeyboardListener`]: {{site.api}}flutter/widgets/KeyboardListener-class.html ## Mouse enter, exit, and hover for custom widgets {:#custom-widgets} @@ -350,8 +350,8 @@ The app modifies the [`FocusNode.hasFocus`][] property to check whether the button has focus and, if so, adds an outline. -[button code for the Wonderous app]: {{site.github}}/gskinnerTeam/flutter-wonderous-app/blob/8a29d6709668980340b1b59c3d3588f123edd4d8/lib/ui/common/controls/buttons.dart#L143 -[`FocusNode.hasFocus`]: {{site.api}}/flutter/widgets/FocusNode/hasFocus.html +[button code for the Wonderous app]: {{site.repo.wonderous}}blob/8a29d6709668980340b1b59c3d3588f123edd4d8/lib/ui/common/controls/buttons.dart#L143 +[`FocusNode.hasFocus`]: {{site.api}}flutter/widgets/FocusNode/hasFocus.html ## Visual density @@ -419,6 +419,6 @@ supported components, see the [`VisualDensity`][] API. For more information about density principles in general, see the [Material Design guide][]. -[Material Design guide]: {{site.material2}}/design/layout/applying-density.html#usage -[`VisualDensity`]: {{site.api}}/flutter/material/VisualDensity-class.html +[Material Design guide]: {{site.material2}}design/layout/applying-density.html#usage +[`VisualDensity`]: {{site.api}}flutter/material/VisualDensity-class.html diff --git a/src/content/ui/adaptive-responsive/large-screens.md b/src/content/ui/adaptive-responsive/large-screens.md index 46470d1424..863f5fb58d 100644 --- a/src/content/ui/adaptive-responsive/large-screens.md +++ b/src/content/ui/adaptive-responsive/large-screens.md @@ -38,9 +38,9 @@ For example, it: ::: [14.9 million iPad users]: https://www.statista.com/statistics/299632/tablet-shipments-apple/ -[accepted in the App Store]: https://developer.apple.com/ipados/submit/ -[large screens]: {{site.android-dev}}/guide/topics/large-screens/get-started-with-large-screens -[Play Store updates]: {{site.android-dev}}/2022/03/helping-users-discover-quality-apps-on.html +[accepted in the App Store]: {{site.apple-dev}}ipados/submit/ +[large screens]: {{site.android-dev}}guide/topics/large-screens/get-started-with-large-screens +[Play Store updates]: {{site.android-dev}}2022/03/helping-users-discover-quality-apps-on.html ## Layout with GridView @@ -61,7 +61,7 @@ say that neither text nor boxes should take up the full screen width. How to solve this in an adaptive way? [guidelines]: https://developer.android.com/docs/quality-guidelines/large-screen-app-quality -[iOS equivalent]: https://developer.apple.com/design/human-interface-guidelines/designing-for-ipados +[iOS equivalent]: {{site.apple-dev}}design/human-interface-guidelines/designing-for-ipados A common solution uses `GridView`, as shown in the next section. @@ -81,8 +81,8 @@ and `ListView.builder` is similar to `GridView.builder`. `GridView` has some additional constructors for more custom layouts. To learn more, visit the [`GridView`][] API page. -[`GridView`]: {{site.api}}/flutter/widgets/GridView-class.html -[`ListView`]: {{site.api}}/flutter/widgets/ListView-class.html +[`GridView`]: {{site.api}}flutter/widgets/GridView-class.html +[`ListView`]: {{site.api}}flutter/widgets/ListView-class.html For example, if your original app used a `ListView.builder`, swap that out for a `GridView.builder`. @@ -103,8 +103,8 @@ that you can use, namely: [`SliverGridDelegateWithMaxCrossAxisExtent`][] : Lets you define a max item width. -[`SliverGridDelegateWithFixedCrossAxisCount`]: {{site.api}}/flutter/rendering/SliverGridDelegateWithFixedCrossAxisCount-class.html -[`SliverGridDelegateWithMaxCrossAxisExtent`]: {{site.api}}/flutter/rendering/SliverGridDelegateWithMaxCrossAxisExtent-class.html +[`SliverGridDelegateWithFixedCrossAxisCount`]: {{site.api}}flutter/rendering/SliverGridDelegateWithFixedCrossAxisCount-class.html +[`SliverGridDelegateWithMaxCrossAxisExtent`]: {{site.api}}flutter/rendering/SliverGridDelegateWithMaxCrossAxisExtent-class.html :::secondary Don't use the grid delegate for these classes that lets @@ -232,9 +232,9 @@ Check out the [User input][] page for guidance on adding [input support for widgets][]. -[Apple guidelines]: https://developer.apple.com/design/human-interface-guidelines/designing-for-ipados#Best-practices +[Apple guidelines]: {{site.apple-dev}}design/human-interface-guidelines/designing-for-ipados#Best-practices [input support for widgets]: /ui/adaptive-responsive/input#custom-widgets -[m3-guide]: {{site.android-dev}}/docs/quality-guidelines/large-screen-app-quality +[m3-guide]: {{site.android-dev}}docs/quality-guidelines/large-screen-app-quality [User input]: /ui/adaptive-responsive/input ### Navigation @@ -248,8 +248,8 @@ For more information (and corresponding example code), check out [Problem: Navigation rail][], a section in the [Developing Flutter apps for Large screens][article] article. -[article]: {{site.flutter-medium}}/developing-flutter-apps-for-large-screens-53b7b0e17f10 -[`BottomNavigationBar`]: {{site.api}}/flutter/material/BottomNavigationBar-class.html -[`NavigationRail`]: {{site.api}}/flutter/material/NavigationRail-class.html -[Problem: Navigation rail]: {{site.flutter-medium}}/developing-flutter-apps-for-large-screens-53b7b0e17f10#:~:text=Problem%3A%20Navigation%20rail1 +[article]: {{site.flutter-medium}}developing-flutter-apps-for-large-screens-53b7b0e17f10 +[`BottomNavigationBar`]: {{site.api}}flutter/material/BottomNavigationBar-class.html +[`NavigationRail`]: {{site.api}}flutter/material/NavigationRail-class.html +[Problem: Navigation rail]: {{site.flutter-medium}}developing-flutter-apps-for-large-screens-53b7b0e17f10#:~:text=Problem%3A%20Navigation%20rail1 diff --git a/src/content/ui/adaptive-responsive/more-info.md b/src/content/ui/adaptive-responsive/more-info.md index 097431e7f2..999dbde719 100644 --- a/src/content/ui/adaptive-responsive/more-info.md +++ b/src/content/ui/adaptive-responsive/more-info.md @@ -15,8 +15,8 @@ check out the source code for the following apps: * [Wonderous][] * [Flutter adaptive demo][] -[Flutter adaptive demo]: {{site.github}}/gskinnerTeam/flutter-adaptive-demo -[Wonderous]: {{site.github}}/gskinnerTeam/flutter-wonderous-app +[Flutter adaptive demo]: {{site.github}}gskinnerTeam/flutter-adaptive-demo +[Wonderous]: {{site.github}}gskinnerTeam/flutter-wonderous-app ## Learn more about basic usability principles @@ -46,13 +46,13 @@ Here are some resources that you might find useful: * [How to build Adaptive UI with Flutter][], a Google I/O 2024 video. -[Android large screen guidelines]: {{site.android-dev}}/docs/quality-guidelines/large-screen-app-quality -[Build high quality apps (Android)]: {{site.android-dev}}/quality -[How to build Adaptive UI with Flutter]: {{site.youtube-site}}/watch?v=LeKLGzpsz9I -[Material guidelines on applying layout]: {{site.material}}/foundations/layout/applying-layout/window-size-classes -[Material guidelines on canonical layouts]: {{site.material}}/foundations/layout/canonical-layouts/overview -[Human interface guidelines (Apple)]: {{site.apple-dev}}/design/human-interface-guidelines/ -[Material design for large screens]: {{site.material2}}/blog/material-design-for-large-screens +[Android large screen guidelines]: {{site.android-dev}}docs/quality-guidelines/large-screen-app-quality +[Build high quality apps (Android)]: {{site.android-dev}}quality +[How to build Adaptive UI with Flutter]: {{site.youtube-site}}watch?v=LeKLGzpsz9I +[Material guidelines on applying layout]: {{site.material}}foundations/layout/applying-layout/window-size-classes +[Material guidelines on canonical layouts]: {{site.material}}foundations/layout/canonical-layouts/overview +[Human interface guidelines (Apple)]: {{site.apple-dev}}design/human-interface-guidelines/ +[Material design for large screens]: {{site.material2}}blog/material-design-for-large-screens [Machine sizes and breakpoints (Microsoft)]: https://docs.microsoft.com/en-us/windows/uwp/design/layout/screen-sizes-and-breakpoints-for-responsive-desig [Responsive design techniques (Microsoft)]: https://docs.microsoft.com/en-us/windows/uwp/design/layout/responsive-design -[UI design do's and don'ts (Apple)]: {{site.apple-dev}}/design/tips/ +[UI design do's and don'ts (Apple)]: {{site.apple-dev}}design/tips/ diff --git a/src/content/ui/adaptive-responsive/safearea-mediaquery.md b/src/content/ui/adaptive-responsive/safearea-mediaquery.md index 55c4f4984d..9103974aa3 100644 --- a/src/content/ui/adaptive-responsive/safearea-mediaquery.md +++ b/src/content/ui/adaptive-responsive/safearea-mediaquery.md @@ -43,7 +43,7 @@ different shapes and styles of cutouts enter the market. How does `SafeArea` do so much in a small amount of code? Behind the scenes it uses the `MediaQuery` object. -[`SafeArea`]: {{site.api}}/flutter/widgets/SafeArea-class.html +[`SafeArea`]: {{site.api}}flutter/widgets/SafeArea-class.html ## MediaQuery diff --git a/src/content/ui/animations/hero-animations.md b/src/content/ui/animations/hero-animations.md index ad96106277..79a73b0c6d 100644 --- a/src/content/ui/animations/hero-animations.md +++ b/src/content/ui/animations/hero-animations.md @@ -1031,28 +1031,28 @@ Key information: 但图像的长宽比将保持不变。 [Animations in Flutter tutorial]: /ui/animations/tutorial -[basic_hero_animation]: {{site.repo.this}}/tree/{{site.branch}}/examples/_animation/basic_hero_animation/ -[basic_radial_hero_animation]: {{site.repo.this}}/tree/{{site.branch}}/examples/_animation/basic_radial_hero_animation +[basic_hero_animation]: {{site.repo.this}}tree/{{site.branch}}/examples/_animation/basic_hero_animation/ +[basic_radial_hero_animation]: {{site.repo.this}}tree/{{site.branch}}/examples/_animation/basic_radial_hero_animation [Building Layouts in Flutter]: /ui/layout -[`ClipOval`]: {{site.api}}/flutter/widgets/ClipOval-class.html -[ClipRect]: {{site.api}}/flutter/widgets/ClipRect-class.html +[`ClipOval`]: {{site.api}}flutter/widgets/ClipOval-class.html +[ClipRect]: {{site.api}}flutter/widgets/ClipRect-class.html [Create a new Flutter example]: /get-started/test-drive -[`createRectTween`]: {{site.api}}/flutter/widgets/CreateRectTween.html +[`createRectTween`]: {{site.api}}flutter/widgets/CreateRectTween.html [`debugPaintSizeEnabled`]: /tools/devtools/inspector#debugging-layout-issues-visually -[`Hero`]: {{site.api}}/flutter/widgets/Hero-class.html -[hero_animation]: {{site.repo.this}}/tree/{{site.branch}}/examples/_animation/hero_animation/ -[`InkWell`]: {{site.api}}/flutter/material/InkWell-class.html -[Material Design motion spec]: {{site.material2}}/design/motion/understanding-motion.html#principles -[`MaterialRectArcTween`]: {{site.api}}/flutter/material/MaterialRectArcTween-class.html -[`MaterialRectCenterArcTween`]: {{site.api}}/flutter/material/MaterialRectCenterArcTween-class.html -[`Navigator`]: {{site.api}}/flutter/widgets/Navigator-class.html +[`Hero`]: {{site.api}}flutter/widgets/Hero-class.html +[hero_animation]: {{site.repo.this}}tree/{{site.branch}}/examples/_animation/hero_animation/ +[`InkWell`]: {{site.api}}flutter/material/InkWell-class.html +[Material Design motion spec]: {{site.material2}}design/motion/understanding-motion.html#principles +[`MaterialRectArcTween`]: {{site.api}}flutter/material/MaterialRectArcTween-class.html +[`MaterialRectCenterArcTween`]: {{site.api}}flutter/material/MaterialRectCenterArcTween-class.html +[`Navigator`]: {{site.api}}flutter/widgets/Navigator-class.html [Radial hero animation code]: #radial-hero-animation-code -[radial_hero_animation]: {{site.repo.this}}/tree/{{site.branch}}/examples/_animation/radial_hero_animation -[radial_hero_animation_animate_rectclip]: {{site.repo.this}}/tree/{{site.branch}}/examples/_animation/radial_hero_animation_animate_rectclip +[radial_hero_animation]: {{site.repo.this}}tree/{{site.branch}}/examples/_animation/radial_hero_animation +[radial_hero_animation_animate_rectclip]: {{site.repo.this}}tree/{{site.branch}}/examples/_animation/radial_hero_animation_animate_rectclip [Radial hero animations]: #radial-hero-animations [Radial transformation]: https://web.archive.org/web/20180223140424/https://material.io/guidelines/motion/transforming-material.html -[`RectTween`]: {{site.api}}/flutter/animation/RectTween-class.html +[`RectTween`]: {{site.api}}flutter/animation/RectTween-class.html [_Route_]: /cookbook/navigation/navigation-basics -[`Route`]: {{site.api}}/flutter/widgets/Route-class.html +[`Route`]: {{site.api}}flutter/widgets/Route-class.html [Standard hero animation code]: #standard-hero-animation-code -[Tween<Rect>]: {{site.api}}/flutter/animation/Tween-class.html +[Tween<Rect>]: {{site.api}}flutter/animation/Tween-class.html diff --git a/src/content/ui/animations/implicit-animations.md b/src/content/ui/animations/implicit-animations.md index 3265fc032d..ced2b342a6 100644 --- a/src/content/ui/animations/implicit-animations.md +++ b/src/content/ui/animations/implicit-animations.md @@ -120,8 +120,8 @@ implicitly animated widgets: {% endfor -%} [`AnimatedContainer` sample]: /cookbook/animation/animated-container -[`AnimatedContainer`]: {{site.api}}/flutter/widgets/AnimatedContainer-class.html -[animation library]: {{site.api}}/flutter/animation/animation-library.html +[`AnimatedContainer`]: {{site.api}}flutter/widgets/AnimatedContainer-class.html +[animation library]: {{site.api}}flutter/animation/animation-library.html [Flutter cookbook]: /cookbook [Implicit animations codelab]: /codelabs/implicit-animations -[`ImplicitlyAnimatedWidget`]: {{site.api}}/flutter/widgets/ImplicitlyAnimatedWidget-class.html +[`ImplicitlyAnimatedWidget`]: {{site.api}}flutter/widgets/ImplicitlyAnimatedWidget-class.html diff --git a/src/content/ui/animations/index.md b/src/content/ui/animations/index.md index 66c1de2681..72daf5723d 100644 --- a/src/content/ui/animations/index.md +++ b/src/content/ui/animations/index.md @@ -378,35 +378,35 @@ Learn more about Flutter animations at the following links: [Animation and motion widgets]: /ui/widgets/animation [Animation basics with implicit animations]: {{site.yt.watch}}?v=IVTjpW3W33s&list=PLjxrf2q8roU2v6UqYlt_KPaXlnjbYySua&index=1 [Animation deep dive]: {{site.yt.watch}}?v=PbcILiN8rbo&list=PLjxrf2q8roU2v6UqYlt_KPaXlnjbYySua&index=5 -[animation library]: {{site.api}}/flutter/animation/animation-library.html +[animation library]: {{site.api}}flutter/animation/animation-library.html [Animation recipes]: /cookbook/animation -[Animation samples]: {{site.repo.samples}}/tree/main/animations#animation-samples -[Animation videos]: {{site.social.youtube}}/search?query=animation +[Animation samples]: {{site.repo.samples}}tree/main/animations#animation-samples +[Animation videos]: {{site.social.youtube}}search?query=animation [Animations in Flutter done right]: {{site.yt.watch}}?v=wnARLByOtKA&t=3s [Animations: overview]: /ui/animations/overview -[animations package]: {{site.pub}}/packages/animations +[animations package]: {{site.pub-pkg}}animations [Animations tutorial]: /ui/animations/tutorial -[`AnimationController.animateWith`]: {{site.api}}/flutter/animation/AnimationController/animateWith.html -[article1]: {{site.flutter-medium}}/how-to-choose-which-flutter-animation-widget-is-right-for-you-79ecfb7e72b5 -[article2]: {{site.flutter-medium}}/flutter-animation-basics-with-implicit-animations-95db481c5916 -[article3]: {{site.flutter-medium}}/custom-implicit-animations-in-flutter-with-tweenanimationbuilder-c76540b47185 -[article4]: {{site.flutter-medium}}/directional-animations-with-built-in-explicit-animations-3e7c5e6fbbd7 -[article5]: {{site.flutter-medium}}/when-should-i-useanimatedbuilder-or-animatedwidget-57ecae0959e8 -[article6]: {{site.flutter-medium}}/animation-deep-dive-39d3ffea111f +[`AnimationController.animateWith`]: {{site.api}}flutter/animation/AnimationController/animateWith.html +[article1]: {{site.flutter-medium}}how-to-choose-which-flutter-animation-widget-is-right-for-you-79ecfb7e72b5 +[article2]: {{site.flutter-medium}}flutter-animation-basics-with-implicit-animations-95db481c5916 +[article3]: {{site.flutter-medium}}custom-implicit-animations-in-flutter-with-tweenanimationbuilder-c76540b47185 +[article4]: {{site.flutter-medium}}directional-animations-with-built-in-explicit-animations-3e7c5e6fbbd7 +[article5]: {{site.flutter-medium}}when-should-i-useanimatedbuilder-or-animatedwidget-57ecae0959e8 +[article6]: {{site.flutter-medium}}animation-deep-dive-39d3ffea111f [Creating your own custom implicit animations with TweenAnimationBuilder]: {{site.yt.watch}}?v=6KiPEqzJIKQ&feature=youtu.be [Creating custom explicit animations with AnimatedBuilder and AnimatedWidget]: {{site.yt.watch}}?v=fneC7t4R_B0&list=PLjxrf2q8roU2v6UqYlt_KPaXlnjbYySua&index=4 [Flutter API documentation]: {{site.api}} -[`Hero`]: {{site.api}}/flutter/widgets/Hero-class.html +[`Hero`]: {{site.api}}flutter/widgets/Hero-class.html [Hero animations]: /ui/animations/hero-animations [How to choose which Flutter Animation Widget is right for you?]: {{site.yt.watch}}?v=GXIJJkq_H8g [Implicit animations codelab]: /codelabs/implicit-animations [Making your first directional animations with built-in explicit animations]: {{site.yt.watch}}?v=CunyH6unILQ&list=PLjxrf2q8roU2v6UqYlt_KPaXlnjbYySua&index=3 [Material widgets]: /ui/widgets/material -[`Navigator`]: {{site.api}}/flutter/widgets/Navigator-class.html -[`PageRoute`]: {{site.api}}/flutter/widgets/PageRoute-class.html -[part 2]: {{site.medium}}/dartlang/zero-to-one-with-flutter-part-two-5aa2f06655cb +[`Navigator`]: {{site.api}}flutter/widgets/Navigator-class.html +[`PageRoute`]: {{site.api}}flutter/widgets/PageRoute-class.html +[part 2]: {{site.medium}}dartlang/zero-to-one-with-flutter-part-two-5aa2f06655cb [Sample app catalog]: https://flutter.github.io/samples -[`SpringSimulation`]: {{site.api}}/flutter/physics/SpringSimulation-class.html +[`SpringSimulation`]: {{site.api}}flutter/physics/SpringSimulation-class.html [Staggered Animations]: /ui/animations/staggered-animations [Write your first Flutter app on the web]: /get-started/codelab-web -[Zero to One with Flutter, part 1]: {{site.medium}}/dartlang/zero-to-one-with-flutter-43b13fd7b354 +[Zero to One with Flutter, part 1]: {{site.medium}}dartlang/zero-to-one-with-flutter-43b13fd7b354 diff --git a/src/content/ui/animations/overview.md b/src/content/ui/animations/overview.md index 26c2b7c3a9..e87a03bd51 100644 --- a/src/content/ui/animations/overview.md +++ b/src/content/ui/animations/overview.md @@ -539,38 +539,38 @@ the `Animatable` but is driven from the given parent. 新的 `Animation` 子类,它的作用类似于 `Animatable`, 但是由给定的父级驱动。 -[`addListener`]: {{site.api}}/flutter/animation/Animation/addListener.html -[`addStatusListener`]: {{site.api}}/flutter/animation/Animation/addStatusListener.html -[`AlwaysStoppedAnimation`]: {{site.api}}/flutter/animation/AlwaysStoppedAnimation-class.html -[`Animatable`]: {{site.api}}/flutter/animation/Animatable-class.html -[`animate`]: {{site.api}}/flutter/animation/Animatable/animate.html -[`AnimatedBuilder`]: {{site.api}}/flutter/widgets/AnimatedBuilder-class.html -[`AnimationController`]: {{site.api}}/flutter/animation/AnimationController-class.html -[`AnimatedWidget`]: {{site.api}}/flutter/widgets/AnimatedWidget-class.html -[`Animation`]: {{site.api}}/flutter/animation/Animation-class.html -[`AnimationStatus`]: {{site.api}}/flutter/animation/AnimationStatus.html -[`begin`]: {{site.api}}/flutter/animation/Tween/begin.html -[`BouncingScrollSimulation`]: {{site.api}}/flutter/widgets/BouncingScrollSimulation-class.html -[`build`]: {{site.api}}/flutter/widgets/AnimatedWidget/build.html -[`ClampingScrollSimulation`]: {{site.api}}/flutter/widgets/ClampingScrollSimulation-class.html -[`ColorTween`]: {{site.api}}/flutter/animation/ColorTween-class.html -[`Curve`]: {{site.api}}/flutter/animation/Curves-class.html -[`CurvedAnimation`]: {{site.api}}/flutter/animation/CurvedAnimation-class.html -[`end`]: {{site.api}}/flutter/animation/Tween/end.html -[`evaluate`]: {{site.api}}/flutter/animation/Animatable/evaluate.html -[`fling`]: {{site.api}}/flutter/animation/AnimationController/fling.html -[`forward`]: {{site.api}}/flutter/animation/AnimationController/forward.html -[`kAlwaysCompleteAnimation`]: {{site.api}}/flutter/animation/kAlwaysCompleteAnimation-constant.html -[`kAlwaysDismissedAnimation`]: {{site.api}}/flutter/animation/kAlwaysDismissedAnimation-constant.html -[`lerp`]: {{site.api}}/flutter/animation/Tween/lerp.html -[`RectTween`]: {{site.api}}/flutter/animation/RectTween-class.html -[`ReverseAnimation`]: {{site.api}}/flutter/animation/ReverseAnimation-class.html -[`scheduleFrameCallback()`]: {{site.api}}/flutter/scheduler/SchedulerBinding/scheduleFrameCallback.html -[`SchedulerBinding`]: {{site.api}}/flutter/scheduler/SchedulerBinding-mixin.html -[`setState`]: {{site.api}}/flutter/widgets/State/setState.html -[`Simulation`]: {{site.api}}/flutter/physics/Simulation-class.html -[`State`]: {{site.api}}/flutter/widgets/State-class.html -[`stop`]: {{site.api}}/flutter/animation/AnimationController/stop.html -[`Ticker`]: {{site.api}}/flutter/scheduler/Ticker-class.html -[`Tween`]: {{site.api}}/flutter/animation/Tween-class.html -[various concrete implementations]: {{site.api}}/flutter/physics/physics-library.html +[`addListener`]: {{site.api}}flutter/animation/Animation/addListener.html +[`addStatusListener`]: {{site.api}}flutter/animation/Animation/addStatusListener.html +[`AlwaysStoppedAnimation`]: {{site.api}}flutter/animation/AlwaysStoppedAnimation-class.html +[`Animatable`]: {{site.api}}flutter/animation/Animatable-class.html +[`animate`]: {{site.api}}flutter/animation/Animatable/animate.html +[`AnimatedBuilder`]: {{site.api}}flutter/widgets/AnimatedBuilder-class.html +[`AnimationController`]: {{site.api}}flutter/animation/AnimationController-class.html +[`AnimatedWidget`]: {{site.api}}flutter/widgets/AnimatedWidget-class.html +[`Animation`]: {{site.api}}flutter/animation/Animation-class.html +[`AnimationStatus`]: {{site.api}}flutter/animation/AnimationStatus.html +[`begin`]: {{site.api}}flutter/animation/Tween/begin.html +[`BouncingScrollSimulation`]: {{site.api}}flutter/widgets/BouncingScrollSimulation-class.html +[`build`]: {{site.api}}flutter/widgets/AnimatedWidget/build.html +[`ClampingScrollSimulation`]: {{site.api}}flutter/widgets/ClampingScrollSimulation-class.html +[`ColorTween`]: {{site.api}}flutter/animation/ColorTween-class.html +[`Curve`]: {{site.api}}flutter/animation/Curves-class.html +[`CurvedAnimation`]: {{site.api}}flutter/animation/CurvedAnimation-class.html +[`end`]: {{site.api}}flutter/animation/Tween/end.html +[`evaluate`]: {{site.api}}flutter/animation/Animatable/evaluate.html +[`fling`]: {{site.api}}flutter/animation/AnimationController/fling.html +[`forward`]: {{site.api}}flutter/animation/AnimationController/forward.html +[`kAlwaysCompleteAnimation`]: {{site.api}}flutter/animation/kAlwaysCompleteAnimation-constant.html +[`kAlwaysDismissedAnimation`]: {{site.api}}flutter/animation/kAlwaysDismissedAnimation-constant.html +[`lerp`]: {{site.api}}flutter/animation/Tween/lerp.html +[`RectTween`]: {{site.api}}flutter/animation/RectTween-class.html +[`ReverseAnimation`]: {{site.api}}flutter/animation/ReverseAnimation-class.html +[`scheduleFrameCallback()`]: {{site.api}}flutter/scheduler/SchedulerBinding/scheduleFrameCallback.html +[`SchedulerBinding`]: {{site.api}}flutter/scheduler/SchedulerBinding-mixin.html +[`setState`]: {{site.api}}flutter/widgets/State/setState.html +[`Simulation`]: {{site.api}}flutter/physics/Simulation-class.html +[`State`]: {{site.api}}flutter/widgets/State-class.html +[`stop`]: {{site.api}}flutter/animation/AnimationController/stop.html +[`Ticker`]: {{site.api}}flutter/scheduler/Ticker-class.html +[`Tween`]: {{site.api}}flutter/animation/Tween-class.html +[various concrete implementations]: {{site.api}}flutter/physics/physics-library.html diff --git a/src/content/ui/animations/staggered-animations.md b/src/content/ui/animations/staggered-animations.md index b2c6fa9a1d..1a0e2176af 100644 --- a/src/content/ui/animations/staggered-animations.md +++ b/src/content/ui/animations/staggered-animations.md @@ -207,7 +207,7 @@ The following diagram shows the `Interval`s used in the [basic_staggered_animation][] example. You might notice the following characteristics: -下图展示了在 [basic_staggered_animation]({{site.github}}/flutter/website/tree/master/examples/_animation/basic_staggered_animation) 使用间隔的例子。 +下图展示了在 [basic_staggered_animation]({{site.repo.organization}}website/tree/master/examples/_animation/basic_staggered_animation) 使用间隔的例子。 你会注意到有以下特点: * The opacity changes during the first 10% of the timeline. @@ -517,16 +517,16 @@ class _StaggerDemoState extends State } ``` -[`Animation`]: {{site.api}}/flutter/animation/Animation-class.html -[animation controllers]: {{site.api}}/flutter/animation/AnimationController-class.html -[`AnimationController`]: {{site.api}}/flutter/animation/AnimationController-class.html -[`AnimatedBuilder`]: {{site.api}}/flutter/widgets/AnimatedBuilder-class.html +[`Animation`]: {{site.api}}flutter/animation/Animation-class.html +[animation controllers]: {{site.api}}flutter/animation/AnimationController-class.html +[`AnimationController`]: {{site.api}}flutter/animation/AnimationController-class.html +[`AnimatedBuilder`]: {{site.api}}flutter/widgets/AnimatedBuilder-class.html [Animations in Flutter tutorial]: /ui/animations/tutorial -[basic_staggered_animation]: {{site.repo.this}}/tree/{{site.branch}}/examples/_animation/basic_staggered_animation +[basic_staggered_animation]: {{site.repo.this}}tree/{{site.branch}}/examples/_animation/basic_staggered_animation [Building Layouts in Flutter]: /ui/layout -[staggered_pic_selection]: {{site.repo.this}}/tree/{{site.branch}}/examples/_animation/staggered_pic_selection -[`CurvedAnimation`]: {{site.api}}/flutter/animation/CurvedAnimation-class.html -[`Curves`]: {{site.api}}/flutter/animation/Curves-class.html -[Full code for basic_staggered_animation's main.dart]: {{site.repo.this}}/tree/{{site.branch}}/examples/_animation/basic_staggered_animation/lib/main.dart -[`Interval`]: {{site.api}}/flutter/animation/Interval-class.html -[`Tween`]: {{site.api}}/flutter/animation/Tween-class.html +[staggered_pic_selection]: {{site.repo.this}}tree/{{site.branch}}/examples/_animation/staggered_pic_selection +[`CurvedAnimation`]: {{site.api}}flutter/animation/CurvedAnimation-class.html +[`Curves`]: {{site.api}}flutter/animation/Curves-class.html +[Full code for basic_staggered_animation's main.dart]: {{site.repo.this}}tree/{{site.branch}}/examples/_animation/basic_staggered_animation/lib/main.dart +[`Interval`]: {{site.api}}flutter/animation/Interval-class.html +[`Tween`]: {{site.api}}flutter/animation/Tween-class.html diff --git a/src/content/ui/animations/tutorial.md b/src/content/ui/animations/tutorial.md index 75af3c4769..f915ed3865 100644 --- a/src/content/ui/animations/tutorial.md +++ b/src/content/ui/animations/tutorial.md @@ -11,7 +11,7 @@ diff2html: true --- {% assign api = site.api | append: '/flutter' -%} -{% capture examples -%} {{site.repo.this}}/tree/{{site.branch}}/examples {%- endcapture -%} +{% capture examples -%} {{site.repo.this}}tree/{{site.branch}}/examples {%- endcapture -%} @@ -1341,23 +1341,23 @@ for the latest available documents and examples. [animate3]: {{examples}}/animation/animate3 [animate4]: {{examples}}/animation/animate4 [animate5]: {{examples}}/animation/animate5 -[`AnimatedWidget`]: {{site.api}}/flutter/widgets/AnimatedWidget-class.html -[`Animatable`]: {{site.api}}/flutter/animation/Animatable-class.html -[`Animation`]: {{site.api}}/flutter/animation/Animation-class.html -[`AnimatedBuilder`]: {{site.api}}/flutter/widgets/AnimatedBuilder-class.html +[`AnimatedWidget`]: {{site.api}}flutter/widgets/AnimatedWidget-class.html +[`Animatable`]: {{site.api}}flutter/animation/Animatable-class.html +[`Animation`]: {{site.api}}flutter/animation/Animation-class.html +[`AnimatedBuilder`]: {{site.api}}flutter/widgets/AnimatedBuilder-class.html [animations landing page]: /ui/animations -[`AnimationController`]: {{site.api}}/flutter/animation/AnimationController-class.html +[`AnimationController`]: {{site.api}}flutter/animation/AnimationController-class.html [`AnimationController` section]: #animationcontroller -[`Curves`]: {{site.api}}/flutter/animation/Curves-class.html -[`CurvedAnimation`]: {{site.api}}/flutter/animation/CurvedAnimation-class.html -[Cascade notation]: {{site.dart-site}}/language/operators#cascade-notation -[Dart language documentation]: {{site.dart-site}}/language -[`evaluate(Animation animation)`]: {{site.api}}/flutter/animation/Animation/value.html -[`FadeTransition`]: {{site.api}}/flutter/widgets/FadeTransition-class.html +[`Curves`]: {{site.api}}flutter/animation/Curves-class.html +[`CurvedAnimation`]: {{site.api}}flutter/animation/CurvedAnimation-class.html +[Cascade notation]: {{site.dart-site}}language/operators#cascade-notation +[Dart language documentation]: {{site.dart-site}}language +[`evaluate(Animation animation)`]: {{site.api}}flutter/animation/Animation/value.html +[`FadeTransition`]: {{site.api}}flutter/widgets/FadeTransition-class.html [Monitoring the progress of the animation]: #monitoring [Refactoring with AnimatedBuilder]: #refactoring-with-animatedbuilder -[`RepaintBoundary`]: {{site.api}}/flutter/widgets/RepaintBoundary-class.html -[`SlideTransition`]: {{site.api}}/flutter/widgets/SlideTransition-class.html +[`RepaintBoundary`]: {{site.api}}flutter/widgets/RepaintBoundary-class.html +[`SlideTransition`]: {{site.api}}flutter/widgets/SlideTransition-class.html [Simplifying with AnimatedWidget]: #simplifying-with-animatedwidget -[`SizeTransition`]: {{site.api}}/flutter/widgets/SizeTransition-class.html -[`Tween`]: {{site.api}}/flutter/animation/Tween-class.html +[`SizeTransition`]: {{site.api}}flutter/widgets/SizeTransition-class.html +[`Tween`]: {{site.api}}flutter/animation/Tween-class.html diff --git a/src/content/ui/assets/asset-transformation.md b/src/content/ui/assets/asset-transformation.md index 60874da096..77fa9d89a6 100644 --- a/src/content/ui/assets/asset-transformation.md +++ b/src/content/ui/assets/asset-transformation.md @@ -85,8 +85,8 @@ For a sample Flutter project that uses asset transformation and includes a custo Dart package that is used as a transformer, check out the [asset_transformers project in the Flutter samples repo][]. -[command-line app]: {{site.dart-site}}/tutorials/server/cmdline -[asset_transformers project in the Flutter samples repo]: {{site.repo.samples}}/tree/main/asset_transformation -[`vector_graphics_compiler`]: {{site.pub}}/packages/vector_graphics_compiler -[`vector_graphics`]: {{site.pub}}//packages/vector_graphics -[`stderr`]: {{site.api}}/flutter/dart-io/Process/stderr.html +[command-line app]: {{site.dart-site}}tutorials/server/cmdline +[asset_transformers project in the Flutter samples repo]: {{site.repo.samples}}tree/main/asset_transformation +[`vector_graphics_compiler`]: {{site.pub-pkg}}vector_graphics_compiler +[`vector_graphics`]: {{site.pub}}/packages/vector_graphics +[`stderr`]: {{site.api}}flutter/dart-io/Process/stderr.html diff --git a/src/content/ui/assets/assets-and-images.md b/src/content/ui/assets/assets-and-images.md index 80c064c2d0..540724aa58 100644 --- a/src/content/ui/assets/assets-and-images.md +++ b/src/content/ui/assets/assets-and-images.md @@ -669,8 +669,8 @@ the launch screen persists forever. ::: -[`FlutterView.render()`]: {{site.api}}/flutter/dart-ui/FlutterView/render.html -[`PlatformDispatcher.onDrawFrame`]: {{site.api}}/flutter/dart-ui/PlatformDispatcher/onDrawFrame.html +[`FlutterView.render()`]: {{site.api}}flutter/dart-ui/FlutterView/render.html +[`PlatformDispatcher.onDrawFrame`]: {{site.api}}flutter/dart-ui/PlatformDispatcher/onDrawFrame.html #### Android @@ -734,32 +734,32 @@ For more details, see [add-to-app]: /add-to-app/ios [Adding a splash screen to your Android app]: /platform-integration/android/splash-screen [Adding a splash screen to your iOS app]: /platform-integration/ios/launch-screen -[`AssetBundle`]: {{site.api}}/flutter/services/AssetBundle-class.html -[`AssetImage`]: {{site.api}}/flutter/painting/AssetImage-class.html -[`DefaultAssetBundle`]: {{site.api}}/flutter/widgets/DefaultAssetBundle-class.html -[`ImageCache`]: {{site.api}}/flutter/painting/ImageCache-class.html -[`ImageStream`]: {{site.api}}/flutter/painting/ImageStream-class.html -[Android Developer Guide]: {{site.android-dev}}/training/multiscreen/screendensities -[`AssetManager`]: {{site.android-dev}}/reference/android/content/res/AssetManager -[device pixel ratio]: {{site.api}}/flutter/dart-ui/FlutterView/devicePixelRatio.html -[Device pixel ratio]: {{site.api}}/flutter/dart-ui/FlutterView/devicePixelRatio.html -[drawables]: {{site.android-dev}}/guide/topics/resources/drawable-resource -[`FlutterPluginRegistrar`]: {{site.api}}/ios-embedder/protocol_flutter_plugin_registrar-p.html -[`FlutterView`]: {{site.api}}/javadoc/io/flutter/view/FlutterView.html -[`FlutterViewController`]: {{site.api}}/ios-embedder/interface_flutter_view_controller.html -[Human Interface Guidelines]: {{site.apple-dev}}/design/human-interface-guidelines/app-icons -[`ios_platform_images`]: {{site.pub}}/packages/ios_platform_images -[layer list drawable]: {{site.android-dev}}/guide/topics/resources/drawable-resource#LayerList -[`mainBundle`]: {{site.apple-dev}}/documentation/foundation/nsbundle/1410786-mainbundle -[`openFd`]: {{site.android-dev}}/reference/android/content/res/AssetManager#openFd(java.lang.String) +[`AssetBundle`]: {{site.api}}flutter/services/AssetBundle-class.html +[`AssetImage`]: {{site.api}}flutter/painting/AssetImage-class.html +[`DefaultAssetBundle`]: {{site.api}}flutter/widgets/DefaultAssetBundle-class.html +[`ImageCache`]: {{site.api}}flutter/painting/ImageCache-class.html +[`ImageStream`]: {{site.api}}flutter/painting/ImageStream-class.html +[Android Developer Guide]: {{site.android-dev}}training/multiscreen/screendensities +[`AssetManager`]: {{site.android-dev}}reference/android/content/res/AssetManager +[device pixel ratio]: {{site.api}}flutter/dart-ui/FlutterView/devicePixelRatio.html +[Device pixel ratio]: {{site.api}}flutter/dart-ui/FlutterView/devicePixelRatio.html +[drawables]: {{site.android-dev}}guide/topics/resources/drawable-resource +[`FlutterPluginRegistrar`]: {{site.api}}ios-embedder/protocol_flutter_plugin_registrar-p.html +[`FlutterView`]: {{site.api}}javadoc/io/flutter/view/FlutterView.html +[`FlutterViewController`]: {{site.api}}ios-embedder/interface_flutter_view_controller.html +[Human Interface Guidelines]: {{site.apple-dev}}design/human-interface-guidelines/app-icons +[`ios_platform_images`]: {{site.pub-pkg}}ios_platform_images +[layer list drawable]: {{site.android-dev}}guide/topics/resources/drawable-resource#LayerList +[`mainBundle`]: {{site.apple-dev}}documentation/foundation/nsbundle/1410786-mainbundle +[`openFd`]: {{site.android-dev}}reference/android/content/res/AssetManager#openFd(java.lang.String) [package]: /packages-and-plugins/using-packages -[`pathForResource:ofType:`]: {{site.apple-dev}}/documentation/foundation/nsbundle/1410989-pathforresource -[`PluginRegistry.Registrar`]: {{site.api}}/javadoc/io/flutter/plugin/common/PluginRegistry.Registrar.html -[`pubspec.yaml`]: {{site.dart-site}}/tools/pub/pubspec -[`rootBundle`]: {{site.api}}/flutter/services/rootBundle.html -[`runApp()`]: {{site.api}}/flutter/widgets/runApp.html -[`video_player` plugin]: {{site.pub}}/packages/video_player -[MediaQueryData.size]: {{site.api}}/flutter/widgets/MediaQueryData/size.html -[MaterialApp]: {{site.api}}/flutter/material/MaterialApp-class.html -[CupertinoApp]: {{site.api}}/flutter/cupertino/CupertinoApp-class.html +[`pathForResource:ofType:`]: {{site.apple-dev}}documentation/foundation/nsbundle/1410989-pathforresource +[`PluginRegistry.Registrar`]: {{site.api}}javadoc/io/flutter/plugin/common/PluginRegistry.Registrar.html +[`pubspec.yaml`]: {{site.dart-site}}tools/pub/pubspec +[`rootBundle`]: {{site.api}}flutter/services/rootBundle.html +[`runApp()`]: {{site.api}}flutter/widgets/runApp.html +[`video_player` plugin]: {{site.pub-pkg}}video_player +[MediaQueryData.size]: {{site.api}}flutter/widgets/MediaQueryData/size.html +[MaterialApp]: {{site.api}}flutter/material/MaterialApp-class.html +[CupertinoApp]: {{site.api}}flutter/cupertino/CupertinoApp-class.html [Transforming assets at build time]: /ui/assets/asset-transformation diff --git a/src/content/ui/design/graphics/fragment-shaders.md b/src/content/ui/design/graphics/fragment-shaders.md index fba835b73f..f3ddee2c32 100644 --- a/src/content/ui/design/graphics/fragment-shaders.md +++ b/src/content/ui/design/graphics/fragment-shaders.md @@ -22,7 +22,7 @@ Custom shaders are added to a Flutter project by listing them in the `pubspec.yaml` file, and obtained using the [`FragmentProgram`][] API. -[`FragmentProgram`]: {{site.api}}/flutter/dart-ui/FragmentProgram-class.html +[`FragmentProgram`]: {{site.api}}flutter/dart-ui/FragmentProgram-class.html ## Adding shaders to an application @@ -54,7 +54,7 @@ use the [`FragmentProgram.fromAsset`][] constructor. The asset's name is the same as the path to the shader given in the `pubspec.yaml` file. -[`FragmentProgram.fromAsset`]: {{site.api}}/flutter/dart-ui/FragmentProgram/fromAsset.html +[`FragmentProgram.fromAsset`]: {{site.api}}flutter/dart-ui/FragmentProgram/fromAsset.html ```dart void loadMyShader() async { @@ -68,7 +68,7 @@ A `FragmentShader` object represents a fragment program along with a particular set of _uniforms_ (configuration parameters). The available uniforms depends on how the shader was defined. -[`FragmentShader`]: {{site.api}}/flutter/dart-ui/FragmentShader-class.html +[`FragmentShader`]: {{site.api}}flutter/dart-ui/FragmentShader-class.html ```dart void updateShader(Canvas canvas, Rect rect, FragmentProgram program) { @@ -88,10 +88,10 @@ For an API like [`Canvas.drawPath`][] with a stroked path, the shader is evaluated for all fragments within the stroked line. Some APIs, such as [`Canvas.drawImage`][], ignore the value of the shader. -[`Canvas.drawImage`]: {{site.api}}/flutter/dart-ui/Canvas/drawImage.html -[`Canvas.drawRect`]: {{site.api}}/flutter/dart-ui/Canvas/drawRect.html -[`Canvas.drawPath`]: {{site.api}}/flutter/dart-ui/Canvas/drawPath.html -[`Paint.shader`]: {{site.api}}/flutter/dart-ui/Paint/shader.html +[`Canvas.drawImage`]: {{site.api}}flutter/dart-ui/Canvas/drawImage.html +[`Canvas.drawRect`]: {{site.api}}flutter/dart-ui/Canvas/drawRect.html +[`Canvas.drawPath`]: {{site.api}}flutter/dart-ui/Canvas/drawPath.html +[`Paint.shader`]: {{site.api}}flutter/dart-ui/Paint/shader.html ```dart void paint(Canvas canvas, Size size, FragmentShader shader) { @@ -152,8 +152,8 @@ that the uniform values are defined in the fragment program. For data types composed of multiple floats, such as a `vec4`, you must call [`FragmentShader.setFloat`][] once for each value. -[`FragmentShader.setFloat`]: {{site.api}}/flutter/dart-ui/FragmentShader/setFloat.html -[`FragmentShader.setImageSampler`]: {{site.api}}/flutter/dart-ui/FragmentShader/setImageSampler.html +[`FragmentShader.setFloat`]: {{site.api}}flutter/dart-ui/FragmentShader/setFloat.html +[`FragmentShader.setImageSampler`]: {{site.api}}flutter/dart-ui/FragmentShader/setImageSampler.html For example, given the following uniforms declarations in a GLSL fragment program: @@ -233,8 +233,8 @@ This image can be acquired either from a decoded image or from part of the application using [`Scene.toImageSync`][] or [`Picture.toImageSync`][]. -[`Picture.toImageSync`]: {{site.api}}/flutter/dart-ui/Picture/toImageSync.html -[`Scene.toImageSync`]: {{site.api}}/flutter/dart-ui/Scene/toImageSync.html +[`Picture.toImageSync`]: {{site.api}}flutter/dart-ui/Picture/toImageSync.html +[`Scene.toImageSync`]: {{site.api}}flutter/dart-ui/Scene/toImageSync.html ```glsl #include @@ -256,7 +256,7 @@ of the range of `[0, 1]` behave. Customization of the tile mode is not supported and needs to be emulated in the shader. -[`TileMode.clamp`]: {{site.api}}/flutter/dart-ui/TileMode.html +[`TileMode.clamp`]: {{site.api}}flutter/dart-ui/TileMode.html ### Performance considerations @@ -276,7 +276,7 @@ For a more detailed guide on writing performant shaders, check out [Writing efficient shaders][] on GitHub. [Shader compilation jank]: /perf/shader -[Writing efficient shaders]: {{site.repo.engine}}/blob/main/impeller/docs/shader_optimization.md +[Writing efficient shaders]: {{site.repo.engine}}blob/main/impeller/docs/shader_optimization.md ### Other resources @@ -288,5 +288,5 @@ For more information, here are a few resources. [Shader toy]: https://www.shadertoy.com/ [The Book of Shaders]: https://thebookofshaders.com/ -[`simple_shader`]: {{site.repo.samples}}/tree/main/simple_shader +[`simple_shader`]: {{site.repo.samples}}tree/main/simple_shader diff --git a/src/content/ui/design/material/index.md b/src/content/ui/design/material/index.md index f012148d1c..6d5640fbe3 100644 --- a/src/content/ui/design/material/index.md +++ b/src/content/ui/design/material/index.md @@ -31,11 +31,11 @@ the UI might look or act a bit strange. You can find the entirely new Material components by visiting the [Affected widgets][] page. -[Affected widgets]: {{site.api}}/flutter/material/ThemeData/useMaterial3.html#affected-widgets +[Affected widgets]: {{site.api}}flutter/material/ThemeData/useMaterial3.html#affected-widgets [deprecation policy]: /release/compatibility-policy#deprecation-policy [demo]: https://flutter.github.io/samples/web/material_3_demo/#/ -[`NavigationBar`]: {{site.api}}/flutter/material/NavigationBar-class.html -[`useMaterial3`]: {{site.api}}/flutter/material/ThemeData/useMaterial3.html +[`NavigationBar`]: {{site.api}}flutter/material/NavigationBar-class.html +[`useMaterial3`]: {{site.api}}flutter/material/ThemeData/useMaterial3.html Explore the updated components, typography, color system, and elevation support with the @@ -52,6 +52,6 @@ check out: * [Migrating a Flutter app to Material 3][] blog post by Taha Tesser * [Umbrella issue on GitHub][] -[Material.io developer documentation]: {{site.material}}/develop/flutter +[Material.io developer documentation]: {{site.material}}develop/flutter [Migrating a Flutter app to Material 3]: https://blog.codemagic.io/migrating-a-flutter-app-to-material-3/ -[Umbrella issue on GitHub]: {{site.github}}//flutter/flutter/issues/91605 +[Umbrella issue on GitHub]: {{site.github}}/flutter/flutter/issues/91605 diff --git a/src/content/ui/design/text/typography.md b/src/content/ui/design/text/typography.md index f69a498037..316b2671db 100644 --- a/src/content/ui/design/text/typography.md +++ b/src/content/ui/design/text/typography.md @@ -62,7 +62,7 @@ use the [`FontVariation`][] class to modify the font's design axes. The `FontVariation` class conforms to the [OpenType font variables spec][]. -[`FontVariation`]: {{site.api}}/flutter/dart-ui/FontVariation-class.html +[`FontVariation`]: {{site.api}}flutter/dart-ui/FontVariation-class.html [Google Fonts]: https://fonts.google.com/ [OpenType font variables spec]: https://learn.microsoft.com/en-us/typography/opentype/spec/otvaroverview @@ -112,9 +112,9 @@ The following example is for CSS, but illustrates the concept: Example feature tags in CSS -[`FontFeature`]: {{site.api}}/flutter/dart-ui/FontFeature-class.html -[`FontStyle`]: {{site.api}}/flutter/dart-ui/FontStyle.html -[`FontWeight`]: {{site.api}}/flutter/dart-ui/FontWeight-class.html +[`FontFeature`]: {{site.api}}flutter/dart-ui/FontFeature-class.html +[`FontStyle`]: {{site.api}}flutter/dart-ui/FontStyle.html +[`FontWeight`]: {{site.api}}flutter/dart-ui/FontWeight-class.html [OpenType feature tag]: https://learn.microsoft.com/en-us/typography/opentype/spec/featuretags ## Other resources @@ -135,4 +135,4 @@ check out [Playful typography with Flutter][article], a free article on Medium. The associated example also uses a custom shader. -[article]: {{site.flutter-medium}}/playful-typography-with-flutter-f030385058b4 +[article]: {{site.flutter-medium}}playful-typography-with-flutter-f030385058b4 diff --git a/src/content/ui/index.md b/src/content/ui/index.md index fb59321af1..53c118edd9 100644 --- a/src/content/ui/index.md +++ b/src/content/ui/index.md @@ -916,7 +916,7 @@ For more information, check out the [`GlobalKey`][] API. [`didUpdateWidget()`]: {{api}}/widgets/State-class.html#didUpdateWidget [`dispose()`]: {{api}}/widgets/State-class.html#dispose [`Expanded`]: {{api}}/widgets/Expanded-class.html -[`final`]: {{site.dart-site}}/language/variables#final-and-const +[`final`]: {{site.dart-site}}language/variables#final-and-const [`flex`]: {{api}}/widgets/Expanded-class.html#flex [`FloatingActionButton`]: {{api}}/material/FloatingActionButton-class.html [Gestures in Flutter]: /ui/interactivity/gestures diff --git a/src/content/ui/interactivity/actions-and-shortcuts.md b/src/content/ui/interactivity/actions-and-shortcuts.md index 535d511180..3782a72281 100644 --- a/src/content/ui/interactivity/actions-and-shortcuts.md +++ b/src/content/ui/interactivity/actions-and-shortcuts.md @@ -627,10 +627,10 @@ void main() => runApp(const MyApp()); ``` -[`Action`]: {{site.api}}/flutter/widgets/Action-class.html -[`Actions`]: {{site.api}}/flutter/widgets/Actions-class.html -[`CallbackAction`]: {{site.api}}/flutter/widgets/CallbackAction-class.html -[`CallbackShortcuts`]: {{site.api}}/flutter/widgets/CallbackShortcuts-class.html -[`Intent`]: {{site.api}}/flutter/widgets/Intent-class.html -[`Shortcuts`]: {{site.api}}/flutter/widgets/Shortcuts-class.html +[`Action`]: {{site.api}}flutter/widgets/Action-class.html +[`Actions`]: {{site.api}}flutter/widgets/Actions-class.html +[`CallbackAction`]: {{site.api}}flutter/widgets/CallbackAction-class.html +[`CallbackShortcuts`]: {{site.api}}flutter/widgets/CallbackShortcuts-class.html +[`Intent`]: {{site.api}}flutter/widgets/Intent-class.html +[`Shortcuts`]: {{site.api}}flutter/widgets/Shortcuts-class.html [Using Shortcuts Diagram]: /assets/images/docs/using_shortcuts.png diff --git a/src/content/ui/interactivity/focus.md b/src/content/ui/interactivity/focus.md index 930bd6c552..d67b791d16 100644 --- a/src/content/ui/interactivity/focus.md +++ b/src/content/ui/interactivity/focus.md @@ -548,23 +548,23 @@ information, so you only need it if you're writing your own controls from scratch. You can use `addHighlightModeListener` callback to listen for changes in the highlight mode. -[`Actions`]: {{site.api}}/flutter/widgets/Actions-class.html -[`Builder`]: {{site.api}}/flutter/widgets/Builder-class.html -[`DirectionalFocusTraversalPolicyMixin`]: {{site.api}}/flutter/widgets/DirectionalFocusTraversalPolicyMixin-mixin.html -[`Focus`]: {{site.api}}/flutter/widgets/Focus-class.html -[`FocusableActionDetector`]: {{site.api}}/flutter/widgets/FocusableActionDetector-class.html -[`FocusManager`]: {{site.api}}/flutter/widgets/FocusManager-class.html -[`FocusNode`]: {{site.api}}/flutter/widgets/FocusNode-class.html -[`FocusOrder`]: {{site.api}}/flutter/widgets/FocusOrder-class.html -[`FocusScope`]: {{site.api}}/flutter/widgets/FocusScope-class.html -[`FocusScopeNode`]: {{site.api}}/flutter/widgets/FocusScopeNode-class.html -[`FocusTraversalGroup`]: {{site.api}}/flutter/widgets/FocusTraversalGroup-class.html -[`FocusTraversalOrder`]: {{site.api}}/flutter/widgets/FocusTraversalOrder-class.html -[`FocusTraversalPolicy`]: {{site.api}}/flutter/widgets/FocusTraversalPolicy-class.html -[`LexicalFocusOrder`]: {{site.api}}/flutter/widgets/LexicalFocusOrder-class.html -[`MouseRegion`]: {{site.api}}/flutter/widgets/MouseRegion-class.html -[`NumericFocusOrder`]: {{site.api}}/flutter/widgets/NumericFocusOrder-class.html -[`OrderedTraversalPolicy`]: {{site.api}}/flutter/widgets/OrderedTraversalPolicy-class.html -[`ReadingOrderTraversalPolicy`]: {{site.api}}/flutter/widgets/ReadingOrderTraversalPolicy-class.html -[`Shortcuts`]: {{site.api}}/flutter/widgets/Shortcuts-class.html -[`UnfocusDisposition.scope`]: {{site.api}}/flutter/widgets/UnfocusDisposition.html +[`Actions`]: {{site.api}}flutter/widgets/Actions-class.html +[`Builder`]: {{site.api}}flutter/widgets/Builder-class.html +[`DirectionalFocusTraversalPolicyMixin`]: {{site.api}}flutter/widgets/DirectionalFocusTraversalPolicyMixin-mixin.html +[`Focus`]: {{site.api}}flutter/widgets/Focus-class.html +[`FocusableActionDetector`]: {{site.api}}flutter/widgets/FocusableActionDetector-class.html +[`FocusManager`]: {{site.api}}flutter/widgets/FocusManager-class.html +[`FocusNode`]: {{site.api}}flutter/widgets/FocusNode-class.html +[`FocusOrder`]: {{site.api}}flutter/widgets/FocusOrder-class.html +[`FocusScope`]: {{site.api}}flutter/widgets/FocusScope-class.html +[`FocusScopeNode`]: {{site.api}}flutter/widgets/FocusScopeNode-class.html +[`FocusTraversalGroup`]: {{site.api}}flutter/widgets/FocusTraversalGroup-class.html +[`FocusTraversalOrder`]: {{site.api}}flutter/widgets/FocusTraversalOrder-class.html +[`FocusTraversalPolicy`]: {{site.api}}flutter/widgets/FocusTraversalPolicy-class.html +[`LexicalFocusOrder`]: {{site.api}}flutter/widgets/LexicalFocusOrder-class.html +[`MouseRegion`]: {{site.api}}flutter/widgets/MouseRegion-class.html +[`NumericFocusOrder`]: {{site.api}}flutter/widgets/NumericFocusOrder-class.html +[`OrderedTraversalPolicy`]: {{site.api}}flutter/widgets/OrderedTraversalPolicy-class.html +[`ReadingOrderTraversalPolicy`]: {{site.api}}flutter/widgets/ReadingOrderTraversalPolicy-class.html +[`Shortcuts`]: {{site.api}}flutter/widgets/Shortcuts-class.html +[`UnfocusDisposition.scope`]: {{site.api}}flutter/widgets/UnfocusDisposition.html diff --git a/src/content/ui/interactivity/gestures/drag-outside.md b/src/content/ui/interactivity/gestures/drag-outside.md index 155b7d780a..5bef9d8848 100644 --- a/src/content/ui/interactivity/gestures/drag-outside.md +++ b/src/content/ui/interactivity/gestures/drag-outside.md @@ -12,7 +12,7 @@ Flutter widgets and the other uses a package ([super_drag_and_drop][]), available on [pub.dev][]. [pub.dev]: {{site.pub}} -[super_drag_and_drop]: {{site.pub-pkg}}/super_drag_and_drop +[super_drag_and_drop]: {{site.pub-pkg}}super_drag_and_drop ## Create draggable widgets within your app @@ -28,9 +28,9 @@ For more information, check out the [`Draggable` widget of the week][video] video. [Drag a UI element within an app]: /cookbook/effects/drag-a-widget -[`Draggable`]: {{site.api}}/flutter/widgets/Draggable-class.html -[`DragTarget`]: {{site.api}}/flutter/widgets/DragTarget-class.html -[local data]: {{site.pub-api}}/super_drag_and_drop/latest/super_drag_and_drop/DragItem/localData.html +[`Draggable`]: {{site.api}}flutter/widgets/Draggable-class.html +[`DragTarget`]: {{site.api}}flutter/widgets/DragTarget-class.html +[local data]: {{site.pub-api}}super_drag_and_drop/latest/super_drag_and_drop/DragItem/localData.html [video]: https://youtu.be/q4x2G_9-Mu0?si=T4679e90U2yrloCs ## Implement drag and drop between apps diff --git a/src/content/ui/interactivity/gestures/index.md b/src/content/ui/interactivity/gestures/index.md index 3d9a8e1e44..555dc6123d 100644 --- a/src/content/ui/interactivity/gestures/index.md +++ b/src/content/ui/interactivity/gestures/index.md @@ -81,14 +81,14 @@ To listen to pointer events directly from the widgets layer, use a [`Listener`][] widget. However, generally, consider using gestures (as discussed below) instead. -使用 [`Listener`]({{site.api}}/flutter/widgets/Listener-class.html) +使用 [`Listener`]({{site.api}}flutter/widgets/Listener-class.html) 可以在组件层直接监听指针事件。然而,一般情况下,请考虑使用下面的 gestures 替代。 -[`Listener`]: {{site.api}}/flutter/widgets/Listener-class.html -[`PointerCancelEvent`]: {{site.api}}/flutter/gestures/PointerCancelEvent-class.html -[`PointerDownEvent`]: {{site.api}}/flutter/gestures/PointerDownEvent-class.html -[`PointerMoveEvent`]: {{site.api}}/flutter/gestures/PointerMoveEvent-class.html -[`PointerUpEvent`]: {{site.api}}/flutter/gestures/PointerUpEvent-class.html +[`Listener`]: {{site.api}}flutter/widgets/Listener-class.html +[`PointerCancelEvent`]: {{site.api}}flutter/gestures/PointerCancelEvent-class.html +[`PointerDownEvent`]: {{site.api}}flutter/gestures/PointerDownEvent-class.html +[`PointerMoveEvent`]: {{site.api}}flutter/gestures/PointerMoveEvent-class.html +[`PointerUpEvent`]: {{site.api}}flutter/gestures/PointerUpEvent-class.html ## Gestures @@ -285,11 +285,11 @@ If you aren't using those widgets, but you want the [`ListView`][] 响应了滚动事件。如果使用了上述组件, 你也可以使用 [`InkWell`][] 来实现点击的“水波纹”效果。 -[`GestureDetector`]: {{site.api}}/flutter/widgets/GestureDetector-class.html -[`IconButton`]: {{site.api}}/flutter/material/IconButton-class.html -[`InkWell`]: {{site.api}}/flutter/material/InkWell-class.html -[`ListView`]: {{site.api}}/flutter/widgets/ListView-class.html -[`TextButton`]: {{site.api}}/flutter/material/TextButton-class.html +[`GestureDetector`]: {{site.api}}flutter/widgets/GestureDetector-class.html +[`IconButton`]: {{site.api}}flutter/material/IconButton-class.html +[`InkWell`]: {{site.api}}flutter/material/InkWell-class.html +[`ListView`]: {{site.api}}flutter/widgets/ListView-class.html +[`TextButton`]: {{site.api}}flutter/material/TextButton-class.html ### Gesture disambiguation diff --git a/src/content/ui/interactivity/index.md b/src/content/ui/interactivity/index.md index c4e6daf8a3..10a5719c55 100644 --- a/src/content/ui/interactivity/index.md +++ b/src/content/ui/interactivity/index.md @@ -458,9 +458,9 @@ check your code against the interactive lakes example on GitHub. TODO: replace the following links with tabbed code panes. {% endcomment -%} -* [`lib/main.dart`]({{site.repo.this}}/tree/{{site.branch}}/examples/layout/lakes/interactive/lib/main.dart) -* [`pubspec.yaml`]({{site.repo.this}}/tree/{{site.branch}}/examples/layout/lakes/interactive/pubspec.yaml) -* [`lakes.jpg`]({{site.repo.this}}/tree/{{site.branch}}/examples/layout/lakes/interactive/images/lake.jpg) +* [`lib/main.dart`]({{site.repo.this}}tree/{{site.branch}}/examples/layout/lakes/interactive/lib/main.dart) +* [`pubspec.yaml`]({{site.repo.this}}tree/{{site.branch}}/examples/layout/lakes/interactive/pubspec.yaml) +* [`lakes.jpg`]({{site.repo.this}}tree/{{site.branch}}/examples/layout/lakes/interactive/images/lake.jpg) If you still have questions, refer to any one of the developer [community][] channels. @@ -1120,49 +1120,49 @@ Wonderous app [running app][wonderous-app], [repo][wonderous-repo] 由 Google 工程师 Ian Hickson 讲解。 [Android emulator]: /get-started/install/windows/mobile?tab=virtual#configure-your-target-android-device -[`Checkbox`]: {{site.api}}/flutter/material/Checkbox-class.html -[`Cupertino`]: {{site.api}}/flutter/cupertino/cupertino-library.html -[Dart language documentation]: {{site.dart-site}}/language +[`Checkbox`]: {{site.api}}flutter/material/Checkbox-class.html +[`Cupertino`]: {{site.api}}flutter/cupertino/cupertino-library.html +[Dart language documentation]: {{site.dart-site}}language [Debugging Flutter apps]: /testing/debugging -[`DropdownButton`]: {{site.api}}/flutter/material/DropdownButton-class.html -[`TextButton`]: {{site.api}}/flutter/material/TextButton-class.html -[`FloatingActionButton`]: {{site.api}}/flutter/material/FloatingActionButton-class.html +[`DropdownButton`]: {{site.api}}flutter/material/DropdownButton-class.html +[`TextButton`]: {{site.api}}flutter/material/TextButton-class.html +[`FloatingActionButton`]: {{site.api}}flutter/material/FloatingActionButton-class.html [Flutter API documentation]: {{site.api}} [Flutter cookbook]: /cookbook [Flutter's Layered Design CN]: {{site.bili.video}}/BV1b441157vV [Flutter's Layered Design]: {{site.yt.watch}}?v=dkyY9WCGMi0 -[`FormField`]: {{site.api}}/flutter/widgets/FormField-class.html -[`Form`]: {{site.api}}/flutter/widgets/Form-class.html -[`GestureDetector`]: {{site.api}}/flutter/widgets/GestureDetector-class.html +[`FormField`]: {{site.api}}flutter/widgets/FormField-class.html +[`Form`]: {{site.api}}flutter/widgets/Form-class.html +[`GestureDetector`]: {{site.api}}flutter/widgets/GestureDetector-class.html [Gestures]: /cookbook/gestures [Gestures in Flutter]: /ui/interactivity/gestures [Handling gestures]: /ui#handling-gestures [new-flutter-app]: /get-started/test-drive -[`IconButton`]: {{site.api}}/flutter/material/IconButton-class.html -[`Icon`]: {{site.api}}/flutter/widgets/Icon-class.html -[`InkWell`]: {{site.api}}/flutter/material/InkWell-class.html +[`IconButton`]: {{site.api}}flutter/material/IconButton-class.html +[`Icon`]: {{site.api}}flutter/widgets/Icon-class.html +[`InkWell`]: {{site.api}}flutter/material/InkWell-class.html [iOS simulator]: /get-started/install/macos/mobile-ios#configure-your-target-ios-device [building layouts tutorial]: /ui/layout/tutorial [community]: {{site.main-url}}/community [Handle taps]: /cookbook/gestures/handling-taps [`lake.jpg`]: {{examples}}/layout/lakes/step6/images/lake.jpg -[Libraries and imports]: {{site.dart-site}}/language/libraries -[`ListView`]: {{site.api}}/flutter/widgets/ListView-class.html +[Libraries and imports]: {{site.dart-site}}language/libraries +[`ListView`]: {{site.api}}flutter/widgets/ListView-class.html [`main.dart`]: {{examples}}/layout/lakes/step6/lib/main.dart [Managing state]: #managing-state -[Material Design guidelines]: {{site.material}}/styles +[Material Design guidelines]: {{site.material}}styles [`pubspec.yaml`]: {{examples}}/layout/lakes/step6/pubspec.yaml -[`Radio`]: {{site.api}}/flutter/material/Radio-class.html -[`ElevatedButton`]: {{site.api}}/flutter/material/ElevatedButton-class.html -[wonderous-app]: {{site.wonderous}}/web +[`Radio`]: {{site.api}}flutter/material/Radio-class.html +[`ElevatedButton`]: {{site.api}}flutter/material/ElevatedButton-class.html +[wonderous-app]: {{site.wonderous}}web [wonderous-repo]: {{site.repo.wonderous}} [set up]: /get-started/install -[`SizedBox`]: {{site.api}}/flutter/widgets/SizedBox-class.html -[`Slider`]: {{site.api}}/flutter/material/Slider-class.html -[`State`]: {{site.api}}/flutter/widgets/State-class.html -[`StatefulWidget`]: {{site.api}}/flutter/widgets/StatefulWidget-class.html -[`StatelessWidget`]: {{site.api}}/flutter/widgets/StatelessWidget-class.html -[`Switch`]: {{site.api}}/flutter/material/Switch-class.html -[`TextField`]: {{site.api}}/flutter/material/TextField-class.html -[`Text`]: {{site.api}}/flutter/widgets/Text-class.html -[`widget`]: {{site.api}}/flutter/widgets/State/widget.html +[`SizedBox`]: {{site.api}}flutter/widgets/SizedBox-class.html +[`Slider`]: {{site.api}}flutter/material/Slider-class.html +[`State`]: {{site.api}}flutter/widgets/State-class.html +[`StatefulWidget`]: {{site.api}}flutter/widgets/StatefulWidget-class.html +[`StatelessWidget`]: {{site.api}}flutter/widgets/StatelessWidget-class.html +[`Switch`]: {{site.api}}flutter/material/Switch-class.html +[`TextField`]: {{site.api}}flutter/material/TextField-class.html +[`Text`]: {{site.api}}flutter/widgets/Text-class.html +[`widget`]: {{site.api}}flutter/widgets/State/widget.html diff --git a/src/content/ui/layout/constraints.md b/src/content/ui/layout/constraints.md index c0f1fe0171..a947b04086 100644 --- a/src/content/ui/layout/constraints.md +++ b/src/content/ui/layout/constraints.md @@ -253,15 +253,15 @@ as described in the [Flex](#flex) section. 其他像 [`Row`][] 和 [`Column`][](Flex 系列)这样的 widget 会根据它们的限制进行不同的布局。在 [Flex](#flex) 小节中有更详细的描述。 -[`Center`]: {{site.api}}/flutter/widgets/Center-class.html -[`Column`]: {{site.api}}/flutter/widgets/Column-class.html -[`Container`]: {{site.api}}/flutter/widgets/Container-class.html -[`Image`]: {{site.api}}/flutter/dart-ui/Image-class.html -[`ListView`]: {{site.api}}/flutter/widgets/ListView-class.html -[`Opacity`]: {{site.api}}/flutter/widgets/Opacity-class.html -[`Row`]: {{site.api}}/flutter/widgets/Row-class.html -[`Text`]: {{site.api}}/flutter/widgets/Text-class.html -[`Transform`]: {{site.api}}/flutter/widgets/Transform-class.html +[`Center`]: {{site.api}}flutter/widgets/Center-class.html +[`Column`]: {{site.api}}flutter/widgets/Column-class.html +[`Container`]: {{site.api}}flutter/widgets/Container-class.html +[`Image`]: {{site.api}}flutter/dart-ui/Image-class.html +[`ListView`]: {{site.api}}flutter/widgets/ListView-class.html +[`Opacity`]: {{site.api}}flutter/widgets/Opacity-class.html +[`Row`]: {{site.api}}flutter/widgets/Row-class.html +[`Text`]: {{site.api}}flutter/widgets/Text-class.html +[`Transform`]: {{site.api}}flutter/widgets/Transform-class.html ## Examples @@ -1410,7 +1410,7 @@ The examples are explained in the following sections. 以下各节将介绍这些示例。 -[this GitHub repo]: {{site.github}}/marcglasberg/flutter_layout_article +[this GitHub repo]: {{site.github}}marcglasberg/flutter_layout_article ### Example 1 @@ -2478,8 +2478,8 @@ but not bigger than the screen. 但是不能超出屏幕。`Center` 能够做到这一点的原因就在于 给 `Container` 的是一个宽松约束。 -[`build`]: {{site.api}}/flutter/widgets/State/build.html -[`RenderView`]: {{site.api}}/flutter/rendering/RenderView-class.html +[`build`]: {{site.api}}flutter/widgets/State/build.html +[`RenderView`]: {{site.api}}flutter/rendering/RenderView-class.html @@ -2543,10 +2543,10 @@ The _cross_ direction must _never_ be unbounded, or it can't reasonably align its children. -[`double.infinity`]: {{site.api}}/flutter/dart-core/double/infinity-constant.html -[`Expanded`]: {{site.api}}/flutter/widgets/Expanded-class.html -[`RenderBox`]: {{site.api}}/flutter/rendering/RenderBox-class.html -[`ScrollView`]: {{site.api}}/flutter/widgets/ScrollView-class.html +[`double.infinity`]: {{site.api}}flutter/dart-core/double/infinity-constant.html +[`Expanded`]: {{site.api}}flutter/widgets/Expanded-class.html +[`RenderBox`]: {{site.api}}flutter/rendering/RenderBox-class.html +[`ScrollView`]: {{site.api}}flutter/widgets/ScrollView-class.html ## Learning the layout rules for specific widgets @@ -2640,10 +2640,10 @@ header image at the top of the article. 同时,还要感谢 [Simon Lightfoot][] 创造了本文的标题图片。 -[article]: {{site.medium}}/flutter-community/flutter-the-advanced-layout-rule-even-beginners-must-know-edc9516d1a2 -[GitHub]: {{site.github}}/marcglasberg -[pub.dev]: {{site.pub}}/publishers/glasberg.dev/packages -[Simon Lightfoot]: {{site.github}}/slightfoot +[article]: {{site.medium}}flutter-community/flutter-the-advanced-layout-rule-even-beginners-must-know-edc9516d1a2 +[GitHub]: {{site.github}}marcglasberg +[pub.dev]: {{site.pub}}publishers/glasberg.dev/packages +[Simon Lightfoot]: {{site.github}}slightfoot :::note diff --git a/src/content/ui/layout/index.md b/src/content/ui/layout/index.md index 03ddb68127..3c983b4045 100644 --- a/src/content/ui/layout/index.md +++ b/src/content/ui/layout/index.md @@ -11,7 +11,7 @@ diff2html: true --- {% assign api = site.api | append: '/flutter' -%} -{% capture examples -%} {{site.repo.this}}/tree/{{site.branch}}/examples {%- endcapture -%} +{% capture examples -%} {{site.repo.this}}tree/{{site.branch}}/examples {%- endcapture -%} @@ -381,7 +381,7 @@ or you can build your own set of custom widgets. [`CupertinoColors`]: {{api}}/cupertino/CupertinoColors-class.html [`CupertinoThemeData`]: {{api}}/cupertino/CupertinoThemeData-class.html [`CupertinoNavigationBar`]: {{api}}/cupertino/CupertinoNavigationBar-class.html -[Apple's Human Interface Guidelines for iOS]: {{site.apple-dev}}/design/human-interface-guidelines/designing-for-ios +[Apple's Human Interface Guidelines for iOS]: {{site.apple-dev}}design/human-interface-guidelines/designing-for-ios #### Non-Material apps @@ -1869,7 +1869,7 @@ The following resources might help when writing layout code. [`Container`]: {{api}}/widgets/Container-class.html [`CrossAxisAlignment`]: {{api}}/rendering/CrossAxisAlignment.html [`DataTable`]: {{api}}/material/DataTable-class.html -[Elevation]: {{site.material}}/styles/elevation +[Elevation]: {{site.material}}styles/elevation [`Expanded`]: {{api}}/widgets/Expanded-class.html [Flutter in Focus]: {{site.yt.watch}}?v=wgTBLj7rMPM&list=PLjxrf2q8roU2HdJQDjJzOeO6J3FoFLWr2 [`GridView`]: {{api}}/widgets/GridView-class.html @@ -1882,9 +1882,9 @@ The following resources might help when writing layout code. [`ListTile`]: {{api}}/material/ListTile-class.html [`ListView`]: {{api}}/widgets/ListView-class.html [`MainAxisAlignment`]: {{api}}/rendering/MainAxisAlignment.html -[Material card]: {{site.material}}/components/cards -[Material Design]: {{site.material}}/styles -[Material 2 Design palette]: {{site.material2}}/design/color/the-color-system.html#tools-for-picking-colors +[Material card]: {{site.material}}components/cards +[Material Design]: {{site.material}}styles +[Material 2 Design palette]: {{site.material2}}design/color/the-color-system.html#tools-for-picking-colors [Material library]: {{api}}/material/material-library.html [pubspec file]: {{examples}}/layout/pavlova/pubspec.yaml [`pubspec.yaml` file]: {{examples}}/layout/row_column/pubspec.yaml @@ -1900,4 +1900,4 @@ The following resources might help when writing layout code. [Debugging layout issues visually]: /tools/devtools/inspector#debugging-layout-issues-visually [Understanding constraints]: /ui/layout/constraints [Using the Flutter inspector]: /tools/devtools/inspector -[Zero to One with Flutter]: {{site.medium}}/@mravn/zero-to-one-with-flutter-43b13fd7b354 +[Zero to One with Flutter]: {{site.medium}}@mravn/zero-to-one-with-flutter-43b13fd7b354 diff --git a/src/content/ui/layout/responsive/building-adaptive-apps.md b/src/content/ui/layout/responsive/building-adaptive-apps.md index 81ea2346ea..b07a0982a4 100644 --- a/src/content/ui/layout/responsive/building-adaptive-apps.md +++ b/src/content/ui/layout/responsive/building-adaptive-apps.md @@ -54,12 +54,12 @@ were built using the concepts described here. 指南将通过代码片段,详细说明三个类别的概念。 若你想了解这些概念的实际落地情况,可以参考 [Flokk][] 和 [Folio][] 示例。 -[Flokk]: {{site.github}}/gskinnerTeam/flokk -[Folio]: {{site.github}}/gskinnerTeam/flutter-folio +[Flokk]: {{site.github}}gskinnerTeam/flokk +[Folio]: {{site.github}}gskinnerTeam/flutter-folio -Original demo code for adaptive app development techniques from [flutter-adaptive-demo](https://github.com/gskinnerTeam/flutter-adaptive-demo). +Original demo code for adaptive app development techniques from [flutter-adaptive-demo]({{site.github}}gskinnerTeam/flutter-adaptive-demo). -你可以在 [flutter-adaptive-demo](https://github.com/gskinnerTeam/flutter-adaptive-demo) +你可以在 [flutter-adaptive-demo]({{site.github}}gskinnerTeam/flutter-adaptive-demo) 仓库找到这个自适应应用效果的原始示例。 ## Building adaptive layouts @@ -193,27 +193,27 @@ To see more available widgets and example code, see 查看 [布局 widgets][Layout widgets] 了解更多的 widgets 和代码示例。 -[`Align`]: {{site.api}}/flutter/widgets/Align-class.html -[`AspectRatio`]: {{site.api}}/flutter/widgets/AspectRatio-class.html -[`Column`]: {{site.api}}/flutter/widgets/Column-class.html -[`ConstrainedBox`]: {{site.api}}/flutter/widgets/ConstrainedBox-class.html -[`CustomMultiChildLayout`]: {{site.api}}/flutter/widgets/CustomMultiChildLayout-class.html -[`CustomScrollView`]: {{site.api}}/flutter/widgets/CustomScrollView-class.html -[`CustomSingleChildLayout`]: {{site.api}}/flutter/widgets/CustomSingleChildLayout-class.html -[`Expanded`]: {{site.api}}/flutter/widgets/Expanded-class.html -[`Flex`]: {{site.api}}/flutter/widgets/Flex-class.html -[`Flexible`]: {{site.api}}/flutter/widgets/Flexible-class.html -[`Flow`]: {{site.api}}/flutter/widgets/Flow-class.html -[`FractionallySizedBox`]: {{site.api}}/flutter/widgets/FractionallySizedBox-class.html -[`GridView`]: {{site.api}}/flutter/widgets/GridView-class.html +[`Align`]: {{site.api}}flutter/widgets/Align-class.html +[`AspectRatio`]: {{site.api}}flutter/widgets/AspectRatio-class.html +[`Column`]: {{site.api}}flutter/widgets/Column-class.html +[`ConstrainedBox`]: {{site.api}}flutter/widgets/ConstrainedBox-class.html +[`CustomMultiChildLayout`]: {{site.api}}flutter/widgets/CustomMultiChildLayout-class.html +[`CustomScrollView`]: {{site.api}}flutter/widgets/CustomScrollView-class.html +[`CustomSingleChildLayout`]: {{site.api}}flutter/widgets/CustomSingleChildLayout-class.html +[`Expanded`]: {{site.api}}flutter/widgets/Expanded-class.html +[`Flex`]: {{site.api}}flutter/widgets/Flex-class.html +[`Flexible`]: {{site.api}}flutter/widgets/Flexible-class.html +[`Flow`]: {{site.api}}flutter/widgets/Flow-class.html +[`FractionallySizedBox`]: {{site.api}}flutter/widgets/FractionallySizedBox-class.html +[`GridView`]: {{site.api}}flutter/widgets/GridView-class.html [Layout widgets]: /ui/widgets/layout -[`LayoutBuilder`]: {{site.api}}/flutter/widgets/LayoutBuilder-class.html -[`ListView`]: {{site.api}}/flutter/widgets/ListView-class.html -[`Row`]: {{site.api}}/flutter/widgets/Row-class.html -[`SingleChildScrollView`]: {{site.api}}/flutter/widgets/SingleChildScrollView-class.html -[`Stack`]: {{site.api}}/flutter/widgets/Stack-class.html -[`Table`]: {{site.api}}/flutter/widgets/Table-class.html -[`Wrap`]: {{site.api}}/flutter/widgets/Wrap-class.html +[`LayoutBuilder`]: {{site.api}}flutter/widgets/LayoutBuilder-class.html +[`ListView`]: {{site.api}}flutter/widgets/ListView-class.html +[`Row`]: {{site.api}}flutter/widgets/Row-class.html +[`SingleChildScrollView`]: {{site.api}}flutter/widgets/SingleChildScrollView-class.html +[`Stack`]: {{site.api}}flutter/widgets/Stack-class.html +[`Table`]: {{site.api}}flutter/widgets/Table-class.html +[`Wrap`]: {{site.api}}flutter/widgets/Wrap-class.html ### Visual density @@ -307,8 +307,8 @@ see the [Material Design guide][]. 你可以查看 [`VisualDensity`][] API 文档了解更多支持视觉密度的组件。 若想了解视觉密度的通用原则,请查看 [Material Design 指南][Material Design guide]。 -[Material Design guide]: {{site.material2}}/design/layout/applying-density.html#usage -[`VisualDensity`]: {{site.api}}/flutter/material/VisualDensity-class.html +[Material Design guide]: {{site.material2}}design/layout/applying-density.html#usage +[`VisualDensity`]: {{site.api}}flutter/material/VisualDensity-class.html ### Contextual layout @@ -520,7 +520,7 @@ Play Store policy and not the App Store's. 例如,与仅适用于 iOS 的插件交互, 或显示仅符合 Play Store 政策而非 App Store 政策的 widget。 -[`Platform`]: {{site.api}}/flutter/package-platform_platform/Platform-class.html +[`Platform`]: {{site.api}}flutter/package-platform_platform/Platform-class.html ### Single source of truth for styling @@ -782,7 +782,7 @@ return Listener( ); ``` -[`Listener`]: {{site.api}}/flutter/widgets/Listener-class.html +[`Listener`]: {{site.api}}flutter/widgets/Listener-class.html ### Tab traversal and focus interactions @@ -852,11 +852,11 @@ class _BasicActionDetectorState extends State { } ``` -[`Actions`]: {{site.api}}/flutter/widgets/Actions-class.html -[`Focus`]: {{site.api}}/flutter/widgets/Focus-class.html -[`FocusableActionDetector`]: {{site.api}}/flutter/widgets/FocusableActionDetector-class.html -[`MouseRegion`]: {{site.api}}/flutter/widgets/MouseRegion-class.html -[`Shortcuts`]: {{site.api}}/flutter/widgets/Shortcuts-class.html +[`Actions`]: {{site.api}}flutter/widgets/Actions-class.html +[`Focus`]: {{site.api}}flutter/widgets/Focus-class.html +[`FocusableActionDetector`]: {{site.api}}flutter/widgets/FocusableActionDetector-class.html +[`MouseRegion`]: {{site.api}}flutter/widgets/MouseRegion-class.html +[`Shortcuts`]: {{site.api}}flutter/widgets/Shortcuts-class.html #### Controlling traversal order @@ -896,7 +896,7 @@ Flutter 有几种内置的方法对 widget 和组别进行遍历,默认使用 你也可以创建另一个 `TraversalPolicy` 或创建一个自定义的规则, 对它进行定义。 -[`FocusTraversalGroup`]: {{site.api}}/flutter/widgets/FocusTraversalGroup-class.html +[`FocusTraversalGroup`]: {{site.api}}flutter/widgets/FocusTraversalGroup-class.html ### Keyboard accelerators @@ -1076,8 +1076,8 @@ might be typing in. 当你在为 `Delete` 键构建一个删除或退格行为的监听时,需要尤其注意, 因为用户可能会在 `TextField` 中输入内容时受到影响。 -[`HardwareKeyboard`]: {{site.api}}/flutter/services/HardwareKeyboard-class.html -[`KeyboardListener`]: {{site.api}}/flutter/widgets/KeyboardListener-class.html +[`HardwareKeyboard`]: {{site.api}}flutter/services/HardwareKeyboard-class.html +[`KeyboardListener`]: {{site.api}}flutter/widgets/KeyboardListener-class.html ### Mouse enter, exit, and hover @@ -1430,7 +1430,7 @@ return const SelectableText.rich( ); ``` -[`SelectableText`]: {{site.api}}/flutter/material/SelectableText-class.html +[`SelectableText`]: {{site.api}}flutter/material/SelectableText-class.html #### Title bars @@ -1462,7 +1462,7 @@ to different sections of the app. 因为它是基于 Flutter 的 widget 进行设置的。 如此一来,当你在应用内各个地方浏览时,标题栏都能以非常便捷的方式进行适配。 -[`bits_dojo`]: {{site.github}}/bitsdojo/bitsdojo_window +[`bits_dojo`]: {{site.github}}bitsdojo/bitsdojo_window #### Context menus and tooltips @@ -1552,12 +1552,12 @@ a feeling that something isn't quite right. 桌面用户会期望能够右键点击其中一些内容,当场进行编辑,悬浮时查看更多信息。 若你的应用并不包含这类交互,相关的用户群体可能会感到有些失望,或是认为某些地方不合理。 -[`anchored_popups`]: {{site.pub}}/packages/anchored_popups -[`context_menus`]: {{site.pub}}/packages/context_menus -[`custom_pop_up_menu`]: {{site.pub}}/packages/custom_pop_up_menu -[`flutter_portal`]: {{site.pub}}/packages/flutter_portal -[`super_tooltip`]: {{site.pub}}/packages/super_tooltip -[`Tooltip`]: {{site.api}}/flutter/material/Tooltip-class.html +[`anchored_popups`]: {{site.pub-pkg}}anchored_popups +[`context_menus`]: {{site.pub-pkg}}context_menus +[`custom_pop_up_menu`]: {{site.pub-pkg}}custom_pop_up_menu +[`flutter_portal`]: {{site.pub-pkg}}flutter_portal +[`super_tooltip`]: {{site.pub-pkg}}super_tooltip +[`Tooltip`]: {{site.api}}flutter/material/Tooltip-class.html #### Horizontal button order @@ -1698,9 +1698,9 @@ are: 使用 pub.dev 上一些 [预先实现的 package][pre-made list packages]。 -[`Draggable`]: {{site.api}}/flutter/widgets/Draggable-class.html -[`DragTarget`]: {{site.api}}/flutter/widgets/DragTarget-class.html -[pre-made list packages]: {{site.pub}}/packages?q=reorderable+list +[`Draggable`]: {{site.api}}flutter/widgets/Draggable-class.html +[`DragTarget`]: {{site.api}}flutter/widgets/DragTarget-class.html +[pre-made list packages]: {{site.pub-pkg}}?q=reorderable+list ### Educate yourself on basic usability principles @@ -1758,11 +1758,11 @@ Here are some resources to get you started: [屏幕大小和分界点][Machine sizes and breakpoints (Microsoft)] -[Build high quality apps (Android)]: {{site.android-dev}}/quality -[Material guidelines on applying layout]: {{site.material}}/foundations/layout/applying-layout/window-size-classes -[Material guidelines on canonical layouts]: {{site.material}}/foundations/layout/canonical-layouts/overview -[Human interface guidelines (Apple)]: {{site.apple-dev}}/design/human-interface-guidelines/ -[Material design for large screens]: {{site.material2}}/blog/material-design-for-large-screens +[Build high quality apps (Android)]: {{site.android-dev}}quality +[Material guidelines on applying layout]: {{site.material}}foundations/layout/applying-layout/window-size-classes +[Material guidelines on canonical layouts]: {{site.material}}foundations/layout/canonical-layouts/overview +[Human interface guidelines (Apple)]: {{site.apple-dev}}design/human-interface-guidelines/ +[Material design for large screens]: {{site.material2}}blog/material-design-for-large-screens [Machine sizes and breakpoints (Microsoft)]: https://docs.microsoft.com/en-us/windows/uwp/design/layout/screen-sizes-and-breakpoints-for-responsive-desig [Responsive design techniques (Microsoft)]: https://docs.microsoft.com/en-us/windows/uwp/design/layout/responsive-design -[UI design do's and don'ts (Apple)]: {{site.apple-dev}}/design/tips/ +[UI design do's and don'ts (Apple)]: {{site.apple-dev}}design/tips/ diff --git a/src/content/ui/layout/scrolling/index.md b/src/content/ui/layout/scrolling/index.md index fa03427423..fe7d692a53 100644 --- a/src/content/ui/layout/scrolling/index.md +++ b/src/content/ui/layout/scrolling/index.md @@ -32,8 +32,8 @@ more performant scrolling experience. For more information, check out [`ListView.builder`][] or [`GridView.builder`][]. -[`ListView.builder`]: {{site.api}}/flutter/widgets/ListView/ListView.builder.html -[`GridView.builder`]: {{site.api}}/flutter/widgets/GridView/GridView.builder.html +[`ListView.builder`]: {{site.api}}flutter/widgets/ListView/ListView.builder.html +[`GridView.builder`]: {{site.api}}flutter/widgets/GridView/GridView.builder.html ### Specialized scrollable widgets @@ -48,12 +48,12 @@ Turn the scrollable area into a wheel with [`ListWheelScrollView`][]! -[`DraggableScrollableSheet`]: {{site.api}}/flutter/widgets/DraggableScrollableSheet-class.html -[`GridView`]: {{site.api}}/flutter/widgets/GridView-class.html -[`ListView`]: {{site.api}}/flutter/widgets/ListView-class.html -[`ListWheelScrollView`]: {{site.api}}/flutter/widgets/ListWheelScrollView-class.html +[`DraggableScrollableSheet`]: {{site.api}}flutter/widgets/DraggableScrollableSheet-class.html +[`GridView`]: {{site.api}}flutter/widgets/GridView-class.html +[`ListView`]: {{site.api}}flutter/widgets/ListView-class.html +[`ListWheelScrollView`]: {{site.api}}flutter/widgets/ListWheelScrollView-class.html [scrolling page]: /ui/widgets/scrolling -[`SingleChildScrollView`]: {{site.api}}/flutter/widgets/SingleChildScrollView-class.html +[`SingleChildScrollView`]: {{site.api}}flutter/widgets/SingleChildScrollView-class.html {% comment %} Not yet, but coming. Two dimensional scrolling: @@ -79,7 +79,7 @@ For more information, check out [Using slivers to achieve fancy scrolling][] and the [Sliver classes][]. -[`CustomScrollView`]: {{site.api}}/flutter/widgets/CustomScrollView-class.html +[`CustomScrollView`]: {{site.api}}flutter/widgets/CustomScrollView-class.html [Sliver classes]: /ui/widgets/layout#Sliver%20widgets [Using slivers to achieve fancy scrolling]: /ui/layout/scrolling/slivers diff --git a/src/content/ui/layout/scrolling/slivers.md b/src/content/ui/layout/scrolling/slivers.md index dd1d98e0e4..95e643451e 100644 --- a/src/content/ui/layout/scrolling/slivers.md +++ b/src/content/ui/layout/scrolling/slivers.md @@ -95,12 +95,12 @@ check out these related API docs: * [`SliverGrid`][] * [`SliverList`][] -[`CustomScrollView`]: {{site.api}}/flutter/widgets/CustomScrollView-class.html +[`CustomScrollView`]: {{site.api}}flutter/widgets/CustomScrollView-class.html [sliver-app-bar-video]: {{site.yt.watch}}?v=R9C5KMJKluE -[`SliverAppBar`]: {{site.api}}/flutter/material/SliverAppBar-class.html -[`SliverGrid`]: {{site.api}}/flutter/widgets/SliverGrid-class.html +[`SliverAppBar`]: {{site.api}}flutter/material/SliverAppBar-class.html +[`SliverGrid`]: {{site.api}}flutter/widgets/SliverGrid-class.html [SliverList and SliverGrid]: {{site.yt.watch}}?v=ORiTTaVY6mM -[`SliverList`]: {{site.api}}/flutter/widgets/SliverList-class.html -[Slivers, DeMystified]: {{site.flutter-medium}}/slivers-demystified-6ff68ab0296f +[`SliverList`]: {{site.api}}flutter/widgets/SliverList-class.html +[Slivers, DeMystified]: {{site.flutter-medium}}slivers-demystified-6ff68ab0296f [Slivers explained - Making dynamic layouts]: {{site.bili.video}}/BV1EJ41197NB/ [The Boring Show]: {{site.yt.playlist}}PLOU2XLYxmsIK0r_D-zWcmJ1plIcDNnRkK diff --git a/src/content/ui/layout/tutorial.md b/src/content/ui/layout/tutorial.md index 29b2130a3c..89ccb9336c 100644 --- a/src/content/ui/layout/tutorial.md +++ b/src/content/ui/layout/tutorial.md @@ -273,7 +273,7 @@ These code updates change the app in the following ways. the top of the list. Elements in the `children` list display in array order on the screen from top to bottom. -[`SingleChildScrollView`]: {{site.api}}/flutter/widgets/SingleChildScrollView-class.html +[`SingleChildScrollView`]: {{site.api}}flutter/widgets/SingleChildScrollView-class.html ### Update the app to display the title section @@ -516,7 +516,7 @@ class TextSection extends StatelessWidget { By setting [`softWrap`][] to `true`, text lines fill the column width before wrapping at a word boundary. -[`softWrap`]: {{site.api}}/flutter/widgets/Text/softWrap.html +[`softWrap`]: {{site.api}}flutter/widgets/Text/softWrap.html ### Update the app to display the text section diff --git a/src/content/ui/navigation/deep-linking.md b/src/content/ui/navigation/deep-linking.md index db9443a2d7..2d1276bec5 100644 --- a/src/content/ui/navigation/deep-linking.md +++ b/src/content/ui/navigation/deep-linking.md @@ -94,11 +94,11 @@ introduction to the Router system. a step-by-step tutorial showing how to implement deep links in Flutter. [io-dl]: {{site.yt.watch}}?v=6RxuDcs6jVw&t=3s -[Learning Flutter's new navigation and routing system]: {{site.flutter-medium}}/learning-flutters-new-navigation-and-routing-system-7c9068155ade -[routes]: {{site.api}}/flutter/material/MaterialApp/routes.html -[onGenerateRoute]: {{site.api}}/flutter/material/MaterialApp/onGenerateRoute.html -[Router]: {{site.api}}/flutter/widgets/Router-class.html -[plugin-linking]: {{site.medium}}/flutter-community/deep-links-and-flutter-applications-how-to-handle-them-properly-8c9865af9283 +[Learning Flutter's new navigation and routing system]: {{site.flutter-medium}}learning-flutters-new-navigation-and-routing-system-7c9068155ade +[routes]: {{site.api}}flutter/material/MaterialApp/routes.html +[onGenerateRoute]: {{site.api}}flutter/material/MaterialApp/onGenerateRoute.html +[Router]: {{site.api}}flutter/widgets/Router-class.html +[plugin-linking]: {{site.medium}}flutter-community/deep-links-and-flutter-applications-how-to-handle-them-properly-8c9865af9283 [Flutter Deep Linking: The Ultimate Guide]: https://codewithandrea.com/articles/flutter-deep-links/ [configuring the URL strategy]: /ui/navigation/url-strategies diff --git a/src/content/ui/navigation/index.md b/src/content/ui/navigation/index.md index 22eb6afad6..3bfac22e04 100644 --- a/src/content/ui/navigation/index.md +++ b/src/content/ui/navigation/index.md @@ -169,16 +169,16 @@ resources: * The [Router design document][] contains the motivation and design of the Router` API. -[`Navigator`]: {{site.api}}/flutter/widgets/Navigator-class.html -[`Router`]: {{site.api}}/flutter/widgets/Router-class.html +[`Navigator`]: {{site.api}}flutter/widgets/Navigator-class.html +[`Router`]: {{site.api}}flutter/widgets/Router-class.html [Deep linking]: /ui/navigation/deep-linking [navigation recipes]: /cookbook#navigation -[`MaterialApp.routes`]: {{site.api}}/flutter/material/MaterialApp/routes.html +[`MaterialApp.routes`]: {{site.api}}flutter/material/MaterialApp/routes.html [Navigate with named routes]: /cookbook/navigation/named-routes -[go_router]: {{site.pub}}/packages/go_router -[`Page`]: {{site.api}}/flutter/widgets/Page-class.html -[`pages`]: {{site.api}}/flutter/widgets/Navigator/pages.html +[go_router]: {{site.pub-pkg}}go_router +[`Page`]: {{site.api}}flutter/widgets/Page-class.html +[`pages`]: {{site.api}}flutter/widgets/Navigator/pages.html [reverse chronological navigation]: https://material.io/design/navigation/understanding-navigation.html#reverse-navigation [Understanding navigation]: https://material.io/design/navigation/understanding-navigation.html -[Learning Flutter's new navigation and routing system]: {{site.medium}}/flutter/learning-flutters-new-navigation-and-routing-system-7c9068155ade +[Learning Flutter's new navigation and routing system]: {{site.flutter-medium}}learning-flutters-new-navigation-and-routing-system-7c9068155ade [Router design document]: {{site.main-url}}/go/navigator-with-router diff --git a/src/content/ui/navigation/url-strategies.md b/src/content/ui/navigation/url-strategies.md index fa873b3c9f..587833754b 100644 --- a/src/content/ui/navigation/url-strategies.md +++ b/src/content/ui/navigation/url-strategies.md @@ -93,11 +93,11 @@ this tag to ``. 则更改此标签为 ``。 [hash fragment]: https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax -[`HashUrlStrategy`]: {{site.api}}/flutter/flutter_web_plugins/HashUrlStrategy-class.html -[`PathUrlStrategy`]: {{site.api}}/flutter/flutter_web_plugins/PathUrlStrategy-class.html -[`setUrlStrategy`]: {{site.api}}/flutter/flutter_web_plugins/setUrlStrategy.html -[`url_strategy`]: {{site.pub-pkg}}/url_strategy -[usePathUrlStrategy]: {{site.api}}/flutter/flutter_web_plugins/usePathUrlStrategy.html -[flutter_web_plugins]: {{site.api}}/flutter/flutter_web_plugins/flutter_web_plugins-library.html +[`HashUrlStrategy`]: {{site.api}}flutter/flutter_web_plugins/HashUrlStrategy-class.html +[`PathUrlStrategy`]: {{site.api}}flutter/flutter_web_plugins/PathUrlStrategy-class.html +[`setUrlStrategy`]: {{site.api}}flutter/flutter_web_plugins/setUrlStrategy.html +[`url_strategy`]: {{site.pub-pkg}}url_strategy +[usePathUrlStrategy]: {{site.api}}flutter/flutter_web_plugins/usePathUrlStrategy.html +[flutter_web_plugins]: {{site.api}}flutter/flutter_web_plugins/flutter_web_plugins-library.html [History API]: https://developer.mozilla.org/en-US/docs/Web/API/History_API -[Configure rewrites]: {{site.firebase}}/docs/hosting/full-config#rewrites +[Configure rewrites]: {{site.firebase}}docs/hosting/full-config#rewrites diff --git a/src/layout-basics-old.md b/src/layout-basics-old.md index c4b494f046..00eca665cb 100644 --- a/src/layout-basics-old.md +++ b/src/layout-basics-old.md @@ -82,7 +82,7 @@ Try adding three `BlueBox` widgets to its list of children. 下面是一个叫作 `MyWidget` 的 widget,在其内部创建了一个 `Row`,然后请试着 将三个 `BlueBox` widgets 加到 `Row` 的 children中。 - + ### Main axis size @@ -110,7 +110,7 @@ Here's the example you just finished. Try setting the `Row`'s 这里的例子是你刚刚完成的。试着将 `Row` 的 `mainAxisSize` 的值设为 `MainAxisSize.min`,看看会发生什么。 - + ### Main axis alignment @@ -172,7 +172,7 @@ other values and re-running the code to see how things move around. 下面的 row 的 `mainAxisAlignment` 被设为了 start。试着将其改为其他的值,然后重新运行看看会怎么样。 - + ### Cross axis alignment @@ -238,7 +238,7 @@ Don't worry, though—it's covered in the next section. that another property be set as well, so you will see an error if you try that one. 不用担心,在下一节将会对此进行讨论。 - + ### Baseline alignment ### 基线对齐 @@ -271,7 +271,7 @@ values for `textBaseline` as well (there's an enum called row 里包含三个拥有不同字体大小的 `Text` widgets。试着将 `crossAxisAlignment` 属性设为 `baseline`, 然后试验 `textBaseline` 的不同值(`TextBaseline` 枚举值里包含可用的 baseline 值)。 - + ### Flexible children @@ -345,7 +345,7 @@ using them easier: `Expanded`. `flex` factor 为 1 和 `fit` 为 `FlexFit.tight` 的组合是非常常见的, 更简单的方式是直接使用 `Expanded` widget. - + ### Flex factors @@ -383,7 +383,7 @@ re-running the code to see how the widgets' sizes adjust. 在这个例子中, `Row` 的所有三个 children 都是可伸缩的,试着改变它们的 `flex` 值然后重新运行看看它们的尺寸如何改变。 - + ### What happens if you run out of space? @@ -417,7 +417,7 @@ code as-is to see what happens, then try modifying the width of the 下面的 `Row` 包含一个特别宽的 widget。运行代码看会发生什么,然后试着修改`Container`的宽度使其适应。 - + ### Try using SizedBox to make space @@ -438,7 +438,7 @@ Trying making some space between these two list items by placing a 试着用一个宽度 100 的 `SizedBox` 在两个 items 中间制造一些间隔。 - + ### Spacers expand to make space @@ -459,7 +459,7 @@ Try adding a `Spacer` in between the first and second children of the 试着在第一个和第二个 children 之间加一个 `Spacer`。 - + ### Wait, wasn't I going to learn about Columns, too? @@ -487,7 +487,7 @@ properties set. Try fiddling around with them and you'll see that the 这里有一个包含不同尺寸和一些重要属性已经设置好的 children 的 `Column`。试着摆弄以下,你会发现 `Column` 就像一个竖过来的的 `Row`。 - + ### Putting it all together @@ -543,7 +543,7 @@ style: Theme.of(context).textTheme.headline 将 `Column` 的 `mainAxisSize` 设为 `MainAxisSize.min`,这样 card 才不会扩展到整个 window 那么高。 - + Business cards often have an icon or logo in the top-left corner, so the next step is to add one to yours. Start by wrapping the @@ -586,7 +586,7 @@ Now you can add the `Icon`: 把 `Icon` 的大小设置为 50。 - + Your first `Row` is now complete! There are two more to go, though, and you need a `Column` to put them in. @@ -645,7 +645,7 @@ Then, finish up your new `Column` with these steps: 另一个空 `Row` - + There are just a few steps to go now. Next up is the second row. Add the following to its list of children: @@ -671,7 +671,7 @@ the two `Text` widgets. 如果你现在运行代码,你会看到这两个 `Text`widgets 是挨着的,而不是在 `Row` 的两端对齐,这是不对的。 你可以将 `Row` 的 `mainAxisAlignment` 设为 `spaceBetween`,使得这两个 `Text` widge 中间有些间隔。 - + The last step is to get those icons in place at the bottom of the card: @@ -697,4 +697,4 @@ The last step is to get those icons in place at the bottom of the card: 设置 `Row` 的 `mainAxisAlignment` 属性为 `MainAxisAlignment.spaceAround`。 - \ No newline at end of file + \ No newline at end of file