Flutter 加载数据时颤振更改主体小部件
我是个新手,我想用我的应用程序在从后端获取数据时显示ProgressBar指示器小部件,在获取数据时显示另一个信息小部件,我只是不知道怎么做 我尝试下面的代码,它只是工作良好!但我不知道这是不是一种更可行的方法Flutter 加载数据时颤振更改主体小部件,flutter,progress-bar,Flutter,Progress Bar,我是个新手,我想用我的应用程序在从后端获取数据时显示ProgressBar指示器小部件,在获取数据时显示另一个信息小部件,我只是不知道怎么做 我尝试下面的代码,它只是工作良好!但我不知道这是不是一种更可行的方法 import 'package:flutter/material.dart'; import 'dart:async'; import 'package:http/http.dart' as http; import 'dart:convert' as convert; class U
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'dart:convert' as convert;
class UserLocation extends StatefulWidget {
@override
_UserLocationState createState() => _UserLocationState();
}
class _UserLocationState extends State<UserLocation> {
bool isLoading;
@override
void initState() {
isLoading = true;
getData();
super.initState();
}
@override
Widget build(BuildContext context) {
return makeBody(
);
}
Widget indicator(){
return Scaffold(
backgroundColor: Colors.red,
);
}
Widget showData(){
return Scaffold(
backgroundColor: Colors.green,
);
}
Widget makeBody(){
if(isLoading){
return this.indicator();
}else{
return this.showData();
}
}
Future getData() async{
var response = await http.get(Uri.encodeFull('http://xxxx'));
if(response.statusCode == 200){
isLoading = false;
setState(() {
var jsonResponse = convert.jsonDecode(response.body);
var data = jsonResponse['data'] as List;
print(data);
});
}else{
isLoading = false;
print("Request failed with status: ${response.statusCode}.");
}
}
}
导入“包装:颤振/材料.省道”;
导入“dart:async”;
将“package:http/http.dart”导入为http;
导入“dart:convert”作为convert;
类UserLocation扩展了StatefulWidget{
@凌驾
_UserLocationState createState();
}
类_UserLocationState扩展状态{
布尔孤岛加载;
@凌驾
void initState(){
isLoading=true;
getData();
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回生成体(
);
}
小部件指示符(){
返回脚手架(
背景颜色:Colors.red,
);
}
Widget showData(){
返回脚手架(
背景颜色:Colors.green,
);
}
Widget makeBody(){
如果(孤岛加载){
返回此.indicator();
}否则{
返回此.showData();
}
}
Future getData()异步{
var response=wait http.get(Uri.encodeFull('http://xxxx'));
如果(response.statusCode==200){
isLoading=false;
设置状态(){
var jsonResponse=convert.jsonDecode(response.body);
var data=jsonResponse['data']作为列表;
打印(数据);
});
}否则{
isLoading=false;
打印(“请求失败,状态:${response.statusCode}”);
}
}
}
如果您有任何帮助和想法,我们将不胜感激我认为您从API获得的响应代码不是200,当响应不是200时,您没有使用setState
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'dart:convert' as convert;
class UserLocation extends StatefulWidget {
@override
_UserLocationState createState() => _UserLocationState();
}
class _UserLocationState extends State<UserLocation> {
bool isLoading;
@override
void initState() {
isLoading = true;
getData();
super.initState();
}
@override
Widget build(BuildContext context) {
return makeBody(
);
}
Widget indicator(){
return Scaffold(
backgroundColor: Colors.red,
);
}
Widget showData(){
return Scaffold(
backgroundColor: Colors.green,
);
}
Widget makeBody(){
if(isLoading){
return this.indicator();
}else{
return this.showData();
}
}
Future getData() async{
var response = await http.get(Uri.encodeFull('http://xxxx'));
if(response.statusCode == 200){
setState(() {
isLoading = false;
var jsonResponse = convert.jsonDecode(response.body);
var data = jsonResponse['data'] as List;
print(data);
});
}else{
setState(() {
isLoading = false;
});
print("Request failed with status: ${response.statusCode}.");
}
}
}
导入“包装:颤振/材料.省道”;
导入“dart:async”;
将“package:http/http.dart”导入为http;
导入“dart:convert”作为convert;
类UserLocation扩展了StatefulWidget{
@凌驾
_UserLocationState createState();
}
类_UserLocationState扩展状态{
布尔孤岛加载;
@凌驾
void initState(){
isLoading=true;
getData();
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回生成体(
);
}
小部件指示符(){
返回脚手架(
背景颜色:Colors.red,
);
}
Widget showData(){
返回脚手架(
背景颜色:Colors.green,
);
}
Widget makeBody(){
如果(孤岛加载){
返回此.indicator();
}否则{
返回此.showData();
}
}
Future getData()异步{
var response=wait http.get(Uri.encodeFull('http://xxxx'));
如果(response.statusCode==200){
设置状态(){
isLoading=false;
var jsonResponse=convert.jsonDecode(response.body);
var data=jsonResponse['data']作为列表;
打印(数据);
});
}否则{
设置状态(){
isLoading=false;
});
打印(“请求失败,状态:${response.statusCode}”);
}
}
}
谢谢你的回答,但我只想问一下这个概念是否正确