在 flutter 中重新渲染小部件

问题描述 投票:0回答:1

我无法理解 flutter 中的状态管理,我有以下构建方法:

Widget build(BuildContext context) {
    print("calling build with selectedItem: $selectedItem");

    // TODO: implement build
    return SafeArea(
      child: SingleChildScrollView(
          child: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          mainAxisSize: MainAxisSize.min,
          children: [
            Flexible(
              fit: FlexFit.loose,
              child: DropdownButton<String>(
                value: selectedItem,
                style: const TextStyle(color: Colors.black),
                underline: Container(height: 2, color: Colors.deepPurpleAccent),
                icon: Icon(Icons.arrow_downward),
                iconSize: 20,
                elevation: 16,
                items: widget.streetNamesList
                    .map<DropdownMenuItem<String>>((String value) {
                  return DropdownMenuItem<String>(
                      value: value, child: Text(value));
                }).toList(),
                onChanged: (String? value) {
                  setState(() {
                    selectedItem = value;
                  });
                },
              ),
            ),
            SizedBox(height: 10.0,),
            CarListPerStreetWidgetV2(streetName: selectedItem,)
          ],
        ),
      )),
    );
  }

CarListPerStreetWidget 实现了一个未来的提供程序,该提供程序使用街道名称从数据库中获取数据。 问题是,当我从下拉菜单中选择一个新值时,尽管构建方法被执行,

CarListPerStreetWidgetV2
的构建方法也会被执行,但小部件不会用新的
selectedItem
重新初始化。猜测小部件会初始化一次,但如何将从一个小部件更改到另一个小部件的状态传递给另一个?

flutter dart
1个回答
0
投票

您可以分享 CarListPerStreetWidgetV2 小部件吗?如果此小部件是

StatefulWidget
,您必须在
didUpdateWidget
中更新该小部件。

例如:

@override
void didUpdateWidget(covariant CarListPerStreetWidgetV2 oldWidget) {
  super.didUpdateWidget(oldWidget);
  if(oldWidget.streetName != widget.streetName) {
    setState(() {});
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.