#flutter #android-studio #flutter-layout #flutter-dependencies #flutter-web
Вопрос:
я получаю нулевую ошибку в кнопке flutter, которая перестала работать после добавления оператора if внутри ontap, вот мой код flutter
import 'package:efood_multivendor/controller/product_controller.dart';
import 'package:efood_multivendor/util/dimensions.dart';
import 'package:flutter/material.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:get/get_instance/src/extension_instance.dart';
import 'package:get/get_utils/src/extensions/internacionalization.dart';
import 'custom_snackbar.dart';
class QuantityButton extends StatelessWidget {
final bool isIncrement;
final Function onTap;
final int quantity;
final int stock;
QuantityButton(
{@required this.isIncrement,
@required this.onTap,
@required this.quantity,
@required this.stock});
@override
Widget build(BuildContext context) {
return InkWell(
onTap : onTap({
if (!isIncrement amp;amp; quantity > 1) {
Get.find<ProductController>().setQuantity(false),
} else if (isIncrement) {
if (quantity < stock) {
Get.find<ProductController>().setQuantity(true),
} else {
showCustomSnackBar('out_of_stock'.tr),
}
}
}),
child: Container(
height: 22,
width: 22,
margin: EdgeInsets.symmetric(horizontal: Dimensions.PADDING_SIZE_SMALL),
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
width: 1,
color: isIncrement
? Theme.of(context).primaryColor
: Theme.of(context).disabledColor),
color: isIncrement
? Theme.of(context).primaryColor
: Theme.of(context).disabledColor.withOpacity(0.2),
),
alignment: Alignment.center,
child: Icon(
isIncrement ? Icons.add : Icons.remove,
size: 15,
color: isIncrement
? Theme.of(context).cardColor
: Theme.of(context).disabledColor,
),
),
);
}
}
ошибка : если я попытаюсь удалить оператор if и добавить onTap:onTap
, что он работает, я получаю Another exception was thrown: NoSuchMethodError: '<Unexpected Null Value>'
ошибку, кнопка все еще не работает
, а также попробовал этот метод, но все еще показывает то же самое, и onTap не работает
onTap : (){
if (!isIncrement amp;amp; quantity > 1) {
Get.find<ProductController>().setQuantity(false);
} else if (isIncrement) {
if (quantity < stock) {
Get.find<ProductController>().setQuantity(true);
} else {
showCustomSnackBar('out_of_stock'.tr);
}
} ```
Комментарии:
1. Не могли бы вы вкратце объяснить, чего вы здесь пытаетесь достичь?
2. Функция onTap не работает
Ответ №1:
Это связано onTap
с тем, что для параметра требуется VoidCallback
объект, и вы объявляете его двумя способами:
Функция выброса. Специфичен для данного виджета и не может быть вызван другими.
onTap : (){
... your code ...
}
или объявить новую функцию таким образом
void yourFunction(){
... your code ...
}
и используйте эту функцию в своей кнопке
onTap : yourFunction
Этот второй способ позволяет вам вызывать функцию из другого виджета