В вашем коде есть две проблемы:
с использованием асинхронного метода в теле initState()
, см. здесь , подробнее
Использование данных экземпляра в инициализаторе см. В здесь для подробностей.
. Ниже приведено очень простое переписывание вашего кода с минимальными исправлениями. [ 1115]
Карта данных загружается из поддельного бэкэнда, обновляется внутри PageOne
и выводится на консоль в PageTwo
обратного вызова onTap.
Обратите внимание, что я изменил переменную экземпляра Data
на data
, чтобы соответствовать рекомендациям Effective Dart .
Обратите внимание, что суть неправильно обращается к синхронизации серверной службы с общими предпочтениями: это то, что, вероятно, следует учитывать в конечном продукте.
Я только что прокомментировал, что необходимо для того, чтобы ваш код работал: если сложность вашей системы и отношения с внешним API начинают расти, возможно, стоит рассмотреть архитектуру Bloc.
import 'package:flutter/material.dart';
void main() => runApp(new MainApp());
// Mock up of an async backend service
Future
Я не уверен, что понимаю то, под чем Вы подразумеваете, "отображают подкласс, непосредственный", но если Вы хотите отобразить наследование, где подклассы имеют свойства, которые не nullable, можно сделать как это в Быстром-NHibernate:
// Domain classes
public class Animal
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class Cat : Animal
{
public virtual int WhiskerLength { get; set; }
public virtual int ClawCount { get; set; }
}
public class Dog : Animal
{
public virtual int TailWagRate { get; set; }
}
// Mapping file
public class AnimalMap : ClassMap<Animal>
{
public AnimalMap()
{
Id(x => x.Id)
.WithUnsavedValue(0)
.GeneratedBy.Native();
Map(x => x.Name);
var catMap = JoinedSubClass<Cat>("CatId", sm => sm.Map(x => x.Id));
catMap.Map(x => x.WhiskerLength)
.CanNotBeNull();
catMap.Map(x => x.ClawCount)
.CanNotBeNull();
JoinedSubClass<Dog>("DogId", sm => sm.Map(x => x.Id))
.Map(x => x.TailWagRate)
.CanNotBeNull();
}
}
Так как Вы хотите, чтобы свойства подклассов были не - пустой указатель, необходимо использовать таблицу в классе (присоединенный подкласс) способ смоделировать наследование. Это вызвано тем, что таблица на иерархию требует, чтобы все свойства подкласса были nullable.
Я надеюсь, что это помогает.
/Erik
Синтаксис FNH мог измениться после публикации Эрика, но его пример точно соответствует цели. Вот код, который я использовал на основе сообщения Эрика для работы через FNH с двумя стратегиями подкласса FNH, о которых я знаю прямо сейчас (SubClass (закомментированный код ниже и JoinedSubClass). Кроме того, я видел другие имена, используемые для описания те же стратегии, в том числе в документации NHibernate, что немного сбивает с толку, когда это ново для вас. ( https://www.hibernate.org/hib_docs/nhibernate/html/inheritance.html ).
// Domain classes
public class Animal : Entity
{
public virtual string Name { get; set; }
public virtual string Unwanted { get; set; }
}
public class Cat : Animal
{
public virtual int WhiskerLength { get; set; }
public virtual int ClawCount { get; set; }
}
public class Dog : Animal
{
public virtual int TailWagRate { get; set; }
}
public class Boxer : Dog
{
public string DroolBucket { get; set; }
}
public class AnimalMapJoinedSubclassOverride : IAutoMappingOverride<Animal>
{
public void Override(AutoMap<Animal> mapping) {
mapping.Map(x => x.Name);
mapping.IgnoreProperty(x => x.Unwanted);
mapping.JoinedSubClass("CatId", CatMap.AsJoinedSubClass());
mapping.JoinedSubClass("DogId", DogMap.AsJoinedSubClass());
//mapping.DiscriminateSubClassesOnColumn("Type")
// .SubClass<Cat>("CatId", CatMap.AsSubClass())
// .SubClass<Dog>("CatId", DogMap.AsSubClass());
}
}
public class CatMap
{
public static Action<JoinedSubClassPart<Cat>> AsJoinedSubClass()
{
return part =>
{
part.Map(x => x.ClawCount).Not.Nullable();
part.Map(x => x.WhiskerLength).Not.Nullable();
};
}
public static Action<SubClassPart<Cat>> AsSubClass()
{
return part =>
{
part.Map(x => x.ClawCount);
part.Map(x => x.WhiskerLength);
};
}
}
public class DogMap
{
public static Action<JoinedSubClassPart<Dog>> AsJoinedSubClass()
{
return sub =>
{
sub.Map(x => x.TailWagRate).Not.Nullable();
};
}
public static Action<SubClassPart<Dog>> AsSubClass()
{
return sub =>
{
sub.Map(x => x.TailWagRate);
};
}
}
public class BoxerMap
{
public static Action<JoinedSubClassPart<Boxer>> AsJoinedSubClass()
{
return sub =>
{
sub.Map(x => x.DroolBucket);
};
}
public static Action<SubClassPart<Boxer>> AsSubClass()
{
return sub =>
{
sub.Map(x => x.DroolBucket);
};
}
}