Flutter在ListView.Builder

时间:2020-05-16 18:11:01

标签: android json api android-studio flutter

从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'),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

0 个答案:

没有答案