rothzerg 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +949 -0
- package/package.json +27 -0
- package/readme.md +0 -0
- package/templates/_base-website/App.tsx +59 -0
- package/templates/_base-website/InitialDataContext.tsx +21 -0
- package/templates/_base-website/_gitignore +5 -0
- package/templates/_base-website/client.tsx +26 -0
- package/templates/_base-website/components/DeepLinkLayout.css +41 -0
- package/templates/_base-website/components/DeepLinkLayout.tsx +39 -0
- package/templates/_base-website/components/DownloadSection.css +60 -0
- package/templates/_base-website/components/DownloadSection.tsx +61 -0
- package/templates/_base-website/components/SiteFeaturesSection.tsx +68 -0
- package/templates/_base-website/components/SiteFooter.tsx +29 -0
- package/templates/_base-website/components/SiteHeroSection.tsx +30 -0
- package/templates/_base-website/components/SiteHighlightsSection.tsx +38 -0
- package/templates/_base-website/components/SiteLanguageSwitcher.tsx +9 -0
- package/templates/_base-website/components/SiteNavigation.tsx +24 -0
- package/templates/_base-website/config.ts +78 -0
- package/templates/_base-website/data/blog/authors.json +18 -0
- package/templates/_base-website/data/blog/categories.json +53 -0
- package/templates/_base-website/data/blog/posts.json +29 -0
- package/templates/_base-website/data/blog/tags.json +86 -0
- package/templates/_base-website/i18n/config.ts +60 -0
- package/templates/_base-website/i18n/sections/blog/_index.ts +41 -0
- package/templates/_base-website/i18n/sections/blog/ar.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/de.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/en.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/es.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/fr.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/hi.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/id.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/it.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/ja.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/ko.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/nl.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/pl.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/pt.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/ru.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/sv.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/th.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/tr.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/vi.ts +24 -0
- package/templates/_base-website/i18n/sections/blog/zh.ts +24 -0
- package/templates/_base-website/i18n/sections/common/_index.ts +41 -0
- package/templates/_base-website/i18n/sections/common/ar.ts +29 -0
- package/templates/_base-website/i18n/sections/common/de.ts +29 -0
- package/templates/_base-website/i18n/sections/common/en.ts +29 -0
- package/templates/_base-website/i18n/sections/common/es.ts +29 -0
- package/templates/_base-website/i18n/sections/common/fr.ts +29 -0
- package/templates/_base-website/i18n/sections/common/hi.ts +29 -0
- package/templates/_base-website/i18n/sections/common/id.ts +29 -0
- package/templates/_base-website/i18n/sections/common/it.ts +29 -0
- package/templates/_base-website/i18n/sections/common/ja.ts +29 -0
- package/templates/_base-website/i18n/sections/common/ko.ts +29 -0
- package/templates/_base-website/i18n/sections/common/nl.ts +29 -0
- package/templates/_base-website/i18n/sections/common/pl.ts +29 -0
- package/templates/_base-website/i18n/sections/common/pt.ts +29 -0
- package/templates/_base-website/i18n/sections/common/ru.ts +29 -0
- package/templates/_base-website/i18n/sections/common/sv.ts +29 -0
- package/templates/_base-website/i18n/sections/common/th.ts +29 -0
- package/templates/_base-website/i18n/sections/common/tr.ts +29 -0
- package/templates/_base-website/i18n/sections/common/vi.ts +29 -0
- package/templates/_base-website/i18n/sections/common/zh.ts +29 -0
- package/templates/_base-website/i18n/sections/deepLink/_index.ts +41 -0
- package/templates/_base-website/i18n/sections/deepLink/ar.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/de.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/en.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/es.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/fr.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/hi.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/id.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/it.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/ja.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/ko.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/nl.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/pl.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/pt.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/ru.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/sv.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/th.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/tr.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/vi.ts +14 -0
- package/templates/_base-website/i18n/sections/deepLink/zh.ts +14 -0
- package/templates/_base-website/i18n/sections/home/_index.ts +41 -0
- package/templates/_base-website/i18n/sections/home/ar.ts +85 -0
- package/templates/_base-website/i18n/sections/home/de.ts +85 -0
- package/templates/_base-website/i18n/sections/home/en.ts +85 -0
- package/templates/_base-website/i18n/sections/home/es.ts +85 -0
- package/templates/_base-website/i18n/sections/home/fr.ts +85 -0
- package/templates/_base-website/i18n/sections/home/hi.ts +85 -0
- package/templates/_base-website/i18n/sections/home/id.ts +85 -0
- package/templates/_base-website/i18n/sections/home/it.ts +85 -0
- package/templates/_base-website/i18n/sections/home/ja.ts +85 -0
- package/templates/_base-website/i18n/sections/home/ko.ts +85 -0
- package/templates/_base-website/i18n/sections/home/nl.ts +85 -0
- package/templates/_base-website/i18n/sections/home/pl.ts +85 -0
- package/templates/_base-website/i18n/sections/home/pt.ts +85 -0
- package/templates/_base-website/i18n/sections/home/ru.ts +85 -0
- package/templates/_base-website/i18n/sections/home/sv.ts +85 -0
- package/templates/_base-website/i18n/sections/home/th.ts +85 -0
- package/templates/_base-website/i18n/sections/home/tr.ts +85 -0
- package/templates/_base-website/i18n/sections/home/vi.ts +85 -0
- package/templates/_base-website/i18n/sections/home/zh.ts +85 -0
- package/templates/_base-website/i18n/sections/support/_index.ts +41 -0
- package/templates/_base-website/i18n/sections/support/ar.ts +37 -0
- package/templates/_base-website/i18n/sections/support/de.ts +37 -0
- package/templates/_base-website/i18n/sections/support/en.ts +37 -0
- package/templates/_base-website/i18n/sections/support/es.ts +37 -0
- package/templates/_base-website/i18n/sections/support/fr.ts +37 -0
- package/templates/_base-website/i18n/sections/support/hi.ts +37 -0
- package/templates/_base-website/i18n/sections/support/id.ts +37 -0
- package/templates/_base-website/i18n/sections/support/it.ts +37 -0
- package/templates/_base-website/i18n/sections/support/ja.ts +37 -0
- package/templates/_base-website/i18n/sections/support/ko.ts +37 -0
- package/templates/_base-website/i18n/sections/support/nl.ts +37 -0
- package/templates/_base-website/i18n/sections/support/pl.ts +37 -0
- package/templates/_base-website/i18n/sections/support/pt.ts +37 -0
- package/templates/_base-website/i18n/sections/support/ru.ts +37 -0
- package/templates/_base-website/i18n/sections/support/sv.ts +37 -0
- package/templates/_base-website/i18n/sections/support/th.ts +37 -0
- package/templates/_base-website/i18n/sections/support/tr.ts +37 -0
- package/templates/_base-website/i18n/sections/support/vi.ts +37 -0
- package/templates/_base-website/i18n/sections/support/zh.ts +37 -0
- package/templates/_base-website/i18n/translations.ts +25 -0
- package/templates/_base-website/index.ts +460 -0
- package/templates/_base-website/pages/404.tsx +35 -0
- package/templates/_base-website/pages/blog/author.tsx +97 -0
- package/templates/_base-website/pages/blog/category.tsx +89 -0
- package/templates/_base-website/pages/blog/index.tsx +81 -0
- package/templates/_base-website/pages/blog/post.tsx +110 -0
- package/templates/_base-website/pages/blog/tag.tsx +86 -0
- package/templates/_base-website/pages/custom-pages/example.tsx +54 -0
- package/templates/_base-website/pages/index.tsx +29 -0
- package/templates/_base-website/pages/privacy.tsx +45 -0
- package/templates/_base-website/pages/support.tsx +154 -0
- package/templates/_base-website/pages/terms.tsx +68 -0
- package/templates/_base-website/public/images/16.png +0 -0
- package/templates/_base-website/public/images/apple-touch-icon.png +0 -0
- package/templates/_base-website/public/images/favicon-32x32.png +0 -0
- package/templates/_base-website/public/images/favicon.png +0 -0
- package/templates/_base-website/public/images/logo_dark.svg +6 -0
- package/templates/_base-website/public/images/logo_light.svg +6 -0
- package/templates/_base-website/public/images/og-image.png +0 -0
- package/templates/_base-website/public/images/screenshots/ar_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/de_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/en_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/es_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/fr_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/hi_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/id_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/it_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/ja_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/ko_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/nl_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/pl_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/pt_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/ru_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/sv_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/th_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/tr_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/vi_dashboard.jpg +0 -0
- package/templates/_base-website/public/images/screenshots/zh_dashboard.jpg +0 -0
- package/templates/_base-website/rothzerg.template.json +63 -0
- package/templates/_base-website/styles/404.css +32 -0
- package/templates/_base-website/styles/_app.css +131 -0
- package/templates/_base-website/styles/_shared.css +194 -0
- package/templates/_base-website/styles/index.css +1 -0
- package/templates/_base-website/styles/privacy.css +1 -0
- package/templates/_base-website/styles/support.css +148 -0
- package/templates/_base-website/styles/terms.css +22 -0
- package/templates/mobile-app/_gitignore +46 -0
- package/templates/mobile-app/analysis_options.yaml +28 -0
- package/templates/mobile-app/android/app/build.gradle.kts +56 -0
- package/templates/mobile-app/android/app/google-services.json +29 -0
- package/templates/mobile-app/android/app/src/debug/AndroidManifest.xml +7 -0
- package/templates/mobile-app/android/app/src/main/AndroidManifest.xml +54 -0
- package/templates/mobile-app/android/app/src/main/kotlin/com/example/{{projectNameSnake}}/MainActivity.kt +5 -0
- package/templates/mobile-app/android/app/src/main/res/drawable/launch_background.xml +12 -0
- package/templates/mobile-app/android/app/src/main/res/drawable-v21/launch_background.xml +12 -0
- package/templates/mobile-app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/templates/mobile-app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/templates/mobile-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/templates/mobile-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/templates/mobile-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/templates/mobile-app/android/app/src/main/res/values/styles.xml +18 -0
- package/templates/mobile-app/android/app/src/main/res/values-night/styles.xml +18 -0
- package/templates/mobile-app/android/app/src/profile/AndroidManifest.xml +7 -0
- package/templates/mobile-app/android/build.gradle.kts +24 -0
- package/templates/mobile-app/android/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/templates/mobile-app/android/gradle.properties +2 -0
- package/templates/mobile-app/android/settings.gradle.kts +31 -0
- package/templates/mobile-app/assets/icons/logo.png +0 -0
- package/templates/mobile-app/assets/icons/logo_dark.svg +5 -0
- package/templates/mobile-app/assets/icons/logo_light.svg +5 -0
- package/templates/mobile-app/assets/lottie/tick.json +1 -0
- package/templates/mobile-app/devtools_options.yaml +3 -0
- package/templates/mobile-app/ios/Flutter/AppFrameworkInfo.plist +26 -0
- package/templates/mobile-app/ios/Flutter/Debug.xcconfig +2 -0
- package/templates/mobile-app/ios/Flutter/Release.xcconfig +2 -0
- package/templates/mobile-app/ios/Podfile +46 -0
- package/templates/mobile-app/ios/Podfile.lock +1807 -0
- package/templates/mobile-app/ios/Runner/AppDelegate.swift +16 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +122 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +23 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png +0 -0
- package/templates/mobile-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +5 -0
- package/templates/mobile-app/ios/Runner/Base.lproj/LaunchScreen.storyboard +37 -0
- package/templates/mobile-app/ios/Runner/Base.lproj/Main.storyboard +26 -0
- package/templates/mobile-app/ios/Runner/GoogleService-Info.plist +30 -0
- package/templates/mobile-app/ios/Runner/Info.plist +70 -0
- package/templates/mobile-app/ios/Runner/Runner-Bridging-Header.h +1 -0
- package/templates/mobile-app/ios/Runner.xcodeproj/project.pbxproj +772 -0
- package/templates/mobile-app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/templates/mobile-app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/templates/mobile-app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
- package/templates/mobile-app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +101 -0
- package/templates/mobile-app/ios/Runner.xcworkspace/contents.xcworkspacedata +10 -0
- package/templates/mobile-app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/templates/mobile-app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
- package/templates/mobile-app/ios/RunnerTests/RunnerTests.swift +12 -0
- package/templates/mobile-app/l10n.yaml +5 -0
- package/templates/mobile-app/lib/core/config/app_config.dart +76 -0
- package/templates/mobile-app/lib/core/constants/app_colors.dart +13 -0
- package/templates/mobile-app/lib/core/constants/app_constants.dart +123 -0
- package/templates/mobile-app/lib/core/constants/countries.dart +199 -0
- package/templates/mobile-app/lib/core/constants/keys.dart +46 -0
- package/templates/mobile-app/lib/core/constants/languages.dart +51 -0
- package/templates/mobile-app/lib/core/services/admin_service.dart +271 -0
- package/templates/mobile-app/lib/core/services/analytics_service.dart +296 -0
- package/templates/mobile-app/lib/core/services/auth_service.dart +185 -0
- package/templates/mobile-app/lib/core/services/device_service.dart +228 -0
- package/templates/mobile-app/lib/core/services/firebase_service.dart +490 -0
- package/templates/mobile-app/lib/core/services/in_app_messaging_service.dart +166 -0
- package/templates/mobile-app/lib/core/services/logging_service.dart +451 -0
- package/templates/mobile-app/lib/core/services/messaging_service.dart +460 -0
- package/templates/mobile-app/lib/core/services/remote_config_service.dart +167 -0
- package/templates/mobile-app/lib/core/services/revenue_cat_service.dart +364 -0
- package/templates/mobile-app/lib/core/services/storage_service.dart +313 -0
- package/templates/mobile-app/lib/core/theme/dark_theme.dart +295 -0
- package/templates/mobile-app/lib/core/theme/light_theme.dart +296 -0
- package/templates/mobile-app/lib/core/utils/formatters.dart +236 -0
- package/templates/mobile-app/lib/core/utils/image_picker_helper.dart +78 -0
- package/templates/mobile-app/lib/core/utils/validators.dart +292 -0
- package/templates/mobile-app/lib/firebase_options.dart +19 -0
- package/templates/mobile-app/lib/l10n/app_en.arb +1371 -0
- package/templates/mobile-app/lib/l10n/app_localizations.dart +2042 -0
- package/templates/mobile-app/lib/l10n/app_localizations_en.dart +1033 -0
- package/templates/mobile-app/lib/main.dart +152 -0
- package/templates/mobile-app/lib/models/device_model.dart +90 -0
- package/templates/mobile-app/lib/models/news_banner.dart +53 -0
- package/templates/mobile-app/lib/models/user_model.dart +120 -0
- package/templates/mobile-app/lib/providers/admin_provider.dart +67 -0
- package/templates/mobile-app/lib/providers/auth_provider.dart +328 -0
- package/templates/mobile-app/lib/providers/remote_config_provider.dart +81 -0
- package/templates/mobile-app/lib/providers/subscription_provider.dart +67 -0
- package/templates/mobile-app/lib/providers/theme_provider.dart +51 -0
- package/templates/mobile-app/lib/screens/admin/admin_panel_screen.dart +436 -0
- package/templates/mobile-app/lib/screens/admin/admin_panel_user_details_screen.dart +942 -0
- package/templates/mobile-app/lib/screens/admin/admin_panel_users_screen.dart +344 -0
- package/templates/mobile-app/lib/screens/auth/auth_home_screen.dart +266 -0
- package/templates/mobile-app/lib/screens/auth/forgot_password_screen.dart +214 -0
- package/templates/mobile-app/lib/screens/auth/login_screen.dart +312 -0
- package/templates/mobile-app/lib/screens/auth/profile_setup_screen.dart +157 -0
- package/templates/mobile-app/lib/screens/auth/register_screen.dart +288 -0
- package/templates/mobile-app/lib/screens/developer/developer_panel_screen.dart +436 -0
- package/templates/mobile-app/lib/screens/developer/remote_config_screen.dart +315 -0
- package/templates/mobile-app/lib/screens/developer/remote_config_test_screen.dart +461 -0
- package/templates/mobile-app/lib/screens/home/home_screen.dart +270 -0
- package/templates/mobile-app/lib/screens/legal/privacy_policy_screen.dart +63 -0
- package/templates/mobile-app/lib/screens/legal/terms_screen.dart +82 -0
- package/templates/mobile-app/lib/screens/main_navigation_screen.dart +85 -0
- package/templates/mobile-app/lib/screens/premium/subscription_screen.dart +516 -0
- package/templates/mobile-app/lib/screens/profile/edit_profile_screen.dart +246 -0
- package/templates/mobile-app/lib/screens/settings/about_app_screen.dart +200 -0
- package/templates/mobile-app/lib/screens/settings/cache_manager_screen.dart +400 -0
- package/templates/mobile-app/lib/screens/settings/change_password_screen.dart +269 -0
- package/templates/mobile-app/lib/screens/settings/delete_account_screen.dart +261 -0
- package/templates/mobile-app/lib/screens/settings/settings_screen.dart +400 -0
- package/templates/mobile-app/lib/screens/splash/splash_screen.dart +125 -0
- package/templates/mobile-app/lib/widgets/app_button.dart +255 -0
- package/templates/mobile-app/lib/widgets/app_drawer.dart +207 -0
- package/templates/mobile-app/lib/widgets/bottom_sheet_selector.dart +79 -0
- package/templates/mobile-app/lib/widgets/button_banner.dart +177 -0
- package/templates/mobile-app/lib/widgets/country_picker.dart +169 -0
- package/templates/mobile-app/lib/widgets/custom_app_bar.dart +30 -0
- package/templates/mobile-app/lib/widgets/email_verification_banner.dart +163 -0
- package/templates/mobile-app/lib/widgets/empty_screen.dart +42 -0
- package/templates/mobile-app/lib/widgets/language_picker.dart +145 -0
- package/templates/mobile-app/lib/widgets/news_banner_widget.dart +264 -0
- package/templates/mobile-app/lib/widgets/remote_config/remote_config_widgets.dart +294 -0
- package/templates/mobile-app/lib/widgets/section_header.dart +23 -0
- package/templates/mobile-app/lib/widgets/success_overlay.dart +117 -0
- package/templates/mobile-app/lib/widgets/top_notification.dart +263 -0
- package/templates/mobile-app/lib/widgets/user_avatar_picker.dart +58 -0
- package/templates/mobile-app/pubspec.yaml +97 -0
- package/templates/mobile-app/rothzerg.template.json +43 -0
- package/templates/web-app/_gitignore +4 -0
- package/templates/web-app/index.html +12 -0
- package/templates/web-app/package.json +23 -0
- package/templates/web-app/rothzerg.template.json +41 -0
- package/templates/web-app/src/App.css +6 -0
- package/templates/web-app/src/App.tsx +12 -0
- package/templates/web-app/src/index.css +14 -0
- package/templates/web-app/src/main.tsx +10 -0
- package/templates/web-app/tsconfig.app.json +20 -0
- package/templates/web-app/tsconfig.json +7 -0
- package/templates/web-app/tsconfig.node.json +18 -0
- package/templates/web-app/vite.config.ts +6 -0
- package/templates/website-blog/overrides/config.ts +76 -0
- package/templates/website-blog/overrides/pages/index.tsx +63 -0
- package/templates/website-blog/rothzerg.template.json +29 -0
- package/templates/website-business/overrides/App.tsx +49 -0
- package/templates/website-business/overrides/components/SiteHeroSection.tsx +33 -0
- package/templates/website-business/overrides/config.ts +76 -0
- package/templates/website-business/overrides/pages/about.tsx +50 -0
- package/templates/website-business/overrides/pages/contact.tsx +61 -0
- package/templates/website-business/overrides/pages/index.tsx +37 -0
- package/templates/website-business/overrides/pages/services.tsx +70 -0
- package/templates/website-business/rothzerg.template.json +18 -0
- package/templates/website-mobile/overrides/App.tsx +62 -0
- package/templates/website-mobile/overrides/components/SiteHeroSection.tsx +18 -0
- package/templates/website-mobile/overrides/config.ts +76 -0
- package/templates/website-mobile/overrides/pages/index.tsx +34 -0
- package/templates/website-mobile/rothzerg.template.json +64 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<Scheme
|
|
3
|
+
LastUpgradeVersion = "1510"
|
|
4
|
+
version = "1.3">
|
|
5
|
+
<BuildAction
|
|
6
|
+
parallelizeBuildables = "YES"
|
|
7
|
+
buildImplicitDependencies = "YES">
|
|
8
|
+
<BuildActionEntries>
|
|
9
|
+
<BuildActionEntry
|
|
10
|
+
buildForTesting = "YES"
|
|
11
|
+
buildForRunning = "YES"
|
|
12
|
+
buildForProfiling = "YES"
|
|
13
|
+
buildForArchiving = "YES"
|
|
14
|
+
buildForAnalyzing = "YES">
|
|
15
|
+
<BuildableReference
|
|
16
|
+
BuildableIdentifier = "primary"
|
|
17
|
+
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
|
18
|
+
BuildableName = "Runner.app"
|
|
19
|
+
BlueprintName = "Runner"
|
|
20
|
+
ReferencedContainer = "container:Runner.xcodeproj">
|
|
21
|
+
</BuildableReference>
|
|
22
|
+
</BuildActionEntry>
|
|
23
|
+
</BuildActionEntries>
|
|
24
|
+
</BuildAction>
|
|
25
|
+
<TestAction
|
|
26
|
+
buildConfiguration = "Debug"
|
|
27
|
+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
28
|
+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
29
|
+
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
|
|
30
|
+
shouldUseLaunchSchemeArgsEnv = "YES">
|
|
31
|
+
<MacroExpansion>
|
|
32
|
+
<BuildableReference
|
|
33
|
+
BuildableIdentifier = "primary"
|
|
34
|
+
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
|
35
|
+
BuildableName = "Runner.app"
|
|
36
|
+
BlueprintName = "Runner"
|
|
37
|
+
ReferencedContainer = "container:Runner.xcodeproj">
|
|
38
|
+
</BuildableReference>
|
|
39
|
+
</MacroExpansion>
|
|
40
|
+
<Testables>
|
|
41
|
+
<TestableReference
|
|
42
|
+
skipped = "NO"
|
|
43
|
+
parallelizable = "YES">
|
|
44
|
+
<BuildableReference
|
|
45
|
+
BuildableIdentifier = "primary"
|
|
46
|
+
BlueprintIdentifier = "331C8080294A63A400263BE5"
|
|
47
|
+
BuildableName = "RunnerTests.xctest"
|
|
48
|
+
BlueprintName = "RunnerTests"
|
|
49
|
+
ReferencedContainer = "container:Runner.xcodeproj">
|
|
50
|
+
</BuildableReference>
|
|
51
|
+
</TestableReference>
|
|
52
|
+
</Testables>
|
|
53
|
+
</TestAction>
|
|
54
|
+
<LaunchAction
|
|
55
|
+
buildConfiguration = "Debug"
|
|
56
|
+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
57
|
+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
58
|
+
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
|
|
59
|
+
launchStyle = "0"
|
|
60
|
+
useCustomWorkingDirectory = "NO"
|
|
61
|
+
ignoresPersistentStateOnLaunch = "NO"
|
|
62
|
+
debugDocumentVersioning = "YES"
|
|
63
|
+
debugServiceExtension = "internal"
|
|
64
|
+
enableGPUValidationMode = "1"
|
|
65
|
+
allowLocationSimulation = "YES">
|
|
66
|
+
<BuildableProductRunnable
|
|
67
|
+
runnableDebuggingMode = "0">
|
|
68
|
+
<BuildableReference
|
|
69
|
+
BuildableIdentifier = "primary"
|
|
70
|
+
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
|
71
|
+
BuildableName = "Runner.app"
|
|
72
|
+
BlueprintName = "Runner"
|
|
73
|
+
ReferencedContainer = "container:Runner.xcodeproj">
|
|
74
|
+
</BuildableReference>
|
|
75
|
+
</BuildableProductRunnable>
|
|
76
|
+
</LaunchAction>
|
|
77
|
+
<ProfileAction
|
|
78
|
+
buildConfiguration = "Profile"
|
|
79
|
+
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
80
|
+
savedToolIdentifier = ""
|
|
81
|
+
useCustomWorkingDirectory = "NO"
|
|
82
|
+
debugDocumentVersioning = "YES">
|
|
83
|
+
<BuildableProductRunnable
|
|
84
|
+
runnableDebuggingMode = "0">
|
|
85
|
+
<BuildableReference
|
|
86
|
+
BuildableIdentifier = "primary"
|
|
87
|
+
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
|
88
|
+
BuildableName = "Runner.app"
|
|
89
|
+
BlueprintName = "Runner"
|
|
90
|
+
ReferencedContainer = "container:Runner.xcodeproj">
|
|
91
|
+
</BuildableReference>
|
|
92
|
+
</BuildableProductRunnable>
|
|
93
|
+
</ProfileAction>
|
|
94
|
+
<AnalyzeAction
|
|
95
|
+
buildConfiguration = "Debug">
|
|
96
|
+
</AnalyzeAction>
|
|
97
|
+
<ArchiveAction
|
|
98
|
+
buildConfiguration = "Release"
|
|
99
|
+
revealArchiveInOrganizer = "YES">
|
|
100
|
+
</ArchiveAction>
|
|
101
|
+
</Scheme>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import Flutter
|
|
2
|
+
import UIKit
|
|
3
|
+
import XCTest
|
|
4
|
+
|
|
5
|
+
class RunnerTests: XCTestCase {
|
|
6
|
+
|
|
7
|
+
func testExample() {
|
|
8
|
+
// If you add code to the Runner application, consider adding tests here.
|
|
9
|
+
// See https://developer.apple.com/documentation/xctest for more information about using XCTest.
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// GENERATED FILE - DO NOT EDIT
|
|
2
|
+
// Generated from config.json by scripts/apply_config.sh
|
|
3
|
+
|
|
4
|
+
import 'package:flutter/material.dart';
|
|
5
|
+
|
|
6
|
+
class AppConfig {
|
|
7
|
+
// App Information
|
|
8
|
+
static const String appName = 'APP_NAME';
|
|
9
|
+
static const String displayName = 'Boilerplate';
|
|
10
|
+
static const String description =
|
|
11
|
+
'Production-ready Flutter boilerplate for rapid app development';
|
|
12
|
+
static const String version = '1.0.0';
|
|
13
|
+
static const int buildNumber = 1;
|
|
14
|
+
|
|
15
|
+
// Organization
|
|
16
|
+
static const String orgName = 'Rothzerg';
|
|
17
|
+
static const String legalName = 'Rothzerg PTY LTD';
|
|
18
|
+
static const String website = 'https://rothzerg.com';
|
|
19
|
+
static const String supportEmail = 'support@rothzerg.com';
|
|
20
|
+
|
|
21
|
+
// Identifiers
|
|
22
|
+
static const String iosBundleId = 'com.example.{{projectNameSnake}}';
|
|
23
|
+
static const String androidAppId = 'com.example.{{projectNameSnake}}';
|
|
24
|
+
static const String firebaseProjectId = 'boilerplateapp-rothzerg';
|
|
25
|
+
|
|
26
|
+
// Branding
|
|
27
|
+
static const Color primaryColor = Color(0xFF1369F0);
|
|
28
|
+
static const Color secondaryColor = Color(0xFFFF6B35);
|
|
29
|
+
static const Color accentColor = Color(0xFF4ECDC4);
|
|
30
|
+
|
|
31
|
+
static const String headingFont = 'Poppins';
|
|
32
|
+
static const String bodyFont = 'Roboto';
|
|
33
|
+
|
|
34
|
+
// Features
|
|
35
|
+
static const bool emailAuthEnabled = true;
|
|
36
|
+
static const bool googleAuthEnabled = false;
|
|
37
|
+
static const bool appleAuthEnabled = false;
|
|
38
|
+
static const bool anonymousAuthEnabled = true;
|
|
39
|
+
|
|
40
|
+
static const bool monetizationEnabled = true;
|
|
41
|
+
static const bool subscriptionsEnabled = true;
|
|
42
|
+
static const bool adsEnabled = true;
|
|
43
|
+
|
|
44
|
+
// Localization
|
|
45
|
+
static const String defaultLocale = 'en';
|
|
46
|
+
static const List<String> supportedLocales = [
|
|
47
|
+
"en",
|
|
48
|
+
"de",
|
|
49
|
+
"fr",
|
|
50
|
+
"it",
|
|
51
|
+
"ja",
|
|
52
|
+
"ko",
|
|
53
|
+
"tr",
|
|
54
|
+
"zh",
|
|
55
|
+
"es",
|
|
56
|
+
"pt",
|
|
57
|
+
"hi",
|
|
58
|
+
"ar",
|
|
59
|
+
"ru",
|
|
60
|
+
"pl",
|
|
61
|
+
"nl",
|
|
62
|
+
"id",
|
|
63
|
+
"vi",
|
|
64
|
+
"th",
|
|
65
|
+
"sv",
|
|
66
|
+
];
|
|
67
|
+
|
|
68
|
+
// API
|
|
69
|
+
static const String apiBaseUrl = 'https://api.myapp.com';
|
|
70
|
+
static const int apiTimeout = 30000;
|
|
71
|
+
|
|
72
|
+
// Platform Versions
|
|
73
|
+
static const String iosMinVersion = '15.0';
|
|
74
|
+
static const int androidMinSdk = 24;
|
|
75
|
+
static const int androidTargetSdk = 34;
|
|
76
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import 'package:flutter/material.dart';
|
|
2
|
+
|
|
3
|
+
/// Application color constants
|
|
4
|
+
class AppColors {
|
|
5
|
+
// Primary colors
|
|
6
|
+
static const Color primaryBlue = Color(0xFF007AFF); // iOS blue
|
|
7
|
+
|
|
8
|
+
// Semantic colors
|
|
9
|
+
static const Color success = Color(0xFF34C759); // Green
|
|
10
|
+
static const Color error = Color(0xFFED4956); // Red
|
|
11
|
+
static const Color warning = Color(0xFFFFCC00); // Gold/Yellow
|
|
12
|
+
static const Color info = Color(0xFF007AFF); // Blue
|
|
13
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/// Application-wide constants
|
|
2
|
+
class AppConstants {
|
|
3
|
+
// API Configuration
|
|
4
|
+
static const int apiTimeoutSeconds = 30;
|
|
5
|
+
static const int maxRetryAttempts = 3;
|
|
6
|
+
|
|
7
|
+
// Cache Configuration
|
|
8
|
+
static const int cacheMaxAge = 3600; // 1 hour in seconds
|
|
9
|
+
static const int imageCacheSize = 100; // MB
|
|
10
|
+
|
|
11
|
+
// Pagination
|
|
12
|
+
static const int defaultPageSize = 20;
|
|
13
|
+
static const int maxPageSize = 100;
|
|
14
|
+
|
|
15
|
+
// UI Configuration
|
|
16
|
+
static const double borderRadius = 12.0;
|
|
17
|
+
static const double borderRadiusSmall = 8.0;
|
|
18
|
+
static const double borderRadiusMedium = 12.0;
|
|
19
|
+
static const double borderRadiusLarge = 16.0;
|
|
20
|
+
static const double iconSize = 24.0;
|
|
21
|
+
static const double avatarSize = 48.0;
|
|
22
|
+
|
|
23
|
+
// Button Configuration
|
|
24
|
+
static const double buttonHeight = 48.0;
|
|
25
|
+
static const double buttonHeightSmall = 40.0;
|
|
26
|
+
static const double buttonHeightMedium = 48.0;
|
|
27
|
+
static const double buttonHeightLarge = 56.0;
|
|
28
|
+
static const double buttonPaddingHorizontal = 20.0;
|
|
29
|
+
static const double buttonPaddingVerticalSmall = 8.0;
|
|
30
|
+
static const double buttonPaddingVerticalMedium = 12.0;
|
|
31
|
+
static const double buttonPaddingVerticalLarge = 16.0;
|
|
32
|
+
static const double buttonBorderWidth = 1.5;
|
|
33
|
+
static const double buttonIconSize = 18.0;
|
|
34
|
+
static const double buttonIconSpacing = 8.0;
|
|
35
|
+
static const double buttonFontSizeSmall = 14.0;
|
|
36
|
+
static const double buttonFontSizeMedium = 16.0;
|
|
37
|
+
static const double buttonFontSizeLarge = 18.0;
|
|
38
|
+
static const double buttonDisabledAlpha = 0.38;
|
|
39
|
+
static const double buttonHoverAlpha = 0.08;
|
|
40
|
+
static const double buttonFocusAlpha = 0.12;
|
|
41
|
+
static const double buttonPressedAlpha = 0.16;
|
|
42
|
+
|
|
43
|
+
// Animation Durations
|
|
44
|
+
static const Duration shortAnimation = Duration(milliseconds: 200);
|
|
45
|
+
static const Duration mediumAnimation = Duration(milliseconds: 350);
|
|
46
|
+
static const Duration longAnimation = Duration(milliseconds: 500);
|
|
47
|
+
|
|
48
|
+
// Debounce/Throttle
|
|
49
|
+
static const Duration searchDebounce = Duration(milliseconds: 500);
|
|
50
|
+
static const Duration tapThrottle = Duration(milliseconds: 300);
|
|
51
|
+
|
|
52
|
+
// Storage Keys
|
|
53
|
+
static const String keyThemeMode = 'theme_mode';
|
|
54
|
+
static const String keyLocale = 'locale';
|
|
55
|
+
static const String keyOnboardingComplete = 'onboarding_complete';
|
|
56
|
+
static const String keyFirstRun = 'first_run';
|
|
57
|
+
static const String keyUserId = 'user_id';
|
|
58
|
+
static const String keyUserEmail = 'user_email';
|
|
59
|
+
|
|
60
|
+
// Remote Config Keys
|
|
61
|
+
static const String rcEnableGoogleAuth = 'enable_google_auth';
|
|
62
|
+
static const String rcEnableAppleAuth = 'enable_apple_auth';
|
|
63
|
+
static const String rcEnableAnonymousAuth = 'enable_anonymous_auth';
|
|
64
|
+
static const String rcMaintenanceMode = 'maintenance_mode';
|
|
65
|
+
static const String rcMinimumVersion = 'minimum_version';
|
|
66
|
+
static const String rcForceUpdate = 'force_update';
|
|
67
|
+
|
|
68
|
+
// Remote Config Settings
|
|
69
|
+
static const Duration remoteConfigCacheDuration = Duration(minutes: 1);
|
|
70
|
+
static const Duration remoteConfigFetchTimeout = Duration(seconds: 10);
|
|
71
|
+
|
|
72
|
+
// Collection Names (Firestore)
|
|
73
|
+
static const String collectionUsers = 'users';
|
|
74
|
+
static const String collectionSettings = 'settings';
|
|
75
|
+
|
|
76
|
+
// Date Formats
|
|
77
|
+
static const String dateFormatShort = 'MMM d, yyyy';
|
|
78
|
+
static const String dateFormatLong = 'MMMM d, yyyy';
|
|
79
|
+
static const String dateFormatFull = 'EEEE, MMMM d, yyyy';
|
|
80
|
+
static const String timeFormat = 'h:mm a';
|
|
81
|
+
static const String dateTimeFormat = 'MMM d, yyyy h:mm a';
|
|
82
|
+
|
|
83
|
+
// Regex Patterns
|
|
84
|
+
static final RegExp emailRegex = RegExp(
|
|
85
|
+
r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$',
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
static final RegExp phoneRegex = RegExp(r'^\+?[\d\s-()]+$');
|
|
89
|
+
|
|
90
|
+
// Error Messages
|
|
91
|
+
static const String errorGeneric = 'An error occurred. Please try again.';
|
|
92
|
+
static const String errorNetwork =
|
|
93
|
+
'Network error. Please check your connection.';
|
|
94
|
+
static const String errorTimeout = 'Request timed out. Please try again.';
|
|
95
|
+
static const String errorUnauthorized =
|
|
96
|
+
'You are not authorized to perform this action.';
|
|
97
|
+
static const String errorNotFound = 'The requested resource was not found.';
|
|
98
|
+
|
|
99
|
+
// Success Messages
|
|
100
|
+
static const String successGeneric = 'Operation completed successfully.';
|
|
101
|
+
static const String successSaved = 'Changes saved successfully.';
|
|
102
|
+
static const String successDeleted = 'Deleted successfully.';
|
|
103
|
+
|
|
104
|
+
// URL Patterns
|
|
105
|
+
static final RegExp urlRegex = RegExp(
|
|
106
|
+
r'https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)',
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
// File Upload
|
|
110
|
+
static const int maxImageSizeBytes = 5 * 1024 * 1024; // 5 MB
|
|
111
|
+
static const int maxVideoSizeBytes = 50 * 1024 * 1024; // 50 MB
|
|
112
|
+
static const List<String> allowedImageTypes = [
|
|
113
|
+
'jpg',
|
|
114
|
+
'jpeg',
|
|
115
|
+
'png',
|
|
116
|
+
'gif',
|
|
117
|
+
'webp',
|
|
118
|
+
];
|
|
119
|
+
static const List<String> allowedVideoTypes = ['mp4', 'mov', 'avi'];
|
|
120
|
+
|
|
121
|
+
// Private constructor to prevent instantiation
|
|
122
|
+
const AppConstants._();
|
|
123
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import '../../l10n/app_localizations.dart';
|
|
2
|
+
|
|
3
|
+
/// Country data for country selection
|
|
4
|
+
class Country {
|
|
5
|
+
final String code;
|
|
6
|
+
final String name;
|
|
7
|
+
final String emoji;
|
|
8
|
+
|
|
9
|
+
const Country({required this.code, required this.name, required this.emoji});
|
|
10
|
+
|
|
11
|
+
/// Get localized country name
|
|
12
|
+
String getLocalizedName(AppLocalizations l10n) {
|
|
13
|
+
switch (code) {
|
|
14
|
+
case 'AE':
|
|
15
|
+
return l10n.countryAE;
|
|
16
|
+
case 'AR':
|
|
17
|
+
return l10n.countryAR;
|
|
18
|
+
case 'AT':
|
|
19
|
+
return l10n.countryAT;
|
|
20
|
+
case 'AU':
|
|
21
|
+
return l10n.countryAU;
|
|
22
|
+
case 'BD':
|
|
23
|
+
return l10n.countryBD;
|
|
24
|
+
case 'BE':
|
|
25
|
+
return l10n.countryBE;
|
|
26
|
+
case 'BG':
|
|
27
|
+
return l10n.countryBG;
|
|
28
|
+
case 'BR':
|
|
29
|
+
return l10n.countryBR;
|
|
30
|
+
case 'CA':
|
|
31
|
+
return l10n.countryCA;
|
|
32
|
+
case 'CH':
|
|
33
|
+
return l10n.countryCH;
|
|
34
|
+
case 'CL':
|
|
35
|
+
return l10n.countryCL;
|
|
36
|
+
case 'CN':
|
|
37
|
+
return l10n.countryCN;
|
|
38
|
+
case 'CO':
|
|
39
|
+
return l10n.countryCO;
|
|
40
|
+
case 'CZ':
|
|
41
|
+
return l10n.countryCZ;
|
|
42
|
+
case 'DE':
|
|
43
|
+
return l10n.countryDE;
|
|
44
|
+
case 'DK':
|
|
45
|
+
return l10n.countryDK;
|
|
46
|
+
case 'EG':
|
|
47
|
+
return l10n.countryEG;
|
|
48
|
+
case 'ES':
|
|
49
|
+
return l10n.countryES;
|
|
50
|
+
case 'FI':
|
|
51
|
+
return l10n.countryFI;
|
|
52
|
+
case 'FR':
|
|
53
|
+
return l10n.countryFR;
|
|
54
|
+
case 'GB':
|
|
55
|
+
return l10n.countryGB;
|
|
56
|
+
case 'GR':
|
|
57
|
+
return l10n.countryGR;
|
|
58
|
+
case 'HU':
|
|
59
|
+
return l10n.countryHU;
|
|
60
|
+
case 'ID':
|
|
61
|
+
return l10n.countryID;
|
|
62
|
+
case 'IE':
|
|
63
|
+
return l10n.countryIE;
|
|
64
|
+
case 'IL':
|
|
65
|
+
return l10n.countryIL;
|
|
66
|
+
case 'IN':
|
|
67
|
+
return l10n.countryIN;
|
|
68
|
+
case 'IT':
|
|
69
|
+
return l10n.countryIT;
|
|
70
|
+
case 'JP':
|
|
71
|
+
return l10n.countryJP;
|
|
72
|
+
case 'KE':
|
|
73
|
+
return l10n.countryKE;
|
|
74
|
+
case 'KR':
|
|
75
|
+
return l10n.countryKR;
|
|
76
|
+
case 'MX':
|
|
77
|
+
return l10n.countryMX;
|
|
78
|
+
case 'MY':
|
|
79
|
+
return l10n.countryMY;
|
|
80
|
+
case 'NG':
|
|
81
|
+
return l10n.countryNG;
|
|
82
|
+
case 'NL':
|
|
83
|
+
return l10n.countryNL;
|
|
84
|
+
case 'NO':
|
|
85
|
+
return l10n.countryNO;
|
|
86
|
+
case 'NZ':
|
|
87
|
+
return l10n.countryNZ;
|
|
88
|
+
case 'PE':
|
|
89
|
+
return l10n.countryPE;
|
|
90
|
+
case 'PH':
|
|
91
|
+
return l10n.countryPH;
|
|
92
|
+
case 'PK':
|
|
93
|
+
return l10n.countryPK;
|
|
94
|
+
case 'PL':
|
|
95
|
+
return l10n.countryPL;
|
|
96
|
+
case 'PT':
|
|
97
|
+
return l10n.countryPT;
|
|
98
|
+
case 'RO':
|
|
99
|
+
return l10n.countryRO;
|
|
100
|
+
case 'RU':
|
|
101
|
+
return l10n.countryRU;
|
|
102
|
+
case 'SA':
|
|
103
|
+
return l10n.countrySA;
|
|
104
|
+
case 'SE':
|
|
105
|
+
return l10n.countrySE;
|
|
106
|
+
case 'SG':
|
|
107
|
+
return l10n.countrySG;
|
|
108
|
+
case 'TH':
|
|
109
|
+
return l10n.countryTH;
|
|
110
|
+
case 'TR':
|
|
111
|
+
return l10n.countryTR;
|
|
112
|
+
case 'UA':
|
|
113
|
+
return l10n.countryUA;
|
|
114
|
+
case 'US':
|
|
115
|
+
return l10n.countryUS;
|
|
116
|
+
case 'VE':
|
|
117
|
+
return l10n.countryVE;
|
|
118
|
+
case 'VN':
|
|
119
|
+
return l10n.countryVN;
|
|
120
|
+
case 'ZA':
|
|
121
|
+
return l10n.countryZA;
|
|
122
|
+
default:
|
|
123
|
+
return name; // Fallback to English name
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@override
|
|
128
|
+
String toString() => '$emoji $name';
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/// List of countries with ISO 3166-1 alpha-2 codes (sorted by country code)
|
|
132
|
+
const List<Country> countries = [
|
|
133
|
+
Country(code: 'AE', name: 'United Arab Emirates', emoji: '🇦🇪'),
|
|
134
|
+
Country(code: 'AR', name: 'Argentina', emoji: '🇦🇷'),
|
|
135
|
+
Country(code: 'AT', name: 'Austria', emoji: '🇦🇹'),
|
|
136
|
+
Country(code: 'AU', name: 'Australia', emoji: '🇦🇺'),
|
|
137
|
+
Country(code: 'BD', name: 'Bangladesh', emoji: '🇧🇩'),
|
|
138
|
+
Country(code: 'BE', name: 'Belgium', emoji: '🇧🇪'),
|
|
139
|
+
Country(code: 'BG', name: 'Bulgaria', emoji: '🇧🇬'),
|
|
140
|
+
Country(code: 'BR', name: 'Brazil', emoji: '🇧🇷'),
|
|
141
|
+
Country(code: 'CA', name: 'Canada', emoji: '🇨🇦'),
|
|
142
|
+
Country(code: 'CH', name: 'Switzerland', emoji: '🇨ðŸ‡'),
|
|
143
|
+
Country(code: 'CL', name: 'Chile', emoji: '🇨🇱'),
|
|
144
|
+
Country(code: 'CN', name: 'China', emoji: '🇨🇳'),
|
|
145
|
+
Country(code: 'CO', name: 'Colombia', emoji: '🇨🇴'),
|
|
146
|
+
Country(code: 'CZ', name: 'Czech Republic', emoji: '🇨🇿'),
|
|
147
|
+
Country(code: 'DE', name: 'Germany', emoji: '🇩🇪'),
|
|
148
|
+
Country(code: 'DK', name: 'Denmark', emoji: '🇩🇰'),
|
|
149
|
+
Country(code: 'EG', name: 'Egypt', emoji: '🇪🇬'),
|
|
150
|
+
Country(code: 'ES', name: 'Spain', emoji: '🇪🇸'),
|
|
151
|
+
Country(code: 'FI', name: 'Finland', emoji: '🇫🇮'),
|
|
152
|
+
Country(code: 'FR', name: 'France', emoji: '🇫🇷'),
|
|
153
|
+
Country(code: 'GB', name: 'United Kingdom', emoji: '🇬🇧'),
|
|
154
|
+
Country(code: 'GR', name: 'Greece', emoji: '🇬🇷'),
|
|
155
|
+
Country(code: 'HU', name: 'Hungary', emoji: 'ðŸ‡ðŸ‡º'),
|
|
156
|
+
Country(code: 'ID', name: 'Indonesia', emoji: '🇮🇩'),
|
|
157
|
+
Country(code: 'IE', name: 'Ireland', emoji: '🇮🇪'),
|
|
158
|
+
Country(code: 'IL', name: 'Israel', emoji: '🇮🇱'),
|
|
159
|
+
Country(code: 'IN', name: 'India', emoji: '🇮🇳'),
|
|
160
|
+
Country(code: 'IT', name: 'Italy', emoji: '🇮🇹'),
|
|
161
|
+
Country(code: 'JP', name: 'Japan', emoji: '🇯🇵'),
|
|
162
|
+
Country(code: 'KE', name: 'Kenya', emoji: '🇰🇪'),
|
|
163
|
+
Country(code: 'KR', name: 'South Korea', emoji: '🇰🇷'),
|
|
164
|
+
Country(code: 'MX', name: 'Mexico', emoji: '🇲🇽'),
|
|
165
|
+
Country(code: 'MY', name: 'Malaysia', emoji: '🇲🇾'),
|
|
166
|
+
Country(code: 'NG', name: 'Nigeria', emoji: '🇳🇬'),
|
|
167
|
+
Country(code: 'NL', name: 'Netherlands', emoji: '🇳🇱'),
|
|
168
|
+
Country(code: 'NO', name: 'Norway', emoji: '🇳🇴'),
|
|
169
|
+
Country(code: 'NZ', name: 'New Zealand', emoji: '🇳🇿'),
|
|
170
|
+
Country(code: 'PE', name: 'Peru', emoji: '🇵🇪'),
|
|
171
|
+
Country(code: 'PH', name: 'Philippines', emoji: '🇵ðŸ‡'),
|
|
172
|
+
Country(code: 'PK', name: 'Pakistan', emoji: '🇵🇰'),
|
|
173
|
+
Country(code: 'PL', name: 'Poland', emoji: '🇵🇱'),
|
|
174
|
+
Country(code: 'PT', name: 'Portugal', emoji: '🇵🇹'),
|
|
175
|
+
Country(code: 'RO', name: 'Romania', emoji: '🇷🇴'),
|
|
176
|
+
Country(code: 'RU', name: 'Russia', emoji: '🇷🇺'),
|
|
177
|
+
Country(code: 'SA', name: 'Saudi Arabia', emoji: '🇸🇦'),
|
|
178
|
+
Country(code: 'SE', name: 'Sweden', emoji: '🇸🇪'),
|
|
179
|
+
Country(code: 'SG', name: 'Singapore', emoji: '🇸🇬'),
|
|
180
|
+
Country(code: 'TH', name: 'Thailand', emoji: '🇹ðŸ‡'),
|
|
181
|
+
Country(code: 'TR', name: 'Turkey', emoji: '🇹🇷'),
|
|
182
|
+
Country(code: 'UA', name: 'Ukraine', emoji: '🇺🇦'),
|
|
183
|
+
Country(code: 'US', name: 'United States', emoji: '🇺🇸'),
|
|
184
|
+
Country(code: 'VE', name: 'Venezuela', emoji: '🇻🇪'),
|
|
185
|
+
Country(code: 'VN', name: 'Vietnam', emoji: '🇻🇳'),
|
|
186
|
+
Country(code: 'ZA', name: 'South Africa', emoji: '🇿🇦'),
|
|
187
|
+
];
|
|
188
|
+
|
|
189
|
+
/// Get country by code
|
|
190
|
+
Country? getCountryByCode(String? code) {
|
|
191
|
+
if (code == null || code.isEmpty) return null;
|
|
192
|
+
try {
|
|
193
|
+
return countries.firstWhere(
|
|
194
|
+
(country) => country.code.toUpperCase() == code.toUpperCase(),
|
|
195
|
+
);
|
|
196
|
+
} catch (e) {
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
class ApiKeys {
|
|
2
|
+
// RevenueCat API Keys (Optional - for subscriptions)
|
|
3
|
+
// Get from RevenueCat Dashboard > API Keys
|
|
4
|
+
static const String premiumEntitlement = 'premium';
|
|
5
|
+
static const String revenueCatApiKeyIOS = 'test_MVdsdhixEFMgMpsgOCSPpELMEOR';
|
|
6
|
+
static const String revenueCatApiKeyAndroid =
|
|
7
|
+
'test_MVdsdhixEFMgMpsgOCSPpELMEOR';
|
|
8
|
+
static const String monthlySubscriptionProductId = 'premium_monthly';
|
|
9
|
+
static const String yearlySubscriptionProductId = 'premium_yearly';
|
|
10
|
+
|
|
11
|
+
// AdMob Configuration (Optional - for ads)
|
|
12
|
+
// Get from AdMob Console
|
|
13
|
+
static const String admobAppIdIOS = 'ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX';
|
|
14
|
+
static const String admobAppIdAndroid =
|
|
15
|
+
'ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX';
|
|
16
|
+
|
|
17
|
+
// AdMob Ad Unit IDs
|
|
18
|
+
static const String admobBannerUnitIOS =
|
|
19
|
+
'ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX';
|
|
20
|
+
static const String admobBannerUnitAndroid =
|
|
21
|
+
'ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX';
|
|
22
|
+
static const String admobInterstitialUnitIOS =
|
|
23
|
+
'ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX';
|
|
24
|
+
static const String admobInterstitialUnitAndroid =
|
|
25
|
+
'ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX';
|
|
26
|
+
static const String admobRewardedUnitIOS =
|
|
27
|
+
'ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX';
|
|
28
|
+
static const String admobRewardedUnitAndroid =
|
|
29
|
+
'ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX';
|
|
30
|
+
|
|
31
|
+
// Web Client IDs (for Google Sign-In)
|
|
32
|
+
static const String googleWebClientId =
|
|
33
|
+
'YOUR_GOOGLE_WEB_CLIENT_ID.apps.googleusercontent.com';
|
|
34
|
+
|
|
35
|
+
// App Store URLs (Replace with your actual app IDs)
|
|
36
|
+
static const String iosAppStoreId =
|
|
37
|
+
'123456789'; // Replace with your iOS App ID
|
|
38
|
+
static const String androidPackageName =
|
|
39
|
+
'com.example.{{projectNameSnake}}'; // Replace with your package name
|
|
40
|
+
static const String iosAppStoreUrl =
|
|
41
|
+
'https://apps.apple.com/app/id$iosAppStoreId';
|
|
42
|
+
static const String androidPlayStoreUrl =
|
|
43
|
+
'https://play.google.com/store/apps/details?id=$androidPackageName';
|
|
44
|
+
|
|
45
|
+
ApiKeys._();
|
|
46
|
+
}
|