[英]Flutter how to draw pressable rectangle on camera feed?
相机插件没有任何可以在预览上绘制的功能,但是您可以使用 Stack 小部件和容器进行类似的操作。
这是一个快速而肮脏的例子,但希望能给你这个想法:
class CameraApp extends StatefulWidget {
@override
_CameraAppState createState() => _CameraAppState();
}
class _CameraAppState extends State<CameraApp> {
CameraController controller;
// Holds the position information of the rectangle
Map<String, double> _position = {
'x': 0,
'y': 0,
'w': 0,
'h': 0,
};
// Whether or not the rectangle is displayed
bool _isRectangleVisible = false;
Future<void> getCameras() async {
final cameras = await availableCameras();
controller = CameraController(cameras[0], ResolutionPreset.medium);
controller.initialize().then((_) {
if (!mounted) {
return;
}
setState(() {});
});
}
// Some logic to get the rectangle values
void updateRectanglePosition() {
setState(() {
// assign new position
_position = {
'x': 0,
'y': 0,
'w': 0,
'h': 0,
};
_isRectangleVisible = true;
});
}
@override
void initState() {
getCameras();
super.initState();
}
@override
void dispose() {
controller?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
if (!controller.value.isInitialized) {
return Container();
}
return Stack(
children: [
AspectRatio(
aspectRatio: controller.value.aspectRatio,
child: controller == null ? Container() : CameraPreview(controller),
),
if (_isRectangleVisible)
Positioned(
left: _position['x'],
top: _position['y'],
child: InkWell(
onTap: () {
// When the user taps on the rectangle, it will disappear
setState(() {
_isRectangleVisible = false;
});
},
child: Container(
width: _position['w'],
height: _position['h'],
decoration: BoxDecoration(
border: Border.all(
width: 2,
color: Colors.blue,
),
),
child: Align(
alignment: Alignment.topLeft,
child: Container(
color: Colors.blue,
child: Text(
'hourse -71%',
style: TextStyle(color: Colors.white),
),
),
),
),
),
),
],
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.