Mahar Dika
Mahar Dika

Reputation: 633

type 'int' is not a subtype of type 'double'

I have this issue on my flutter application. It seems failed to load an API request, but when i try on browser it return okay "http://vplay.id/api/series/popular".

Debug

exception = {_Exception} Exception: Failed to load
message = "Failed to load"
this = {SeriesProvider} 
 _url = "http://vplay.id/api/"
 _loading = false
 _currentPage = 1
 _pages = 1
 _series = {_GrowableList} size = 0
 _seriesStream = {_AsyncStreamController} 
endpoint = "series/popular"
e = {_TypeError} type 'int' is not a subtype of type 'double'
 _stackTrace = {_StackTrace} 
 _failedAssertion = "is assignable"
 _url = "package:streamapp/src//helpers/parse.dart"
 _line = 31
 _column = 7
 message = "type 'int' is not a subtype of type 'double'"

Series_provider.dart

import 'dart:async';
import 'dart:convert';

import 'package:http/http.dart' as http;
import '../helpers/api.dart';
import '../models/serie_model.dart';
export '../models/serie_model.dart';

class SeriesProvider {
  String _url = Api.url;
  bool _loading = false;
  int _currentPage = 1;
  int _pages = 1;
  List<Serie> _series = List();
  final _seriesStream = StreamController<List<Serie>>();

  Function(List<Serie>) get seriesSink => _seriesStream.sink.add;
  Stream<List<Serie>> get seriesStream => _seriesStream.stream;

  void dispose() {
    _seriesStream?.close();
  }

  Future<List<Serie>> _process(String endpoint) async {
    try {
      final resp = await http.get(_url + endpoint);

      if (resp.statusCode != 200) {
        throw Exception('Failed to load');
      }

      final data = json.decode(resp.body);

      final series = Series.fromJsonList(data);

      return series.items;
    } catch (e) {
      throw Exception('Failed to load');
    }
  }

Helpers/parse.dart

static double checkDouble(dynamic value) {
    if (value is String) {
      return double.parse(value);
    } else {
      return value;
    }
  }
}

This is my first time with flutter, and this is interesting since it only me face this issue (this is an app i get from codecanyon marketplace) with fresh installation.

Upvotes: 61

Views: 92582

Answers (10)

Waad Mawlood
Waad Mawlood

Reputation: 898

it worked !

double rating;
rating = double.tryParse(value.toString());

if not work try this -> use num

num rating;
rating = double.tryParse(value.toString());

Upvotes: 5

Manishyadav
Manishyadav

Reputation: 1746

You can initialize you variables with double.

class MyBrick extends StatelessWidget {
 double x;
 double y;
 MyBrick({required this.x, required this.y});

 @override
 Widget build(BuildContext context) {
   return Container(
     alignment: Alignment(x, y),
     child: ClipRRect(
       borderRadius: BorderRadius.circular(10),
       child: Container(
         color: Colors.white,
         height: 20,
         width: MediaQuery.of(context).size.width / 5,
       ),
     ),
   );
 }
}

This worked for me...

Upvotes: 0

Mohamed El-Shawadfi
Mohamed El-Shawadfi

Reputation: 3

Will this help you?

double.parse(rating.toString());

Upvotes: 0

Yasin Ege
Yasin Ege

Reputation: 723

 var coordinatesFromJson = json["coordinates"] as List<dynamic>;
List<double> coordinatesList = [];
(coordinatesFromJson as List<dynamic>).forEach((element) {
  if (element is int)
    coordinatesList.add((element).toDouble());
  else
    coordinatesList.add(element);
});

Upvotes: 0

Paulo Conde
Paulo Conde

Reputation: 269

You only need to add .toDouble() function to last returned value.

static double checkDouble(dynamic value) {
    if (value is String) {
      return double.parse(value);
    } else {
      return value.toDouble();
    }
  }
}

Upvotes: 26

d3roch4
d3roch4

Reputation: 396

double? checkDouble(dynamic value) {
  if(value is double) return value;
  if(value is int) return value.toDouble();
  if(value is String) return double.tryParse(value);
  return null;
}
int? checkInt(dynamic value) {
  if(value is int) return value;
  if(value is double) return value.toInt();
  if(value is String) return int.tryParse(value);
  return null;
}

Upvotes: 3

Szekelygobe
Szekelygobe

Reputation: 2705

As Gustavo Rodrigues mentioned below, do not use this as a standard solution, this is only a workaround.

I had a similar issue getting weather data.

I solved by declaring the variable as a dynamic instead of int type.

Upvotes: 13

larsaars
larsaars

Reputation: 2350

An idea would be to use num instead of int or double in this case.

Upvotes: 131

live-love
live-love

Reputation: 52554

In my case, this error was because I had to represent my number as a double value, not an int value.

Example:

Change 0 to 0.0.

double rating = rating??0;

to:

double rating = rating??0.0;

Upvotes: 0

Wenbo
Wenbo

Reputation: 1462

static double checkDouble(dynamic value) {
    if (value is String) {
      return double.parse(value);
    } else {
      return value;
    }
  }
}

The problem seems from the last return value. You may need return value+.0.

Upvotes: 14

Related Questions