You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter登录页无法构建Center与Text组件问题求助

Fix for Missing Login Button Text & Unrendered Components in Flutter Login Page

Hey there, let's figure out why your login button's text isn't showing up and why no components after it are rendering—this is a common layout issue that's easy to fix!

The Root Cause

Looking at your login button code, the main problem is a conflict between the container's height and padding properties:

Container(
  height: 40,
  margin: EdgeInsets.symmetric(horizontal: 50),
  padding: EdgeInsets.all(20), // This is breaking things!
  decoration: BoxDecoration( color: Colors.purple.shade800, borderRadius: BorderRadius.circular(20)),
  child: Center( child: Text("LOGIN", style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)), ),
),

You set the container's height to 40 pixels, but added EdgeInsets.all(20) padding. That means the top and bottom padding alone take up 40 pixels—leaving zero space for the inner Center and Text widgets. Even worse, this causes a layout overflow error, which can make Flutter stop rendering any components that come after this broken container.

The Fix

We'll adjust the button's container to resolve this padding-height conflict. Here are two straightforward solutions:

Solution 1: Remove unnecessary padding

Since we're using Center to align the text, we don't need extra all-around padding. Just delete the padding property:

Container(
  height: 40,
  margin: EdgeInsets.symmetric(horizontal: 50),
  decoration: BoxDecoration( color: Colors.purple.shade800, borderRadius: BorderRadius.circular(20)),
  child: Center( child: Text("LOGIN", style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)), ),
),

Solution 2: Adjust padding and height for better spacing

If you want some internal button padding, increase the height and use horizontal padding instead of all-around padding:

Container(
  height: 50, // Increased height to fit padding + text
  margin: EdgeInsets.symmetric(horizontal: 50),
  padding: EdgeInsets.symmetric(horizontal: 20), // Only horizontal padding
  decoration: BoxDecoration( color: Colors.purple.shade800, borderRadius: BorderRadius.circular(20)),
  child: Center( child: Text("LOGIN", style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)), ),
),

Full Fixed Code

Here's the complete corrected code with Solution 1 applied, plus an example of a new component that will now render correctly:

void main() => runApp( MaterialApp( debugShowCheckedModeBanner:false, home: Background1(), ), );
class Background1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
//Whole screen
body: Container(
padding: EdgeInsets.all(20),
width: double.infinity,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
colors: [
Colors.purple.shade700,
Colors.purple.shade500,
Colors.purple.shade300,
],
),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
SizedBox (height: 80),
Padding(
padding: EdgeInsets.all(20),
child: Column(
children: <Widget>[
Text("LOGIN", style: TextStyle(color: Colors.white,fontSize: 40,fontWeight: FontWeight.bold)),
],
),
),
Expanded(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.only(topLeft: Radius.circular(20), topRight: Radius.circular(20),bottomLeft: Radius.circular(20),bottomRight: Radius.circular(20)),
color: Colors.transparent,
),
child: Padding(
padding: EdgeInsets.all(20),
child: Column(
children: <Widget>[
SizedBox( height: 20, ),
Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
boxShadow: [BoxShadow( color: Color.fromRGBO(225, 95, 27, 0.3), blurRadius: 20, offset: Offset(0,10), )],
),
child: Column(
children: <Widget>[
Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration( border: Border(bottom: BorderSide(color: Colors.grey[200])), ),
child: TextField(
decoration: InputDecoration( hintText: "Email or phone number", hintStyle: TextStyle(color: Colors.grey), border: InputBorder.none, ),
),
),
SizedBox(height: 10),
Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration( border: Border(bottom: BorderSide(color: Colors.grey[200])), ),
child: TextField(
decoration: InputDecoration( hintText: "Password", hintStyle: TextStyle(color: Colors.grey), border: InputBorder.none, ),
),
),
],
),
),
SizedBox(height: 40),
Text("Forgot Password?", style: TextStyle(color: Colors.white)),
SizedBox(height: 40),
// Fixed login button
Container(
height: 40,
margin: EdgeInsets.symmetric(horizontal: 50),
decoration: BoxDecoration( color: Colors.purple.shade800, borderRadius: BorderRadius.circular(20)),
child: Center( child: Text("LOGIN", style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)), ),
),
// New component that will now render correctly
SizedBox(height: 20),
Text("Don't have an account? Sign Up", style: TextStyle(color: Colors.white)),
],
),
),
),
),
],
),
),
),
);
}
}

Quick Tip

Always check the debug console or use Flutter DevTools to spot overflow errors—they'll directly point you to layout issues like this. When using fixed heights on containers, make sure the internal padding plus content fits within that height to avoid overflow.

内容的提问来源于stack exchange,提问作者Siba Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:32:43