"Looking up a deactivated widget's ancestor is unsafe." 有状态小部件

"Looking up a deactivated widget's ancestor is unsafe." with StatefullWidget

我找不到我的问题的任何答案。在下面的代码中,如果我使用带有“图像”的“GestureDetector”而不是带有 PhotoView 的 Dismissible,一切都是完美的。当我 运行 它时,它抛出“祖先不安全”错误。

我的代码 ID 用于显示漫画的页面。代码行“comic.paginaActual(comic.readProgress.page)” returns 带有漫画页面的 NetworkImage。当用户“关闭”页面(使用可关闭小部件)时,应用会加载下一页(至少是预期结果)。

正如我所说,我已经尝试过使用手势检测器(使用水平手势进行滑动)并且只使用“图像”而不是 Photoview,它运行完美,但是当我使用 Dismissible 时,应用程序崩溃了。

这是代码:

// ignore: use_key_in_widget_constructors
class PaginaFull extends StatefulWidget {
  @override
  State<PaginaFull> createState() => _PaginaFullState();
}

class _PaginaFullState extends State<PaginaFull> {
  late PhotoViewScaleStateController scaleController;
  DismissDirection dismissDirection = DismissDirection.horizontal;

  @override
  void didChangeDependencies() {
    _enterFullscreen();
    scaleController = PhotoViewScaleStateController();
    super.didChangeDependencies();
  }

  @override
  void initState() {
    super.initState();
  }

  @override
  void dispose() {
    super.dispose();
    _exitFullscreen();
    scaleController.dispose();
  }

  _enterFullscreen() async {
    await FullScreen.enterFullScreen(FullScreenMode.EMERSIVE);
  }

  _exitFullscreen() async {
    await FullScreen.exitFullScreen();
  }

  void paginaSiguiente({required Comic comic}) {
    if (comic.readProgress.page < (comic.media.pagesCount)) {
      setState(() {
        comic.readProgress.page += 1;
      });
    }
  }

  void paginaAnterior({required Comic comic}) {
    if (comic.readProgress.page > 1) {
      setState(() {
        comic.readProgress.page -= 1;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    final Comic comic = ModalRoute.of(context)!.settings.arguments as Comic;

    return Scaffold(
      appBar: null,
      body: Builder(builder: (context) {
        return AnimatedSwitcher(
          duration: const Duration(milliseconds: 300),
          child: Dismissible(
            behavior: HitTestBehavior.translucent,
            key: Key(comic.readProgress.page.toString()),
            direction: dismissDirection,
            onDismissed: (DismissDirection direction) {
              if (direction == DismissDirection.startToEnd) {
                paginaAnterior(comic: comic);
              } else {
                paginaSiguiente(comic: comic);
              }
            },
            resizeDuration: null,
            child: PhotoView(
              scaleStateController: scaleController,
              filterQuality: FilterQuality.high,
              initialScale: PhotoViewComputedScale.contained,
              minScale: PhotoViewComputedScale.contained,
              gaplessPlayback: true,
              enableRotation: false,
              imageProvider: comic.paginaActual(comic.readProgress.page),
            ),
          ),
        );
      }),
    );
  }
}

也许会改变其他小部件的体验....但我是 flutter 的新手,我现在不知道我还能使用什么。

提前感谢您的帮助!...来自智利!

已解决!!!

问题来自 photo_view 包。

在 pubspec.yaml 中从依赖关系中删除 photo_view

依赖项: photo_view:^0.13.0 添加:

dependency_overrides: photo_view: git: url: https://github.com/bluefireteam/photo_view 参考:大师

这样就避免了问题!!!