Возможно, вы не хотите хранить конфиденциальные данные в общих настройках. Вместо этого вы можете захотеть посмотреть на плагин, подобный этому: https://pub.dartlang.org/packages/flutter_secure_storage
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
// Create storage
final storage = new FlutterSecureStorage();
// Write value
await storage.write(key: 'jwt', value: token);
Beh ... Метод method.invoke ()
коллировал не тот, кто бросал напрямую. Целевой метод также использовал invoke
, и он выкинул, поэтому он всплыл.
Извлеченный урок: обрабатывать InvocationTargetException
отдельно от других исключений.
Сложные части вашего вопроса, мне кажется, таковы:
Просмотр всей иерархии в диапазоне дат
Отчетность в целом поддеревья в диапазоне дат
Другие элементы, если не прямые, то могут управляться с использованием методов, изложенных в книгах, и в соответствии с рекомендациями, приведенными в других ответах. Часть проблемы заключается в понимании того, что эти два пункта точки означают. В каком-то смысле они «одинаковы», «вся иерархия» - это просто особый случай «целых поддеревьев». Но более глубокий вопрос заключается в том, «как вы хотите продемонстрировать - визуализировать, представить - изменения в иерархии с течением времени? Вы хотите сравнить состояния в начале и в конце времени, или вы тоже хотите увидеть промежуточные изменения? Как вы хотите изобразить движения человека в иерархии?
Больше вопросов, чем ответов - но я надеюсь, что указатели помогут.
Здесь может работать пара плоских столов. Для каждой строки нам нужны столбцы ID, Name, ParentID и InactivationDatetime (по умолчанию null). Установите дату и время для старого Документа, принадлежащего Джо, указывая, что эта запись больше не действительна, и переместите ее в архивную таблицу (для чистоты), а затем создайте новую строку (близкую копию исходной строки) для нового Документа с идентификатором Мо в качестве ParentID. Недостаток этого подхода в том, что перемещаемый человек должен получить новый идентификатор,
Я могу придумать пару разумных решений, в зависимости от того, как используются ваши данные и как они изменяются.
1) Предполагая, что сегодняшняя иерархия является наиболее важной. Я бы сохранил сегодняшнюю иерархию с обычным столбцом ParentId в каждой записи. Для предыдущих версий иерархии у меня была бы таблица истории
ItemId, ParentId, ValidFromDate, ValidToDate
. Каждый раз, когда иерархия изменяется, вы добавляете новую строку в таблицу истории.
2) Если какая-либо / все иерархии имеют равную важность, Я бы сохранил базовую иерархию строк и затем реализовал таблицу транзакций иерархии.
TransactionId, ItemId, Action (Move/Delete/Add), DateTime, OldParentId, NewParentId
table item(id, ...)
table item_link(parent_item, child_item, from_date, until_date)
Ссылки будут хранить представление дерева в течение определенного времени
Эта структура представляет сеть вместо простая иерархия, но она поддерживает перемещение вещей в иерархии, но также оглядывается назад во времени. Некоторые вещи должны быть проверены в логике приложения: запретить одновременное связывание joe в разных местах иерархии.
Отчетность относительно проста с предложением connect by before (в oracle)
Другие детали могут быть связаны с элемент или даже ссылка на элемент, если необходимо указать дополнительные данные об отношении.