查找已停用小部件的祖先是不安全的,Flutter 错误

11 浏览
0 Comments

查找已停用小部件的祖先是不安全的,Flutter 错误

我有一个覆盖小部件,我将在另一个屏幕上显示。它通过调用加载器类中的一个函数来激活,该函数设置覆盖小部件的可见性。但是当我点击该覆盖小部件时,我收到以下消息:

"在最终化小部件树时抛出了以下断言:

查找停用小部件的祖先是不安全的。

此时,小部件的元素树状态不再稳定。

要在dispose()方法中安全地引用小部件的祖先,请通过在小部件的didChangeDependencies()方法中调用dependOnInheritedWidgetOfExactType()来保存对祖先的引用"

我知道上下文有问题,但我无法找出原因。有人可以帮帮我吗?

import 'package:animated_widgets/animated_widgets.dart';

import 'package:flutter/material.dart';

import 'package:photo_view/photo_view.dart';

import 'loader.dart';

class OverlayImage extends StatelessWidget {

const OverlayImage({Key? key}) : super(key: key);

@override

Widget build(BuildContext context) {

return ValueListenableBuilder(

valueListenable: Loader.appLoader.loaderShowingNotifier,

builder: (context, value, child) {

if (value) {

return OpacityAnimatedWidget(

curve: Curves.linear,

duration: const Duration(milliseconds: 250),

enabled: value,

child: GestureDetector(

onTap: () => Loader.appLoader.hideLoader(),

child: yourOverLayWidget()),

);

} else {

return Container();

}

},

);

}

Widget yourOverLayWidget() {

return Stack(

children: [

Positioned.fill(

child: BackdropFilter(

filter: ImageFilter.blur(sigmaX: 8, sigmaY: 8),

child: Container(

color: Colors.black.withOpacity(0.5),

),

),

),

Center(

child: ValueListenableBuilder(

builder: (context, value, child) {

return PhotoView(

backgroundDecoration:

BoxDecoration(color: Colors.black.withOpacity(0.4)),

imageProvider: NetworkImage(value),

minScale: PhotoViewComputedScale.contained * 0.85,

maxScale: PhotoViewComputedScale.covered * 2,

);

},

valueListenable: Loader.appLoader.loaderImageURLNotifier,

),

),

],

);

}

}

0