I am so confused about the data persistence in my app. I am using google drive api to fetch a spreadsheet file(.xlsx) and then read and show the excel cell values in my app using an itemBuilder. The main problem is that when I edit some cells in my google spreadsheet on the browser and fetch the file(which is now updated) from the app, it does not show the new values. I noticed that my app takes some time to fetch file for the first time but after that it fetches immediately. I am going to show about how I am fetching file and updating it.
Initialization of variables:
//I am using excel dart package
late var excel;
late drive.DriveApi driveApi;
late Sheet sheet;
String fileId = "19jF3lOVW563LU6mEjqAjXVLNQ7poXY1Z"; //xlsx file id
Fetching of file from drive:
drive.Media? response = (await driveApi.files.get(fileId,downloadOptions: drive.DownloadOptions.fullMedia)) as drive.Media?;
List<int> dataStore = [];
response!.stream.listen((data) {
dataStore.insertAll(dataStore.length, data);
}, onDone: (){
excel = Excel.decodeBytes(dataStore); //excel variable declaration
sheet = excel['Sheet1'];
}, onError: (error) {
Fluttertoast.showToast(msg: error.toString());
});
Showing values of excel using itemBuilder
Widgets----
............
............
............
............
itemCount: sheet.maxRows - 1,
itemBuilder: (context, index) {
var cell = sheet.cell(CellIndex.indexByColumnRow( //taking values from excel sheets
rowIndex: index + 1, columnIndex: itr));
String val = cell.value.toString().toLowerCase();
if (cell.value == null ||
(val != 'present' && val != 'absent')) {
cell.value = 'absent';
cell.cellStyle = absent;
}
return ListTile(
subtitle: Text(cell.value.toString()),
title: Row(
children: <Widget>[
const Icon(Icons.person),
Expanded(
child: Text(sheet.rows[index + 1][0]!.value
.toString()),
............
............
............
............
Widgets----
Updating the excel file to google drive:
//First I am creating a unique pathName, then creating a file and saving the new excel values
//to the newly created file
final String path = (await getApplicationSupportDirectory()).path;
final String fileName = path + cryptoRandom() + '/$fileId.xlsx';
File newFile = File(fileName);
var driveFile = new drive.File();
driveFile.name = basename(newFile.path);
//Saving excel to newFile
File(join(newFile.path))
..createSync(recursive: true)
..writeAsBytesSync(excel.encode()!);
//Updating the newFile
await driveApi.files.update(driveFile, fileId,
uploadMedia: drive.Media(newFile.openRead(), newFile.lengthSync()));
//Deleting the created file
newFile.deleteSync(recursive: true);
Why the old values persist in my app, even when I am creating new file everytime and deleting them also. Why this is happening, I sthis because of some cache data or what ? Thanks