Home > front end >  Null check operator used on a null value but I did not use "!"
Null check operator used on a null value but I did not use "!"

Time:05-22

I am a beginner flutter developer. While writing the code, I encountered the following problem. You can see the code attached below, I've never used the null check operator, but the IDE is pointing out that that's the problem. I have no idea if this is a structural problem or a grammatical problem. Can you help me which part is wrong? Thank you so much.......

'''dart import 'dart:ui';

import 'package:flutter/material.dart';
import 'package:faker/faker.dart';
import 'package:jiffy/jiffy.dart';
import 'package:soyou/screen/profile_page.dart';

import '../helper.dart';
import '../models/message_data.dart';
import '../widgets/avatar.dart';
import '../widgets/icon_button.dart';
import 'package:soyou/theme.dart';
import '../models/story_data.dart';
import 'chat_screen.dart';
import 'package:soyou/app.dart';

class MessagePage extends StatelessWidget{
  const MessagePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final brightness = Theme.of(context).brightness;
    return Scaffold(
      appBar: AppBar(
        iconTheme: Theme.of(context).iconTheme,
        backgroundColor: Colors.transparent,
        elevation: 0,
        title: Text('Messages', style: TextStyle(
          fontWeight: FontWeight.bold,
          fontSize: 16,
          color: (brightness == Brightness.light) ? Appcolors.textDark : Appcolors.textLight),),
        leading: Center(child: IconBackground(
          icon: Icons.search,
          onTap: (){

          },),),
        actions: [
          Padding(padding: EdgeInsets.only(right: 24),
                  child: Avatar.small(
                    url: context.currentUserImage,
                    onTap: (){
                      Navigator.of(context).push(ProfilePage.route);
                    },),)
        ],
      ),
      body: CustomScrollView(
        slivers: [
          SliverToBoxAdapter(child: _Stories(),),
          SliverList(delegate: SliverChildBuilderDelegate((BuildContext context, int index){
            final Faker faker = Faker();
            final date = Helpers.randomDate();
            return _MessageTile(messageData: MessageData(
                sendName: faker.person.name(),
                message: faker.lorem.sentence(),
                messageDate: date,
                dateMessage: Jiffy(date).fromNow(),
                profilePicture: Helpers.randomPictureUrl()
            ));
          }),),
        ],
      ),
    );
  }
}

class _MessageTile extends StatelessWidget{
  const _MessageTile({Key? key, required this.messageData}) : super(key: key);

  final MessageData messageData;

  @override
  Widget build(BuildContext context){
    return InkWell(
      onTap: (){
        Navigator.of(context).push(ChatScreen.route(messageData));
      },
      child: Row(children: [
        Padding(padding: EdgeInsets.all(10), child: Avatar.medium(url: messageData.profilePicture),),
        Expanded(child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
          Text(messageData.sendName,
            overflow: TextOverflow.ellipsis,
            style: TextStyle(
                letterSpacing: 0.2,
                wordSpacing: 1.5,
                fontWeight: FontWeight.w900
            ),),
          SizedBox(height: 20, child: Text(messageData.message,
            overflow: TextOverflow.ellipsis,
            style: TextStyle(
                fontSize: 12,
                color: Appcolors.textFaded
            ),),),
        ],),),
        Padding(padding: EdgeInsets.only(right: 20),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.end,
            children: [
              SizedBox(height: 4,),
              Text(messageData.dateMessage.toUpperCase(),
                style: TextStyle(
                    fontSize: 11,
                    letterSpacing: -0.2,
                    fontWeight: FontWeight.w600,
                    color: Appcolors.textFaded
                ),),
              SizedBox(height: 8,),
              Container(
                width: 18,
                height: 18,
                decoration: BoxDecoration(
                    color: Appcolors.secondary,
                    shape: BoxShape.circle
                ),
                child: Center(
                  child: Text('1',
                    style: TextStyle(color: Appcolors.textLight, fontSize: 10),),
                ),
              )
            ],
          ),)
      ],),
    );
  }
}

class _Stories extends StatelessWidget{
  const _Stories({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context){
    return Card(
      margin: EdgeInsets.only(top: 15),
      elevation: 0,
      child: SizedBox(
        height: 134,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
          Padding(
            padding: EdgeInsets.only(left: 16, top: 8, bottom: 16),
            child: Text('스토리', style: TextStyle(fontSize: 15, fontWeight: FontWeight.w900, color: Appcolors.textFaded),),
          ),
          Expanded(
            child: ListView.builder(scrollDirection: Axis.horizontal, itemBuilder: (BuildContext context, int index){
              final faker = Faker();
              return Padding(
                padding: EdgeInsets.all(8),
                child: SizedBox(
                  width: 60,
                  child: _StoryCard(storyData:
                  StoryData(
                      name: faker.person.name(),
                      url: Helpers.randomPictureUrl())),
                ),
              );
            }),),
        ],),),
    );
  }
}

class _StoryCard extends StatelessWidget{
  const _StoryCard({Key? key, required this.storyData}) : super(key: key);

  final StoryData storyData;

  @override
  Widget build(BuildContext context){
    return Column(
      mainAxisSize: MainAxisSize.min,
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Avatar.medium(url: storyData.url),
        Expanded(
          child: Padding(
            padding: EdgeInsets.only(top: 16),
            child: Text(
              storyData.name,
              overflow: TextOverflow.ellipsis,
              style: TextStyle(fontSize: 11, letterSpacing: 0.3, fontWeight: FontWeight.bold),
            ),
          ),
        ),
      ],
    );
  }
}

'''

The following _CastError was thrown building MessagePage(dirty, dependencies: [_InheritedTheme, _LocalizationsScope-[GlobalKey#116dc]]):
Null check operator used on a null value

The relevant error-causing widget was: 
  MessagePage MessagePage:file:///C:/Users/kmseo/AndroidStudioProjects/SoYou/lib/screen/home_screen.dart:20:5
When the exception was thrown, this was the stack: 
#0      StreamChatContext.currentUserImage (package:soyou/app.dart:10:46)
#1      MessagePage.build (package:soyou/screen/message_page.dart:40:34)
#2      StatelessElement.build (package:flutter/src/widgets/framework.dart:4827:28)
#3      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4754:15)
#4      Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#5      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735:5)
#6      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729:5)
#7      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790:14)
#8      Element.updateChild (package:flutter/src/widgets/framework.dart:3524:20)
#9      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#10     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
#11     Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#12     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2659:19)
#13     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:882:21)
#14     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:363:5)
#15     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)
#16     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1081:9)
#17     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:995:5)
#21     _invoke (dart:ui/hooks.dart:151:10)
#22     PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:308:5)
#23     _drawFrame (dart:ui/hooks.dart:115:31)

CodePudding user response:

I believe that this variable does not exist (or is not set correctly) and thus is NULL:

context.currentUserImage.

This triggers an internal NULL-check when trying to set it as the URL in line 40, because the URL is not allowed to be NULL:

url: context.currentUserImage.

  • Related