Dart 重置子窗口小部件的状态

Dart 重置子窗口小部件的状态,dart,flutter,state,Dart,Flutter,State,以下是我遇到问题的代码摘要: 父窗口小部件 class HomePage extends StatefulWidget { @override State<HomePage> createState() => HomePageState(); } class HomePageState extends State<HomePage> { final GlobalKey<AsyncLoaderState> _asyncLoaderStat

以下是我遇到问题的代码摘要:

父窗口小部件

class HomePage extends StatefulWidget {
  @override
    State<HomePage> createState() => HomePageState();
}

class HomePageState extends State<HomePage> {
  final GlobalKey<AsyncLoaderState> _asyncLoaderState = GlobalKey<AsyncLoaderState>();
  List<DateTime> rounds;
  List<PickupModel> pickups;
  DateTime currentDate;

  Widget build(BuildContext context) {
    var _asyncLoader = AsyncLoader(
      key: _asyncLoaderState,
      initState: () async => await _getData(),
      renderLoad: () => Scaffold(body: Center(child: CircularProgressIndicator())),
      renderError: ([error]) => Text('Sorry, there was an error loading'),
      renderSuccess: ({data}) => _buildScreen(context),
    );

    return _asyncLoader;
  }

  Widget _buildScreen(context) {
    return Scaffold(
      body: PickupList(pickups),
    );
  }


  Future<Null> _selectDate(BuildContext context) async {
    final DateTime picked = await showDatePicker(
      context: context,
    );

    if (picked != null && picked != currentDate) {
      currentDate = picked;
      pickups = await api.fetchPickupList(currentDate);
      setState(() {
      });
    }
  }

  _getData() async {
    rounds =  await api.fetchRoundsList();
    currentDate = _getNextRound(rounds);
    pickups = await api.fetchPickupList(currentDate);
  }
}
类主页扩展StatefulWidget{
@凌驾
State createState()=>HomePageState();
}
类HomePageState扩展了状态{
最终GlobalKey_asyncLoaderState=GlobalKey();
列出轮数;
列出提货单;
日期时间当前日期;
小部件构建(构建上下文){
var\u asyncLoader=asyncLoader(
键:_asyncLoaderState,
initState:()async=>await_getData(),
renderLoad:()=>脚手架(主体:中心(子对象:CircularProgressIndicator()),
renderError:([error])=>Text('抱歉,加载时出错'),
renderSuccess:({data})=>\u构建屏幕(上下文),
);
返回异步加载程序;
}
小部件构建屏幕(上下文){
返回脚手架(
主体:拾音器列表(拾音器),
);
}
Future\u selectDate(BuildContext上下文)异步{
选择的最终日期时间=等待showDatePicker(
上下文:上下文,
);
如果(已拾取!=null&&picked!=currentDate){
当前日期=已拾取;
pickups=wait api.fetchPickupList(当前日期);
设置状态(){
});
}
}
_getData()异步{
rounds=等待api.fetchRoundsList();
currentDate=\u getNextRound(轮数);
pickups=wait api.fetchPickupList(当前日期);
}
}
子窗口小部件

class HomePage extends StatefulWidget {
  @override
    State<HomePage> createState() => HomePageState();
}

class HomePageState extends State<HomePage> {
  final GlobalKey<AsyncLoaderState> _asyncLoaderState = GlobalKey<AsyncLoaderState>();
  List<DateTime> rounds;
  List<PickupModel> pickups;
  DateTime currentDate;

  Widget build(BuildContext context) {
    var _asyncLoader = AsyncLoader(
      key: _asyncLoaderState,
      initState: () async => await _getData(),
      renderLoad: () => Scaffold(body: Center(child: CircularProgressIndicator())),
      renderError: ([error]) => Text('Sorry, there was an error loading'),
      renderSuccess: ({data}) => _buildScreen(context),
    );

    return _asyncLoader;
  }

  Widget _buildScreen(context) {
    return Scaffold(
      body: PickupList(pickups),
    );
  }


  Future<Null> _selectDate(BuildContext context) async {
    final DateTime picked = await showDatePicker(
      context: context,
    );

    if (picked != null && picked != currentDate) {
      currentDate = picked;
      pickups = await api.fetchPickupList(currentDate);
      setState(() {
      });
    }
  }

  _getData() async {
    rounds =  await api.fetchRoundsList();
    currentDate = _getNextRound(rounds);
    pickups = await api.fetchPickupList(currentDate);
  }
}
(Listview构建互动程序)

类选取扩展了StatefulWidget{
最终拾取模型拾取;
皮卡提拉(这是皮卡);
@凌驾
状态createState(){
返回pickuplestate();
}
}
类pickupListState扩展状态{
持续时间;
定时器;
布尔不可用;
bool\u isRunning=false;
bool_isDone=假;
@凌驾
void initState(){
持续时间=widget.pickup.duration;
_isUnavailable=widget.pickup.customerUnavailable;
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回行(
儿童:[
//用户界面小部件
]
}
因此,我有一个父窗口小部件,它是显示在“子拾取”文件中的拾取的初始列表。可以使用
\u selectDate
更改显示的拾取的日期。这将获取存储在父状态中的拾取的新列表,并使用正确的属性重建子项。但是,子项的状态ren小部件(持续时间、isRunning、isDone…)不会重置,因此在更改日期时它们会留在屏幕上


如果我觉得我遗漏了一些明显的东西,但我不知道如何重置子部件的状态或创建新的拾取文件,以便在更改日期时获得新的单独状态。

首先,如果您已经可以从
小部件.pickup
访问这些值,那么
initState
有什么意义离子每隔几百毫秒增加一次,因为磁贴用作秒表,所以我认为最好从状态中增加一个对象。我是否应该直接增加
小部件。拾取。持续时间
拾取模型
将持续时间定义为最终时间,但我想我可以删除它。从颤振开始,我有点担心失信于至诚