import 'package:flutter/material.dart'; import 'package:medium_feeds_example/article_tile.dart'; import 'package:wyatt_medium_feeds/wyatt_medium_feeds.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: const WidgetTree(), ); } } class ArticleGrid extends StatelessWidget { const ArticleGrid({Key? key}) : super(key: key); @override Widget build(BuildContext context) { final mediumFeed = MediumFeed.fromPublicationName('flutter'); return FutureBuilder( future: mediumFeed.parse(), builder: (context, snapshot) { if (snapshot.hasData) { final articles = mediumFeed.articles; return GridView.builder( gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, childAspectRatio: 1, ), itemCount: articles.length, itemBuilder: (context, index) { final article = articles[index]; return ArticleTile( bannerUrl: article.images.isNotEmpty ? article.images[0] : '', author: article.author, title: article.title, summary: article.summary, readingTime: article.readingTime.inMinutes.toString() + ' min read', publishDate: article.publishDate!.day.toString() + '/' + article.publishDate!.month.toString() + '/' + article.publishDate!.year.toString(), ); }, ); } else { return const Center(child: CircularProgressIndicator()); } }); } } class WidgetTree extends StatelessWidget { const WidgetTree({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Medium Feeds Example'), ), body: const ArticleGrid(), ); } }