[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-9421":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":16,"starSnapshotCount":16,"syncStatus":17,"lastSyncTime":34,"discoverSource":35},9421,"CamerAwesome","Apparence-io\u002FCamerAwesome","Apparence-io","📸 Embedding a camera experience within your own app shouldn't be that hard. A flutter plugin to integrate awesome Android \u002F iOS camera experience.","https:\u002F\u002FApparenceKit.dev",null,"Dart",1194,391,22,192,0,2,5,1,57.28,"MIT License",false,"master",true,[26,27,28,29,30],"camera","cross-platform","flutter","flutter-plugin","mobile-development","2026-06-12 04:00:44","\u003Ca href=\"https:\u002F\u002Fapparence.io\">\n  \u003Cimg\n    src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FApparence-io\u002Fcamera_awesome\u002Fmaster\u002Fdocs\u002Fimg\u002Fapparence.png\"\n    width=\"100%\"\n  \u002F>\n\u003C\u002Fa>\n\u003Cdiv style=\"margin-top:40px\">\n  \u003Cimg\n    src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FApparence-io\u002Fcamera_awesome\u002Fmaster\u002Fdocs\u002Fimg\u002Fpreview.png\"\n    width=\"100%\"\n  \u002F>\n  \u003Cimg\n    src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FApparence-io\u002Fcamera_awesome\u002Fmaster\u002Fdocs\u002Fimg\u002Ffeatures.png\"\n    width=\"100%\"\n    style=\"margin-top:32px\"\n  \u002F>\n\u003C\u002Fdiv>\n\n\u003Ca href=\"https:\u002F\u002Fapparencekit.dev\" style=\"margin-top:32px\">\n  \u003Cimg\n    src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FApparence-io\u002Fcamera_awesome\u002Fmaster\u002Fdocs\u002Fimg\u002Fflutter_template.png\"\n    width=\"100%\"\n    alt=\"ApparenceKit Flutter template to bootstrap your next app\"\n  \u002F>\n\u003C\u002Fa>\n\nThis plugin is also available as a template in\n[ApparenceKit](https:\u002F\u002Fapparencekit.dev).\u003Cbr>\n\n\u003Cbr>\n\n# CamerAwesome\n\n\u003Cdiv>\n    \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FSolido\u002Fawesome-flutter\">\n        \u003Cimg alt=\"Awesome Flutter\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FAwesome-Flutter-blue.svg?longCache=true&style=for-the-badge\" \u002F>\n    \u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FApparence-io\u002Fcamera_awesome\">\n        \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FApparence-io\u002Fcamera_awesome.svg?style=for-the-badge&logo=github&colorB=green&label=Stars\" alt=\"Star on Github\">\n    \u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fpub.dev\u002Fpackages\u002Fcamerawesome\">\n        \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpub\u002Fv\u002Fcamerawesome.svg?style=for-the-badge&label=Pub\" alt=\"Star on Github\">\n    \u003C\u002Fa>\n\u003C\u002Fdiv>\n\n[![en](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flanguage-english-cyan.svg)](https:\u002F\u002Fgithub.com\u002FApparence-io\u002FCamerAwesome\u002Fblob\u002Fmaster\u002FREADME.md)\n[![zh](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flanguage-chinese-cyan.svg)](https:\u002F\u002Fgithub.com\u002FApparence-io\u002FCamerAwesome\u002Fblob\u002Fmaster\u002FREADME.zh.md)\n\n📸 Embedding a camera experience within your own app shouldn't be that hard.\n\u003Cbr> A flutter plugin to integrate awesome Android \u002F iOS camera experience.\u003Cbr>\n\n\u003Cbr>\nThis package provides you with a fully customizable camera experience that you can use within your app.\u003Cbr>\nUse our awesome built-in interface or customize it as you want.\n\n---\n\n\u003Cdiv style=\"margin-top:16px;margin-bottom:16px\">\n  \u003Ca href=\"https:\u002F\u002Fdocs.page\u002FApparence-io\u002Fcamera_awesome\" style=\"\">\n    \u003Cimg\n      src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FApparence-io\u002Fcamera_awesome\u002Fmaster\u002Fdocs\u002Fimg\u002Fdoc.png\"\n      width=\"100%\"\n    \u002F>\n  \u003C\u002Fa>\n\u003C\u002Fdiv>\n\n## Migration guide\n\nIf you are migrating from version 1.x.x to 2.x.x, please read the\n[migration guide](https:\u002F\u002Fdocs.page\u002FApparence-io\u002Fcamera_awesome\u002Fmigration_guides\u002Ffrom_1_to_2).\n\n## Native features\n\nHere's all native features that cameraAwesome provides to the flutter side.\n\n| Features                                 | Android | iOS |\n| :--------------------------------------- | :-----: | :-: |\n| 🔖 Ask permissions                       |   ✅    | ✅  |\n| 🎥 Record video                          |   ✅    | ✅  |\n| 📹 Multi camera (🚧 BETA)                |   ✅    | ✅  |\n| 🔈 Enable\u002Fdisable audio                  |   ✅    | ✅  |\n| 🎞 Take photos                            |   ✅    | ✅  |\n| 🌆 Photo live filters                    |   ✅    | ✅  |\n| 🌤 Exposure level                         |   ✅    | ✅  |\n| 📡 Broadcast live image stream           |   ✅    | ✅  |\n| 🧪 Image analysis (barcode scan & more.) |   ✅    | ✅  |\n| 👁 Zoom                                   |   ✅    | ✅  |\n| 📸 Device flash support                  |   ✅    | ✅  |\n| ⌛️ Auto focus                            |   ✅    | ✅  |\n| 📲 Live switching camera                 |   ✅    | ✅  |\n| 😵‍💫 Camera rotation stream              |   ✅    | ✅  |\n| 🤐 Background auto stop                  |   ✅    | ✅  |\n| 🔀 Sensor type switching                 |   ⛔️    | ✅  |\n| 🪞 Enable\u002Fdisable front camera mirroring |   ✅    | ✅  |\n\n---\n\n## 📖&nbsp; Installation and usage\n\n### Add the package in your `pubspec.yaml`\n\n```yaml\ndependencies:\n  camerawesome: ^2.0.0-dev.1\n  ...\n```\n\n### Platform specific setup\n\n- **iOS**\n\nAdd these on `ios\u002FRunner\u002FInfo.plist`:\n\n```xml\n\u003Ckey>NSCameraUsageDescription\u003C\u002Fkey>\n\u003Cstring>Your own description\u003C\u002Fstring>\n\n\u003Ckey>NSMicrophoneUsageDescription\u003C\u002Fkey>\n\u003Cstring>To enable microphone access when recording video\u003C\u002Fstring>\n\n\u003Ckey>NSLocationWhenInUseUsageDescription\u003C\u002Fkey>\n\u003Cstring>To enable GPS location access for Exif data\u003C\u002Fstring>\n```\n\n- **Android**\n\nChange the minimum SDK version to 21 (or higher) in `android\u002Fapp\u002Fbuild.gradle`:\n\n```\nminSdkVersion 21\n```\n\nIn order to be able to take pictures or record videos, you may need additional\npermissions depending on the Android version and where you want to save them.\nRead more about it in the\n[official documentation](https:\u002F\u002Fdeveloper.android.com\u002Ftraining\u002Fdata-storage).\n\n> `WRITE_EXTERNAL_STORAGE` is not included in the plugin starting with version\n> 1.4.0.\n\nIf you want to record videos with audio, add this permission to your\n`AndroidManifest.xml`:\n\n```xml\n\u003Cmanifest xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"\n        package=\"com.example.yourpackage\">\n  \u003Cuses-permission android:name=\"android.permission.RECORD_AUDIO\" \u002F>\n\n  \u003C!-- Other declarations -->\n\u003C\u002Fmanifest>\n```\n\nYou may also want to save location of your pictures in exif metadata. In this\ncase, add below permissions:\n\n```xml\n\u003Cmanifest xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"\n  package=\"com.example.yourpackage\">\n  \u003Cuses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" \u002F>\n  \u003Cuses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" \u002F>\n\n  \u003C!-- Other declarations -->\n\u003C\u002Fmanifest>\n```\n\n\u003Cdetails>\n\u003Csummary>⚠️ Overriding Android dependencies\u003C\u002Fsummary>\n\nSome of the dependencies used by CamerAwesome can be overriden if you have a\nconflict. Change these variables to define which version you want to use:\n\n```gradle\nbuildscript {\n  ext.kotlin_version = '1.7.10'\n  ext {\n    \u002F\u002F You can override these variables\n    compileSdkVersion = 33\n    minSdkVersion = 24 \u002F\u002F 21 minimum\n    playServicesLocationVersion = \"20.0.0\"\n    exifInterfaceVersion = \"1.3.4\"\n  }\n  \u002F\u002F ...\n}\n```\n\nOnly change these variables if you are sure of what you are doing.\n\nFor example, setting the Play Services Location version might help you when you\nhave conflicts with other plugins. The below line shows an example of these\nconflicts:\n\n```\njava.lang.IncompatibleClassChangeError: Found interface com.google.android.gms.location.ActivityRecognitionClient, but class was expected\n```\n\n\u003C\u002Fdetails>\n\n### Import the package in your Flutter app\n\n```dart\nimport 'package:camerawesome\u002Fcamerawesome_plugin.dart';\n```\n\n---\n\n## 👌 Awesome built-in interface\n\nJust use our builder. \u003Cbr> That's all you need to create a complete camera\nexperience within your app.\n\n```dart\nCameraAwesomeBuilder.awesome(\n  saveConfig: SaveConfig.photoAndVideo(),\n  onMediaTap: (mediaCapture) {\n    OpenFile.open(mediaCapture.filePath);\n  },\n),\n```\n\n![CamerAwesome default UI](docs\u002Fimg\u002Fbase_awesome_ui.jpg)\n\nThis builder can be customized with various settings:\n\n- A theme.\n- Builders for each part of the screen.\n- Initial camera setup.\n- Preview positioning.\n- Additional preview decoration.\n- And much more!\n\nHere is an example:\n\n![Customized UI](docs\u002Fimg\u002Fcustom_awesome_ui.jpg)\n\nCheck the\n[full documentation](https:\u002F\u002Fdocs.page\u002FApparence-io\u002Fcamera_awesome\u002Fgetting_started\u002Fawesome-ui)\nto learn more.\n\n---\n\n## 🎨 Creating a custom interface\n\nIf the `awesome()` factory is not enough, you can use `custom()` instead.\n\nIt provides a `builder` property that lets you create your own camera\nexperience. \u003Cbr>\n\nThe camera preview will be visible behind what you will provide to the builder.\n\n```dart\nCameraAwesomeBuilder.custom(\n  saveConfig: SaveConfig.photo(),\n  builder: (state, previewSize, previewRect) {\n    \u002F\u002F create your interface here\n  },\n)\n```\n\n> See more in\n> [documentation](https:\u002F\u002Fdocs.page\u002FApparence-io\u002Fcamera_awesome\u002Fgetting_started\u002Fcustom-ui)\n\n### Working with the custom builder\n\nHere is the definition of our builder method.\n\n```dart\ntypedef CameraLayoutBuilder = Widget Function(CameraState cameraState, PreviewSize previewSize, Rect previewRect);\n```\n\n\u003Cbr>\nThe only thing you have access to manage the camera is the cameraState.\u003Cbr>\nDepending on which state is our camera experience you will have access to some different method. \u003Cbr>\n`previewSize` and `previewRect` might be used to position your UI around or on top of the camera preview.\n\u003Cbr>\n\n#### How do CamerAwesome states work ?\n\nUsing the state you can do anything you need without having to think about the\ncamera flow\u003Cbr>\u003Cbr>\n\n- On app start we are in `PreparingCameraState`\u003Cbr>\n- Then depending on the initialCaptureMode you set you will be\n  `PhotoCameraState` or `VideoCameraState`\u003Cbr>\n- Starting a video will push a `VideoRecordingCameraState`\u003Cbr>\n- Stopping the video will push back the `VideoCameraState`\u003Cbr>\n  \u003Cbr> Also if you want to use some specific function you can use the when\n  method so you can write like this.\u003Cbr>\n\n```dart\nstate.when(\n  onPhotoMode: (photoState) => photoState.start(),\n  onVideoMode: (videoState) => videoState.start(),\n  onVideoRecordingMode: (videoState) => videoState.pause(),\n);\n```\n\n> See more in\n> [documentation](https:\u002F\u002Fdocs.page\u002FApparence-io\u002Fcamera_awesome\u002Fgetting_started\u002Fcustom-ui)\n\n\u003Cbr>\n\n---\n\n## 🐝 Listen to picture or video event\n\nUsing the onMediaCaptureEvent you can listen to any media capture event and do\nwhatever you want with it.\n\n```dart\nonMediaCaptureEvent: (event) {\n    switch ((event.status, event.isPicture, event.isVideo)) {\n        case (MediaCaptureStatus.capturing, true, false):\n            debugPrint('Capturing picture...');\n        case (MediaCaptureStatus.success, true, false):\n            event.captureRequest.when(\n                single: (single) {\n                debugPrint('Picture saved: ${single.file?.path}');\n                },\n                multiple: (multiple) {\n                multiple.fileBySensor.forEach((key, value) {\n                    debugPrint('multiple image taken: $key ${value?.path}');\n                });\n                },\n            );\n        case (MediaCaptureStatus.failure, true, false):\n            debugPrint('Failed to capture picture: ${event.exception}');\n        case (MediaCaptureStatus.capturing, false, true):\n            debugPrint('Capturing video...');\n        case (MediaCaptureStatus.success, false, true):\n            event.captureRequest.when(\n                single: (single) {\n                    debugPrint('Video saved: ${single.file?.path}');\n                },\n                multiple: (multiple) {\n                    multiple.fileBySensor.forEach((key, value) {\n                        debugPrint('multiple video taken: $key ${value?.path}');\n                    });\n                },\n            );\n        case (MediaCaptureStatus.failure, false, true):\n            debugPrint('Failed to capture video: ${event.exception}');\n        default:\n            debugPrint('Unknown event: $event');\n    }\n},\n```\n\n---\n\n## 🔬 Analysis mode\n\nUse this to achieve:\n\n- QR-Code scanning.\n- Facial recognition.\n- AI object detection.\n- Realtime video chats.\n- And much more 🤩\n\n![Face AI](docs\u002Fimg\u002Fface_ai.gif)\n\nYou can check examples using MLKit inside the `example` directory. The above\nexample is from `ai_analysis_faces.dart`. It detects faces and draw their\ncontours.\n\nIt's also possible to use MLKit to read barcodes:\n\n![Barcode scanning](docs\u002Fimg\u002Fbarcode_overlay.gif)\n\nCheck `ai_analysis_barcode.dart` and `preview_overlay_example.dart` for examples\nor the\n[documentation](https:\u002F\u002Fdocs.page\u002FApparence-io\u002Fcamera_awesome\u002Fai_with_mlkit\u002Freading_barcodes).\n\n### How to use it\n\n```dart\nCameraAwesomeBuilder.awesome(\n  saveConfig: SaveConfig.photo(),\n  onImageForAnalysis: analyzeImage,\n  imageAnalysisConfig: AnalysisConfig(\n        \u002F\u002F Android specific options\n        androidOptions: const AndroidAnalysisOptions.nv21(\n            \u002F\u002F Target width (CameraX will chose the closest resolution to this width)\n            width: 250,\n        ),\n        \u002F\u002F Wether to start automatically the analysis (true by default)\n        autoStart: true,\n        \u002F\u002F Max frames per second, null for no limit (default)\n        maxFramesPerSecond: 20,\n    ),\n)\n```\n\n> MLkit recommends using nv21 format for Android. \u003Cbr> bgra8888 is the iOS\n> format For machine learning you don't need full-resolution images (720 or\n> lower should be enough and makes computation easier)\n\nLearn more about the image analysis configuration in the\n[documentation](https:\u002F\u002Fdocs.page\u002FApparence-io\u002Fcamera_awesome\u002Fai_with_mlkit\u002Fimage_analysis_configuration)\n.\n\nCheck also detailed explanations on how to use MLKit to\n[read barcodes](https:\u002F\u002Fdocs.page\u002FApparence-io\u002Fcamera_awesome\u002Fai_with_mlkit\u002Freading_barcodes)\nand\n[detect faces](https:\u002F\u002Fdocs.page\u002FApparence-io\u002Fcamera_awesome\u002Fai_with_mlkit\u002Fdetecting_faces).\n\n⚠️ On Android, some devices don't support video recording and image analysis at\nthe same time.\n\n- If they don't, image analysis will be ignored.\n- You can check if a device has this capability by using\n  `CameraCharacteristics .isVideoRecordingAndImageAnalysisSupported(Sensors.back)`.\n\n---\n\n## 🐽 Updating Sensor configuration\n\nThrough state you can access to a `SensorConfig` class.\n\n\u003Cbr>\n\n| Function               | Comment                                                    |\n| ---------------------- | ---------------------------------------------------------- |\n| `setZoom`              | change zoom                                                |\n| `setFlashMode`         | change flash between NONE,ON,AUTO,ALWAYS                   |\n| `setBrightness`        | change brightness level manually (better to let this auto) |\n| `setMirrorFrontCamera` | set mirroring for front camera                             |\n\nAll of these configurations are listenable through a stream so your UI can\nautomatically get updated according to the actual configuration.\n\n\u003Cbr>\n\n## 🌆 Photo live filters\n\nApply live filters to your pictures using the built-in interface:\n\n![Built-in live filters](docs\u002Fimg\u002Ffilters.gif)\n\nYou can also choose to use a specific filter from the start:\n\n```dart\nCameraAwesomeBuilder.awesome(\n  \u002F\u002F other params\n  filter: AwesomeFilter.AddictiveRed,\n  availableFilters: ...\n)\n```\n\nOr set the filter programmatically:\n\n```dart\nCameraAwesomeBuilder.custom(\n  builder: (cameraState, previewSize, previewRect) {\n    return cameraState.when(\n      onPreparingCamera: (state) =>\n      const Center(child: CircularProgressIndicator()),\n      onPhotoMode: (state) =>\n          TakePhotoUI(state, onFilterTap: () {\n            state.setFilter(AwesomeFilter.Sierra);\n          }),\n      onVideoMode: (state) => RecordVideoUI(state, recording: false),\n      onVideoRecordingMode: (state) =>\n          RecordVideoUI(state, recording: true),\n    );\n  },\n)\n```\n\nSee all available filters in the\n[documentation](https:\u002F\u002Fdocs.page\u002FApparence-io\u002Fcamera_awesome\u002Fwidgets\u002Fawesome_filters).\n\n> [!TIP] By default the awesome ui setup has a filter list but you can pass an\n> empty list to remove it\n\n## 📷 📷 Concurrent cameras\n\n![Concurrent cameras](docs\u002Fimg\u002Fconcurrent_cameras.gif)\n\n> 🚧 Feature in beta 🚧 Any feedback is welcome!\n\nIn order to start using CamerAwesome with multiple cameras simulatenously, you\nneed to define a `SensorConfig` that uses several sensors. You can use the\n`SensorConfig.multiple()` constructor for this:\n\n```dart\nCameraAwesomeBuilder.awesome(\n    sensorConfig: SensorConfig.multiple(\n        sensors: [\n            Sensor.position(SensorPosition.back),\n            Sensor.position(SensorPosition.front),\n        ],\n        flashMode: FlashMode.auto,\n        aspectRatio: CameraAspectRatios.ratio_16_9,\n    ),\n    \u002F\u002F Other params\n)\n```\n\nThis feature is not supported by all devices and even when it is, there are\nlimitations that you must be aware of.\n\nCheck the details in the\n[dedicated documentation](https:\u002F\u002Fdocs.page\u002FApparence-io\u002Fcamera_awesome\u002Fgetting_started\u002Fmulticam).\n\n\u003Cbr>\n\n\u003Ca href=\"https:\u002F\u002Fapparence.io\">\n  \u003Cimg\n    src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FApparence-io\u002Fcamera_awesome\u002Fmaster\u002Fdocs\u002Fimg\u002Fapparence.png\"\n    width=\"100%\"\n  \u002F>\n\u003C\u002Fa>\n","CamerAwesome 是一个 Flutter 插件，旨在简化在应用中嵌入高质量的 Android 和 iOS 相机体验的过程。它支持多种核心功能，包括权限请求、视频录制以及多摄像头切换（后者处于测试阶段）。用户既可以使用插件提供的美观界面，也可以根据需求自定义相机界面和功能。此外，CamerAwesome 还提供了详细的文档和迁移指南，方便开发者快速上手或从旧版本升级。该插件非常适合需要跨平台移动开发且重视用户体验的应用场景，如社交媒体、教育软件等。","2026-06-11 03:22:35","top_language"]