如何等到列表不为空? - 颤振期货
How to wait until list is not empty? - Flutter futures
这是我的主屏幕代码:
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final enterpriseProvider = Provider.of<EnterpriseProvider>(context);
final resp = enterpriseProvider.indicator;
final List<IpcData> data = createIpcList(resp);
print(data);
return Scaffold(
appBar: AppBar(
title: Text('Hola'),
),
body: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Container(
child: ResultList( formattedData: data )
),
),
],
)
);
}
createIpcList(List<List<dynamic>> resp) {
List<IpcData> ipcList = resp.map((e) => IpcData(e[0], e[1])).toList();
return ipcList;
}
}
发生的情况是 'resp' 值来自 http 请求。所以当我第一次调用 createIpcList(resp);它 return 是一个空列表。这里的问题是我在 returned 的脚手架中使用的 ResultList 小部件使用该数据来构建图表。当我加载应用程序时,图表是空白的,就好像没有传递任何数据一样。我注意到当我进行热重启时,它会打印一个空列表,但几秒钟后,它会打印数据,就好像我再次调用打印一样。问题是图表保持空白。我想提出一个条件,所以 if data =! [] 它 return 是脚手架,如果不是,它 return 是一个加载屏幕。我知道这可以通过 Futures 实现,但我不知道如何实现。一旦我有了数据,我想 return 脚手架,否则我的图表将永远是空的。
为此,您必须使用 FutureBuilder 小部件
FutureBuilder(
future: createIpcList(resp),
builder: (context, snapshot){
if (snapshot.hasData)
return ResultList(formattedData: snapshot.data);
}
);
如果您愿意,可以在从服务器提取数据时显示加载指示器。
这是我的主屏幕代码:
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final enterpriseProvider = Provider.of<EnterpriseProvider>(context);
final resp = enterpriseProvider.indicator;
final List<IpcData> data = createIpcList(resp);
print(data);
return Scaffold(
appBar: AppBar(
title: Text('Hola'),
),
body: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Container(
child: ResultList( formattedData: data )
),
),
],
)
);
}
createIpcList(List<List<dynamic>> resp) {
List<IpcData> ipcList = resp.map((e) => IpcData(e[0], e[1])).toList();
return ipcList;
}
}
发生的情况是 'resp' 值来自 http 请求。所以当我第一次调用 createIpcList(resp);它 return 是一个空列表。这里的问题是我在 returned 的脚手架中使用的 ResultList 小部件使用该数据来构建图表。当我加载应用程序时,图表是空白的,就好像没有传递任何数据一样。我注意到当我进行热重启时,它会打印一个空列表,但几秒钟后,它会打印数据,就好像我再次调用打印一样。问题是图表保持空白。我想提出一个条件,所以 if data =! [] 它 return 是脚手架,如果不是,它 return 是一个加载屏幕。我知道这可以通过 Futures 实现,但我不知道如何实现。一旦我有了数据,我想 return 脚手架,否则我的图表将永远是空的。
为此,您必须使用 FutureBuilder 小部件
FutureBuilder(
future: createIpcList(resp),
builder: (context, snapshot){
if (snapshot.hasData)
return ResultList(formattedData: snapshot.data);
}
);
如果您愿意,可以在从服务器提取数据时显示加载指示器。