#flutter #dart
#flutter #dart
Вопрос:
Итак, у меня есть этот нетрадиционный код, который я должен был ввести, чтобы сделать контейнер внутри плитки списка с изображением, выбранным с помощью ImagePicker. Вот фрагмент:
File _smallImage;
Вот функция для выбора изображений:
Future _getSmallImage() async {
PickedFile pickedFile = await picker.getImage(source: ImageSource.gallery);
setState(() {
if (pickedFile != null) {
_smallImage = File(_smallImage.path);
} else {
print('No image selected.');
}
});
}
Теперь, вот где это немного сбивает с толку, вот код ListTile:
child: ListTile(
trailing: Container(
height: 120.0,
width: 100.0,
//color: Colors.white,
decoration: BoxDecoration(
color: Colors.white,
FileImage(File(_smallImagepath)) : null
image: DecorationImage(
image: _smallImage == null
? MemoryImage(kTransparentImage)
: FileImage(_smallImage),
fit: BoxFit.cover,
),
),
child: IconButton(
icon: Icon(Icons.add),
file u path,
onPressed: () => _getSmallImage(),
),
),
Как вы можете видеть, в ListTile есть кнопка IconButton (мне пришлось сделать это так, поскольку плитка списка также имеет функцию onPressed, и это был единственный способ нажатия как маленькой кнопки, так и самой плитки списка). У него есть функция _getSmallImage() ImagePicker, которая получает изображение. Там есть DecorationImage, который принимает это выбранное изображение:
image: DecorationImage(
image: _smallImage == null
? MemoryImage(kTransparentImage)
: FileImage(_smallImage),
fit: BoxFit.cover,
но дело в том, что я получаю ошибку ‘called on null’, но я не уверен, что ее вызывает, поскольку у меня есть троичное значение в случае null:
The getter 'path' was called on null.
Ошибка возникает, когда я пытаюсь выбрать изображение из галереи. Я знаю, что это немного длинно, но на самом деле это не так много кода, я просто хотел объяснить проблему как можно лучше. Спасибо!
Ответ №1:
Вы должны использовать pickedFile.path, а не _smallImage
setState(() {
if (pickedFile != null) {
_smallImage = File(pickedFile.path); // Change this line.
} else {
print('No image selected.');
}
});
Комментарии:
1. Ну, конечно, теперь я чувствую себя глупо. Большое спасибо, иногда самые простые решения упускаются из виду.