distroList function Null safety

FutureBuilder<Instances> distroList(
  1. WSLApi api,
  2. dynamic statusMsg(
    1. String,
    2. {bool loading}
    ),
  3. Map<String, bool> hover
)

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());
    },
  );
}