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

Flutter运行报错:'Null' is not a subtype of type 'String' in typecast求助

解决Flutter报错:'Null' is not a subtype of type 'String' in typecast

问题根源

你的状态类构造函数名称拼写错误:_LoaginScreenState() 应该是 _LogInScreenState()。这个错误导致构造函数未被执行,data 变量始终为空的 {},当你尝试将 data["heading"] 强制转换为 String 时,返回值为 null,从而触发类型转换错误。

修复方案

  1. 修正构造函数名称:确保构造函数名称与状态类名完全一致
  2. 推荐使用initState初始化数据:这是Flutter状态类初始化数据的标准方式,比构造函数更安全,能避免生命周期相关问题

修改后的代码

login.dart

import 'package:e_commers_with_stripe/utils/login_data.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

class LogInScreen extends StatefulWidget {
  const LogInScreen({super.key});

  @override
  State<LogInScreen> createState() => _LogInScreenState();
}

class _LogInScreenState extends State<LogInScreen> {
  final TextEditingController _emailController = TextEditingController(); 
  final TextEditingController _passwordController = TextEditingController();
  bool _loadingButton = false ; 

  Map<String, String> data = {}; 

  // 修正构造函数名称
  _LogInScreenState(){
    data = LoginData.sigIn;
  }

  // 更推荐的写法:使用initState初始化
  // @override
  // void initState() {
  //   super.initState();
  //   data = LoginData.sigIn;
  // }

  void switchLogin(){
    setState(() {
      if(mapEquals(data, LoginData.sigUp)){
        data = LoginData.sigIn; 
      }else{
        data = LoginData.sigUp; 
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      resizeToAvoidBottomInset: false, 
      body: SafeArea(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start, 
          children: [
            Padding(
              padding: EdgeInsets.only(bottom: 8), 
              child: Text(
                // 可选:增加空值安全处理,避免后续潜在崩溃
                data["heading"] ?? "默认标题", 
                style: Theme.of(context).textTheme.headlineLarge,
              ),
            )
          ],
        ),
      ),  
    );
  }
}

额外优化建议

为增强代码健壮性,建议使用空值合并运算符 ?? 处理可能的空值,比如 data["heading"] ?? "默认标题",这样即使出现意外空值,App也不会崩溃,而是显示默认文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:53:11