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

使用Riverpod构建动态ListView时UI不更新的问题求助

问题解决:ListView.builder无法渲染且UI不更新

核心问题:错误的返回值

在data.when的data回调中,你完整构建了包含ListView的SafeArea布局,但并未返回该布局,反而返回了null,导致Scaffold的body为空,自然无法渲染任何内容。

修复方法:将创建的SafeArea作为回调的返回值,删除最后的return null;:

data: (data) {
  List<RoomModel> roomList = data.map((room) => room).toList();
  // 直接返回布局结构,替换原本的return null
  return SafeArea(
      child: Container(
        padding: const EdgeInsets.symmetric(horizontal: 36, vertical: 16),
        child: Column(
          // 原布局内容保持不变
        ),
      )
  );
},

其他关键优化点

  • TextEditingController生命周期问题
    当前在build方法内创建roomIDController,每次UI重建都会重新初始化控制器,可能导致输入内容丢失。改用ConsumerStatefulWidget管理控制器生命周期:

    class MainPage extends ConsumerStatefulWidget {
      const MainPage({super.key});
    
      @override
      ConsumerState<MainPage> createState() => _MainPageState();
    }
    
    class _MainPageState extends ConsumerState<MainPage> {
      late TextEditingController roomIDController;
    
      @override
      void initState() {
        super.initState();
        roomIDController = TextEditingController();
      }
    
      @override
      void dispose() {
        roomIDController.dispose();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        // 原build逻辑迁移至此
      }
    }
    
  • FutureProvider自动更新触发
    若需要数据变化时自动刷新UI,在数据更新的地方调用ref.invalidate(roomDataProvider),强制FutureProvider重新执行HTTP请求并更新状态。

  • 布局冗余简化
    ListView外层嵌套的多层SizedBox可简化,避免不必要的约束叠加:

    // 简化后的ListView外层布局
    SizedBox(
      height: deviceWidth * 0.56,
      child: ListView.builder(
        scrollDirection: Axis.horizontal,
        itemCount: roomList.length,
        itemBuilder: (context, index) {
          // 原item内容保持不变
        },
      ),
    )
    

验证修复

修复核心返回值问题后,UI即可正常渲染布局及ListView内容。若需状态变化时自动更新,确保数据更新时触发ref.invalidate(roomDataProvider)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:00:02