【发布时间】:2021-03-24 10:31:42
【问题描述】:
我正在尝试在一段文本中查找“@”,然后异步收集该标记的 displayName。我遇到的问题是我的 FutureBuilder 一直返回 null。
我得到的错误是这样的。
════════ 小部件库捕获的异常════════
在构建 FutureBuilder(dirty, state: _FutureBuilderState#151f7) 时抛出了以下断言: 构建函数返回 null。
有问题的小部件是:FutureBuilder 构建函数绝不能返回 null。
我的代码是这样的:
Container(
width: double.infinity,
child: FutureBuilder(
initialData: SelectableText(''),
future: buildSelectableText(context),
builder: (BuildContext context, AsyncSnapshot<SelectableText> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting)
return Center(child: CircularProgressIndicator());
return snapshot.data;
}
),
),
Future<SelectableText> buildSelectableText(BuildContext context) async {
return SelectableText.rich(
TextSpan(
text:'',
children: data["comment"].split(' ').map<InlineSpan>((word) async {
return word.startsWith('@') && word.length > 1 ?
TextSpan(
text: ' '+ (await context.read<UserDataModel>().fetchUser(word)).displayName,
style: TextStyle(color: Colors.blue),
): TextSpan(text: ' ' + word);
}).toList()
),
textAlign: TextAlign.justify,
);
}
应该有一个简单的修复方法,但我找不到它
【问题讨论】:
-
在
return snapshot.data之前尝试print(snapshot.data)- 你在日志上看到了什么? -
@pskink 它打印 null 两次
-
那么
print(snapshot.error)呢? -
@pskink
type '(dynamic) => Future<TextSpan>' is not a subtype of type '(String) => InlineSpan' of 'f' -
所以
snapshot.error不为空 - 这就是为什么你的builder返回空 - 你必须先修复该错误(位于buildSelectableText)
标签: flutter dart future flutter-futurebuilder