Flutter загрузить изображение с файлом изображения

У меня есть страница, позволяющая пользователю публиковать что-то, включая изображение. Когда страница загружается, она загружает изображение default.png, и когда пользователь нажимает на него, пользователь перенаправляется на другую страницу, где он может сделать снимок или выбрать из галереи.

Основная проблема здесь в том, что когда my post an item page загружается, он смотрит на Image.asset и видит нулевое значение. Следовательно, Image.asset может загрузить defaultImage, НО когда пользователь выбирает изображение или делает снимок, возвращаемое значение является File, а с присоединенным к нему path превращается в String (как показано ниже)

child: Image.asset(
                    imageName1?.path ?? defaultImage,
                    fit: BoxFit.cover,
                  ),

Итак, Image.asset не может загрузить это File.path

Это ошибка, которую я получаю:

Exception has occurred.
FlutterError (Unable to load asset: /data/user/0/com.flutter_project/cache/image_picker4920072427102948834.jpg)

Я знаю, что Image.file работает с file.path... но действительно ли мне нужно где-то делать оператор if, чтобы обеспечить правильное отображение изображения?

Есть ли способ проще?

Дополнительное примечание: когда я делаю обновление в своей визуальной студии (во время работы моего приложения), изображение действительно загружается (как и должно)... очень странно... моя страница stateful, и когда я передаю result (файл со всплывающей страницы), я делаю setstate на imageName1

final result = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => PhotoPreviewPage()),
);

setState(() {
imageName1 = result;
});
Применение градиента к изображению с помощью CSS
Применение градиента к изображению с помощью CSS
Здравствуйте, братья и сестры, как дела? Недавно я застрял на применении градиента к изображению. Я применял это много раз, но иногда наши требования...
Получение URL-адреса изображения курса в Moodle с помощью PHP
Получение URL-адреса изображения курса в Moodle с помощью PHP
Moodle - это популярная система управления обучением с открытым исходным кодом, используемая многими учебными заведениями и организациями по всему...
0
0
646
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это ниже.

File imageName1;

и как только вы получили изображение из всплывающего маршрута с выбранным результатом изображения из навигатора.

final result = await Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => PhotoPreviewPage()),
);

setState(() {
  imageName1 = File(result.path);
});

В методе сборки.

(imageName1 == null)
    ? ClipOval(
       child: SizedBox(
       width: 120.0,
       height: 120.0,
       child: CachedNetworkImage(
         imageUrl: (widget.user.userImg != null) ? widget.user.userImg ?? '' : AssetImages.course,
         placeholder: (context, url) => Center(child: CircularProgressIndicator()),
         errorWidget: (context, url, error) => Image.asset(AssetImages.smallLoader),
         fit: BoxFit.fill,
        ),
      ),
     )
     : ClipOval(
         child: Image.file(
           imageName1,
           width: 120,
           height: 120,
           fit: BoxFit.cover,
         ),
       ),

Другие вопросы по теме