Flutter中含大量单双引号的长字符串赋值报错的解决办法
Flutter 存储含大量单双引号长文本的解决方案
下面是几种不用删除引号就能解决报错的实用方法:
1. 使用三重引号定义多行字符串
Flutter 基于的 Dart 语言支持用三重单引号(''')或三重双引号(""")包裹多行文本,这种方式下,文本内的单双引号无需转义,哪怕存在未闭合的引号也不会破坏字符串结构,完美适配长文本场景。
示例代码:
String story = ''' 从前,在乡间连绵起伏的山丘中坐落着一个小村庄,村里住着一个名叫杰克的小男孩。杰克好奇心强又爱冒险,喜欢探索村庄周围的田野和森林。 有一天,他在树林里散步时,来到了一片开满野花的美丽空地。空地中央矗立着一棵高大古老的橡树。杰克走近树时,发现树干上有一扇小门。 杰克很好奇,推开门往里看。令他惊讶的是,里面是一个小巧舒适的房间,摆满了各种珍宝:闪亮的宝石、金币和晶莹的水晶。杰克简直不敢相信自己的眼睛! 当他伸手去触摸那些闪闪发光的宝石时,身后传来一个柔和的声音:“你是谁?在我的树里做什么?” 杰克吓了一跳,转过身来,看到一个有着闪亮翅膀和灿烂笑容的小仙子。“对不起,”杰克低下头说,“我不是故意闯入的。我只是在探险,看到这扇门就忍不住进来了。” 仙子笑了笑,飞到杰克身边。“不用道歉,亲爱的孩子,”她说,“我很高兴你找到了我的树。人类很少能偶然发现我的家。我叫卢娜,是这片森林的守护者。” 杰克惊讶地睁大了眼睛。“守护仙子!我以前从来没见过。你能像故事里那样满足我的愿望吗?” 卢娜笑着摇了摇头。“恐怕不行,亲爱的杰克。不过如果你愿意,我可以送你一份礼物。从我的宝藏库里选一样东西,带着它去探险吧。” 杰克想了一会儿,然后拿起一块小巧的闪亮水晶。“请给我这个,”他举起来给卢娜看。 “啊,明智的选择,”卢娜笑着说,“这块水晶会给你带来好运,保护你旅途平安。” 杰克怀着感激的心感谢了卢娜,并承诺会好好保管这块水晶。当他离开树,穿过树林返回村庄时,他感觉到魔法和奇迹围绕着自己,因为他知道自己在森林的魔法守护者那里交到了一个新朋友。 ''';
2. 转义文本中的引号
如果坚持使用普通字符串,可以对文本内的引号手动转义:用\"转义双引号,用\'转义单引号。这种方法需要逐个处理引号,长文本操作繁琐,但仍是可行方案。
示例代码(截取片段):
String story = "从前,在乡间连绵起伏的山丘中坐落着一个小村庄,村里住着一个名叫杰克的小男孩。杰克好奇心强又爱冒险,喜欢探索村庄周围的田野和森林。\n有一天,他在树林里散步时,来到了一片开满野花的美丽空地。空地中央矗立着一棵高大古老的橡树。杰克走近树时,发现树干上有一扇小门。\n杰克很好奇,推开门往里看。令他惊讶的是,里面是一个小巧舒适的房间,摆满了各种珍宝:闪亮的宝石、金币和晶莹的水晶。杰克简直不敢相信自己的眼睛!\n当他伸手去触摸那些闪闪发光的宝石时,身后传来一个柔和的声音:\"你是谁?在我的树里做什么?\"";
3. 从本地资源文件读取文本
如果文本特别长或需要频繁修改,建议把文本保存为本地.txt文件,通过Flutter的资源加载机制读取,彻底规避引号处理问题。
步骤如下:
- 在项目根目录创建
assets文件夹,将翻译后的文本保存为story.txt放入其中。 - 在
pubspec.yaml中配置资源:
flutter: assets: - assets/story.txt
- 用
rootBundle读取文本:
import 'package:flutter/services.dart'; Future<String> loadStory() async { return await rootBundle.loadString('assets/story.txt'); } // 使用示例 String story = await loadStory();
内容的提问来源于stack exchange,提问作者ItsSaed
相关产品推荐
相关产品推荐

