Перейти к основному содержимому
title: "Понятия управления потоком"
description: Понимание и реализация управления потоком в вашем приложении FlutterFlow для управления выполнением операторов, инструкций и вызовов функций при различных условиях.
tags: [Управление потоком, FlutterFlow, Понятия]
keywords: [Управление потоком, FlutterFlow, Понятия]

Понятия управления потоком

В разработке приложений управление потоком относится к порядку выполнения или оценки индивидуальных операторов, инструкций или вызовов функций. Правильное управление потоком гарантирует, что ваше приложение будет вести себя ожидаемым образом при различных условиях и действиях пользователя. Это включает понимание и реализацию условий, управление последовательной и параллельной логикой, обработку блокирующих и неблокирующих действий, а также принятие решений о том, когда и как выполнять определенные действия на основе определенных критериев.

В этом разделе мы рассмотрим различные понятия управления потоком и способы их эффективной реализации в FlutterFlow для создания динамичных, отзывчивых и эффективных приложений.

Условие

Одним из фундаментальных аспектов управления потоком является использование условий, которые позволяют вашему приложению принимать решения и выполнять различные блоки кода в зависимости от конкретных критериев. Условные операторы - это выражения, которые оцениваются как true или false. В зависимости от результата этих оценок выполняются различные логические последовательности.

Основные условные операторы - это if, if-else и else.

  • Оператор if: Оператор if оценивает условие и выполняет блок кода, если условие истинно.

if-condition.png

  • Оператор if-else:

Оператор if-else предоставляет альтернативный блок кода для выполнения, если условие ложно.

if-else-condition.png

Здесь, если userIsLoggedIn истинно, приложение покажет приветственное сообщение. В противном случае будет предложено пользователю войти.

  • Оператор else if:

Оператор else if может использоваться для последовательной проверки нескольких условий.

if-elseif-condition.png

Этот пример демонстрирует несколько условий. Если userIsLoggedIn истинно, показывается приветственное сообщение. Если нет, проверяется, является ли userIsGuest истинным, и показывается сообщение для гостей. Если ни одно из условий не выполняется, пользователю предлагается выполнить вход.

Реализация условий

В FlutterFlow вы можете реализовать условную логику двумя основными способами:

  • При установке свойств

    В FlutterFlow можно условно устанавливать свойства виджетов. Например, вы можете изменить цвет кнопки в зависимости от значения переменной. Вы можете использовать условные выражения для динамической установки этих свойств во время выполнения.

  • Условные действия

    Вы также можете выполнять условные действия в FlutterFlow, где определенные действия выполняются только в случае соблюдения указанных условий. Это полезно для реализации логики, например, перехода на различные страницы на основе ввода пользователя или отображения/скрытия виджетов.

    Пример: Если пользователь нажимает кнопку и форма действительна, перейдите на следующий экран; в противном случае покажите сообщение об ошибке.

к сведению

Ознакомьтесь с полным руководством здесь. Хотите узнать о реализации условного пользовательского интерфейса? Тогда лучше ознакомьтесь с нашим руководством Responsiveness 101.

Последовательный vs Параллельный Логический Поток

  • Последовательный Логический Поток: Действия выполняются поочередно. Каждое действие ждет завершения предыдущего перед началом выполнения. Это полезно для задач, зависящих от результата предыдущих действий.

    Пример: Отправка формы, ожидание ответа от сервера, а затем показ подтверждения.

  • Параллельный Логический Поток Несколько действий выполняются одновременно, независимо друг от друга. Это полезно для задач, которые могут выполняться параллельно и не зависят друг от друга.

    Пример: Загрузка данных из нескольких источников одновременно для ускорения процесса извлечения данных. parallel-sequential.png

Асинхронные Функции

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

Они могут быть блокирующими или неблокирующими в зависимости от конкретного случая. Некоторые примеры асинхронных операций включают:

  • Сетевые запросы (например, получение данных из API)
  • Операции с базой данных (например, чтение или запись данных)
  • Длительные вычисления (например, сложные вычисления)
  • Анимации (например, переходы, анимации виджетов)

Блокирующие Действия

Блокирующие действия - это действия, которые приостанавливают выполнение последующих действий до завершения самих себя. Эти действия обычно включают операции, занимающие время, такие как сетевые запросы или анимации.

Сгенерированный Код

В сгенерированном коде FlutterFlow использует ключевое слово await, чтобы приостановить выполнение асинхронной функции до завершения операции перед переходом к следующей функции. Такой подход часто используется для обработки асинхронных функций, обеспечивая завершение каждой операции перед началом следующей.

В следующем примере из сгенерированного кода код ожидает выполнения actions.getRandomIntAfterWait(), поскольку это асинхронная функция, которая занимает около 2 секунд для завершения и предоставления результата (в данном случае случайное целое число).

    _model.result = await actions.getRandomIntAfterWait();
_model.text1Value = _model.result.toString();

Результат actions.getRandomIntAfterWait() сохраняется в переменной model.result, а затем результат устанавливается для текстового виджета с использованием переменной состояния страницы text1Value.

Неблокирующие Действия

Неблокирующие действия, напротив, позволяют программе продолжать выполнение следующих задач во время ожидания завершения начальных действий в фоновом режиме.

Сгенерированный Код

В сгенерированном коде, когда асинхронная функция делается неблокирующей, FlutterFlow убирает ключевое слово await. Это означает, что последующая функция не будет ожидать завершения асинхронного действия и перейдет к следующему действию немедленно.

Предыдущий пример больше не будет работать, потому что он не ожидает асинхронное выполнение функции actions.getRandomIntAfterWait(). В результате переменная model.result может не быть готова или доступна, когда выполняется _model.text1Value = _model.result.toString();.

_model.result = actions.getRandomIntAfterWait();
_model.text1Value = _model.result.toString(); // вызовет ошибки

Для обеспечения правильного выполнения сделайте неблокирующими только те действия, от результатов которых не зависят последующие действия.

Неблокирующие vs Параллельные Действия

Неблокирующие ДействияПараллельные Действия
Позволяют следующему действию запуститься сразу после завершения текущего без ожидания завершения текущего действия.Позволяют пользователям выполнять два или более действия одновременно, независимо друг от друга.
Могут быть сделаны только асинхронные функции неблокирующими.Могут быть включены как асинхронные, так и синхронные функции в параллельные действия.
Идеально подходят для задач, где результат действия не требуется немедленно следующему действию.Идеально подходят для независимых задач, которые могут выполняться одновременно для улучшения эффективности.
Обеспечивают отзывчивость приложения, не ожидая завершения долгосрочных задач.Помогают сократить общее время выполнения за счет одновременного выполнения нескольких задач.
Пример: Получение данных в фоновом режиме с сохранением возможности взаимодействия пользователя.Пример: Загрузка данных из двух API одновременно для экономии времени.