【发布时间】:2021-02-03 11:05:09
【问题描述】:
class GraphPage extends StatefulWidget {
GraphPage({Key key, this.gender, this.subzone, this.age}) : super(key: key);
final gender, subzone, age;
@override
_GraphPageState createState() => _GraphPageState();
}
class _GraphPageState extends State<GraphPage> {
int valueData;
readMe() async {
ByteData data = await rootBundle.load("assets/Book1.xlsx");
var bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
var excel = Excel.decodeBytes(bytes);
for (var table in excel.tables.keys) {
print(table);
print(excel.tables[table].maxCols);
print(excel.tables[table].maxRows);
for (var row in excel.tables[table].rows) {
if (row[3] == widget.subzone) {
if (row[1] == widget.age) {
if (row[0] == widget.gender) {
print(row[4]);
valueData = row[4];
print(valueData);
}
}
}
}
}
}
...
_generateData() {
var barData = [
new Stats(widget.gender, widget.age, widget.subzone, valueData),
];
...
@override
void initState() {
super.initState();
_seriesData = List<charts.Series<Stats, String>>();
readMe();
_generateData();
}
@override
Widget build(BuildContext context) {
...
对于以下条件,我想让 valueData 等于我的 excel 文件的 row[4] 的值。 但是,一旦我将它放入 generateData() 中,它就会返回一个空值。
readMe() 只是一个读取 excel 文件并在某些条件下尝试将值返回给 valueData 的函数。
虽然 generateData() 是一个生成数据并随后绘制图表的函数。
假设 row[0] == "String" 和 row[1] = "String" 和 row[3] = "String" row[4] = 5020,但是当放在 generateData() 函数中时,它返回 null 而不是 5020
谢谢你的建议。
【问题讨论】:
-
什么时候打电话给
_generateData?在build方法中? -
@Nitrodon 不。它在构建之外调用。