Home > Enterprise >  Null check operator used on a null Value ( List )
Null check operator used on a null Value ( List )

Time:05-11

I'm trying to pass the data of a List for another screen but i don't know how to do that. I've tried using constructors and using correctly null-safety but the app returned this error: Null check operator used on a null Value. And i'm a long time already trying to solve this problem but i don't know how. What's the benefits of null safety? Here's the code: Code 1

import 'dart:convert';
import 'dart:io';

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:mood3/telas/RecebeDados.dart';
import 'package:mood3/telas/listas.dart';
import 'package:path_provider/path_provider.dart';
import 'package:toast/toast.dart';
import 'Diary.dart';

class Escrita extends StatefulWidget {


  List? lista = [];
  Escrita({this.lista});


  @override
  State<Escrita> createState() => _EscritaState();
}

class _EscritaState extends State<Escrita> {




  Future<File>_getFile()async{
    final diretorio = await getApplicationDocumentsDirectory();
    return File("${diretorio.path}/dados.json");
  }

  _salvar() async {
    var arquivo = await _getFile();

    Map<String,dynamic> tarefa = Map();
    tarefa["titulo"] = "Ir ao mercado";
    tarefa["realizada"] = false;
    widget.lista!.add(tarefa);


    String dados = json.encode(widget.lista);
    arquivo.writeAsString(dados);
  }

  _ler() async {

    try{
      final arquivo = await _getFile();
      return arquivo.readAsString();
    }catch(e){
      return null;
    }
  }



  @override
  void initState() {
    super.initState();
    _ler().then((dados){
      setState(() {
        widget.lista = json.decode(dados);
      });
    });
  }


  TextEditingController _controllerTarefa = TextEditingController();





  @override
  Widget build(BuildContext context) {
    ToastContext().init(context);

    return Scaffold(
      body: Center(
        child: SingleChildScrollView(
          child:Column(
          children: [
            Padding(
              padding: EdgeInsets.symmetric(horizontal: 8, vertical: 16),
                child: TextField(
                  keyboardType: TextInputType.multiline,
                  controller: _controllerTarefa,
                  decoration: InputDecoration(
                    hintText: "Diary Title",
                    border: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(8),
                      borderSide: BorderSide.none,
                    ),
                    filled: true,
                    fillColor: Colors.blueGrey,
                  ),
                )),
            Padding(
                padding: EdgeInsets.symmetric(horizontal: 8, vertical: 16),
              child: TextField(
                      keyboardType: TextInputType.multiline,
                maxLines: null,
                      decoration: InputDecoration(
                        hintText: "Diary Text",
                        border: OutlineInputBorder(
                          borderRadius: BorderRadius.circular(8),
                          borderSide: BorderSide.none,
                        ),
                        filled: true,
                        fillColor: Colors.blueGrey,
                      ),
                  ),),

          ],
        ),),
      ),
            }
          ),

        ]
    ),


    );
  }
}

Code 2:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:mood3/telas/Account.dart';
import 'package:mood3/telas/Diary.dart';
import 'package:mood3/telas/Friends.dart';
import 'package:mood3/telas/Graph.dart';
import 'package:mood3/telas/Home.dart';
import 'package:mood3/telas/Music.dart';
import 'package:mood3/telas/PlayerDoVideo.dart';
import 'package:mood3/telas/Videos.dart';
import 'package:mood3/telas/animacao.dart';
import 'package:mood3/telas/escrita.dart';
import 'package:persistent_bottom_nav_bar_v2/persistent-tab-view.dart';


class RecebeDados extends StatefulWidget {



  @override
  State<RecebeDados> createState() => _RecebeDadosState();
}

class _RecebeDadosState extends State<RecebeDados> {

  Escrita flista = Escrita();

  late List? list = flista.lista;




  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          Expanded(
            child: ListView.builder(
                itemCount: list!.length,
                itemBuilder: (context, index){

                  return ListTile(
                    title: Text( list![index]['titulo'] ),
                  );

                }
            ),
          )
        ],
      ),

      floatingActionButton: SpeedDial(
          animatedIcon: AnimatedIcons.menu_close,
          backgroundColor: Colors.black,
          icon: CupertinoIcons.pencil,
          overlayColor: Colors.black,
          children: [
Text ("teste")
          ]
      ),

    );
  }
}


CodePudding user response:

In this case you are creating "lista" as a List that could be null (List?), but also you initialize it with value: a empty list ( [] )

List? lista = [];

But when you call the constructor of Escrita, you are giving a value to the lista variable.

Widget myWidget = Escrita(); /// lista is null

lista is null, because you are not indicating a value in the constructor.

If you want a default value this is the correct way:

Escrita({this.lista = []});

You are receiving errors because you are using list!.length and list![index]['titulo'], and using the ! you are asecuring that the list is not null, but yes, its null! So thats the reason because you are receiving the error.

CodePudding user response:

You can solve your problem in this way:

class Escrita extends StatefulWidget {


  List lista;
  Escrita({this.lista=[]});


  @override
  State<Escrita> createState() => _EscritaState();
}

Or you can do this:

class Escrita extends StatefulWidget {


  List lista;
  Escrita({required this.lista});


  @override
  State<Escrita> createState() => _EscritaState();
}

Or

class Escrita extends StatefulWidget {
    
      List lista;
      Escrita(this.lista);
    
    
      @override
      State<Escrita> createState() => _EscritaState();
    }
  • Related