Add ability to delete an array entry
This commit is contained in:
parent
c44f3a7c7f
commit
7a5502fbf9
12 changed files with 72 additions and 10 deletions
|
@ -1 +1 @@
|
|||
const VERSION = "1.0724.24+1429";
|
||||
const VERSION = "1.0727.24+1730";
|
||||
|
|
|
@ -6,11 +6,15 @@ import 'package:flutter_treeview/flutter_treeview.dart';
|
|||
import 'package:libac_dart/nbt/NbtIo.dart';
|
||||
import 'package:libac_dart/nbt/SnbtIo.dart';
|
||||
import 'package:libac_dart/nbt/Tag.dart';
|
||||
import 'package:libac_dart/nbt/impl/ByteArrayTag.dart';
|
||||
import 'package:libac_dart/nbt/impl/CompoundTag.dart';
|
||||
import 'package:libac_dart/nbt/impl/IntArrayTag.dart';
|
||||
import 'package:libac_dart/nbt/impl/LongArrayTag.dart';
|
||||
import 'package:nbteditor/Constants.dart';
|
||||
import 'package:nbteditor/Consts2.dart';
|
||||
import 'package:nbteditor/SessionData.dart';
|
||||
import 'package:nbteditor/main.dart';
|
||||
import 'package:nbteditor/tags/ArrayEntry.dart';
|
||||
import 'package:nbteditor/tags/CompoundTag.dart';
|
||||
import 'package:nbteditor/tags/Tag.dart';
|
||||
|
||||
|
@ -219,10 +223,37 @@ class EditorState extends State<Editor> {
|
|||
nodeBuilder: (context, node) {
|
||||
if (node.data is Tag) {
|
||||
return TagExt.render(node.data as Tag, context, didChangeState);
|
||||
} else {
|
||||
} else if (node.data is ArrayEntry) {
|
||||
ArrayEntry entry = node.data as ArrayEntry;
|
||||
return ListTile(
|
||||
title: Text(node.label),
|
||||
title: Text(entry.value),
|
||||
trailing: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
// Delete entry
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
if (entry.parent is ByteArrayTag) {
|
||||
ByteArrayTag bat = entry.parent as ByteArrayTag;
|
||||
bat.value.removeAt(entry.index);
|
||||
}
|
||||
if (entry.parent is IntArrayTag) {
|
||||
IntArrayTag iat = entry.parent as IntArrayTag;
|
||||
iat.value.removeAt(entry.index);
|
||||
}
|
||||
if (entry.parent is LongArrayTag) {
|
||||
LongArrayTag lat = entry.parent as LongArrayTag;
|
||||
lat.value.removeAt(entry.index);
|
||||
}
|
||||
|
||||
didChangeState();
|
||||
},
|
||||
child: Icon(Icons.delete_forever))
|
||||
],
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return ListTile(title: Text(node.label));
|
||||
}
|
||||
},
|
||||
controller: controller,
|
||||
|
|
|
@ -31,7 +31,7 @@ class PermissionsRequiredPage extends StatelessWidget {
|
|||
content: Text(
|
||||
"The storage permission is reporting it is permanently denied. Please open settings and allow that permission.")));
|
||||
} else if (stat.isGranted) {
|
||||
Future.delayed(const Duration(seconds: 5), () {
|
||||
Future.delayed(const Duration(seconds: 2), () {
|
||||
Navigator.pop(context);
|
||||
});
|
||||
}
|
||||
|
|
9
lib/tags/ArrayEntry.dart
Normal file
9
lib/tags/ArrayEntry.dart
Normal file
|
@ -0,0 +1,9 @@
|
|||
import 'package:libac_dart/nbt/Tag.dart';
|
||||
|
||||
class ArrayEntry {
|
||||
Tag parent;
|
||||
dynamic value;
|
||||
int index;
|
||||
|
||||
ArrayEntry({required this.parent, required this.value, required this.index});
|
||||
}
|
|
@ -3,12 +3,17 @@ import 'package:flutter_treeview/src/models/node.dart';
|
|||
import 'package:libac_dart/nbt/impl/ByteArrayTag.dart';
|
||||
import 'package:nbteditor/tags/Tag.dart';
|
||||
|
||||
import 'ArrayEntry.dart';
|
||||
|
||||
extension ByteArrayTagExt on ByteArrayTag {
|
||||
Node getNode(String path) {
|
||||
List<Node> entries = [];
|
||||
int count = 0;
|
||||
for (var element in value) {
|
||||
entries.add(Node(key: "$path/$count", label: "$element", data: element));
|
||||
entries.add(Node(
|
||||
key: "$path/$count",
|
||||
label: "$element",
|
||||
data: ArrayEntry(value: "${element}", parent: this, index: count)));
|
||||
count++;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter_treeview/src/models/node.dart';
|
||||
import 'package:libac_dart/nbt/impl/IntArrayTag.dart';
|
||||
|
||||
import 'ArrayEntry.dart';
|
||||
import 'Tag.dart';
|
||||
|
||||
extension IntArrayTagExt on IntArrayTag {
|
||||
|
@ -9,7 +10,10 @@ extension IntArrayTagExt on IntArrayTag {
|
|||
List<Node> entries = [];
|
||||
int count = 0;
|
||||
for (var element in value) {
|
||||
entries.add(Node(key: "$path/$count", label: "$element", data: element));
|
||||
entries.add(Node(
|
||||
key: "$path/$count",
|
||||
label: "$element",
|
||||
data: ArrayEntry(value: "${element}", parent: this, index: count)));
|
||||
count++;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_treeview/flutter_treeview.dart';
|
||||
import 'package:libac_dart/nbt/impl/LongArrayTag.dart';
|
||||
import 'package:nbteditor/tags/ArrayEntry.dart';
|
||||
|
||||
import 'Tag.dart';
|
||||
|
||||
|
@ -9,7 +10,10 @@ extension LongArrayTagExt on LongArrayTag {
|
|||
List<Node> entries = [];
|
||||
int count = 0;
|
||||
for (var element in value) {
|
||||
entries.add(Node(key: "$path/$count", label: "$element", data: element));
|
||||
entries.add(Node(
|
||||
key: "$path/$count",
|
||||
label: "$element",
|
||||
data: ArrayEntry(value: "${element}", parent: this, index: count)));
|
||||
count++;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue