My question is.......When the app Started(initial start) circular progress indicator appears & didn't got any data.....My app has 3 tabs(using tabbar), but when I swicth between my tabs & when I came to the Home tab now I got the data & ui render according to the data....
I want when the app start get data & needs render the data....
Ui inistate
class Home extends StatefulWidget {
const Home({ Key? key }) : super(key: key);
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
int _page = 1;
void initState() {
var postProvider = Provider.of<PostProvider>(context, listen: false);
postProvider.initStreamsPost();
postProvider.fetchAllData(_page);
}
@override
Widget build(BuildContext context) {
return Consumer<PostProvider>(builder: (context, postsModel, child) {
print("builder length... ${postsModel.allData!.length}"); //when the first time app opens what I got print in terminal => builder length... 0
if (postsModel.allData != null && postsModel.allData!.length > 0) {
return ListView.builder(
physics: const AlwaysScrollableScrollPhysics(),
itemCount: postsModel.allData?.length,
itemBuilder: (BuildContext context, int index) {
return PostCard(
);
});
}
return Center(child: CircularProgressIndicator());
}
}
}
changeNotifier class
class PostProvider extends ChangeNotifier {
int totalPages = 0;
int? get totalRecords => _postsFetcher!.totalPosts;
PostApi? _postApi;
PostsModel? _postsFetcher;
List<Post>? get allData =>
_postsFetcher?.posts != null ? _postsFetcher?.posts : [];
PostProvider() {
initStreamsPost();
}
initStreamsPost() async {
_postApi = await new PostApi();
_postsFetcher = await new PostsModel();
}
fetchAllData(pageNumber) async {
if ((totalPages == 0) || pageNumber <= totalPages) {
PostsModel itemModel = await _postApi!.getPost2(pageNumber);
print("have data");
if (_postsFetcher!.posts == null) {
totalPages = ((itemModel.totalPosts! - 1) / 4).ceil();
_postsFetcher = itemModel;
notifyListeners();
} else {
_postsFetcher?.posts?.addAll(itemModel.posts!);
_postsFetcher = _postsFetcher;
notifyListeners();
}
}
}
}