Press ESC to close

Flutter App : Starlight Sync: use a Future as a Stream

Starlight Sync

If you want use a Future as a Stream,If you want to invoke a method one more times using that result,you can use this package.

Features

Name Status
execute
repeat

Preview

Video

Installation

Add starlight_sync as dependency to your pubspec file.

   starlight_sync: 
    git:
      url: https://github.com/YeMyoAung/starlight_sync.git

Setup

No additional integration steps are required for Android and Ios.

Usage

First of all you need to import our package.

import 'package:starlight_sync/starlight_sync.dart';

And then you can use easily.

Register a process

   StarlightSync.register(id:"process 1");

Terminate a process

   StarlightSync.terminate(id:"process 1");

Terminate all process

   StarlightSync.terminateAll();

Execute a future

   StarlightSync.register(id:"process 1");
   StarlightSync.stream(id:"process 1").listen((event){
       print("future stream is ${event['body']}");
   });
   Timer.periodic(Duration(seconds:1), (){
       StarlightSync.execute(id:"process 1",task:()async{
           await http.get('/get/random-images');
       })
   });

Execute a Future one more times using that result

StarlightSync.register<String?, ResponseModel>(id: 'all user'); int i = 0; StarlightSync.stream<String?, ResponseModel>(id: 'all user') .listen((event) { i += (event.body['users'] as List).length; print("listen body ${event.body}"); print("listen data is $i"); }); StarlightSync.repeat<String?, ResponseModel>( id: 'all user', next: (result) => result.body['next_page'], stop: (next) => next == null, task: ([next]) async { return appInstance<ApiService>().getMethod( query: "/get/users/$next", ); }, );

Example

import 'dart:convert'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:starlight_sync/starlight_sync.dart'; import 'package:http/http.dart' as http; import 'package:starlight_utils/starlight_utils.dart'; void main(){ StarlightSync.register(id: "dog.ceo"); StarlightSync.register(id: "dog.ceo/repeat"); runApp(MaterialApp(home:ExecuteExampleScreen())); } class ExecuteExampleScreen extends StatelessWidget { const ExecuteExampleScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("StarlightSync.execute Method"), actions: [ IconButton( onPressed: () { StarlightUtils.push(RepeatExampleScreen()); }, icon: Icon(Icons.arrow_circle_right_outlined)) ], ), body: Center( child: StreamBuilder( stream: StarlightSync.stream(id: 'dog.ceo'), builder: (_, AsyncSnapshot snap) { if (snap.connectionState == ConnectionState.waiting) return Text("Waiting a Future...."); if (snap.hasError) return Icon(Icons.error); return CachedNetworkImage( imageUrl: jsonDecode(snap.data!.body)["message"], placeholder: (_, e) => CircularProgressIndicator(), ); }, ), ), floatingActionButton: FloatingActionButton( onPressed: () { StarlightSync.execute( id: 'dog.ceo', task: () async => http.get( Uri.parse('https://dog.ceo/api/breeds/image/random'), ), ); }, child: Icon(Icons.refresh), ), ); } } class RepeatExampleScreen extends StatelessWidget { const RepeatExampleScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("StarlightSync.repeat Method"), ), body: Center( child: StreamBuilder( stream: StarlightSync.stream(id: 'dog.ceo/repeat'), builder: (_, AsyncSnapshot snap) { if (snap.connectionState == ConnectionState.waiting) return Text("Wating For a Future "); if (snap.hasError) return Icon(Icons.error); return Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( "Execute Last Value is ${StarlightSync.last(id: 'dog.ceo')?.body}", ), SizedBox( height: 20, ), Expanded( child: CachedNetworkImage( imageUrl: jsonDecode(snap.data!.body)["message"], placeholder: (_, e) => Center(child: CircularProgressIndicator()), ), ), ], ); }, ), ), floatingActionButton: FloatingActionButton( onPressed: () { StarlightSync.repeat( id: 'dog.ceo/repeat', next: (result) => result, stop: (index) => index == 10, task: ([_]) async => http.get( Uri.parse( 'https://dog.ceo/api/breeds/image/random', ), ), delay: Duration(seconds: 3), ); }, child: Icon(Icons.play_arrow), ), ); } }

Contact Us

Starlight Studio

GitHub

View Github

Footer Example