释放存储时灰屏无误
Grey Screen when release to store without error
有一个浮动操作按钮,它会打开一个对话框。它在调试模式下工作正常,没有红色错误。但是我上传了 google 和应用程序商店,它显示灰色屏幕。然后我尝试使用 Flutter 运行 --release 在发布模式下 运行。它工作正常。我找不到任何错误或显示灰色屏幕的任何原因。
return Scaffold(
floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
floatingActionButton: floatButton(context, productsProvider),
);
Visibility floatButton(
BuildContext context, ProductsProvider productsProvider) {
return Visibility(
visible: MediaQuery.of(context).viewInsets.bottom == 0.0,
child: FloatingActionButton.extended(
onPressed: () async {
showDataAlert(context, productsProvider);
},
label: Text(
'Fiyat Gir',
style: TextStyle(
color: Colors.white,
fontSize: 14.sp,
),
),
),
);
}
我认为 showGeneralDialog 有一些东西可以停止在商店上工作。
showDataAlert(BuildContext context, ProductsProvider productsProvider) {
showGeneralDialog(
context: context,
barrierLabel: "Label",
barrierDismissible: true,
barrierColor: Colors.black.withOpacity(0.5),
transitionDuration: Duration(milliseconds: 500),
transitionBuilder: (context, anim1, anim2, child) {
return SlideTransition(
position:
Tween(begin: Offset(0, 1), end: Offset(0, 0)).animate(anim1),
child: child,
);
},
pageBuilder: (context, anim1, anim2) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(
Radius.circular(
20.r,
),
),
),
contentPadding: EdgeInsets.only(
top: 10.h,
),
title: Text(
"Fiyat Ekleme",
style: TextStyle(fontSize: 12.sp),
),
content: Container(
constraints: BoxConstraints(minHeight: 150.h),
//height: 400,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Container(
height: 60.h,
padding: EdgeInsets.all(8.r),
child: TextFormField(
key: companyName,
validator: (value) =>
value!.isEmpty ? "Lütfen bu alanı doldurunuz." : null,
decoration: InputDecoration(
prefixIcon: Icon(
Icons.store,
color: Colors.black,
size: 16.r,
),
// suffixIconConstraints: BoxConstraints(maxHeight: 1.h),
// suffixIcon: FaIcon(FontAwesomeIcons.starOfLife,
// color: Colors.red[400], size: 10.r),
labelText: 'İşletme Adı',
hintStyle: TextStyle(fontSize: 12.sp)),
),
),
Container(
height: 60.h,
padding: EdgeInsets.all(8.r),
child: TextField(
keyboardType:
TextInputType.numberWithOptions(decimal: true),
focusNode: _nodeText1,
// key: keyprice,
controller: price,
// validator: (value) => value!.isEmpty
// ? "Lütfen bu alanı doldurunuz."
// : null,
decoration: InputDecoration(
prefixIcon: Icon(
Icons.money_rounded,
color: Colors.black,
size: 16.r,
),
labelText: 'Ürün Fiyatı',
hintStyle: TextStyle(fontSize: 12.sp)),
),
),
Container(
width: double.infinity,
height: 60.h,
decoration:
BoxDecoration(borderRadius: BorderRadius.circular(20.r)),
padding: EdgeInsets.all(12.r),
child: ElevatedButton(
onPressed: () async {
if (companyName.currentState!.validate() == false ||
price.text.isEmpty) {
showToast('Lütfen mecburi alanları doldurunuz.',
context: context,
axis: Axis.horizontal,
alignment: Alignment.center,
duration: const Duration(seconds: 3),
backgroundColor: Colors.red[200],
position: StyledToastPosition.center);
} else {
buildShowDialogWithText(context, 'Fiyat Ekleniyor...');
productsProvider.marketPriceRequestModel.productName =
productsProvider.productTrackingResponseModel
.productName.isEmpty
? productName.currentState!.value
: productsProvider
.productTrackingResponseModel.productName;
productsProvider.marketPriceRequestModel.businessName =
companyName.currentState!.value;
productsProvider.marketPriceRequestModel.price =
double.parse(
price.text.replaceFirst(RegExp(','), '.'));
productsProvider.marketPriceRequestModel.barcode =
productsProvider.barcode;
productsProvider.marketPriceRequestModel.productImage =
image != null
? 'a,' +
base64Encode(
File(image!.path).readAsBytesSync())
: null;
await addPrice(productsProvider.barcode);
if (productsProvider.added) {
await productsProvider.getProductForPriceTracking(
productsProvider.barcode);
showToast('Ürün bilgisi eklendi.',
context: context,
axis: Axis.horizontal,
alignment: Alignment.center,
duration: const Duration(seconds: 3),
backgroundColor: Colors.green[200],
position: StyledToastPosition.center);
// Navigator.of(context).pushAndRemoveUntil(
// CupertinoPageRoute(
// builder: (context) => const BarcodeScanner()),
// (_) => false);
Navigator.pop(context, buildShowDialog);
Navigator.of(context).pop();
} else {
showToast('Ürün bilgisi eklenemedi.',
context: context,
axis: Axis.horizontal,
alignment: Alignment.center,
duration: const Duration(seconds: 3),
backgroundColor: Colors.red[200],
position: StyledToastPosition.center);
Navigator.pop(context, buildShowDialog);
}
}
},
style: ElevatedButton.styleFrom(
primary: Colors.green,
// fixedSize: Size(250, 50),
),
child: Text(
"Kaydet",
),
),
),
],
),
),
);
},
);
}
在调试菜单中标记这两个选项,您会在 device/emulator 上看到一个红色屏幕,这就是问题所在。尝试解决问题。
如果这不起作用,请尝试通过 运行 执行以下命令 运行 应用程序处于发布模式:
flutter run --release -v
并在 VS 代码中的终端中查看结果
有一个浮动操作按钮,它会打开一个对话框。它在调试模式下工作正常,没有红色错误。但是我上传了 google 和应用程序商店,它显示灰色屏幕。然后我尝试使用 Flutter 运行 --release 在发布模式下 运行。它工作正常。我找不到任何错误或显示灰色屏幕的任何原因。
return Scaffold(
floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
floatingActionButton: floatButton(context, productsProvider),
);
Visibility floatButton(
BuildContext context, ProductsProvider productsProvider) {
return Visibility(
visible: MediaQuery.of(context).viewInsets.bottom == 0.0,
child: FloatingActionButton.extended(
onPressed: () async {
showDataAlert(context, productsProvider);
},
label: Text(
'Fiyat Gir',
style: TextStyle(
color: Colors.white,
fontSize: 14.sp,
),
),
),
);
}
我认为 showGeneralDialog 有一些东西可以停止在商店上工作。
showDataAlert(BuildContext context, ProductsProvider productsProvider) {
showGeneralDialog(
context: context,
barrierLabel: "Label",
barrierDismissible: true,
barrierColor: Colors.black.withOpacity(0.5),
transitionDuration: Duration(milliseconds: 500),
transitionBuilder: (context, anim1, anim2, child) {
return SlideTransition(
position:
Tween(begin: Offset(0, 1), end: Offset(0, 0)).animate(anim1),
child: child,
);
},
pageBuilder: (context, anim1, anim2) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(
Radius.circular(
20.r,
),
),
),
contentPadding: EdgeInsets.only(
top: 10.h,
),
title: Text(
"Fiyat Ekleme",
style: TextStyle(fontSize: 12.sp),
),
content: Container(
constraints: BoxConstraints(minHeight: 150.h),
//height: 400,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Container(
height: 60.h,
padding: EdgeInsets.all(8.r),
child: TextFormField(
key: companyName,
validator: (value) =>
value!.isEmpty ? "Lütfen bu alanı doldurunuz." : null,
decoration: InputDecoration(
prefixIcon: Icon(
Icons.store,
color: Colors.black,
size: 16.r,
),
// suffixIconConstraints: BoxConstraints(maxHeight: 1.h),
// suffixIcon: FaIcon(FontAwesomeIcons.starOfLife,
// color: Colors.red[400], size: 10.r),
labelText: 'İşletme Adı',
hintStyle: TextStyle(fontSize: 12.sp)),
),
),
Container(
height: 60.h,
padding: EdgeInsets.all(8.r),
child: TextField(
keyboardType:
TextInputType.numberWithOptions(decimal: true),
focusNode: _nodeText1,
// key: keyprice,
controller: price,
// validator: (value) => value!.isEmpty
// ? "Lütfen bu alanı doldurunuz."
// : null,
decoration: InputDecoration(
prefixIcon: Icon(
Icons.money_rounded,
color: Colors.black,
size: 16.r,
),
labelText: 'Ürün Fiyatı',
hintStyle: TextStyle(fontSize: 12.sp)),
),
),
Container(
width: double.infinity,
height: 60.h,
decoration:
BoxDecoration(borderRadius: BorderRadius.circular(20.r)),
padding: EdgeInsets.all(12.r),
child: ElevatedButton(
onPressed: () async {
if (companyName.currentState!.validate() == false ||
price.text.isEmpty) {
showToast('Lütfen mecburi alanları doldurunuz.',
context: context,
axis: Axis.horizontal,
alignment: Alignment.center,
duration: const Duration(seconds: 3),
backgroundColor: Colors.red[200],
position: StyledToastPosition.center);
} else {
buildShowDialogWithText(context, 'Fiyat Ekleniyor...');
productsProvider.marketPriceRequestModel.productName =
productsProvider.productTrackingResponseModel
.productName.isEmpty
? productName.currentState!.value
: productsProvider
.productTrackingResponseModel.productName;
productsProvider.marketPriceRequestModel.businessName =
companyName.currentState!.value;
productsProvider.marketPriceRequestModel.price =
double.parse(
price.text.replaceFirst(RegExp(','), '.'));
productsProvider.marketPriceRequestModel.barcode =
productsProvider.barcode;
productsProvider.marketPriceRequestModel.productImage =
image != null
? 'a,' +
base64Encode(
File(image!.path).readAsBytesSync())
: null;
await addPrice(productsProvider.barcode);
if (productsProvider.added) {
await productsProvider.getProductForPriceTracking(
productsProvider.barcode);
showToast('Ürün bilgisi eklendi.',
context: context,
axis: Axis.horizontal,
alignment: Alignment.center,
duration: const Duration(seconds: 3),
backgroundColor: Colors.green[200],
position: StyledToastPosition.center);
// Navigator.of(context).pushAndRemoveUntil(
// CupertinoPageRoute(
// builder: (context) => const BarcodeScanner()),
// (_) => false);
Navigator.pop(context, buildShowDialog);
Navigator.of(context).pop();
} else {
showToast('Ürün bilgisi eklenemedi.',
context: context,
axis: Axis.horizontal,
alignment: Alignment.center,
duration: const Duration(seconds: 3),
backgroundColor: Colors.red[200],
position: StyledToastPosition.center);
Navigator.pop(context, buildShowDialog);
}
}
},
style: ElevatedButton.styleFrom(
primary: Colors.green,
// fixedSize: Size(250, 50),
),
child: Text(
"Kaydet",
),
),
),
],
),
),
);
},
);
}
在调试菜单中标记这两个选项,您会在 device/emulator 上看到一个红色屏幕,这就是问题所在。尝试解决问题。
如果这不起作用,请尝试通过 运行 执行以下命令 运行 应用程序处于发布模式:
flutter run --release -v
并在 VS 代码中的终端中查看结果