How to Create News App with awesome UI in flutter using 'News API' and 'swiper', 'http' packages?


How to Create News App with awesome UI in flutter using 'News API' and 'swiper', 'http' packages? flutter tutorial | news app


Hii Flutter Developers...

In this article, I will explain to you about How to Create News App with awesome UI in flutter using 'News API' and 'swiper', 'http' packages,
we are going to build a news app like 'news republic', 'uc news app', 'uc browser news' etc.
But in this, we are going to use News Api ( free API ) for creating a news app with awesome UI.
We are using a swiper (flutter_swiper) package for creating beautiful looking Swiper, which automatically swipes news from right to left.

How to set up News API for our app?

Step By Step:-

1) Goto the News API console ( newsapi.org ), click on the Login button.
2) Enter your credentials.
3) After login, you will get your secret API key, which we can use with our API.


How to Create News App with awesome UI in flutter using 'News API' and 'swiper', 'http' packages? flutter tutorial | news app
free secret API Key


4) We need to use this API as shown in the below.


How to Create News App with awesome UI in flutter using 'News API' and 'swiper', 'http' packages? flutter tutorial | news app
News api 

How to Create a News App with awesome UI (User Interface)?

Step By Step:-

1) Remove all the previous code.
2) We need "flutter_swiper" and "http" package.
3) Goto the "swiper" (flutter_swiper package) (https://pub.dev/packages/flutter_swiper#build-in-layouts)
4) Copy the dependency and paste it in pubspec.yml file.


How to Create News App with awesome UI in flutter using 'News API' and 'swiper', 'http' packages? flutter tutorial | news app
pubspec.yml file

5) Import all the necessary packages.


How to Create News App with awesome UI in flutter using 'News API' and 'swiper', 'http' packages? flutter tutorial | news app
import packages


6) Use the InitState method to create a separate method for fetching all data from API.



How to Create News App with awesome UI in flutter using 'News API' and 'swiper', 'http' packages? flutter tutorial | news app
InitState method 


7) Create a separate method to fetch all data.


How to Create News App with awesome UI in flutter using 'News API' and 'swiper', 'http' packages? flutter tutorial | news app
separate method


8) We need to use the 'flutter_swiper' package for creating a beautiful user interface.


How to Create News App with awesome UI in flutter using 'News API' and 'swiper', 'http' packages? flutter tutorial | news app
flutter_swiper 


9) Use Stack widget for creating an awesome layout that looks like Cards.

10) Create a new dart page for showing details of news like title, author, description, publishedAt.


How to Create News App with awesome UI in flutter using 'News API' and 'swiper', 'http' packages? flutter tutorial | news app
detailspage.dart


12) Use Navigator to send data to the details page, so when the user clicks on particular news it will be redirected to the details page.


How to Create News App with awesome UI in flutter using 'News API' and 'swiper', 'http' packages? flutter tutorial | news app
Navigator.push

13) Create Constructor in detailspage.dart page for accepting data.


How to Create News App with awesome UI in flutter using 'News API' and 'swiper', 'http' packages? flutter tutorial | news app
Constructor in detailspage.dart


You may also like:- Create your first API using 'Deno' and fetch all the data from API in the Flutter app using 'http' package !!!


Video Tutorial :-




Whole code of main.dart page:-

import 'dart:convert';
import 'package:flutter_swiper/flutter_swiper.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import './detailspage.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List data;

  @override
  void initState() {
    super.initState();
    fetch_data_from_api();
  }

  Future<String> fetch_data_from_api() async {
    var jsondata = await http.get(
        "http://newsapi.org/v2/everything?q=tech&apiKey=0b0b712f35b54dae9b147f3105cf60cc");
    var fetchdata = jsonDecode(jsondata.body);
    setState(() {
      data = fetchdata["articles"];
    });
    return "Success";
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: "News App",
        theme: ThemeData(
          primaryColor: Colors.white,
        ),
        home: Scaffold(
            appBar: AppBar(
              title: Text("News App"),
            ),
            body: Padding(
              padding: EdgeInsets.only(top: 30.0),
              child: Swiper(
                itemBuilder: (BuildContext context, int index) {
                  return InkWell(
                    onTap: () {
                      Navigator.push(
                          context,
                          MaterialPageRoute(
                              builder: (context) => DetailsPage(
                                    author: data[index]["author"],
                                    title: data[index]["title"],
                                    description: data[index]["description"],
                                    urlToImage: data[index]["urlToImage"],
                                    publishedAt: data[index]["publishedAt"],
                                  )));
                    },
                    child: Stack(
                      children: <Widget>[
                        Padding(
                          padding: EdgeInsets.all(10.0),
                          child: ClipRRect(
                            borderRadius: BorderRadius.only(
                              topLeft: Radius.circular(35.0),
                              topRight: Radius.circular(35.0),
                            ),
                            child: Image.network(
                              data[index]["urlToImage"],
                              fit: BoxFit.cover,
                              height: 400.0,
                            ),
                          ),
                        ),
                        Padding(
                          padding: EdgeInsets.fromLTRB(0.0, 350.0, 0.0, 0.0),
                          child: Container(
                            height: 200.0,
                            width: 400.0,
                            child: Material(
                              borderRadius: BorderRadius.circular(35.0),
                              elevation: 10.0,
                              child: Column(
                                children: <Widget>[
                                  Padding(
                                    padding: EdgeInsets.fromLTRB(
                                        20.0, 20.0, 10.0, 20.0),
                                    child: Text(
                                      data[index]["title"],
                                      style: TextStyle(
                                        fontSize: 25.0,
                                        fontWeight: FontWeight.bold,
                                      ),
                                    ),
                                  )
                                ],
                              ),
                            ),
                          ),
                        )
                      ],
                    ),
                  );
                },
                itemCount: data == null ? 0 : data.length,
                autoplay: true,
                viewportFraction: 0.8,
                scale: 0.9,
              ),
            )));
  }
}

You may also like:- How to Create a Music Player app in flutter using Firebase (Cloud firestore,firebase storage) and 'music_player' plugin ?


Whole code of detailspage.dart:-

import 'package:flutter/material.dart';

class DetailsPage extends StatefulWidget {
  String title, author, urlToImage, publishedAt, description;

  DetailsPage(
      {this.title,
      this.author,
      this.description,
      this.publishedAt,
      this.urlToImage});

  @override
  _DetailsPageState createState() => _DetailsPageState();
}

class _DetailsPageState extends State<DetailsPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        scrollDirection: Axis.vertical,
        child: Stack(
          children: <Widget>[
            Image.network(
              widget.urlToImage,
              fit: BoxFit.cover,
              width: MediaQuery.of(context).size.width,
              height: MediaQuery.of(context).size.height * 0.5,
            ),
            Padding(
              padding: EdgeInsets.fromLTRB(0.0, 350.0, 0.0, 0.0),
              child: Container(
                height: MediaQuery.of(context).size.height,
                width: MediaQuery.of(context).size.width,
                child: Material(
                  borderRadius: BorderRadius.circular(35.0),
                  child: Column(
                    children: <Widget>[
                      Padding(
                        padding: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 20.0),
                        child: Text(
                          widget.title,
                          style: TextStyle(
                            fontSize: 30.0,
                            fontWeight: FontWeight.bold,
                          ),
                        ),
                      ),
                      Text(
                        widget.publishedAt.substring(0, 10),
                        style: TextStyle(
                          fontSize: 20.0,
                        ),
                      ),
                      Padding(
                        padding: EdgeInsets.all(20.0),
                        child: Text(
                          widget.description,
                          style: TextStyle(
                            fontSize: 25.0,
                          ),
                        ),
                      ),
                      Text(
                        widget.author,
                        style: TextStyle(
                          fontSize: 15.0,
                        ),
                      ),
                    ],
                  ),
                ),
              ),
            )
          ],
        ),
      ),
    );
  }
}

Output:-

How to Create News App with awesome UI in flutter using 'News API' and 'swiper', 'http' packages? flutter tutorial | news app



You May Also like:- How to create Tinder Swipe Cards in Flutter using 'flutter_tindercard' package ?

Thank you guys for spending your valuable time in reading this article, if you have any doubts please ask me those doubts in the comment section below.