Как вернуть два значения из метода - PullRequest
0 голосов
/ 27 апреля 2020

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

Это как я назвал метод -

  @override
  void initState() {
    var calc = new Calculation().resultCalculation(dateOfBirth: dob, timeOfBirth: tob, gender: genderId, city: cities);
    results = calc;
    print(results);
    print(results[0]);
    super.initState();
  }

И вот как я возвратил значения -

    return [bornDay, bornCity]; 

Если кто-то может дать мне лучший способ вызвать этот метод и вернуть оба значения было бы здорово:)

Метод, который требует времени -

cityCalculate() async {
  DateTime earlyTime;
  DateTime lateTime;
  String city;

  QuerySnapshot snaps =
      await Firestore.instance.collection('cities').getDocuments();
  for (var docs in snaps.documents) {
    earlyTime = DateTime.parse(docs['beforeTime']);
    lateTime = DateTime.parse(docs['afterTime']);
    city = docs['city'];
    if (birthDayTime.isAfter(earlyTime) && birthDayTime.isBefore(lateTime)) {
      bornCity = city;
      break;
    }
  }
}

1 Ответ

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

Лучший способ сделать это - использовать Map или List (как вы уже сделали).

  1. Использование карты return {"bornDay": bornDay, "bornCity" bornCity"}
  2. Использование списка (как вы уже сделали) return [bornDay, bornCity]

Вызовите функцию следующим образом

@override
  void initState() async{
    var calc = await Calculation().resultCalculation(dateOfBirth: dob, timeOfBirth: tob, gender: genderId, city: cities);
    results = calc;
    print(results);
    print(results[0]);
    super.initState();
  }
...