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

Dart/Flutter路由系统中获取Future返回值遇非空变量未赋值错误

解决Flutter路由中Future返回值导致的非空变量错误

错误原因

你遇到的The non-nullable local variable 'page' must be assigned before it can be used错误,核心问题在于RouteGenerator.generate是同步函数,但你在termsScreen分支里通过commonService.terms.then(...)异步赋值page。函数执行到return MaterialPageRoute时,异步回调还没触发,page变量此时未被初始化,违反了Dart非空变量必须赋值才能使用的规则。

修正方案

把异步数据的获取逻辑移到路由的builder方法中,用FutureBuilder处理异步状态,这样既符合Flutter路由的同步要求,又能正确等待Future结果:

修改后的RouteGenerator.dart代码

import 'package:chope_ton_diplome/services/CommonService.dart';
import 'package:flutter/material.dart';

class RouteGenerator {
  static Route generate(RouteSettings s) {
    CommonService commonService = CommonService();

    switch (s.name) {
      case RouteConsts.termsScreen:
        ArgumentsAuth args = s.arguments as ArgumentsAuth;
        return MaterialPageRoute(
          builder: (context) => FutureBuilder<String>(
            future: commonService.terms,
            builder: (context, snapshot) {
              // 加载中状态
              if (snapshot.connectionState == ConnectionState.waiting) {
                return const Center(child: CircularProgressIndicator());
              }
              // 错误状态
              else if (snapshot.hasError) {
                return const Center(child: Text('Erreur lors du chargement des CGU'));
              }
              // 数据加载完成
              else if (snapshot.hasData) {
                return TermsScreen(email: args.email, terms: snapshot.data!);
              }
              // 无数据状态
              else {
                return const Center(child: Text('Contenu non disponible'));
              }
            },
          ),
        );
      default:
        return MaterialPageRoute(
          builder: (context) => const Center(
            child: Text('La route est inaccessible'),
          ),
        );
    }
  }
}

方案说明

  1. 移除同步变量page:不再在同步函数中等待异步结果,而是将异步逻辑交给FutureBuilder处理
  2. 状态管理:通过FutureBuilder的snapshot可以处理加载中、错误、成功等多种状态,提升用户体验
  3. 符合路由规则:generate函数始终同步返回Route实例,不会出现变量未赋值的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:27:43