Как я могу вывести свойства объекта с помощью этого расширения перечисления во Flutter/Dart?
Я хочу напечатать определенные индивидуализированные свойства объекта с помощью этого расширения - Источник: ЗДЕСЬ
extension ExtendedIterable<E> on Iterable<E> {
/// Like Iterable<T>.map but callback have index as second argument
Iterable<T> mapIndex<T>(T f(E e, int i)) {
var i = 0;
return this.map((e) => f(e, i++));
}
void forEachIndex(void f(E e, int i)) {
var i = 0;
this.forEach((e) => f(e, i++));
}
}
Я сохраняю пользовательские данные из текстовых полей в поле Hive.
Когда я сделаю следующее ...
final box = Hive.box(personTable).values.toList();
final hiveBox = Hive.box(personTable);
final indexingBox = box.mapIndex((e, i) => 'item$e index$i');
final Person person = hiveBox.getAt(0);
print(person);
print(indexingBox);
Я получаю следующее напечатанное:
flutter: {John, Biggs, 34, Active}
flutter: (item{John, Biggs, 34, Active} index0, item{Kostas, Panger, 76, Active} index1, item{Ben, Kenobi, 78, Deactivated} index2, ..., item{Luke, Skywalker, 45, Active} index5, item{Darth, Vader, 54, Active} index6)
Я хочу иметь возможность выборочно перечислять каждое свойство объекта по своему усмотрению.
Вот что я хочу напечатать:
- флаттер: Джон. // индекс 0 firstName
- flutter: Kostas // индекс 1 firstName
- flutter: Vader // индекс 6 фамилия
Сохранение класса в ящик Hive:
import 'package:hive/hive.dart';
part 'person.g.dart';
@HiveType(typeId: 0)
class Person {
@HiveField(0)
final String firstName;
@HiveField(1)
final String lastName;
@HiveField(2)
final String age;
@HiveField(3)
final String status;
Income({
this.firstName,
this.lastName,
this.age,
this.status,
});
@override
String toString() {
return '{${this.firstName}, ${this.lastName}, ${this.age}, ${this.status}}';
}
}
Если я не могу решить эту проблему раз и навсегда, моя голова может взорваться, это часть более широкой картины того, как сделать DataTable очень простым и динамически загружающимся. Помощь приветствуется!
2 ответа
Из своего списка вы можете просто получить firstName и передать его в функцию:
Если вы используете модель:
class Person {
final String firstName;
final String lastName;
final String age;
final String status;
Person(
this.firstName,
this.lastName,
this.age,
this.status,
);
@override
String toString() {
return '{${this.firstName}, ${this.lastName}, ${this.age}, ${this.status}}';
}
factory Person.fromJson(List<String> list) {
return Person(list[0], list[1], list[2], list[3]);
}
}
void main() {
List<String> listPerson = <String>[];
final box = Hive.box(personTable).values.toList();
box.forEach((element) { final test = element.toString(); listPerson.add(test); print(test); });
List<String> listPersonWithoutBracket = <String>[];
for (var i = 0; i < listPerson.length; i++) {
String strWithoutBracket =
listPerson[i].replaceAll("{", "").replaceAll("}", "").trim();
listPersonWithoutBracket.add(strWithoutBracket);
}
List<List<String>> listPersonResult = <List<String>>[];
for (var i = 0; i < listPersonWithoutBracket.length; i++) {
var strSplit = listPersonWithoutBracket[i].split(", ");
listPersonResult.add(strSplit);
}
List<Person> listPersonFinal = listPersonResult.map((item) => Person.fromJson(item)).toList();
final allFirstName = listPersonFinal.map((item) {
return item.firstName;
});
final indexingBox = allFirstName.mapIndex((e, i) => '$e');
print(indexingBox);
}
Outputs
John, Kostas
РЕШЕНО, НАКОНЕЦ !!!
box.forEachIndex((e, i) {
final hiveBox = Hive.box(personTable);
final person = hiveBox.getAt(i) as Person;
print('${person.firstName}');
});
Консоль
flutter: John
flutter: Obi-wan
flutter: Luke