79 lines
2.3 KiB
Dart

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(),
);
}
}