Search code examples
arraysjsonflutteroffline

How to update data in local json file in flutter


I'm the junior flutter developer, and I would like to seek your support. Currently, I would need to update data in a local JSON file in Flutter as below.

{"title":"ករណី ពិនិត្យផ្ទៃពោះ",
"lists":[
  {
     "id":"127",
     "faci_code":"20018",
     "y_txt":"2022",
     "m_txt":"1",
     "ind_id":"1",
     "qty":"100",
     "rec_by":"od123456",
     "rec_date":"2022-06-27 13:50:31",
     "lock_txt":"0",
     "sec_id":"1",
     "ind_num":"1",
     "ind_eng":"# of ANC 1",
     "ind_kh":"ចំនួនស្រ្ដីបានពិនិត្យផ្ទៃពោះលើកទី១ទាំងអស់",
     "HFAC_NAME":"Boeng Pram",
     "HFAC_NAMEKh":"បឺងប្រាំ",
     "OD_CODE":"201",
     "OD_NAME":"Thma Koul",
     "OD_NAME_KH":"ថ្មគោល",
     "PRO_CODE":"2",
     "PROVINCE":"Battambang",
     "PROVINCE_KH":"បាត់ដំបង"
}]}

I have searched and tried multiple solutions, but I couldn't resolve this issue yet.  I hope someone can provide a solution in advance.

Regard, thanks.


Solution

  • You can't right files in project folders.

    Try local storage.

    I used path_provider package in this example for get application directory path to write json file on local storage.

    1. Create data class

    Note. this data class should match your stored json structure

    class DataClass {
      String name;
      int age;
    
      DataClass(this.name, this.age);
    
      factory DataClass.fromJson(Map<String, dynamic> json) {
        return DataClass(json['name'], json['age']);
      }
    
      Map<String, dynamic> toJson() {
        return {
          'name': name,
          'age': age,
        };
      }
    }
    

    2.create and update json file

    
    DataClass? updateJson;
    
    
      void createJson() async {
        String data = await rootBundle.loadString('assets/data.json');
        Directory appDocDir = await getApplicationDocumentsDirectory();
    
        File jsonFile = File("${appDocDir.path}/data.json");
    
        jsonFile.writeAsStringSync(data);
        updateJson = DataClass.fromJson(jsonDecode(data));
        setState(() {});
      }
    
      void updateJsonFile() async {
        Directory appDocDir = await getApplicationDocumentsDirectory();
        File jsonFile = File("${appDocDir.path}/data.json");
    
        //update
        final jsonAsString = jsonFile.readAsStringSync();
        updateJson = DataClass.fromJson(jsonDecode(jsonAsString));
        updateJson?.name = "updated name";
        updateJson?.age = _counter;
        jsonFile.writeAsStringSync(jsonEncode(updateJson?.toJson()));
        setState(() {});
      }