Добавление изображения в ListTile в специфичной для Flutter проблеме

#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. Ну, конечно, теперь я чувствую себя глупо. Большое спасибо, иногда самые простые решения упускаются из виду.