Almost surely the first snapshot will contain do data because the future is still running. Check if the snapshot has data, and also check for errors:
builder: (context, snapshot) {
if (snapshot.hasData) {
// now you can be sure that snapshot.data is not null
} else if (snapshot.hasError) {
// manage errors
}
// otherwise show a progress indicator while the future is running
return const Center(child: CircularProgressIndicator());
}