Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 加载数据时颤振更改主体小部件_Flutter_Progress Bar - Fatal编程技术网

Flutter 加载数据时颤振更改主体小部件

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

我是个新手,我想用我的应用程序在从后端获取数据时显示ProgressBar指示器小部件,在获取数据时显示另一个信息小部件,我只是不知道怎么做

我尝试下面的代码,它只是工作良好!但我不知道这是不是一种更可行的方法

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}”);
}
}
} 

谢谢你的回答,但我只想问一下这个概念是否正确