问题描述
我正在Flutter中进行集成测试,并且在应用程序中打开了相机,但是我不知道如何点击按钮来拍摄照片,有人知道如何搜索此按钮吗?
如果您可以在该应用中选择要使用相机拍摄照片还是选择图库图片的代码,则为以下代码
import 'dart:io';
import 'package:permission_handler/permission_handler.dart';
import 'package:random_string/random_string.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:image_cropper/image_cropper.dart';
import 'package:image_picker/image_picker.dart';
import 'package:modal_progress_hud/modal_progress_hud.dart';
import 'package:rosita/language/firebase_remote.dart';
import 'package:rosita/api/api_provider.dart';
import 'package:rosita/constants/common.dart';
import 'package:rosita/model/image_object.dart';
import 'package:rosita/model/senior_user.dart';
import 'package:rosita/modules/widgets/button_ui.dart';
import 'package:rosita/rosita.dart';
class AddProfileImageScreen extends StatefulWidget {
const AddProfileImageScreen({Key key,this.seniorUser}) : super(key: key);
final SeniorUser seniorUser;
@override
_AddProfileImageScreenState createState() => _AddProfileImageScreenState();
}
class _AddProfileImageScreenState extends State<AddProfileImageScreen> {
bool _isProcessing = false;
File _image;
bool _enableButton = false;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).scaffoldBackgroundColor,body: ModalProgressHUD(
inAsyncCall: _isProcessing,color: Colors.transparent,progressIndicator: const CircularProgressIndicator(
strokeWidth: 2.0,),child: Container(
padding: EdgeInsets.only(top: MediaQuery.of(context).padding.top),constraints: BoxConstraints(
minHeight: MediaQuery.of(context).size.height,minWidth: MediaQuery.of(context).size.width),child: Padding(
padding: const EdgeInsets.all(24),child: Column(
mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[
darkSubtitleText('choose_profile_picture',context),Expanded(
child: Center(
child: SizedBox(
width: 100,height: 100,child: Card(
shape: RoundedRectangleBorder(
side: const BorderSide(
color: AppTheme.purpleColor,width: 4,borderRadius: BorderRadius.circular(60.0),elevation: 0,color: Theme.of(context).dividerColor,child: _image == null
? (widget.seniorUser != null &&
widget.seniorUser.profileImage != null &&
widget.seniorUser.profileImage.imageUrl !=
'')
? CachedNetworkImage(
imageUrl:
widget.seniorUser.profileImage.imageUrl,placeholder:
(BuildContext context,String url) =>
Image.asset(ConstantsData.appIcon),errorWidget: (BuildContext context,String url,error) =>
const Icon(Icons.error),fit: BoxFit.cover,)
: Image.asset(ConstantsData.appIcon)
: Image.file(_image),ButtonUI(
buttonName: 'ProfilePhotoFromCameraButton',key: const Key(Keys.cameraButton),isTrack: true,color: AppTheme.primaryColor,body: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),child: Text(
FireText.of('take_a_photo_with_your_camera'),textAlign: TextAlign.center,style: Theme.of(context)
.primaryTextTheme
.subtitle2
.copyWith(
color: Theme.of(context).backgroundColor,onTap: () {
getImage(isGallery: false);
},verticalSpacer(),ButtonUI(
buttonName: 'ProfilePhotoFromGalleryButton',key: const Key(Keys.galleryButton),child: Text(
FireText.of('choose_from_gallery'),onTap: () {
getImage(isGallery: true);
},if (_image != null || _enableButton)
ButtonUI(
buttonName: 'ProfilePhotoUploadButton',key: const Key(Keys.uploadButton),color: AppTheme.purpleColor,body: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),child: Text(
FireText.of('continue_txt'),style: Theme.of(context)
.primaryTextTheme
.subtitle2
.copyWith(
color: Theme.of(context).backgroundColor,onTap: () {
_uploadAllInformation();
},],);
}
Future<void> getImage({bool isGallery = true}) async {
await <Permission>[Permission.camera,Permission.storage].request();
if (await Permission.storage.status != PermissionStatus.granted) {
setState(() {
_enableButton = true;
});
return;
}
if (!isGallery &&
await Permission.camera.status != PermissionStatus.granted) {
setState(() {
_enableButton = true;
});
return;
}
final image = await ImagePicker.pickImage(
source: isGallery ? ImageSource.gallery : ImageSource.camera);
if (image == null) return;
final cropimage = await cropImage(image);
if (cropimage == null) return;
setState(() {
_image = cropimage;
});
}
Future<File> cropImage(File imageFile) async {
final croppedFile = await ImageCropper.cropImage(
androidUiSettings: AndroidUiSettings(
statusBarColor: Theme.of(context).primaryColor,toolbarColor: Theme.of(context).primaryColor,toolbarWidgetColor: Theme.of(context).backgroundColor,sourcePath: imageFile.path,cropStyle: CropStyle.circle,aspectRatio: const CropAspectRatio(ratioX: 1,ratioY: 1),maxWidth: 420,maxHeight: 420,);
return croppedFile;
}
Future<void> _uploadAllInformation() async {
setState(() {
_isProcessing = true;
});
widget.seniorUser.documentId =
(await FirebaseAuth.instance.currentUser()).uid;
widget.seniorUser.referralCode =
'RO-' + randomAlphaNumeric(8).toUpperCase();
widget.seniorUser.enterReferralCode = deepLinkReferralCode;
await ApiProvider().createSeniorUserProfile(widget.seniorUser);
endRegister = true;
if (!_enableButton) {
final imageData = await updateProfilePic(widget.seniorUser);
await ApiProvider()
.updateRositaProfileImage(imageData,widget.seniorUser.documentId);
}
setState(() {
_isProcessing = false;
});
Rosita.restartApp(context);
}
Future<ImageObject> updateProfilePic(SeniorUser user) async {
final imagename = DateTime.now().millisecondsSinceEpoch.toString() + '.jpg';
final url = await ApiProvider()
.updateProfilePic('rositapics/${user.documentId}/' + imagename,_image);
final profileImage = ImageObject();
profileImage.imageUrl = url.toString();
profileImage.firebaseStoregPath =
'rositapics/${user.documentId}/' + imagename;
profileImage.imageName = imagename;
return profileImage;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)