【问题标题】:Flutter app show White screen in release app mode?Flutter应用程序在发布应用程序模式下显示白屏?
【发布时间】:2021-02-11 15:27:16
【问题描述】:

我在颤振应用程序中遇到了非常奇怪的问题!在调试模式下测试我的应用程序时,它在发布模式下工作正常,它显示白屏。此应用程序已在 Playstore 中发布。几天后我改变了这个应用程序。我想发布第二个版本。当我尝试构建发布 apk 时,它在调试模式下显示白屏工作正常。为什么会这样?是flutter版本问题吗?

这里是代码

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:tv/Online.dart';
import 'package:tv/paypal.dart';
import 'package:url_launcher/url_launcher.dart';


class Donateus extends StatefulWidget {
  @override
  _DonateusState createState() => _DonateusState();
}

class _DonateusState extends State<Donateus> {
  bool _isExpandedonline=false;
  bool _isExpandedpaypal=false;
  bool _isExpandedetransfer=false;
  bool _isExpandedtexttogive=false;

  void customLaunch(command) async {
    if (await canLaunch(command)) {
      await launch(command);
    } else {
      print(' could not launch $command');
    }
  }
  @override
  void initState() {
    // TODO: implement initState
    super.initState();

  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        scrollDirection: Axis.vertical,
        child:Padding(
          padding: EdgeInsets.all(10),

          child: Container(
            child:Expanded(
              child: Column(
                children: <Widget>[
                  Text(
                    'WAYS TO DONATE',
                    style: TextStyle(
                      fontFamily: 'TT NORMS',
                      fontSize: 20,
                      fontWeight: FontWeight.w100,
                    ),


                  ),
                  Padding(
                    padding: EdgeInsets.only(left: 10),
                    child: Text(
                      'All of our Donations are processed through Cornerstone Asian Church.We are a registered Canadian Charity (842869265RR0001). A Canadian Tax-deductible receipt will be issued to you.',
                      style: TextStyle(

                          fontSize: 14
                      ),
                    ),
                  ),
                  Padding(
                    padding: EdgeInsets.only(left: 10),
                    child: ExpansionTile(
                        onExpansionChanged: (value) {
                          _isExpandedonline=value;
                          setState(() {});
                        },
                        children: <Widget>[
                          Text(
                            'Give a single gift, or schedule a recurring amount by using your Credit cards (i.e Mastercard, VISA, AMEX).'
                                'Note: Cornerstone uses the giving provider, Tithe.ly to securely process online donations from all over the world. Our Church will cover all associated fees for this service which are 2.5% + 15 cents (CAD) for all  Credit Cards. AMEX is 3.5% + 30 cents (CAD). However, if you wish to cover the fees as well, you can click on the option to "Cover Fees".',style: TextStyle(

                            fontSize: 14,


                          ),)
                        ],

                        title: Row(
                          children: <Widget>[
                            Image.asset(
                              'images/online.png',
                            ),
                            GestureDetector(
                              onTap: () {
                                Navigator.push(
                                  context,
                                  MaterialPageRoute(
                                      builder: (context) => Online()),
                                );
                              },
                              child: Text(

                                'Online Giving',
                                style: TextStyle(
                                  fontFamily: 'TT NORMS',
                                  fontSize: 18,
                                  fontWeight: FontWeight.w100,
                                  color: _isExpandedonline ? Colors.amber[800] : Colors.black,

                                ),


                              ),

                            )

                          ],


                        )),

                  ),

                  Padding(
                    padding: EdgeInsets.only(left: 10),
                    child: ExpansionTile(
                        onExpansionChanged: (value) {
                          _isExpandedpaypal=value;
                          setState(() {});
                        },
                        children: <Widget>[
                          Text(
                            'You can send your funds through PayPal to email livinghopetv@cornerstoneasianchurch.com',style: TextStyle(
                            fontSize: 14,


                          ),)
                        ],
                        title: Row(
                          children: <Widget>[
                            Image.asset(
                              'images/paypal.png',
                            ),
                            Padding(
                              padding: EdgeInsets.only(left: 10),
                              child: Text(
                                'PAYPAL',
                                style: TextStyle(

                                  fontFamily: 'TT NORMS',
                                  color:_isExpandedpaypal ? Colors.amber[800] : Colors.black,
                                  fontSize: 18,
                                  fontWeight: FontWeight.w100,
                                ),
                              ),
                            ),
                            GestureDetector(
                              onTap: () {
                                Navigator.push(
                                  context,
                                  MaterialPageRoute(
                                      builder: (context) => paypal()),
                                );
                              },
                              child: Image.asset(
                                'images/donatebutton.png',
                                height: 33,
                              ),
                            )
                          ],
                        )),
                  ),
                  Padding(
                    padding: EdgeInsets.only(left: 10),

                    child: ExpansionTile(
                        onExpansionChanged: (value) {
                          _isExpandedetransfer=value;
                          setState(() {});
                        },
                        children: <Widget>[
                          Text(
                            'You can send your funds via Interac E-Transfer to email*',style: TextStyle(
                            fontSize: 14,


                          ),),

                          Text(
                            '
    cacoffering@gmail.com',
                            style: TextStyle(
                              color: Colors.blue,
                              fontSize: 18,

                            ),
                          ),

                          Text(
                            '
    This is an auto-deposit account
    so you you do not have to set up any password.
    Please do indicate the Purpose for your donation.
    This service is only available within Canada.',style: TextStyle(
                            fontSize: 14,


                          ),),
                        ],
                        title: Row(
                          children: <Widget>[
                            Image.asset(
                              'images/etransfer.png',
                              height: 28,
                            ),
                            Text(
                              'INTERAC E-TRANSFER',
                              style: TextStyle(

                                fontFamily: 'TT NORMS',
                                fontSize: 18,
                                fontWeight: FontWeight.w100,
                                color:_isExpandedetransfer? Colors.amber[800] : Colors.black,

                              ),
                            ),
                          ],
                        )),
                  ),
                  Padding(
                    padding: EdgeInsets.only(left: 10),
                    child: ExpansionTile(
                        onExpansionChanged: (value) {
                          _isExpandedtexttogive=value;
                          setState(() {});
                        },
                        children: <Widget>[
                          Text('STEP 1: TEXT the word GIVE to',style: TextStyle(
                            fontSize: 14,


                          ),),
                          Text(
                            '(844) 329-1637',
                            style: TextStyle(
                              color: Colors.red,
                            ),
                          ),
                          SizedBox(
                            height: 20,
                          ),
                          Text(
                            'STEP 2: Complete the information on link received via TEXT for the first time only.',style:TextStyle(
                            fontSize: 14,


                          ),),
                          SizedBox(
                            height: 20,
                          ),
                          Text(
                            'STEP 3: Once you are setup for TEXT GIVING you can continue to TEXT the amount without having to fill your information again. Simply TEXT the amounti.e 10, 15 etc to the number directly.',style: TextStyle(
                            fontSize: 14,


                          ),)
                        ],
                        title: Row(
                          children: <Widget>[
                            Image.asset(
                              'images/text.png',
                              height: 30,
                            ),
                            GestureDetector(
                              onTap: () {
                                customLaunch('sms:8443291637');
                              },
                              child: Padding(
                                padding: EdgeInsets.only(left: 10),
                                child: Text(
                                  'TEXT TO GIVE',
                                  style: TextStyle(
                                    fontSize: 18,
                                    fontWeight: FontWeight.w100,
                                    fontFamily: 'TT NORMS',
                                    color:_isExpandedtexttogive? Colors.amber[800] : Colors.black,

                                  ),
                                ),
                              ),
                            )
                          ],
                        )),
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}

【问题讨论】:

  • 嗨,当我不正确地使用Expanded 小部件时,我遇到了同样的问题。你能分享你的代码吗?
  • @Yakhyo Mashrapov 校验码
  • 只需删除 Expanded 并将 `mainAxisSize: MainAxisSize.max,` 添加到 Column。希望这会有所帮助
  • @Yakhyo Mashrapov 你对它的扩展小部件错误

标签: flutter dart


【解决方案1】:

问题是你不能在child中使用Expand,这意味着一个扩展的小部件必须是后代或父级,在调试模式下,你可以清楚地看到Incorrect Usage of Parent Widget它会在调试模式下工作,但在发布时构建它将显示空白页,因此请注意上述警告或错误

使用不当

child: Container(
            child:Expanded(
              child: Column(

示例

Expanded(
      child: Container(),
    ),

在行/列中

Row(
  children: [
    Expanded(
      child: MyWidget(),
    ),
    Expanded(
      child:Text("Text Widget"),
    ),
  ],
)

【讨论】:

    【解决方案2】:

    很遗憾,导致此问题的原因可能不止一个。我经历过的一个问题是,对于 Android 版本,minifyEnabled 似乎默认打开。我设置了

    shrinkResources false
    minifyEnabled false
    useProguard false
    

    并且构建按预期运行。只需设置 useProguard true 和 others false 就可以像以前一样收缩代码;因为混淆。 更多内容见https://medium.com/@swav.kulinski/flutter-and-android-obfuscation-8768ac544421

    【讨论】:

    • 这工作谢谢!但是我们可以启用这些配置吗?
    • 我不确定您的意思是“启用这些配置”。这是对 Android 构建 gradle 文件的引用。您在寻找什么样的替代方案?
    【解决方案3】:

    在 android manifest 中检查 android.permission.INTERNET

    【讨论】:

    • #rstrelba 已经添加,就像我在第一个版本上工作时所说的那样,它工作正常并在第二个版本的 playstore 上成功上传我刚刚添加了推送通知,我尝试上传第二个版本,但是这个问题来了跨度>
    【解决方案4】:

    如果您在发布者或配置文件模式下出现这样的空白屏幕,那么小部件库异常应该在哪里。您可以在调试应用程序时在调试控制台中捕获异常。

    在您的代码中,我在SingleChildScrollView 中看到了无用的ContainerExpanded 小部件。考虑删除它们,它应该会有所帮助。

      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: SingleChildScrollView(
            scrollDirection: Axis.vertical,
            child:Padding(
              padding: EdgeInsets.all(10),
              child: Column(
                    children: ... 
                ),
              ),
            ),
        );
      }
    

    【讨论】:

    • 感谢您的回答也更正了它展开的小部件错误
    【解决方案5】:

    当我将 gradle 版本从 gradle-5.6.2-all 升级到 gradle-6.1.1-all 并构建 gradle com.android.tools.build:gradle:3.5.0 到 com.android.tools.build:gradle :4.0.1

    最后,我得到了我在 app/buidl.gradle 文件中添加的解决方案。

     buildTypes {
        release {
            signingConfig signingConfigs.debug
            shrinkResources false
            minifyEnabled false
            useProguard false
        }
    }
    

    【讨论】:

      【解决方案6】:

      我也遇到过同样的问题,这当然是我的错。我尝试更改 buildconfig.release 配置、不同的 gradle 版本、删除风味,但这是一个简单的异步错误,数据在初始化(获取)之前开始显示。

      调试模式下的应用程序运行良好,但在发布时它显示白屏。错误与真实原因完全不同:如果您点击白屏,则会出现这样的消息:

      E/flutter ( 6149): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: Null check operator used on a null value
      E/flutter ( 6149): #0      RenderBox.hitTest (package:flutter/src/rendering/box.dart:2234)
      E/flutter ( 6149): #1      RenderBoxContainerDefaultsMixin.defaultHitTestChildren.<anonymous closure> (package:flutter/src/rendering/box.dart:2596)
      E/flutter ( 6149): #2      BoxHitTestResult.addWithPaintOffset (package:flutter/src/rendering/box.dart:787)
      E/flutter ( 6149): #3      RenderBoxContainerDefaultsMixin.defaultHitTestChildren (package:flutter/src/rendering/box.dart:2591)
      E/flutter ( 6149): #4      RenderCustomMultiChildLayoutBox.hitTestChildren (package:flutter/src/rendering/custom_layout.dart:412)
      

      【讨论】:

        猜你喜欢
        • 2023-01-29
        • 2022-12-01
        • 2020-04-17
        • 2020-04-04
        • 2021-05-05
        • 1970-01-01
        • 2022-12-22
        • 2019-10-03
        • 2022-06-14
        相关资源
        最近更新 更多