我是一个完整的菜鸟扑所以这一个可能对你来说很容易.我正试图将Hive集成到我的应用程序,所以我可以在本地存储信息.然而,我不知道我会怎么做.这是我到目前为止,我是如此卡住.如果你能告诉我在代码中添加/删除/更改的东西,那将是伟大的.
主要功能
import 'package:flutter/material.dart';
import 'package:flutter_slidable/flutter_slidable.dart';
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
void main() async {
await Hive.initFlutter();
Hive.registerAdapter(TodoAdapter());
runApp(
MaterialApp(
debugShowCheckedModeBanner: false,
home: Builder(
builder: (context) {
return GestureDetector(
onTap: () {
FocusScope.of(context).unfocus();
},
child: const TodoApp(),
字符串
TODO CLASS ETC
class Todo {
final String text;
final bool checked;
int priority;
static int _tasknumber = 0;
final int key;
//TODO: UNDERSTAND THIS
Todo({
required this.text,
required this.checked,
required this.priority,
}) : key = _tasknumber++;
}
class TodoAdapter extends TypeAdapter<Todo> {
@override
final int typeId = 0;
@override
Todo read(BinaryReader reader) {}
@override
void write(BinaryWriter writer, Todo obj) {}
}
class TodoApp extends StatefulWidget {
const TodoApp({super.key});
@override
State<TodoApp> createState() => _TodoAppState();
}
class _TodoAppState extends State<TodoApp> {
final _textyController = TextEditingController();
List<Todo> data = [];
int? _radioValue = 1;
bool isEditing = false;
int editingIndex =
-1; // Initialize as -1 to indicate no active edit initially.
bool isContainerVisible = false;
bool settingsVisibility = false;
var box = await Hive.openBox<Todo>('todoBox');
box.add(yourTodo);
var todos = box.values.toList;
box.putAt(index, updatedTodo);
box.deleteAt(index);
await box.close;
final FocusNode _textFocus = FocusNode();
void dispose() {
_textFocus.dispose();
super.dispose();
}
@override
void initState() {
_textFocus.addListener(() {
setState(() {
isContainerVisible = _textFocus.hasFocus;
});
});
}
型
编辑/编辑功能
SlidableAction(
backgroundColor: Colors.green,
icon: Icons.edit,
//label: 'Edit',
onPressed: (context) => {
setState(() {
isEditing = true;
editingIndex = index;
_textyController.text =
data[index].text;
_radioValue = data[index].priority;
_textFocus.requestFocus();
}),
},
),
SlidableAction(
backgroundColor:
Colors.red[400] ?? Colors.red,
icon: Icons.delete_forever,
//label: 'Delete',
onPressed: (context) => {
setState(() {
if (isEditing &&
editingIndex >= 0 &&
editingIndex < data.length) {
isEditing = false;
_textyController.text = '';
_radioValue = 1;
Slidable.of(context)?.close();
}
deleteTasks(index, data[index]);
}),
},
),
型
向列表中添加新数据
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Radio(
value: 1,
groupValue: isEditing
? data[editingIndex].priority
: _radioValue,
onChanged: (changedRadio) {
setState(() {
if (isEditing) {
data[editingIndex].priority =
changedRadio ?? 1;
} else {
_radioValue = changedRadio;
}
_textFocus.requestFocus();
});
},
fillColor:
MaterialStateProperty.all(Colors.red),
),
//Text('High'),
],
),
child: TextField(
focusNode: _textFocus,
controller: isEditing
? TextEditingController(text: data[editingIndex].text)
: _textyController,
onSubmitted: (value) {
setState(() {
if (isEditing) {
data[editingIndex] = Todo(
text: value,
checked: data[editingIndex].checked,
priority: data[editingIndex].priority,
);
isEditing = false;
} else {
data.insert(
0,
Todo(
text: value,
checked: false,
priority: _radioValue ?? 0,
));
}
_textyController.clear();
_textFocus.requestFocus();
_textyController.selection = TextSelection.fromPosition(
TextPosition(offset: _textyController.text.length));
1条答案
按热度按时间wr98u20j1#
请在这里查看官方文档。
您可以在您的州创建一个新框,例如:
字符串
然后,要在小部件中获取todos,可以使用
ValueListenableBuilder
,如以下示例所示:https://pub.dev/packages/hive#hive--flutter型
但请记住,只有在添加以下pub时,
Box<E>
中的.listenable()
方法才可用:https://pub.dev/packages/hive_flutter