当使用Flutter Provider时,SignalR客户端flutter库在另一个widget中显示空值。

问题描述 投票:0回答:1

我试图用flutter连接SignalR服务器,我试图使用Provider访问数据,这些数据来自另一个Widget,但收到的是一个空值。这是 讯号 我正在使用的flutter的库。

下面是我的 级别 延伸出 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;在另一个有状态的Widget中调用它来填充一些来自SignalR服务器的数据,但它在另一个Widget中返回null,然而,当你试图在这里打印数据时,在 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,我还是想知道我做错了什么。

善意的需要一些帮助。

flutter dart websocket signalr.client
1个回答
0
投票

这是很简单的。你的 Future<void> getBreakingNews() async 返回void,因此为null。只要将返回类型调整为你需要的任何类型即可。

编辑一下

实际上,问题在于你没有调用你的getter。

await breakingNewsInfo.getBreakingNews();

所以要么从函数中返回你的结果,要么调用getter。两者都应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.