[英]FutureBuilder not working as intended in flutter
我正在從我的flutter應用程序中從這里獲取json: https ://api.myjson.com/bins/1g3xpe。
這是代碼(我刪除了不相關的部分)。問題是,FutureBuilder的生成器部分永遠不會被調用。 這行debugPrint(snapshot.hasData.toString());
永遠不會被打電話。
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:nirmithi/objects/project.dart';
import 'dart:convert';
class Projects extends StatefulWidget {
@override
ProjectsState createState() => new ProjectsState();
}
class ProjectsState extends State<Projects> {
@override
Widget build(BuildContext context) {
return Scaffold(
primary: true,
appBar: EmptyAppBar(),
body: Column(
children: <Widget>[
headerWidget(),
Container(
child: futureBuilder(),
)
],
),
);
}
@override
void setState(fn) {
super.setState(fn);
}
}
Future<List<Project>> getData() async {
String getProjects = "https://api.myjson.com/bins/1g3xpe";
final response = await http.get(getProjects);
if (response.statusCode == 200) {
List responseJson = json.decode(response.body);
return responseJson.map((m) => Project.fromJson(m)).toList();
} else
throw Exception(response.toString());
}
Widget futureBuilder() {
FutureBuilder<List<Project>>(
future: getData(),
builder: (context, snapshot) {
debugPrint(snapshot.hasData.toString());
},
);
return Center(
child: CircularProgressIndicator(),
);
}
Widget listWidget(List<Project> data) {
return ListView.builder(
itemCount: data.length,
itemBuilder: (BuildContext context, int index) {
listItem(data.elementAt(index));
},
);
}
Widget listItem(Project project) {
return Card(
elevation: 6.0,
child: Column(
children: <Widget>[Text(project.projectId), Text(project.projectName)],
),
);
}
class EmptyAppBar extends StatelessWidget implements PreferredSizeWidget {
@override
Widget build(BuildContext context) {
return Container();
}
@override
Size get preferredSize => Size(0.0, 0.0);
}
更新:這是構建器部分中的代碼,我已刪除其進行調試。
switch (snapshot.connectionState) {
case ConnectionState.none:
case ConnectionState.waiting:
return new Text('loading...');
default:
if (snapshot.hasError)
return new Text('Error: ${snapshot.error}');
else
return listWidget(snapshot.data);
}
您需要返回FutureBuilder
,使其成為小部件樹的一部分:
Widget futureBuilder() {
return FutureBuilder<List<Project>>(
future: getData(),
builder: (context, snapshot) {
// ...
},
);
}
簡單地創建它的實例並不能解決未來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.