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

Flutter 传递asset路径字符串加载文本资源后容器显示为空如何解决

问题原因&修复方案

你代码的核心错误出在State类中路径获取逻辑写错了,同时要注意asset资源的注册规则,按以下步骤修改即可:

1. 核心错误修复

你在_cs_oneState类中自定义的静态assetPath getter完全多余且错误,没有正确获取父组件传入的路径,State类中要拿StatefulWidget的参数直接通过widget.参数名调用即可,删掉这段错误代码就行。

修复后的类2完整代码如下:

import 'package:flutter/services.dart'; // 别忘了导rootBundle对应的包

class cs_one extends StatefulWidget {
  final String assetPath;
  const cs_one({Key? key, required this.assetPath}) : super(key: key);

  @override
  _cs_oneState createState() => _cs_oneState( );
}

class _cs_oneState extends State<cs_one> {
  String? data;

  void _loadData() async {
    // 直接通过widget.assetPath获取父组件传入的路径
    final _loadedData = await rootBundle.loadString(widget.assetPath);
    setState(() {
      data = _loadedData;
    });
  }

  @override
  void initState() {
    super.initState();
    _loadData();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      // 你的其他Scaffold配置代码
      body: SingleChildScrollView(
        scrollDirection: Axis.vertical,
        child: Container(
          margin: const EdgeInsets.all(15),
          width: 360,
          child: Text(data ?? 'empty'),
        )
      ),
    );
  }
}

2. 必查配置项

要保证Flutter能读取到asset文件,必须在项目根目录的pubspec.yaml中注册对应资源路径,配置示例:

flutter:
  assets:
    # 注册你存放txt文件的目录,末尾要加斜杠
    - lib/asset/textfile/

修改完配置后需要重新运行项目,热重载不会更新asset配置。

3. 可选优化(方便排查问题)

可以给文件读取逻辑加异常捕获,快速定位问题:

void _loadData() async {
  try {
    final _loadedData = await rootBundle.loadString(widget.assetPath);
    setState(() {
      data = _loadedData;
    });
  } catch (e) {
    setState(() {
      data = '读取失败,错误信息:$e';
    });
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:24:03