Dart 颤振状态管理

Dart 颤振状态管理,dart,flutter,Dart,Flutter,我已经创建了一个颤振应用程序,我正在其中管理应用程序中todolist的阵列。我可以通过添加按钮添加文本 我已经创建了一个小部件来显示在列表中。 我的问题是我应该如何管理个人的UI 代码: 导入“包装:颤振/材料.省道”; 类TodoList扩展了StatefulWidget{ _TodoListState createState()=>new_TodoListState(); } 类_TodoListState扩展了状态{ 列表_List=新列表(); 小部件listTile({字符串数据:'

我已经创建了一个颤振应用程序,我正在其中管理应用程序中todolist的阵列。我可以通过添加按钮添加文本

我已经创建了一个小部件来显示在列表中。 我的问题是我应该如何管理个人的UI

代码:

导入“包装:颤振/材料.省道”;
类TodoList扩展了StatefulWidget{
_TodoListState createState()=>new_TodoListState();
}
类_TodoListState扩展了状态{
列表_List=新列表();
小部件listTile({字符串数据:'[Empty data]'}){
bool_writeable=false;
TextEditingController _textController=新的TextEditingController(文本:数据);
字符串_text=_textController.text;
如果(!\u可写){
返回新行(
儿童:[
新扩展(
子项:新文本(数据)
),
新建图标按钮(图标:新建图标(Icons.edit),
已按下:(){
//设置状态(){
_可写=!\u可写;
打印(_writable.toString());
//                    });
}),
新建图标按钮(图标:新建图标(图标。删除圆圈),打开按钮:空),
],
);
}否则{
返回新行(
儿童:[
新扩展(
子项:新的文本字段(控制器:\u textController)
),
新建图标按钮(图标:新建图标(Icons.done),打开按钮:空),
],
);
}
}
无效附加列表(字符串){
打印(字符串);
设置状态(){
_list.add(字符串);
});
打印(_列表);
}
void removeFromList(int索引){
}
静态最终TextEditingController _textController=新的TextEditingController();
字符串get _text=>_textController.text;
@凌驾
小部件构建(构建上下文){
Widget adderTile=新行(
儿童:[
新扩展(
儿童:
新文本字段(
textAlign:textAlign.center,
控制器:_textController,
装饰:新输入装饰(hintText:‘新项目!’),
),
),
新图标按钮(图标:新图标(Icons.add),按下:({addInList(_text);}),
],
);
返回新材料PP(
标题:“托多利斯特”,
家:新脚手架(
appBar:new appBar(标题:new Text('TodoList'),),
正文:新栏目(
儿童:[
增编,
新建ListView.builder(
收缩膜:对,
itemCount:_list.length,
itemBuilder:(上下文,int索引){
返回listTile(数据:_列表[索引]);
}
),
],
),
),
);
}
}
如果我在setState中更改了_writable,那么它将重新启动小部件,并且_writable再次变为false。如果我在没有setState的情况下执行,那么_writable将变为true,但小部件不会重新启动

注意:我不想添加另一个数组来管理哪些是可写的,哪些不是。提前感谢。

变量

bool _writable = false;
在方法
listTile()
中声明为局部变量,但应移到
List\u List=new List()旁边
以成为成员变量。然后使用
setState()
进行设置并重新生成视图

编辑:
您应该创建一个专用的
StatefulWidget
TodoListEntry
),将
\u writable
作为上述建议的成员。将
listTile(…)
的几乎整个方法体移动到
TodoListEntryState
build()
-方法,使参数
字符串数据也成为一个成员,并通过构造函数传递值。

状态管理

在下面的页面中,您将学习处理颤振应用程序中状态的基础知识


当您探索Flitter时,总有一天您需要通过应用程序在屏幕之间共享应用程序状态。您可以采取许多方法,也可以考虑许多问题。

您需要保持其可写/不可写的状态!你不想把它保存在数组中,但你需要把它保存在某个地方。@RichardHeap我知道。但我不会把它放在阵列中,在全球范围内只创建一个bool将导致其他bool的改变。我将尝试在另一个widget类中创建var,我希望这会有所帮助。但它会为所有列表项更改,因此,所有文本都将更改为editText。我只想要一个被点击的。那么你的意思是我应该在statefulwidget对象中传递它,并在构建方法所在的state类中传递这些参数?你不觉得这条路很长吗?我怀疑这条路会不会行得通?我认为这是等级和责任的明显分离。将
TodoList
todolistile/Entry
拆分为单独的小部件,然后将这些条目嵌套在列表中。
\u writeable
标志是条目的成员,而不是列表的成员。
bool _writable = false;