mirror of
https://github.com/foss42/apidash.git
synced 2025-06-10 07:09:41 +08:00
fix: empty row when rows exist
This commit is contained in:
@ -17,7 +17,7 @@ class FormDataWidget extends ConsumerStatefulWidget {
|
|||||||
class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
||||||
late int seed;
|
late int seed;
|
||||||
final random = Random.secure();
|
final random = Random.secure();
|
||||||
late List<FormDataModel> rows;
|
late List<FormDataModel> formRows;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@ -28,7 +28,7 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
void _onFieldChange(String selectedId) {
|
void _onFieldChange(String selectedId) {
|
||||||
ref.read(collectionStateNotifierProvider.notifier).update(
|
ref.read(collectionStateNotifierProvider.notifier).update(
|
||||||
selectedId,
|
selectedId,
|
||||||
requestFormDataList: rows,
|
requestFormDataList: formRows.sublist(0, formRows.length - 1),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,12 +37,17 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
final selectedId = ref.watch(selectedIdStateProvider);
|
final selectedId = ref.watch(selectedIdStateProvider);
|
||||||
ref.watch(selectedRequestModelProvider
|
ref.watch(selectedRequestModelProvider
|
||||||
.select((value) => value?.requestFormDataList?.length));
|
.select((value) => value?.requestFormDataList?.length));
|
||||||
var formRows = ref.read(selectedRequestModelProvider)?.requestFormDataList;
|
var rF = ref.read(selectedRequestModelProvider)?.requestFormDataList;
|
||||||
rows =
|
bool isFormDataEmpty = rF == null || rF.isEmpty;
|
||||||
formRows == null || formRows.isEmpty ? [kFormDataEmptyModel] : formRows;
|
List<FormDataModel> rows = (isFormDataEmpty)
|
||||||
|
? [
|
||||||
|
kFormDataEmptyModel,
|
||||||
|
]
|
||||||
|
: rF;
|
||||||
|
formRows = isFormDataEmpty ? rows : rows + [kFormDataEmptyModel];
|
||||||
|
|
||||||
DaviModel<FormDataModel> daviModelRows = DaviModel<FormDataModel>(
|
DaviModel<FormDataModel> daviModelRows = DaviModel<FormDataModel>(
|
||||||
rows: rows,
|
rows: formRows,
|
||||||
columns: [
|
columns: [
|
||||||
DaviColumn(
|
DaviColumn(
|
||||||
cellPadding: kpsV5,
|
cellPadding: kpsV5,
|
||||||
@ -50,27 +55,28 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
grow: 4,
|
grow: 4,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
int idx = row.index;
|
int idx = row.index;
|
||||||
|
bool isLast = idx + 1 == formRows.length;
|
||||||
return Theme(
|
return Theme(
|
||||||
data: Theme.of(context),
|
data: Theme.of(context),
|
||||||
child: FormDataField(
|
child: FormDataField(
|
||||||
keyId: "$selectedId-$idx-form-v-$seed",
|
keyId: "$selectedId-$idx-form-v-$seed",
|
||||||
initialValue: rows[idx].name,
|
initialValue: formRows[idx].name,
|
||||||
hintText: " Add Key",
|
hintText: " Add Key",
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
rows[idx] = rows[idx].copyWith(name: value);
|
formRows[idx] = formRows[idx].copyWith(name: value);
|
||||||
if (idx == rows.length - 1) rows.add(kFormDataEmptyModel);
|
if (isLast) formRows.add(kFormDataEmptyModel);
|
||||||
_onFieldChange(selectedId!);
|
_onFieldChange(selectedId!);
|
||||||
},
|
},
|
||||||
colorScheme: Theme.of(context).colorScheme,
|
colorScheme: Theme.of(context).colorScheme,
|
||||||
formDataType: rows[idx].type,
|
formDataType: formRows[idx].type,
|
||||||
onFormDataTypeChanged: (value) {
|
onFormDataTypeChanged: (value) {
|
||||||
bool hasChanged = rows[idx].type != value;
|
bool hasChanged = formRows[idx].type != value;
|
||||||
rows[idx] = rows[idx].copyWith(
|
formRows[idx] = formRows[idx].copyWith(
|
||||||
type: value ?? FormDataType.text,
|
type: value ?? FormDataType.text,
|
||||||
);
|
);
|
||||||
rows[idx] = rows[idx].copyWith(value: "");
|
formRows[idx] = formRows[idx].copyWith(value: "");
|
||||||
if (idx == rows.length - 1 && hasChanged) {
|
if (idx == formRows.length - 1 && hasChanged) {
|
||||||
rows.add(kFormDataEmptyModel);
|
formRows.add(kFormDataEmptyModel);
|
||||||
}
|
}
|
||||||
setState(() {});
|
setState(() {});
|
||||||
_onFieldChange(selectedId!);
|
_onFieldChange(selectedId!);
|
||||||
@ -97,7 +103,8 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
cellPadding: kpsV5,
|
cellPadding: kpsV5,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
int idx = row.index;
|
int idx = row.index;
|
||||||
return rows[idx].type == FormDataType.file
|
bool isLast = idx + 1 == formRows.length;
|
||||||
|
return formRows[idx].type == FormDataType.file
|
||||||
? Align(
|
? Align(
|
||||||
alignment: Alignment.centerLeft,
|
alignment: Alignment.centerLeft,
|
||||||
child: Row(
|
child: Row(
|
||||||
@ -122,7 +129,7 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
if (pickedResult != null &&
|
if (pickedResult != null &&
|
||||||
pickedResult.files.isNotEmpty &&
|
pickedResult.files.isNotEmpty &&
|
||||||
pickedResult.files.first.path != null) {
|
pickedResult.files.first.path != null) {
|
||||||
rows[idx] = rows[idx].copyWith(
|
formRows[idx] = formRows[idx].copyWith(
|
||||||
value: pickedResult.files.first.path!,
|
value: pickedResult.files.first.path!,
|
||||||
);
|
);
|
||||||
setState(() {});
|
setState(() {});
|
||||||
@ -130,9 +137,9 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
label: Text(
|
label: Text(
|
||||||
(rows[idx].type == FormDataType.file &&
|
(formRows[idx].type == FormDataType.file &&
|
||||||
rows[idx].value.isNotEmpty)
|
formRows[idx].value.isNotEmpty)
|
||||||
? rows[idx].value.toString()
|
? formRows[idx].value.toString()
|
||||||
: "Select File",
|
: "Select File",
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
@ -146,11 +153,11 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
)
|
)
|
||||||
: CellField(
|
: CellField(
|
||||||
keyId: "$selectedId-$idx-form-v-$seed",
|
keyId: "$selectedId-$idx-form-v-$seed",
|
||||||
initialValue: rows[idx].value,
|
initialValue: formRows[idx].value,
|
||||||
hintText: " Add Value",
|
hintText: " Add Value",
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
rows[idx] = rows[idx].copyWith(value: value);
|
formRows[idx] = formRows[idx].copyWith(value: value);
|
||||||
if (idx == rows.length - 1) rows.add(kFormDataEmptyModel);
|
if (isLast) formRows.add(kFormDataEmptyModel);
|
||||||
_onFieldChange(selectedId!);
|
_onFieldChange(selectedId!);
|
||||||
},
|
},
|
||||||
colorScheme: Theme.of(context).colorScheme,
|
colorScheme: Theme.of(context).colorScheme,
|
||||||
@ -162,21 +169,24 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
pinStatus: PinStatus.none,
|
pinStatus: PinStatus.none,
|
||||||
width: 30,
|
width: 30,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
|
bool isLast = row.index + 1 == formRows.length;
|
||||||
return InkWell(
|
return InkWell(
|
||||||
|
onTap: isLast
|
||||||
|
? null
|
||||||
|
: () {
|
||||||
|
seed = random.nextInt(kRandMax);
|
||||||
|
if (formRows.length == 2) {
|
||||||
|
setState(() {
|
||||||
|
formRows = [kFormDataEmptyModel];
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
formRows.removeAt(row.index);
|
||||||
|
}
|
||||||
|
_onFieldChange(selectedId!);
|
||||||
|
},
|
||||||
child: Theme.of(context).brightness == Brightness.dark
|
child: Theme.of(context).brightness == Brightness.dark
|
||||||
? kIconRemoveDark
|
? kIconRemoveDark
|
||||||
: kIconRemoveLight,
|
: kIconRemoveLight,
|
||||||
onTap: () {
|
|
||||||
seed = random.nextInt(kRandMax);
|
|
||||||
if (rows.length == 1) {
|
|
||||||
setState(() {
|
|
||||||
rows = [kFormDataEmptyModel];
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
rows.removeAt(row.index);
|
|
||||||
}
|
|
||||||
_onFieldChange(selectedId!);
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@ -207,7 +217,7 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
padding: const EdgeInsets.only(bottom: 30),
|
padding: const EdgeInsets.only(bottom: 30),
|
||||||
child: ElevatedButton.icon(
|
child: ElevatedButton.icon(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
rows.add(kFormDataEmptyModel);
|
formRows.add(kFormDataEmptyModel);
|
||||||
_onFieldChange(selectedId!);
|
_onFieldChange(selectedId!);
|
||||||
},
|
},
|
||||||
icon: const Icon(Icons.add),
|
icon: const Icon(Icons.add),
|
||||||
|
@ -15,10 +15,10 @@ class EditRequestHeaders extends ConsumerStatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
|
class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
|
||||||
final random = Random.secure();
|
|
||||||
late List<NameValueModel> rows;
|
|
||||||
late List<bool> isRowEnabledList;
|
|
||||||
late int seed;
|
late int seed;
|
||||||
|
final random = Random.secure();
|
||||||
|
late List<NameValueModel> headerRows;
|
||||||
|
late List<bool> isRowEnabledList;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@ -29,8 +29,9 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
|
|||||||
void _onFieldChange(String selectedId) {
|
void _onFieldChange(String selectedId) {
|
||||||
ref.read(collectionStateNotifierProvider.notifier).update(
|
ref.read(collectionStateNotifierProvider.notifier).update(
|
||||||
selectedId,
|
selectedId,
|
||||||
requestHeaders: rows,
|
requestHeaders: headerRows.sublist(0, headerRows.length - 1),
|
||||||
isHeaderEnabledList: isRowEnabledList,
|
isHeaderEnabledList:
|
||||||
|
isRowEnabledList.sublist(0, headerRows.length - 1),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,31 +42,30 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
|
|||||||
.select((value) => value?.requestHeaders?.length));
|
.select((value) => value?.requestHeaders?.length));
|
||||||
var rH = ref.read(selectedRequestModelProvider)?.requestHeaders;
|
var rH = ref.read(selectedRequestModelProvider)?.requestHeaders;
|
||||||
bool isHeadersEmpty = rH == null || rH.isEmpty;
|
bool isHeadersEmpty = rH == null || rH.isEmpty;
|
||||||
rows = (isHeadersEmpty)
|
List<NameValueModel> rows = (isHeadersEmpty)
|
||||||
? [
|
? [
|
||||||
kNameValueEmptyModel,
|
kNameValueEmptyModel,
|
||||||
]
|
]
|
||||||
: rH;
|
: rH;
|
||||||
isRowEnabledList = ref
|
headerRows = isHeadersEmpty ? rows : rows + [kNameValueEmptyModel];
|
||||||
.read(selectedRequestModelProvider)
|
isRowEnabledList =
|
||||||
?.isHeaderEnabledList ??
|
ref.read(selectedRequestModelProvider)?.isHeaderEnabledList ??
|
||||||
List.filled(rows.length, isHeadersEmpty ? false : true, growable: true);
|
List.filled(rH?.length ?? 0, true, growable: true);
|
||||||
|
isRowEnabledList.add(false);
|
||||||
|
|
||||||
DaviModel<NameValueModel> model = DaviModel<NameValueModel>(
|
DaviModel<NameValueModel> model = DaviModel<NameValueModel>(
|
||||||
rows: rows,
|
rows: headerRows,
|
||||||
columns: [
|
columns: [
|
||||||
DaviColumn(
|
DaviColumn(
|
||||||
name: 'Checkbox',
|
name: 'Checkbox',
|
||||||
width: 30,
|
width: 30,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
int idx = row.index;
|
int idx = row.index;
|
||||||
|
bool isLast = idx + 1 == headerRows.length;
|
||||||
return CheckBox(
|
return CheckBox(
|
||||||
keyId: "$selectedId-$idx-headers-c-$seed",
|
keyId: "$selectedId-$idx-headers-c-$seed",
|
||||||
value: isRowEnabledList[idx],
|
value: isRowEnabledList[idx],
|
||||||
onChanged: rows.length == 1 &&
|
onChanged: isLast
|
||||||
idx == 0 &&
|
|
||||||
rows[idx].name.isEmpty &&
|
|
||||||
rows[idx].value.isEmpty
|
|
||||||
? null
|
? null
|
||||||
: (value) {
|
: (value) {
|
||||||
setState(() {
|
setState(() {
|
||||||
@ -83,15 +83,16 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
|
|||||||
grow: 1,
|
grow: 1,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
int idx = row.index;
|
int idx = row.index;
|
||||||
|
bool isLast = idx + 1 == headerRows.length;
|
||||||
return HeaderField(
|
return HeaderField(
|
||||||
keyId: "$selectedId-$idx-headers-k-$seed",
|
keyId: "$selectedId-$idx-headers-k-$seed",
|
||||||
initialValue: rows[idx].name,
|
initialValue: headerRows[idx].name,
|
||||||
hintText: "Add Header Name",
|
hintText: "Add Header Name",
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
isRowEnabledList[idx] = true;
|
headerRows[idx] = headerRows[idx].copyWith(name: value);
|
||||||
rows[idx] = rows[idx].copyWith(name: value);
|
if (isLast) {
|
||||||
if (idx == rows.length - 1) {
|
isRowEnabledList[idx] = true;
|
||||||
rows.add(kNameValueEmptyModel);
|
headerRows.add(kNameValueEmptyModel);
|
||||||
isRowEnabledList.add(false);
|
isRowEnabledList.add(false);
|
||||||
}
|
}
|
||||||
_onFieldChange(selectedId!);
|
_onFieldChange(selectedId!);
|
||||||
@ -115,14 +116,16 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
|
|||||||
grow: 1,
|
grow: 1,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
int idx = row.index;
|
int idx = row.index;
|
||||||
|
bool isLast = idx + 1 == headerRows.length;
|
||||||
return CellField(
|
return CellField(
|
||||||
keyId: "$selectedId-$idx-headers-v-$seed",
|
keyId: "$selectedId-$idx-headers-v-$seed",
|
||||||
initialValue: rows[idx].value,
|
initialValue: headerRows[idx].value,
|
||||||
hintText: " Add Header Value",
|
hintText: " Add Header Value",
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
rows[idx] = rows[idx].copyWith(value: value);
|
headerRows[idx] = headerRows[idx].copyWith(value: value);
|
||||||
if (idx == rows.length - 1) {
|
if (isLast) {
|
||||||
rows.add(kNameValueEmptyModel);
|
isRowEnabledList[idx] = true;
|
||||||
|
headerRows.add(kNameValueEmptyModel);
|
||||||
isRowEnabledList.add(false);
|
isRowEnabledList.add(false);
|
||||||
}
|
}
|
||||||
_onFieldChange(selectedId!);
|
_onFieldChange(selectedId!);
|
||||||
@ -136,25 +139,28 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
|
|||||||
pinStatus: PinStatus.none,
|
pinStatus: PinStatus.none,
|
||||||
width: 30,
|
width: 30,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
|
bool isLast = row.index + 1 == headerRows.length;
|
||||||
return InkWell(
|
return InkWell(
|
||||||
|
onTap: isLast
|
||||||
|
? null
|
||||||
|
: () {
|
||||||
|
seed = random.nextInt(kRandMax);
|
||||||
|
if (headerRows.length == 2) {
|
||||||
|
setState(() {
|
||||||
|
headerRows = [
|
||||||
|
kNameValueEmptyModel,
|
||||||
|
];
|
||||||
|
isRowEnabledList = [false];
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
headerRows.removeAt(row.index);
|
||||||
|
isRowEnabledList.removeAt(row.index);
|
||||||
|
}
|
||||||
|
_onFieldChange(selectedId!);
|
||||||
|
},
|
||||||
child: Theme.of(context).brightness == Brightness.dark
|
child: Theme.of(context).brightness == Brightness.dark
|
||||||
? kIconRemoveDark
|
? kIconRemoveDark
|
||||||
: kIconRemoveLight,
|
: kIconRemoveLight,
|
||||||
onTap: () {
|
|
||||||
seed = random.nextInt(kRandMax);
|
|
||||||
if (rows.length == 1) {
|
|
||||||
setState(() {
|
|
||||||
rows = [
|
|
||||||
kNameValueEmptyModel,
|
|
||||||
];
|
|
||||||
isRowEnabledList = [false];
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
rows.removeAt(row.index);
|
|
||||||
isRowEnabledList.removeAt(row.index);
|
|
||||||
}
|
|
||||||
_onFieldChange(selectedId!);
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@ -185,7 +191,7 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
|
|||||||
padding: const EdgeInsets.only(bottom: 30),
|
padding: const EdgeInsets.only(bottom: 30),
|
||||||
child: ElevatedButton.icon(
|
child: ElevatedButton.icon(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
rows.add(kNameValueEmptyModel);
|
headerRows.add(kNameValueEmptyModel);
|
||||||
isRowEnabledList.add(false);
|
isRowEnabledList.add(false);
|
||||||
_onFieldChange(selectedId!);
|
_onFieldChange(selectedId!);
|
||||||
},
|
},
|
||||||
|
@ -16,10 +16,10 @@ class EditRequestURLParams extends ConsumerStatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
|
class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
|
||||||
final random = Random.secure();
|
|
||||||
late List<NameValueModel> rows;
|
|
||||||
late List<bool> isRowEnabledList;
|
|
||||||
late int seed;
|
late int seed;
|
||||||
|
final random = Random.secure();
|
||||||
|
late List<NameValueModel> paramRows;
|
||||||
|
late List<bool> isRowEnabledList;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@ -30,9 +30,14 @@ class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
|
|||||||
void _onFieldChange(String selectedId) {
|
void _onFieldChange(String selectedId) {
|
||||||
ref.read(collectionStateNotifierProvider.notifier).update(
|
ref.read(collectionStateNotifierProvider.notifier).update(
|
||||||
selectedId,
|
selectedId,
|
||||||
requestParams: rows,
|
requestParams: paramRows.sublist(0, paramRows.length - 1),
|
||||||
isParamEnabledList: isRowEnabledList,
|
isParamEnabledList: isRowEnabledList.sublist(0, paramRows.length - 1),
|
||||||
);
|
);
|
||||||
|
debugPrint("URL Params Updated");
|
||||||
|
for (var i = 0; i < paramRows.length - 1; i++) {
|
||||||
|
debugPrint(
|
||||||
|
"URL Param $i: (${paramRows[i].name}=${paramRows[i].value}) ==> ${isRowEnabledList[i]}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -42,30 +47,30 @@ class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
|
|||||||
.select((value) => value?.requestParams?.length));
|
.select((value) => value?.requestParams?.length));
|
||||||
var rP = ref.read(selectedRequestModelProvider)?.requestParams;
|
var rP = ref.read(selectedRequestModelProvider)?.requestParams;
|
||||||
bool isParamsEmpty = rP == null || rP.isEmpty;
|
bool isParamsEmpty = rP == null || rP.isEmpty;
|
||||||
rows = (isParamsEmpty)
|
List<NameValueModel> rows = (isParamsEmpty)
|
||||||
? [
|
? [
|
||||||
kNameValueEmptyModel,
|
kNameValueEmptyModel,
|
||||||
]
|
]
|
||||||
: rP;
|
: rP;
|
||||||
isRowEnabledList = ref
|
paramRows = isParamsEmpty ? rows : rows + [kNameValueEmptyModel];
|
||||||
.read(selectedRequestModelProvider)
|
isRowEnabledList =
|
||||||
?.isParamEnabledList ??
|
ref.read(selectedRequestModelProvider)?.isParamEnabledList ??
|
||||||
List.filled(rows.length, isParamsEmpty ? false : true, growable: true);
|
List.filled(rP?.length ?? 0, true, growable: true);
|
||||||
|
isRowEnabledList.add(false);
|
||||||
|
|
||||||
DaviModel<NameValueModel> model = DaviModel<NameValueModel>(
|
DaviModel<NameValueModel> model = DaviModel<NameValueModel>(
|
||||||
rows: rows,
|
rows: paramRows,
|
||||||
columns: [
|
columns: [
|
||||||
DaviColumn(
|
DaviColumn(
|
||||||
name: 'Checkbox',
|
name: 'Checkbox',
|
||||||
width: 30,
|
width: 30,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
int idx = row.index;
|
int idx = row.index;
|
||||||
|
bool isLast = idx + 1 == paramRows.length;
|
||||||
return CheckBox(
|
return CheckBox(
|
||||||
keyId: "$selectedId-$idx-params-c-$seed",
|
keyId: "$selectedId-$idx-params-c-$seed",
|
||||||
value: isRowEnabledList[idx],
|
value: isRowEnabledList[idx],
|
||||||
onChanged: idx + 1 == rows.length &&
|
onChanged: isLast
|
||||||
rows[idx].name.isEmpty &&
|
|
||||||
rows[idx].value.isEmpty
|
|
||||||
? null
|
? null
|
||||||
: (value) {
|
: (value) {
|
||||||
setState(() {
|
setState(() {
|
||||||
@ -83,15 +88,16 @@ class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
|
|||||||
grow: 1,
|
grow: 1,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
int idx = row.index;
|
int idx = row.index;
|
||||||
|
bool isLast = idx + 1 == paramRows.length;
|
||||||
return CellField(
|
return CellField(
|
||||||
keyId: "$selectedId-$idx-params-k-$seed",
|
keyId: "$selectedId-$idx-params-k-$seed",
|
||||||
initialValue: rows[idx].name,
|
initialValue: paramRows[idx].name,
|
||||||
hintText: "Add URL Parameter",
|
hintText: "Add URL Parameter",
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
rows[idx] = rows[idx].copyWith(name: value);
|
paramRows[idx] = paramRows[idx].copyWith(name: value);
|
||||||
if (idx == rows.length - 1) {
|
if (isLast) {
|
||||||
isRowEnabledList[idx] = true;
|
isRowEnabledList[idx] = true;
|
||||||
rows.add(kNameValueEmptyModel);
|
paramRows.add(kNameValueEmptyModel);
|
||||||
isRowEnabledList.add(false);
|
isRowEnabledList.add(false);
|
||||||
}
|
}
|
||||||
_onFieldChange(selectedId!);
|
_onFieldChange(selectedId!);
|
||||||
@ -115,15 +121,16 @@ class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
|
|||||||
grow: 1,
|
grow: 1,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
int idx = row.index;
|
int idx = row.index;
|
||||||
|
bool isLast = idx + 1 == paramRows.length;
|
||||||
return CellField(
|
return CellField(
|
||||||
keyId: "$selectedId-$idx-params-v-$seed",
|
keyId: "$selectedId-$idx-params-v-$seed",
|
||||||
initialValue: rows[idx].value,
|
initialValue: paramRows[idx].value,
|
||||||
hintText: "Add Value",
|
hintText: "Add Value",
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
rows[idx] = rows[idx].copyWith(value: value);
|
paramRows[idx] = paramRows[idx].copyWith(value: value);
|
||||||
if (idx == rows.length - 1) {
|
if (isLast) {
|
||||||
isRowEnabledList[idx] = true;
|
isRowEnabledList[idx] = true;
|
||||||
rows.add(kNameValueEmptyModel);
|
paramRows.add(kNameValueEmptyModel);
|
||||||
isRowEnabledList.add(false);
|
isRowEnabledList.add(false);
|
||||||
}
|
}
|
||||||
_onFieldChange(selectedId!);
|
_onFieldChange(selectedId!);
|
||||||
@ -137,25 +144,28 @@ class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
|
|||||||
pinStatus: PinStatus.none,
|
pinStatus: PinStatus.none,
|
||||||
width: 30,
|
width: 30,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
|
bool isLast = row.index + 1 == paramRows.length;
|
||||||
return InkWell(
|
return InkWell(
|
||||||
|
onTap: isLast
|
||||||
|
? null
|
||||||
|
: () {
|
||||||
|
seed = random.nextInt(kRandMax);
|
||||||
|
if (paramRows.length == 2) {
|
||||||
|
setState(() {
|
||||||
|
paramRows = [
|
||||||
|
kNameValueEmptyModel,
|
||||||
|
];
|
||||||
|
isRowEnabledList = [false];
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
paramRows.removeAt(row.index);
|
||||||
|
isRowEnabledList.removeAt(row.index);
|
||||||
|
}
|
||||||
|
_onFieldChange(selectedId!);
|
||||||
|
},
|
||||||
child: Theme.of(context).brightness == Brightness.dark
|
child: Theme.of(context).brightness == Brightness.dark
|
||||||
? kIconRemoveDark
|
? kIconRemoveDark
|
||||||
: kIconRemoveLight,
|
: kIconRemoveLight,
|
||||||
onTap: () {
|
|
||||||
seed = random.nextInt(kRandMax);
|
|
||||||
if (rows.length == 1) {
|
|
||||||
setState(() {
|
|
||||||
rows = [
|
|
||||||
kNameValueEmptyModel,
|
|
||||||
];
|
|
||||||
isRowEnabledList = [false];
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
rows.removeAt(row.index);
|
|
||||||
isRowEnabledList.removeAt(row.index);
|
|
||||||
}
|
|
||||||
_onFieldChange(selectedId!);
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@ -186,7 +196,7 @@ class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
|
|||||||
padding: const EdgeInsets.only(bottom: 30),
|
padding: const EdgeInsets.only(bottom: 30),
|
||||||
child: ElevatedButton.icon(
|
child: ElevatedButton.icon(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
rows.add(kNameValueEmptyModel);
|
paramRows.add(kNameValueEmptyModel);
|
||||||
isRowEnabledList.add(false);
|
isRowEnabledList.add(false);
|
||||||
_onFieldChange(selectedId!);
|
_onFieldChange(selectedId!);
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user