5. Isolates. Запускаем главный луп в отдельном изоляте. Пишем игру на Flutter/Dart.

แชร์
ฝัง
  • เผยแพร่เมื่อ 23 ม.ค. 2025

ความคิดเห็น • 30

  • @MrAlex-cw5fs
    @MrAlex-cw5fs 9 หลายเดือนก่อน

    очень понятное объяснение изолятов, спасибо большое

  • @Wisznia2000
    @Wisznia2000 3 ปีที่แล้ว +1

    Просто лучший, спасибо большое за данный курс, жду с нетерпением от вас продолжения !!!😉

    • @mr.developer
      @mr.developer  3 ปีที่แล้ว

      Благодарю вас за поддержку 🤝

  • @alexalez7142
    @alexalez7142 8 หลายเดือนก่อน

    спасибо

  • @ГеоргийЦеер
    @ГеоргийЦеер 2 ปีที่แล้ว +1

    что за музыка на фоне
    оч нравится

  • @LeMeldonium
    @LeMeldonium ปีที่แล้ว +1

    Я не совсем разобрался, но похоже что сейчас если не инициализировать переменную сразу то надо указать late. Например:
    late ReceivePort _receivePort;
    late Isolate _isolateLoop;

  • @antonyaz3506
    @antonyaz3506 2 ปีที่แล้ว

    а как передать параметры для функции в изолят?

  • @James00026
    @James00026 4 ปีที่แล้ว

    Когда я смотрел курс по flutter там изменения были внутри метода setState(() {}); а тут координаты меняются не в нем. Получается происходит перерисовка без изменения в первый раз?

  • @konstantin-svahuman8630
    @konstantin-svahuman8630 ปีที่แล้ว

    почему не через генераторы создано. разве изоляты под этот случай нужны?

    • @mr.developer
      @mr.developer  ปีที่แล้ว

      Ох, давно это было))

    • @Arm1K
      @Arm1K 5 หลายเดือนก่อน

      а что такое генераторы?

  • @MrFikret90
    @MrFikret90 4 ปีที่แล้ว

    Никак не пойму преимущества Изолятов/Тредов. Суть в запуске асинхронных вычислений же? так у нас вроде есть колбэки/промисы/фючеры и тд, они же не блочат, код выполняется дальше спокойно. Поясните плиз преимущество запуска Изолята над колбэком.
    Спасибо за видео.

    • @MrFikret90
      @MrFikret90 4 ปีที่แล้ว

      Типа отдаем сложные вычисления другому треду/изоляту, то есть изолят имеет какие то ограничения на ресурсы?

    • @MrFikret90
      @MrFikret90 4 ปีที่แล้ว

      Нашел ответ stackoverflow.com/a/53901907/3789381

    • @mr.developer
      @mr.developer  4 ปีที่แล้ว +2

      Здравствуйте, изолят это совершенно другая выделенная память и вычисления происходят в отдельном потоке и никоем образом не затрагивает главный изолят. А асинхронные операции выполняются в одном потоке при если вы запустите какой нибудь сложный расчет в главном изоляте вы получите фризы. Можете попробовать проверить. Сделайте массив из миллиона элементов, и сделайте перебор в асинхронной функции, на каждой итерации распечатайте элемент. И вы увидите, что приложение зависло.

  • @NikolayDementev
    @NikolayDementev 3 ปีที่แล้ว +3

    Запустить получилось только так
    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)

    • @Nebo12345
      @Nebo12345 2 ปีที่แล้ว

      Спасибо тебе огромное, я столько промучался с этой ошибкой)

    • @mr.developer
      @mr.developer  ปีที่แล้ว

      👍

  • @ixaran
    @ixaran 4 ปีที่แล้ว

    я бы посоветовал бы использовать StreamBuilder, работает на много быстрее. Класс Game сделать StatelessWidget.

    • @mr.developer
      @mr.developer  4 ปีที่แล้ว

      Да, я думал про это, но так проще и понятнее. В принципе и так производительность тоже на высоте

    • @mr.developer
      @mr.developer  4 ปีที่แล้ว

      При переходе на архитектуру BLoC, Game будет Stateless, а перестраивать будем через BlocProvider

    • @ixaran
      @ixaran 4 ปีที่แล้ว

      @@mr.developer Или виджет который движется можно сделать StatefulWidget и передавать вовнутрь этого движущегося виджета координаты, этот виджет сам будет внутри обновлять свое состояние и двигаться. Этот Positioned виджет надо обернуть в StatefulWidget виджет, а указатель на объект состояния виджета установить в объекте StatefulWidget. При этом также Game можно сделать StatelessWidget но без стрима вообще
      class PositionedElement extends StatefulWidget {
      final PositionedElementState positionedElementState;
      PositionedElement(): positionedElementState = PositionedElementState();
      }
      class PositionedElementState State extends State< PositionedElement > {
      }

    • @mr.developer
      @mr.developer  4 ปีที่แล้ว

      Я не так предполагал)

  • @aer2212
    @aer2212 4 ปีที่แล้ว +1

    Почему же всё-таки V, а не D?..

  • @ixaran
    @ixaran 4 ปีที่แล้ว

    Также виджет который движется можно сделать StatefulWidget и передавать вовнутрь этого движущегося виджета координаты, этот виджет сам будет внутри обновлять свое состояние и двигаться. Этот Positioned виджет надо обернуть в StatefulWidget виджет, а указатель на объект состояния виджета установить в объекте StatefulWidget. При этом также Game можно сделать StatelessWidget но без стрима вообще
    class PositionedElement extends StatefulWidget {
    final PositionedElementState positionedElementState;
    PositionedElement(): positionedElementState = PositionedElementState();
    }
    class PositionedElementState State extends State< PositionedElement > {
    }

    • @mr.developer
      @mr.developer  4 ปีที่แล้ว

      Спасибо за подсказку

  • @ixaran
    @ixaran 4 ปีที่แล้ว

    потом обращаться к состоянию движущегося виджета через PositionedElement.positionedElementState