我正在尝试使用 HTTP GET 和 Flutter SDK 在线获取数据。我正在尝试使用此代码https://github.com/RaglandCodes/Flutter-basic-API/blob/master/lib/main.dart但它显示有关数据类型的错误
不能将参数类型“String”分配给参数类型“int”
这是错误部分
new Card(
child: new Container(
child: new Text(data[index]['name']), //error red underlying with 'name'
padding: EdgeInsets.all(20),
),
Run Code Online (Sandbox Code Playgroud)
这是我的 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";
}
}
Run Code Online (Sandbox Code Playgroud)
小智 47
这对我有用
http.get(Uri.https('https://swapi.co', 'api/people'));
Run Code Online (Sandbox Code Playgroud)
或者
http.get(Uri.parse('https://swapi.co/api/people'));
Run Code Online (Sandbox Code Playgroud)
Mou*_*abr 15
您必须将data
变量设置为List
类型。
那应该有效:
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";
}
}
Run Code Online (Sandbox Code Playgroud)
ume*_*alu 12
原因是http.get不能再处理字符串了。您需要使用Uri 来解析 HTTP 地址。
我有同样的问题,我用这种方法修复了它:
var url = Uri.parse("https://your_api_link");
Run Code Online (Sandbox Code Playgroud)
然后像这样调用它(附加http):
http.Response response = await http.get(url);
Run Code Online (Sandbox Code Playgroud)
这应该有效。
归档时间: |
|
查看次数: |
110015 次 |
最近记录: |