如何在没有导航和Firebase的情况下刷新StreamBuilder-Flutter

时间:2020-06-13 06:41:05

标签: firebase 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();
  }
  }

0 个答案:

没有答案