The operator '+' isn't defined for the type 'Uri'

Issue

I have a project whereby I am using the http package to make various http requests. I recently updated the package and I cannot append url links to the end of the base url that I have. Here is the sample code

  var _url = Uri.parse('url here');

  var token;

  _getToken() async {
    SharedPreferences localStorage = await SharedPreferences.getInstance();
    token = jsonDecode(localStorage.getString('token'))['token'];
  }

  authData(data, apiUrl) async {
    try {
      var fullUrl = _url +  apiUrl;
      return await http.post(fullUrl,
          body: jsonEncode(data), headers: _setHeaders());
    } catch (e) {
      print(e);
    }
  }

This is the error it displays

The operator '+' isn't defined for the type 'Uri'.
Try defining the operator '+'.dartundefined_operator

The error occurs at var fullUrl = _url + apiUrl; specifically the + operator. Before updating it worked well however I cannot find the solution to it

Solution

Use it this way, by combining your strings first, then parsing your Uri. Uri class\object is not a string that you can concatenate strings by using +. Do the following:

String _urlBase = 'http://192.168.1.236/connect/api/v1';

keep the getToken() function as it as, and then use this:

authData(data, apiUrl) async {
try {
  String _finalUrl = _urlBase + apiUrl;
  Uri _uri = Uri.parse(_finalUrl);
  return await http.post(_uri,
      body: jsonEncode(data), headers: _setHeaders());
} catch (e) {
  print(e);
}
}

That should solve your problem.

Answered By – Huthaifa Muayyad

Answer Checked By – Pedro (FlutterFixes Volunteer)

Leave a Reply

Your email address will not be published. Required fields are marked *