简体   繁体   中英

How to make my flutter app read upadated json file instead of old json file?

I made a app where I have to first read local json file and updated some content of it inside app and save that file and without closing the app I want to display the changes by reading updated json file. I am able to read my json file, save changes in that file but when I try to see my changes without closing the app by reading that json file, it always show my previous data. But if I close my app and open it again It show read new updated file. How can I show changes by reading updated json file without closing the app??

This is my code: First I read json file inside initstate:

Future<void> readJson() async {
final String response =
    await rootBundle.loadString('jsonfile/primary_values.json');

final data = jsonDecode(response);

var values = PrimaryValueJson.fromJson(data);
setState(() {
  if (primaryKey == 'Doctor SSN :') {
    widget.primaryIndex = values.doc_ssn;
    widget.primaryValue = 'DC0${widget.primaryIndex}';
    print(widget.primaryValue);
    print('this is readjson');
  }
});

}

@override
  void initState() {
    super.initState();
    print("I am doctor init screen");
    readJson();
  }

And then I increment Doc.ssn by 1 and write it by clicking a button. Function associated with that button is:

_writeJson() async {
    print("this is 1st line writejson: ${widget.primaryIndex}");
    String response =
        await rootBundle.loadString('jsonfile/primary_values.json');
    File path = File('jsonfile/primary_values.json');

    var data = jsonDecode(response);
    var values = PrimaryValueJson.fromJson(data);
    final PrimaryValueJson doctor = PrimaryValueJson(
      doc_ssn: values.doc_ssn + 1,
      phar_id: values.phar_id,
      ssn: values.ssn,
    );
    final update = doctor.toJson();
    path.writeAsStringSync(json.encode(update));
    print('this is writejson:${doctor.doc_ssn}');

    nameController.text = '';
    specialityController.text = '';
    experienceController.text = '';
    widget.primaryIndex = doctor.doc_ssn;
    widget.primaryValue = 'DC0${doctor.doc_ssn}';
  }

  Future<void> insertRecord(context) async {
    count = count + 1;
   
    if (nameController.text == '' ||
        specialityController.text == '' ||
        experienceController.text == '') {
      print("Please fill all fields");
    } else {
      try {
        String uri = "http://localhost/hospital_MS_api/insert_doctor.php";

        var res = await http.post(Uri.parse(uri), body: {
          "Doc_SSN": widget.primaryValue,
          "name": nameController.text,
          "speciality": specialityController.text,
          "experience": experienceController.text,
        });
        setState(() {
          _writeJson();
        });

        var response = jsonDecode(res.body);
        if (response["success"] == "true") {
          print("Record Inserted");
        } else {
          print("Record not inserted");
        }
      } catch (e) {
        print(e);
      }
    }
  }

Assets are read-only. After writing an asset file to a file, read also from that file.

File path = File('jsonfile/primary_values.json');
...
path.writeAsStringSync(json.encode(update));
...
var data = jsonDecode(path.readAsBytesSync());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM