refresh method
Refreshes Spreadsheet.
Should be called if you believe, that spreadsheet has been changed by another user (such as added/deleted/renamed worksheets, or data that specified in SpreadsheetData changed).
Returns Future true
in case of success.
Implementation
Future<bool> refresh() async {
final response = await _client.get(
'$_sheetsEndpoint$id'.toUri(),
);
if (response.statusCode == 200) {
final json = jsonDecode(response.body);
_data = SpreadsheetData._fromJson(json);
final newSheets = (json['sheets'] as List)
.where(gridSheetsFilter)
.map((json) => Worksheet._fromJson(
json,
_client,
id,
renderOption,
inputOption,
))
.toList();
// removing deleted sheets
final newIds = newSheets.map((s) => s.id).toSet();
final oldIds = sheets.map((s) => s.id).toSet();
final deleted = oldIds.difference(newIds);
for (final id in deleted) {
sheets.removeWhere((s) => s.id == id);
}
// adding and updating sheets
for (final sheet in newSheets) {
final changed = sheets.firstWhereOrNull(
(s) => s.id == sheet.id,
);
if (changed == null) {
// adding new sheet
sheets.add(sheet);
} else {
// updating old sheet
changed._title = sheet._title;
changed._index = sheet._index;
changed._rowCount = sheet._rowCount;
changed._columnCount = sheet._columnCount;
}
}
return true;
}
return false;
}