Python 使用rest API时,数据在颤振中消失

Python 使用rest API时,数据在颤振中消失,python,api,rest,flutter,flutter-test,Python,Api,Rest,Flutter,Flutter Test,当我使用future builder从后端获取底部导航栏第一个选项卡上的数据时,当我切换到第二个选项卡底部导航栏时,它将消失 为什么会这样 我该如何解决这个问题 上面是我第一次加载应用程序,API被点击时的页面。 上面是我更改底部选项卡一次并再次返回第三个选项卡时的页面 这种情况每次都会发生 import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'dart:convert

当我使用future builder从后端获取底部导航栏第一个选项卡上的数据时,当我切换到第二个选项卡底部导航栏时,它将消失

为什么会这样

我该如何解决这个问题

上面是我第一次加载应用程序,API被点击时的页面。

上面是我更改底部选项卡一次并再次返回第三个选项卡时的页面

这种情况每次都会发生

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'dart:async';




class newExample extends StatefulWidget {
  @override
  newExampleState createState() => newExampleState();
}

class newExampleState extends State<newExample> {

  var userid;


  Future<http.Request> getData() async
  {
    var client = new http.Client();
    final response = await client.get('http://182.0.0.102:5000/user_detail');
    final responseJson = json.decode(response.body);
    dynamic user_id = responseJson['user_id'];


    userid = user_id;
    

    print(responseJson);
    client.close();
    // return responseJson;
  }




  @override
  void initState() {
    super.initState();
    getData();
  }



  @override
  Widget build(BuildContext context) {

    return Scaffold(
      body: Container(
          child: ListView.builder(
            itemCount: userid.length,
            itemBuilder: (BuildContext context, int index){
              return _buildCards(context, index);
            },
          ),
        ),
    );
  }







  Widget _buildCards(BuildContext context, int index){

    return Card(
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child:
          // Text('hi'),
          Text('${userid[index]}'),
        )
    );
  }
}


import'包装:flift/cupertino.dart';
进口“包装:颤振/材料.省道”;
导入“dart:convert”;
将“package:http/http.dart”导入为http;
导入“dart:async”;
类newExample扩展StatefulWidget{
@凌驾
newExampleState createState()=>newExampleState();
}
类newExampleState扩展了状态{
var用户id;
Future getData()异步
{
var client=newhttp.client();
最终响应=等待客户端。获取('http://182.0.0.102:5000/user_detail');
final responseJson=json.decode(response.body);
动态用户标识=responseJson['user\u id'];
userid=user\u id;
印刷品(responseJson);
client.close();
//返回响应;
}
@凌驾
void initState(){
super.initState();
getData();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
子项:ListView.builder(
itemCount:userid.length,
itemBuilder:(构建上下文,int索引){
返回构建卡(上下文、索引);
},
),
),
);
}
小部件构建卡(构建上下文上下文,int索引){
回程卡(
孩子:填充(
填充:常数边集全部(8.0),
儿童:
//文本(“hi”),
文本(“${userid[index]}”),
)
);
}
}

我认为这是因为您在
initState
中调用
getData()
,并且它只工作一次。尝试如下方式调用您的函数:

 @override
  void initState() {
    SchedulerBinding.instance.addPostFrameCallback((_) {
      getData().then((response) {
        if (mounted)
          setState(() {
            data= response?.something;
          });
      });
    });
    super.initState();
  }
阅读有关SchedulerBinding的信息:

这里有什么东西?任何变量或其他?@palak我不知道你的反应是什么样子。例如,我想从我的响应中访问字段,因此:response?.fields
引发了另一个异常:NoSuchMethodError:对null调用了getter“visible”。════════ 呈现库捕获到异常═════════════════════════════════════════════════════ 对null调用了方法“debugassertesvalid”。Receiver:null尝试调用:debugassertesvalid()
这是我现在发现的错误,我在代码中看不到。它在哪里?是的,我也没有看到它。。!!在上面的代码中,我应该在获取数据/响应的地方使用responseJson吗?这是否回答了您的问题?