#flutter
#flutter
Вопрос:
Проблема: я не могу понять, как вернуть данные (2 списка) из класса (GraphData) в виджет с отслеживанием состояния (экран цены), который вызвал класс (GraphData).
Предыстория: экран цены (StatefulWidget) вызывает класс GraphData и его функцию getGraphData() с помощью getData():
price_screen.dart
getData() async {
isWaiting = true;
try {
await GraphData().getGraphData(
selectedCurrency: selectedCurrency,
selectedGraphType: selectedGraphType);
} catch (e) {
print(e);
}
}
Затем GraphData выполняет некоторые вычисления и создает два списка: closingTimes и closingPrices.
graph_data.dart
class GraphData {
Future getGraphData(
{String selectedCurrency,
String selectedGraphType}) async {
List<String> closingTimes = [];
List<double> closingPrices = [];
.
. (some calculations here)
.
closingTimes.add(formattedClosingTime);
closingPrices.add(closePrice);
}
}
}
}
Мне нужно вернуть эти два списка обратно в PriceScreen (StatefulWidget), чтобы я мог использовать их в более поздней функции. Как я могу это сделать?
Я думал, что использование обратного вызова будет работать, но я не мог понять, как его настроить в этой ситуации. Примечание: я вырезал столько ненужного кода, сколько мог, чтобы упростить свой вопрос. При необходимости я могу добавить больше кода.
Комментарии:
1. возврат отсутствует
2. Да, я знаю, что мой старый код вернул что-то в конце, но я меняю свой код, чтобы вместо этого возвращать 2 списка. В настоящее время я не знаю, как это сделать, поэтому я пропустил ключевое слово return здесь.
Ответ №1:
Вы можете либо вернуть Map<String, List<dynamic>>
:
return <String, List<dynamic>>{
'closingTimes': closingTimes,
'closingPrices': closingPrices
};
или вы могли бы написать новый класс:
class GraphDataReturnObject {
final List<String> closingTimes;
final List<double> closingPrices;
const GraphDataReturnObject(this.closingTimes, this.closingPrices);
}
и
return GraphDataReturnObject(closingTimes, closingPrices);
и
GraphDataReturnObject graphData = await GraphData().getGraphData(...);
// you can access the closing times and closing prices like this:
graphData.closingTimes;
graphData.closingPrices;
Комментарии:
1. Должен ли я создать этот новый класс GraphDataReturnObject в моем уже написанном классе GraphData или в совершенно новом отдельном классе?
2. Поправьте меня, если я ошибаюсь, но я думаю, что Dart не позволяет создавать внутренние классы.
3. О, я не уверен, так как я все еще новичок в Dart. Итак, если бы я должен был создать отдельный класс GraphDataReturnObject, буду ли я ссылаться на этот класс в своем классе GraphData, чтобы передать ему значения списка closingTimes и closingPrices, а затем снова ссылаться на него в моем PriceScreen, чтобы получить значения обратно?