How to store a List in Hive (Flutter)?
3,123
You can't use insert()
method on fixed length List, by fixed length I mean when you declare it this way List<int> stepCountList = List(7);
Edited the code, now it should work
void _onData(int newValue) async {
fetchSteps();
steps = stepCountList[time.weekday] ?? 0;
stepDivider += newValue;
//stepCountList.insert(time.weekday - 1, steps);this is not correct
stepCountList[time.weekday -1] = steps; // this should be the approach
moneyLottoBox.put('stepCountList', stepCountList);
}
void fetchSteps() {
stepCountList = moneyLottoBox.get('stepCountList');
if (stepCountList == null) {
/* moneyLottoBox.put('stepCountList', <int>[7]); this statement is the
reason for your error because your are storing a growable list instead of fixed list in the hive */
moneyLottoBox.put('stepCountList', List<int>(7));// try this instead
// or u can use this moneyLottoBox.put('stepCountList', stepCountList);
stepCountList = moneyLottoBox.get('stepCountList');
}
}
Comments
-
Arnav over 1 year
I am trying to store and fetch a list using
Hive
in Flutter, however I get a range error.int steps = 0; List<int> stepCountList = List(7); var time = DateTime.now(); // This is my method for a listener that updates when it detects a change, void _onData(int newValue) async { fetchSteps(); steps = stepCountList[time.weekday] ?? 0; stepDivider += newValue; stepCountList.insert(time.weekday - 1, steps); moneyLottoBox.put('stepCountList', stepCountList); } void fetchSteps() { stepCountList = moneyLottoBox.get('stepCountList'); if (stepCountList == null) { moneyLottoBox.put('stepCountList', <int>[7]); stepCountList = moneyLottoBox.get('stepCountList'); } } // I create my MoneyLotto box here, var moneyLottoBox = Hive.box('moneyLottoBox'); Future<void> main async { moneyLottoBox = await Hive.openBox('box'); }
Today being Saturday for me, the value of
time.weekday
for me is 6, however it shows me the error when I try toprint(stepCountList[6])
RangeError (index): Invalid value: Only valid value is 0: 6
-
dev-aentgs almost 4 yearsHow are you printing the
List
? Just asking, shouldn'tList
length
be 7 considering 0 to 6 inclusive ? -
Arnav almost 4 yearsIt prints this error when I print stepCountList[6]
-
dev-aentgs almost 4 yearsOk,
print
its length first.print(stepCountList.length)
. -
Arnav almost 4 yearsIt prints the length as 1
-
dev-aentgs almost 4 years
stepCountList = moneyLottoBox.get('stepCountList', defaultValue: <int>[6]);
This is overwriting the initialList
-
Arnav almost 4 yearsShould I remove the defaultValue?
-
dev-aentgs almost 4 yearsTry removing. What is
moneyLottoBox
? -
Arnav almost 4 yearsSo when I try to replace now.weekday with 0, it works flawlessly but not with at the index I want to store it at :(
-
dev-aentgs almost 4 yearsWhen you initially create
moneyLottoBox
and putstepCountList
, what is the length of thatList
? -
Arnav almost 4 yearsI only call stepCountList in my onData method, and the value is the same as my current list
-
dev-aentgs almost 4 yearsTry adding the
stepCountList
withlength 7
inmoneyLottoBox
when you first createmoneyLottoBox
. -
Arnav almost 4 yearsI updated my question, didn't work
-
dev-aentgs almost 4 yearsWhere do you create
moneyLottoBox
? At the time of creation itself add astepCountList
oflength
7. -
Arnav almost 4 yearsI updated my question, could you show a programmatic example?
-
dev-aentgs almost 4 yearsAdded below. Try and see if it works or gives any errors.
-