![](/img/trans.png)
[英]I/flutter ( 2680): type 'List<dynamic>' is not a subtype of type 'Map<dynamic, dynamic>' in type cast
[英]type 'List<dynamic>' is not a subtype of type 'List<Expense>?' in type cast
我使用 Hive 将日常开支存储在 feeBox 中,如下所示:
final String now = DateFormat('yyyyMMdd').format(DateTime.now());
List<Expense> todaysExpenses = Hive.box<List<Expense>>('expenses').get(now, defaultValue: []) as List<Expense>;
todaysExpenses.add(expense);
expenseBox.put(now, todaysExpenses);
当我向费用框添加新费用时,一切正常,并且我的费用显示正确。 但是,一旦我热重启,我就会收到以下错误。
这是我显示我的费用清单的代码。
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:intl/intl.dart';
import '/models/expense.dart';
import '/screens/add_expense_screen.dart';
class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key);
static const routeName = '/home_page';
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
late Box expenseBox;
late Box pocketBox;
List<Expense> mapped = [];
@override
void initState() {
expenseBox = Hive.box<List<Expense>>('expenses');
pocketBox = Hive.box<int>('pocket');
super.initState();
}
@override
Widget build(BuildContext context) {
return ValueListenableBuilder(
valueListenable: Hive.box<int>('pocket').listenable(),
builder: (context, Box<int> pocketBox, child) => Scaffold(
appBar: AppBar(
title: const Text('Expense Tracker'),
elevation: 0,
centerTitle: true,
),
body: NestedScrollView(
headerSliverBuilder: (context, _) => [
SliverAppBar(
expandedHeight: MediaQuery.of(context).size.height * 0.15,
flexibleSpace: FlexibleSpaceBar(
background: Container(
padding: const EdgeInsets.symmetric(horizontal: 10),
child: Row(
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text(
'Expense Tracker',
style: TextStyle(
fontSize: 14, color: Colors.white),
),
Text(
'${pocketBox.get('budget') ?? 0}',
style: const TextStyle(
fontSize: 18,
color: Colors.white,
fontWeight: FontWeight.bold),
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text(
'Income',
style: TextStyle(
fontSize: 14, color: Colors.white),
),
Text(
'${pocketBox.get('totalIncome') ?? 0}',
style: const TextStyle(
fontSize: 18,
color: Colors.white,
fontWeight: FontWeight.bold),
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text(
'Expense',
style: TextStyle(
fontSize: 14, color: Colors.white),
),
Text(
'${pocketBox.get('totalExpense') ?? 0}',
style: const TextStyle(
fontSize: 18,
color: Colors.white,
fontWeight: FontWeight.bold),
),
],
),
],
),
),
Expanded(child: Container()),
],
),
),
),
),
],
body: ValueListenableBuilder(
valueListenable: Hive.box<List<Expense>>('expenses').listenable(),
builder: (context, Box<List<Expense>> expensesBox, child) {
return ListView.separated(
separatorBuilder: (context, index) {
return const SizedBox(height: 20);
},
itemCount: expenseBox.length,
itemBuilder: (ctx, ind) {
final expense = expenseBox.getAt(ind) as List<Expense>;
return SizedBox(
height: 200,
child: ListView.builder(
itemCount: expenseBox.getAt(ind).length,
itemBuilder: (context, index) {
return ListTile(
title: Text(expense[index].name),
subtitle: Text(DateFormat('yyyyMMdd').format(expense[index].date)),
);
},
),
);
},
);
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => const AddExpenseScreen(
index: -1,
),
));
},
child: const Icon(Icons.add)),
),
);
}
}
这是整个错误代码
type 'List<dynamic>' is not a subtype of type 'List<Expense>?' in type cast
When the exception was thrown, this was the stack:
#0 BoxImpl.getAt (package:hive/src/box/box_impl.dart:57:41)
#1 _HomeScreenState.build.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:expense_tracker/screens/home_screen.dart:123:46)
#2 new ListView.separated.<anonymous closure> (package:flutter/src/widgets/scroll_view.dart:1260:34)
#3 SliverChildBuilderDelegate.build (package:flutter/src/widgets/sliver.dart:457:22)
#4 SliverMultiBoxAdaptorElement._build (package:flutter/src/widgets/sliver.dart:1215:28)
#5 SliverMultiBoxAdaptorElement.createChild.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1228:55)
#6 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2531:19)
#7 SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1221:12)
#8 RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:349:23)
#9 RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1962:59)
#10 PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:910:15)
#11 RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1962:14)
#12 RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:338:5)
#13 RenderSliverMultiBoxAdaptor.addInitialChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:422:5)
#14 RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:79:12)
#15 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#16 RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:137:12)
#17 RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:371:11)
#18 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#19 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:510:13)
#20 RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1580:12)
#21 RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1489:20)
#22 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#23 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#24 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#25 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#26 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#27 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#28 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#29 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#30 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#31 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#32 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#33 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#34 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#35 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#36 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#37 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#38 RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:545:11)
#39 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#40 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#41 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#42 RenderSliverFillRemainingWithScrollable.performLayout (package:flutter/src/rendering/sliver_fill.dart:92:14)
#43 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#44 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:510:13)
#45 RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1580:12)
#46 RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1489:20)
#47 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#48 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#49 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#50 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#51 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#52 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#53 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#54 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#55 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#56 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#57 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#58 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#59 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#60 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#61 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#62 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#63 RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:545:11)
#64 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#65 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#66 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#67 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
#68 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1005:7)
#69 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)
#70 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:403:14)
#71 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#72 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#73 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#74 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#75 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1376:11)
#76 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#77 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#78 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#79 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#80 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#81 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#82 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#83 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#84 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#85 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#86 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#87 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#88 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#89 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#90 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#91 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#92 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#93 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#94 RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3428:13)
#95 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#96 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#97 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#98 _RenderTheatre.performLayout (package:flutter/src/widgets/overlay.dart:751:15)
#99 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#100 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#101 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#102 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#103 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#104 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#105 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#106 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#107 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#108 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#109 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#110 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#111 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#112 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#113 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
#114 RenderView.performLayout (package:flutter/src/rendering/view.dart:165:14)
#115 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1707:7)
#116 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:879:18)
#117 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:497:19)
#118 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:883:13)
#119 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:363:5)
#120 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1145:15)
#121 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1082:9)
#122 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:863:7)
Hive 可以很好地处理原始数据类型,如文档https://docs.hivedb.dev/#/custom-objects/type_adapters中所述
但它对您在之前的会话中存储的序列化数据的类型了解不多。 它将能够在 session 期间正确处理实时数据,因为实时数据在 memory 中按原样定义、创建和存储。 但是在其他一些session中序列化和反序列化后,它就无法从原始类型之外的内容中猜出类型。
您必须为 hive 的数据类型创建类型适配器才能正确处理它们,或者您可以手动将反序列化数据转换为您自己的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.