'Dart Unhandled Exception: FormatException: Invalid radix-10 number (at character 1)
I am trying to fetch some Data from the internet. So I made a API Request for a weather website. But I am getting the following exception- Unhandled Exception: FormatException: Invalid radix-10 number (at character 1). This is the error Code:
[VERBOSE-2:shell.cc(242)] Dart Unhandled Exception: FormatException: Invalid radix-10 number (at character 1)
//uri.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=4659036c3236...
^
, stack trace: #0 int._throwFormatException (dart:core-patch/integers_patch.dart:131:5)
#1 int._parseRadix (dart:core-patch/integers_patch.dart:157:16)
#2 int._parse (dart:core-patch/integers_patch.dart:100:12)
#3 int.parse (dart:core-patch/integers_patch.dart:63:12)
#4 _Uri._makeHttpUri (dart:core/uri.dart:1591:49)
#5 new _Uri.https (dart:core/uri.dart:1462:12)
#6 _LoadingScreenState.getData (package:clima/screens/loading_screen.dart:25:49)
#7 _LoadingScreenState.build (package:clima/screens/loading_screen.dart:37:5)
#8 StatefulElement.build (package:flutter/src/widgets/framework.dart:4612:27)
#9 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4495:15)
#10 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4<…>
This is the code that goes with that:
import 'package:flutter/material.dart';
import 'package:clima/services/location.dart';
import 'package:http/http.dart' as http;
class LoadingScreen extends StatefulWidget {
@override
_LoadingScreenState createState() => _LoadingScreenState();
}
class _LoadingScreenState extends State<LoadingScreen> {
@override
void initState() {
super.initState();
getLocation();
}
void getLocation() async {
Location location = Location();
await location.getCurrentLocation();
print(location.latitude);
print(location.longitude);
}
void getData() async {
http.Response response = await http.get(Uri.https(
'https://uri.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=4659036c323608514eb865c174726965',
'albums/1'));
if (response.statusCode == 200) {
String data = response.body;
print(data);
} else {}
}
@override
Widget build(BuildContext context) {
getData();
return Scaffold();
}
}
Solution 1:[1]
I faced this problem and I solved just removing the https://
from the URL address.
If you need keep the https://
in your string for some reason, replace Uri.https
to Uri.parse
You can see a complete example here: https://flutter.dev/docs/cookbook/networking/fetch-data
Solution 2:[2]
`In my case I'm trying to parse double [ amount = 12.34 ] using
int.parse(amount)
So, Changing to double works for me`
double.parse(amount)
Solution 3:[3]
That error is Dart attempting to convert (parse) a String into an Integer, but the String isn't a valid base 10 (?) number.
Example:
print(int.parse('//ten'));
will throw
print(int.parse('10'));
should work.
I guess that Uri.https
is trying an int.parse()
in case the address you've supplied is an IP/IPv6 address (?) and its choking on the incorrect supplied format, as mentioned by jamesdin in the comments.
Solution 4:[4]
Use this code:
...
final uri = Uri.parse('your url here');
http.Response response = await http.get(uri);
...
Solved the issue to me
Solution 5:[5]
I had a similar issue but this is because I added '/' at the end of the url like 192.168.178.28:8080/
and I just used 192.168.178.28:8080
.
I am using a code like this to get the appropriate URL for Development or Production.
static const String ENV = 'DEV'; // 'PROD';
static const String API_URL_PROD = "myapi.herokuapp.com";
static const String API_URL_DEV = "192.168.178.98:8080";
Uri getUrlForEnv(String endpoint) {
var url;
if (Constant.ENV == 'PROD') {
url = Uri.https(Constant.API_URL_PROD, endpoint);
} else {
url = Uri.http(Constant.API_URL_DEV, endpoint);
}
return url;
}
Solution 6:[6]
for Flutter, you need two parameters, in first you need to enter domain, and in second pass the subroute
void loginUser() async {
// Dialogs.showProgressDialog(context: context);
var client = http.Client();
try {
var response = await client.post(
Uri.https(ApiUrls.BASE_URL,"/user/loginUser"),
body: {'email': '[email protected]', 'password': 'usersecretpwd'});
print(response.body);
} finally {
client.close();
}
}
Solution 7:[7]
You can check that a number is less than 1 with this code
value.numericOnly().characters.first == "0"
Hope this will be helpful :).
Solution 8:[8]
int.parse(amount);
Change it to
int.parse(amount != null ? amount : '0');
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | Ketan Ramani |
Solution 3 | Baker |
Solution 4 | M. Massula |
Solution 5 | biniam |
Solution 6 | Developer |
Solution 7 | Abraams gtr |
Solution 8 | Wai Ha Lee |