Flutter — ошибка переполнения пикселей при запуске клавиатуры
Опубликовано: 3 Сентября, 2022
Существует очень распространенная ошибка переполнения пикселей во Flutter, когда в столбце слишком много виджетов, и они не могут полностью отображаться при открытии клавиатуры, тогда получаются такие ошибки переполнения пикселей. Пример :
Код для этого пользовательского интерфейса:
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(), ], ), ), ), ); } } |
Решение :
Решение для устранения этой ошибки переполнения состоит в том, чтобы сделать весь виджет или, в нашем случае, столбец прокручиваемым. Мы можем сделать это, обернув наш столбец внутри SingleChildScrollView. Кроме того, оберните SingleChildScrollView с помощью Center, чтобы весь пользовательский интерфейс был центрирован. После этого все будет работать нормально и ошибок переполнения не будет.
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(), ], ), ), ), ), ), ); } } |
Выход: