es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cuando aparece la hoja inferior modal, el icono animado no se revertirá (el icono se encuentra en la barra de aplicaciones).

Tengo un icono animado en la Barra de Aplicación (el icono es menu_close). Cuando presiono el icono, aparece la hoja inferior modal y el icono cambia, pero después de cerrar la hoja inferior modal, el icono no se invierte (¡no cambia a menú y permanece en close!). ¿Alguien puede ayudarme a arreglar esto?

“`dart
class TabsScreen extends StatefulWidget {
const TabsScreen({Key? key}) : super(key: key);

@override
_TabsScreenState createState() => _TabsScreenState();
}

class _TabsScreenState extends State<tabsscreen>
with SingleTickerProviderStateMixin {
late AnimationController _animationController;
bool isPlaying = false;

@override
void initState() {
super.initState();
_animationController = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 450),
reverseDuration: const Duration(microseconds: 450));
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text(
'título',
),
actions: <widget>[
IconButton(
icon: AnimatedIcon(
icon: AnimatedIcons.menu_close,
progress: <em>animationController,
),
onPressed: () {
setState(() {
if (!isPlaying) {
_animationController.forward();
showModalBottomSheet(
context: context,
builder: (context) => Container(
color: Colors.deepPurple,
),
);
isPlaying = true;
} else {
_animationController.reverse().then((</em>) {
Navigator.pop(context);
isPlaying = false;
});
}
});
}),
],
));
}
}

“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Necesitas actualizar la variable isPlaying cuando se cierre la hoja inferior para activar el ícono y revertirlo al ícono del menú original. Así es como puedes hacerlo:


    class TabsScreen extends StatefulWidget { const TabsScreen({Key? key}) : super(key: key); @override _TabsScreenState createState() => _TabsScreenState(); } class _TabsScreenState extends State<tabsscreen> with SingleTickerProviderStateMixin { late AnimationController _animationController; bool isPlaying = false; @override void initState() { super.initState(); _animationController = AnimationController( vsync: this, duration: const Duration(milliseconds: 450), reverseDuration: const Duration(microseconds: 450)); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text( 'título', ), actions: <widget>[ IconButton( icon: AnimatedIcon( icon: AnimatedIcons.menu_close, progress: _animationController, ), onPressed: () { setState(() { if (!isPlaying) { _animationController.forward(); showModalBottomSheet( context: context, builder: (context) => Container( color: Colors.deepPurple, ), ).then((value) { // Actualiza la variable isPlaying para revertir la animación del ícono isPlaying = false; _animationController.reverse(); }); } else { _animationController.reverse(); } // Alternar la variable isPlaying isPlaying = !isPlaying; }); }, ), ], ), ); } }

    En el código anterior, estoy alternando la variable isPlaying al presionar el ícono para iniciar la animación, así como al cerrar la hoja inferior. Cuando se cierra la hoja inferior, también estoy comprobando si isPlaying es verdadero y revirtiendo el controlador de animación y estableciendo isPlaying en falso para mostrar el ícono del menú original.

Comments are closed.