Dart 从api填充列表时显示加载指示器

Dart 从api填充列表时显示加载指示器,dart,flutter,Dart,Flutter,我是新来的。。。我正在我的应用程序中调用一个api,我想在api函数完成并从api中检索所有内容时显示一个加载指示器。。如何做到这一点 class _CompaniesPageState extends State<CompaniesPage> { getcompanies() async { var url = 'my link'; http .post(url, body: json.encode({ 'token': globals.token }))

我是新来的。。。我正在我的应用程序中调用一个api,我想在api函数完成并从api中检索所有内容时显示一个加载指示器。。如何做到这一点

class _CompaniesPageState extends State<CompaniesPage> {
  getcompanies() async {
  var url = 'my link';
  http
    .post(url, body: json.encode({ 'token': globals.token }))
    .then((response) {
      // print("Response body: ${response.body}");
      Map data = json.decode(response.body);
      final companies =
        (data['Companies'] as List).map((i) => new Company.fromJson(i));
      setState(() {
        for (final company in companies) {
          if (!company.category.contains("الراعي") &&
            !company.category.contains("الشريك") &&
            !company.category.contains("الداعم")) {
            if (company.logo != "") {
              names.add(company.name);
              logos.add(company.logo);
            }
          }
        }
      });
    });
}

@override
Widget build(BuildContext context) {
  getcompanies();
  if (globals.isguest) {
    return new Directionality(
      .....
    );
  }

}

List<Widget> createCompaniesChildren() {
  List<Widget> children = List<Widget>();
  for (int i = 0; i < names.length; i++) {
    children.add(
      new Padding(
        padding: new EdgeInsets.only(right: 15.0, left: 15.0),
        child: new Image.network(
          logos[i],
          width: 346.0,
          height: 180.0,
        ),
      ),
    );
    children.add(
      new Padding(
        padding: new EdgeInsets.only(right: 15.0, left: 15.0),
        child: new Center(
          child: new Text(
            names[i],
            style: new TextStyle(color: Colors.black, fontSize: 17.0),
            textAlign: TextAlign.center,
          ),
        ),
      ),
    );
    children.add(new Divider());
  }
  return children;
}
但是得到了这个错误:I/flatter(31276):引发了另一个异常:一个构建函数返回null。

您可以使用这个类来实现这个目的

此外,您还可以使用一个

大概是这样的:

new FutureBuilder(
  future: getcompanies(), // your async method that returns a future
  builder: (BuildContext context, AsyncSnapshot snapshot) {
    if (snapshot.hasData) {
      // if data is loaded
      return new ListView.builder(
        padding: new EdgeInsets.all(8.0),
        itemExtent: 20.0,
        itemCount: snapshot.data.length,
        itemBuilder: (BuildContext context, int i) {
          return new Center(
            child: new Text(
              snapshot.data[i].name,
              style: new TextStyle(color: Colors.black, fontSize: 17.0),
              textAlign: TextAlign.center,
            ),
          );
        },
      ).build(context);
    } else {
      // if data not loaded yet
      return new CircularProgressIndicator();
    }
  },
)

我应该把这个放在哪里?你应该返回这个小部件,而不是
createCompaniesChildren()
。我不知道具体在哪里,因为这不是你的代码。很抱歉,我是新来的flutter,现在有点困惑x.x出现了这个错误:I/flutter(31276):引发了另一个异常:生成函数返回null。你能帮我解决这个问题吗?
new FutureBuilder(
  future: getcompanies(), // your async method that returns a future
  builder: (BuildContext context, AsyncSnapshot snapshot) {
    if (snapshot.hasData) {
      // if data is loaded
      return new ListView.builder(
        padding: new EdgeInsets.all(8.0),
        itemExtent: 20.0,
        itemCount: snapshot.data.length,
        itemBuilder: (BuildContext context, int i) {
          return new Center(
            child: new Text(
              snapshot.data[i].name,
              style: new TextStyle(color: Colors.black, fontSize: 17.0),
              textAlign: TextAlign.center,
            ),
          );
        },
      ).build(context);
    } else {
      // if data not loaded yet
      return new CircularProgressIndicator();
    }
  },
)