我做了一个非常简单的提供者测试,但是我一直收到这个错误。我切换到颤振稳定通道,升级,并清理它。结果是一样的。当我编写函数来处理任何屏幕的方法时,它都会产生这个错误。
我使用dipsos方法的目的是:
处理ValueNotifiers:一旦所有ValueNotifiers不再使用,就可以将它们全部释放,这是一个很好的做法,可以避免应用程序内存丢失。
为了提高性能,我希望当前订阅在退出屏幕时过期。当屏幕初始化时,我会创建一个新的值化器,并且当我退出屏幕时,我想要释放。
main.dart文件
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => ScreenChangeNotifier(),),
Provider(create: (context) => Genel(),)
],
child: MaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue
),
title: 'Test',
home: HomeScreen(),
),
);
}
}ScreenChangeNotifier.dart文件
class ScreenChangeNotifier extends ChangeNotifier
{
void hello() => print("say hello");
}HomeScreen.dart文件
class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key);
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
@override
void dispose() {
context.read<ScreenChangeNotifier>().hello();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(),
);
}
}这一错误
======== Exception caught by widgets library =======================================================
The following _CastError was thrown while finalizing the widget tree:
Null check operator used on a null value
When the exception was thrown, this was the stack:
#0 Element.widget (package:flutter/src/widgets/framework.dart:3203:31)
#1 Provider._inheritedElementOf (package:provider/src/provider.dart:341:17)
#2 Provider.of (package:provider/src/provider.dart:293:30)
#3 ReadContext.read (package:provider/src/provider.dart:656:21)
#4 _HomeScreenState.dispose (package:bencebilirpro/screens/HomeScreen.dart:11:13)
#5 StatefulElement.unmount (package:flutter/src/widgets/framework.dart:4983:11)
#6 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1926:13)
#7 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#8 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6271:14)
#9 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#10 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#11 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#12 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#13 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#14 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6271:14)
#15 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#16 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#17 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6271:14)
#18 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#19 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#20 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#21 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#22 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#23 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6271:14)
#24 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#25 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#26 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6271:14)
#27 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#28 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#29 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#30 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#31 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#32 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#33 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#34 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#35 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#36 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#37 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#38 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6271:14)
#39 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#40 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#41 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6271:14)
#42 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#43 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#44 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#45 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#46 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#47 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6271:14)
#48 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#49 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#50 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#51 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#52 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#53 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#54 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#55 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#56 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#57 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#58 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#59 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#60 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#61 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#62 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#63 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#64 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#65 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#66 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#67 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#68 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6271:14)
#69 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#70 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#71 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#72 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#73 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#74 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#75 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#76 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#77 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#78 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#79 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#80 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#81 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#82 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#83 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#84 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#85 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#86 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6271:14)
#87 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#88 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#89 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#90 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#91 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#92 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#93 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#94 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1924:7)
#95 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4807:14)
#96 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
#97 ListIterable.forEach (dart:_internal/iterable.dart:39:13)
#98 _InactiveElements._unmountAll (package:flutter/src/widgets/framework.dart:1935:25)
#99 BuildOwner.lockState (package:flutter/src/widgets/framework.dart:2519:15)
#100 BuildOwner.finalizeTree (package:flutter/src/widgets/framework.dart:2932:7)
#101 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:884:19)
#102 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:363:5)
#103 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)
#104 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1081:9)
#105 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:995:5)
#109 _invoke (dart:ui/hooks.dart:151:10)
#110 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:308:5)
#111 _drawFrame (dart:ui/hooks.dart:115:31)
(elided 3 frames from dart:async)
====================================================================================================发布于 2022-04-07 04:15:09
首先,为什么要在dispose()方法中调用您的方法?当这个对象被永久从树中删除时,您不应该试图在此时找到这个小部件的祖先,因为您的小部件已经从小部件树中删除了。
如果您想要这样做,请尝试在State中创建变量,在initState()中用context.read<ScreenChangeNotifier>()初始化它,在dispose call variable.hello()中初始化它。
class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key);
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
ScreenChangeNotifier _notifier;
@override
void initState() {
_notifier = context.read<ScreenChangeNotifier>();
super.initState();
}
@override
void dispose() {
_notifier.hello();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(),
);
}
}发布于 2022-04-07 04:07:30
为什么要在ScreenChangeNotifier函数中调用dispose?您必须在initstate或build方法中调用它。
class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key);
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
@override
void initState() {
super.initState();
context.read<ScreenChangeNotifier>().hello();
}
@override
Widget build(BuildContext context) {
// or you can call it here..
// context.read<ScreenChangeNotifier>().hello();
return Scaffold(
body: Container(),
);
}
}https://stackoverflow.com/questions/71774249
复制相似问题