diff --git a/docs/index.md b/docs/index.md index 26f3dce..8198f7c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -151,7 +151,7 @@ Discover additional tools and references to enhance your Dreamflow development e If you're still experiencing issues or need additional help, here are some resources to get you back on track: -- **[Submit Bug Report](/misc/submit-bug-report)** - Report bugs or issues you've encountered +- **[Submit Bug Report](#)** - Report bugs or issues you've encountered - **[Community Forum](https://community.flutterflow.io)** - Ask questions and get help from the community - **[Reddit Community](https://www.reddit.com/r/FlutterFlow/)** - Join discussions on Reddit - **[Documentation Bug](https://github.com/FlutterFlow/flutterflow-documentation/issues)** - Report documentation issues diff --git a/docs/test-and-publish/publish/_category_.json b/docs/test-and-publish/publish/_category_.json new file mode 100644 index 0000000..994bf65 --- /dev/null +++ b/docs/test-and-publish/publish/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Publish", + "position": 2 +} \ No newline at end of file diff --git a/docs/test-and-publish/publish/google-playstore-deployment.md b/docs/test-and-publish/publish/google-playstore-deployment.md new file mode 100644 index 0000000..fbce045 --- /dev/null +++ b/docs/test-and-publish/publish/google-playstore-deployment.md @@ -0,0 +1,378 @@ +--- +slug: /deployment/google-playstore-deployment +title: Google Play Store Deployment +description: Learn how to deploy your apps to the Google Play Store using Dreamflow. +tags: [Google Play Store, Deployment, Dreamflow, Android] +sidebar_position: 3 +toc_max_heading_level: 4 +keywords: [Google Play Store, Deployment, Dreamflow, Android] +--- + +# Google Play Store Deployment + +Dreamflow allows you to deploy your apps directly to the Google Play Store from within the platform. This guide covers all the necessary prerequisites, a step-by-step deployment process, and common troubleshooting tips. + +:::info[Prerequisites] + +- Register for a [**Google Play Developer account**](https://play.google.com/console/signup). +- Ensure you have set an app launcher icon. If not, add an app icon to the Dreamflow assets, then use the [**flutter_launcher_icons**](https://pub.dev/packages/flutter_launcher_icons) package or ask the AI agent to set it up for you. +- Ensure your app package name is correct, as it cannot be changed after deployment. To verify it, open `android/app/build.gradle` and check the `applicationId`. To update the package name, you can use the [**change_app_package_name**](https://pub.dev/packages/change_app_package_name) package or simply ask the AI agent. +- It's recommended to [**test your app on a real device**](../test/test-on-mobile-device.md) before deployment. + +::: + +## 1. Creating app on Google Play Store + +To create a new app in the Google Play Store, start by opening the [Google Play Console](https://play.google.com/console) and clicking the **Create app** button. Enter the **App name**, select the app type, and choose whether the app will be **Free** or **Paid**. After that, accept the **Declarations**, and finally click **Create app** to proceed. + +
+ +
+

+ +## 2. Set up your app + +To provide the app details required by the Google Play Store, go to the **Set up your app** section within your newly created app. Expand the **View tasks** list, then click on each task and complete the required information step by step. + +![setup-android-app-in-play-console.avif](imgs/setup-android-app-in-play-console.avif) + +## 3. Adding service account credentials + +To enable Dreamflow to deploy your app to the Google Play Store, you need to add service account credentials. + +### 3.1 Creating a Service Account + +To create the Service Account, you can follow the instructions from [here](https://developers.google.com/android-publisher/getting_started). To help you get started quickly, here are the exact steps you need to follow: + +1. If you haven't set up Firebase in your app, you'll need to [create a Google Cloud Project](https://developers.google.com/android-publisher/getting_started#creating). +2. Then, head over to the [Google Play Developer API page](https://console.developers.google.com/apis/api/androidpublisher.googleapis.com/) in Google Cloud Console and click **Enable**. + + ![enable-play-api](imgs/enble-play-developer-api.avif) + +3. In Google Cloud Console, go to [Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts), click + **CREATE SERVICE ACCOUNT,** and follow the steps as shown below. + +
+ +
+

+ + +4. Now, download the JSON key file by clicking **ADD Key > Create new key > select JSON > CREATE**. Keep this file secure. + +
+ +
+

+ +5. In **Google Play Console**, go to [Users & Permissions](https://play.google.com/console), click **Invite new users**, and add your service account email with these permissions: + - "Edit and delete draft apps" + - "Release to production..." + - "Release apps to testing tracks" + - "Manage testing tracks and edit tester lists" + +

+ +
+ +
+

+ +### 3.2 Uploading service account credentials to Dreamflow + +To upload your service account credentials in Dreamflow, go to **Publish > Android**. Under **Google Play Credentials**, click **Upload .json** and select the `.json` file you downloaded in step 4. + +![upload-json-file.avif](imgs/upload-json-file.avif) + +## 4. Deploy to Google Play Store + +For first-time deployment, you need to create an initial release manually in Google Play Console. After that, Dreamflow can handle all subsequent deployments. + +### 4.1 Downloading AAB file + +In DreamFlow, set the **Google Play Track** to **Internal**, enter the **Bundle ID** and **Version Code**, then click **Submit Build to Google Play**. Wait a few minutes and click **Check Deployment Status**. + +Once the build is complete, click **Download AAB File** button (in the **App Bundle** section). If the button is still disabled, wait a bit longer and try again. + +:::info + +Even if the build status appears as FAILURE, you can still download the AAB file. + +::: + +
+ +
+

+ +### 4.2 Upload AAB file to Internal testing track + +In Google Play Console, create an **Internal Testing** track and upload the **.aab** file. + +
+ +
+

+ +:::info +After the internal testing track is set up, DreamFlow can handle all future deployments directly. +::: + +### 4.3 Deploy from Dreamflow + +To deploy your app from Dreamflow, navigate to **Publish > Android**, set the **Track** to Internal, and update the **version code.** If your app is still in draft mode (not yet available on the Play Store), set **Submit as Draft** (under **Deployment Flags)** to **True**, and then click **Deploy to Play Store**. + +
+ +
+

+ +:::info + +- If another deployment is already in progress, deploying a new build will cancel the previous one. +- It may take a few minutes for the request to process. Once completed, you will get a pop-up saying *Your app is being deployed to Google Play.* + +::: + +### 4.4 Verify deployment + +To verify that the app is deployed to Play Console: + +1. Open the **Internal testing** in [Google Play Console](https://play.google.com/console). +2. Under the **Releases** section, find your release and click on the **Show Summary** button. +3. See the **Version Codes** number is increased. + +![verify-deployment.avif](imgs/verify-deployment.avif) + +### 4.5 Deploy to production + +To promote your app to production, open your **Internal testing** track in Google Play Console and complete the release. Once the internal release is finalized, click **Promote Release > Production**. + +
+ +
+

+ +For all future deployments, set the **Google Play Track** to **Prod** in Dreamflow and deploy directly from there. + +![deploy-to-prod-from-dreamflow.avif](imgs/deploy-to-prod-from-dreamflow.avif) + +## Deployment Flags + +### Submit as draft + +While deploying, if your app is still in draft mode, meaning it is not available on the Play Store yet, you may encounter an error message stating, 'Only releases with the status draft may be created on a draft app.' + +To resolve this, enable this option, and you'll see that the release will be created as a draft. You'll then need to manually roll out the app. + +### Changes not sent for review + +If you face an error that says '*Changes cannot be sent for review automatically*', enable this option and retry deployment. + +## FAQs + +
+ +Why am I getting an "Invalid Package Name" error? + +

+This happens when your package name already exists or doesn’t meet validation requirements. Make sure your package name is unique and not already used by another app on Google Play Store. Note that the package name cannot be changed after deployment. +

+
+ +
+ +What should I do if I see "The service account does not have permission to perform this action"? + +

+This means your service account doesn’t have the correct permissions. In Google Play Console, ensure the account has these permissions: + +- *Edit and delete draft apps* +- *Release to production...* +- *Release apps to testing tracks* +- *Manage testing tracks and edit tester lists* +

+
+ + + + + +
+ +Why does my first upload fail with a message like "You need to use a different package name"? + + +

+For the initial deployment, you must manually [**download the .aab file**](#41-downloading-aab-file) and [**upload it to internal testing track**](#42-upload-aab-file-to-internal-testing-track) in Google Play Console. Once the initial track is set up, Dreamflow will handle all subsequent deployments automatically. +

+
+ + diff --git a/docs/test-and-publish/publish/imgs/deploy-to-prod-from-dreamflow.avif b/docs/test-and-publish/publish/imgs/deploy-to-prod-from-dreamflow.avif new file mode 100644 index 0000000..95d0a16 Binary files /dev/null and b/docs/test-and-publish/publish/imgs/deploy-to-prod-from-dreamflow.avif differ diff --git a/docs/test-and-publish/publish/imgs/enble-play-developer-api.avif b/docs/test-and-publish/publish/imgs/enble-play-developer-api.avif new file mode 100644 index 0000000..fa0a8df Binary files /dev/null and b/docs/test-and-publish/publish/imgs/enble-play-developer-api.avif differ diff --git a/docs/test-and-publish/publish/imgs/setup-android-app-in-play-console.avif b/docs/test-and-publish/publish/imgs/setup-android-app-in-play-console.avif new file mode 100644 index 0000000..dfba289 Binary files /dev/null and b/docs/test-and-publish/publish/imgs/setup-android-app-in-play-console.avif differ diff --git a/docs/test-and-publish/publish/imgs/upload-json-file.avif b/docs/test-and-publish/publish/imgs/upload-json-file.avif new file mode 100644 index 0000000..8641837 Binary files /dev/null and b/docs/test-and-publish/publish/imgs/upload-json-file.avif differ diff --git a/docs/test-and-publish/publish/imgs/verify-deployment.avif b/docs/test-and-publish/publish/imgs/verify-deployment.avif new file mode 100644 index 0000000..59b0733 Binary files /dev/null and b/docs/test-and-publish/publish/imgs/verify-deployment.avif differ diff --git a/docs/test-and-publish/publish/pre-checks-publishing.md b/docs/test-and-publish/publish/pre-checks-publishing.md new file mode 100644 index 0000000..415b318 --- /dev/null +++ b/docs/test-and-publish/publish/pre-checks-publishing.md @@ -0,0 +1,30 @@ +--- +slug: /publish/pre-checks-before-publishing +title: Pre-checks Before Publishing +description: Ensure your app is ready for launch with this detailed guide on essential pre-publishing checks. +tags: [Pre-checks, Publishing, Deployment] +sidebar_position: 1 +keywords: [Pre-checks, Publishing, Deployment, Dreamflow] +--- + +# Pre-checks Before Publishing +Before publishing your app, it’s important to run through a checklist to ensure quality, compliance, and readiness for release. These pre-checks help confirm that your app works as expected, meets platform requirements, and provides a smooth user experience. + +Here’s a comprehensive list of these prechecks: + +1. **Functionality Testing**: [Test the app manually](../test/test-on-mobile-device.md) across devices to verify that every feature behaves correctly, user interactions respond as intended, and no crashes or unexpected errors occur. +2. **Get Feedback**: Gather feedback from users or testers to receive valuable insights and potential areas of improvement before the public release. +3. **Optimizations & Enhancements**: Review your app’s overall performance and make sure all assets are optimized. This includes, but is not limited to: + - Making sure images are properly sized and compressed to reduce load times. + - Minimizing large files, unused assets, or unnecessary dependencies. + - Checking that animations and transitions run smoothly without lag. + - Enable caching strategies where appropriate. +4. **User Interface (UI)**: Review UI consistency across different devices, screen sizes, and resolutions. +5. **Accessibility Checks**: Use Flutter’s [`Semantics`](https://api.flutter.dev/flutter/widgets/Semantics-class.html) widget on images and buttons to provide meaningful descriptions for assistive technologies. Verify that TalkBack (Android) and VoiceOver (iOS) correctly interpret UI elements. Check color contrast with Flutter’s theming system and ensure that navigation using gestures or keyboard input remains accessible across all screens. +6. **Security Measures**: Safeguard user data by using HTTPS for all network requests, encrypting sensitive information, and following best practices for authentication and storage. Ensure compliance with legal standards like GDPR or CCPA, if applicable. +7. **Compliance with Store Guidelines**: Carefully review submission policies for both [Apple’s App Store](https://developer.apple.com/app-store/review/guidelines/) and [Google Play Store](https://play.google/developer-content-policy/). Pay attention to metadata, privacy policies, restricted content rules, and minimum functionality requirements. +8. **Localization and Internationalization**: If your app targets users in multiple countries, consider [adding multi-language](https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization) support. +9. **License and Third-Party Attributions**: Adhere to licenses and include necessary attributions for third-party libraries and assets. +10. **Prepare Marketing Assets**: Prepare all the necessary marketing assets, such as screenshots, app icons, and promotional text. +11. **Error Logging & Monitoring**: Integrate crash reporting and analytics (e.g., Firebase Crashlytics, Sentry) before release. Try triggering test crashes in debug or staging builds to confirm reports are collected correctly. +12. **Offline & Poor Network Support**: Validate app behavior with no connectivity and high-latency/packet-loss scenarios. Provide cached content, retry/backoff for API calls, and clear offline states. \ No newline at end of file diff --git a/docs/test-and-publish/test/_category_.json b/docs/test-and-publish/test/_category_.json new file mode 100644 index 0000000..dfdda75 --- /dev/null +++ b/docs/test-and-publish/test/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Test", + "position": 1 +} \ No newline at end of file diff --git a/docs/test-and-publish/test/imgs/download-code.avif b/docs/test-and-publish/test/imgs/download-code.avif new file mode 100644 index 0000000..df752c5 Binary files /dev/null and b/docs/test-and-publish/test/imgs/download-code.avif differ diff --git a/docs/test-and-publish/test/test-on-mobile-device.md b/docs/test-and-publish/test/test-on-mobile-device.md new file mode 100644 index 0000000..9579bb1 --- /dev/null +++ b/docs/test-and-publish/test/test-on-mobile-device.md @@ -0,0 +1,66 @@ +--- +slug: /test/test-on-mobile-device +title: Testing App on Mobile Devices +description: Learn how to test your Dreamflow app on mobile devices. +tags: [Test, Mobile Device, Android, iOS] +sidebar_position: 2 +keywords: [Dreamflow, Test, Mobile Device, Android, iOS] +--- + +# Testing App on Mobile Devices +Testing your app on mobile devices is essential to ensure it performs as expected in real-world scenarios. You can do this by downloading the code and running it locally on your machine. + +:::info[Prerequisites] +Downloading the code is only available with a [**paid subscription**](https://dreamflow.app/pricing). +::: + +## Android Setup + +To test your app on an Android device or emulator, you first need to set up your development environment, install Flutter, and configure your target device. Instructions for each platform are available here: [**Windows**](https://docs.flutter.dev/get-started/install/windows/mobile), [**Mac**](https://docs.flutter.dev/get-started/install/macos/mobile-android), [**Linux**](https://docs.flutter.dev/get-started/install/linux/android). + +To setup an Android physical device, first enable Developer Options and USB Debugging in your Android device. Navigate to **Settings > About phone**, tap **Build number** seven times to activate Developer Options, then go to **Settings > System > Developer options** and enable **USB debugging**. + +Connect your device to your computer via USB, authorizing the connection if prompted. Verify the setup by running `flutter devices` in Android Studio’s terminal; your device should appear in the list of connected devices. + +:::info + +For more detailed guidance, refer to the [**Android Flutter documentation**](https://docs.flutter.dev/get-started/install/windows/mobile#configure-your-target-android-device). + +::: + +## iOS Setup + +For app testing on an iOS device or simulator, you need a Mac with Xcode installed. Follow [**these instructions**](https://docs.flutter.dev/get-started/install/macos/mobile-ios) to set up your Mac. + +To setup a physical iOS device, you must configure your **Apple Developer account** and set up **code signing** in Xcode. First, add your **Apple ID** by opening **Xcode > Preferences > Accounts**, clicking **"+"**, selecting **Apple ID**, and signing in. + +Next, assign your project to a development team. Open your project in Xcode, select the **Runner** project, go to **Signing & Capabilities**, and choose your **Apple Developer team** in the **Team** dropdown. If your team is not listed, ensure that your Apple ID has been properly added to Xcode. + +Finally, configure code signing to allow your app to run on a real device. Ensure **"Automatically manage signing"** is enabled. Xcode will attempt to create and download a **provisioning profile** for your project. If issues arise, you may need to manually create a provisioning profile in the **Apple Developer Certificates, Identifiers & Profiles** section. Once created, download and double-click the provisioning profile to install it in Xcode. + +:::info + +For more detailed guidance, refer to the [**iOS Flutter documentation**](https://docs.flutter.dev/get-started/install/macos/mobile-ios#configure-your-target-ios-device). + +::: + +## Download Code and Run + +To download your app code, click on your project name and select the **Download Code** option. + +![download-code.avif](imgs/download-code.avif) + +Once downloaded, open the project in your preferred IDE and run your app on either a real device or an emulator by following the instructions below: + +- For **VS Code**: + 1. Go to the **View** menu > select **Terminal** from the dropdown. + 2. Run the command `flutter pub get`. + 3. Now, enter the command `flutter run`. VS Code will build and run your app. You'll see the output in the terminal, and the app should launch in the selected emulator or physical device. +- For **Android Studio**: + 1. Open the terminal within Android Studio by clicking **View** > **Tool Windows** > **Terminal**. + 2. Run the command `flutter pub get`. + 3. Click the green "Run" button (a right-facing triangle) located in the top toolbar. Choose the target device (emulator or physical device) where you want to run the app. Android Studio will build and run your app. You'll see the output in the "Run" panel at the bottom, and the app should launch in the selected emulator or device. + +:::info +If you encounter a version compatibility issue with Flutter, you can resolve it by upgrading to the latest version. Simply execute the `flutter upgrade` command in your terminal. To verify your current Flutter version, use the `flutter --version` command. +::: \ No newline at end of file diff --git a/firebase.json b/firebase.json index 82031bf..b1ab221 100644 --- a/firebase.json +++ b/firebase.json @@ -17,2421 +17,6 @@ "source": "/blog/**", "destination": "/", "type": 301 - }, - { - "source": "/getting-started/dashboard", - "destination": "/flutterflow-ui/dashboard", - "type": 301 - }, - { - "source": "/getting-started/dashboard/my-organization", - "destination": "/flutterflow-ui/my-organization", - "type": 301 - }, - { - "source": "/getting-started/ui-builder", - "destination": "/flutterflow-ui/builder", - "type": 301 - }, - { - "source": "/getting-started/ui-builder/navigation-menu", - "destination": "/flutterflow-ui/builder#navigation-menu", - "type": 301 - }, - { - "source": "/getting-started/ui-builder/navigation-menu/widget-and-component-panel", - "destination": "/resources/ui/widgets/widget-configurations", - "type": 301 - }, - { - "source": "/getting-started/ui-builder/navigation-menu/storyboard", - "destination": "/flutterflow-ui/storyboard", - "type": 301 - }, - { - "source": "/getting-started/ui-builder/tool-bar", - "destination": "/flutterflow-ui/toolbar", - "type": 301 - }, - { - "source": "/getting-started/ui-builder/tool-bar/branching", - "destination": "/collaboration/branching", - "type": 301 - }, - { - "source": "/getting-started/ui-builder/canvas-area", - "destination": "/flutterflow-ui/canvas", - "type": 301 - }, - { - "source": "/getting-started/ui-builder/properties-panel", - "destination": "/resources/ui/widgets/widget-configurations", - "type": 301 - }, - { - "source": "/getting-started/creating-new-project", - "destination": "/resources/projects/how-to-create-find-organize-projects#how-to-create-a-project", - "type": 301 - }, - { - "source": "/getting-started/adding-new-page", - "destination": "/resources/ui/pages/getting-started", - "type": 301 - }, - { - "source": "/getting-started/build-your-first-app", - "destination": "/quickstart", - "type": 301 - }, - { - "source": "/getting-started/resources", - "destination": "/flutterflow-ui/resource-hierarchy", - "type": 301 - }, - { - "source": "/settings-and-integrations/general-settings", - "destination": "/resources/projects/settings/general-settings", - "type": 301 - }, - { - "source": "/settings-and-integrations/general-settings/app-details", - "destination": "/resources/projects/settings/general-settings#app-details", - "type": 301 - }, - { - "source": "/settings-and-integrations/general-settings/app-assets", - "destination": "/resources/projects/settings/general-settings#app-assets", - "type": 301 - }, - { - "source": "/settings-and-integrations/general-settings/navbar-and-appbar", - "destination": "/resources/ui/pages/scaffold-elements", - "type": 301 - }, - { - "source": "/settings-and-integrations/general-settings/navbar-and-appbar/navbar", - "destination": "/resources/ui/pages/scaffold-elements/#nav-bar", - "type": 301 - }, - { - "source": "/settings-and-integrations/general-settings/navbar-and-appbar/appbar", - "destination": "/resources/ui/pages/scaffold-elements/#appbar", - "type": 301 - }, - { - "source": "/settings-and-integrations/general-settings/walkthroughs", - "destination": "/resources/projects/settings/project-setup/#walkthroughs", - "type": 301 - }, - { - "source": "/settings-and-integrations/project-setup", - "destination": "/resources/projects/settings/project-setup", - "type": 301 - }, - { - "source": "/settings-and-integrations/project-setup/collaboration", - "destination": "/resources/projects/collaboration", - "type": 301 - }, - { - "source": "/settings-and-integrations/project-setup/firebase", - "destination": "/integrations/authentication/firebase/initial-setup", - "type": 301 - }, - { - "source": "/settings-and-integrations/project-setup/firebase/remote-config", - "destination": "/integrations/firebase/remote-config", - "type": 301 - }, - { - "source": "/settings-and-integrations/project-setup/firebase/crashlytics", - "destination": "/integrations/firebase/crashlytics", - "type": 301 - }, - { - "source": "/settings-and-integrations/project-setup/firebase/app-check", - "destination": "/integrations/firebase/app-check", - "type": 301 - }, - { - "source": "/settings-and-integrations/project-setup/firebase/performance-monitoring", - "destination": "/integrations/firebase/performance-monitoring", - "type": 301 - }, - { - "source": "/settings-and-integrations/project-setup/languages", - "destination": "/concepts/multiple-languages", - "type": 301 - }, - { - "source": "/settings-and-integrations/project-setup/platforms", - "destination": "/resources/projects/settings/project-setup", - "type": 301 - }, - { - "source": "/settings-and-integrations/project-setup/permissions", - "destination": "/resources/projects/settings/project-setup#permissions", - "type": 301 - }, - { - "source": "/settings-and-integrations/app-settings", - "destination": "/resources/projects/settings/general-settings", - "type": 301 - }, - { - "source": "/settings-and-integrations/app-settings/authentication", - "destination": "/integrations/authentication/firebase/initial-setup", - "type": 301 - }, - { - "source": "/settings-and-integrations/app-settings/push-notifications", - "destination": "/concepts/alerts-notification/push-notifications", - "type": 301 - }, - { - "source": "/settings-and-integrations/app-settings/mobile-deployment", - "destination": "/deployment/google-playstore-deployment", - "type": 301 - }, - { - "source": "/settings-and-integrations/app-settings/mobile-deployment/app-store-deployment", - "destination": "/deployment/apple-app-store-deployment", - "type": 301 - }, - { - "source": "/settings-and-integrations/app-settings/mobile-deployment/google-play-store-deployment", - "destination": "/deployment/google-playstore-deployment", - "type": 301 - }, - { - "source": "/settings-and-integrations/app-settings/web-publishing", - "destination": "/deployment/web-publishing", - "type": 301 - }, - { - "source": "/settings-and-integrations/in-app-purchases-and-subscriptions", - "destination": "/integrations/payments/stripe", - "type": 301 - }, - { - "source": "/settings-and-integrations/in-app-purchases-and-subscriptions/stripe", - "destination": "/integrations/payments/stripe", - "type": 301 - }, - { - "source": "/settings-and-integrations/in-app-purchases-and-subscriptions/braintree", - "destination": "/integrations/payments/braintree", - "type": 301 - }, - { - "source": "/settings-and-integrations/in-app-purchases-and-subscriptions/revenuecat", - "destination": "/integrations/payments/revenuecat", - "type": 301 - }, - { - "source": "/settings-and-integrations/in-app-purchases-and-subscriptions/razorpay", - "destination": "/integrations/payments/razorpay", - "type": 301 - }, - { - "source": "/settings-and-integrations/integrations", - "destination": "/integrations", - "type": 301 - }, - { - "source": "/settings-and-integrations/integrations/supabase", - "destination": "/integrations/supabase/setup", - "type": 301 - }, - { - "source": "/settings-and-integrations/integrations/github", - "destination": "/exporting/push-to-github", - "type": 301 - }, - { - "source": "/settings-and-integrations/integrations/algolia", - "destination": "/integrations/search/algolia-search", - "type": 301 - }, - { - "source": "/settings-and-integrations/integrations/google-analytics", - "destination": "/integrations/google-analytics", - "type": 301 - }, - { - "source": "/settings-and-integrations/integrations/google-maps", - "destination": "/integrations/google-maps/generate-maps-keys", - "type": 301 - }, - { - "source": "/settings-and-integrations/integrations/admob", - "destination": "/integrations/ads/admob", - "type": 301 - }, - { - "source": "/settings-and-integrations/integrations/mux-livestream", - "destination": "/integrations/mux/initial-setup", - "type": 301 - }, - { - "source": "/settings-and-integrations/integrations/sqlite", - "destination": "/integrations/database/sqlite/quickstart", - "type": 301 - }, - { - "source": "/settings-and-integrations/integrations/onesignal", - "destination": "/concepts/alerts-notification/one-signal", - "type": 301 - }, - { - "source": "/settings-and-integrations/integrations/gemini", - "destination": "/integrations/gemini", - "type": 301 - }, - { - "source": "/widgets-and-components/ui-and-layout-101", - "destination": "/concepts/layouts", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets", - "destination": "/resources/ui/overview", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements", - "destination": "/resources/ui/overview", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/container", - "destination": "/resources/ui/widgets/built-in-widgets/container", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/row", - "destination": "/resources/ui/widgets/composing-widgets", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/columns", - "destination": "/resources/ui/widgets/composing-widgets", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/stack", - "destination": "/resources/ui/widgets/composing-widgets", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/card", - "destination": "/resources/ui/widgets/built-in-widgets/card", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/listview", - "destination": "/resources/ui/widgets/built-in-widgets/list-grid/#listview-widget", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/gridview", - "destination": "/resources/ui/widgets/built-in-widgets/list-grid/#gridview-widget", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/spacer", - "destination": "/resources/ui/widgets/built-in-widgets/spacer", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/divider", - "destination": "/resources/ui/widgets/built-in-widgets/dividers", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/vertical-divider", - "destination": "/resources/ui/widgets/built-in-widgets/dividers", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/tabbar", - "destination": "/concepts/navigation/tabbar", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/pageview", - "destination": "/concepts/navigation/pageview", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/expandable", - "destination": "/resources/ui/widgets/built-in-widgets/expandable", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/expandable", - "destination": "/resources/ui/widgets/built-in-widgets/expandable", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/staggeredview", - "destination": "/resources/ui/widgets/built-in-widgets/list-grid/#staggered-view", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/flippablecard", - "destination": "/resources/ui/widgets/built-in-widgets/flippable-card", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/flippable-card", - "destination": "/resources/ui/widgets/built-in-widgets/flippable-card", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/wrap", - "destination": "/concepts/layouts/wrap", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/carousel", - "destination": "/resources/ui/widgets/built-in-widgets/carousel", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/carousel", - "destination": "/resources/ui/widgets/built-in-widgets/carousel", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/swipeablestack", - "destination": "/resources/ui/widgets/built-in-widgets/swipeable-stack", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/swipeable-stack", - "destination": "/resources/ui/widgets/built-in-widgets/swipeable-stack", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/layout-elements/datatable-paginated", - "destination": "/resources/ui/widgets/built-in-widgets/datatable", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/datatable", - "destination": "/resources/ui/widgets/built-in-widgets/datatable", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/page-elements", - "destination": "/resources/ui/pages/scaffold-elements", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/page-elements/appbar", - "destination": "/resources/ui/pages/scaffold-elements", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/page-elements/floatingactionbutton", - "destination": "/resources/ui/pages/scaffold-elements", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/page-elements/drawer", - "destination": "/resources/ui/pages/scaffold-elements#drawers", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/page-elements/enddrawer", - "destination": "/resources/ui/pages/scaffold-elements#end-drawer", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements", - "destination": "/tags/base-elements/", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/text", - "destination": "/resources/ui/widgets/built-in-widgets/text", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/richtext", - "destination": "/resources/ui/widgets/built-in-widgets/text", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/image", - "destination": "/resources/ui/widgets/built-in-widgets/image", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/circleimage", - "destination": "/resources/ui/widgets/built-in-widgets/image", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/icon", - "destination": "/resources/ui/widgets/built-in-widgets/icons", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/button", - "destination": "/resources/ui/widgets/built-in-widgets/button", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/iconbutton", - "destination": "/resources/ui/widgets/built-in-widgets/icons", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/listtile", - "destination": "/resources/ui/widgets/built-in-widgets/list-grid/#listtile-widget", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/slidablelisttile", - "destination": "/resources/ui/widgets/built-in-widgets/list-grid/#convert-into-slidablelisttile", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/videoplayer", - "destination": "/concepts/file-handling/video-player", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/youtubeplayer", - "destination": "/concepts/file-handling/youtube-player", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/calendar", - "destination": "/resources/ui/widgets/built-in-widgets/calendar", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/calendar", - "destination": "/resources/ui/widgets/built-in-widgets/calendar", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/checkbox", - "destination": "/resources/forms/checkbox", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/checkboxlisttile", - "destination": "/resources/forms/checkbox", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/switch", - "destination": "/resources/forms/switch", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/switchlisttile", - "destination": "/resources/forms/switch", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/toggleicon", - "destination": "/resources/ui/widgets/built-in-widgets/icons/#toggleicon-properties", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/audioplayer", - "destination": "/concepts/file-handling/audio-player", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/webview", - "destination": "/concepts/navigation/webview", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/staticmap", - "destination": "/integrations/mapbox/staticmap-widget", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/googlemap", - "destination": "/integrations/google-maps/google-maps-widget", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/adbanner", - "destination": "/integrations/ads/admob", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/lottieanimation", - "destination": "/concepts/animations/lottie-animation", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/blur", - "destination": "/resources/ui/widgets/built-in-widgets/blur", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/blur", - "destination": "/resources/ui/widgets/built-in-widgets/blur", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/transform", - "destination": "/resources/ui/widgets/built-in-widgets/transform", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/mediadisplay", - "destination": "/resources/ui/widgets/built-in-widgets/media-display", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/media-display", - "destination": "/resources/ui/widgets/built-in-widgets/media-display", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/riveanimation", - "destination": "/concepts/animations/rive-animation", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/pdfviewer", - "destination": "/concepts/file-handling/pdf-viewer", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/progressbar", - "destination": "/resources/ui/widgets/built-in-widgets/progressbar", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/progressbar", - "destination": "/resources/ui/widgets/built-in-widgets/progressbar", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/languageselector", - "destination": "/concepts/multiple-languages/language-selector", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/badge", - "destination": "/resources/ui/widgets/built-in-widgets/badge", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/badge", - "destination": "/resources/ui/widgets/built-in-widgets/badge", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/chart", - "destination": "/resources/ui/widgets/built-in-widgets/chart/chart", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/chart/chart", - "destination": "/resources/ui/widgets/built-in-widgets/chart/chart", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/chart/line-chart", - "destination": "/resources/ui/widgets/built-in-widgets/chart/line-chart", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/chart/line-chart", - "destination": "/resources/ui/widgets/built-in-widgets/chart/line-chart", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/chart/bar-chart", - "destination": "/resources/ui/widgets/built-in-widgets/chart/bar-chart", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/chart/bar-chart", - "destination": "/resources/ui/widgets/built-in-widgets/chart/bar-chart", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/chart/pie-chart", - "destination": "/resources/ui/widgets/built-in-widgets/chart/pie-chart", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/chart/pie-chart", - "destination": "/resources/ui/widgets/built-in-widgets/chart/pie-chart", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/muxbroadcast", - "destination": "/integrations/mux/getting-started", - "type": 301 - }, - { - "source": "widgets-and-components/widgets-ui-elements/base-elements/muxbroadcast", - "destination": "/integrations/mux/getting-started", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/timer", - "destination": "/resources/time-based-logic/timer-widget", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/mouseregion", - "destination": "/resources/ui/widgets/built-in-widgets/mouse-region", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/barcode", - "destination": "/resources/ui/widgets/built-in-widgets/barcode", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/barcode", - "destination": "/resources/ui/widgets/built-in-widgets/barcode", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/tooltip", - "destination": "/resources/ui/widgets/built-in-widgets/tooltip", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/conditionalbuilder", - "destination": "/concepts/layouts/conditional-builder", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/stickyheader", - "destination": "/resources/ui/widgets/built-in-widgets/sticky-header", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/sticky-header", - "destination": "/resources/ui/widgets/built-in-widgets/sticky-header", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/markdown", - "destination": "/resources/ui/widgets/built-in-widgets/markdown", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/markdown", - "destination": "/resources/ui/widgets/built-in-widgets/markdown", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/base-elements/draggable-+-dragtarget", - "destination": "/resources/ui/widgets/built-in-widgets/draggable", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/draggable", - "destination": "/resources/ui/widgets/built-in-widgets/draggable", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/form-elements-1", - "destination": "/resources/forms", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/form-elements-1/textfield", - "destination": "/resources/forms/textfield", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/form-elements-1/dropdown", - "destination": "/resources/forms/dropdown", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/form-elements-1/radiobutton", - "destination": "/resources/forms/radiobutton", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/form-elements-1/pincode", - "destination": "/resources/ui/widgets/built-in-widgets/pincode", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/pincode", - "destination": "/resources/ui/widgets/built-in-widgets/pincode", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/form-elements-1/slider", - "destination": "/resources/ui/widgets/built-in-widgets/slider", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/slider", - "destination": "/resources/ui/widgets/built-in-widgets/slider", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/form-elements-1/ratingbar", - "destination": "/resources/ui/widgets/built-in-widgets/ratingbar", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/ratingbar", - "destination": "/resources/ui/widgets/built-in-widgets/ratingbar", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/form-elements-1/creditcardform", - "destination": "/resources/ui/widgets/built-in-widgets/credit-card-form", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/credit-card-form", - "destination": "/resources/ui/widgets/built-in-widgets/credit-card-form", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/form-elements-1/countcontroller", - "destination": "/resources/ui/widgets/built-in-widgets/count-controller", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/count-controller", - "destination": "/resources/ui/widgets/built-in-widgets/count-controller", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/form-elements-1/choicechips", - "destination": "/resources/forms/choice-chips", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/form-elements-1/placepicker", - "destination": "/integrations/google-maps/place-picker-widget", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/form-elements-1/form", - "destination": "/resources/forms", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/form-elements-1/checkboxgroup", - "destination": "/resources/forms/checkbox", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/form-elements-1/signature", - "destination": "/resources/ui/widgets/built-in-widgets/signature/", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/signature/", - "destination": "/resources/ui/widgets/built-in-widgets/signature/", - "type": 301 - }, - { - "source": "/widgets-and-components/widgets/widget-commonalities", - "destination": "/resources/ui/widgets/widget-commonalities", - "type": 301 - }, - { - "source": "/widgets-and-components/custom-components", - "destination": "/resources/ui/components/custom-components/using-components", - "type": 301 - }, - { - "source": "/widgets-and-components/custom-components/bottom-sheet", - "destination": "/concepts/navigation/bottom-sheet", - "type": 301 - }, - { - "source": "/widgets-and-components/animations", - "destination": "/concepts/animations", - "type": 301 - }, - { - "source": "/widgets-and-components/animations/widget-animations", - "destination": "/concepts/animations/widget-animations", - "type": 301 - }, - { - "source": "/widgets-and-components/animations/hero-animations", - "destination": "/concepts/animations/hero-animations", - "type": 301 - }, - { - "source": "/widgets-and-components/theme-settings", - "destination": "/concepts/design-system", - "type": 301 - }, - { - "source": "/widgets-and-components/theme-settings/design-system", - "destination": "/concepts/design-system", - "type": 301 - }, - { - "source": "/widgets-and-components/theme-settings/colors", - "destination": "/concepts/design-system/#colors", - "type": 301 - }, - { - "source": "/widgets-and-components/theme-settings/typography-and-icons", - "destination": "/concepts/design-system/#typography--icons", - "type": 301 - }, - { - "source": "/widgets-and-components/theme-settings/theme-widgets", - "destination": "/concepts/design-system/#theme-widgets", - "type": 301 - }, - { - "source": "/widgets-and-components/flows", - "destination": "/", - "type": 301 - }, - { - "source": "/widgets-and-components/responsive-layouts-guide", - "destination": "/concepts/layouts/responsive", - "type": 301 - }, - { - "source": "/actions/actions", - "destination": "/resources/functions/action-flow-editor", - "type": 301 - }, - { - "source": "/actions/actions/navigation", - "destination": "/concepts/navigation/overview", - "type": 301 - }, - { - "source": "/actions/actions/navigation/navigate", - "destination": "/concepts/navigation/page-navigation", - "type": 301 - }, - { - "source": "/actions/actions/navigation/navigate-back", - "destination": "/concepts/navigation/page-navigation", - "type": 301 - }, - { - "source": "/actions/actions/navigation/close-dialog-drawer-etc.", - "destination": "/resources/ui/pages/scaffold-elements#drawer-action", - "type": 301 - }, - { - "source": "/actions/actions/backend-database", - "destination": "/integrations/database/cloud-firestore/getting-started", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/firestore", - "destination": "/integrations/database/cloud-firestore/getting-started", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/api-call", - "destination": "/resources/backend-logic/create-test-api#trigger-api-calls-action", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/refresh-database-request", - "destination": "/integrations/database/refresh-db-request", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/firebase-authentication", - "destination": "/integrations/authentication/firebase/initial-setup", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/firebase-authentication/login", - "destination": "/integrations/authentication/firebase/email-login", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/firebase-authentication/create-account", - "destination": "/integrations/authentication/firebase/email-login", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/firebase-authentication/send-e-mail-verification-link", - "destination": "/integrations/authentication/firebase/email-login", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/firebase-authentication/logout", - "destination": "/integrations/authentication/firebase/auth-actions#logout-action", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/firebase-authentication/delete-user", - "destination": "/integrations/authentication/firebase/auth-actions#delete-user-action", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/firebase-authentication/update-email", - "destination": "/integrations/authentication/firebase/auth-actions#update-email-action", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/supabase-authentication", - "destination": "/integrations/authentication/supabase/initial-setup", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/supabase-authentication/log-in", - "destination": "/integrations/authentication/supabase/email", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/supabase-authentication/create-account", - "destination": "/integrations/authentication/supabase/email", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/supabase-authentication/log-out", - "destination": "/integrations/authentication/supabase/auth-actions", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/supabase-authentication/delete-user", - "destination": "/integrations/authentication/supabase/auth-actions", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/simple-search-action", - "destination": "/integrations/search/simple-search", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/supabase", - "destination": "/integrations/database/supabase/database-actions", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/algolia-search", - "destination": "/integrations/search/algolia-search", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/google-analytics-event", - "destination": "/integrations/google-analytics", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/generate-current-page-link", - "destination": "/concepts/navigation/generate-current-page-link", - "type": 301 - }, - { - "source": "/actions/actions/backend-database/sqlite-query", - "destination": "/resources/backend-query/sqlite-query", - "type": 301 - }, - { - "source": "/actions/actions/state-management", - "destination": "/concepts/state-management", - "type": 301 - }, - { - "source": "/actions/actions/state-management/update-app-state", - "destination": "/resources/data-representation/app-state/#update-app-state-action", - "type": 301 - }, - { - "source": "/actions/actions/state-management/update-page-state", - "destination": "/resources/ui/pages/page-lifecycle/#update-page-state-action", - "type": 301 - }, - { - "source": "/actions/actions/state-management/update-component-state", - "destination": "/concepts/state-management", - "type": 301 - }, - { - "source": "/actions/actions/state-management/set-form-field", - "destination": "/resources/forms/set-form-field", - "type": 301 - }, - { - "source": "/actions/actions/state-management/reset-form-fields", - "destination": "/resources/forms/reset-form-field", - "type": 301 - }, - { - "source": "/actions/actions/state-management/clear-query-cache", - "destination": "/resources/backend-query/#clear-query-cache-action", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions", - "destination": "/", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/bottom-sheet", - "destination": "/concepts/navigation/bottom-sheet", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/date-time-picker", - "destination": "/resources/functions/utility-actions#datetime-picker", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/color-picker", - "destination": "/resources/functions/utility-actions#color-picker", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/control-tab-bar", - "destination": "/concepts/navigation/tabbar/#control-tab-bar-action", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/validate-form", - "destination": "/resources/forms/form-validation", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/clear-text-fields-pin-codes", - "destination": "/resources/forms/textfield/#adding-clear-text-fieldspin-codes-action", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/scroll-to", - "destination": "/resources/ui/widgets/built-in-widgets/list-grid#scroll-to-action", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/scan-barcode-qr-code", - "destination": "/resources/ui/widgets/built-in-widgets/barcode", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/barcode", - "destination": "/resources/ui/widgets/built-in-widgets/barcode", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/launch-map", - "destination": "/integrations/maps/launch-map", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/walkthrough", - "destination": "/resources/projects/settings/project-setup", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/clear-all-select-all", - "destination": "/concepts/state-management/widget-state", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/drawer", - "destination": "/resources/ui/pages/scaffold-elements#drawers", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/control-page-view", - "destination": "/concepts/navigation/pageview", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/timer", - "destination": "/resources/time-based-logic/timer-widget", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/expand-image", - "destination": "/resources/ui/widgets/built-in-widgets/image/#advanced-image-functionalities", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/google-map", - "destination": "/integrations/google-maps/google-maps-widget", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/google-map/move-map-center", - "destination": "/integrations/google-maps/move-map-center-action", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/group-chat-action", - "destination": "/", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/upload-signature", - "destination": "/resources/ui/widgets/built-in-widgets/signature/#2-upload-signature-action", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/signature/#2-upload-signature-action", - "destination": "/resources/ui/widgets/built-in-widgets/signature/#2-upload-signature-action", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/clear-signatures", - "destination": "/resources/ui/widgets/built-in-widgets/signature/#clear-signature-action", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/signature/#clear-signature-action", - "destination": "/resources/ui/widgets/built-in-widgets/signature/#clear-signature-action", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/control-swipeable-stack", - "destination": "/resources/ui/widgets/built-in-widgets/swipeable-stack/#control-swipeable-stack-action", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/swipeable-stack/#control-swipeable-stack-action", - "destination": "/resources/ui/widgets/built-in-widgets/swipeable-stack/#control-swipeable-stack-action", - "type": 301 - }, - { - "source": "/actions/actions/widget-ui-interactions/control-carousel", - "destination": "/resources/ui/widgets/built-in-widgets/carousel/#control-carousel-action", - "type": 301 - }, - { - "source": "/resources/ui/components/built-in-components/carousel/#control-carousel-action", - "destination": "/resources/ui/widgets/built-in-widgets/carousel/#control-carousel-action", - "type": 301 - }, - { - "source": "/concepts/alerts-notification/", - "destination": "/concepts/alerts-notification/alert-dialog", - "type": 301 - }, - { - "source": "/actions/actions/alerts-notifications", - "destination": "/concepts/alerts-notification/alert-dialog", - "type": 301 - }, - { - "source": "/actions/actions/alerts-notifications/alert-dialog", - "destination": "/concepts/alerts-notification/alert-dialog", - "type": 301 - }, - { - "source": "/actions/actions/alerts-notifications/dismiss-custom-dialog", - "destination": "/concepts/alerts-notification/dismiss-custom-dialog", - "type": 301 - }, - { - "source": "/actions/actions/alerts-notifications/show-snack-bar", - "destination": "/resources/ui/pages/scaffold-elements/#snackbar", - "type": 301 - }, - { - "source": "/actions/actions/alerts-notifications/hide-snackbar", - "destination": "/resources/ui/pages/scaffold-elements/#snackbar", - "type": 301 - }, - { - "source": "/actions/actions/alerts-notifications/haptic-feedback", - "destination": "/concepts/alerts-notification/haptic-feedback", - "type": 301 - }, - { - "source": "/actions/actions/alerts-notifications/request-permission", - "destination": "/resources/projects/settings/project-setup/#permissions", - "type": 301 - }, - { - "source": "/actions/actions/alerts-notifications/play-sound", - "destination": "/concepts/file-handling/play-stop-sound", - "type": 301 - }, - { - "source": "/actions/actions/alerts-notifications/stop-sound", - "destination": "/concepts/file-handling/play-stop-sound", - "type": 301 - }, - { - "source": "/actions/actions/alerts-notifications/trigger-push-notification-action", - "destination": "/concepts/alerts-notification/push-notifications", - "type": 301 - }, - { - "source": "/actions/actions/alerts-notifications/update-app-badge-count-ios-only", - "destination": "/resources/functions/utility-actions/#update-app-badge-count-ios-only", - "type": 301 - }, - { - "source": "/actions/actions/utilities", - "destination": "/resources/functions/utility-actions", - "type": 301 - }, - { - "source": "/actions/actions/utilities/upload-data", - "destination": "/concepts/file-handling/upload-data", - "type": 301 - }, - { - "source": "/actions/actions/utilities/upload-data/upload-save-media", - "destination": "/concepts/file-handling/upload-save-media", - "type": 301 - }, - { - "source": "/actions/actions/utilities/upload-data/upload-save-file", - "destination": "/concepts/file-handling/upload-save-file", - "type": 301 - }, - { - "source": "/actions/actions/utilities/delete-data", - "destination": "/concepts/file-handling/clear-delete-media#delete-data", - "type": 301 - }, - { - "source": "/actions/actions/utilities/wait", - "destination": "/resources/time-based-logic/wait-action", - "type": 301 - }, - { - "source": "/actions/actions/utilities/periodic-action", - "destination": "/resources/time-based-logic/periodic-action", - "type": 301 - }, - { - "source": "/actions/actions/utilities/set-dark-mode-setting", - "destination": "/resources/functions/utility-actions/#set-dark-mode-setting", - "type": 301 - }, - { - "source": "/actions/actions/utilities/copy-to-clipboard", - "destination": "/resources/functions/utility-actions/#copy-to-clipboard", - "type": 301 - }, - { - "source": "/actions/actions/utilities/biometric-verification", - "destination": "/resources/functions/utility-actions#biometric-verification", - "type": 301 - }, - { - "source": "/actions/actions/utilities/audio-recording", - "destination": "/concepts/file-handling/audio-recording", - "type": 301 - }, - { - "source": "/actions/actions/utilities/clear-uploaded-data", - "destination": "/concepts/file-handling/clear-delete-media#clear-uploaded-data", - "type": 301 - }, - { - "source": "/actions/actions/utilities/set-app-language", - "destination": "/concepts/multiple-languages", - "type": 301 - }, - { - "source": "/actions/actions/utilities/execute-callback", - "destination": "/resources/ui/components/custom-components/using-components/#execute-callback-action", - "type": 301 - }, - { - "source": "/actions/actions/share", - "destination": "/concepts/navigation/share-action", - "type": 301 - }, - { - "source": "/actions/actions/share/share", - "destination": "/concepts/navigation/share-action", - "type": 301 - }, - { - "source": "/actions/actions/share/launch-url", - "destination": "/concepts/navigation/launch-url", - "type": 301 - }, - { - "source": "/actions/actions/share/send-email", - "destination": "/resources/functions/utility-actions/#send-email", - "type": 301 - }, - { - "source": "/actions/actions/share/call-number", - "destination": "/resources/functions/utility-actions/#call-number", - "type": 301 - }, - { - "source": "/actions/actions/share/send-sms", - "destination": "/resources/functions/utility-actions/#send-sms", - "type": 301 - }, - { - "source": "/actions/actions/animation", - "destination": "/concepts/animations", - "type": 301 - }, - { - "source": "/actions/actions/animation/widget-animation", - "destination": "/concepts/animations/widget-animations", - "type": 301 - }, - { - "source": "/actions/actions/animation/lottie-animation", - "destination": "/concepts/animations/lottie-animation", - "type": 301 - }, - { - "source": "/actions/actions/animation/rive-animation", - "destination": "/concepts/animations/rive-animation", - "type": 301 - }, - { - "source": "/actions/actions/integrations", - "destination": "/integrations", - "type": 301 - }, - { - "source": "/actions/actions/integrations/stripe-payment", - "destination": "/integrations/payments/stripe", - "type": 301 - }, - { - "source": "/actions/actions/integrations/braintree-payment", - "destination": "/integrations/payments/braintree#3-trigger-payment-action", - "type": 301 - }, - { - "source": "/actions/actions/integrations/razorpay-payment", - "destination": "/integrations/payments/razorpay", - "type": 301 - }, - { - "source": "/actions/actions/integrations/gemini", - "destination": "/integrations/gemini", - "type": 301 - }, - { - "source": "/actions/actions/integrations/admob", - "destination": "/integrations/ads/admob", - "type": 301 - }, - { - "source": "/actions/actions/integrations/admob/load-show-interstitial-ad", - "destination": "/integrations/ads/admob", - "type": 301 - }, - { - "source": "/actions/actions/integrations/revenuecat", - "destination": "/integrations/payments/revenuecat", - "type": 301 - }, - { - "source": "/actions/actions/integrations/onesignal", - "destination": "/concepts/alerts-notification/one-signal", - "type": 301 - }, - { - "source": "/actions/actions/custom-action", - "destination": "/concepts/custom-code/custom-actions", - "type": 301 - }, - { - "source": "/actions/actions/cloud-function", - "destination": "/concepts/custom-code/cloud-functions", - "type": 301 - }, - { - "source": "/data-and-backend/firebase", - "destination": "/integrations/firebase/connect-to-firebase", - "type": 301 - }, - { - "source": "/data-and-backend/firebase/firebase-setup", - "destination": "/integrations/firebase/connect-to-firebase", - "type": 301 - }, - { - "source": "/**/firebase/authentication", - "destination": "/integrations/authentication-methods", - "type": 301 - }, - { - "source": "/**/firebase/authentication/initial-setup", - "destination": "/integrations/authentication/firebase/initial-setup", - "type": 301 - }, - { - "source": "/**/firebase/authentication/email-sign-in", - "destination": "/integrations/authentication/firebase/email-login", - "type": 301 - }, - { - "source": "/**/firebase/authentication/password-resets", - "destination": "/integrations/authentication/firebase/auth-actions#reset-password-action", - "type": 301 - }, - { - "source": "/**/firebase/authentication/google-sign-in", - "destination": "/integrations/authentication/firebase/google-oauth-login", - "type": 301 - }, - { - "source": "/**/firebase/authentication/apple-sign-in", - "destination": "/integrations/authentication/firebase/apple", - "type": 301 - }, - { - "source": "/**/firebase/authentication/facebook-sign-in", - "destination": "/integrations/authentication/firebase/facebook", - "type": 301 - }, - { - "source": "/**/firebase/authentication/phone-sign-in", - "destination": "/integrations/authentication/firebase/phone", - "type": 301 - }, - { - "source": "/**/firebase/authentication/anonymous-sign-in", - "destination": "/integrations/authentication/firebase/anonymous-login", - "type": 301 - }, - { - "source": "/**/firebase/authentication/jwt-token", - "destination": "/integrations/authentication/firebase/jwt-auth", - "type": 301 - }, - { - "source": "/**/firebase/authentication/github", - "destination": "/integrations/authentication/firebase/github", - "type": 301 - }, - { - "source": "/**/firebase/firestore-database-cloud-firestore", - "destination": "/integrations/database/cloud-firestore/getting-started", - "type": 301 - }, - { - "source": "/data-and-backend/firebase/firestore-database-cloud-firestore/creating-collections", - "destination": "/integrations/database/cloud-firestore/creating-collections", - "type": 301 - }, - { - "source": "/data-and-backend/firebase/firestore-database-cloud-firestore/creating-subcollections", - "destination": "/integrations/database/cloud-firestore/creating-subcollections", - "type": 301 - }, - { - "source": "/data-and-backend/firebase/firestore-database-cloud-firestore/firestore-rules", - "destination": "/integrations/database/cloud-firestore/firestore-rules", - "type": 301 - }, - { - "source": "/data-and-backend/firebase/firestore-database/storage-rules", - "destination": "/integrations/database/cloud-firestore/firestore-rules", - "type": 301 - }, - { - "source": "/data-and-backend/firebase/firestore-database-cloud-firestore/storage-rules", - "destination": "/integrations/firebase-storage/storage-rules", - "type": 301 - }, - { - "source": "/data-and-backend/firebase/firestore-database-cloud-firestore/firebase-content-manager", - "destination": "/integrations/database/cloud-firestore/firestore-content-manager", - "type": 301 - }, - { - "source": "/data-and-backend/firebase/firestore-database-cloud-firestore/retrieving-data", - "destination": "/integrations/database/cloud-firestore/firestore-actions", - "type": 301 - }, - { - "source": "/data-and-backend/firebase/firestore-database-cloud-firestore/retrieving-data/adding-indexes", - "destination": "/integrations/firebase/connect-to-firebase/#adding-indexes", - "type": 301 - }, - { - "source": "/data-and-backend/firebase/firestore-database-cloud-firestore/adding-data", - "destination": "/integrations/database/cloud-firestore/firestore-actions", - "type": 301 - }, - { - "source": "/data-and-backend/firebase/firestore-database-cloud-firestore/updating-data", - "destination": "/integrations/database/cloud-firestore/firestore-actions", - "type": 301 - }, - { - "source": "/data-and-backend/firebase/firestore-database-cloud-firestore/deleting-data", - "destination": "/integrations/database/cloud-firestore/firestore-actions", - "type": 301 - }, - { - "source": "/data-and-backend/supabase", - "destination": "/integrations/supabase/setup", - "type": 301 - }, - { - "source": "/data-and-backend/supabase/supabase-setup", - "destination": "/integrations/supabase/setup", - "type": 301 - }, - { - "source": "/data-and-backend/supabase/supabase-authentication", - "destination": "/integrations/authentication/supabase/initial-setup", - "type": 301 - }, - { - "source": "/data-and-backend/supabase/supabase-authentication/initial-setup", - "destination": "/integrations/authentication/supabase/initial-setup", - "type": 301 - }, - { - "source": "/data-and-backend/supabase/supabase-authentication/email-supabase", - "destination": "/integrations/authentication/supabase/email", - "type": 301 - }, - { - "source": "/data-and-backend/supabase/supabase-authentication/google-sign-in-supabase", - "destination": "/integrations/authentication/supabase/google", - "type": 301 - }, - { - "source": "/data-and-backend/supabase/supabase-database", - "destination": "/integrations/database/supabase/database-actions", - "type": 301 - }, - { - "source": "/data-and-backend/supabase/supabase-database/retrieving-data", - "destination": "/integrations/database/supabase/database-actions", - "type": 301 - }, - { - "source": "/data-and-backend/supabase/supabase-database/adding-data", - "destination": "/integrations/database/supabase/database-actions", - "type": 301 - }, - { - "source": "/data-and-backend/supabase/supabase-database/updating-data", - "destination": "/integrations/database/supabase/database-actions", - "type": 301 - }, - { - "source": "/data-and-backend/supabase/supabase-database/deleting-data", - "destination": "/integrations/database/supabase/database-actions", - "type": 301 - }, - { - "source": "/data-and-backend/custom-authentication", - "destination": "/integrations/authentication/custom-authentication", - "type": 301 - }, - { - "source": "/data-and-backend/passing-data", - "destination": "/concepts/navigation/passing-data", - "type": 301 - }, - { - "source": "/data-and-backend/searching-data", - "destination": "/integrations/search/simple-search", - "type": 301 - }, - { - "source": "/data-and-backend/searching-data/simple-search", - "destination": "/integrations/search/simple-search", - "type": 301 - }, - { - "source": "/data-and-backend/searching-data/algolia-search", - "destination": "/integrations/search/algolia-search", - "type": 301 - }, - { - "source": "/data-and-backend/state-management", - "destination": "/concepts/state-management", - "type": 301 - }, - { - "source": "/data-and-backend/state-management/app-state", - "destination": "/resources/data-representation/app-state", - "type": 301 - }, - { - "source": "/data-and-backend/state-management/page-state", - "destination": "/resources/ui/pages/page-lifecycle#page-state", - "type": 301 - }, - { - "source": "/data-and-backend/state-management/component-state", - "destination": "/resources/ui/components/custom-components/component-lifecycle/#component-state", - "type": 301 - }, - { - "source": "/data-and-backend/state-management/constants", - "destination": "/resources/data-representation/constants", - "type": 301 - }, - { - "source": "/data-and-backend/api-calls", - "destination": "/resources/backend-logic/rest-api", - "type": 301 - }, - { - "source": "/data-and-backend/api-calls/api-calls-101", - "destination": "/resources/backend-logic/rest-api", - "type": 301 - }, - { - "source": "/data-and-backend/api-calls/create-and-test-api-call", - "destination": "/resources/backend-logic/create-test-api", - "type": 301 - }, - { - "source": "/data-and-backend/api-calls/rest-api-example-airline-passengers", - "destination": "/resources/backend-logic/rest-api", - "type": 301 - }, - { - "source": "/data-and-backend/api-calls/soap-api-example-countries", - "destination": "/resources/backend-logic/soap-api", - "type": 301 - }, - { - "source": "/data-and-backend/api-calls/streaming-api-example-ai-review-summary", - "destination": "/resources/backend-logic/streaming-api", - "type": 301 - }, - { - "source": "/data-and-backend/backend-query", - "destination": "/resources/backend-query", - "type": 301 - }, - { - "source": "/data-and-backend/backend-query/query-collection", - "destination": "/resources/backend-query/query-collection", - "type": 301 - }, - { - "source": "/data-and-backend/backend-query/document-from-reference", - "destination": "/resources/backend-query/document-from-reference", - "type": 301 - }, - { - "source": "/data-and-backend/backend-query/api-call-query", - "destination": "/resources/backend-query/api-call-query", - "type": 301 - }, - { - "source": "/data-and-backend/backend-query/algolia-search-query", - "destination": "/resources/backend-query/algolia-search-query", - "type": 301 - }, - { - "source": "/data-and-backend/backend-query/sqlite-query", - "destination": "/resources/backend-query/sqlite-query", - "type": 301 - }, - { - "source": "/data-and-backend/showing-data-in-ui-elements", - "destination": "/resources/ui/widgets/generate-dynamic-children", - "type": 301 - }, - { - "source": "/data-and-backend/custom-data-types", - "destination": "/resources/data-representation/custom-data-types", - "type": 301 - }, - { - "source": "/data-and-backend/custom-data-types/custom-data-type-in-firestore-document", - "destination": "/resources/data-representation/custom-data-types", - "type": 301 - }, - { - "source": "/data-and-backend/custom-data-types/custom-data-type-in-app-state", - "destination": "/resources/data-representation/custom-data-types", - "type": 301 - }, - { - "source": "/data-and-backend/custom-data-types/custom-data-type-with-api", - "destination": "/resources/data-representation/custom-data-types", - "type": 301 - }, - { - "source": "/data-and-backend/custom-data-types/custom-data-type-in-custom-code", - "destination": "/concepts/custom-code", - "type": 301 - }, - { - "source": "/data-and-backend/custom-data-types/enums", - "destination": "/resources/data-representation/enums", - "type": 301 - }, - { - "source": "/customizing-your-app/custom-functions", - "destination": "/concepts/custom-code", - "type": 301 - }, - { - "source": "/customizing-your-app/custom-functions/custom-functions", - "destination": "/concepts/custom-code/custom-functions", - "type": 301 - }, - { - "source": "/customizing-your-app/custom-functions/custom-widgets", - "destination": "/concepts/custom-code/custom-widgets", - "type": 301 - }, - { - "source": "/customizing-your-app/custom-functions/custom-actions", - "destination": "/concepts/custom-code/custom-actions", - "type": 301 - }, - { - "source": "/customizing-your-app/custom-functions/custom-files", - "destination": "/concepts/custom-code/custom-files", - "type": 301 - }, - { - "source": "/customizing-your-app/cloud-functions", - "destination": "/concepts/custom-code/cloud-functions", - "type": 301 - }, - { - "source": "/customizing-your-app/manage-custom-code-in-github", - "destination": "/exporting/push-to-github", - "type": 301 - }, - { - "source": "/advanced-functionality/conditional-visibility", - "destination": "/resources/ui/widgets/widget-commonalities#conditional", - "type": 301 - }, - { - "source": "/advanced-functionality/conditional-logic", - "destination": "/resources/functions/conditional-logic", - "type": 301 - }, - { - "source": "/advanced-functionality/global-properties", - "destination": "/resources/data-representation/global-properties", - "type": 301 - }, - { - "source": "/advanced-functionality/global-properties/is-user-logged-in", - "destination": "/resources/data-representation/global-properties", - "type": 301 - }, - { - "source": "/advanced-functionality/global-properties/current-time", - "destination": "/resources/data-representation/global-properties", - "type": 301 - }, - { - "source": "/advanced-functionality/global-properties/current-device-location", - "destination": "/resources/data-representation/global-properties", - "type": 301 - }, - { - "source": "/advanced-functionality/global-properties/is-android-ios-web", - "destination": "/resources/data-representation/global-properties", - "type": 301 - }, - { - "source": "/advanced-functionality/global-properties/fraction-of-screen-width-and-height", - "destination": "/resources/data-representation/global-properties", - "type": 301 - }, - { - "source": "/advanced-functionality/global-properties/is-light-or-dark-mode", - "destination": "/resources/data-representation/global-properties", - "type": 301 - }, - { - "source": "/advanced-functionality/global-properties/is-on-screen-keyboard-visible", - "destination": "/resources/data-representation/global-properties", - "type": 301 - }, - { - "source": "/advanced-functionality/deep-and-dynamic-linking", - "destination": "/concepts/navigation/deep-dynamic-linking", - "type": 301 - }, - { - "source": "/advanced-functionality/chat-+-group-chat", - "destination": "/", - "type": 301 - }, - { - "source": "/advanced-functionality/code-expression", - "destination": "/resources/functions/utility/#code-expressions", - "type": 301 - }, - { - "source": "/advanced-functionality/ai-gen", - "destination": "/", - "type": 301 - }, - { - "source": "/advanced-functionality/best-practices-secure-api-keys", - "destination": "/best-practices/secure-api-keys", - "type": 301 - }, - { - "source": "/deploying-your-app/testing-your-app", - "destination": "/testing/run-your-app", - "type": 301 - }, - { - "source": "/deploying-your-app/testing-your-app/testing-on-mobile-device", - "destination": "/testing/run-your-app", - "type": 301 - }, - { - "source": "/deploying-your-app/testing-your-app/testing-on-desktop", - "destination": "/testing/run-your-app", - "type": 301 - }, - { - "source": "/deploying-your-app/testing-your-app/automated-tests", - "destination": "/testing/automated-tests", - "type": 301 - }, - { - "source": "/deploying-your-app/deploy-mobile-app", - "destination": "/deployment/google-playstore-deployment", - "type": 301 - }, - { - "source": "/deploying-your-app/generate-screenshots", - "destination": "/deployment/pre-checks-before-publishing/#generate-screenshots", - "type": 301 - }, - { - "source": "/flutter/flutterflow-for-flutter-developers", - "destination": "/", - "type": 301 - }, - { - "source": "/flutter/generated-code", - "destination": "/generated-code/project-structure", - "type": 301 - }, - { - "source": "/flutter/generated-code/directory-structure", - "destination": "/generated-code/project-structure", - "type": 301 - }, - { - "source": "/flutter/generated-code/flutterflow-classes", - "destination": "/generated-code/page-model", - "type": 301 - }, - { - "source": "/flutter/generated-code/state-management", - "destination": "/concepts/state-management/generated-code", - "type": 301 - }, - { - "source": "/flutter/generated-code/authentication", - "destination": "/integrations/authentication/generated-code", - "type": 301 - }, - { - "source": "/flutter/custom-code-deep-dive", - "destination": "/concepts/custom-code", - "type": 301 - }, - { - "source": "/flutter/export-flutterflow-ui-code-to-your-flutter-project", - "destination": "/", - "type": 301 - }, - { - "source": "/marketplace/adding-and-purchasing-items", - "destination": "/marketplace/adding-purchasing-item", - "type": 301 - }, - { - "source": "/marketplace/adding-and-purchasing-items/refund-policy", - "destination": "/marketplace/refund-policy", - "type": 301 - }, - { - "source": "/marketplace/submitting-feedback-for-items", - "destination": "/marketplace/submit-feedback", - "type": 301 - }, - { - "source": "/marketplace/creators-hub/submitting-an-item-for-review", - "destination": "/marketplace/creators-hub/submit-item-for-review", - "type": 301 - }, - { - "source": "/marketplace/creators-hub/submitting-an-item-for-review/item-submission-criteria", - "destination": "/marketplace/creators-hub/submission-criteria", - "type": 301 - }, - { - "source": "/marketplace/creators-hub/legal-guidelines-for-creators", - "destination": "/marketplace/creators-hub/submission-criteria", - "type": 301 - }, - { - "source": "/marketplace/creators-hub/legal-guidelines-for-creators/copyright-dmca-process", - "destination": "/marketplace/creators-hub/copyright-dmca-process", - "type": 301 - }, - { - "source": "/marketplace/creators-hub/legal-guidelines-for-creators/navigating-external-licenses", - "destination": "/marketplace/creators-hub/navigating-external-licenses", - "type": 301 - }, - { - "source": "/account/account-management", - "destination": "/accounts-billing/account-management", - "type": 301 - }, - { - "source": "/account/account-management/password", - "destination": "/accounts-billing/account-management", - "type": 301 - }, - { - "source": "/account/account-management/verify-account", - "destination": "/accounts-billing/account-management", - "type": 301 - }, - { - "source": "/account/account-management/delete-account", - "destination": "/accounts-billing/account-management", - "type": 301 - }, - { - "source": "/account/account-management/change-update-email-address", - "destination": "/accounts-billing/account-management", - "type": 301 - }, - { - "source": "/account/plans-and-pricing", - "destination": "/accounts-billing/plan-pricing", - "type": 301 - }, - { - "source": "/account/subscriptions", - "destination": "/accounts-billing/subscriptions/subscriptions", - "type": 301 - }, - { - "source": "/account/subscriptions/free-trials", - "destination": "/accounts-billing/subscriptions/subscriptions", - "type": 301 - }, - { - "source": "/account/subscriptions/upgrade-or-change-plan", - "destination": "/accounts-billing/subscriptions/subscriptions", - "type": 301 - }, - { - "source": "/account/subscriptions/downgrade-to-free-plan", - "destination": "/accounts-billing/subscriptions/subscriptions", - "type": 301 - }, - { - "source": "/account/subscriptions/cancel-my-plan", - "destination": "/accounts-billing/subscriptions/subscriptions", - "type": 301 - }, - { - "source": "/account/subscriptions/refunds", - "destination": "/accounts-billing/subscriptions/subscriptions", - "type": 301 - }, - { - "source": "/account/subscriptions/flutterflow-for-teams", - "destination": "/accounts-billing/subscriptions/subscriptions/flutterflow-teams", - "type": 301 - }, - { - "source": "/account/subscriptions/other-subscription-questions", - "destination": "/accounts-billing/subscriptions/more-subscription-faqs", - "type": 301 - }, - { - "source": "/account/billing", - "destination": "/accounts-billing/payments-billing", - "type": 301 - }, - { - "source": "/account/billing/payment-methods", - "destination": "/accounts-billing/payments-billing", - "type": 301 - }, - { - "source": "/account/billing/change-credit-card", - "destination": "/accounts-billing/payments-billing", - "type": 301 - }, - { - "source": "/account/billing/refunds", - "destination": "/accounts-billing/payments-billing", - "type": 301 - }, - { - "source": "/account/billing/invoices", - "destination": "/accounts-billing/payments-billing", - "type": 301 - }, - { - "source": "/account/manage-custom-domains", - "destination": "/accounts-billing/manage-custom-domains", - "type": 301 - }, - { - "source": "/account/referral-program", - "destination": "/accounts-billing/referral-program", - "type": 301 - }, - { - "source": "/account/privacy-and-terms-of-service", - "destination": "/accounts-billing/privacy-terms-of-service", - "type": 301 - }, - { - "source": "/account/privacy-and-terms-of-service/personal-data", - "destination": "/accounts-billing/privacy-terms-of-service", - "type": 301 - }, - { - "source": "/account/privacy-and-terms-of-service/unsubscribe-from-emails", - "destination": "/accounts-billing/privacy-terms-of-service", - "type": 301 - }, - { - "source": "/account/privacy-and-terms-of-service/policies", - "destination": "/accounts-billing/privacy-terms-of-service", - "type": 301 - }, - { - "source": "/miscellaneous/customer-support-policy", - "destination": "/misc/customer-support-policy", - "type": 301 - }, - { - "source": "/miscellaneous/enterprise-support-policy", - "destination": "/misc/enterprise-support-policy", - "type": 301 - }, - { - "source": "/miscellaneous/flutterflow-experts", - "destination": "/misc/flutterflow-experts", - "type": 301 - }, - { - "source": "/miscellaneous/additional-resources", - "destination": "/misc/additional-resources", - "type": 301 - }, - { - "source": "/miscellaneous/application-and-data-ownership", - "destination": "/misc/application-data-ownership", - "type": 301 - }, - { - "source": "/miscellaneous/security", - "destination": "/misc/security", - "type": 301 - }, - { - "source": "/guides/building-custom-signature-widget-with-custom-code", - "destination": "/", - "type": 301 - }, - { - "source": "/guides/build-a-notes-app-with-flutterflow-and-supabase", - "destination": "/", - "type": 301 - }, - { - "source": "/miscellaneous/flutterflow-beta-testers", - "destination": "/", - "type": 301 - }, - { - "source": "/miscellaneous/documentation-release-tracker", - "destination": "/", - "type": 301 - }, - { - "source": "/miscellaneous/design-resources", - "destination": "/", - "type": 301 - }, - { - "source": "/miscellaneous/available-sample-apps", - "destination": "/", - "type": 301 - }, - { - "source": "/flutterflow-status", - "destination": "https://status.flutterflow.io/", - "type": 301 - }, - { - "source": "/troubleshooting/basic-troubleshooting-guide", - "destination": "/troubleshooting", - "type": 301 - }, - { - "source": "/troubleshooting/advanced-troubleshooting-guides", - "destination": "/troubleshooting", - "type": 301 - }, - { - "source": "/troubleshooting/enterprise", - "destination": "/troubleshooting/enterprise", - "type": 301 - }, - { - "source": "/troubleshooting/submit-bug-reports", - "destination": "/misc/submit-bug-report", - "type": 301 - }, - { - "source": "/troubleshooting/miscellaneous", - "destination": "/troubleshooting", - "type": 301 - }, - { - "source": "/settings-and-integrations/project-setup/team", - "destination": "/flutterflow-ui/my-organization/", - "type": 301 - }, - { - "source": "/resources/ui/pages/pages-configuration", - "destination": "/resources/ui/pages/properties", - "type": 301 - }, - { - "source": "/resources/ui/widgets/widget-configurations", - "destination": "/resources/ui/widgets/properties", - "type": 301 - }, - { - "source": "/resources/ui/pages/scaffold-elements", - "destination": "/resources/ui/pages/scaffold", - "type": 301 - }, - { - "source": "/resources/ui/widgets/built-in-widgets/button", - "destination": "/resources/ui/widgets/button", - "type": 301 - }, - { - "source": "/resources/ui/widgets/built-in-widgets/text", - "destination": "/resources/ui/widgets/text", - "type": 301 - }, - { - "source": "/resources/ui/widgets/built-in-widgets/icon", - "destination": "/resources/ui/widgets/icons", - "type": 301 - }, - { - "source": "/resources/ui/widgets/built-in-widgets/container", - "destination": "/resources/ui/widgets/container", - "type": 301 - }, - { - "source": "/resources/ui/widgets/built-in-widgets/image", - "destination": "/resources/ui/widgets/image", - "type": 301 - }, - { - "source": "/resources/ui/widgets/composing-widgets", - "destination": "/resources/ui/widgets/composing-widgets/rows-column-stack", - "type": 301 - }, - { - "source": "/resources/ui/widgets/generate-dynamic-children", - "destination": "/resources/ui/widgets/composing-widgets/generate-dynamic-children", - "type": 301 - }, - { - "source": "/resources/ui/widgets/built-in-widgets/list-grid", - "destination": "/resources/ui/widgets/composing-widgets/list-grid", - "type": 301 - }, - { - "source": "/resources/ui/components/overview", - "destination": "/resources/ui/components", - "type": 301 - }, - { - "source": "/resources/ui/pages/getting-started", - "destination": "/resources/ui/pages", - "type": 301 - }, - { - "source": "/resources/ui/overview#widget-tree", - "destination": "/resources/ui/widgets#widget-tree", - "type": 301 - }, - { - "source": "/firebase-setup", - "destination": "/integrations/firebase/connect-to-firebase", - "type": 301 - }, - { - "source": "/building-your-ui/ui-builder/properties-panel", - "destination": "/resources/ui/widgets/properties", - "type": 301 - }, - { - "source": "/concepts/multiple-languages", - "destination": "/concepts/localization", - "type": 301 - }, - { - "source": "/concepts/multiple-languages/language-selector", - "destination": "/concepts/localization", - "type": 301 - }, - { - "source": "/misc/enterprise-support-policy", - "destination": "/misc/enterprise#enterprise-support-policy", - "type": 301 - }, - { - "source": "/misc/flutterflow-experts", - "destination": "/misc/hire-flutterflow-developer", - "type": 301 - }, - { - "source": "/firebase-content-manager", - "destination": "/integrations/database/cloud-firestore/firestore-content-manager/", - "type": 301 - }, - { - "source": "/concepts/file-handling/audio-player", - "destination": "/concepts/file-handling/displaying-media#audioplayer", - "type": 301 - }, - { - "source": "/concepts/file-handling/audio-recording", - "destination": "/concepts/file-handling/displaying-media#audio-recording", - "type": 301 - }, - { - "source": "/concepts/file-handling/play-stop-sound", - "destination": "/concepts/file-handling/displaying-media#play-or-stop-sound", - "type": 301 - }, - { - "source": "/concepts/file-handling/video-player", - "destination": "/concepts/file-handling/displaying-media#videoplayer", - "type": 301 - }, - { - "source": "/concepts/file-handling/youtube-player", - "destination": "/concepts/file-handling/displaying-media#youtubeplayer", - "type": 301 - }, - { - "source": "/concepts/file-handling/pdf-viewer", - "destination": "/concepts/file-handling/displaying-media#pdfviewer", - "type": 301 - }, - { - "source": "/concepts/file-handling/upload-data", - "destination": "/concepts/file-handling/uploading-files", - "type": 301 - }, - { - "source": "/concepts/file-handling/upload-save-file", - "destination": "/concepts/file-handling/uploading-files#upload-or-save-file-action", - "type": 301 - }, - { - "source": "/concepts/file-handling/upload-save-media", - "destination": "/concepts/file-handling/uploading-files#upload-or-save-media-action", - "type": 301 - }, - { - "source": "/concepts/alerts-notification/alert-dialog", - "destination": "/concepts/alerts/alert-dialog", - "type": 301 - }, - { - "source": "/concepts/alerts-notification/dismiss-custom-dialog", - "destination": "/concepts/alerts/dismiss-custom-dialog", - "type": 301 - }, - { - "source": "/concepts/alerts-notification/haptic-feedback", - "destination": "/concepts/alerts/haptic-feedback", - "type": 301 - }, - { - "source": "/concepts/alerts-notification/push-notifications", - "destination": "/concepts/notifications/push-notifications", - "type": 301 - }, - { - "source": "/concepts/alerts-notification/one-signal", - "destination": "/concepts/notifications/one-signal", - "type": 301 - }, - { - "source": "/concepts/state-management/generated-code", - "destination": "/generated-code/state-management", - "type": 301 - }, - { - "source": "/concepts/custom-code/custom-files", - "destination": "/concepts/custom-code/configuration-files", - "type": 301 - }, - { - "source": "/marketplace/creators-hub/submit-item-for-reivew", - "destination": "/marketplace/creators-hub/submit-item-for-review", - "type": 301 - }, - { - "source": "/resources/functions/utility/#code-expressions", - "destination": "/resources/functions/utility/#inline-function", - "type": 301 - }, - { - "source": "/configuring-cors-for-firebase-storage", - "destination": "/troubleshooting/firebase/configuring-cors-for-firebase-storage", - "type": 301 - }, - { - "source": "/accounts-billing/refunds", - "destination": "/accounts-billing/subscriptions/refunds", - "type": 301 - }, - { - "source": "/accounts-billing/subscriptions/subscriptions/flutterflow-teams", - "destination": "/accounts-billing/subscriptions/subscriptions", - "type": 301 - }, - { - "source": "/accounts-billing/subscriptions/more-subscription-faqs", - "destination": "/accounts-billing/subscriptions", - "type": 301 } ] } diff --git a/sidebars.ts b/sidebars.ts index 6bf2a7a..eef7d46 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -3,7 +3,22 @@ import type {SidebarsConfig} from '@docusaurus/plugin-content-docs'; const sidebars: SidebarsConfig = { docsSidebar: [ - { type: 'autogenerated', dirName: '.' } + { + type: 'doc', + id: 'index', + label: 'Index', + }, + { + type: 'category', + label: 'Test & Publish', + collapsed: false, + items: [ + { + type: 'autogenerated', + dirName: 'test-and-publish', + } + ], + }, ] };