camerakit_flutter

Creator: coderz1093

Last updated:

0 purchases

camerakit_flutter Image
camerakit_flutter Images

Languages

Categories

Add to Cart

Description:

camerakit flutter

camerakit-flutter #




An open-source SDK package for Flutter that provides developers with seamless integration and access to Snapchat's CameraKit features within their Flutter applications. Flutter developers now can access set configuration from Flutter for both platforms (IOS and Android), you can open CameraKit , get media results (Images and Videos) and get list of lenses against group ids.
Obtaining CameraKit Keys #
Your App ID and API Token can be found in the Snap Kit Portal and is used to provide authorized access to Camera Kit remote services.
For more information you can read the docs Android, IOS.
CAUTION
API Token is different for Production and Staging Environment. A watermark will be applied to the camera view when using the Staging API token.
Once you have access to the account, locate your groupIds and cameraKitApiToken.
Now that you have obtained all your credentials, you can use it to initialize the Configuration class in your Flutter application as mentioned in the below section.
class Constants {
/// List of group IDs for Camera Kit
static const List<String> groupIdList = ['your-group-ids']; // TODO: Fill group IDs here

/// The API token for Camera Kit in the staging environment
static const cameraKitApiToken = 'your-api-token'; // TODO fill api token staging or production here
}
copied to clipboard
Note: To use production api token, your camerakit app should be approved and live on snapchat developer portal.
Otherwise the app may cause unauthorized exception. Read more about submitting app for review
Installation #
First, add camerakit_flutter: as a dependency in your pubspec.yaml file.
Then run flutter pub get to install the package.
Now in your Dart code, you can use:
import 'package:camerakit_flutter/camerakit_flutter.dart';
copied to clipboard
iOS #
Add the following keys to your Info.plist file, located in

NSCameraUsageDescription - describe why your app needs permission for the camera library. It's a privacy feature to ensure that apps don't access sensitive device features without the user's knowledge and consent.
NSMicrophoneUsageDescription - used to explain to the user why the app needs access to the device's microphone.

<key>NSCameraUsageDescription</key>
<string>app need camera permission for showing camerakit lens</string>
<key>NSMicrophoneUsageDescription</key>
<string>app need microphone permission for recording a video</string>
copied to clipboard

(Optional: To fix cocoapods installation error) Inside Podfile under iOS directory of your flutter project, uncomment the following line and set the iOS version 13
platform :ios, '13.0'
copied to clipboard


Android #


CameraKit android SDK requires to use an AppCompat Theme for application, so make sure your application theme inherits an AppCompat theme.


For example: in your style.xml define a new theme like this:


<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
copied to clipboard

and then in AndroidManifest.xml

<application
...
android:theme="@style/AppTheme">
...
...
</application>
copied to clipboard

Make sure in build.gradle under app module, the minSdkVersion version is 21

defaultConfig {
minSdkVersion 21
}
copied to clipboard

Make sure in build.gradle under android module, the minimum kotlin_version version is 1.8.10
ext.kotlin_version = '1.8.10'
copied to clipboard


Demo #
https://github.com/DevCrew-io/camerakit-flutter/assets/136708738/63eb485d-1998-43f1-90ae-64193fde262e
Key Features #
Passing CameraKit's credentials in Flutter
Access CameraKit in Flutter
Get List of lenses for given list of group ids
Get media results
Show list of lenses
Show camerakit's captured media
Set Configuration #
You can set camerakit credentials by just calling setCredentials function. Before calling you need instance of CameraKitFlutterImpl, you only need to pass apiToken to configure camerakit flutter package. You don't need to set separate credentials for iOS and Android.
late final _cameraKitFlutterImpl = CameraKitFlutterImpl(cameraKitFlutterEvents: this);
_cameraKitFlutterImpl.setCredentials(apiToken: Constants.cameraKitApiToken);
copied to clipboard
Access Camerakit in Flutter #
Load all lenses #
You can access camerakit by just calling openCameraKit function with only the list of groupIds to load all lenses of given groups.
You can hide or show close button on camerakit screen by setting isHideCloseButton to true or false respectively.
_cameraKitFlutterImpl.openCameraKit(
groupIds: Constants.groupIdList,
isHideCloseButton: false,
);
copied to clipboard
Load single lens #
You can access camerakit with single lens by just calling openCameraKitWithSingleLens function with the lensId and groupId of that lens.
You can hide or show close button on camerakit screen by setting isHideCloseButton to true or false respectively.
_cameraKitFlutterImpl.openCameraKitWithSingleLens(
lensId: lensId!,
groupId: groupId!,
isHideCloseButton: false,
);
copied to clipboard
Get group lenses #
To get group lenses you need to pass concerned list of group ids to the function.
_cameraKitFlutterImpl.getGroupLenses(
groupIds: Constants.groupIdList,
);
copied to clipboard
Implement the interface CameraKitFlutterEvents to overirde receivedLenses function.
you will get the List of Lens model.
class _MyAppState extends State<MyApp> implements CameraKitFlutterEvents {
@override
void receivedLenses(List<Lens> lensList) async {
await Navigator.of(context).push(MaterialPageRoute(
builder: (context) => LensListView(lensList: lensList)));
}
}
copied to clipboard
Get media results #
Call openCameraKit or openCameraKitWithSingleLens function to open Camerakit,
_cameraKitFlutterImpl.openCameraKit(
groupIds: Constants.groupIdList
);
copied to clipboard
_cameraKitFlutterImpl.openCameraKitWithSingleLens(
lensId: lensId!,
groupId: groupId!
);
copied to clipboard
After capturing image or recording video you will get the results in onCameraKitResult method.
@override
void onCameraKitResult(Map<dynamic, dynamic> result) {
setState(() {
_filePath = result["path"] as String;
_fileType = result["type"] as String;
});
}
copied to clipboard
Show media #
Here is example to show the image taken by camerakit.
class MediaResultWidget extends StatefulWidget {
final String filePath;
final String fileType;

const MediaResultWidget(
{super.key, required this.filePath, required this.fileType});

@override
State<MediaResultWidget> createState() => _CameraResultWidgetState();
}

class _CameraResultWidgetState extends State<MediaResultWidget> {
late VideoPlayerController _controller;

@override
void initState() {
super.initState();

_controller = VideoPlayerController.file(File(widget.filePath))
..initialize().then((_) {
// Ensure the first frame is shown after the video is initialized, even before the play button has been pressed.
setState(() {});
});
_controller.addListener(() {
if (!_controller.value.isPlaying &&
_controller.value.isInitialized &&
(_controller.value.duration == _controller.value.position)) {
//checking the duration and position every time
setState(() {
if (kDebugMode) {
print(
"*************** video paying c o m p l e t e d *******************");
}
});
}
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('CameraKit Result'),
),
floatingActionButton: widget.filePath.isNotEmpty &&
widget.fileType == "video"
? FloatingActionButton(
onPressed: () {
setState(() {
_controller.value.isPlaying
? _controller.pause()
: _controller.play();
});
},
child: Icon(
_controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
),
)
: Container(),
body: widget.filePath.isNotEmpty
? widget.fileType == 'video'
? Center(
child: AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: VideoPlayer(_controller),
),
)
: widget.fileType == 'image'
? Center( child: Image.file(File(widget.filePath)) )
: const Text("UnKnown File to show")
: const Text("No File to show"));
}
}
copied to clipboard

Show lens list #
Here is example to show list of lenses.
class LensListView extends StatefulWidget {
final List<Lens> lensList;

const LensListView({super.key, required this.lensList});

@override
State<LensListView> createState() => _LensListWidgetState();
}

class _LensListWidgetState extends State<LensListView> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Lens List'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const SizedBox(
height: 10,
),
widget.lensList.isNotEmpty
? Expanded(
child: ListView.separated(
itemCount: widget.lensList.length,
separatorBuilder: (BuildContext context, int index) =>
const Divider(),
itemBuilder: (context, index) => GestureDetector(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
Image.network(
widget.lensList[index].thumbnail?[0] ?? "",
width: 70,
height: 70,
),
const SizedBox(
width: 20,
),
Text(
widget.lensList[index].name!,
style: const TextStyle(
fontSize: 16,
fontStyle: FontStyle.italic),
)
],
),
),
onTap: (){
final Map<String, dynamic> arguments = {
'lensId': widget.lensList[index].id ?? "",
'groupId': widget.lensList[index].groupId ?? ""
};
Navigator.of(context).pop(arguments);
},
)),
)
: Container()
],
),
);
}
}
copied to clipboard

Bugs and feature requests #
Have a bug or a feature request? Please first search for existing and closed issues. If your problem
or idea is not addressed
yet, please open a new issue.
Author #
DevCrew I/O
Connect with Us:





Contributing #
Contributions, issues, and feature requests are welcome!
Show your Support #
Give a star if this project helped you.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.