Để sử dụng thư viện, ta cần phải có các quyền truy cập vào hệ thống như camera, thư viện ảnh, chỉnh sửa, xóa,…
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.FLASHLIGHT" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera.front" /> <uses-feature android:name="android.hardware.microphone" /> <uses-feature android:name="android.hardware.camera2" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="true" tools:targetApi="eclair" /> <uses-feature android:name="android.hardware.camera.flash" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
Ta tiến hành mở file tạo file camera.dart và bắt đầu khai báo: Import thư viện:
import 'package:camera_deep_ar/camera_deep_ar.dart'; Khai báo controller để điều khiển:
CameraDeepArController cameraDeepArController;
Và tiến hành xây dựng ui kem với chức năng:
@override
Widget build(BuildContext context) { return MaterialApp(
home: Scaffold(
body: Stack(
children: [ CameraDeepAr(
onCameraReady: (isReady) {
_platformVersion = "Camera status $isReady";
setState(() {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content:
Text(_platformVersion)));});},
onImageCaptured: (path) {
_platformVersion = "Image Taken @ $path";
setState(() {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content:
Text(_platformVersion)));});},
onVideoRecorded: (path) {
_platformVersion = "Video Recorded @ $path";
isRecording = false; setState(() { ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(_platformVersion))); });}, androidLicenceKey: apiKey, iosLicenceKey: null, cameraDeepArCallback: (c) async { cameraDeepArController = c; setState(() {}); }), Align( alignment: Alignment.topRight, child: Padding( padding: EdgeInsets.all(15), child: FloatingActionButton( backgroundColor: Colors.transparent, heroTag: 'change_camera', child: Icon(Icons.cameraswitch_outlined), onPressed: () async { if (isFrontCamera==false) { cameraDeepArController.switchCameraDirection( direction: CameraDirection.front); isFrontCamera = true; } else { cameraDeepArController.switchCameraDirection( direction: CameraDirection.back); isFrontCamera = false; }},),),), }
Tại đây, ở phần androidLicenceKey: .. ta sẽ đưa Key API mà ta đã lấy từ lúc đầu đưa vào đây, để sử dụng cho IOS thì ta sẽ tạo một key riêng từ trang web deepAR và đưa vào iosLicenceKey:
- Để đổi một mặt nạ(mask) sử dụng hàm .changeMask(int p);
cameraDeepArController.changeMask(p);
- Để đổi một màu nền (filter) sử dụng hàm .changeFilter(int p);
cameraDeepArController.changeFilter(p);
- Để đổi một hiệu ứng (effect) sử dụng hàm .changeEffect(int p);
cameraDeepArController.changeEffect(p);
- Để đổi hướng của camera ta làm như sau: Đổi thành camera trước (front):
cameraDeepArController.switchCameraDirection( direction: CameraDirection.front);
Đổi thành camera sau(back):
cameraDeepArController.switchCameraDirection( direction: CameraDirection.back);
- Để chụp ảnh dùng hàm snapPhoto();
cameraDeepArController.snapPhoto();
- Để bắt đầu hoặc kết thúc quay video ta thực hiện (bắt đầu - start: kết thúc - stop):
cameraDeepArController.startVideoRecording(); cameraDeepArController.stopVideoRecording();
- Để kiểm tra camera có sẵn sàng hay chưa: isCameraReady();
4.2.1 Tận dụng tối đa thư viện
Thư viện khi cài đặt về sẽ chỉ có thể sử dụng khoảng 6 masks, 2 fitlters và 2 effects (mặc định có sẵn trong thư viện là 18 masks, 6 filters và 5 effects) để tối đa được điều này ta phải chỉnh sửa một ít ở trong thư viện camera_deep_ar.
Đối với một vài ide để chuyển đến tệp tin có chứa hàm thực thi gốc, ta nhấn giữ controller rồi nhất vào một hàm bất kỳ của thư viện camera_deep_ar mà ta đang sử dụng, ide sẽ điều hướng chúng ta đên tệp tin có tên là camera_deep_ar.dart. Hoặc ta có thể truy cập theo đường dẫn:
flutter\.pub-
cache\hosted\pub.dartlang.org\camera_deep_ar0.0.1\lib\camera_deep_ar.dart Tại đây, ta tìm đến các hàm enum mask, enum filters, enum effects
Hình 4.28 camera upgrade
Có thể thấy có rất nhiều hiệu ứng khác nhau nhưng ở các hàm supportedMasks, supportedFilters, supportedEffects, lại khai báo ít hơn trong các danh sách enum có sẵn này. Việc ta cần làm chỉ là khai báo thêm các giá trị con cho các hàm như sau:
Hình 4.29 Supported
Và như thế chúng ta có thể sử dụng tối đa các tài nguyên có sẵn của thư viện Lưu ý: Tuyệt đối không chỉnh sửa nếu như không chắc chắn về việc đang làm.