首页 文章

Flutter Widget状态构造函数未运行

提问于
浏览
1

我的代码:

import 'package:flutter/material.dart';
import '../services.dart';
import 'PersonCard.dart';

class PersonList extends StatefulWidget {  
  PersonList() {
    Services.fetchPeople();
  }

  @override
  _PersonListState createState() => new _PersonListState();
}

class _PersonListState extends State<PersonList> {    
  _PersonListState() {
    print('Helo!?'); // Not running
  }

  @override
  Widget build(BuildContext context) {
    return new Padding(
      padding: new EdgeInsets.all(10.0),
      child: new ListView(
        children: <Widget>[
          // new PersonCard('Bob', 'Wazowski', '2 minutes ago'),
          // new PersonCard('Tim', 'Alan', '5 hours ago'),
          // new PersonCard('Josh', 'Applebee', 'Yesterday'),
        ]
      )
    );
  }
}

基本上,当我的窗口小部件加载 PersonList() 函数运行时,调用带有 Services.fetchPeople() 的Web服务 . 基本上我想要做的是 fetchPeople() 将返回 Map 然后我可以迭代并创建 PersonCard 对象 .

但是 _PersonListState() 构造函数不会运行 . 我错过了一些明显的东西吗

1 回答

  • 1

    您可以使用 widget.people.map((p) => new PersonCard(...)) 将数据转换为wigets:

    class PersonList extends StatefulWidget {  
      PersonList() {
        Services.fetchPeople().then((p) => setState(() => people = p));
      }
    
      List<Person> people;
    
      @override
      _PersonListState createState() => new _PersonListState();
    }
    
    class _PersonListState extends State<PersonList> {    
      _PersonListState() {
        print('Helo!?'); // Not running
      }
    
      @override
      Widget build(BuildContext context) {
        return new Padding(
          padding: new EdgeInsets.all(10.0),
          child: new ListView(
            children: widget.people.map(
                (p) => new PersonCard(p.firstName, p.lastName, p.updateTime /* or whatever that is */,
            ).toList(),
          ),
        );
      }
    }
    

相关问题