Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

flutter - realtime stream data from REST API

Tags:

flutter

dart

I am retrieving data from a REST API using a stream, but when the data updates in the database the stream does not refresh the data in the app.

StreamController _productsController = new StreamController();
...         
//products is a list that contains the data
_productsController.add(products);
...
body: Container(
        child: StreamBuilder(
            stream: _productsController.stream,
            builder: (BuildContext context, AsyncSnapshot snapshot) {...}

I saw a solution proposing to periodically re-load the data from the API, for example each 1 second.

Timer.periodic(Duration(seconds: 1), (_) => loadDetails());

Source: Stream for API coming from PHP in Flutter (Not Firebase)

I do not think it is an efficient approach. In my app for example, I want to integrate the data changes without re-loading the data.

Is there an efficient way to make the stream reflects data changes in the app without reloading data?

like image 985
EddyG Avatar asked Jul 14 '26 03:07

EddyG


1 Answers

You can implement your own stream with dart as shown in the docs

With this, you will also need a delay and you will be making calls to the API periodically, but I guess that's the way to go if your API does not send any message without calling it first.

Stream<Product> productsStream() async* {
  while (true) {
    await Future.delayed(Duration(milliseconds: 500));
    Product someProduct = getProductFromAPI();
    yield someProduct;
  }
}

A little explanation of the code:

  • You need a loop to call the API periodically. Don't worry about infinite loops, since the stream will only be used while the StreamBuild that calls it is built.
  • The yield keyword is like the return when using streams

Then, to use it, just implement a StreamBuilder calling the Stream you just created:

StreamBuilder(
    stream: productsStream(),
    builder: (BuildContext context, AsyncSnapshot<Product> snapshot) {...}
)
like image 112
jsgalarraga Avatar answered Jul 17 '26 20:07

jsgalarraga



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!