问题描述
我使用 GetX 获取图像裁剪后的路径并将其存储在一页上的 RXString 中:
RxString imageAdd = '$imagePath'.obs;
然后我使用以下方法在另一个页面上检索图像的路径:
Obx(
() => Image(
image: AssetImage(
(pollImageController.imageAdd.value)),
但是图像没有显示在第二页上。
完整代码:
ImagePickerCropper 页面:
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:justpoll/Constants.dart';
import 'package:image_cropper/image_cropper.dart';
import 'package:image_picker/image_picker.dart';
import 'dart:io';
import 'package:justpoll/screens/create_poll/create_poll4.dart';
String imagePath;
class CreatePoll3 extends StatefulWidget {
@override
_CreatePoll3State createState() => _CreatePoll3State();
}
class _CreatePoll3State extends State<CreatePoll3> {
final controller = Get.put(PollImageController());
File _selectedFile;
bool _inProcess = false;
final _picker = ImagePicker();
Widget getImageWidget() {
if (_selectedFile != null) {
return Image.file(
_selectedFile,width: 370,height: 230,fit: BoxFit.cover,);
} else {
return Padding(
padding: const EdgeInsets.only(bottom: 20),child: Image.asset(
"assets/Images/placeholder.png",),);
}
}
getImage(ImageSource source) async {
this.setState(() {
_inProcess = true;
});
PickedFile image = await _picker.getImage(source: source);
if (image != null) {
File cropped = await ImageCropper.cropImage(
sourcePath: image.path,aspectRatio: CropAspectRatio(ratioX: 2,ratioY: 1.5),compressQuality: 100,maxWidth: 700,maxHeight: 700,compressFormat: ImageCompressFormat.jpg,androidUiSettings: AndroidUiSettings(
toolbarColor: Colors.white,toolbarTitle: "Crop Image",statusBarColor: Colors.black,backgroundColor: Colors.white,));
imagePath = cropped.path;
print(imagePath);
this.setState(() {
_selectedFile = cropped;
_inProcess = false;
});
} else {
this.setState(() {
_inProcess = false;
});
}
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
backgroundColor: MyColors.white,appBar: AppBar(
title: Padding(
padding: const EdgeInsets.all(75.0),child: Text('New Poll'),leading: GestureDetector(
onTap: () {
Navigator.pop(context);
},child: Icon(
Icons.arrow_back,backgroundColor: Colors.black87,body: ListView(
children: [
Column(
children: [
Center(
child: Padding(
padding: const EdgeInsets.only(top: 18,bottom: 28),child: Text("3/4"),// Padding(
// padding: const EdgeInsets.only(right: 230.0,top: 30,bottom: 30),// child: Text(
// "Add Image",// style: TextType.regularDarkText,// ),// ),getImageWidget(),Padding(
padding: const EdgeInsets.only(top: 20),child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: <Widget>[
MaterialButton(
onPressed: () {
getImage(ImageSource.camera);
},color: Colors.black,textColor: Colors.white,child: Icon(
Icons.camera,size: 24,padding: EdgeInsets.all(16),shape: CircleBorder(),MaterialButton(
onPressed: () {
getImage(ImageSource.gallery);
},child: Icon(
Icons.photo_album,Align(
alignment: Alignment.bottomRight,child: MaterialButton(
onPressed: () {
Navigator.push(
context,MaterialPageRoute(
builder: (context) => CreatePoll4(),);
},child: Icon(
Icons.arrow_forward,)
],(_inProcess)
? Container(
color: Colors.white,height: MediaQuery.of(context).size.height * 0.95,child: Center(
child: CircularProgressIndicator(),)
: Center()
],],);
}
}
class PollImageController extends GetxController {
RxString imageAdd = '$imagePath'.obs;
// adding .obs makes this a stream based observable String
// this onInit override can be used instead of initState in a stateful widget.
// All text editing controllers can be initialized here
@override
void onInit() {
super.onInit();
}
@override
void onClose() {
super.onClose();
}
}
图片展示页面:
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:justpoll/Constants.dart';
import 'package:justpoll/screens/home_page/nav.dart';
import 'create_poll1_static.dart';
import 'create_poll3.dart';
final pollDataController = Get.find<PollDataController>();
final pollImageController = Get.find<PollImageController>();
// final _questionController = pollDataController.questionController;
class CreatePoll4 extends StatefulWidget {
@override
_CreatePoll4State createState() => _CreatePoll4State();
}
class _CreatePoll4State extends State<CreatePoll4> {
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
backgroundColor: MyColors.white,child: Text('Poll Preview'),child: Text("4/4"),Padding(
padding: const EdgeInsets.only(right: 240,top: 10),child: Text(
'Select Theme',style: TextType.regularDarkText,Padding(
padding: const EdgeInsets.only(top: 10),child: Row(
children: [
Expanded(
child: MaterialButton(
onPressed: () {},color: Colors.yellow,Expanded(
child: MaterialButton(
onPressed: () {},color: Colors.orange,color: Colors.brown,color: Colors.blue,color: Colors.green,Card(
child: Container(
color: Colors.blue,child: Padding(
padding: const EdgeInsets.only(bottom: 10),child: Column(
children: [
Row(
children: [
Padding(
padding: const EdgeInsets.all(8.0),child: CircleAvatar(
backgroundImage:
AssetImage('assets/Images/blackLogo.png'),Padding(
padding: const EdgeInsets.only(left: 10),child: Text('JustPoll'),Padding(
padding: const EdgeInsets.all(8.0),child: Obx(
() => Text(pollDataController.question.value),child: Obx(
() => Image(
image: AssetImage(
(pollImageController.imageAdd.value)),height: 150,width: 200,Row(
children: [
Padding(
padding:
const EdgeInsets.only(left: 120,top: 20),child: Obx(
() => Text(pollDataController.op1.value),SizedBox(
width: 70,Padding(
padding:
const EdgeInsets.only(left: 10,child: Obx(
() => Text(pollDataController.op1Emoji.value),child: Obx(
() => Text(pollDataController.op2.value),child: Obx(
() => Text(pollDataController.op2Emoji.value),child: Obx(
() => Text(pollDataController.op3.value),child: Obx(
() => Text(pollDataController.op3Emoji.value),child: Obx(
() => Text(pollDataController.op4.value),child: Obx(
() => Text(pollDataController.op4Emoji.value),child: Align(
alignment: Alignment.bottomRight,child: MaterialButton(
onPressed: () {
Navigator.push(
context,MaterialPageRoute(
builder: (context) => Nav(),);
},child: Icon(
Icons.done,)
],);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)