flutternull-check

EXCEPTION CAUGHT BY WIDGETS LIBRARY The following _CastError was thrown building: Null check operator used on a null value


I'm new to Flutter and I am getting this error: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════ The following _CastError was thrown building: Null check operator used on a null value. I'm working with a Sqlite database and I'm trying to put the Title in a listview. At the end of the stack also I'm getting this response:

Another exception was thrown: Null check operator used on a null value The Stack:

══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following _CastError was thrown building:
Null check operator used on a null value

When the exception was thrown, this was the stack:
#0      _MedicineListState.build.<anonymous closure>.<anonymous closure> (package:medicine_box/screens/medicine_list.dart:28:46)
#1      SliverChildBuilderDelegate.build (package:flutter/src/widgets/sliver.dart:487:22)
#2      SliverMultiBoxAdaptorElement._build (package:flutter/src/widgets/sliver.dart:1422:28)
#3      SliverMultiBoxAdaptorElement.createChild.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1436:55)
#4      BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2682:19)
#5      SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1428:12)
#6      RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:353:23)     
#7      RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:2300:59)
#8      PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:1056:15)
#9      RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:2300:14)
#10     RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:342:5)
#11     RenderSliverMultiBoxAdaptor.addInitialChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:428:5)
#12     RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:79:12)
#13     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#14     RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:149:12)
#15     RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:386:11)
#16     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#17     RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:550:13)
#18     RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1634:12)
#19     RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1541:20)
#20     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#21     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#22     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#23     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#24     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#25     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#26     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#27     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#28     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#29     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#30     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#31     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#32     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#33     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#34     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#35     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#36     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#37     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#38     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#39     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#40     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#41     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#42     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#43     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#44     RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:552:11)
#45     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#46     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#47     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#48     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#49     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#50     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:56:11)
#51     RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:903:45)
#52     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:938:32)
#53     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#54     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#55     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
#56     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1080:7)
#57     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)
#58     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:410:14)
#59     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#60     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#61     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#62     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#63     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#64     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#65     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1467:11)
#66     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#67     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#68     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#69     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#70     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#71     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#72     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#73     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#74     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#75     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#76     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#77     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#78     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#79     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#80     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#81     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#82     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#83     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#84     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#85     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#86     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#87     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#88     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#89     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#90     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#91     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#92     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#93     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#94     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#95     RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3813:14)
#96     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#97     RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#98     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120:14)
#99     RenderObject.layout (package:flutter/src/rendering/object.dart:2189:7)
#100    RenderBox.layout (package:flutter/src/rendering/box.dart:2430:11)
#101    _RenderTheatre.performLayout (package:flutter/src/widgets/overlay.dart:856:15)
#102    RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2027:7)
#103    PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1020:18)
#104    RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:516:19)
#105    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:865:13)
#106    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:381:5)
#107    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1289:15)
#108    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1218:9)
#109    SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1076:5)
#110    _invoke (dart:ui/hooks.dart:145:13)
#111    PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:338:5)
#112    _drawFrame (dart:ui/hooks.dart:112:31)
════════════════════════════════════════════════════════════════════════════════════════════════════

Here is the code:

Expanded(
              child: FutureBuilder<List<MedicineModel>?>(
                  future: DBProvider.db.getAllMedicines(),
                  builder: (_, snapshot) {
                    return ListView.builder(
                        itemCount: snapshot.data?.length,
                        itemBuilder: (context, index) => ListTile(
                              title: Text(
                                snapshot.data![index].medicineName,
                              ),
                              onTap: () {
                                showDialog(
                                  context: context,
                                  builder: (BuildContext context) {
                                    return AlertDialog(
                                      title: Text(
                                          snapshot.data![index].medicineName),
                                      shape: RoundedRectangleBorder(
                                          borderRadius:
                                              BorderRadiusDirectional.circular(
                                                  10)),
                                      content: Column(
                                        mainAxisSize: MainAxisSize.min,
                                        children: [
                                          Row(
                                            children: [
                                              const Text('Component: '),
                                              const SizedBox(
                                                width: 5,
                                              ),
                                              Text(snapshot
                                                  .data![index].drugName),
                                            ],
                                          ),
                                          const SizedBox(
                                            height: 3,
                                          ),
                                          Row(
                                            children: [
                                              const Text('Expiration Date: '),
                                              const SizedBox(
                                                width: 5,
                                              ),
                                              Text(snapshot
                                                  .data![index].expirationDate),
                                            ],
                                          ),
                                          Row(
                                            children: [
                                              const Text('Indication: '),
                                              const SizedBox(
                                                width: 5,
                                              ),
                                              Text(snapshot
                                                  .data![index].indication),
                                            ],
                                          )
                                        ],
                                      ),
                                      actions: [
                                        TextButton(
                                            onPressed: () =>
                                                Navigator.pop(context),
                                            child: const Text(
                                              'Ok',
                                              textAlign: TextAlign.center,
                                            ))
                                      ],
                                    );
                                  },
                                );
                              },
                              trailing: OutlinedButton(
                                onPressed: () async {
                                  DBProvider.db.deleteMedicine(index);
                                },
                                child: const Icon(
                                  Icons.delete,
                                  size: 30,
                                  color: Colors.deepPurple,
                                ),
                              ),
                            ));
                  }))

The error is in this line:

title: Text(
                            snapshot.data![index].medicineName,
                          )

I have explored some question like teh response ofCopsOnRoad but I dont now how to solve this and how to apply in my code. Thank you


Solution

  • It will help to read and follow the examples in flutter documentation. Here's the documentation for FutureBuilder.

    The issue is that ! is a null-check so it'll throw the exception when "Null check operator used on a null value" as it says. An easy fix is making sure that the snapshot has data before using it, and you can do it like so:

    Expanded(
      child: FutureBuilder<List<MedicineModel>?>(
      future: DBProvider.db.getAllMedicines(),
      builder: (_, snapshot) {
        if (snapshot.hasData) {
          return ListView.builder(
            ... // your original code
          )
        } else {
          return Text("Loading"); // whatever you want here
        }
    })
    

    The documentation has a better example so take a look at that when you have time.