面试题答案
一键面试- 添加插件依赖:
在
pubspec.yaml
文件中添加相机插件依赖,例如:
然后运行dependencies: camera: ^X.Y.Z # X.Y.Z为具体版本号
flutter pub get
下载依赖。 - 配置原生项目:
- Android:
- 在
android/app/src/main/AndroidManifest.xml
文件中添加相机权限:
<uses - permission android:name="android.permission.CAMERA" /> <uses - feature android:name="android.hardware.camera" android:required="false" />
- 在
- iOS:
- 在
ios/Runner/Info.plist
文件中添加相机权限描述:
<key>NSCameraUsageDescription</key> <string>Your access to the camera is required for this app feature.</string>
- 在
- Android:
- 初始化插件:
在Flutter代码中导入相机插件库:
然后初始化相机,例如:import 'package:camera/camera.dart';
List<CameraDescription> cameras; Future<void> initCamera() async { cameras = await availableCameras(); }
- 调用原生相机功能:
例如,创建一个相机预览界面:
还可以进一步实现拍照等功能,如:class CameraScreen extends StatefulWidget { @override _CameraScreenState createState() => _CameraScreenState(); } class _CameraScreenState extends State<CameraScreen> { CameraController _controller; @override void initState() { super.initState(); _controller = CameraController(cameras[0], ResolutionPreset.medium); _controller.initialize().then((_) { if (!mounted) { return; } setState(() {}); }); } @override void dispose() { _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { if (!_controller.value.isInitialized) { return Container(); } return AspectRatio( aspectRatio: _controller.value.aspectRatio, child: CameraPreview(_controller), ); } }
Future<void> takePicture() async { if (!_controller.value.isInitialized) { return; } final Directory extDir = await getTemporaryDirectory(); final String dirPath = '${extDir.path}/Pictures/flutter_test'; await Directory(dirPath).create(recursive: true); final String filePath = '$dirPath/${DateTime.now()}.jpg'; await _controller.takePicture(filePath); }