Flutter 如何在父/根小部件中初始化数据模型错误:在初始化器中只能访问静态成员
我试图在我的父窗口小部件中初始化我的数据模型对象,但是我得到了以下错误“在初始化器中只能访问静态成员”。我正在想办法避开这个问题。我还想知道这是否是在父窗口小部件中初始化数据模型的正确方法,或者是否有更好的方法 我有一个简单的TodoList模型,负责处理管理用户todo的所有逻辑Flutter 如何在父/根小部件中初始化数据模型错误:在初始化器中只能访问静态成员,flutter,dart,Flutter,Dart,我试图在我的父窗口小部件中初始化我的数据模型对象,但是我得到了以下错误“在初始化器中只能访问静态成员”。我正在想办法避开这个问题。我还想知道这是否是在父窗口小部件中初始化数据模型的正确方法,或者是否有更好的方法 我有一个简单的TodoList模型,负责处理管理用户todo的所有逻辑 class TodoList { List<Todo> _items = [ Todo( id: '1', task: 'do laundry',
class TodoList {
List<Todo> _items = [
Todo(
id: '1',
task: 'do laundry',
note: 'don\'t forget to seperate the whites')
];
List<Todo> get items {
return [..._items];
}
void toggleAll() {}
bool _hasIncompletedTodos() {
return _items.any((todo) => !todo.complete);
}
}
类TodoList{
列表项=[
待办事项(
id:'1',
任务:“洗衣服”,
注意:“别忘了把白色分开”
];
列出获取项目{
返回[…_项];
}
void toggleAll(){}
bool_有不完全的todos(){
返回_items.any((todo)=>!todo.complete);
}
}
我没有使用任何状态管理库,只是将我的所有状态存储在根小部件(主屏幕)中,并将所有状态传递给子小部件
class _HomeScreenState extends State<HomeScreen> {
TodoList todoList;
int _selectedPageIndex = 0;
List<Map<String, dynamic>> _pages = [
{
'page': TodosListScreen(
todos: todoList.items, <<< Only static members can be accessed in initializers
),
'title': 'Todos'
},
{'page': TodosStatsScreen(), 'title': 'Stats'}
];
class\u homescrenstate扩展状态{
托多利斯特托多利斯特;
int _selectedPageIndex=0;
列表页面=[
{
“页面”:ToDoListScreen(
todos:todoList.items,如下所示,在widgetbuild方法中初始化
List<Map<String, dynamic>> _pages;
@override
Widget build(BuildContext context) {
_pages = [
{
'page': TodosListScreen(
todos: todoList.items,
),
'title': 'Todos'
},
{'page': TodosStatsScreen(), 'title': 'Stats'}
];
}
List\u页面;
@凌驾
小部件构建(构建上下文){
_页数=[
{
“页面”:ToDoListScreen(
todos:todoList.items,
),
“标题”:“待办事项”
},
{'page':TodosStatsScreen(),'title':'Stats'}
];
}
问题在于,当对象仍在构造时,您引用的是对象内部的对象。在Dart中创建对象分两个阶段进行,首先同时初始化所有数据,然后调用构造函数体
在您的情况下,这就是问题所在:
class _HomeScreenState extends State<HomeScreen> {
TodoList todoList;
...
List<Map<String, dynamic>> _pages = [
{
'page': TodosListScreen(
todos: todoList.items, <<<< same error
),
'title': 'Todos'
},
{'page': TodosStatsScreen(), 'title': 'Stats'}
];
class\u homescrenstate扩展状态{
托多利斯特托多利斯特;
...
列表页面=[
{
“页面”:ToDoListScreen(
todos:todoList.items,将其移动到initState可以消除错误,但会导致setState未正确更新UI的错误。在小部件构建方法中使用_页面修复了此问题。将_页面移动到构建方法中是否有任何缺点?这会像不必要的重建一样对性能产生任何负面影响?这也是p初始化数据模型的正确方法还是有更好的方法?只是想确保我遵循最佳实践从未接触过颤振,所以我不知道该问题的答案。
class _HomeScreenState extends State<HomeScreen> {
TodoList todoList;
...
List<Map<String, dynamic>> _pages = [
{
'page': TodosListScreen(
todos: todoList.items, <<<< same error
),
'title': 'Todos'
},
{'page': TodosStatsScreen(), 'title': 'Stats'}
];