首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对空值使用的颤振提供程序Null检查运算符

对空值使用的颤振提供程序Null检查运算符
EN

Stack Overflow用户
提问于 2022-04-06 22:22:49
回答 2查看 596关注 0票数 1

我做了一个非常简单的提供者测试,但是我一直收到这个错误。我切换到颤振稳定通道,升级,并清理它。结果是一样的。当我编写函数来处理任何屏幕的方法时,它都会产生这个错误。

我使用dipsos方法的目的是:

处理ValueNotifiers:一旦所有ValueNotifiers不再使用,就可以将它们全部释放,这是一个很好的做法,可以避免应用程序内存丢失。

为了提高性能,我希望当前订阅在退出屏幕时过期。当屏幕初始化时,我会创建一个新的值化器,并且当我退出屏幕时,我想要释放。

main.dart文件

代码语言:javascript
复制
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文件

代码语言:javascript
复制
class ScreenChangeNotifier extends ChangeNotifier
{
    void hello() => print("say hello");
}

HomeScreen.dart文件

代码语言:javascript
复制
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(),
    );
  }
}

这一错误

代码语言:javascript
复制
======== 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)
====================================================================================================
EN

回答 2

Stack Overflow用户

发布于 2022-04-07 04:15:09

首先,为什么要在dispose()方法中调用您的方法?当这个对象被永久从树中删除时,您不应该试图在此时找到这个小部件的祖先,因为您的小部件已经从小部件树中删除了。

如果您想要这样做,请尝试在State中创建变量,在initState()中用context.read<ScreenChangeNotifier>()初始化它,在dispose call variable.hello()中初始化它。

代码语言:javascript
复制
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(),
    );
  }
}
票数 1
EN

Stack Overflow用户

发布于 2022-04-07 04:07:30

为什么要在ScreenChangeNotifier函数中调用dispose?您必须在initstatebuild方法中调用它。

代码语言:javascript
复制
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(),
    );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71774249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档