#Flutter Создание al oop для создания видеозвонков на основе заданного выбранного человека - PullRequest
0 голосов
/ 28 апреля 2020

Я новичок в трепетании и развитии в целом, и у меня есть вопрос, касающийся использования do / while и l oop в функции для совершения видеозвонка. Я использую Agora.sdk для этого и Firestore. Это приложение, похожее на «Будь мне глазами», но с небольшим поворотом.

Во-первых, есть два отдельных пользователя: волонтер (который не выполняет никаких вызовов) и слабовидящий (который делает вызов).

Итак, мне удалось получить добровольцев случайным образом, используя этот код на нажатом:

onPressed: () asyn c {selectionVolunteers (oneVolunteer); await Permissions.cameraAndMicrophonePermissionsGranted ()? CallUtils.dial (от: отправитель, до: oneVolunteer, контекст: контекст,): Navigator.pop (контекст); },

Это работает, но теперь мне нужно, чтобы при задании определенного времени, скажем, 30se c, он снова вызывал selectionVolunteers () и т. Д. Ultil любой из зарегистрированных добровольцев ответы или после сказать .. 5 итераций. Я не уверен, как использовать таймер .. так что ... я создал этот код:

searchAlgorithm(oneVolunteer) async {
     int tries = 0

    do {
      selectingVolunteers(oneVolunteer);
      await Permissions.cameraAndMicrophonePermissionsGranted()
          ? CallUtils.dial(from: sender, to: oneVolunteer, context: context)
          : Navigator.pop(context);
      if (startTimer()) {
        tries++;
        selectingVolunteers(oneVolunteer);
        await Permissions.cameraAndMicrophonePermissionsGranted()
            ? CallUtils.dial(from: sender, to: oneVolunteer, context: context)
            : Navigator.pop(context);
      }
    } while (tries == 5);
  }

  startTimer() {
    const oneSec = const Duration(seconds: 30);
    _timer = new Timer.periodic(
      oneSec,
      (Timer timer) => setState(
        () {
          if (_start < 1) {
            timer.cancel();
          } else {
            _start = _start - 1;
          }
        },
      ),
    );
  }

Но что-то подсказывает мне, что это не сработает: (

Я действительно Спасибо за помощь! Спасибо!

1 Ответ

0 голосов
/ 29 апреля 2020

Таким образом, причина, по которой ваше задание l oop может не работать, состоит в том, что вы не определили условие правильно.

Когда вы объявили tries как 0, компилятор принимает это значение в это l oop и запускает код внутри него, но затем, когда он проверяет условие tries==5, которое в данном случае неверно, следовательно, l oop ломается, и ваш код выполняется только один раз (что по умолчанию в случае циклов do-while).

Таким образом, чтобы выполнить это, сделайте, пока l oop 5 раз, вы можете сделать это

    do{
        ..... // Your code
        tries++;
      }while(tries<5)

Таким образом, когда вы выполняете это, пока l oop tries будет go от 0 до 4 и ваш код, находящийся внутри do, в то время как l oop будет выполнен 5 раз.

...