У меня есть страница, позволяющая пользователю публиковать что-то, включая изображение. Когда страница загружается, она загружает изображение 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;
});
Вы можете сделать это ниже.
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,
),
),