Advertisement
Nisanth-Reddy

Cats

May 19th, 2021
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. import 'dart:convert';
  2.  
  3. import 'package:http/http.dart' as http;
  4. import 'package:flutter/material.dart';
  5.  
  6. void main() {
  7. runApp(MaterialApp(title: 'Cats', home: CatsPage()));
  8. }
  9.  
  10. class CatsModel {
  11. final String caturl;
  12. final String catqfact;
  13.  
  14. CatsModel({this.caturl, this.catqfact});
  15.  
  16. factory CatsModel.fromJson(Map<String, dynamic> jsonData) {
  17. return CatsModel(caturl: jsonData['url'], catqfact: jsonData['fact']);
  18. }
  19. }
  20.  
  21. Future<List<CatsModel>> getCatData() async {
  22. var imagesUri = Uri.parse(
  23. 'https://api.thecatapi.com/v1/images/search?limit=10&page=1&order=Desc');
  24. var factsUri = Uri.parse('https://catfact.ninja/facts?limit=10');
  25.  
  26. var imagesResponse = await http.get(imagesUri);
  27. var factsResponse = await http.get(factsUri);
  28.  
  29. if (imagesResponse.statusCode == 200 && factsResponse.statusCode == 200) {
  30. List images = jsonDecode(imagesResponse.body);
  31. List facts = json.decode(factsResponse.body)['data'];
  32.  
  33. List<CatsModel> cats = [];
  34. for (int i = 0; i < images.length; i++) {
  35. cats.add(CatsModel(caturl: images[i]['url'], catqfact: facts[i]['fact']));
  36. }
  37. return cats;
  38. } else
  39. throw Exception('Json data download error');
  40. }
  41.  
  42. class CatsPage extends StatelessWidget {
  43. final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
  44. @override
  45. Widget build(BuildContext context) {
  46. return Scaffold(
  47. appBar: AppBar(title: Text('Cats')),
  48. body: FutureBuilder<List<CatsModel>>(
  49. future: getCatData(),
  50. builder: (_, snapshot) {
  51. if (snapshot.connectionState == ConnectionState.done) {
  52. return ListView.builder(
  53. itemCount: snapshot.data!.length,
  54. itemBuilder: (context, index) => ListTile(
  55. leading: CircleAvatar(
  56. foregroundImage:
  57. NetworkImage(snapshot.data[index].caturl),
  58. ),
  59. title: Text(snapshot.data[index].catqfact),
  60. ));
  61. } else
  62. return Container();
  63. }),
  64. );
  65. }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement