Flutter: error de desbordamiento de píxeles al iniciar el teclado

Hay un error de desbordamiento de píxeles muy común en Flutter cuando hay demasiados widgets en una columna y no pueden mostrarse completamente cuando se abre el teclado, entonces se reciben este tipo de errores de desbordamiento de píxeles. Ejemplo :

El código para esta interfaz de usuario es:

Dart

import 'package:flutter/material.dart';
  
import 'components.dart';
  
void main() {
  runApp(const MyApp());
}
  
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            mainAxisSize: MainAxisSize.max,
            children: [
              GFGLogo(),
              SizedBox(height: 50),
              MyTextField(label: "username"),
              SizedBox(height: 15),
              MyTextField(label: "password"),
              SizedBox(height: 15),
              MyTextField(label: "confirm password"),
              SizedBox(height: 50),
              MyButton(),
            ],
          ),
        ),
      ),
    );
  }
}

Solución :

La solución para resolver este error de desbordamiento es hacer que todo su widget o, en nuestro caso, la columna se pueda desplazar. Podemos hacerlo envolviendo nuestra Columna dentro de un SingleChildScrollView. Además, ajuste SingleChildScrollView con Center para que toda la interfaz de usuario esté centrada. Después de eso, todo funcionará bien y no habrá errores de desbordamiento.

Dart

import 'package:flutter/material.dart';
  
import 'components.dart';
  
void main() {
  runApp(const MyApp());
}
  
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Center(
            child: SingleChildScrollView(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                mainAxisSize: MainAxisSize.max,
                children: [
                  GFGLogo(),
                  SizedBox(height: 50),
                  MyTextField(label: "username"),
                  SizedBox(height: 15),
                  MyTextField(label: "password"),
                  SizedBox(height: 15),
                  MyTextField(label: "confirm password"),
                  SizedBox(height: 50),
                  MyButton(),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}

Producción:

Publicación traducida automáticamente

Artículo escrito por curiousyuvi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *