#flutter #dart
#флаттер #dart
Вопрос:
Я столкнулся с очень странной проблемой в приложении flutter! Когда я тестирую свое приложение в режиме отладки, оно работает нормально, а в режиме выпуска отображается белый экран. Это приложение уже опубликовано в 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,
),
),
),
)
],
)),
),
],
),
),
),
),
),
);
}
}
Комментарии:
1. Привет, у меня была такая же проблема, когда я
Expanded
неправильно использовал виджет. Можете ли вы поделиться своим кодом?2. @ Yakhyo Mashrapov проверка кода
3. Просто удалите
Expanded
и добавьте `mainAxisSize: MainAxisSize.max` в столбец. Надеюсь, это поможет4. @Yakhyo Mashrapov вы исправили ошибку с расширенным виджетом
Ответ №1:
Проблема в том, что вы не можете использовать 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 и других false сократила код так же, как и раньше; из-за запутывания.
Подробнее см. https://medium.com/@swav.kulinski/flutter-and-android-obfuscation-8768ac544421
Комментарии:
1. Это работает, спасибо! но есть ли альтернатива, где мы можем включить эти конфигурации?
2. Я не уверен, что вы имеете в виду «включить эти конфигурации». Это ссылка на файл gradle сборки Android. Какую альтернативу вы ищете?
Ответ №3:
когда я обновляю версию 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
}
}
Ответ №4:
Проверьте android.разрешение.ИНТЕРНЕТ в манифесте Android
Комментарии:
1. #rstrelba уже добавлен, как я уже сказал, при работе над первой версией он работает нормально и успешно загружен в playstore во второй версии я просто добавил push-уведомление и пытаюсь загрузить его во вторую версию, но возникает эта проблема
Ответ №5:
Где должно быть исключение библиотеки виджетов, если вы получаете такой пустой экран в режиме выпуска или профиля. Вы можете перехватывать исключения в консоли отладки во время отладки приложения.
В вашем коде я вижу бесполезные Container
и Expanded
виджеты внутри SingleChildScrollView
. Подумайте о том, чтобы удалить их, это должно помочь.
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
scrollDirection: Axis.vertical,
child:Padding(
padding: EdgeInsets.all(10),
child: Column(
children: ...
),
),
),
);
}
Комментарии:
1. спасибо, что ваш ответ также исправил ошибку расширенного виджета
Ответ №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)