I am making a program for encrypting text relative to a keyword. Initially, the algorithm was written in Python, everything worked correctly. I decided to translate it into a mobile application in Flutter, so I had to rewrite it in Dart.
List symbols = ['a', 'b', 'c', 'd', 'e',
'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', ';', ':', '-',
'_', ' ', '!', '@', '#', '\$', '%', '^', '&', '*', '(', ')', '+', '=', '\"', '№', '~', '?',
'\\', '/', '|', '[', ']', '{', '}', '`', '\'', '<', '>'];
late dynamic keyWord = ' ';
late dynamic text = ' ';
late dynamic res;
late dynamic a4;
late dynamic m;
late dynamic n;
late dynamic f;
var d = 0;
var k = 0;
var z = 0;
var operation = 0;
var m1 = 0;
var c = 0;
encode(keyWord, text){
late dynamic res;
var l = (text.length) as int;
for( var i = l ; i >= 1; i-- ){
if(symbols.contains(text[d])) {
var f = symbols.indexOf(text[d]);
a4 = '';
if(f == 0){
a4 = '0';
while(f > 0){
a4 = (f % 4).toString() + a4.toString();
f = f ~/ 4;
}
a4 = '$a4';
}
}
else{
a4 += '1123';
}
while(a4.length != 4) {
a4 = '0' + a4;
}
for( var j = 4 ; j >= 1; j-- ){
res += (keyWord[(a4[z]) as int]);
res.whenComplete((){
setState(() {});
});
z += 1;
}
z = 0;
d += 1;
}
return(res);
}
The encode function does not work due to LateInitializationError: Local 'res' has not been initialized.
The rest of the code works correctly, the res
variable was not called anywhere except for this function. Maybe someone faced the same problem or knows how to solve it? I would be grateful for your help.
Exception is pretty self-explanatory. You access res in res += (keyWord[(a4[z]) as int]);
, when it's not yet initialized. You should remove late and do dynamic res = ''
for example.
P.S. 'res += value' is basically 'res = res + value'. That's why you get the error
P.S.S Why not to use some typing? Your code's res.whenComplete will fail, because it's not a Future. Seems, that you don't use any code completion at all.