Flutter 如何在flatter中http请求时显示指示器

Flutter 如何在flatter中http请求时显示指示器,flutter,Flutter,这是请求函数,但在创建列表和显示项目之前没有显示任何内容。我想在本例中显示指示器,在加载项目时,在显示之前,显示指示器 Future<List<Film>> fetchFilms() async { var url = 'http://infinite-dawn-32185.herokuapp.com/api/all'; var response = await http

这是请求函数,但在创建列表和显示项目之前没有显示任何内容。我想在本例中显示指示器,在加载项目时,在显示之前,显示指示器

        Future<List<Film>> fetchFilms() async 
        {
                 var url = 'http://infinite-dawn-32185.herokuapp.com/api/all';
                 var response = await http.get(url);
    
                 var drugs = List<Film>();
                 if (response.statusCode == 200) 
                 {
                      var drugsJson = json.decode(response.body)['data'];
                      for (var drugJson in drugsJson) 
                      {
                           drugs.add(Drug.fromJson(drugJson));
                      }
                 }
                 return drugs;
         }
Future fetchFilms()异步
{
var url='1〕http://infinite-dawn-32185.herokuapp.com/api/all';
var response=wait http.get(url);
var=List();
如果(response.statusCode==200)
{
var drugsJson=json.decode(response.body)['data'];
for(drugsJson中的var drugJson)
{
add(Drug.fromJson(drugJson));
}
}
归还毒品;
}
使用此软件包:

此软件包提供各种不同的加载图标

在pubspec.yaml中将包安装到项目中并在文件顶部使用import“package:flatter\u spinkit/flatter\u spinkit.dart”后,将以下内容放在希望加载屏幕显示的文件的构建方法中,如下所示:

 @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Center(
            child: SpinKitDoubleBounce(
      color: Colors.white,
      size: 100.0,
    )));
  }

“SpinKitDoubleBounce”上面的代码段中使用的名称决定了要使用23个加载图标中的哪一个。因此,如果您想使用DualRing图标,那么请使用“SpinKitDualRing”。

制作一个变量并将其称为例如
isLoading
,将其设置为默认值
false

然后在isLoading为true时有条件地显示指示器。将isLoading更改为true,然后在使用await http.get(…命令行之前启动请求,并在完成后将其更改回false

bool isLoading = false;
...
 Future<List<Film>> fetchFilms() async 
        {
                 var url = 'http://example.com/api/test';
                 isLoading = true;
                 var response = await http.get(url);
                 isLoading = false;
    
                 var drugs = List<Film>();
                 if (response.statusCode == 200) 
                 {
                      var drugsJson = json.decode(response.body)['data'];
                      for (var drugJson in drugsJson) 
                      {
                           drugs.add(Drug.fromJson(drugJson));
                      }
                 }
                 return drugs;
         }

我正在使用一个三元表达式
yourCondition?“这发生在true上”:“这发生在false上”
有条件地显示小部件。如果
isLoading
为true,它将显示ProgressIndicator,当它为false时,它将呈现一个没有大小的SizedBox(因此它基本上不可见)

创建一个类似于
isLoading
的变量,并将其设置为false作为默认值。当
isLoading
为true时,有条件地显示指示器。在启动请求之前,将
isLoading
更改为true(在带有
wait http.get的行之前)(…
并在完成后将其更改回false。如何使用指示器小部件@xDragoYou轻松地执行此操作:
…子项:isLoading?CircularProgressIndicator():SizedBox(),
。当您需要在另一个小部件中进行
isLoading
时,您应该使用提供程序跨多个小部件访问信息。很快,我在Flatter中是新手,我在build()中将指示器条件放在了指示器的显示位置。真正基本的方法是
build(){return isLoading?CircularProgressIndicator():SizedBox();}
我正在使用三元表达式
条件?“这发生在true上”:“这发生在false上”
在此处有条件地显示小部件。
...
@override
  Widget build(BuildContext context) {
    return isLoading ? CircularProgressIndicator() : SizedBox();
}
...