I have done a quite a good research and unable to find a good tutorial for flutter. but here is what I am trying to do.

I have an API call which gets me a lot of data and this data should be shown across multiple screens.

What is the best way to do it using futurebuilder. Ideally, I would like to call the API in the splash screen and the save the data and use it across multiple screens, but not able to get a good tutorial to do it.

Editing to Add the code.

```
Future<ApiCallResponse> makeApiCall({
    required String callName,
    required String apiUrl,
    required ApiCallType callType,
    Map<String, dynamic> headers = const {},
    Map<String, dynamic> params = const {},
    String? body,
    BodyType? bodyType,
    bool returnBody = true,
    bool cache = false,
  }) async {
    print(apiUrl);
  //  print(body);
    print(params);
    final callRecord =
        ApiCallRecord(callName, apiUrl, headers, params, body, bodyType);
    // Modify for your specific needs if this differs from your API.
    if (_accessToken != null) {
      headers[HttpHeaders.authorizationHeader] = 'Token $_accessToken';
    }
    if (!apiUrl.startsWith('http')) {
      apiUrl = 'https://$apiUrl';
    }

    // If we've already made this exact call before and caching is on,
    // return the cached result.
    if (cache && _apiCache.containsKey(callRecord)) {
      return _apiCache[callRecord]!;
    }

    ApiCallResponse result;
    switch (callType) {
      case ApiCallType.GET:
      case ApiCallType.DELETE:
        result =
            await urlRequest(callType, apiUrl, headers, params, returnBody);
        break;
      case ApiCallType.POST:
      case ApiCallType.PUT:
      case ApiCallType.PATCH:
        result = await requestWithBody(
            callType, apiUrl, headers, params, body, bodyType, returnBody);
        break;
    }

    // If caching is on, cache the result (if present).
    if (cache) {
      _apiCache[callRecord] = result;
    }

 //   print(result.jsonBody);
 //   print(result.jsonBody['abhijit']);
 //   print(result.jsonBody['gowri']);

//    final prefs = await SharedPreferences.getInstance();
//    await prefs.setStringList('gowri', result.jsonBody['gowri']);
//    await prefs.setStringList('gouri', result.jsonBody['gouri']);

    SaveDataResponse(result);

    return result;
  }

void SaveDataResponse(ApiCallResponse result) async{
  String SunriseData = result.jsonBody['sunrise'].toString();
//  String gouriVal = result.jsonBody['gouri'].toString();

  print(SunriseData);
//  print(gouriVal);

   final prefs = await SharedPreferences.getInstance();
    prefs.setString('sunrise', SunriseData);
//    await prefs.setString('sunrise', SunriseData);
}

```

When I try to use the following inside the initstate on the page where I want to see the data

```
sunrise= SharedPref.getString('SunriseData') as String?;

```

I get the following message

```
Unhandled Exception: type 'Future<String>' is not a subtype of type 'String?' in type cast
E/flutter (18953): #0      _HomePageWidgetState._loadlatlon.<anonymous closure> (package:myApp/home_page/home_page_widget.dart:62:50)
E/flutter (18953): #1      State.setState (package:flutter/src/widgets/framework.dart:1114:30)
E/flutter (18953): #2      _HomePageWidgetState._loadlatlon (package:myApp/home_page/home_page_widget.dart:59:5)
E/flutter (18953): <asynchronous suspension>

```