Untitled
unknown
plain_text
2 years ago
3.0 kB
10
Indexable
import 'package:dicoding_news_app/article_list_page.dart';
import 'package:dicoding_news_app/styles.dart';
import 'package:dicoding_news_app/widgets/platform_widget.dart';
import 'package:flutter/cupertino.dart';
import 'article.dart';
import 'detail_page.dart';
import 'package:flutter/material.dart';
class HomePage extends StatefulWidget {
static const routeName = '/article_list';
const HomePage({Key? key}) : super(key: key);
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
int bottomNavIndex = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text(
'News App',
),
),
body: PlatformWidget(
androidBuilder: _buildAndroid, iosBuilder: _buildIos));
}
Widget _buildAndroid(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('News App Android'),
),
body: bottomNavIndex == 0 ? const ArticleListPage() : Container(),
bottomNavigationBar: BottomNavigationBar(
selectedItemColor: secondaryColor,
currentIndex: bottomNavIndex,
items: const [
BottomNavigationBarItem(icon: Icon(Icons.public), label: 'Headline'),
BottomNavigationBarItem(icon: Icon(Icons.settings), label: 'Settings')
],
onTap: ((selected) {
setState(() {
bottomNavIndex = selected;
});
}),
),
);
}
Widget _buildIos(BuildContext context) {
return CupertinoPageScaffold(
navigationBar: const CupertinoNavigationBar(
middle: Text('News App Ios'),
),
child: _buildList(context),
);
}
}
Widget _buildList(BuildContext context) {
return FutureBuilder<String>(
future: DefaultAssetBundle.of(context).loadString('assets/articles.json'),
builder: (context, snapshot) {
final List<Article> articles = parseArticles(snapshot.data);
return ListView.builder(
itemCount: articles.length,
itemBuilder: (context, index) {
return _buildArticleItem(context, articles[index]);
},
);
},
);
}
Widget _buildArticleItem(BuildContext context, Article article) {
return Material(
child: ListTile(
contentPadding:
const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
leading: Hero(
tag: article.urlToImage,
child: Image.network(
article.urlToImage,
width: 100,
),
),
title: Text(
article.title,
),
subtitle: Text(article.author),
onTap: () {
Navigator.pushNamed(context, ArticleDetailPage.routeName,
arguments: article);
},
),
);
}
Editor is loading...
Leave a Comment