Поставщик Flutter удаляется, когда виджет работает с AnimatedSwitcher - PullRequest
0 голосов
/ 16 июня 2020

У меня есть приложение 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);
        } ...)
...