Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振:在列表中删除错误的索引。排序()降序_Flutter_Dart - Fatal编程技术网

Flutter 颤振:在列表中删除错误的索引。排序()降序

Flutter 颤振:在列表中删除错误的索引。排序()降序,flutter,dart,Flutter,Dart,我有listviewBuilder,我想根据DateCreate用以下代码对我的listview进行排序 taskList.sort((a,b)=>-a.dateCreate.compareTo(b.dateCreate)) 一切正常,我可以看到我的列表排序(降序)基于DateCreate,但问题是每次我删除/更新列表时,操作都是错误的索引 它没有分类(工作) 正在使用排序(失败!!!) 如果在失败的gif中看到,我希望删除索引0,但索引1已删除。如果没有排序列表就可以了 我肯定通过了正确的

我有listviewBuilder,我想根据DateCreate用以下代码对我的listview进行排序

taskList.sort((a,b)=>-a.dateCreate.compareTo(b.dateCreate))

一切正常,我可以看到我的列表排序(降序)基于DateCreate,但问题是每次我删除/更新列表时,操作都是错误的索引

它没有分类(工作)

正在使用排序(失败!!!)

如果在失败的gif中看到,我希望删除索引0,但索引1已删除。如果没有排序列表就可以了

我肯定通过了正确的索引,因为在工作gif中,我可以成功地删除正确的索引

我怎样才能解决这个问题

ListviewBuilder源代码: 按下的功能:
class CardOddCustom扩展StatefulWidget{
最终日期时间任务;
最后的字符串标题;
最终字符串图像路径;
最终日期时间日期创建;
最终整数码图标;
最终int索引任务;
卡多德海关({
这个任务,
这个题目,
这个.imagePath,
这个.dateCreate,
这个.codeIcon,
这是indexTask,
});
@凌驾
_CardOddCustomState createState()=>\u CardOddCustomState();
}
类_CardOddCustomState扩展状态{
返回InkResponse(
onLongPress:()=>
taskProvider.deleteCategory(indexBox:widget.indexTask),
孩子:卡片(
形状:圆形矩形边框(
borderRadius:仅限borderRadius(
右上角:半径。圆形(80),
右下角:半径。圆形(80),
),
),

任务列表
是Hive.box的副本

taskList = box.values.toList().cast<TaskModel>();
您不使用
box.put
box.putAll
来保存更改
当您执行
hiveBox.deleteAt
时,它实际上与hiveBox中的序列一致

await hiveBox.deleteAt(indexBox);
当您放置/获取/删除时,可以使用

import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:path_provider/path_provider.dart';

class PersonAdapter extends TypeAdapter<Person> {
  @override
  final typeId = 1;

  @override
  Person read(BinaryReader reader) {
    var numOfFields = reader.readByte();
    var fields = <int, dynamic>{
      for (var i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
    };
    return Person()
      ..name = fields[0] as String
      ..age = fields[1] as int
      ..friends = (fields[2] as List)?.cast<String>();
  }

  @override
  void write(BinaryWriter writer, Person obj) {
    writer
      ..writeByte(3)
      ..writeByte(0)
      ..write(obj.name)
      ..writeByte(1)
      ..write(obj.age)
      ..writeByte(2)
      ..write(obj.friends);
  }
}

@HiveType(typeId: 1)
class Person {
  @HiveField(0)
  String name;

  @HiveField(1)
  int age;

  @HiveField(2)
  List<String> friends;

  @override
  String toString() {
    return '$name: $age';
  }
}

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  var dir = await getApplicationDocumentsDirectory();
  Hive
    ..init(dir.path)
    ..registerAdapter(PersonAdapter());

  var box = await Hive.openBox('testBox');

  var person = Person()
    ..name = 'Dave'
    ..age = 22
    ..friends = ['Linda', 'Marc', 'Anne'];

  var current = DateTime.now().toString();
  await box.put(current, person);

  print(box.get(current)); // Dave: 22
}
编辑

在官方示例中,当您放置
“dave”是put/get/delete的键

import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:path_provider/path_provider.dart';

class PersonAdapter extends TypeAdapter<Person> {
  @override
  final typeId = 1;

  @override
  Person read(BinaryReader reader) {
    var numOfFields = reader.readByte();
    var fields = <int, dynamic>{
      for (var i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
    };
    return Person()
      ..name = fields[0] as String
      ..age = fields[1] as int
      ..friends = (fields[2] as List)?.cast<String>();
  }

  @override
  void write(BinaryWriter writer, Person obj) {
    writer
      ..writeByte(3)
      ..writeByte(0)
      ..write(obj.name)
      ..writeByte(1)
      ..write(obj.age)
      ..writeByte(2)
      ..write(obj.friends);
  }
}

@HiveType(typeId: 1)
class Person {
  @HiveField(0)
  String name;

  @HiveField(1)
  int age;

  @HiveField(2)
  List<String> friends;

  @override
  String toString() {
    return '$name: $age';
  }
}

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  var dir = await getApplicationDocumentsDirectory();
  Hive
    ..init(dir.path)
    ..registerAdapter(PersonAdapter());

  var box = await Hive.openBox('testBox');

  var person = Person()
    ..name = 'Dave'
    ..age = 22
    ..friends = ['Linda', 'Marc', 'Anne'];

  var current = DateTime.now().toString();
  await box.put(current, person);

  print(box.get(current)); // Dave: 22
}
导入“包装:颤振/材料.省道”;
导入“package:hive/hive.dart”;
导入“package:path_provider/path_provider.dart”;
类PersonalAdapter扩展了TypeAdapter{
@凌驾
最终类型ID=1;
@凌驾
人员读取(二进制读取器){
var numofields=reader.readByte();
变量字段={
对于(var i=0;i
共享删除的代码片段item@Vamsi请查看我的更新。
wait-hiveBox.deleteAt()
仅接受int,但我的类型idTask是DateTime,不适合,但我尝试更改为
wait-hiveBox.delete(idTask)
它不起作用。在官方示例中,当你输入时,键是相同的,你如何处理输入?你可以将它用作键,在示例“dave”中,你可以看到我编辑的答案。这很有意义,我使用
wait hiveBox.add()
添加数据。///使用自动递增键保存[value]。未来添加(E值);源代码说添加使用自动递增键在您的情况下,我建议使用put(键,您的数据)并将此键传递给delete函数
taskList.sort((a, b) => -a.dateCreate.compareTo(b.dateCreate));
await hiveBox.deleteAt(indexBox);
import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:path_provider/path_provider.dart';

class PersonAdapter extends TypeAdapter<Person> {
  @override
  final typeId = 1;

  @override
  Person read(BinaryReader reader) {
    var numOfFields = reader.readByte();
    var fields = <int, dynamic>{
      for (var i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
    };
    return Person()
      ..name = fields[0] as String
      ..age = fields[1] as int
      ..friends = (fields[2] as List)?.cast<String>();
  }

  @override
  void write(BinaryWriter writer, Person obj) {
    writer
      ..writeByte(3)
      ..writeByte(0)
      ..write(obj.name)
      ..writeByte(1)
      ..write(obj.age)
      ..writeByte(2)
      ..write(obj.friends);
  }
}

@HiveType(typeId: 1)
class Person {
  @HiveField(0)
  String name;

  @HiveField(1)
  int age;

  @HiveField(2)
  List<String> friends;

  @override
  String toString() {
    return '$name: $age';
  }
}

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  var dir = await getApplicationDocumentsDirectory();
  Hive
    ..init(dir.path)
    ..registerAdapter(PersonAdapter());

  var box = await Hive.openBox('testBox');

  var person = Person()
    ..name = 'Dave'
    ..age = 22
    ..friends = ['Linda', 'Marc', 'Anne'];

  var current = DateTime.now().toString();
  await box.put(current, person);

  print(box.get(current)); // Dave: 22
}