从0开始写一个基于Flutter的开源中国客户端
在这个系列的第四部分,我们将会实现一个基本的主页面,包括新闻列表和下拉刷新的功能。
import 'package:flutter/material.dart';
import 'package:open_cx/model/news.dart';
import 'package:open_cx/network/network_handler.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
List<News> newsList = [];
bool isLoading = false;
@override
void initState() {
super.initState();
fetchNews();
}
Future<void> fetchNews({bool isReload = false}) async {
if (isLoading) return;
if (!isReload) setState(() => isLoading = true);
final news = await NetworkHandler.getNews();
setState(() {
newsList = news;
isLoading = false;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('开源中国'),
),
body: RefreshIndicator(
onRefresh: fetchNews,
child: isLoading
? Center(child: CircularProgressIndicator())
: ListView.builder(
itemCount: newsList.length,
itemBuilder: (context, index) {
final news = newsList[index];
return ListTile(
title: Text(news.title),
subtitle: Text(news.author),
onTap: () {
// 跳转到新闻详情页面
},
);
},
),
),
);
}
}
这段代码实现了一个基本的新闻列表页面,包括下拉刷新的功能。在页面初始化时,我们获取新闻列表数据,并展示在ListView
中。使用RefreshIndicator
控件实现了下拉刷新的功能,当用户下拉列表时,会触发fetchNews
方法重新加载数据。这里的NetworkHandler.getNews()
是假设我们已经实现了网络请求的相关代码。
注意:这个例子假设你已经有了处理新闻数据和网络请求的相关类和方法。在实际应用中,你需要根据你的API和数据模型来修改和完善这些部分。
评论已关闭