#android #ios #flutter #dart
Вопрос:
Я новичок в Трепете. Я пытаюсь разработать проект банковского приложения для IOS или Android. Я не понимаю, что означает эта ошибка. Я не вижу ничего, что можно было бы изменить в коде. И, когда я компилятор, я получаю эту ошибку:
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following _TypeError was thrown building HomeScreen(dirty, state: _HomeScreenState#e34f3):
type 'Null' is not a subtype of type 'String'
The relevant error-causing widget was:
HomeScreen file:///Users/berfin/VSCodeProjects/bankingapp/lib/main.dart:14:13
When the exception was thrown, this was the stack:
#0 operation.<anonymous closure> (package:bankingapp/models/operation.dart:12:51)
#1 MappedListIterable.elementAt (dart:_internal/iterable.dart:412:31)
#2 ListIterator.moveNext (dart:_internal/iterable.dart:341:26)
#3 new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:188:27)
#4 new _GrowableList.of (dart:core-patch/growable_array.dart:150:28)
#5 new List.of (dart:core-patch/array_patch.dart:50:28)
#6 ListIterable.toList (dart:_internal/iterable.dart:212:44)
#7 operation (package:bankingapp/models/operation.dart:14:6)
#8 operation (package:bankingapp/models/operation.dart)
#9 _HomeScreenState.build (package:bankingapp/screens/homescreen.dart:189:49)
#10 StatefulElement.build (package:flutter/src/widgets/framework.dart:4691:27)
#11 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4574:15)
#12 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4746:11)
#13 Element.rebuild (package:flutter/src/widgets/framework.dart:4267:5)
#14 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4553:5)
#15 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4737:11)
#16 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4548:5)
... Normal element mounting (24 frames)
#40 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3611:14)
#41 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6221:36)
#42 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6232:32)
... Normal element mounting (170 frames)
#212 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3611:14)
#213 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6221:36)
#214 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6232:32)
... Normal element mounting (345 frames)
#559 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3611:14)
#560 Element.updateChild (package:flutter/src/widgets/framework.dart:3363:18)
#561 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1189:16)
#562 RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1159:5)
#563 RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure>
(package:flutter/src/widgets/binding.dart:1104:18)
#564 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2535:19)
#565 RenderObjectToWidgetAdapter.attachToRenderTree
(package:flutter/src/widgets/binding.dart:1103:13)
#566 WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:937:7)
#567 WidgetsBinding.scheduleAttachRootWidget.<anonymous closure>
(package:flutter/src/widgets/binding.dart:917:7)
(elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
════════════════════════════════════════════════════════════════════════════════════════════════════
рабочий стол.дротик
Padding(
padding: EdgeInsets.only(
left: 16, bottom: 13, top: 29, right: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(
"Operation",
style: GoogleFonts.inter(
fontSize: 16,
fontWeight: FontWeight.w300,
color: kBlackColor),
),
Row(
children: map<Widget>(operation, (index, selected) {
return Container(
alignment: Alignment.centerLeft,
height: 9,
width: 9,
margin: EdgeInsets.only(right: 6),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: current == index
? kBlueColor
: kTwentyBlueColor),
);
}),
)
],
),
),
Container(
height: 123,
child: ListView.builder(
itemCount: operation.length,
padding: EdgeInsets.only(left: 16),
scrollDirection: Axis.horizontal,
itemBuilder: (context, index) {
return GestureDetector(
onTap: () {
setState(() {
current = index;
});
},
child: OperationCard(
operation: operation[index].name,
selectedItem: operation[index].selectedItem,
unselectedItem: operation[index].unselectedItem,
isSelected: current == index,
context: this),
);
}),
)
operation.dart (model)
class OperationModel {
String name;
String selectedItem;
String unselectedItem;
OperationModel(this.name, this.selectedItem, this.unselectedItem);
}
List<OperationModel> operation = operationData
.map(
(item) => OperationModel(
item['name'], item['selectedItem'], item['unselectedItem']), // ERROR IS HERE
)
.toList();
List<Map<String, dynamic>> operationData = [
{
"name": "MoneynTransfer",
"selectedItem": "assets/svg/money_transfer_white.svg",
"unselectedItem": "assets/svg/money_transfer_blue.svg"
},
{
"name": "BanknWithdraw",
"selectedItem": "assets/svg/bank_withdraw_white.svg",
"unselectedIcon": "assets/svg/bank_withdraw_blue.svg"
},
{
"name": "InsightnTracking",
"selectedItem": "assets/svg/insight_tracking_white.svg",
"unselectedItem": "assets/svg/insight_tracking_blue.svg"
},
];
Карточка операции (класс)
class OperationCard extends StatefulWidget {
final String operation;
final String selectedItem;
final String unselectedItem;
final bool isSelected;
_HomeScreenState context;
OperationCard(
{required this.operation,
required this.selectedItem,
required this.unselectedItem,
required this.isSelected,
required this.context});
@override
_OperationCardState createState() => _OperationCardState();
}
class _OperationCardState extends State<OperationCard> {
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.only(right: 16),
width: 123,
height: 123,
decoration: BoxDecoration(
boxShadow: [
BoxShadow(
color: kTenBlackColor,
blurRadius: 10,
spreadRadius: 5,
offset: Offset(8.0, 8.0))
],
borderRadius: BorderRadius.circular(15),
color: widget.isSelected ? kBlueColor : kWhiteColor),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SvgPicture.asset(
widget.isSelected ? widget.selectedItem : widget.unselectedItem),
SizedBox(
height: 9,
),
Text(
widget.operation,
textAlign: TextAlign.center,
style: GoogleFonts.inter(
fontSize: 15,
fontWeight: FontWeight.w700,
color: widget.isSelected ? kBlueColor : kWhiteColor),
)
],
),
);
}
}
Эта ошибка должна быть исправлена в ближайшее время, потому что я не могу продолжать этот проект. пожалуйста, помогите мне!! :):):):)
Комментарии:
1. dart.dev/нулевая безопасность прочтите эту статью
2. можете ли вы указать, в какой строке кода вы получаете ошибку? это будет здорово
3. О, хорошо. Я редактирую вопрос. (ошибка находится внутри операции.dart)
Ответ №1:
Попробуйте это:
OperationModel(
item['name']??"", item['selectedItem']?? "", item['unselectedItem']??""),
ошибка в том, что вы сохраняете null в строке, убедитесь , что null не передается, поэтому я добавил??, этот оператор проверяет, является ли переменная null, если да, то она передаст пустую строку вместо «».
Комментарии:
1. Я сделал это, но я получаю новую ошибку о SVG-изображении. Я не вижу никакого изображения svg в симуляторе IOS