Flutter 如何在父/根小部件中初始化数据模型错误:在初始化器中只能访问静态成员

Flutter 如何在父/根小部件中初始化数据模型错误:在初始化器中只能访问静态成员,flutter,dart,Flutter,Dart,我试图在我的父窗口小部件中初始化我的数据模型对象,但是我得到了以下错误“在初始化器中只能访问静态成员”。我正在想办法避开这个问题。我还想知道这是否是在父窗口小部件中初始化数据模型的正确方法,或者是否有更好的方法 我有一个简单的TodoList模型,负责处理管理用户todo的所有逻辑 class TodoList { List<Todo> _items = [ Todo( id: '1', task: 'do laundry',

我试图在我的父窗口小部件中初始化我的数据模型对象,但是我得到了以下错误“在初始化器中只能访问静态成员”。我正在想办法避开这个问题。我还想知道这是否是在父窗口小部件中初始化数据模型的正确方法,或者是否有更好的方法

我有一个简单的TodoList模型,负责处理管理用户todo的所有逻辑

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'}
  ];