{"id":21507504,"url":"https://github.com/helloimkevo/flutterapps","last_synced_at":"2026-04-09T08:34:01.609Z","repository":{"id":263073076,"uuid":"889267451","full_name":"HelloImKevo/FlutterApps","owner":"HelloImKevo","description":"Playground for creating simple Flutter apps.","archived":false,"fork":false,"pushed_at":"2025-03-07T23:05:30.000Z","size":316,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-08T00:18:54.266Z","etag":null,"topics":["dart","flutter","udemy-course-project"],"latest_commit_sha":null,"homepage":"","language":"C++","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/HelloImKevo.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":"2024-11-16T00:07:10.000Z","updated_at":"2025-03-07T23:05:33.000Z","dependencies_parsed_at":"2024-12-27T00:20:02.110Z","dependency_job_id":"4b7b3cbd-d9d4-4e1d-8749-d75392c3d1ae","html_url":"https://github.com/HelloImKevo/FlutterApps","commit_stats":null,"previous_names":["helloimkevo/flutterapps"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HelloImKevo%2FFlutterApps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HelloImKevo%2FFlutterApps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HelloImKevo%2FFlutterApps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HelloImKevo%2FFlutterApps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HelloImKevo","download_url":"https://codeload.github.com/HelloImKevo/FlutterApps/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244053267,"owners_count":20390307,"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":["dart","flutter","udemy-course-project"],"created_at":"2024-11-23T20:16:16.311Z","updated_at":"2026-04-09T08:34:01.602Z","avatar_url":"https://github.com/HelloImKevo.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FlutterApps\n\n![flutter-version](https://img.shields.io/badge/Flutter-3.10.6-blue)\n\nFlutter is Google's SDK for crafting beautiful, fast user experiences for mobile, web, and \ndesktop from a single codebase. Flutter works with existing code, is used by developers and \norganizations around the world, and is free and open source.  \nhttps://github.com/flutter/flutter  \n\nDart SDK API documentation:  \nhttps://api.dart.dev/  \n\nDartPad: A lightweight web-app for building simple Dart programs.  \nhttps://dartpad.dev/  \n\n\n# Flutter Installation \u0026 Setup\n\nhttps://docs.flutter.dev/get-started/install/macos/desktop  \n\n```bash\nbrew install --cask flutter\n```\n\n```bash\nsudo softwareupdate --install-rosetta --agree-to-license\n\nsudo sh -c 'xcode-select -s /Applications/Xcode.app/Contents/Developer \u0026\u0026 xcodebuild -runFirstLaunch'\n\nsudo xcodebuild -license\n```\n\n## CocoaPods Installation:\n\n```bash\nsudo gem install cocoapods\n```\n\n\n# Flutter Helpful References\n\n## flutter devices\nList available Flutter-compatible devices, emulators and simulators:\n```\nflutter devices\n\n# Output:\n4 connected devices:\n\nAndroid SDK built for arm64 (mobile) • emulator-5554                        • android-arm64  • Android 10 (API 29) (emulator)\niPhone 15 (mobile)                   • 9B0982B6-13FC-4243-AC37-612C5FDE61B0 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-17-2 (simulator)\nmacOS (desktop)                      • macos                                • darwin-arm64   • macOS 14.6.1 23G93 darwin-arm64\nChrome (web)                         • chrome                               • web-javascript • Google Chrome 131.0.6778.86\n```\n\n## flutter run\n\n### Quick Reference:\n\n```bash\nflutter run -d macos\n```\n\nBuild and run the Flutter app, on a target platform:\n```\nflutter run\n\n# Output:\nConnected devices:\nAndroid SDK built for arm64 (mobile) • emulator-5554 • android-arm64  • Android 10 (API 29) (emulator)\nmacOS (desktop)                      • macos         • darwin-arm64   • macOS 14.6.1 23G93 darwin-arm64\nChrome (web)                         • chrome        • web-javascript • Google Chrome 131.0.6778.86\n\nChecking for wireless devices...\n\n[1]: Android SDK built for arm64 (emulator-5554)\n[2]: iPhone 15 (9B0982B6-13FC-4243-AC37-612C5FDE61B0)\n[3]: macOS (macos)\n[4]: Chrome (chrome)\nPlease choose one (or \"q\" to quit): 3\nLaunching lib/main.dart on macOS in debug mode...\n\nBuilding macOS application...                                           \nSyncing files to device macOS...                                    67ms\n\nFlutter run key commands.\nr Hot reload. 🔥🔥🔥\nR Hot restart.\nh List all available interactive commands.\nd Detach (terminate \"flutter run\" but leave application running).\nc Clear the screen\nq Quit (terminate the application on the device).\n```\n\n## flutter refresh dependencies\nPub is the package manager for the Dart programming language, containing reusable\nlibraries \u0026 packages for Flutter and general Dart programs. The flutter pub get \ncommand retrieves the `pubspec.yaml` dependencies to resolve the pubspec.\n```shell\nflutter pub get\n```\n\n## flutter pub add [dependency]\nIn these projects, we will use the `http` and `rxdart` dependencies. Use:\n```shell\nflutter pub add http\n\nflutter pub add rxdart\n```\n\nThen run:\n```\nflutter packages get\n```\n\n## flutter unit tests\nTo run unit tests, use:\n```shell\nflutter test test/main_test.dart\n```\n\n## Localizations and Language Support in Flutter\nBy default, Flutter only provides US English localizations. To add support for other languages, \nan application must specify additional `MaterialApp` (or `CupertinoApp`) properties, and include \na package called `flutter_localizations`.  \nhttps://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization  \n```shell\nflutter pub add flutter_localizations --sdk=flutter\nflutter pub add intl:any\n```\n\nThen you need to add this to the `flutter:` block in the `pubspec.yaml`:\n```yaml\nflutter:\n\n  # Required for localizations.\n  generate: true\n```\n\nFlutter uses App Resource Bundle (`.arb`) files to manage translations.\n\nThen you need to create the `lib/l10n` directory, and create two new ARB files:\n```\napp_en.arb\napp_es.arb\n```\n\nYou also need to create a `l10n.yaml` file, and populate it with three lines like this:\n```yaml\narb-dir: lib/l10n\ntemplate-arb-file: app_en.arb\noutput-localization-file: app_localizations.dart\n```\n\nYou may need to run `flutter pub get` to generate the `app_localizations.dart` build file.\n\n***But wait, there's more!*** You need to specify a `localizationsDelegates` element\nin your `App.build` method and a `supportedLocales` property.\n\nIn order to test other languages, you can specify the `locale: const Locale('es')` property:\n```dart\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\nimport 'package:flutter_localizations/flutter_localizations.dart';\n\nclass App extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return const MaterialApp(\n      locale: Locale('es'), // Force Spanish locale\n      localizationsDelegates: [\n        AppLocalizations.delegate,\n        GlobalMaterialLocalizations.delegate,\n        GlobalWidgetsLocalizations.delegate,\n        GlobalCupertinoLocalizations.delegate,\n      ],\n      supportedLocales: AppLocalizations.supportedLocales,\n      home: Scaffold(),\n    );\n  }\n}\n```\n\nLastly, you should be able to import the generated Dart file in your UI file,\nand then you can acquire a localized string resource:\n```dart\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\nchild: Text(AppLocalizations.of(context)!.loginScreen)\n```\n\n## material.io icon library\nMaterial icons have been migrated to:  \nhttps://fonts.google.com/icons  \n\n\n## BLoC Pattern in Flutter\n\nThe BLoC (Business Logic Component) pattern is a design pattern used in Flutter to manage state and \nseparate business logic from the UI. It helps in creating a scalable and maintainable codebase by \npromoting a clear separation of concerns.\n\n### Key Concepts\n\n1. **Streams**: Streams are a core part of the BLoC pattern. They allow asynchronous communication \n   between different parts of the app. A stream can be thought of as a pipeline that carries data \n   from one place to another.\n\n2. **Sinks**: Sinks are the entry points for data into a stream. You can add data to a stream by \n   adding it to a sink.\n\n3. **BLoC**: The BLoC itself is a class that contains the business logic of the app. It exposes \n   streams and sinks to the UI, allowing the UI to react to changes in the data.\n\n4. **StreamBuilder**: The `StreamBuilder` widget is used to listen to a stream and rebuild the UI \n   whenever new data is emitted by the stream.\n\n### Benefits of the BLoC Pattern\n\n- **Separation of Concerns**: By separating business logic from the UI, the BLoC pattern makes the \n  codebase more modular and easier to maintain.\n- **Testability**: Business logic can be tested independently of the UI, making it easier to write \n  unit tests.\n- **Reusability**: BLoCs can be reused across different parts of the app, reducing code duplication.\n\n### Example\n\nHere's a simple example of how the BLoC pattern can be implemented in Flutter:\n\n1. **Create a BLoC Class**:\n\n```dart\nimport 'dart:async';\n\nclass CounterBloc {\n  int _counter = 0;\n\n  // StreamController to manage the stream and sink\n  final _counterController = StreamController\u003cint\u003e();\n\n  // Stream to expose the counter value\n  Stream\u003cint\u003e get counterStream =\u003e _counterController.stream;\n\n  // Function to increment the counter\n  void increment() {\n    _counter++;\n    _counterController.sink.add(_counter);\n  }\n\n  // Dispose the StreamController when done\n  void dispose() {\n    _counterController.close();\n  }\n}\n```\n\n2. **Use the BLoC in the UI**:\n\n```dart\nimport 'package:flutter/material.dart';\n\nvoid main() {\n  runApp(MyApp());\n}\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      home: CounterScreen(),\n    );\n  }\n}\n\nclass CounterScreen extends StatelessWidget {\n  final CounterBloc _bloc = CounterBloc();\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: Text('BLoC Pattern Example'),\n      ),\n      body: Center(\n        child: StreamBuilder\u003cint\u003e(\n          stream: _bloc.counterStream,\n          initialData: 0,\n          builder: (context, snapshot) {\n            return Text(\n              'Counter: ${snapshot.data}',\n              style: TextStyle(fontSize: 24),\n            );\n          },\n        ),\n      ),\n      floatingActionButton: FloatingActionButton(\n        onPressed: _bloc.increment,\n        child: Icon(Icons.add),\n      ),\n    );\n  }\n\n  @override\n  void dispose() {\n    _bloc.dispose();\n    super.dispose();\n  }\n}\n```\n\nIn this example, the `CounterBloc` class manages the counter state and exposes a stream of counter \nvalues. The `CounterScreen` widget listens to the stream using a `StreamBuilder` and rebuilds the UI \nwhenever the counter value changes. The `FloatingActionButton` increments the counter by calling the \n`increment` method on the BLoC.\n\nBy using the BLoC pattern, you can keep your business logic separate from your UI, making your code \nmore modular, testable, and maintainable.\n\n\n## macOS Network Entitlements for Flutter Apps\n\nWhen developing Flutter apps for macOS desktop deployment, you may encounter network permission errors \nthat prevent your app from making HTTP requests. This is due to macOS's App Sandbox security model, \nwhich requires explicit permissions for network access.\n\n### Common Error Symptoms\n\nIf your app fails to make network requests on macOS, you might see errors like:\n```\nClientException with SocketException: Connection failed \n(OS Error: Operation not permitted, errno = 1), \naddress = example.com, port = 443\n```\n\nThis error occurs even when:\n- The same URL works fine in a web browser\n- Network connectivity is available\n- The app works on other platforms (iOS, Android, Web)\n\n### Root Cause: macOS App Sandbox\n\nmacOS uses a security feature called **App Sandbox** that restricts what applications can do on the \nsystem. By default, sandboxed apps cannot:\n- Access the network\n- Read/write files outside their container\n- Access system resources\n- Communicate with other applications\n\nFlutter apps built for macOS are automatically sandboxed and require explicit **entitlements** to \nperform restricted operations like network requests.\n\n### Solution: Network Client Entitlements\n\nTo fix network permission issues, you need to add the `com.apple.security.network.client` entitlement \nto your macOS app configuration.\n\n#### 1. Debug/Development Entitlements\n\nEdit `macos/Runner/DebugProfile.entitlements`:\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"\u003e\n\u003cplist version=\"1.0\"\u003e\n\u003cdict\u003e\n\t\u003ckey\u003ecom.apple.security.app-sandbox\u003c/key\u003e\n\t\u003ctrue/\u003e\n\t\u003ckey\u003ecom.apple.security.cs.allow-jit\u003c/key\u003e\n\t\u003ctrue/\u003e\n\t\u003ckey\u003ecom.apple.security.network.server\u003c/key\u003e\n\t\u003ctrue/\u003e\n\t\u003c!-- Add this line for outgoing network requests --\u003e\n\t\u003ckey\u003ecom.apple.security.network.client\u003c/key\u003e\n\t\u003ctrue/\u003e\n\u003c/dict\u003e\n\u003c/plist\u003e\n```\n\n#### 2. Release/Production Entitlements\n\nEdit `macos/Runner/Release.entitlements`:\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"\u003e\n\u003cplist version=\"1.0\"\u003e\n\u003cdict\u003e\n\t\u003ckey\u003ecom.apple.security.app-sandbox\u003c/key\u003e\n\t\u003ctrue/\u003e\n\t\u003c!-- Add this line for outgoing network requests --\u003e\n\t\u003ckey\u003ecom.apple.security.network.client\u003c/key\u003e\n\t\u003ctrue/\u003e\n\u003c/dict\u003e\n\u003c/plist\u003e\n```\n\n#### 3. Clean Build Required\n\nAfter modifying entitlements, you must clean and rebuild your app:\n\n```bash\nflutter clean\nflutter pub get\nflutter run -d macos\n```\n\n### Understanding Entitlements\n\n| Entitlement Key | Purpose | When Needed |\n|---|---|---|\n| `com.apple.security.app-sandbox` | Enables App Sandbox | Always present in Flutter macOS apps |\n| `com.apple.security.network.client` | Allows outgoing network connections | HTTP requests, API calls, downloading |\n| `com.apple.security.network.server` | Allows incoming network connections | Local servers, peer-to-peer communication |\n| `com.apple.security.cs.allow-jit` | Allows Just-In-Time compilation | Debug builds, development |\n| `com.apple.security.files.user-selected.read-write` | File system access | File picker, document editing |\n\n### Best Practices\n\n1. **Minimal Permissions**: Only request entitlements your app actually needs\n2. **Different Configs**: Use more restrictive entitlements for Release builds\n3. **Testing**: Test both Debug and Release builds to ensure entitlements are correct\n4. **Documentation**: Document why each entitlement is needed for future reference\n\n### Troubleshooting Tips\n\n- **Clean Build**: Always run `flutter clean` after changing entitlements\n- **Check Both Files**: Ensure both DebugProfile.entitlements and Release.entitlements are updated\n- **Simulator vs Device**: Entitlements behave the same on both simulator and physical devices\n- **App Store**: Additional entitlements may be required for App Store distribution\n\n### Security Considerations\n\nThe App Sandbox provides important security benefits:\n- **Principle of Least Privilege**: Apps only get permissions they explicitly request\n- **User Protection**: Malicious apps cannot access network/files without explicit permission\n- **System Integrity**: Sandboxed apps cannot modify system files or other applications\n\nWhile it's tempting to disable sandboxing entirely, it's recommended to work within the sandbox \nmodel and request only the specific entitlements your app requires.\n\n### Additional Resources\n\n- [Apple's App Sandbox Documentation](https://developer.apple.com/documentation/security/app_sandbox)\n- [Entitlements Key Reference](https://developer.apple.com/documentation/bundleresources/entitlements)\n- [Flutter macOS Desktop Support](https://docs.flutter.dev/platform-integration/macos/building)\n\n\n# Hacker News API Architecture\n\n```mermaid\nclassDiagram\n    class NewsRepository {\n        -NewsDataSource dbProvider\n        -NewsDataSource apiProvider\n        -TopIdsSource topIdsSource\n        -ItemCache itemCache\n        -Logger logger\n        +fetchTopIds()\n        +fetchItem(id)\n        +fetchItems(ids)\n        +clearCache()\n    }\n    \n    class NewsDataSource {\n        \u003c\u003cinterface\u003e\u003e\n        +fetchItem(id) ItemModel?\n    }\n    \n    class TopIdsSource {\n        \u003c\u003cinterface\u003e\u003e\n        +fetchTopIds() List~int~\n    }\n    \n    class ItemCache {\n        \u003c\u003cinterface\u003e\u003e\n        +addItem(item) int\n        +clearCache() void\n    }\n    \n    class NewsApiProvider {\n        -http.Client client\n        +fetchTopIds() List~int~\n        +fetchItem(id) ItemModel?\n    }\n    \n    class NewsDbProvider {\n        -Database? _db\n        +database Database\n        +fetchItem(id) ItemModel?\n        +addItem(item) int\n        +clearCache() void\n    }\n    \n    class MockNewsDbProvider {\n        -Map~int, Map~ _itemsCache\n        +database MockDatabase\n        +fetchItem(id) ItemModel?\n        +addItem(item) int\n        +clearCache() void\n        +clear() void\n    }\n    \n    class MockDatabase {\n        -Map~int, Map~ _itemsCache\n        +delete(table) int\n    }\n    \n    class ItemModel {\n        +id int\n        +deleted bool?\n        +type String?\n        ... other properties ...\n        +fromJson(json) ItemModel\n        +toJson() Map~String, dynamic~\n    }\n    \n    NewsRepository --\u003e NewsDataSource : uses\n    NewsRepository --\u003e TopIdsSource : uses\n    NewsRepository --\u003e ItemCache : uses\n    \n    NewsApiProvider ..|\u003e NewsDataSource : implements\n    NewsApiProvider ..|\u003e TopIdsSource : implements\n    \n    NewsDbProvider ..|\u003e NewsDataSource : implements\n    NewsDbProvider ..|\u003e ItemCache : implements\n    \n    MockNewsDbProvider ..|\u003e NewsDataSource : implements\n    MockNewsDbProvider ..|\u003e ItemCache : implements\n    MockNewsDbProvider --\u003e MockDatabase : uses\n    \n    NewsApiProvider ..\u003e ItemModel : creates/uses\n    NewsDbProvider ..\u003e ItemModel : creates/uses\n    MockNewsDbProvider ..\u003e ItemModel : creates/uses\n```\n\n\n# Live Action Screenshots\n\n|                     Hacker News 1                     |\n|:-----------------------------------------------------:|\n| \u003cimg src=\"screenshots/hacker-news-1.png\" width=\"400\"\u003e |\n\n|                     Hacker News 2                     |\n|:-----------------------------------------------------:|\n| \u003cimg src=\"screenshots/hacker-news-2.png\" width=\"400\"\u003e |\n\n|                     Cat Animation                   |\n|:---------------------------------------------------:|\n|  ![Cat Animation](screenshots/cat-animation-1.png)  |\n\n\n# Flutter Setup\n\nFollow the Flutter install guide here:  \nhttps://docs.flutter.dev/get-started/install/macos/mobile-ios  \n\nAnd add the unzipped Flutter framework to your shell environment path, by editing\nyour `.zprofile` or `.bash_profile`:\n```shell\n# Flutter SDK\nexport PATH=~/flutter/bin:${PATH}\n```\n\nAfter installing Flutter and the Android SDK, make sure you specify the path to your\nAndroid SDK using:\n```shell\nflutter config --android-sdk ~/android-sdks\n```\n\nTo create a new Flutter app, run:\n```shell\nflutter create app\n```\n\n⚠️ Be aware that Dart requires `snake_case` for project names.\n\n\nValidate project setup:\n```shell\ncd app\nflutter run\n```\n\nYou should see output like:\n```\nMultiple devices found:\nmacOS (desktop) • macos  • darwin-arm64   • macOS 13.2.1 22D68 darwin-arm (Rosetta)\nChrome (web)    • chrome • web-javascript • Google Chrome 114.0.5735.198\n[1]: macOS (macos)\n[2]: Chrome (chrome)\nPlease choose one (To quit, press \"q/Q\"):\n```\n\nIf you get this error:\n```\n\"impellerc\" can't be opened because Apple cannot check it for malicious software.\nThis software needs to be updated. Contact the developer for more information.\n```\n\nthen try running: `flutter upgrade` to update Flutter.\n\nBe sure to open Android Studio and install any necessary Android SDK Build Tools\nusing the Gradle tooling framework and/or Android SDK Manager, and open XCode and\ninstall any required dependencies when prompted.\n\nTo accept the Android SDK development licenses, you can run:\n```shell\nflutter doctor --android-licenses\n```\n\n\n# Visual Studio Code IDE\n\nInstall the Visual Studio Code IDE. Then install the Flutter extension, by \"Dart Code\".  \n\nInstall the ARB Editor, by \"Google\", extension.  \n\nIn the VS Code terminal, run:\n```shell\ndart fix --dry-run\ndart fix --apply\n```\n\nOpen the **Command Palette** with: `SHIFT + CMD + P` (MacOS), then type \"flutter\".\n\nTo run the project, select \"Flutter: Launch Emulator\", then pick one of the Android emulators.\nIf you don't see your emulators listed, see the above section about running `flutter config`.\n\n\n## Visual Studio Code Tips and Tricks\n\nOpen Settings, search for \"exclude\", under \"Files: Exclude\", click on **Add Pattern**. Type\n`**/bin` and click **OK**. And do the same for `**/obj`. This will hide these folders from the\nSolution Explorer, since we won't interact with them very often.\n\nWithin Settings, search for \"bracket\" and make sure these two settings are Enabled:\n- Auto Closing Brackets - Always\n- Bracket Pair Colorization: Enabled - Checked\n- Bracket Pair Colorization: Independent Color Pool Per Bracket Type - Unchecked\n- Guides: Bracket Pairs - True\n\nOpen the **Command Palette** with: `SHIFT + CMD + P` (MacOS).\n\nOpen the editor's **More Actions...** contextual menu with `CMD + .` (MacOS); this will provide \nyou with helpful quick actions like \"Remove unnecessary usings\", or \"Generate constructor\".\n\nOpen the **Keyboard Shortcuts** window under Settings, then click on the small icon in the\ntop-right corner with tooltip \"Open Keyboard Shortcuts (JSON)\" (the icon looks like a piece\nof paper with a folded corner, and a circular arrow on the left). In the `keybindings.json`\nfile, add this entry:\n\n```json\n{\n    \"key\": \"shift shift\",\n    \"command\": \"workbench.action.quickOpen\"\n}\n```\n\nSave the `keybindings.json` file and then close it. Now, when you double-tap SHIFT, it will open\nup a sort of \"Global Object Search\" form field, and you can type the name of an entity, like\nour `AppUser.cs`, and then press RETURN to open the file. Super-handy to have!\n\nMore details:\nhttps://stackoverflow.com/questions/29613191/intellij-shift-shift-shortcut-in-visual-studio-global-search  \n\nUnder **Settings \u003e CodeLens**, turn off \"Show Main Code Lens\". It adds extraneous noise to every \nmethod signature in the editor UI, with a bunch of \"N references\" indicators everywhere.\n\n\n# Android References\n\nhttps://developer.android.com/studio/run/emulator-commandline  \n\nBe sure to add the `emulator` directory to your `~/.zprofile` or `~/.zshrc`:\n```shell\nexport PATH=~/android-sdks/emulator:${PATH}\n```\n\n```shell\nemulator -list-avds\n\nemulator -avd Pixel_2_API_31 -netdelay none -netspeed full\n```\n\n\n## iOS References\n\nmacOS \u003c-\u003e Xcode Compatibility List\nhttps://developer.apple.com/support/xcode/  \n\nDownload Xcode 15:\nhttps://developer.apple.com/download/all/?q=xcode%2015.2\n\n```shell\n# List available software updates for macOS\nsoftwareupdate --list\n\n# Update to Xcode 15 Command Line Tools\nsoftwareupdate --install \"Command Line Tools beta 7 for Xcode-15.0\"\n```\n\n```shell\n# List all available simulators\nxcrun simctl list devices\n\n# Boot a specific simulator. It may not come to the foreground automatically;\n# you may need to use 'open' to open the Simulator UI.\nxcrun simctl boot \"iPhone 15\"\n\n# Launch a new default Simulator instance, or bring a Booted simulator to the\n# foreground. Example default emulator: iPhone 15 Pro Max, iOS 17.2\nopen -a Simulator.app\n```\n\nNote: When you **\"Boot\"** an iOS simulator, it may not be brought to the foreground\nby default. If you don't see a Simulator, then you need to explicitly open the\n\"Simulator App\" using:\n```shell\nopen -a Simulator.app\n```\n\n\n## iOS Simulator Troubleshooting\nIf you run into the below error:\n```\n$ xcrun simctl boot \"iPhone 15\"\n\nAn error was encountered processing the command (domain=NSPOSIXErrorDomain, code=60):\nUnable to boot the Simulator.\nlaunchd failed to respond.\nUnderlying error (domain=com.apple.SimLaunchHostService.RequestError, code=4):\n    Failed to start launchd_sim: could not bind to session, launchd_sim may have crashed or quit responding\n```\n\nClick Apple Icon ➔ 'About this Mac' ➔ More Info ➔ System Setting  \n  ➔ General ➔ Storage ➔ 'Storage Settings' ➔ Developer ➔ Delete 'Xcode Caches'.  \n\nThen you should be able to boot up a Simulator.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhelloimkevo%2Fflutterapps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhelloimkevo%2Fflutterapps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhelloimkevo%2Fflutterapps/lists"}