У меня есть приложение Flutter, в котором я использую AnimatedSwitcher для анимации другого виджета при нажатии пользователем в том же родительском виджете. Я использую несколько провайдеров для анимированного дочернего виджета, которые выдают такие ошибки, как: Продукт был использован после удаления
Я не очень опытен с провайдером и использовал его в то же приложение с навигаторами и никогда не сталкивался с проблемой.
Я использую setState для установки дочернего виджета, как показано ниже:
_animateToChild() {
setState(() {
childWidget = MultiProvider(
providers: [
ChangeNotifierProvider(
create: (_) => ModelPath(storePath: AppConstants.carousel)),
ChangeNotifierProvider(create: (_) => Product())
],
child: ChildFragment(
productRoot: 'My Product',
));
});
}
В виджете «Дочерний фрагмент» я получаю доступ к ModelPath следующим образом и перехожу к другая страница:
_openCollection(BuildContext context) {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => MultiProvider(providers: [
ChangeNotifierProvider.value(value: Provider.of<ModelPath>(context)),
ChangeNotifierProvider(create: (_) => Product()),
ChangeNotifierProvider(create: (_) => ProductSelector())
], child: CollectionFragment(title: product.title)),
));
}
_openCollection () вызывается при нажатии на одну из кнопок в ChildFragment.
Кто-нибудь может мне помочь, как использовать провайдеров с AnimatedSwitcher?
Мой AnimatedSwitcher после того, как он заработал:
AnimatedSwitcher(
duration: Duration(milliseconds: 800),
transitionBuilder: (Widget child, Animation animation) {
final inAnimation =
Tween<Offset>(begin: Offset(1.0, 0.0), end: Offset(0.0, 0.0))
.animate(animation);
final outAnimation =
Tween<Offset>(begin: Offset(-1.0, 0.0), end: Offset(0.0, 0.0))
.animate(animation);
return SlideTransition(position: inAnimation, child: child);
} ...)