颤振:如何在加载页面之前从Api获取数据

颤振:如何在加载页面之前从Api获取数据,api,flutter,dart,Api,Flutter,Dart,我试图从Api获取数据以显示在屏幕上,所以我创建了一个函数并从widget build函数调用它,或者我也尝试从构造函数调用它,但它最终会调用该函数,所以出现list empty错误 我想在屏幕加载之前调用api,并将数据存储在列表中。您可以通过以下代码执行此操作: 首先,您必须在一个按钮内使用onPressed或onTap方法点击Api,如 onPressed: () { getNutritionDetails(context,"2"); getDataFromMy

我试图从Api获取数据以显示在屏幕上,所以我创建了一个函数并从widget build函数调用它,或者我也尝试从构造函数调用它,但它最终会调用该函数,所以出现list empty错误


我想在屏幕加载之前调用api,并将数据存储在列表中。

您可以通过以下代码执行此操作:

首先,您必须在一个按钮内使用
onPressed
onTap
方法点击Api,如

onPressed: () {
  getNutritionDetails(context,"2");
  getDataFromMyApi(context);
},
然后创建一个函数,使代码更干净,并具有任何名称的阅读器,这里我将该函数命名为
getDataFromMyApi

void getDataFromMyApi(BuildContext context) {
    //Getting data from API and store it in String or Model or List whatever you required.
    String myData;

    //and then pass the data to your second activity
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) =>
            MyStatefulWidget(myData), // Your Api response myData is Passing to Stateful Widget
      ),
    );
  }
然后我制作了一个有状态的小部件,您希望在它打开之前传递数据并加载数据,在那里您可以在页面加载到
myData
var之前获取数据

class MyStatefulWidget extends StatefulWidget {
  String myData;

  MyStatefulWidget(this.myData, {Key key}) : super(key: key);

  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  @override
  Widget build(BuildContext context) {
    return Container(
      height: double.infinity,
        width: double.infinity,
      child: Text(widget.myData),
    );
  }
}

您可以通过以下代码执行此操作:

首先,您必须在一个按钮内使用
onPressed
onTap
方法点击Api,如

onPressed: () {
  getNutritionDetails(context,"2");
  getDataFromMyApi(context);
},
然后创建一个函数,使代码更干净,并具有任何名称的阅读器,这里我将该函数命名为
getDataFromMyApi

void getDataFromMyApi(BuildContext context) {
    //Getting data from API and store it in String or Model or List whatever you required.
    String myData;

    //and then pass the data to your second activity
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) =>
            MyStatefulWidget(myData), // Your Api response myData is Passing to Stateful Widget
      ),
    );
  }
然后我制作了一个有状态的小部件,您希望在它打开之前传递数据并加载数据,在那里您可以在页面加载到
myData
var之前获取数据

class MyStatefulWidget extends StatefulWidget {
  String myData;

  MyStatefulWidget(this.myData, {Key key}) : super(key: key);

  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  @override
  Widget build(BuildContext context) {
    return Container(
      height: double.infinity,
        width: double.infinity,
      child: Text(widget.myData),
    );
  }
}

请提供您的代码到目前为止您尝试了什么。请提供您的代码到目前为止您尝试了什么。谢谢,很好的解释..工作很有魅力..真的很高兴能提供帮助@MohammadArman@Maz341如果要显示带有api数据获取的加载程序,可以使用相同的方法。当点击api时,将isLoading的值设置为true(isLoading=true),然后在收到响应后设置isLoading=false;谢谢,很好的解释。工作很有魅力。真的很乐意帮忙@MohammadArman@Maz341如果要显示带有api数据获取的加载程序,可以使用相同的方法。当点击api时,将isLoading的值设置为true(isLoading=true),然后在收到响应后设置isLoading=false;