import 'dart:io';
import 'package:camera/camera.dart';
import 'package:Flutter/material.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
List<CameraDescription> cameras;
void main() async {
/// 获取设备上可用摄像头的列表。
cameras = await availableCameras();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
CameraController _controller;
Future<void> _initializeControllerFuture;
@override
void initState() {
init();
super.initState();
}
init() async {
/// 从可用摄像头列表中获取特定摄像头。
final firstCamera = cameras.first;
// 要显示摄像机的当前输出
// 创建一个CameraController
_controller = CameraController(
// 从可用摄像头列表中获取特定摄像头
firstCamera,
// 定义要使用的分辨率。
ResolutionPreset.medium,
);
// 接下来,初始化控制器。 这将返回一个Future
_initializeControllerFuture = _controller.initialize();
}
@override
void dispose() {
_controller?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(
child: Icon(Icons.camera_alt),
onpressed: () async {
try {
// 确保已初始化摄像机。
await _initializeControllerFuture;
final path = join(
(await getTemporaryDirectory()).path, '${DateTime.Now()}.png');
await _controller.takePicture(path);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => displayPictureScreen(imagePath: path),
),
);
} catch (e) {
print(e);
}
},
),
body: FutureBuilder<void>(
future: _initializeControllerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
// If the Future is complete, display the preview.
return AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: CameraPreview(_controller),
);
} else {
return Center(child: CircularProgressIndicator());
}
},
),
);
}
}
class displayPictureScreen extends StatelessWidget {
final String imagePath;
const displayPictureScreen({Key key, this.imagePath}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('display the Picture')),
body: Image.file(File(imagePath)),
);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。