Fluttes не обновляет состояние изображения - PullRequest
0 голосов
/ 05 февраля 2020

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

Я пробовал сначала удалить изображение, но оно все еще в контейнере. В 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),                                      
                    ),
                  ),     
                ),
              ]
            )
          )
        )
      )
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...