Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'dart:convert';
- import 'package:http/http.dart' as http;
- import 'package:flutter/material.dart';
- void main() {
- runApp(MaterialApp(title: 'Cats', home: CatsPage()));
- }
- class CatsModel {
- final String caturl;
- final String catqfact;
- CatsModel({this.caturl, this.catqfact});
- factory CatsModel.fromJson(Map<String, dynamic> jsonData) {
- return CatsModel(caturl: jsonData['url'], catqfact: jsonData['fact']);
- }
- }
- Future<List<CatsModel>> getCatData() async {
- var imagesUri = Uri.parse(
- 'https://api.thecatapi.com/v1/images/search?limit=10&page=1&order=Desc');
- var factsUri = Uri.parse('https://catfact.ninja/facts?limit=10');
- var imagesResponse = await http.get(imagesUri);
- var factsResponse = await http.get(factsUri);
- if (imagesResponse.statusCode == 200 && factsResponse.statusCode == 200) {
- List images = jsonDecode(imagesResponse.body);
- List facts = json.decode(factsResponse.body)['data'];
- List<CatsModel> cats = [];
- for (int i = 0; i < images.length; i++) {
- cats.add(CatsModel(caturl: images[i]['url'], catqfact: facts[i]['fact']));
- }
- return cats;
- } else
- throw Exception('Json data download error');
- }
- class CatsPage extends StatelessWidget {
- final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- appBar: AppBar(title: Text('Cats')),
- body: FutureBuilder<List<CatsModel>>(
- future: getCatData(),
- builder: (_, snapshot) {
- if (snapshot.connectionState == ConnectionState.done) {
- return ListView.builder(
- itemCount: snapshot.data!.length,
- itemBuilder: (context, index) => ListTile(
- leading: CircleAvatar(
- foregroundImage:
- NetworkImage(snapshot.data[index].caturl),
- ),
- title: Text(snapshot.data[index].catqfact),
- ));
- } else
- return Container();
- }),
- );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement