Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
Ask Question
I have some data which initially is
List<Map<String, String>>
but in future in some methods calls I have to assign those
Map<String, String>
elements an
<String, dynamic>
values. Here is some dart code that shows my intention :
class MyClass {
String ageGroup = 'some';
MyClass({required this.ageGroup});
void main() {
var data = [
'name': 'john',
'userName': 'john',
'name': 'john1',
'userName': 'john1',
// JsLinkedHashMap<String, String> in dartpad
print(data[0].runtimeType);
// after some while
// throws an error
data[0]['ageGroup'] = MyClass(ageGroup: 'something');
data[0]['ageGroup']
assignment gives me error like this : Error: A value of type 'MyClass' can't be assigned to a variable of type 'String'.
How should I let know dart that don't convert this maps to <String, String>
and let it be <String, dynamic>
as in future Objects
would be the values too.
I have found 1 workaround but I don't want to use it :
void main() {
var data = [
'something_random': 123,
'name': 'john',
'userName': 'john',
'something_random': 123,
'name': 'john1',
'userName': 'john1',
print(data[0].runtimeType);
data[0]['ageGroup'] = MyClass(ageGroup: 'something');
This works well but I don't want to use it like this....are there any other ways...
I have tried .cast<>()
and another type castings but still of no use.
By default Dart infers the type of you data
literal map.
In your first example there is only String as values so it infers the type List<Map<String, String>>
. In the last snippet it infers List<Map<String, Object>>
because there are Strings and ints in values of maps.
You can force the type of data by 2 ways:
var data = <Map<String, dynamic>>[...]; // force type of list literal
// or
List<Map<String, dynamic>> data = [...]; // directly type data
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.