Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Bottom Overflow By 540 Pixels

Fui testar o aplicativo virando a tela e percebi que ele quebra ao virar, como poderia solucionar esse problema?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Código do dashboard

import 'package:bytebank/screens/contacts_list.dart';
import 'package:flutter/material.dart';

class Dashboard extends StatelessWidget {
  const Dashboard({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Dashboard"),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Image.asset('lib/images/bytebank_logo.png'),
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Material(
              color: Colors.green.shade900,
              child: InkWell(
                onTap: () {
                  Navigator.of(context).push(
                    MaterialPageRoute(builder: (context) => ContactsList()),
                  );
                },
                child: Container(
                  padding: const EdgeInsets.all(8.0),
                  width: 150,
                  height: 100,
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: const [
                      Icon(
                        Icons.people,
                        size: 32.0,
                        color: Colors.white,
                      ),
                      Text(
                        'Contatos',
                        style: TextStyle(
                          color: Colors.white,
                          fontSize: 16.0,
                        ),
                      ),
                    ],
                  ),
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}


3 respostas

Olá, Breno! Tudo bem?

Esse erro acontece pois nessa orientação existem mais elementos do que realmente cabem na tela.

Uma forma de solucionar isso é usando o SingleChildScrollView como pai do seu Widget Column, dessa maneira quando tiver mais elementos do que o possível na tela, será criada uma barra de rolagem e a tela do seu app não terá mais problemas com isso.

O código ficará da seguinte:

class Dashboard extends StatelessWidget {
  const Dashboard({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Dashboard"),
      ),
      body: SingleChildScrollView(
        child: Column(
               //Conteudo da sua coluna         
            ),
        ),
    );
  }
}

Espero que tenha te ajudado, bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado. ✓

Foi a primeira coisa que tentei e deu certo, mas daí os cards sobem e o mainAxisAlignment: MainAxisAlignment.spaceBetween passa a ser ignorado, tentei de várias formas concertar mas não foi

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Breno, bom dia! Tudo bem?

Pesquisei um pouco sobre isso e uma das soluções que vi, a mais simples, seria adicionar um SizedBox(height: xx) entre os elementos que quer espaçar.

Outra solução também, mais interessante, seria usar o CustomScrollView, que te permite criar um "pedaço" (sliver) de tela com determinadas especificações. Abaixo como ficaria seu código utilizando ele:

class Dashboard extends StatelessWidget {
  const Dashboard({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Dashboard'),
      ),
      body: CustomScrollView(
        slivers: [
          SliverFillRemaining(
            hasScrollBody: false,
            child: Column(
                //Conteudo da sua coluna
            ),
          )
        ],
      ),
    );
  }
}

Estamos usando o CustomScrollView, dentro dele temos uma lista de slivers, onde colocamos apenas o SliverFillRemaining.

O SliverFillRemaining dimensiona o filho para preencher o eixo principal da tela (seja a orientação da tela vertical ou horizontal), ele irá conter um único filho, que deve preencher todo o espaço restante da tela. Ele deve ainda possuir a propriedade hasScrollBody setada como false, para que leve em consideração o tamanho do filho (nesse caso, a coluna) ao determinar até que ponto o espaço de tela deve ser preenchido.

Espero que tenha te ajudado de alguma forma, bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado. ✓

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software