【发布时间】:2021-09-20 07:09:30
【问题描述】:
我的问题是......当应用程序启动(初始启动)循环进度指示器出现并且没有任何数据......我的应用程序有 3 个选项卡(使用选项卡栏),但是当我在我的选项卡之间切换,当我来到 Home 选项卡时,我得到了数据和根据数据呈现的 ui ......
我想在应用开始获取数据并需要渲染数据时......
用户界面创建
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 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();
}
}
}
}
【问题讨论】:
标签: flutter dart flutter-dependencies flutter-provider flutter-change-notifier