{"id":13619597,"url":"https://github.com/flutter/io_flip","last_synced_at":"2025-07-19T09:01:47.062Z","repository":{"id":163230607,"uuid":"600185100","full_name":"flutter/io_flip","owner":"flutter","description":"Google I/O 2023 FLIP AI-designed card game built with Flutter \u0026 Firebase","archived":false,"fork":false,"pushed_at":"2025-07-11T01:12:19.000Z","size":94353,"stargazers_count":680,"open_issues_count":8,"forks_count":110,"subscribers_count":51,"default_branch":"main","last_synced_at":"2025-07-11T04:22:53.423Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flutter.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-02-10T19:22:55.000Z","updated_at":"2025-07-10T23:52:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"40f9c1c7-5d48-4d8e-b059-9049c320059e","html_url":"https://github.com/flutter/io_flip","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/flutter/io_flip","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flutter%2Fio_flip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flutter%2Fio_flip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flutter%2Fio_flip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flutter%2Fio_flip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flutter","download_url":"https://codeload.github.com/flutter/io_flip/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flutter%2Fio_flip/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265909094,"owners_count":23847479,"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":[],"created_at":"2024-08-01T21:00:45.453Z","updated_at":"2025-07-19T09:01:46.969Z","avatar_url":"https://github.com/flutter.png","language":"Dart","funding_links":[],"categories":["Projects"],"sub_categories":["Open source repos"],"readme":"# I/O FLIP\n\n[![I/O FLIP Header][logo]][io_flip_link]\n\n[![io_flip][build_status_badge]][workflow_link]\n![coverage][coverage_badge]\n[![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link]\n\nAn AI-designed card game built with [Flutter][flutter_link] and [Firebase][firebase_link] for [Google I/O 2023][google_io_link].\n\n[Try it now][io_flip_link] and [learn about how it's made][how_its_made].\n\n_Built by [Very Good Ventures][very_good_ventures_link] in partnership with Google_\n\n_Created using [Very Good CLI][very_good_cli_link] 🤖_\n\n---\n\n## Getting Started 🚀\n\nThis project contains 3 flavors:\n\n- development\n- staging\n- production\n\nTo run the desired flavor either use the launch configuration in VSCode/Android Studio or use the following commands:\n\n```sh\n# Development\n$ flutter run --flavor development --target lib/main_development.dart\n\n# Staging\n$ flutter run --flavor staging --target lib/main_staging.dart\n\n# Production\n$ flutter run --flavor production --target lib/main_production.dart\n```\n\n_\\*I/O FLIP works on Web for desktop and mobile._\n\n## Loading initial data into database\n\nCheck [the data loader docs](api/tools/data_loader) for documentation on how the initial data is loaded.\n\n## Running the loading testing bot locally\n\n[Flop](./flop) is a loading testing bot written in Flutter that runs on web meant to help testing\nthe scaling of the backend of the game.\n\nTo execute it in the staging environment, open a terminal an execute:\n\n```bash\n./scripts/start_flop_webserver.sh \u003cENCRYPTION_KEY\u003e \u003cENCRYPTION_IV\u003e \u003cRECAPTCHA_KEY\u003e \u003cAPPCHECK_DEBUG_TOKEN\u003e\n```\n\nYou will be able to open the url where Flop started and check the progress of the bot run.\n\nWhich page represents one instance of Flop, to start several instance at the same time,\nthe `scripts/spam_flop.sh` can be used, this scripts needs to receive the port where Flop\nstarted, so assuming that flop is running on `http://localhost:54678`, run:\n\n```bash\n./scripts/spam_flop.sh 54678\n```\n\nThe same can be accomplished by using the `army.html` page that is bundled in the in it.\nWhen loaded you will be able to select how many Flop instances to load, and it is also possible\nto autoload instances of the bot by adding a # with the number of desired bots to spawn.\n\n---\n\n## Running Tests 🧪\n\nTo run all unit and widget tests use the following command:\n\n```sh\n$ flutter test --coverage --test-randomize-ordering-seed random\n```\n\nTo view the generated coverage report you can use [lcov](https://github.com/linux-test-project/lcov).\n\n```sh\n# Generate Coverage Report\n$ genhtml coverage/lcov.info -o coverage/\n\n# Open Coverage Report\n$ open coverage/index.html\n```\n\n---\n\n## Working with Translations 🌐\n\nThis project relies on [flutter_localizations][flutter_localizations_link] and follows the [official internationalization guide for Flutter][internationalization_link].\n\n### Adding Strings\n\n1. To add a new localizable string, open the `app_en.arb` file at `lib/l10n/arb/app_en.arb`.\n\n```arb\n{\n    \"@@locale\": \"en\",\n    \"counterAppBarTitle\": \"Counter\",\n    \"@counterAppBarTitle\": {\n        \"description\": \"Text shown in the AppBar of the Counter Page\"\n    }\n}\n```\n\n2. Then add a new key/value and description\n\n```arb\n{\n    \"@@locale\": \"en\",\n    \"counterAppBarTitle\": \"Counter\",\n    \"@counterAppBarTitle\": {\n        \"description\": \"Text shown in the AppBar of the Counter Page\"\n    },\n    \"helloWorld\": \"Hello World\",\n    \"@helloWorld\": {\n        \"description\": \"Hello World Text\"\n    }\n}\n```\n\n3. Use the new string\n\n```dart\nimport 'package:io_flip/l10n/l10n.dart';\n\n@override\nWidget build(BuildContext context) {\n  final l10n = context.l10n;\n  return Text(l10n.helloWorld);\n}\n```\n\n### Adding Supported Locales\n\nUpdate the `CFBundleLocalizations` array in the `Info.plist` at `ios/Runner/Info.plist` to include the new locale.\n\n```xml\n    ...\n\n    \u003ckey\u003eCFBundleLocalizations\u003c/key\u003e\n\t\u003carray\u003e\n\t\t\u003cstring\u003een\u003c/string\u003e\n\t\t\u003cstring\u003ees\u003c/string\u003e\n\t\u003c/array\u003e\n\n    ...\n```\n\n### Adding Translations\n\n1. For each supported locale, add a new ARB file in `lib/l10n/arb`.\n\n```\n├── l10n\n│   ├── arb\n│   │   ├── app_en.arb\n│   │   └── app_es.arb\n```\n\n2. Add the translated strings to each `.arb` file:\n\n`app_en.arb`\n\n```arb\n{\n    \"@@locale\": \"en\",\n    \"counterAppBarTitle\": \"Counter\",\n    \"@counterAppBarTitle\": {\n        \"description\": \"Text shown in the AppBar of the Counter Page\"\n    }\n}\n```\n\n`app_es.arb`\n\n```arb\n{\n    \"@@locale\": \"es\",\n    \"counterAppBarTitle\": \"Contador\",\n    \"@counterAppBarTitle\": {\n        \"description\": \"Texto mostrado en la AppBar de la página del contador\"\n    }\n}\n```\n\n[build_status_badge]: https://github.com/VGVentures/top_dash/actions/workflows/main.yaml/badge.svg\n[coverage_badge]: coverage_badge.svg\n[firebase_link]: https://firebase.google.com/\n[flutter_link]: https://flutter.dev\n[flutter_localizations_link]: https://api.flutter.dev/flutter/flutter_localizations/flutter_localizations-library.html\n[google_io_link]: https://io.google/2023/\n[how_its_made]: https://flutter.dev/flip\n[internationalization_link]: https://flutter.dev/docs/development/accessibility-and-localization/internationalization\n[io_flip_link]: https://flip.withgoogle.com/\n[logo]: art/readme_header.png\n[very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg\n[very_good_analysis_link]: https://pub.dev/packages/very_good_analysis\n[very_good_cli_link]: https://github.com/VeryGoodOpenSource/very_good_cli\n[very_good_ventures_link]: https://verygood.ventures/\n[workflow_link]: https://github.com/VGVentures/top_dash/actions/workflows/main.yaml\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflutter%2Fio_flip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflutter%2Fio_flip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflutter%2Fio_flip/lists"}