因此,我一直在尝试几种不同的解决方案,但似乎没有一种有效。我正在尝试创建一个自拍功能,该功能也有一些覆盖。
我正在使用fluro转到我要在其中使用相机的地方创建的自拍屏幕。
我尝试了多种方法,例如setState(() {});
和下面的方法。
但是我似乎没有任何相机。如果我尝试使用camera
软件包随附的demp应用程序,它将运行正常。
我只是看不到如何在单独的组件文件中获取可用的相机。还有一种方法可以在应用初始化期间获取摄像头,并将摄像头从应用程序构造函数一直传递到我需要的组件。但这似乎是一种不好的做法。
有人能有更好的方法吗?
这是我的selfie_component.dart
文件
import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
class SelfiePage extends StatefulWidget {
@override
State<StatefulWidget> createState() => new SelfiePageState();
}
class SelfiePageState extends State<SelfiePage> {
CameraController _camera;
CameraLensDirection _direction = CameraLensDirection.back;
@override
void initState() {
super.initState();
_initializeCamera();
}
Future<CameraDescription> _getCamera(CameraLensDirection dir) async {
return await availableCameras().then(
(List<CameraDescription> cameras) => cameras.firstWhere(
(CameraDescription camera) => camera.lensDirection == dir,
),
);
}
void _initializeCamera() async {
_camera = CameraController(
await _getCamera(_direction),
ResolutionPreset.medium,
);
print(_camera);
await _camera.initialize();
}
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
body: Column(
children: <Widget>[
Expanded(
child: Container(
child: Padding(
padding: const EdgeInsets.all(1.0),
child: Center(
child: _cameraPreviewWidget(),
),
),
),
),
],
),
);
}
/// Display the preview from the camera (or a message if the preview is not available).
Widget _cameraPreviewWidget() {
if (_camera == null || !_camera.value.isInitialized) {
return const Text(
'Tap a camera',
style: TextStyle(
color: Colors.white,
fontSize: 24.0,
fontWeight: FontWeight.w900,
),
);
} else {
return AspectRatio(
aspectRatio: _camera.value.aspectRatio,
child: CameraPreview(_camera),
);
}
}
}
答案 0 :(得分:0)
我已经解决了问题。
我已经制作了一个单独的BYTE * someRoutineInsideService()
{
DWORD err;
BYTE* pbEncryptedBlob = NULL;
DWORD cbEncryptedBlob;
BYTE* pbDecryptedMessage = NULL;
DWORD cbDecryptedMessage;
pbEncryptedBlob = malloc(BUF_SZ);
cbEncryptedBlob = BUF_SZ;
/**** read pbEncryptedBlob from file ****/
pbDecryptedMessage = malloc(BUF_SZ);
cbDecryptedMessage = BUF_SZ;
/**** code below ****/
err = myDecryptMessage("MY", pbEncryptedBlob, cbEncryptedBlob, pbDecryptedMessage, &cbDecryptedMessage);
if (err != 0)
goto cleanup;
cleanup:
if (pbEncryptedBlob)
free(pbEncryptedBlob);
return(pbDecryptedMessage);
}
DWORD myDecryptMessage(LPSTR cStore, BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecryptedMessage, DWORD *cbDecryptedMessage)
{
HCERTSTORE CertStoreArray[1];
CRYPT_DECRYPT_MESSAGE_PARA DecryptParams;
DWORD DecryptParamsSize = sizeof(DecryptParams);
HCRYPTPROV hCryptProv = 0; // CSP handle
HCERTSTORE hStoreHandle = 0;
DWORD err = 0;
BOOL rc;
rc = CryptAcquireContext(
&hCryptProv, // Address for handle to be returned.
NULL, // Use the current user's logon name.
NULL, // Use the default provider.
PROV_RSA_FULL, // Need to both encrypt and sign.
0); // No flags needed.
if (!rc)
{
err = GetLastError();
goto cleanup;
}
hStoreHandle = CertOpenSystemStore(hCryptProv, cStore);
if (hStoreHandle == NULL)
{
err = GetLastError();
goto cleanup;
}
CertStoreArray[0] = hStoreHandle;
memset(&DecryptParams, 0, DecryptParamsSize);
DecryptParams.cbSize = DecryptParamsSize;
DecryptParams.dwMsgAndCertEncodingType = (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING);
DecryptParams.cCertStore = 1;
DecryptParams.rghCertStore = CertStoreArray;
rc = CryptDecryptMessage(
&DecryptParams,
pbEncryptedBlob,
cbEncryptedBlob,
pbDecryptedMessage,
cbDecryptedMessage,
NULL);
if (!rc)
{
err = GetLastError();
/**** returns 0x8009200C (CRYPT_E_NO_DECRYPT_CERT) if service run under LSA ****/
goto cleanup;
}
cleanup:
if(hCryptProv)
rc = CryptReleaseContext(hCryptProv,0);
return(err);
}
文件
{{url.page ? url.page : url.path | decodeURIComponent}}
然后将其导入正确的屏幕上,并调用selfie_camara_widget.dart