使用 Flutter Provider 时,SignalR 客户端颤振库在另一个小部件中显示空值
Posted
技术标签:
【中文标题】使用 Flutter Provider 时,SignalR 客户端颤振库在另一个小部件中显示空值【英文标题】:SignalR client flutter library shows null values in another widget when using Flutter Provider 【发布时间】:2020-05-28 22:04:42 【问题描述】:我正在尝试使用颤振连接 SignalR 服务器,并且我尝试使用 Provider 访问来自另一个 Widget 的数据,但我收到一个空值。这是 Flutter 正在使用的 SignalR 库。
下面是我的 Class,它扩展了 ChangeNotifier
:
class BreakingNewsSignalRClient with ChangeNotifier
String _breakingNews;
Future<void> getBreakingNews() async
final hubConnection = HubConnectionBuilder()
.withUrl('https://services.xxxx.com/breakingNews')
.build();
await hubConnection.start();
hubConnection.on("UpdateBreakingNews", (data)
_breakingNews = data.toString();
print(data.toString());
notifyListeners();
);
hubConnection.onclose((error) => print("Connection Closed"));
String get breakingNewsFunction => _breakingNews;
class BreakingNewsModel
final String News;
BreakingNewsModel(this.News);
正如您在上面的代码中看到的,我有一个 getter String get breakingNewsFunction => _breakingNews;
,它在另一个有状态的小部件中被调用以填充来自 SignalR 服务器的一些数据,但是它在另一个小部件中返回 null,但是,当您尝试print data here in getBreakingNews
方法显示数据。
下面是另一个接收数据的 Widget 类:
class BreakingNews extends StatefulWidget
const BreakingNews(Key key, @required this.article, @required this.index)
: super(key: key);
final Article article;
final int index;
@override
_BreakingNewsState createState() => _BreakingNewsState();
class _BreakingNewsState extends State<BreakingNews>
settings() async
var breakingNewsInfo =
Provider.of<BreakingNewsSignalRClient>(context, listen: false);
await breakingNewsInfo.getBreakingNews();
print('lets see -- $breakingNewsInfo.breakingNewsFunction');
@override
void initState()
// TODO: implement initState
settings();
super.initState();
因此,当您查看print('lets see -- $breakingNewsInfo.breakingNewsFunction');
这一行时,它会打印 null,我仍然想知道这里做错了什么。
请大家帮忙。
【问题讨论】:
【参考方案1】:你试过data[0]
吗?
你会写吗?
_breakingNews = data[0].toString();
而不是
_breakingNews = data.toString();
【讨论】:
【参考方案2】:这很简单。您的 Future<void> getBreakingNews() async
返回 void,因此返回 null。只需将返回类型调整为您需要的任何类型。
编辑:
实际上,问题是你没有在这里调用你的getter。
await breakingNewsInfo.getBreakingNews();
所以要么从函数中返回结果,要么调用 getter。两者都应该工作。
【讨论】:
嘿,Benedikt,感谢您的回复,好吧,可以说我使方法可返回,我将如何将返回的数据附加到 getter,也许您可以给我一个说明,使用我共享的代码.谢谢 getter 是打印中的print('lets see -- $breakingNewsInfo.breakingNewsFunction');
我怎么能在这里调用getter,await breakingNewsInfo.getBreakingNews();
,有点困惑?
@IdrisStack 抱歉,我误读了您的代码。我现在再次检查。
@IdrisStack 在运行breakingNewInfo.getBreakinfNews();
后,变量得到更新。所以吸气剂应该工作以上是关于使用 Flutter Provider 时,SignalR 客户端颤振库在另一个小部件中显示空值的主要内容,如果未能解决你的问题,请参考以下文章
使用上下文和观察更改模型时,Flutter Provider 不会触发重建
如何在 Flutter 中使用 Provider 正确获取 API
在 Flutter 中使用 Provider 更新和动画化 AnimatedList
SIG Cloud Provider Alibaba 网研会第 2 期顺利召开 | 云原生生态周报