optimize rebuilding of request tables

This commit is contained in:
Ankit Mahato
2023-03-11 17:38:12 +05:30
parent b10ecd7708
commit 08cdc6423a
2 changed files with 23 additions and 6 deletions

View File

@ -1,3 +1,4 @@
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:davi/davi.dart'; import 'package:davi/davi.dart';
@ -14,17 +15,20 @@ class EditRequestHeaders extends ConsumerStatefulWidget {
class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> { class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
late List<KVRow> rows; late List<KVRow> rows;
final random = Random.secure();
late int seed;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
seed = random.nextInt(randRange);
} }
Widget _buildHeaderField(BuildContext context, DaviRow<KVRow> row) { Widget _buildHeaderField(BuildContext context, DaviRow<KVRow> row) {
String? activeId = ref.read(activeIdStateProvider); String? activeId = ref.read(activeIdStateProvider);
int idx = row.index; int idx = row.index;
return TextFormField( return TextFormField(
key: Key("$activeId-$idx-headers-k"), key: Key("$activeId-$idx-headers-k-$seed"),
initialValue: rows[idx].k, initialValue: rows[idx].k,
style: codeStyle, style: codeStyle,
decoration: InputDecoration( decoration: InputDecoration(
@ -41,7 +45,7 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
String? activeId = ref.read(activeIdStateProvider); String? activeId = ref.read(activeIdStateProvider);
int idx = row.index; int idx = row.index;
return TextFormField( return TextFormField(
key: Key("$activeId-$idx-headers-v"), key: Key("$activeId-$idx-headers-v-$seed"),
initialValue: rows[idx].v, initialValue: rows[idx].v,
style: codeStyle, style: codeStyle,
decoration: InputDecoration( decoration: InputDecoration(
@ -82,8 +86,13 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
); );
final activeId = ref.watch(activeIdStateProvider); final activeId = ref.watch(activeIdStateProvider);
final collection = ref.watch(collectionStateNotifierProvider); /*final collection = ref.watch(collectionStateNotifierProvider);
final idIdx = collection.indexWhere((m) => m.id == activeId); final idIdx = collection.indexWhere((m) => m.id == activeId);
rows = collection[idIdx].requestHeaders ?? [const KVRow("", "")];*/
final collection = ref.read(collectionStateNotifierProvider);
final idIdx = collection.indexWhere((m) => m.id == activeId);
final length = ref.watch(collectionStateNotifierProvider
.select((value) => value[idIdx].requestHeaders?.length));
rows = collection[idIdx].requestHeaders ?? [const KVRow("", "")]; rows = collection[idIdx].requestHeaders ?? [const KVRow("", "")];
DaviModel<KVRow> model = DaviModel<KVRow>( DaviModel<KVRow> model = DaviModel<KVRow>(
rows: rows, rows: rows,
@ -112,6 +121,7 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
), ),
onTap: () { onTap: () {
rows.removeAt(row.index); rows.removeAt(row.index);
seed = random.nextInt(randRange);
_onFieldChange(activeId!); _onFieldChange(activeId!);
}, },
); );

View File

@ -1,3 +1,4 @@
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:davi/davi.dart'; import 'package:davi/davi.dart';
@ -15,17 +16,20 @@ class EditRequestURLParams extends ConsumerStatefulWidget {
class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> { class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
late List<KVRow> rows; late List<KVRow> rows;
final random = Random.secure();
late int seed;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
seed = random.nextInt(randRange);
} }
Widget _buildParamField(BuildContext context, DaviRow<KVRow> row) { Widget _buildParamField(BuildContext context, DaviRow<KVRow> row) {
String? activeId = ref.read(activeIdStateProvider); String? activeId = ref.read(activeIdStateProvider);
int idx = row.index; int idx = row.index;
return TextFormField( return TextFormField(
key: Key("$activeId-$idx-params-k"), key: Key("$activeId-$idx-params-k-$seed"),
initialValue: rows[idx].k, initialValue: rows[idx].k,
style: codeStyle, style: codeStyle,
decoration: InputDecoration( decoration: InputDecoration(
@ -42,7 +46,7 @@ class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
String? activeId = ref.read(activeIdStateProvider); String? activeId = ref.read(activeIdStateProvider);
int idx = row.index; int idx = row.index;
return TextFormField( return TextFormField(
key: Key("$activeId-$idx-params-v"), key: Key("$activeId-$idx-params-v-$seed"),
initialValue: rows[idx].v, initialValue: rows[idx].v,
style: codeStyle, style: codeStyle,
decoration: InputDecoration( decoration: InputDecoration(
@ -83,8 +87,10 @@ class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
); );
final activeId = ref.watch(activeIdStateProvider); final activeId = ref.watch(activeIdStateProvider);
final collection = ref.watch(collectionStateNotifierProvider); final collection = ref.read(collectionStateNotifierProvider);
final idIdx = collection.indexWhere((m) => m.id == activeId); final idIdx = collection.indexWhere((m) => m.id == activeId);
final length = ref.watch(collectionStateNotifierProvider
.select((value) => value[idIdx].requestParams?.length));
rows = collection[idIdx].requestParams ?? [const KVRow("", "")]; rows = collection[idIdx].requestParams ?? [const KVRow("", "")];
DaviModel<KVRow> model = DaviModel<KVRow>( DaviModel<KVRow> model = DaviModel<KVRow>(
rows: rows, rows: rows,
@ -113,6 +119,7 @@ class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
), ),
onTap: () { onTap: () {
rows.removeAt(row.index); rows.removeAt(row.index);
seed = random.nextInt(randRange);
_onFieldChange(activeId!); _onFieldChange(activeId!);
}, },
); );