flutter - 将项目添加到列表后,Flutter 提供程序返回空列表
问题描述
我有一个带有 Provider 的 Flutter 项目。
我在main.dart中设置了一个 MultiProvider
void main() {
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(
create: (_) => VehiclesProvider(),
),
],
child: MyApp(),
),
);
}
这是我的车辆提供商。
class VehiclesProvider with ChangeNotifier, DiagnosticableTreeMixin {
List<Vehicle> _vehicles = [];
late VehicleDataModel _selectedVehicle;
VehicleService _vehicleService = VehicleService();
UnmodifiableListView get vehicles => UnmodifiableListView(_vehicles);
dynamic get selectedVehicle => _selectedVehicle;
void getData() async {
final all = await _vehicleService.getAllVehicles();
_vehicles.addAll(all.response);
notifyListeners();
final selected =
await _vehicleService.getSelectedVehicleData(all.response.first.id);
_selectedVehicle = selected;
notifyListeners();
}
}
如您所见,这个想法是存储车辆(来自 API),然后用户可以选择车辆(默认情况下是第一个)。我跟着getData()
断点,一切似乎都在工作。
但
当我尝试访问数据时......并且我正在尝试多种方式,我就是做不到。我只得到这个:[]
我试图用一个按钮的 onclick 函数来获取它们,如下所示:
getSelectedCar() {
final p = Provider.of<VehiclesProvider>(context, listen: false);
print('p.vehicles');
print(p.vehicles);
print(context.read<VehiclesProvider>().vehicles);
}
在这样的布局中:
Text(jsonEncode(Provider.of<VehiclesProvider>(context).vehicles),),
每种方式我唯一得到的是空数组。当来自 API 的数据在这里时,我会显示一条 toast 消息,然后我才导航到我想要访问它的屏幕,并尝试按下按钮来获取它,但似乎没有任何帮助。
解决方案
将其更改为:
final p = Provider.of<VehiclesProvider>(context, listen: true); // make listen : true.
因此,当列表被填充时,您会得到更新,换句话说,当您notifyListeners()
.
推荐阅读
- php - 修剪标签两侧的空格?
- netbeans - 如何验证 netbeans 下载 (zip) 文件的签名。我有 asc 密钥文件
- javascript - 打开内容时如何使按钮不掉下来?
- jenkins - 如何将 Serenity 报告结果导出到 HP ALM
- java - 如何按字节修剪字符串?
- reactjs - React - 更新道具的状态更改 - 输入元素
- javascript - Webpack CSS 到可构造的样式表
- plot - 向 Octave 图中的现有图例添加信息
- awesome-wm - Awesome-WM:带有 Radical 的上下文菜单的位置
- algorithm - 以编程方式生成“哈希”函数