Implementation
FutureBuilder<Instances> distroList(WSLApi api,
Function(String, {bool loading}) statusMsg, Map<String, bool> hover) {
// List as FutureBuilder with WSLApi
return FutureBuilder<Instances>(
future: api.list(),
builder: (context, snapshot) {
// Update every 20 seconds
if (snapshot.hasData) {
List<Widget> newList = [];
List<String> list = snapshot.data?.all ?? [];
List<String> running = snapshot.data?.running ?? [];
// Check if there are distros
if (list.isEmpty) {
return Expanded(
child: Center(
child: Text('noinstancesfound-text'.i18n()),
),
);
}
// Check if WSL is installed
if (list[0] == 'wslNotInstalled') {
return const InstallDialog();
}
for (String item in list) {
newList.add(
ListItem(item: item, statusMsg: statusMsg, running: running));
}
return Expanded(
child: ListView.custom(
childrenDelegate: SliverChildListDelegate(newList),
),
);
} else if (snapshot.hasError) {
return Text('${snapshot.error}');
}
// By default, show a loading spinner.
return const Center(child: ProgressRing());
},
);
}