2 votes

mon conteneur animé Causé par l'interférence des pixels

J'ai une ligne simple contenant 2 éléments comme suit

class Test2 extends StatefulWidget {
  const Test2({Key? key}) : super(key: key);

  @override
  State<Test2> createState() => Test2State();
}

class Test2State extends State<Test2> {

 bool selected = false ;
  @override
  Widget build(BuildContext context) {
    return  Scaffold(
      bottomNavigationBar: FloatingActionButton(
        child: Icon(Icons.done),
        onPressed: () {
          setState(() {
            selected = !selected;
          });
        },
      ),
      backgroundColor: Colors.blue,
      appBar: AppBar(),
      body:
      Row(
        mainAxisAlignment: MainAxisAlignment.end,
        children: [
          AnimatedContainer(
              duration: Duration(milliseconds: 500),
              color: Colors.yellowAccent,
              width:  !selected? 50:MediaQuery.of(context).size.width,
              height:50
          ),

          Container(
              width:50,
              child:Icon(Icons.star)
          )

        ],
      )
    );
  }
}

Maintenant quand je change la valeur de bool à true il s'anime vers la gauche mais cela cause l'inspection du widget à quelques pixels sur la droite même si j'utilise Flexible pour mon deuxième item cela résout le problème mais aussi mon icône disparaît.

J'ai besoin d'une animation au maximum à gauche tout en gardant mon icône visible.

Comment puis-je résoudre ce problème ?

0voto

Yeasin Sheikh Points 22

Sur AnimatedContainer vous définissez la largeur MediaQuery.of(context).size.width au moment du clic, il n'y aura donc pas d'espace disponible pour le second conteneur dont la largeur est 50 .

AnimatedContainer(
    duration: Duration(milliseconds: 500),
    color: Colors.yellowAccent,
    width: !selected ? 50 : MediaQuery.of(context).size.width - 50, // -50 space for second container
    height: 50),
Container(
  width: 50,
  child: Icon(Icons.star),
)

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