首页 > 解决方案 > 如何在没有导航和 Firebase 的情况下刷新 StreamBuilder - Flutter

问题描述

目前我的代码可以工作,但我必须每 5 秒向 API 发出一次请求,以刷新视图并查看数据中是否发生了任何更改。

我的目的是它检测数据是否有任何变化,以便更新视图,我没有使用 firebase,也没有尝试导航到另一个屏幕。


class _ListChatsState extends State<ListChats> {
  final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();
  final messagesProvider = new ServiceMessagesAdm();
   Timer _timer;


@override
  void initState() {
    //messagesProvider.getMessagesAdm();

    //Check the server every 5 seconds
    _timer = Timer.periodic(Duration(seconds: 5), (timer) => messagesProvider.getMessagesAdm());

    super.initState();
  }

  @override
  void dispose() {
    //cancel the timer
    if (_timer.isActive) _timer.cancel();

    super.dispose();
  }
  @override
  Widget build(BuildContext context) {

    return  Scaffold(
      backgroundColor: Colors.white,
      key: scaffoldKey,
      appBar: new AppBar(
        title: new Text('StreamBuilder'),
        actions: <Widget>[

        ],
      ),
      body: FutureBuilder(
        future: messagesProvider.getMessagesAdm(),
        builder: (BuildContext context, AsyncSnapshot<List> snapshot) {


          switch (snapshot.connectionState) {
            case ConnectionState.none:
              print("ESTOY EN NONE");
              return image();
              break;
            case ConnectionState.waiting:
              return Center(
                child: CircularProgressIndicator(),
              );
              break;
            case ConnectionState.active:
                return _buildListView(snapshot.data);
              break;
            case ConnectionState.done:
              // TODO: Handle this case.
              break;
          }
          return image();
        },
      ),
    );
  }

Future<List<MessagesAdm>> getMessagesAdm() async {


    final respuesta = await http.get(url);

    List<MessagesAdm> _list;

    var resBody = json.decode(respuesta.body);
      print(respuesta.body);
    var capsules = resBody as List;

    _list = capsules.map((model) => MessagesAdm.fromJson(model)).toList();


    //print(_list);
    popularesSink( _list );

    return _list;
  }

有没有办法检测 API 中是否有任何变化?我在聊天。

在我使用这些代码行之前.. 但他们没有检测到更改,对我来说,重要的是告诉你这些更改是从邮递员那里应用的。在代码中,我可以发出任何触发这些流的通知吗?我留下之前使用的代码行。

class ServiceMessagesAdm {
  Loads loads;


  final _popularesStreamController = StreamController<List<MessagesAdm>>.broadcast();


  Function(List<MessagesAdm>) get popularesSink => _popularesStreamController.sink.add;

  Stream<List<MessagesAdm>> get popularesStream => _popularesStreamController.stream;


  void disposeStreams() {
    _popularesStreamController?.close();
  }
  }

标签: firebaseflutter

解决方案


推荐阅读