createState method not always called when creating new StatefulWidget
I have a collection of simple objets that sometimes changes. I am using a ListView to render those objects, basically text. When my collection changes the list is rebuild with the new objects, so if the list changes from 1 to 3 items, I see 3 items, but the first one keeps its previous value.
I've noticed that the method "createState" is not called in all cases when I create a new CustomTextField (in the example above, it is called only when new elements are added to the list).
How do I make sure my list is updated properly when my collection changes?
My parent widget builds a list of text fields:
...
@override
Widget build(BuildContext context) {
...
var list = <Widget>;
collection.forEach((item)
var widget = CustomTextField(
content: item,
);
list.add(widget);
...
return new ListView(
children: list,
);
);
...
My CustomTextField definition:
class CustomTextField extends StatefulWidget
final MediaContent content;
CustomTextField(
Key key,
this.content,
) : super(key: key);
@override
CustomTextFieldState createState()
return CustomTextFieldState();
...
MediaContent is a very simple object containing some text:
class MediaContent
String textData;
ContentType type;
MediaContent(
this.type,
);
dart flutter
add a comment |
I have a collection of simple objets that sometimes changes. I am using a ListView to render those objects, basically text. When my collection changes the list is rebuild with the new objects, so if the list changes from 1 to 3 items, I see 3 items, but the first one keeps its previous value.
I've noticed that the method "createState" is not called in all cases when I create a new CustomTextField (in the example above, it is called only when new elements are added to the list).
How do I make sure my list is updated properly when my collection changes?
My parent widget builds a list of text fields:
...
@override
Widget build(BuildContext context) {
...
var list = <Widget>;
collection.forEach((item)
var widget = CustomTextField(
content: item,
);
list.add(widget);
...
return new ListView(
children: list,
);
);
...
My CustomTextField definition:
class CustomTextField extends StatefulWidget
final MediaContent content;
CustomTextField(
Key key,
this.content,
) : super(key: key);
@override
CustomTextFieldState createState()
return CustomTextFieldState();
...
MediaContent is a very simple object containing some text:
class MediaContent
String textData;
ContentType type;
MediaContent(
this.type,
);
dart flutter
I'm experiencing this same issue when creating the same widget in succession (even when I use the "new" keyword during creation). Did you find a solution for this?
– dazza5000
Jan 28 at 0:38
@dazza5000 see if my answer works for you
– Guilherme Torres Castro
Jan 31 at 15:09
will try it out shortly - thank you for the help
– dazza5000
Jan 31 at 15:24
@GuilhermeTorresCastro - that was it - thank you
– dazza5000
Feb 1 at 1:10
add a comment |
I have a collection of simple objets that sometimes changes. I am using a ListView to render those objects, basically text. When my collection changes the list is rebuild with the new objects, so if the list changes from 1 to 3 items, I see 3 items, but the first one keeps its previous value.
I've noticed that the method "createState" is not called in all cases when I create a new CustomTextField (in the example above, it is called only when new elements are added to the list).
How do I make sure my list is updated properly when my collection changes?
My parent widget builds a list of text fields:
...
@override
Widget build(BuildContext context) {
...
var list = <Widget>;
collection.forEach((item)
var widget = CustomTextField(
content: item,
);
list.add(widget);
...
return new ListView(
children: list,
);
);
...
My CustomTextField definition:
class CustomTextField extends StatefulWidget
final MediaContent content;
CustomTextField(
Key key,
this.content,
) : super(key: key);
@override
CustomTextFieldState createState()
return CustomTextFieldState();
...
MediaContent is a very simple object containing some text:
class MediaContent
String textData;
ContentType type;
MediaContent(
this.type,
);
dart flutter
I have a collection of simple objets that sometimes changes. I am using a ListView to render those objects, basically text. When my collection changes the list is rebuild with the new objects, so if the list changes from 1 to 3 items, I see 3 items, but the first one keeps its previous value.
I've noticed that the method "createState" is not called in all cases when I create a new CustomTextField (in the example above, it is called only when new elements are added to the list).
How do I make sure my list is updated properly when my collection changes?
My parent widget builds a list of text fields:
...
@override
Widget build(BuildContext context) {
...
var list = <Widget>;
collection.forEach((item)
var widget = CustomTextField(
content: item,
);
list.add(widget);
...
return new ListView(
children: list,
);
);
...
My CustomTextField definition:
class CustomTextField extends StatefulWidget
final MediaContent content;
CustomTextField(
Key key,
this.content,
) : super(key: key);
@override
CustomTextFieldState createState()
return CustomTextFieldState();
...
MediaContent is a very simple object containing some text:
class MediaContent
String textData;
ContentType type;
MediaContent(
this.type,
);
dart flutter
dart flutter
edited Nov 12 '18 at 16:59
Miki
asked Nov 12 '18 at 0:12
MikiMiki
76416
76416
I'm experiencing this same issue when creating the same widget in succession (even when I use the "new" keyword during creation). Did you find a solution for this?
– dazza5000
Jan 28 at 0:38
@dazza5000 see if my answer works for you
– Guilherme Torres Castro
Jan 31 at 15:09
will try it out shortly - thank you for the help
– dazza5000
Jan 31 at 15:24
@GuilhermeTorresCastro - that was it - thank you
– dazza5000
Feb 1 at 1:10
add a comment |
I'm experiencing this same issue when creating the same widget in succession (even when I use the "new" keyword during creation). Did you find a solution for this?
– dazza5000
Jan 28 at 0:38
@dazza5000 see if my answer works for you
– Guilherme Torres Castro
Jan 31 at 15:09
will try it out shortly - thank you for the help
– dazza5000
Jan 31 at 15:24
@GuilhermeTorresCastro - that was it - thank you
– dazza5000
Feb 1 at 1:10
I'm experiencing this same issue when creating the same widget in succession (even when I use the "new" keyword during creation). Did you find a solution for this?
– dazza5000
Jan 28 at 0:38
I'm experiencing this same issue when creating the same widget in succession (even when I use the "new" keyword during creation). Did you find a solution for this?
– dazza5000
Jan 28 at 0:38
@dazza5000 see if my answer works for you
– Guilherme Torres Castro
Jan 31 at 15:09
@dazza5000 see if my answer works for you
– Guilherme Torres Castro
Jan 31 at 15:09
will try it out shortly - thank you for the help
– dazza5000
Jan 31 at 15:24
will try it out shortly - thank you for the help
– dazza5000
Jan 31 at 15:24
@GuilhermeTorresCastro - that was it - thank you
– dazza5000
Feb 1 at 1:10
@GuilhermeTorresCastro - that was it - thank you
– dazza5000
Feb 1 at 1:10
add a comment |
1 Answer
1
active
oldest
votes
You have to define unique Key for you collections itens, take a look at here:
https://www.youtube.com/watch?v=kn0EOS-ZiIc
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53254525%2fcreatestate-method-not-always-called-when-creating-new-statefulwidget%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You have to define unique Key for you collections itens, take a look at here:
https://www.youtube.com/watch?v=kn0EOS-ZiIc
add a comment |
You have to define unique Key for you collections itens, take a look at here:
https://www.youtube.com/watch?v=kn0EOS-ZiIc
add a comment |
You have to define unique Key for you collections itens, take a look at here:
https://www.youtube.com/watch?v=kn0EOS-ZiIc
You have to define unique Key for you collections itens, take a look at here:
https://www.youtube.com/watch?v=kn0EOS-ZiIc
answered Jan 31 at 15:08
Guilherme Torres CastroGuilherme Torres Castro
9,24744684
9,24744684
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53254525%2fcreatestate-method-not-always-called-when-creating-new-statefulwidget%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
I'm experiencing this same issue when creating the same widget in succession (even when I use the "new" keyword during creation). Did you find a solution for this?
– dazza5000
Jan 28 at 0:38
@dazza5000 see if my answer works for you
– Guilherme Torres Castro
Jan 31 at 15:09
will try it out shortly - thank you for the help
– dazza5000
Jan 31 at 15:24
@GuilhermeTorresCastro - that was it - thank you
– dazza5000
Feb 1 at 1:10