首页 > 解决方案 > 当小部件与 AnimatedSwitcher 一起使用时,Flutter Provider 被关闭

问题描述

我有一个 Flutter 应用程序,我在其中使用 AnimatedSwitcher 在用户点击同一父小部件时为不同的小部件设置动画。我正在为正在动画的子小部件使用几个提供程序,这些提供程序会给出错误,例如:产品在被处置后被使用

我对 Provider 不是很有经验,并且在 Navigator 的同一个应用程序中使用过它,并且从未遇到过问题。

我正在使用 setState 设置子小部件,如下所示:

_animateToChild() {
    setState(() {
      childWidget = MultiProvider(
          providers: [
            ChangeNotifierProvider(
                create: (_) => ModelPath(storePath: AppConstants.carousel)),
            ChangeNotifierProvider(create: (_) => Product())
          ],
          child: ChildFragment(
            productRoot: 'My Product',
          ));
    });
  }

在 Child Fragment 小部件中,我按如下方式访问 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 上的按钮之一时被调用。

有人可以在这里帮助我了解如何将 Providers 与 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);
        } ...)

标签: flutterflutter-provider

解决方案


推荐阅读