android - iOS 在 Flutter 中实现相机
问题描述
我正在尝试为 android 和 iOS 设备在颤振中实现相机包,在 android 上我没有任何问题,但在 iOS 中我收到此错误:在构建 Builder 时抛出了以下 StateError:
Bad state: No element
When the exception was thrown, this was the stack:
#0 List.first (dart:core-patch/growable_array.dart:332:5)
#1 _CameraState.initState (package:glass_case_flutter/controllers/camera_controller.dart:21:45)
#2 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4632:57)
#3 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4469:5)
... Normal element mounting (24 frames)
这是 main.dart 的代码:
List<CameraDescription> cameras;
Future<Null> main() async {
WidgetsFlutterBinding.ensureInitialized();
cameras = await availableCameras();
await Firebase.initializeApp();
runApp(GlassCase());
}
class GlassCase extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(fontFamily: 'Nunito'),
initialRoute: WelcomeScreen.id,
routes: {
WelcomeScreen.id: (context) => WelcomeScreen(),
RegistrationScreen.id: (context) => RegistrationScreen(),
ResetPassword.id: (context) => ResetPassword(),
HomeScreen.id: (context) => HomeScreen(cameras),
ProfileScreen.id: (context) => ProfileScreen()
},
);
}
}
这是我调用 camera.dart 的 homepage.dart 的代码:
IconButton(
icon: Icon(Icons.camera_alt),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Camera(widget.cameras)));
},
color: Colors.black,
),
这是我的camera.dart,很简单,打开相机即可:
import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
class Camera extends StatefulWidget {
List<CameraDescription> cameras;
Camera(this.cameras);
@override
_CameraState createState() => _CameraState();
}
class _CameraState extends State<Camera> {
CameraController controller;
@override
void initState() {
super.initState();
controller =
new CameraController(widget.cameras.first, ResolutionPreset.high);
controller.initialize().then((_) {
if (!mounted) {
return;
}
setState(() {});
});
}
@override
void dispose() {
controller?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
if (!controller.value.isInitialized) {
return new Container();
}
return new AspectRatio(
aspectRatio: controller.value.aspectRatio,
child: CameraPreview(controller),
);
}
}
我在 Info.plist 中添加了这个来访问摄像头和麦克风:
<key>NSCameraUsageDescription</key>
<string>Enable to access your camera to capture your photo</string>
<key>NSMicrophoneUsageDescription</key>
<string>Enable to access mic to record your voice</string>
我不明白为什么在 Android 中它可以工作,但在 iOS 中我得到了那个错误,有人可以帮助我吗?非常感谢 !
解决方案
推荐阅读
- android - 如何创建下拉视图文本 FAQ Flutter UI
- python - python中的执行时间限制
- hibernate - 无法获得不同的查询结果
- python - Python Vimeo Upload (pyvimeo) 中进度条的回调
- python - 继承模型类中的另一个类属性
- python - Torchaudio C++ 扩展不可用 - Python
- android - 列出从 Playstore 安装的应用程序
- python - 即使条件不满足,Python也会执行While循环?
- r - 如何使用 summarise 获取对应于最大值的变量的值。另一个变量的值?
- recursion - 方案 - 2 个列表的较大列表及其总和