Flutter - Imagens com ListView e Stack
Neste artigo veremos como exibir imagens em um ListView usando o widget Stack. |
|
O Flutter é um SDK de aplicativo móvel do Google que ajuda a criar aplicativos móveis modernos para iOS e Android usando uma única (quase) base de código.
Se você não conhece o Flutter veja o meu artigo : Flutter - Primeiros contatos e impressões
Exibindo Imagens no ListView
Eu já apresentei os widgets ListView e GridView nestes artigos:
Hoje veremos como exibir imagens de passários em uma lista rolável e para isso vamos usar o ListView.
Queremos exibir as imagens de alguns passáros e seus nomes e para isso vamos usar o widget Stack.
Criando o projeto Flutter
No Visual Studio Code tecle CTRL+ SHIFT+P para abrir a paleta de comandos e a seguir selecione a opção : Fluter:New Project;
A seguir informe o nome do projeto : flutter_circleimage e tecle ENTER;
Na janela de
diálogo a seguir selecione a pasta onde o projeto vai ser salvo e clique em :
Select a folder to create the project in;
O Flutter vai criar um projeto padrão onde todo o código da aplicação vai estar no arquivo main.dart dentro da pasta lib do projeto.
Vamos selecionar o arquivo main.dart e apagar todo o código gerado deixando o arquivo vazio.
A seguir inclua o código abaixo no arquivo main.dart para criar o leiaute padrão usando os Widgets MaterialApp e Scaffold :
import 'package:flutter/material.dart';
import 'Passaro.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
build(context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Pássaros',
home: Home()
);
}
}
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold( appBar: AppBar(
title: Text("Pássaros"),
),
body: _body()
);
}
_body() {
}
}
|
Vamos definir o código do projeto no método Body().
Como vamos exibir imagens locais de alguns pássaros, vamos criar a pasta Imagens no projeto e copiar algumas imagens para esta pasta. A seguir vamos definir no arquivo pubspec.yaml o local usado para exibir as imagens:
... assets - imagens .. |
Vamos criar a gora a classe Passaro no arquivo passaro.dart na pasta lib:
class Passaro {
String nome;
String imagem;
Passaro(String nome, String imagem)
{
this.nome = nome;
this.imagem = imagem;
}
}
|
Nesta classe definimos apenas o nome e a imagem do pássaro.
Agora temos que importar o arquivo passaro.dart no arquivo main.dart.
import 'passaro.dart'
Agora vamos incluir no método _body() o código que vai criar objetos do tipo Passaro e exibir suas imagens no ListView:
_body() {
List<Passaro> passaros = [
Passaro("Anu","imagens/anu.jpg"),
Passaro("Pardal","imagens/pardal.jpg"),
Passaro("Canário","imagens/canario.jpg"),
Passaro("Bem-Te-Vi","imagens/bem-te-vi.jpg"),
Passaro("Beija-Flor","imagens/beija-flor.jpg")
];
return ListView.builder(
itemCount: passaros.length,
itemExtent: 300,
itemBuilder: (BuildContext context, int index) {
Passaro passaro = passaros[index];
return _imagem(passaro.imagem);
},
);
}
_imagem(String img){
return Image.asset(
img,
fit: BoxFit.cover,
);
}
|
Neste código estamos exibindo as imagens no ListView usando o construtor builder e a propriedade itemExtent que força as imagens a ter um tamanho no valor definido na direção da rolagem (no nosso exemplo verticalmente).
Definimos também o método _imagem(String img) que retorna a imagem usando a configuração BoxFit.Cover.
Agora queremos exibir o nome do pássaro ao lado da imagem e para isso vamos usar o widget Stack alterando o código conforme abaixo:
_body() { List<Passaro> passaros = [ Passaro("Anu","imagens/anu.jpg"), Passaro("Pardal","imagens/pardal.jpg"), Passaro("Canário","imagens/canario.jpg"), Passaro("Bem-Te-Vi","imagens/bem-te-vi.jpg"), Passaro("Beija-Flor","imagens/beija-flor.jpg") ]; return ListView.builder(
itemCount: passaros.length,
itemExtent: 250,
itemBuilder: (BuildContext context, int index) {
return _itemView(passaros, index);
},
);
}
_itemView(List<Passaro> passaros, int index) {
Passaro passaro = passaros[index];
return Stack(
fit: StackFit.expand,
children: <Widget>[
_imagem(passaro.imagem),
Align(
alignment: Alignment.bottomRight,
child: Container(
margin: EdgeInsets.all(10),
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.circular(20)
),
child: Text(
passaro.nome,
style: TextStyle(fontSize: 30, color: Colors.white),
),
),
),
],
);
}
_imagem(String img){
return Image.asset(
img,
fit: BoxFit.cover,
);
}
|
Criamos o método _itemView(passaros, index); onde estamos retornando um Stack contendo a imagem e na imagem temos como filho o widget Container que usa um BoxDecoration para exibir o nome do passáro alinhado no fundo à direita.
Pegue o projeto dos arquivos aqui: main_passaros.dart
Ninguém
jamais viu a Deus; o Deus unigênito (Jesus), que está no seio do Pai, é quem o
revelou.
João
1:17,18
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Flutter - Lista Básica - Macoratti
Flutter - Apresentando o widget MaterialApp - Macoratti
Flutter - Apresentando Flutter Studio - Macoratti
Flutter - Apresentando Widgets - Macoratti
Flutter - Criando uma tela de login - Macoratti