Flutter 当我将我的小部件添加到Listview中时,出现了一个错误

Flutter 当我将我的小部件添加到Listview中时,出现了一个错误,flutter,dart,Flutter,Dart,错误是 在构造函数中调用setState():_journalItemState#76cf3(生命周期状态:已创建,无小部件,未装入)当您对尚未插入小部件树的小部件的状态对象调用setState()时,会发生这种情况。无需在构造函数中调用setState(),因为在初始创建状态时,已假定该状态为脏状态 如果在将数据插入列表后不调用setState,则不会导致错误。但在这种情况下,数据不会显示。 这是我的密码 import '../Userdata.dart'; import '../norma

错误是

在构造函数中调用setState():_journalItemState#76cf3(生命周期状态:已创建,无小部件,未装入)当您对尚未插入小部件树的小部件的状态对象调用setState()时,会发生这种情况。无需在构造函数中调用setState(),因为在初始创建状态时,已假定该状态为脏状态

如果在将数据插入列表后不调用setState,则不会导致错误。但在这种情况下,数据不会显示。 这是我的密码


import '../Userdata.dart';
import '../normalhttp.dart';
import '../thirdparty/alert.dart';
import 'journalItem.dart';
import 'package:flutter/material.dart';
import 'package:Lifer_flutter/normalhttp.dart';

class journalList extends StatefulWidget {
  String jwt;
  String userName;
  journalList (this.jwt,this.userName,{Key key}) :super (key:key);
  @override
  State<StatefulWidget> createState() {
    return new RJournalList ();
  }
}
class RJournalList extends State<journalList> {
  LiferLocalizations locale;
  List<String> ids;
  final ScrollController _scrollController = ScrollController ();
  int journalReadBegin = 0;
  int oneTimeLoadJournalItemNumber = 10;
  Future<Null> refreshAll () async{
    ids.clear();
    journalReadBegin = 0;
    //return null;
    await insertSeveralJournals();
    return null;
  }
  Future <void> insertSeveralJournals () async{
    Map<String,dynamic> ret = await JsonPost ("/JournalSystem/GetLeastSeveralJournals", {
      "jwt":widget.jwt,
      "ItemNumberStart":journalReadBegin,
      "ItemNumberEnd":journalReadBegin + oneTimeLoadJournalItemNumber,
    });
    if (!ret.containsKey("result") || ret ["result"] == false) {
      networkErrorAlert(context);
      return ;
    }
    List<String> rids = List.from(ret ["payload"]);
    debugPrint ("l:" + rids.length.toString());
    setState(() {
      ids = rids;
    });
    // for (int i = 0;i < rids.length;++ i) {
    //     ids.add (rids [i]);
    //   }
  }
  bool loaded = false;
  @override
  Widget build(BuildContext context) {
    locale = LiferLocalizations.of (context);
    if (!loaded) {
      ids= List ();
      loaded = true;
    }
    CheckJwt().then((res) {
      if (!res) {
        networkErrorAlert(context);
        Navigator.pop(context);
      }
    });
    GetOneTimeLoadJournalItemNumber ().then((num) {
      oneTimeLoadJournalItemNumber = num;
    });
    return Scaffold(
      appBar: AppBar (
        title: new Text (locale.yourJournal),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
                //foregroundColor: Colors.white,
                backgroundColor: Colors.amber,
                shape: const CircleBorder(),
                onPressed: () async {
                  Map<String,dynamic> ret = await JsonPost ("/JournalSystem/NewJournal",{
                      "jwt":widget.jwt
                    }
                  );
                  if (ret.containsKey("result") == false) {
                    networkErrorAlert(context);
                    return ;
                  }
                  refreshAll();
        },
      ),
      body:  RefreshIndicator(
          onRefresh: refreshAll,
          child:
            new ListView.builder(
              itemCount: ids.length,
              itemBuilder: (context,index) {
                debugPrint (ids [index]);
                //return journalItem (widget.jwt,ids [index]);
                debugPrint ("added");
                return journalItem (
                  journalId: ids [index],
                  jwt: widget.jwt,
                  key: GlobalKey ()
                );
              },
              physics: new AlwaysScrollableScrollPhysics(),
              controller: _scrollController, 
            ),
      )
    );
  }
}

导入“../Userdata.dart”;
导入“../normalhttp.dart”;
导入“../thirdparty/alert.dart”;
导入“journalItem.dart”;
进口“包装:颤振/材料.省道”;
导入“package:Lifer_flatter/normalhttp.dart”;
类journalList扩展StatefulWidget{
串jwt;
字符串用户名;
journalList(this.jwt,this.userName,{Key}):super(Key:Key);
@凌驾
状态createState(){
返回新的RJournalList();
}
}
类RJournalList扩展了状态{
生活本地化;
列出ID;
最终ScrollController_ScrollController=ScrollController();
int journalReadBegin=0;
int-oneTimeLoadJournalItemNumber=10;
Future refreshAll()异步{
ids.clear();
journalReadBegin=0;
//返回null;
等待插入多个日志();
返回null;
}
Future InsertSevertJournals()异步{
Map ret=wait JsonPost(“/JournalSystem/GetLeastSeveralJournals”{
“jwt”:widget.jwt,
“ItemNumberStart”:journalReadBegin,
“ItemNumberRend”:journalReadBegin+oneTimeLoadJournalItemNumber,
});
如果(!ret.containsKey(“结果”)| | ret[“结果”]==false){
networkErrorAlert(上下文);
返回;
}
List rids=List.from(ret[“有效载荷]);
debugPrint(“l:+rids.length.toString());
设置状态(){
ids=RID;
});
//对于(int i=0;i
当我调用InsertSevertJournals时,错误出现了。 journalItem的代码

import 'package:Lifer_flutter/thirdparty/MaterialTapWidget.dart';
import 'package:flutter/material.dart'; 
import 'package:Lifer_flutter/journal/struct.dart';
import 'journalShow.dart';
class journalItem extends StatefulWidget {
  String jwt,journalId;
  journalItem ({this.jwt,this.journalId,Key key}):super(key:key);
  @override
  State<StatefulWidget> createState() {
    return _journalItemState (jwt,journalId);
  }
}
class _journalItemState extends State <journalItem> {
  IconData data;
  String journalId,jwt;
  Weather iconId;
  Journal journal;
  _journalItemState (this.jwt,this.journalId) {
    setState ((){
      journal = Journal (context,journalId,jwt,() {
        iconId = journal.weatherIcon;
      });
    });
  }
  @override
  Widget build(BuildContext context) {
    return 
  MaterialTapWidget (
    onTap: () {
      //点击那就进入展示页面。
      MaterialJournalShowWindow (journal);
    },
    child:Padding (
      padding: const EdgeInsets.all(20.0),
      child: Row(
        children: <Widget>[
          Icon (getIconData(iconId)),
          Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Text (
                journal.title,
                style: TextStyle(
                  fontSize: 50,
                ),
                maxLines: 1,
                overflow: TextOverflow.ellipsis,
              ),
              Text (
                journal.content,
                softWrap: true,
                maxLines: 4,
                overflow: TextOverflow.ellipsis,
              )
            ],
          )
        ],
      ),
    )
  );
  }
}
import'包装:Lifer_flatter/thirdparty/materialtappwidget.dart';
进口“包装:颤振/材料.省道”;
导入“包:Lifer_flatter/journal/struct.dart”;
导入“journalShow.dart”;
类journalItem扩展StatefulWidget{
字符串jwt,日志ID;
journalItem({this.jwt,this.journalId,Key}):super(Key:Key);
@凌驾
状态createState(){
返回日志状态(jwt,日志ID);
}
}
类_journalItemState扩展状态{
Iconda数据;
字符串日志ID,jwt;
天气指数;
期刊;
_journalItemState(this.jwt,this.journalId){
设置状态(){
日志=日志(上下文,日志ID,jwt,(){
iconId=journal.weatherIcon;
});
});
}
@凌驾
小部件构建(构建上下文){
返回
材料桥(
onTap:(){
//点击那就进入展示页面。
材料日志显示窗口(日志);
},
孩子:填充(
填充:常数边集全部(20.0),
孩子:排(
儿童:[
图标(geticonda(iconId)),
纵队(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
journal.title,
样式:TextStyle(
尺寸:50,
),
maxLines:1,
溢出:TextOverflow.省略号,
),
正文(
杂志内容,
软包装:是的,
maxLines:4,
溢出:TextOverflow.省略号,
)
],
)
],
),
)
);
}
}
调试日志

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
[38;5;244mThe following assertion was thrown building NotificationListener<KeepAliveNotification>:[39;49m
setState() called in constructor: _journalItemState#76cf3(lifecycle state: created, no widget, not mounted)


[38;5;248mThis happens when you call setState() on a State object for a widget that hasn't been inserted into the widget tree yet. It is not necessary to call setState() in the constructor, since the state is already assumed to be dirty when it is initially created.[39;49m

[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mListView[39;49m
[38;5;244mWhen the exception was thrown, this was the stack[39;49m
[38;5;244m#0      State.setState.<anonymous closure>[39;49m
[38;5;244m#1      State.setState[39;49m
[38;5;248m#2      new _journalItemState[39;49m
[38;5;248m#3      journalItem.createState[39;49m
[38;5;244m#4      new StatefulElement[39;49m
[38;5;244m...[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 263 pos 16: 'child == null || indexOf(child) > index': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mListView[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
A RenderSliverPadding expected a child of type RenderSliver but received a child of type RenderErrorBox.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mListView[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mListView[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mListView[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mListView[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mListView[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mListView[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mListView[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mListView[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mRefreshIndicator[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mRefreshIndicator[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mRefreshIndicator[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mScaffold[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mScaffold[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mScaffold[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mScaffold[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mScaffold[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mScaffold[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mScaffold[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mScaffold[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mScaffold[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mScaffold[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mScaffold[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mScaffold[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mjournalList[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4022 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
[38;5;244mThe relevant error-causing widget was[39;49m
    [38;5;248mjournalList[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
Duplicate GlobalKey detected in widget tree.
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m
[38;5;248m════════ widgets库捕获到异常═══════════════════════════════════[39;49m
[38;5;244在构建NotificationListener时抛出了以下断言:[39;49m
在构造函数中调用setState():_journalItemState#76cf3(生命周期状态:已创建,无小部件,未装入)
[38;5;248在Sta上调用setState()时会发生这种情况
_journalItemState (this.jwt,this.journalId) {
  journal = Journal (context,journalId,jwt,() {
    iconId = journal.weatherIcon;
  });
}