как перебросить Future <void>main в Future <List>in dart flterter без ошибок - PullRequest
0 голосов
/ 12 апреля 2020

Я хотел бы, чтобы код ниже был:

Future<List> fetchPrices() async {details in code below} 

без ошибок.

Код для изменения здесь:

Future<void> main(List<String> arguments) async {
  Map<String, num> quotes = await Forex.fx(
    quoteProvider: QuoteProvider.yahoo,
    base: 'USD',
    quotes: <String>['EUR', 'JPY']
  );
  print('Number of quotes retrieved: ${quotes.keys.length}.');
  print('Exchange rate USDEUR: ${quotes['USDEUR']}.');
  print('Exchange rate USDJPY: ${quotes['USDJPY']}.');
  quotes = await Forex.fx(
    quoteProvider: QuoteProvider.ecb,
    base: 'JPY',
    quotes: <String>['EUR', 'USD']
  );
  print('Number of quotes retrieved: ${quotes.keys.length}.');
  print('Exchange rate JPYEUR: ${quotes['JPYEUR']}.');
  print('Exchange rate JPYUSD: ${quotes['JPYUSD']}.');
}

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

В соответствии с вашим примером кода Forex.fx() return Map<String, num>. Таким образом, у вас есть два варианта здесь.

Future<List<String>> fooFunction(List<String> arguments) async {
  Map<String, num> quotes = await Forex.fx(
      quoteProvider: QuoteProvider.yahoo,
      base: 'USD',
      quotes: <String>['EUR', 'JPY']
  );
  return quotes.keys;
}

Future<List<num>> fooFunction(List<String> arguments) async {
  Map<String, num> quotes = await Forex.fx(
      quoteProvider: QuoteProvider.yahoo,
      base: 'USD',
      quotes: <String>['EUR', 'JPY']
  );
  return quotes.values;
}
1 голос
/ 12 апреля 2020

Вы должны иметь заявление return. Пример редактирования:

Future<List> fooFunction() async {
    Map<Bar, Baz> data = await someAsyncFunction();
    List<String> strings = List();
    strings.add(data.value);
    [...]
    return strings;
}
...