从api提取数据时出现问题 通过输入所需用户的用户名并在ListView.Builder中获取其存储库来解析github存储库的api。 从api提取数据时遇到问题 通过输入所需用户的用户名并在ListView.Builder中获取其存储库来解析github存储库的api。 从api提取数据时遇到问题 通过输入所需用户的用户名并在ListView.Builder中获取其存储库来解析github存储库的api。
import 'package:flutter/material.dart';
import 'package:grest/main.dart';
import 'package:http/http.dart' as http;
class Search extends StatefulWidget {
@override
_SearchState createState() => _SearchState();
}
class _SearchState extends State<Search> {
final String user = "";
String userEntered;
Future _gotoNextScreen(BuildContext context) async {
Map results = await Navigator.push(context, MaterialPageRoute<Map>(
builder: (BuildContext context ) {
return SearchScreen();
}
));
if (results != null && results.containsKey('enter')){
// print(results['enter'].toString());
userEntered = results['enter'];
}
}
List data;
void showStuff() async {
data = await getRepos(user);
print(data.toString());
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
appBar: AppBar(
title: Text('Search'),
centerTitle: true,
backgroundColor: Colors.black,
actions: <Widget>[
FlatButton(
onPressed:() => _gotoNextScreen(context),
child: Icon(
Icons.search,
color: Colors.white,
),
),
],
),
body: updateTempWidget(userEntered)
),
);
}
Widget updateTempWidget(String user){
return FutureBuilder(
future: getRepos(user == null ? '' : user),
builder: (BuildContext context, AsyncSnapshot<List> snapshot) {
if (snapshot.hasData){
return Column(
children: <Widget>[
Expanded(
child: ListView.builder(
itemCount: data == null ? 0 : data.length,
itemBuilder: (BuildContext context, int position){
return Column(
children: <Widget>[
Divider(height: 4,),
ListTile(
title: Text("${data[position]["name"]}"),
)
],
);
}
),
)
],
);
}else{
return Container();
}
},
);
}
}
Future<List> getRepos(String user) async {
String apiUrl = "https://api.github.com/users/$user/repos";
http.Response response = await http.get(apiUrl);
return json.decode(response.body);
}
class SearchScreen extends StatelessWidget {
final TextEditingController _usernameController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.black,
title: Text('Search'),
centerTitle: true,
),
body: Container(
child: Column(
children: <Widget>[
ListTile(
title: TextField(
decoration: InputDecoration(
hintText: 'enter username'
),
controller: _usernameController,
keyboardType: TextInputType.text,
),
),
ListTile(
title: RaisedButton(
onPressed: () => Navigator.pop(context, {
'enter': _usernameController.text
}),
child: Text('Get repos'),
),
),
],
),
),
);
}
}