Search code examples
flutterdartsharedpreferences

The argument type 'String?' can't be assigned to the parameter type 'String' in flutter for shared prefrances


so I am using shared preferences in a flutter app and I get this error : The argument type 'String?' can't be assigned to the parameter type 'String' and here is the code:

if (result != null) {
      SharedPreferenceHelper().saveUserEmail(userDetails.email);
    }

the error is userDetils.email can someone pls help A picture of what it shows


Solution

  • After looking into the image posted the line 30 declaration states that:

    User? userDetails = result.user;// Which potentially means that variable userDetails could be null
    

    Where as the class User details are not shared but peaking into the issue I am pretty sure the class User has a email parameter whose declaration is as includes it's datatype as String? email something like this with prefix of final or late.

    In this case what happens is that you have nested level of nullity for accessing email variable out of userDetails object. Which means:

    Case 1=> userDetails is null and email is null.
    Case 2=> userDetails is not null and email is null.
    Case 3=> userDetails is not null and email is not null.
    
    Meaning both `userDetails` and `email` have a datatype of which defines them to be null at compile time.
    

    Since dart is statically typed language so you need to add in ! after each variable whose datatype is nullable at compile time to allow dart know that the variable has data in it and was assigned a value sometime later in run time.

    So to fix this what you need to do is that replace the line below with line 33:

    SharedPreferenceHelper().saveUserEmail(userdetails!.email ?? "Some default email");
    // if you never want to save null as email pref else use the one below
    SharedPreferenceHelper().saveUserEmail(userdetails!.email.toString());