Faça uma interface de usuário do Amazon Clone App usando Flutter

Tempo de leitura: 3 minutes

Neste tutorial, vou mostrar como fazer esta interface de usuário simples, mas bonita, do Amazon Clone App. Claro, não vamos construir um aplicativo completo com serviço de back-end, método de pagamento e todas essas coisas. vamos nos concentrar apenas na IU. veremos como criar uma visualização de rolagem, como fazer uma barra de navegação inferior e como criar um widget customizado usando flutter.

 

Código fonte:

import 'dart:async';
import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    debugShowCheckedModeBanner: false,
    home: AmazonApp(),
  ));
}

class AmazonApp extends StatefulWidget {
  @override
  _AmazonAppState createState() => _AmazonAppState();
}

class _AmazonAppState extends State<AmazonApp> {
  // Aqui, vou criar um widget personalizado para a caixa de itens
  Widget Items(String name, String category, String imgUrl, String price) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: InkWell(
        // este widget tornará seu contêiner clicável
        onTap: () {},
        child: Container(
          width: 180.0,
          decoration: BoxDecoration(
            color: Colors.white,
            borderRadius: BorderRadius.circular(8.0),
          ),
          child: Column(
            children: [
              Image(
                image: NetworkImage(imgUrl),
                width: 170.0,
                height: 160.0,
                alignment: Alignment.center,
              ),
              Text(
                name,
                style: TextStyle(fontSize: 22.0),
              ),
              Text(
                category,
                style: TextStyle(
                  fontSize: 18.0,
                  color: Colors.grey,
                ),
              ),
              Text(
                "$price£",
                style: TextStyle(
                    fontSize: 22.0,
                    color: Color(
                      0xFFFF9900,
                    )),
              ),
            ],
          ),
        ),
      ),
    );
  }

  // Agora vou importar uma lista de imagens que coletei do site Unsplash e amazon
  // você pode escolher a imagem que deseja e adicioná-la à lista
  List<String> ImgUrl = [
    "https://in.jbl.com/on/demandware.static/-/Sites-masterCatalog_Harman/default/dw4a6e76c7/C150SI-black1-hero-1605x1605px.png",
    "https://purepng.com/public/uploads/large/samsung-galaxy-s10-prism-front-6bx.png",
    "https://www.mypinnacleview.com/wp-content/uploads/2017/07/macbook-pro-png.png",
    "https://static.bhphoto.com/images/images2500x2500/1574693242_1297189.jpg",
    "https://images-na.ssl-images-amazon.com/images/I/61fTX5TjAEL._UX569_.jpg",
    "https://images-eu.ssl-images-amazon.com/images/G/31/img17/PC/sprocket/Tile-2-1._SS200_.jpg",
    "https://images-eu.ssl-images-amazon.com/images/I/51JKnkxCl7L._AC_SX184_.jpg",
    "https://images-na.ssl-images-amazon.com/images/I/710tUwxHq7L._UL1500_.jpg",
    "https://images-na.ssl-images-amazon.com/images/I/61LQQSc9fZL._UL1440_.jpg",
  ];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Color(0xFF10161D),
      appBar: AppBar(
        backgroundColor: Color(0xFF222e3D),
        title: Text(
          "Amazon",
          style: TextStyle(
            color: Color(0xFFFF9900),
          ),
        ),
        centerTitle: true,
        actions: [
          FlatButton(
            onssed: () {},
            child: Icon(
              Icons.shopping_cart,
              color: Colors.white,
            ),
          )
        ],
      ),
      body: SingleChildScrollView(
        child: Container(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            mainAxisAlignment: MainAxisAlignment.start,
            children: [
              Padding(
                padding: EdgeInsets.symmetric(horizontal: 38, vertical: 20.0),
                child: TextField(
                  decoration: InputDecoration(
                    contentPadding: EdgeInsets.all(20.0),
                    focusedBorder: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(4.0),
                      borderSide: BorderSide(color: Colors.transparent),
                    ),
                    prefixIcon: Icon(
                      Icons.search,
                      color: Colors.black,
                    ),
                    hintText: "Search...",
                    fillColor: Colors.white,
                    filled: true,
                  ),
                ),
              ),
              Padding(
                padding: const EdgeInsets.all(10.0),
                child: Text(
                  "New Items",
                  style: TextStyle(
                    color: Colors.white,
                    fontSize: 28.0,
                  ),
                ),
              ),
              //Now we will add the items list
              Container(
                width: double
                    .infinity, // esta linha fará com que o contêiner ocupe toda a largura do dispositivo
                height:
                    270.0, // quando você quiser criar uma lista, você deve precisar a altura e largura de seu contêiner
                child: ListView(
                  scrollDirection: Axis
                      .horizontal, // isso fará com que a lista role horizontalmente
                  children: [
                    //now let's add an item to test
                    Items("JBL headphones", "Audio", ImgUrl[0], "63.3"),
                    Items("Sumsung", "Smartphones", ImgUrl[1], "633.3"),
                    Items("MacBook pro", "Tech", ImgUrl[2], "1200.56"),
                    Items("Blue yeti", "Audio", ImgUrl[3], "123.3"),
                    //Observe que esta é a IU do aplicativo, mas você pode implementar facilmente um serviço de back-end por meio de uma API REST
                  ],
                ),
              ),
              // para a segunda parte do aplicativo é o mesmo princípio, então vamos apenas copiar os primeiros elementos
              // Vamos adicionar um pouco de espaço 
              SizedBox(
                height: 20.0,
              ),

              Padding(
                padding: const EdgeInsets.all(10.0),
                child: Text(
                  "Recomendado para você",
                  style: TextStyle(
                    color: Colors.white,
                    fontSize: 28.0,
                  ),
                ),
              ),
              Container(
                width: double
                    .infinity, // esta linha fará com que o recipiente ocupe toda a largura do dispositivo
                height:
                    270.0, // quando você quiser criar uma lista, você deve precisar a altura e largura de seu contêiner
                child: ListView(
                  scrollDirection: Axis
                      .horizontal, // isso fará com que a lista role horizontalmente
                  children: [
                    //agora vamos adicionar um item para testar
                    Items("Jacket", "Fashion", ImgUrl[4], "63.3"),
                    Items("IMac Pro", "Tech", ImgUrl[5], "6353.63"),
                    Items("Books", "Books", ImgUrl[6], "12.56"),
                    Items("Sunglasses", "Fashion", ImgUrl[7], "6.3"),
                    Items("Watch", "Fashion", ImgUrl[8], "600.9"),
                    //Observe que esta é a IU do aplicativo, mas você pode implementar facilmente um serviço de back-end por meio de uma API REST
                  ],
                ),
              ),
            ],
          ),
        ),
      ),

      //Agora vou adicionar uma barra de navegação inferior
      bottomNavigationBar: BottomNavigationBar(
        backgroundColor: Color(0xFF10161d),
        selectedItemColor: Color(0xFFFF9900),
        unselectedItemColor: Colors.white,
        items: [
          //você deve ter pelo menos 2 itens com o ícone e título ou você terá um erro
          BottomNavigationBarItem(
            icon: Icon(Icons.home),
            title: Text("Home"),
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.favorite),
            title: Text("Favorite"),
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.person),
            title: Text("Account"),
          ),
        ],
        //é isso para a interface do usuário, obrigado por assistir, se você quiser ver um tutorial completo
        //sobre como construir um aplicativo de compras totalmente funcional, basta colocá-lo no comentário
        //Não se esqueça de se inscrever;) <3
      ),
    );
  }
}