diff --git a/examples/cookbook/images/fading_in_images/lib/memory_main.dart b/examples/cookbook/images/fading_in_images/lib/memory_main.dart index 71fabd53ee7..906da70ee98 100644 --- a/examples/cookbook/images/fading_in_images/lib/memory_main.dart +++ b/examples/cookbook/images/fading_in_images/lib/memory_main.dart @@ -1,5 +1,16 @@ +// #docregion TransparentImage +import 'dart:convert'; +import 'dart:typed_data'; +// #enddocregion TransparentImage + import 'package:flutter/material.dart'; -import 'package:transparent_image/transparent_image.dart'; + +// #docregion TransparentImage +final Uint8List transparentImage = base64Decode( + 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4' + 'nGMAAQAABQABDQottAAAAABJRU5ErkJggg==', +); +// #enddocregion TransparentImage void main() { runApp(const MyApp()); @@ -22,7 +33,7 @@ class MyApp extends StatelessWidget { Center( // #docregion MemoryNetwork child: FadeInImage.memoryNetwork( - placeholder: kTransparentImage, + placeholder: transparentImage, image: 'https://picsum.photos/250?image=9', ), // #enddocregion MemoryNetwork diff --git a/examples/cookbook/images/fading_in_images/pubspec.yaml b/examples/cookbook/images/fading_in_images/pubspec.yaml index f59bdbc639f..82ccc7db550 100644 --- a/examples/cookbook/images/fading_in_images/pubspec.yaml +++ b/examples/cookbook/images/fading_in_images/pubspec.yaml @@ -12,8 +12,6 @@ environment: dependencies: flutter: sdk: flutter - cupertino_icons: ^1.0.9 - transparent_image: ^2.0.1 dev_dependencies: flutter_test: diff --git a/sites/docs/src/content/add-to-app/performance.md b/sites/docs/src/content/add-to-app/performance.md index 96bbd3615d3..6c27b674c69 100644 --- a/sites/docs/src/content/add-to-app/performance.md +++ b/sites/docs/src/content/add-to-app/performance.md @@ -28,14 +28,6 @@ This happens when you construct a `FlutterEngine` for the first time on both **[Android][android-engine]** and **[iOS][ios-engine]** APIs. -:::note -Some packages allow you to share images and fonts -from the native application to your Flutter screen. -For example: -* [native_font]({{site.pub-pkg}}/native_font) -* [ios_platform_images]({{site.pub-pkg}}/ios_platform_images) -::: - ### Loading the Flutter library After it's found, the engine's shared libraries are memory loaded diff --git a/sites/docs/src/content/cookbook/images/fading-in-images.md b/sites/docs/src/content/cookbook/images/fading-in-images.md index 84e442ea53d..2ff5d73ce49 100644 --- a/sites/docs/src/content/cookbook/images/fading-in-images.md +++ b/sites/docs/src/content/cookbook/images/fading-in-images.md @@ -16,25 +16,53 @@ and images would fade in as they're loaded? Use the `FadeInImage` works with images of any type: in-memory, local assets, or images from the internet. -## In-Memory +## In-memory -In this example, use the [`transparent_image`][] -package for a simple transparent placeholder. +To use a single-pixel, transparent PNG as the placeholder image, +complete the following steps: - -```dart -FadeInImage.memoryNetwork( - placeholder: kTransparentImage, - image: 'https://picsum.photos/250?image=9', -), -``` +1. **Create the transparent image data.** + + Import `dart:convert` and `dart:typed_data`, + then decode the image from a Base64-encoded string: + + + ```dart + import 'dart:convert'; + import 'dart:typed_data'; + final Uint8List transparentImage = base64Decode( + 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4' + 'nGMAAQAABQABDQottAAAAABJRU5ErkJggg==', + ); + ``` + +1. **Use the image data as a placeholder.** + + Pass the decoded image data to the `placeholder` parameter: + + + ```dart + FadeInImage.memoryNetwork( + placeholder: transparentImage, + image: 'https://picsum.photos/250?image=9', + ), + ``` + +{:.steps} ### Complete example ```dart +import 'dart:convert'; +import 'dart:typed_data'; + import 'package:flutter/material.dart'; -import 'package:transparent_image/transparent_image.dart'; + +final Uint8List transparentImage = base64Decode( + 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4' + 'nGMAAQAABQABDQottAAAAABJRU5ErkJggg==', +); void main() { runApp(const MyApp()); @@ -56,7 +84,7 @@ class MyApp extends StatelessWidget { const Center(child: CircularProgressIndicator()), Center( child: FadeInImage.memoryNetwork( - placeholder: kTransparentImage, + placeholder: transparentImage, image: 'https://picsum.photos/250?image=9', ), ), @@ -72,25 +100,36 @@ class MyApp extends StatelessWidget { ## From asset bundle -You can also consider using local assets for placeholders. -First, add the asset to the project's `pubspec.yaml` file -(for more details, see [Adding assets and images][]): +To use a local image asset as the placeholder image, +complete the following steps: -```yaml diff - flutter: - assets: -+ - assets/loading.gif -``` +1. **Add the placeholder to the asset bundle.** -Then, use the [`FadeInImage.assetNetwork()`][] constructor: + Add a placeholder image to the project's `assets` directory, + such as `assets/loading.gif`. + Then, declare the asset in the project's `pubspec.yaml` file. + For more details, see [Adding assets and images][]. - -```dart -FadeInImage.assetNetwork( - placeholder: 'assets/loading.gif', - image: 'https://picsum.photos/250?image=9', -), -``` + ```yaml diff + flutter: + assets: + + - assets/loading.gif + ``` + +1. **Use the asset as a placeholder.** + + Pass the asset path to the `placeholder` parameter of + the [`FadeInImage.assetNetwork`][] constructor: + + + ```dart + FadeInImage.assetNetwork( + placeholder: 'assets/loading.gif', + image: 'https://picsum.photos/250?image=9', + ), + ``` + +{:.steps} ### Complete example @@ -130,5 +169,4 @@ 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.assetNetwork`]: {{site.api}}/flutter/widgets/FadeInImage/FadeInImage.assetNetwork.html diff --git a/sites/docs/src/content/flutter-for/android-devs.md b/sites/docs/src/content/flutter-for/android-devs.md index f31526758e2..500b016839b 100644 --- a/sites/docs/src/content/flutter-for/android-devs.md +++ b/sites/docs/src/content/flutter-for/android-devs.md @@ -518,7 +518,7 @@ Widget build(BuildContext context) { In Android, there are two main use cases for `Intent`s: navigating between Activities, and communicating with components. Flutter, on the other hand, does not have the concept of intents, although you can still start intents -through native integrations (using [a plugin][]). +through native integrations, such as the [`android_intent_plus`][] plugin. Flutter doesn't really have a direct equivalent to activities and fragments; rather, in Flutter you navigate between screens, using a `Navigator` and @@ -2179,14 +2179,14 @@ for accessing the camera. ### How do I log in with Facebook? To Log in with Facebook, use the -[`flutter_facebook_login`][] community plugin. +[`flutter_facebook_auth`][] community plugin. ### How do I use Firebase features? Most Firebase functions are covered by [first party plugins][]. These plugins are first-party integrations, -maintained by the Flutter team: +maintained by the Flutter and Firebase teams: * [`google_mobile_ads`][] for Google Mobile Ads for Flutter * [`firebase_analytics`][] for Firebase Analytics @@ -2194,7 +2194,7 @@ maintained by the Flutter team: * [`firebase_database`][] for Firebase RTDB * [`firebase_storage`][] for Firebase Cloud Storage * [`firebase_messaging`][] for Firebase Messaging (FCM) - * [`flutter_firebase_ui`][] for quick Firebase Auth integrations + * [`firebase_ui_auth`][] for quick Firebase Auth integrations (Facebook, Google, Twitter and email) * [`cloud_firestore`][] for Firebase Cloud Firestore @@ -2379,14 +2379,14 @@ see the [`firebase_messaging`][] plugin documentation. [`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 +[`flutter_facebook_auth`]: {{site.pub-pkg}}/flutter_facebook_auth [`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_ui_auth`]: {{site.pub-pkg}}/firebase_ui_auth [Firebase Messaging]: {{site.github}}/firebase/flutterfire/tree/master/packages/firebase_messaging [first party plugins]: {{site.pub}}/flutter/packages?q=firebase [Flutter for Android Developers: How to design LinearLayout in Flutter]: https://proandroiddev.com/flutter-for-android-developers-how-to-design-linearlayout-in-flutter-5d819c0ddf1a @@ -2400,7 +2400,7 @@ see the [`firebase_messaging`][] plugin documentation. [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 +[`android_intent_plus`]: {{site.pub-pkg}}/android_intent_plus [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 diff --git a/sites/docs/src/content/flutter-for/xamarin-forms-devs.md b/sites/docs/src/content/flutter-for/xamarin-forms-devs.md index 294c2e676de..37826c1f65f 100644 --- a/sites/docs/src/content/flutter-for/xamarin-forms-devs.md +++ b/sites/docs/src/content/flutter-for/xamarin-forms-devs.md @@ -2336,12 +2336,13 @@ The [`camera`][] plugin is popular for accessing the camera. ### How do I log in with Facebook? To log in with Facebook, use the -[`flutter_facebook_login`][] community plugin. +[`flutter_facebook_auth`][] community plugin. ### How do I use Firebase features? Most Firebase functions are covered by [first party plugins][]. -These plugins are first-party integrations, maintained by the Flutter team: +These plugins are first-party integrations, +maintained by the Flutter and Firebase teams: * [`google_mobile_ads`][] for Google Mobile Ads for Flutter * [`firebase_analytics`][] for Firebase Analytics @@ -2349,7 +2350,7 @@ These plugins are first-party integrations, maintained by the Flutter team: * [`firebase_database`][] for Firebase RTDB * [`firebase_storage`][] for Firebase Cloud Storage * [`firebase_messaging`][] for Firebase Messaging (FCM) - * [`flutter_firebase_ui`][] for quick Firebase Auth integrations + * [`firebase_ui_auth`][] for quick Firebase Auth integrations (Facebook, Google, Twitter and email) * [`cloud_firestore`][] for Firebase Cloud Firestore @@ -2489,8 +2490,8 @@ For more information on using the Firebase Cloud Messaging API, see the [`firebase_messaging`]: {{site.pub}}/packages/firebase_messaging [`firebase_storage`]: {{site.pub}}/packages/firebase_storage [first party plugins]: {{site.pub}}/flutter/packages?q=firebase -[`flutter_facebook_login`]: {{site.pub}}/packages/flutter_facebook_login -[`flutter_firebase_ui`]: {{site.pub}}/packages/flutter_firebase_ui +[`flutter_facebook_auth`]: {{site.pub-pkg}}/flutter_facebook_auth +[`firebase_ui_auth`]: {{site.pub-pkg}}/firebase_ui_auth [`geolocator`]: {{site.pub}}/packages/geolocator [`camera`]: {{site.pub-pkg}}/camera [`http` package]: {{site.pub}}/packages/http diff --git a/sites/docs/src/content/platform-integration/android/restore-state-android.md b/sites/docs/src/content/platform-integration/android/restore-state-android.md index 762bbed8de8..bfa0ea38275 100644 --- a/sites/docs/src/content/platform-integration/android/restore-state-android.md +++ b/sites/docs/src/content/platform-integration/android/restore-state-android.md @@ -137,9 +137,6 @@ check out the following resources. check out [Differentiate between ephemeral state and app state][state]. -* You might want to check out packages on pub.dev that - perform state restoration, such as [`statePersistence`][]. - * For more information on navigation and the [`go_router`][] package, check out [Navigation and routing][] and the [State restoration][] topic on pub.dev. @@ -150,5 +147,4 @@ check out the following resources. [`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 diff --git a/sites/docs/src/content/platform-integration/ios/apple-frameworks.md b/sites/docs/src/content/platform-integration/ios/apple-frameworks.md index f78f665f09c..d8742d60eef 100644 --- a/sites/docs/src/content/platform-integration/ios/apple-frameworks.md +++ b/sites/docs/src/content/platform-integration/ios/apple-frameworks.md @@ -50,32 +50,31 @@ You might need to change app settings or initialization logic. If that's needed, the package's "Readme" page on [pub.dev][] should provide details. -### Flutter Plugins and Apple Frameworks +### Flutter plugins and Apple frameworks -| Use Case | Apple Framework or Class | Flutter Plugin | -|------------------------------------------------|---------------------------------------------------------------------------------------|------------------------------| -| Access the photo library | `PhotoKit` using the `Photos` and `PhotosUI ` frameworks and `UIImagePickerController`| [`image_picker`][] | -| Access the camera | `UIImagePickerController` using the `.camera` `sourceType` | [`image_picker`][] | -| Use advanced camera features | `AVFoundation` | [`camera`][] | -| Offer In-app purchases | `StoreKit` | [`in_app_purchase`][][^1] | -| Process payments | `PassKit` | [`pay`][][^2] | -| Send push notifications | `UserNotifications` | [`firebase_messaging`][][^3] | -| Access GPS coordinates | `CoreLocation` | [`geolocator`][] | -| Access sensor data[^4] | `CoreMotion` | [`sensors_plus`][] | -| Make network requests | `URLSession` | [`http`][] | -| Store key-values | `@AppStorage` property wrapper and `NSUserDefaults` | [`shared_preferences`][] | -| Persist to a database | `CoreData` or SQLite | [`sqflite`][] | -| Access health data | `HealthKit` | [`health`][] | -| Use machine learning | `CoreML` | [`google_ml_kit`][][^5] | -| Recognize text | `VisionKit` | [`google_ml_kit`][][^5] | -| Recognize speech | `Speech` | [`speech_to_text`][] | -| Use augmented reality | `ARKit` | [`ar_flutter_plugin`][] | -| Access weather data | `WeatherKit` | [`weather`][][^6] | -| Access and manage contacts | `Contacts` | [`contacts_service`][] | -| Expose quick actions on the home screen | `UIApplicationShortcutItem` | [`quick_actions`][] | -| Index items in Spotlight search | `CoreSpotlight` | [`flutter_core_spotlight`][] | -| Configure, update and communicate with Widgets | `WidgetKit` | [`home_widget`][] | -| Automate app actions with Siri/Shortcuts | `AppIntents` | [`intelligence`][] | +| Use Case | Apple Framework or Class | Flutter integration | +|------------------------------------------------|----------------------------------------------------------------------------------------|------------------------------| +| Access the photo library | `PhotoKit` using the `Photos` and `PhotosUI ` frameworks and `UIImagePickerController` | [`image_picker`][] | +| Access the camera | `UIImagePickerController` using the `.camera` `sourceType` | [`image_picker`][] | +| Use advanced camera features | `AVFoundation` | [`camera`][] | +| Offer In-app purchases | `StoreKit` | [`in_app_purchase`][][^1] | +| Process payments | `PassKit` | [`pay`][][^2] | +| Send push notifications | `UserNotifications` | [`firebase_messaging`][][^3] | +| Access GPS coordinates | `CoreLocation` | [`geolocator`][] | +| Access sensor data[^4] | `CoreMotion` | [`sensors_plus`][] | +| Make network requests | `URLSession` | [`http`][] | +| Store key-values | `@AppStorage` property wrapper and `NSUserDefaults` | [`shared_preferences`][] | +| Persist to a database | `CoreData` or SQLite | [`sqflite`][] | +| Access health data | `HealthKit` | [`health`][] | +| Use machine learning | `CoreML` | [`google_ml_kit`][][^5] | +| Recognize text | `VisionKit` | [`google_ml_kit`][][^5] | +| Recognize speech | `Speech` | [`speech_to_text`][] | +| Use augmented reality | `ARKit` | [`arkit_plugin`][] | +| Access weather data | `WeatherKit` | [`weather`][][^6] | +| Access and manage contacts | `Contacts` | [`flutter_contacts`][] | +| Expose quick actions on the home screen | `UIApplicationShortcutItem` | [`quick_actions`][] | +| Configure, update and communicate with Widgets | `WidgetKit` | [`home_widget`][] | +| Automate app actions with Siri/Shortcuts | `AppIntents` | [`intelligence`][] | {:.table .table-striped .nowrap} @@ -102,14 +101,13 @@ should provide details. [`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 +[`arkit_plugin`]: {{site.pub-pkg}}/arkit_plugin [`weather`]: {{site.pub-pkg}}/weather -[`contacts_service`]: {{site.pub-pkg}}/contacts_service +[`flutter_contacts`]: {{site.pub-pkg}}/flutter_contacts [`health`]: {{site.pub-pkg}}/health [OpenWeatherMap API]: https://openweathermap.org/api [`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 [`intelligence`]: {{site.pub-pkg}}/intelligence diff --git a/sites/docs/src/content/platform-integration/macos/building.md b/sites/docs/src/content/platform-integration/macos/building.md index 0e4e96f4ee0..385c16c997f 100644 --- a/sites/docs/src/content/platform-integration/macos/building.md +++ b/sites/docs/src/content/platform-integration/macos/building.md @@ -108,7 +108,7 @@ If you keep the App Sandbox enabled (which is required if you plan to distribute your application in the [App Store][]), you need to manage entitlements for your application when you add certain plugins or other native functionality. -For instance, using the [`file_chooser`][] plugin +For instance, using the [`file_selector`][] plugin requires adding either the `com.apple.security.files.user-selected.read-only` or `com.apple.security.files.user-selected.read-write` entitlement. @@ -145,7 +145,7 @@ on the Apple Developer site. [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 +[`file_selector`]: {{site.pub-pkg}}/file_selector ## Hardened Runtime diff --git a/sites/docs/src/content/resources/games-toolkit.md b/sites/docs/src/content/resources/games-toolkit.md index aedc57a0cd7..b8a10bdf094 100644 --- a/sites/docs/src/content/resources/games-toolkit.md +++ b/sites/docs/src/content/resources/games-toolkit.md @@ -169,8 +169,7 @@ investigate other resources that our community recommended. [Special effects][]
[Spriter Pro][]
- [rive][]
- [spritewidget][] + [rive][] @@ -373,7 +372,6 @@ investigate other resources that our community recommended. [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-blog}}/how-we-built-the-new-super-dash-demo-in-flutter-and-flame-in-just-six-weeks-9c7aa2a5ad31 diff --git a/sites/docs/src/content/ui/navigation/url-strategies.md b/sites/docs/src/content/ui/navigation/url-strategies.md index 5c21f633c3f..d90b2d940e4 100644 --- a/sites/docs/src/content/ui/navigation/url-strategies.md +++ b/sites/docs/src/content/ui/navigation/url-strategies.md @@ -78,7 +78,6 @@ This means a relative `base href` for a request to `/flutter_app/`, [`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