Я пытаюсь выбрать изображение из галереи и поместить в контейнер, но если я выберу одно, а затем выберу другое, изображение внутри контейнера все еще будет первым.
Я пробовал сначала удалить изображение, но оно все еще в контейнере. В Android Studio и с некоторыми точками останова я понял, что оно удаляет и копирует новое изображение, но не вызывает метод сборки для обновления sh виджета изображения.
Код выбрать изображение:
pickImage() async {
final String path = (await getApplicationDocumentsDirectory()).path;
final bool fileExists = await File.fromUri(Uri(path: '$path/logo.png')).exists();
if(fileExists)
await File('$path/logo.png').delete();
var image = await ImagePicker.pickImage(source: ImageSource.gallery);
imageCache.clear();
if(image == null)
return;
File newImage = await image.copy('$path/logo.png');
new FileImage(File('$path/logo.png')).evict();
setState(() {
_image = newImage;
imagePath = newImage.path;
});
}
Структура макета
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
appBar: AppBar(
title: Text(
'Profile',
style: TextStyle(
fontFamily: 'Brandon',
color: Colors.white,
),
),
centerTitle: true,
backgroundColor: Color(0xff365951),
leading: new IconButton(
icon: new Icon(Icons.arrow_back_ios, color: Color(0xffeec1b2)),
onPressed: () => Navigator.of(context).pop(),
),
),
body: new IconTheme(
data: new IconThemeData(color: Colors.black),
child: new Stack(
children: <Widget>[
SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Center(
child: Container(
margin: EdgeInsets.only(top: 10),
height: 150,
width: 150,
child: Center(
child: InkWell(
onTap: pickImage,
child: (imagePath == '') ? Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget> [
Icon(Icons.add, color: Colors.white),
Text(
'PICTURE',
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontFamily: 'Brandon'
)
)
]
) : ClipRRect(
borderRadius: BorderRadius.circular(100),
child: new Image.file(new File(imagePath)),
)
),
),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Color(0xff365951),
),
),
),
]
)
)
)
)
);
}