Reputation: 868
I'm trying to fetch data Online Using HTTP GET with Flutter SDK. I'm trying with this code https://github.com/RaglandCodes/Flutter-basic-API/blob/master/lib/main.dart but it is showing an error about data type that's
The argument type 'String' can't be assigned to the parameter type 'int'
Here's Error part
new Card(
child: new Container(
child: new Text(data[index]['name']), //error red underlying with 'name'
padding: EdgeInsets.all(20),
),
Here's my main.dart
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
import 'dart:async';
void main() {
runApp(new MaterialApp(home: new HomePage(),));
}
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
String url="https://swapi.co/api/people/";
List<String> data;
/*onCreate*/
@override
void initState() {
// TODO: implement initState
super.initState();
getJSONData(); //method
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(
title: Text("my JSON app")
),
body: new ListView.builder(
// itemCount: 1,
//itemCount: data==null ? 0 :data.length ,
itemCount: data == null ? 0 : data.length,
itemBuilder: (BuildContext context, int index){
return new Container(
child: new Center(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
new Card(
child: new Container(
child: new Text(data[index]['name']),
padding: EdgeInsets.all(20),
),
)
],
),
),
);
},
),
);
}
/*method*/ //RT is Future<String>
Future<String> getJSONData() async{
var response =await http.get(
Uri.encodeFull(url),
headers: {"Accept": "application/json"}
);
print(response.body);
debugPrint(response.body);
setState(() {
var convertDataToJson= json.decode(response.body);
data=convertDataToJson['results'];
});
return "Success";
}
}
Upvotes: 50
Views: 312902
Reputation: 91
Future<String> getSWData() async
{
// String res = await http.get(Uri.encodeFull(url), headers: {"Accept": "application/json"});
http.Response res = await http.get(url);
// var res = await http.get(Uri.https('http://3.255.7.222:8084/sipService/supplerMaster/v1/getSupplierMasterList', 'api/people'));
var resBody = json.decode(res.body);
setState(() {
data = resBody;
});
print(resBody);
return "Sucess";
}
Upvotes: 0
Reputation: 155
if you are using pdf package
your want to delete import 'dart:html';
and use import 'dart:io';
It's worked for me,
Have a good day :-)
Upvotes: 0
Reputation: 43
if you will simply add .toSting() to your lists like below it will remove the error.
new Card(
child: new Container(
child: new Text(data[index]['name'].toString()), //This line
padding: EdgeInsets.all(20),
),
Upvotes: 3
Reputation: 361
If you add .toString()
the error will disappear:
Text(data[index]['name'].toString())
good
Upvotes: 36
Reputation: 135
This one will work
String url = '$api?lat=$latitude&lon=$longitude&APPID=$appId';
http.Response response = await http.get(Uri.parse(url));
Upvotes: 3
Reputation: 41
That's worked for me
http.Response respobse= await
http.get(Uri.parse("https://jsonplaceholder.typicode.com/photos"));
Uri.parse(json Url);
use this.
Upvotes: 4
Reputation: 56
If you add ".toString()" the error will disappear:
new Text(data[index]['name'].toString()),
So:
new Card(
child: new Container(
child: new Text(data[index]['name'].toString()), //you'll no longer get an error
padding: EdgeInsets.all(20),
),
Upvotes: 1
Reputation: 1261
That's worked for me
void getData() async {
Response response = await
http.get(Uri.parse("https://jsonplaceholder.typicode.com/todos/1"));
print(response.body);
}
Upvotes: 2
Reputation: 307
The reason is that http.get can't work with strings anymore. You need to use Uri to parse the HTTP address.
I had the same issue which I fixed it with this approach:
var url = Uri.parse("https://your_api_link");
then call it like this (attaching the http):
http.Response response = await http.get(url);
This should work.
Upvotes: 15
Reputation: 861
That's worked for me
http.get(Uri.https('https://swapi.co', 'api/people'));
or
http.get(Uri.parse('https://swapi.co/api/people'));
Upvotes: 82
Reputation: 31
u can use this way
Future<http.Response> fetchAlbum() {return http.get(Uri.https('jsonplaceholder.typicode.com', 'albums/1'));}
Upvotes: 0
Reputation: 557
You have to set data
variable to List
type.
That's should work:
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
import 'dart:async';
void main() {
runApp(new MaterialApp(
home: new HomePage(),
));
}
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
String url = "https://swapi.co/api/people/";
List data;
/*onCreate*/
@override
void initState() {
// TODO: implement initState
super.initState();
getJSONData(); //method
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(title: Text("my JSON app")),
body: new ListView.builder(
// itemCount: 1,
//itemCount: data==null ? 0 :data.length ,
itemCount: data == null ? 0 : data.length,
itemBuilder: (BuildContext context, int index) {
return new Container(
child: new Center(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
new Card(
child: new Container(
child: new Text(data[index]['name'] ?? ''),
padding: EdgeInsets.all(20),
),
)
],
),
),
);
},
),
);
}
/*method*/ //RT is Future<String>
Future<String> getJSONData() async {
var response = await http
.get(Uri.encodeFull(url), headers: {"Accept": "application/json"});
print(response.body);
debugPrint(response.body);
setState(() {
var convertDataToJson = json.decode(response.body);
data = convertDataToJson['results'];
});
return "Success";
}
}
Upvotes: 21