Кнопка открывает диалоговое окно предупреждения с помощью GETX (Get.defaultDialog), и у меня есть кнопка выбора изображения с Image.File(...) в диалоговом окне, и когда я выбираю изображение из галереи, изображение не обновляется, только если я оставлю диалоговое окно и открыть другое Я хочу обновить Image.File после выбора изображения с помощью GETX
Я пробовал обновить(); в функции контроллера не обновлялся, и я утомил GetxBuilder в диалоговом окне, но я получаю сообщение об ошибке
первый файл
imageController controller = Get.put(imageController());
alertAddProduct() {
Get.defaultDialog(
title: "Add product",
middleText: "Add product",
//radius: 20,
barrierDismissible: false,
content: Column(
children: [
Container(
child: controller.imagePath != null ? Image.file(controller.imagePath,errorBuilder: (context, error, stackTrace) {
return const Text("Bruh");
},): const Text("Pick image")
),
ElevatedButton(
onPressed: () {
controller.getImage();
},
child: const Text("Select image"),
)
]
),
actions: [
ElevatedButton(
onPressed: () {
// working on it
},
child: const Text("Yes")),
ElevatedButton(
onPressed: () {
Get.back();
},
child: const Text("No"),
),
],);
}
и файл контроллера
import 'dart:io';
import 'package:get/get.dart';
import 'package:image_picker/image_picker.dart';
class imageController extends GetxController {
// ignore: prefer_typing_uninitialized_variables
var imagePath;
void getImage() async {
final ImagePicker picker = ImagePicker();
final XFile? image = await picker.pickImage(
source: ImageSource.gallery,
);
if (image != null) {
print("----------------------------" + image.path);
imagePath = File(image.path);
update();
} else {
print("---------------------------- Please select image");
}
}
}
и основной файл
floatingActionButton: FloatingActionButton(
elevation: 5,
onPressed: (() {
alertAddProduct();
}),
child: const Icon(Icons.add),
),
@MidlajNazar Я обновил вопрос с кодами, пожалуйста, помогите мне
Если вы пытаетесь внести какие-либо обновления в диалоговое окно update(); метод не будет работать, потому что, пока я не знаю, этот метод может обновлять только контекст, а не какое-либо наложение, поэтому, если вы хотите обновить изображение после выбора «Показать» в диалоговом окне, вам нужно перестроить его, чтобы оно могло отражать ваше изображение.
showDialog(
context: context,
builder: (context) {
String contentText = "Content of Dialog";
return StatefulBuilder(
builder: (context, setState) {
return AlertDialog(
title: Text("Title of Dialog"),
content: Text(contentText),
actions: <Widget>[
TextButton(
onPressed: () => Navigator.pop(context),
child: Text("Cancel"),
),
TextButton(
onPressed: () {
setState(() {
contentText = "Changed Content of Dialog";
});
},
child: Text("Change"),
),
],
);
},
);
},
);
Я хочу обновить его с помощью getx, но я попробую это
вы можете использовать то же самое, просто начните с StatefulBuilder вместо того, чтобы начинать с столбца []
измените переменную imagePath на obs и оберните пользовательский интерфейс OBX
например: В контроллере
var imagePath = ''.obs ;
....
imagePath.value = File(image.path);
// update ---> remove update line
В пользовательском интерфейсе оберните Obx, например:
....
Obx(()=>Container(
child:
//Add string instead of null on comparing
controller.imagePath.value != '' ?
Image.file(controller.imagePath.value,errorBuilder:
(context, error, stackTrace) {
return const Text("Bruh");},) : const Text("Pick
image")
)),
....
можешь поделиться кодом здесь