Untitled
unknown
plain_text
2 years ago
3.0 kB
5
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