You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Provider通知监听器但未传递数据问题求助

Flutter Provider通知监听器但数据未传递到页面的解决方法

核心问题分析

你的WeatherProvider中,weatherCaller方法里声明了局部变量firstCall和weatherOfToday,这会覆盖类的成员变量,导致接口返回的数据并没有赋值到Provider的状态属性中。虽然你调用了notifyListeners(),但页面监听的成员变量还是初始的空对象,自然拿不到新数据。

修正后的Provider代码

把方法里的var去掉,直接给类的成员变量赋值:

import 'package:flutter/material.dart';
import 'package:weather_app/exthernal/models/first_call_model.dart';
import 'package:weather_app/exthernal/models/w_response_model.dart';
import 'package:weather_app/exthernal/w_service.dart';

class WeatherProvider extends ChangeNotifier {
  WeatherService firtCaller = WeatherService();
  WeatherService weatherCall = WeatherService();
  FirstCallModel firstCall = FirstCallModel();
  WeatherResponseModel weatherOfToday = WeatherResponseModel();

  weatherCaller() async {
    // 移除var,直接赋值给类成员变量
    firstCall = await firtCaller.getFirstCall();
    weatherOfToday = await weatherCall.getHttp();
    notifyListeners();
  }
}

额外优化建议

  • 异常处理:给异步请求添加try-catch,避免请求失败导致崩溃:
    weatherCaller() async {
      try {
        firstCall = await firtCaller.getFirstCall();
        weatherOfToday = await weatherCall.getHttp();
      } catch (e) {
        print('天气请求失败: $e');
        // 可以在这里添加错误状态通知用户
      } finally {
        notifyListeners();
      }
    }
    
  • 加载状态:可以在Provider中添加isLoading变量,页面根据状态显示加载提示,提升体验:
    bool isLoading = false;
    
    weatherCaller() async {
      isLoading = true;
      notifyListeners();
      try {
        firstCall = await firtCaller.getFirstCall();
        weatherOfToday = await weatherCall.getHttp();
      } catch (e) {
        print('天气请求失败: $e');
      } finally {
        isLoading = false;
        notifyListeners();
      }
    }
    
    页面中就可以根据value.isLoading显示加载圈:
    value.isLoading ? CircularProgressIndicator() : Text(value.weatherOfToday.nombre ?? 'empty')
    

内容的提问来源于stack exchange,提问作者uollas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:50:26