Я не совсем разобрался, но похоже что сейчас если не инициализировать переменную сразу то надо указать late. Например: late ReceivePort _receivePort; late Isolate _isolateLoop;
Когда я смотрел курс по flutter там изменения были внутри метода setState(() {}); а тут координаты меняются не в нем. Получается происходит перерисовка без изменения в первый раз?
Никак не пойму преимущества Изолятов/Тредов. Суть в запуске асинхронных вычислений же? так у нас вроде есть колбэки/промисы/фючеры и тд, они же не блочат, код выполняется дальше спокойно. Поясните плиз преимущество запуска Изолята над колбэком. Спасибо за видео.
Здравствуйте, изолят это совершенно другая выделенная память и вычисления происходят в отдельном потоке и никоем образом не затрагивает главный изолят. А асинхронные операции выполняются в одном потоке при если вы запустите какой нибудь сложный расчет в главном изоляте вы получите фризы. Можете попробовать проверить. Сделайте массив из миллиона элементов, и сделайте перебор в асинхронной функции, на каждой итерации распечатайте элемент. И вы увидите, что приложение зависло.
Запустить получилось только так ReceivePort _receivePort = ReceivePort(); //ReceivePort _receivePort; //Isolate _isolateLoop; void startIsolateLoop () async{ // _receivePort = ReceivePort(); await Isolate.spawn(mainLoop, _receivePort.sendPort); иначе вылезает ошибка: Non-nullable instance field '_isolateLoop' must be initialized. Try adding an initializer expression, or a generative constructor that initializes it, or mark it 'late'.dart(not_initialized_non_nullable_instance_field) The value of the field '_isolateLoop' isn't used. Try removing the field, or using it.dart(unused_field)
@@mr.developer Или виджет который движется можно сделать StatefulWidget и передавать вовнутрь этого движущегося виджета координаты, этот виджет сам будет внутри обновлять свое состояние и двигаться. Этот Positioned виджет надо обернуть в StatefulWidget виджет, а указатель на объект состояния виджета установить в объекте StatefulWidget. При этом также Game можно сделать StatelessWidget но без стрима вообще class PositionedElement extends StatefulWidget { final PositionedElementState positionedElementState; PositionedElement(): positionedElementState = PositionedElementState(); } class PositionedElementState State extends State< PositionedElement > { }
Также виджет который движется можно сделать StatefulWidget и передавать вовнутрь этого движущегося виджета координаты, этот виджет сам будет внутри обновлять свое состояние и двигаться. Этот Positioned виджет надо обернуть в StatefulWidget виджет, а указатель на объект состояния виджета установить в объекте StatefulWidget. При этом также Game можно сделать StatelessWidget но без стрима вообще class PositionedElement extends StatefulWidget { final PositionedElementState positionedElementState; PositionedElement(): positionedElementState = PositionedElementState(); } class PositionedElementState State extends State< PositionedElement > { }
очень понятное объяснение изолятов, спасибо большое
Просто лучший, спасибо большое за данный курс, жду с нетерпением от вас продолжения !!!😉
Благодарю вас за поддержку 🤝
спасибо
что за музыка на фоне
оч нравится
😊
Я не совсем разобрался, но похоже что сейчас если не инициализировать переменную сразу то надо указать late. Например:
late ReceivePort _receivePort;
late Isolate _isolateLoop;
👍
а как передать параметры для функции в изолят?
Через порты
Когда я смотрел курс по flutter там изменения были внутри метода setState(() {}); а тут координаты меняются не в нем. Получается происходит перерисовка без изменения в первый раз?
почему не через генераторы создано. разве изоляты под этот случай нужны?
Ох, давно это было))
а что такое генераторы?
Никак не пойму преимущества Изолятов/Тредов. Суть в запуске асинхронных вычислений же? так у нас вроде есть колбэки/промисы/фючеры и тд, они же не блочат, код выполняется дальше спокойно. Поясните плиз преимущество запуска Изолята над колбэком.
Спасибо за видео.
Типа отдаем сложные вычисления другому треду/изоляту, то есть изолят имеет какие то ограничения на ресурсы?
Нашел ответ stackoverflow.com/a/53901907/3789381
Здравствуйте, изолят это совершенно другая выделенная память и вычисления происходят в отдельном потоке и никоем образом не затрагивает главный изолят. А асинхронные операции выполняются в одном потоке при если вы запустите какой нибудь сложный расчет в главном изоляте вы получите фризы. Можете попробовать проверить. Сделайте массив из миллиона элементов, и сделайте перебор в асинхронной функции, на каждой итерации распечатайте элемент. И вы увидите, что приложение зависло.
Запустить получилось только так
ReceivePort _receivePort = ReceivePort();
//ReceivePort _receivePort;
//Isolate _isolateLoop;
void startIsolateLoop () async{
// _receivePort = ReceivePort();
await Isolate.spawn(mainLoop, _receivePort.sendPort);
иначе вылезает ошибка:
Non-nullable instance field '_isolateLoop' must be initialized.
Try adding an initializer expression, or a generative constructor that initializes it, or mark it 'late'.dart(not_initialized_non_nullable_instance_field)
The value of the field '_isolateLoop' isn't used.
Try removing the field, or using it.dart(unused_field)
Спасибо тебе огромное, я столько промучался с этой ошибкой)
👍
я бы посоветовал бы использовать StreamBuilder, работает на много быстрее. Класс Game сделать StatelessWidget.
Да, я думал про это, но так проще и понятнее. В принципе и так производительность тоже на высоте
При переходе на архитектуру BLoC, Game будет Stateless, а перестраивать будем через BlocProvider
@@mr.developer Или виджет который движется можно сделать StatefulWidget и передавать вовнутрь этого движущегося виджета координаты, этот виджет сам будет внутри обновлять свое состояние и двигаться. Этот Positioned виджет надо обернуть в StatefulWidget виджет, а указатель на объект состояния виджета установить в объекте StatefulWidget. При этом также Game можно сделать StatelessWidget но без стрима вообще
class PositionedElement extends StatefulWidget {
final PositionedElementState positionedElementState;
PositionedElement(): positionedElementState = PositionedElementState();
}
class PositionedElementState State extends State< PositionedElement > {
}
Я не так предполагал)
Почему же всё-таки V, а не D?..
Также виджет который движется можно сделать StatefulWidget и передавать вовнутрь этого движущегося виджета координаты, этот виджет сам будет внутри обновлять свое состояние и двигаться. Этот Positioned виджет надо обернуть в StatefulWidget виджет, а указатель на объект состояния виджета установить в объекте StatefulWidget. При этом также Game можно сделать StatelessWidget но без стрима вообще
class PositionedElement extends StatefulWidget {
final PositionedElementState positionedElementState;
PositionedElement(): positionedElementState = PositionedElementState();
}
class PositionedElementState State extends State< PositionedElement > {
}
Спасибо за подсказку
потом обращаться к состоянию движущегося виджета через PositionedElement.positionedElementState