{"id":17488640,"url":"https://github.com/daohoangson/flutter-tinhte_demo","last_synced_at":"2025-04-13T15:36:28.063Z","repository":{"id":38236924,"uuid":"151536358","full_name":"daohoangson/flutter-tinhte_demo","owner":"daohoangson","description":"Tinh tế mobile apps built with Flutter for evaluation purposes.","archived":false,"fork":false,"pushed_at":"2024-12-17T00:08:19.000Z","size":23248,"stargazers_count":29,"open_issues_count":23,"forks_count":11,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-12-22T21:06:09.250Z","etag":null,"topics":["android","cloud-functions-for-firebase","dart","firebase-messaging","flutter","ios","typescript","xenforo"],"latest_commit_sha":null,"homepage":"https://tinhte.vn","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/daohoangson.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-04T07:45:40.000Z","updated_at":"2024-11-24T17:43:15.000Z","dependencies_parsed_at":"2024-03-08T02:25:53.501Z","dependency_job_id":"77e16f8b-6835-43ca-823f-bd8185c8cdb0","html_url":"https://github.com/daohoangson/flutter-tinhte_demo","commit_stats":{"total_commits":610,"total_committers":4,"mean_commits":152.5,"dds":"0.14754098360655743","last_synced_commit":"8e8fdad2aa58ca03a1280b1a090fac6e840159e8"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daohoangson%2Fflutter-tinhte_demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daohoangson%2Fflutter-tinhte_demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daohoangson%2Fflutter-tinhte_demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daohoangson%2Fflutter-tinhte_demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daohoangson","download_url":"https://codeload.github.com/daohoangson/flutter-tinhte_demo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248737529,"owners_count":21153784,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","cloud-functions-for-firebase","dart","firebase-messaging","flutter","ios","typescript","xenforo"],"created_at":"2024-10-19T04:08:43.325Z","updated_at":"2025-04-13T15:36:28.038Z","avatar_url":"https://github.com/daohoangson.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tinhte_demo\n\nTinh tế mobile apps built with Flutter for evaluation purposes.\n\n## Try it\n\nGoogle Play Store: [Open Beta Testing](https://play.google.com/apps/testing/com.daohoangson.flutter_ttdemo)\n\nApple App Store: [TestFlight](https://testflight.apple.com/join/4lGGYeSU)\n\nOr check the PR / commit comments, this repo has GitHub Actions setup to build and\nupload the apps to GCS (automatically deleted after 30 days).\n\n## Features\n\n- Supported platforms: Android, iOS, Linux, macOS, Windows\n- State management with [provider](https://pub.dev/packages/provider)\n- Apple login via [sign_in_with_apple](https://pub.dev/packages/sign_in_with_apple)\n- Google login via [google_sign_in](https://pub.dev/packages/google_sign_in)\n- Store authentication token with [flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage)\n- Render HTML with [flutter_widget_from_html](https://pub.dev/packages/flutter_widget_from_html)\n- Push notification via [firebase_messaging](https://pub.dev/packages/firebase_messaging)\n- Dark mode: on / off / auto\n- Developer hidden menu (tap version in about dialog thrice)\n- Android, iOS domain association with [built-in deep link support](https://docs.flutter.dev/ui/navigation/deep-linking)\n\n\u003cdetails\u003e\n\u003csummary\u003eScreenshots\u003c/summary\u003e\n\n### Home\n\n| Wide                                              | Narrow                                              |\n|---------------------------------------------------|-----------------------------------------------------|\n| ![](test/src/widgets/home/goldens/top_5/wide.png) | ![](test/src/widgets/home/goldens/top_5/narrow.png) |\n\n### Thread view\n\n| Normal thread                                          | With post replies                                      | Poll                                                   |\n|--------------------------------------------------------|--------------------------------------------------------|--------------------------------------------------------|\n| ![](test/src/widgets/goldens/posts/thread_3704815.png) | ![](test/src/widgets/goldens/posts/thread_3704463.png) | ![](test/src/widgets/goldens/posts/thread_3441248.png) |\n\n| Tinhte Fact                                          | Background post                                          |\n|------------------------------------------------------|----------------------------------------------------------|\n| ![](test/src/widgets/tinhte/goldens/tinhte_fact.png) | ![](test/src/widgets/tinhte/goldens/background_post.png) |\n\n### Interactive UI\n\n| Compare                                        | Galleria                                        | YouTube                                        |\n|------------------------------------------------|-------------------------------------------------|------------------------------------------------|\n| ![](test/src/widgets/goldens/html/compare.png) | ![](test/src/widgets/goldens/html/galleria.png) | ![](test/src/widgets/goldens/html/youtube.png) |\n\n\u003c/details\u003e\n\n## FAQ\n\n### How to build the app?\n\nAll credentials are encrypted so you won't be able to compile the app immediately after a git pull.\nYou have to replace the files mentioned in [.gitattributes](https://github.com/daohoangson/flutter-tinhte_demo/blob/master/.gitattributes) to build.\n\nFor example, `lib/config.encrypted.dart` should look like below:\n\n```dart\nimport 'package:the_app/src/config.dart';\n\nclass Config extends ConfigBase {\n  @override\n  final apiRoot = 'https://domain.com/community/api/index.php';\n\n  @override\n  final clientId = 'abc';\n\n  @override\n  final clientSecret = 'xyz';\n\n  @override\n  final siteRoot = 'https://domain.com/community';\n}\n```\n\nSee [How to use another package name?](#how-to-use-another-package-name) for more information to rename the app.\n\n### How to support a new language?\n\n1. Translate the `lib/l10n/intl_messages.arb` into your new language. Save it as `/lib/l10n/intl_(language_code).arb`.\n1. Execute `./tool/l10n_2.sh` to generate l10n files\n1. Update `supportedLocales` param in `lib/main.dart`\n1. Update `isSupported` method in `lib/src/intl.dart`\n1. Update `CFBundleLocalizations` in `ios/Runner/Info.plist` to include the new language code\n\n### How to use another package name?\n\nPick a unique package name across Play Store and App Store then update these files:\n\n- `.github/workflows/flutter.yml` GCS_BUCKET, GCS_URL\n- `android/app/build.gradle` applicationId, signingConfigs.release\n- `android/app/src/main/AndroidManifest.xml` package, android:label\n- `android/app/src/main/res/values/strings.xml` app_name\n- `android/fastlane/metadata/android/en-US/` title.txt, full_description.txt, short_description.txt\n- `android/fastlane/Appfile`\n- `firebase/.firebaserc` projects.default\n- `ios/Runner.xcodeproj/project.pbxproj` PRODUCT_BUNDLE_IDENTIFIER x2, PROVISIONING_PROFILE_SPECIFIER x2\n- `ios/Runner/Info.plist` CFBundleName, CFBundleURLSchemes\n- `ios/fastlane/Appfile`\n- `ios/fastlane/Fastfile` xcargs (PROVISIONING_PROFILE_SPECIFIER), manifest (appURL, displayImageURL, fullSizeImageURL)\n- `ios/fastlane/Matchfile`\n- `linux/CMakeLists.txt` APPLICATION_ID\n- `macos/Runner/Configs/AppInfo.xcconfig`\n- `macos/Runner.xcodeproj/project.pbxproj` PROVISIONING_PROFILE_SPECIFIER x3\n- `macos/fastlane/Appfile`\n- `macos/fastlane/Fastfile` notarize\n- `macos/fastlane/Matchfile`\n- `windows/runner/Runner.rc`\n- `pubspec.yaml` msix_config\u003eidentity_name\n- Re-run `flutterfire configure` to update Firebase apps\n\nYou will also need to move the files within `android/app/src/main/java/com/daohoangson/flutter_ttdemo` to another directory to match the new Android package.\n\nFor Firebase Messaging, execute these commands to set the proper config variables:\n\n```bash\nfirebase functions:config:set websub.hub=https://domain.com/xenforo/api/index.php\\?subscriptions\n\nfirebase functions:config:set websub.url=https://region-project.cloudfunctions.net/websub\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaohoangson%2Fflutter-tinhte_demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaohoangson%2Fflutter-tinhte_demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaohoangson%2Fflutter-tinhte_demo/lists"}