Hi
I use a Camera Preview in my app, and my app must always use the front camera for preview. It works fine on iPhone and iPad.
But now I have try on a Samsund Tab A8 android tablet, install my app (APK)
But on android, it always use back camera.
I have try to use "CameraLensDirection" But can't get anything to work
anyone have an idea how i can get it to always select the front camera
Here is my code:
// Automatic FlutterFlow imports
import '/backend/backend.dart';
import '/actions/actions.dart' as action_blocks;
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/widgets/index.dart'; // Imports other custom widgets
import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart';
// Begin custom widget code
// DO NOT REMOVE OR MODIFY THE CODE ABOVE!
import 'package:image_picker/image_picker.dart';
import 'dart:convert';
import 'package:camera/camera.dart';
class CameraPhoto extends StatefulWidget {
const CameraPhoto({
Key? key,
this.width,
this.height,
}) : super(key: key);
final double? width;
final double? height;
@override
_CameraPhotoState createState() => _CameraPhotoState();
}
class _CameraPhotoState extends State<CameraPhoto> {
CameraController? controller;
late Future<List<CameraDescription>> _cameras;
@override
void initState() {
super.initState();
_cameras = availableCameras();
}
@override
void didUpdateWidget(covariant CameraPhoto oldWidget) {
super.didUpdateWidget(oldWidget);
if (FFAppState().makePhoto) {
controller!.takePicture().then((file) async {
Uint8List fileAsBytes = await file.readAsBytes();
final base64 = base64Encode(fileAsBytes);
FFAppState().update(() {
FFAppState().fileBase64 = base64;
});
FFAppState().update(() {
FFAppState().makePhoto = false;
});
}).catchError((error) {});
}
}
@override
void dispose() {
controller?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return FutureBuilder<List<CameraDescription>>(
future: _cameras,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasData && snapshot.data!.isNotEmpty) {
if (controller == null) {
controller =
CameraController(snapshot.data![0], ResolutionPreset.max);
controller!.initialize().then((_) {
if (!mounted) {
return;
}
setState(() {});
});
}
return controller!.value.isInitialized
? MaterialApp(
home: CameraPreview(controller!),
)
: Container();
} else {
return Center(child: Text('No cameras available.'));
}
} else {
return Center(child: CircularProgressIndicator());
}
},
);
}
}
// Set your widget name, define your parameter, and then add the
// boilerplate code using the green button on the right!