'how to display fetched data from server using Rest APi, after internet connection is lost?

I Build a Flutter chat app, using Rest Api, I fetched all User from the server using http.GET, request and display as Listview as shown in my code below, but User is Displayed as a ListView only if there is an Internet Connection, if Internet connection is lost. I get a blank Screen. I call fetchData(); method inside ininState({}) to fetch all user when the app opens for the first time , and I store all user in a List, it works fine, but if internet connection is lost, I got black screen. I want to display already fetched user even if internet connection is lost.

import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:taxiyee_messaging_app/models/message_model.dart';
import 'package:taxiyee_messaging_app/screens/chatscreen.dart';
import 'package:http/http.dart' as http;
import 'package:taxiyee_messaging_app/screens/login_screen.dart';

import '../models/usermodel.dart';

class ChatList extends StatefulWidget {
  bool items;
  ChatList({required this.items});

  @override
  State<ChatList> createState() => _ChatListState();
}


class _ChatListState extends State<ChatList> {
  late Future<dynamic> futureUser;
  List<User> userList = [];
  List<User> myuserList = [];
   bool items =true;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    futureUser = fetchData();
  }

  @override
  Widget build(BuildContext context) {
    return items? ListView.builder(
      shrinkWrap: true,
      itemCount: userList.length,
      itemBuilder: (BuildContext context, int index) {
        var user = userList[index];
        var sender = userList[index].sender;
        return Column(
          children: [
            ListTile(
              onTap: () {
                Navigator.push(context, MaterialPageRoute(
                    builder: (BuildContext context){
                      return Chatscreen(user:User(message: user, sender: sender));
                    }));
              },
              leading: const CircleAvatar(
                radius: 30,
                child: Icon(Icons.person),
              ),
              trailing: const CircleAvatar(
                child: Text("2"),
              ),
              title: Text(sender["name"]),
              subtitle: Text(user.message),
            ),
            const Divider(
              thickness: 0.5,
              color: Colors.blue,
            ),
          ],
        );
      },
    ):Container(width: 200,
    height: 400,
    color: Colors.red,);
/////////////
  }
 
  fetchData() async {
    final response = await http.get(
      Uri.parse('https://staging.taxiye.com:7003/chatst'),
      headers: <String, String>{
        'Content-Type': 'application/json; charset=UTF-8',
        "Authorization": authToken,
      },
    );
    if (response.statusCode == 200) {
      print(response.body);
      var values = json.decode(response.body)["allChats"];
      var mychatvalues = json.decode(response.body)["myChats"];
      if (values.length > 0) {
        for (int i = 0; i < values.length; i++) {
          if (values[i] != null) {
            Map<String, dynamic> map = values[i];
            setState(() {
              userList.add(User.fromJson(map));
            });
          }
        }
      }
      if (mychatvalues.length > 0) {
        for (int i = 0; i < mychatvalues.length; i++) {
          if (mychatvalues[i] != null) {
            Map<String, dynamic> map = mychatvalues[i];
            setState(() {
              myuserList.add(User.fromJson(map));
            });
          }
        }
      }
    } else {
      // If that call was not successful, throw an error.
      throw Exception('Failed to load post');
    }

    // return
  }
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source