簡體   English   中英

為什么我的 Flutter 應用程序在 IOS 模擬器上看起來很好,但在 Android 上卻溢出了?

[英]Why does my Flutter app look fine on the IOS emulator but overflow on Android?

我知道有不同的屏幕尺寸,但有沒有辦法解決這個問題? 我也不認為屏幕尺寸有什么不同。 Android的模擬器是nexus 6,IOS的模擬器是iphone 11,相差.14英寸。 IOS 版本很合適,而 Android 則溢出很多。 附上截圖。 iPhone模擬器

安卓模擬器

除了將所有東西壓得更緊之外,我該如何解決這個問題? 有沒有辦法讓一切都與屏幕尺寸成比例,所以它在 IOS 上看起來一樣,但隨后縮小到 Android 手機? 我的 Dart 代碼如下:

Widget build(BuildContext context) {
return MaterialApp(
  home: Scaffold(
    backgroundColor: Colors.teal,
    body: SafeArea(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Center(
            child: CircleAvatar(
              radius: 100.0,
              backgroundImage: AssetImage('images/headshot.jpg'),
            ),
          ),
          SizedBox(
            height: 0.0,
          ),
          Container(
            child: Text(
              'Lawrence Jing',
              style: TextStyle(
                  fontSize: 50,
                  color: Colors.white,
                  fontFamily: 'Dancing_Script'),
            ),
          ),
          SizedBox(
            height: 10.0,
          ),
          Container(
            child: Text(
              'SERTIFIED CASTING INTERN',
              style: TextStyle(
                  fontSize: 20,
                  color: Colors.white,
                  fontWeight: FontWeight.bold),
            ),
          ),
          Card(
            color: Colors.amberAccent,
            margin: EdgeInsets.fromLTRB(50, 10, 50, 10),
            child: ListTile(
              leading: Row(
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  Icon(Icons.school),
                  SizedBox(
                    width: 10.0,
                  ),
                  VerticalDivider(),
                ],
              ),
              title: Text(
                'University of Michigan',
                style: TextStyle(
                  color: Colors.blue,
                  fontSize: 19.0,
                  fontWeight: FontWeight.bold,
                ),
              ),
              enabled: false,
            ),
          ),
          SizedBox(
            height: 23.0,
            width: 200.0,
            child: Divider(
              color: Colors.teal[200],
            ),
          ),
          Card(
            color: Colors.white,
            margin: EdgeInsets.fromLTRB(50, 10, 50, 10),
            child: ListTile(
              leading: Icon(
                Icons.phone,
                color: Colors.teal,
              ),
              title: Text(
                '(650)278-7409',
                style: TextStyle(
                  color: Colors.teal[600],
                  fontSize: 20.0,
                  fontWeight: FontWeight.bold,
                ),
              ),
              enabled: true,
              onTap: () => launch("tel:+1234"),
              onLongPress: () => launch("sms: 1234"),
            ),
          ),
          SizedBox(
            height: 10.0,
          ),
          Card(
            color: Colors.white,
            margin: EdgeInsets.fromLTRB(50, 10, 50, 10),
            child: ListTile(
              leading: Icon(
                Icons.email,
                color: Colors.teal,
              ),
              title: Text(
                'lajing@umich.edu',
                style: TextStyle(
                  color: Colors.teal[600],
                  fontSize: 20.0,
                  fontWeight: FontWeight.bold,
                ),
              ),
              enabled: true,
              onTap: () => launch("mailto:email"),
            ),
          ),
          SizedBox(
            height: 10.0,
          ),
          Card(
            color: Colors.white,
            margin: EdgeInsets.fromLTRB(50, 10, 50, 10),
            child: ListTile(
              leading: Icon(
                Icons.account_circle,
                color: Colors.teal,
              ),
              title: Text(
                'LinkedIn',
                style: TextStyle(
                  color: Colors.teal[600],
                  fontSize: 20.0,
                  fontWeight: FontWeight.bold,
                ),
              ),
              enabled: true,
              onTap: () => launch("https://www.linkedin.com/in/lajing/"),
            ),
          ),
          SizedBox(
            height: 10.0,
          ),
          Card(
            color: Colors.white,
            margin: EdgeInsets.fromLTRB(50, 10, 50, 10),
            child: ListTile(
              leading: Icon(
                Icons.code,
                color: Colors.teal,
              ),
              title: Text(
                'GitHub',
                style: TextStyle(
                  color: Colors.teal[600],
                  fontSize: 20.0,
                  fontWeight: FontWeight.bold,
                ),
              ),
              enabled: true,
              onTap: () => launch("https://github.com/LarryJing"),
            ),
          ),
        ],
      ),
    ),
  ),
);}

如您所見,所有內容的大小幾乎都是硬編碼的。

您應該使用SingleChildScrollView作為Column的父級,因此如果空間不可用,那么它將可滾動(或者)您可以使用ListView而不是Column

例如

 @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        backgroundColor: Colors.teal,
        body: SafeArea(
          child: SingleChildScrollView(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Center(
                  child: CircleAvatar(
                    radius: 100.0,
                    backgroundImage: AssetImage('images/headshot.jpg'),
                  ),
                ),
                SizedBox(
                  height: 0.0,
                ),
                Container(
                  child: Text(
                    'Lawrence Jing',
                    style: TextStyle(
                        fontSize: 50,
                        color: Colors.white,
                        fontFamily: 'Dancing_Script'),
                  ),
                ),
                SizedBox(
                  height: 10.0,
                ),
                Container(
                  child: Text(
                    'SERTIFIED CASTING INTERN',
                    style: TextStyle(
                        fontSize: 20,
                        color: Colors.white,
                        fontWeight: FontWeight.bold),
                  ),
                ),
                Card(
                  color: Colors.amberAccent,
                  margin: EdgeInsets.fromLTRB(50, 10, 50, 10),
                  child: ListTile(
                    leading: Row(
                      mainAxisSize: MainAxisSize.min,
                      children: <Widget>[
                        Icon(Icons.school),
                        SizedBox(
                          width: 10.0,
                        ),
                        VerticalDivider(),
                      ],
                    ),
                    title: Text(
                      'University of Michigan',
                      style: TextStyle(
                        color: Colors.blue,
                        fontSize: 19.0,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    enabled: false,
                  ),
                ),
                SizedBox(
                  height: 23.0,
                  width: 200.0,
                  child: Divider(
                    color: Colors.teal[200],
                  ),
                ),
                Card(
                  color: Colors.white,
                  margin: EdgeInsets.fromLTRB(50, 10, 50, 10),
                  child: ListTile(
                    leading: Icon(
                      Icons.phone,
                      color: Colors.teal,
                    ),
                    title: Text(
                      '(650)278-7409',
                      style: TextStyle(
                        color: Colors.teal[600],
                        fontSize: 20.0,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    enabled: true,
                    onTap: () => launch("tel:+1234"),
                    onLongPress: () => launch("sms: 1234"),
                  ),
                ),
                SizedBox(
                  height: 10.0,
                ),
                Card(
                  color: Colors.white,
                  margin: EdgeInsets.fromLTRB(50, 10, 50, 10),
                  child: ListTile(
                    leading: Icon(
                      Icons.email,
                      color: Colors.teal,
                    ),
                    title: Text(
                      'lajing@umich.edu',
                      style: TextStyle(
                        color: Colors.teal[600],
                        fontSize: 20.0,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    enabled: true,
                    onTap: () => launch("mailto:email"),
                  ),
                ),
                SizedBox(
                  height: 10.0,
                ),
                Card(
                  color: Colors.white,
                  margin: EdgeInsets.fromLTRB(50, 10, 50, 10),
                  child: ListTile(
                    leading: Icon(
                      Icons.account_circle,
                      color: Colors.teal,
                    ),
                    title: Text(
                      'LinkedIn',
                      style: TextStyle(
                        color: Colors.teal[600],
                        fontSize: 20.0,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    enabled: true,
                    onTap: () => launch("https://www.linkedin.com/in/lajing/"),
                  ),
                ),
                SizedBox(
                  height: 10.0,
                ),
                Card(
                  color: Colors.white,
                  margin: EdgeInsets.fromLTRB(50, 10, 50, 10),
                  child: ListTile(
                    leading: Icon(
                      Icons.code,
                      color: Colors.teal,
                    ),
                    title: Text(
                      'GitHub',
                      style: TextStyle(
                        color: Colors.teal[600],
                        fontSize: 20.0,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    enabled: true,
                    onTap: () => launch("https://github.com/LarryJing"),
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }

由於您使用的是具有特定高度的SizedBox ,如果屏幕尺寸較小,它會溢出。您可以使用MediaQuery.of(context).size.heightSizedBox的高度用作百分比或屏幕總height

第二種方法是使用SpacerExpanded根據Column中的可用空間來分隔內容。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM