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
相关产品推荐
相关产品推荐

