flutter - 我在颤振项目中遇到 Hive 错误
问题描述
这是我的 Main.dart 文件。在这里,我在主屏幕中打开名为添加表单的框。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Hive.initFlutter();
//registering adapter that was created
Hive.registerAdapter(AddFormAdapter());
//opening box
//loading all of our key value pairs from local storage into our memory, so that we have immediate access.
await Hive.openBox<AddForm>('addForm');
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: TabsScreen(),
);
}
}
这是我的 Hive 模型类。List Widget 字段是否在此处键入问题?有可能创造出这样的东西吗?
import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
part 'addForm.g.dart';
@HiveType(typeId: 0)
class AddForm extends HiveObject {
@HiveField(0)
String title;
@HiveField(1)
String description;
@HiveField(2)
int fieldNumber;
@HiveField(3)
String question;
@HiveField(4)
List<Widget> fieldType;
@HiveField(5)
bool required;
AddForm({this.title, this.description, this.fieldType});
}
这是生成的适配器类。
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'addForm.dart';
// **************************************************************************
// TypeAdapterGenerator
// **************************************************************************
class AddFormAdapter extends TypeAdapter<AddForm> {
@override
final int typeId = 0;
@override
AddForm read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return AddForm()
..title = fields[0] as String
..description = fields[1] as String
..fieldNumber = fields[2] as int
..question = fields[3] as String
..fieldType = fields[4] as List<Widget>
..required = fields[5] as bool;
}
@override
void write(BinaryWriter writer, AddForm obj) {
writer
..writeByte(6)
..writeByte(0)
..write(obj.title)
..writeByte(1)
..write(obj.description)
..writeByte(2)
..write(obj.fieldNumber)
..writeByte(3)
..write(obj.question)
..writeByte(4)
..write(obj.fieldType)
..writeByte(5)
..write(obj.required);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is AddFormAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
这就是我想打开我的盒子的地方。这是一个底部导航栏,我想在其中打开并阅读我的一个选项卡上的一个框,但不幸的是它抛出了一些错误。
class TabsScreen extends StatefulWidget {
const TabsScreen({Key key}) : super(key: key);
@override
_TabsScreenState createState() => _TabsScreenState();
}
class _TabsScreenState extends State<TabsScreen> {
int _selectedPageIndex = 0;
void _selectPage(int index) {
setState(() {
_selectedPageIndex = index;
});
}
final List<Widget> _pages = [
// FormsPage(),
FutureBuilder(
future: Hive.openBox('addForm'),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return Center(child: Text(snapshot.error.toString()));
} else
return FormsPage();
} else
return Scaffold();
},
),
QuizzesPage(),
AddFormsPage(),
DraftsPage(),
MorePage(),
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: _pages[_selectedPageIndex],
// floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
bottomNavigationBar: BottomNavigationBar(
selectedItemColor: Helper.primary,
unselectedItemColor: Helper.secondary,
selectedLabelStyle: TextStyle(
fontSize: 15,
),
onTap: _selectPage,
currentIndex: _selectedPageIndex,
showUnselectedLabels: true,
type: BottomNavigationBarType.fixed,
elevation: 15.0,
items: [
BottomNavigationBarItem(
icon: Icon(
Icons.date_range_outlined,
),
label: 'Forms',
),
BottomNavigationBarItem(
icon: Icon(
Icons.note,
),
label: 'Quizzes',
),
BottomNavigationBarItem(
icon: Icon(
Icons.add_circle,
color: Helper.primary,
),
label: 'add',
),
BottomNavigationBarItem(
icon: Icon(
Icons.wifi_off,
),
label: 'Drafts',
),
BottomNavigationBarItem(
icon: Icon(
Icons.more_horiz_outlined,
),
label: 'More',
),
],
),
);
}
}
这是我在屏幕上遇到的错误。谁能告诉我我的代码有什么问题。
//Error
Hive Error: The box "add Form" is already open and of type Box<Add Form>
解决方案
推荐阅读
- java - 尝试使用 Erwin Vervaet 的框架存储时间集合并获取 ClassCastException
- scala - 使用 Tailrec 函数的 Scala 模式匹配
- javascript - 如何根据 URL 数据显示我的数据?
- azure - 如何使用 REST 向物联网边缘集线器发送消息?
- python-3.x - 如何在 ebay api 中为美国以外的网站使用 GetSuggestedCategories 功能
- java - 非易失性变量的顺序线程运行是否保证可见性?
- r - NAMESPACE 依赖项:rlang、dplyr 或其他任何东西
- ruby-on-rails - 使用正则表达式数组在 Ruby 中使用“gsub”转换字符串
- ruby-on-rails - Rails 环境坏了 - 需要帮助修复
- flutter - 材质按钮 disabledColor 未在 Flutter 中显示输入的颜色