230 votes

Image des coins arrondis dans Flutter

J'utilise Flutter pour créer une liste d'informations sur les films. Maintenant, je veux que l'image de couverture sur la gauche soit une image aux coins arrondis. J'ai fait ce qui suit, mais cela n'a pas fonctionné. Merci !

    getItem(var subject) {
    var row = Container(
      margin: EdgeInsets.all(8.0),
      child: Row(
        children: <Widget>[
          Container(
            width: 100.0,
            height: 150.0,
            decoration: BoxDecoration(
              borderRadius: BorderRadius.all(Radius.circular(8.0)),
              color: Colors.redAccent,
            ),
            child: Image.network(
              subject['images']['large'],
              height: 150.0,
              width: 100.0,
            ),
          ),
        ],
      ),
    );
    return Card(
      color: Colors.blueGrey,
      child: row,
    );
  }

comme suit

enter image description here

622voto

Abdi Hamid Points 499

Utilisez ClipRRect il fonctionnera parfaitement.

ClipRRect(
    borderRadius: BorderRadius.circular(8.0),
    child: Image.network(
        subject['images']['large'],
        height: 150.0,
        width: 100.0,
    ),
)

19 votes

Merci ! J'ai fait comme vous l'avez dit, puis j'ai ajouté fit: BoxFit.fill ça a l'air plutôt bien.

2 votes

Merci - Avez-vous une idée sur la façon de créer une bordure colorée à l'image clipRRect'ed ?

7 votes

@iKK - Enveloppez-le dans un conteneur avec une décoration de type BoxDecoration avec les paramètres appropriés de border/borderRadius comme suit : Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(3.0), border: Border.all(color: Colors.grey[300])), child: ClipRRect( borderRadius: BorderRadius.circular(3.0), child: Image.network( uri, fit: BoxFit.fill, width: imageDimension, height: imageDimension, ), ), )

85voto

onmyway133 Points 2196

Vous pouvez également utiliser CircleAvatar qui s'accompagne d'un flottement

CircleAvatar(
  radius: 20,
  backgroundImage: NetworkImage('https://via.placeholder.com/140x100')
)

2 votes

C'est la meilleure réponse. J'ai fait de l'extra backgroundImage: member[index].picture == null ? Image(image: AssetImage('assests/no-image.png')) : NetworkImage( member[index].picture,

0 votes

@saviour123 toutes les images avec des coins arrondis ne sont pas des 'avatars'. Accepté est la réponse générique.

3 votes

Il est impossible de définir une hauteur ou une largeur avec ce widget, ce qui est problématique.

70voto

CopsOnRoad Points 4705

Utilisation de ClipRRect vous devez coder en dur BorderRadius donc, si vous avez besoin d'une circulaire complète, utilisez ClipOval à la place.

ClipOval(
  child: Image.network(
    "image_url",
    height: 100,
    width: 100,
    fit: BoxFit.cover,
  ),
),

4 votes

La réponse la plus simple !

2 votes

Si l'image de l'enfant n'est pas carrée, le découpage sera elliptique dans cette solution.

53voto

Faisal Kc Points 146

Essayez plutôt ceci, ça a marché pour moi :

Container(
  width: 100.0,
  height: 150.0,
  decoration: BoxDecoration(
    image: DecorationImage(
        fit: BoxFit.cover, image: NetworkImage('Path to your image')),
    borderRadius: BorderRadius.all(Radius.circular(8.0)),
    color: Colors.redAccent,
  ),
),

0 votes

Votre réponse est vraiment utile, merci ! Mais que faire si le contenu d'un conteneur n'est pas seulement une image mais un widget ? Une idée ?

0 votes

L'utilisation de cette méthode me donne une erreur d'exécution. Il y a deux éléments dans une "pile". Le premier élément doit être une image aux coins arrondis pour laquelle je cherche une réponse.

17voto

simhachalam Points 91
   Container(
      width: 48.0,
      height: 48.0,
      decoration: new BoxDecoration(
        shape: BoxShape.circle,
        image: new DecorationImage(
            fit: BoxFit.fill,
            image: NetworkImage("path to your image")
        )
    )),

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X