Dart 热重新加载后显示的值,但单击后为空

Dart 热重新加载后显示的值,但单击后为空,dart,flutter,hot-reload,Dart,Flutter,Hot Reload,我想从json中检索数据, 单击(形成另一个文件)后,所有值($tgl、$dokter、$paket等)都为null,但当我热重新加载(在下面的代码中)时,结果就在那里,并且是正确的 我的密码怎么了 class DetilTreatment extends StatefulWidget{ final String nomtri; final String jenis; DetilTreatment(this.nomtri,this.jenis); @override St

我想从json中检索数据, 单击(形成另一个文件)后,所有值($tgl、$dokter、$paket等)都为null,但当我热重新加载(在下面的代码中)时,结果就在那里,并且是正确的

我的密码怎么了

class DetilTreatment extends StatefulWidget{
  final String nomtri;
  final String jenis;
  DetilTreatment(this.nomtri,this.jenis);
  @override
    State<StatefulWidget> createState() {
      return DetilTreatmentState();
    }
}

class DetilTreatmentState extends State<DetilTreatment>{
  String urldest='json_detail_rawat_dart.php';
  String tgl,dokter,paket,keterangan;
  List tindakan,terapis;

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

  void loadData() async { 
    final response = await http.get(remoteURL + urldest + '?nomtri=${widget.nomtri}');
    if (response.statusCode == 200) {
      List<dynamic> isi = jsonDecode(response.body);
      tgl = isi[0]['tgl']; 
      dokter = isi[0]['dokter'];  
      paket = isi[0]['paket'];
      keterangan = isi[0]['keterangan'];
    } else {
      throw Exception('Gagal Ambil Data Perawatan');
    }
  }

  @override
    Widget build(BuildContext context) {
      return new Scaffold(
        backgroundColor: Colors.blue[50],
        appBar: new AppBar(
          title: const Text('Data Riwayat Perawatan'),
        ),
        body: ListView(
          padding: EdgeInsets.all(15.0),
          children: <Widget>[
            // all results are null, but when hot-reload the results displayed !
            Text('Tgl/Jam : $tgl', textAlign: TextAlign.left), 
            Text('Nama Dokter : $dokter', textAlign: TextAlign.left),
            Text('Paket : $paket', textAlign: TextAlign.left),
            Text('Treatment : ', textAlign: TextAlign.left),
            Text('Keterangan : $keterangan', textAlign: TextAlign.left),
          ],
        )
        );
    }
}
类删除处理扩展了StatefulWidget{
最终字符串nomtri;
最后一串杰尼斯;
去过滤处理(this.nomtri,this.jenis);
@凌驾
状态createState(){
返回deTiltTreatmentState();
}
}
类DeTiltTreatmentState扩展了状态{
字符串urldest='json_detail_rawat_dart.php';
字符串tgl、dokter、paket、keterangan;
列出tindakan、terapis;
@凌驾
void initState(){
super.initState();
loadData();
}
void loadData()异步{
最终响应=等待http.get(remoteURL+urldest+'?nomtri=${widget.nomtri}');
如果(response.statusCode==200){
列表isi=jsonDecode(response.body);
tgl=isi[0]['tgl'];
dokter=isi[0]['dokter'];
paket=isi[0]['paket'];
凯特兰根=isi[0][‘凯特兰根’];
}否则{
抛出异常(“Gagal Ambil Data Perawatan”);
}
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
背景颜色:颜色。蓝色[50],
appBar:新的appBar(
标题:const Text(“数据在Perawatan的Riwayat”),
),
正文:ListView(
填充:所有边缘设置(15.0),
儿童:[
//所有结果均为空,但在热重新加载时,将显示结果!
Text('Tgl/Jam:$Tgl',textAlign:textAlign.left),
Text('Nama Dokter:$Dokter',textAlign:textAlign.left),
Text('Paket:$Paket',textAlign:textAlign.left),
Text('Treatment:',textAlign:textAlign.left),
Text('Keterangan:$Keterangan',textAlign:textAlign.left),
],
)
);
}
}

您需要调用
setState()
以在状态更改时重新渲染颤振

  void loadData() async { 
    final response = await http.get(remoteURL + urldest + '?nomtri=${widget.nomtri}');
    if (response.statusCode == 200) {
      List<dynamic> isi = jsonDecode(response.body);

      setState(() {
        tgl = isi[0]['tgl']; 
        dokter = isi[0]['dokter'];  
        paket = isi[0]['paket'];
        keterangan = isi[0]['keterangan'];
      });
    } else {
      throw Exception('Gagal Ambil Data Perawatan');
    }
  }
void loadData()异步{
最终响应=等待http.get(remoteURL+urldest+'?nomtri=${widget.nomtri}');
如果(response.statusCode==200){
列表isi=jsonDecode(response.body);
设置状态(){
tgl=isi[0]['tgl'];
dokter=isi[0]['dokter'];
paket=isi[0]['paket'];
凯特兰根=isi[0][‘凯特兰根’];
});
}否则{
抛出异常(“Gagal Ambil Data Perawatan”);
}
}
在方法中调用SetState(), 也许在构建中会出现一个空错误,所以最好添加一个CircularProgressIndicator

    bool isLoading=false;
         @override
              void initState() {
                super.initState();
                loadData();
              }

              void loadData() async { 
                final response = await http.get(remoteURL + urldest + '?nomtri=${widget.nomtri}');
                if (response.statusCode == 200) {
                 setState(() {
            tgl = isi[0]['tgl']; 
            dokter = isi[0]['dokter'];  
            paket = isi[0]['paket'];
            keterangan = isi[0]['keterangan'];
            isLoading=true;
          });
                } else {
                  throw Exception('Gagal Ambil Data Perawatan');
                }
              }

Widget build(BuildContext context){
if(!isLoading)
{
return Center(child:CircularProgressIndicator());
}
else {retur Container();}

是的,这是工作,但我必须从源链接点击2x“我必须从源链接点击2x”对不起,但我不明白你的意思?什么是“源链接”?对不起,我的英语是指我从另一个文件单击后显示的小部件。这是代码:onTap:(){Navigator.of(context).push(newmaterialpageroute(builder:(BuildContext context){returnnewdetiltreation(治疗[index]['nomtri'],治疗[index]['jenis']);},fullscreenDialog:true));},所以,首先单击onTap->null,然后单击->更正值。谢谢你的帮助我不明白你为什么需要点击两次,除非你遇到了另一个答案中提到的错误satish soni。我只在构建时添加了CircularProgressIndicator(),如下面的@satish soni answer,这很有效谢谢你,效果很好!但很抱歉,我不能点击这个作为有用的答案,因为我的声誉很低:D