You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			42 lines
		
	
	
		
			924 B
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			42 lines
		
	
	
		
			924 B
		
	
	
	
		
			Dart
		
	
| /* ZiK */
 | |
| 
 | |
| import 'dart:async';
 | |
| 
 | |
| import 'package:flutter/cupertino.dart';
 | |
| 
 | |
| typedef ChildProvider<E> = Widget Function(BuildContext context, E? data);
 | |
| 
 | |
| class Updater<T> extends StatelessWidget {
 | |
|   final ChildProvider<T> childProvider;
 | |
|   StreamController<T?>? sink;
 | |
|   T? initialData;
 | |
|   List<T?> _history = [];
 | |
| 
 | |
|   Stream<T?>? _stream;
 | |
| 
 | |
|   Updater({T? initialData, required this.childProvider}) {
 | |
|     this.sink = StreamController<T?>();
 | |
|     this.initialData = initialData;
 | |
|     _stream = this.sink?.stream;
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     return StreamBuilder<T?>(
 | |
|         initialData: this.initialData,
 | |
|         stream: _stream,
 | |
|         builder: (ctx, snapshot) {
 | |
|           return childProvider(context, snapshot.data);
 | |
|         });
 | |
|   }
 | |
| 
 | |
|   void pushData(T? data) {
 | |
|     _history.add(data);
 | |
|     sink?.sink.add(data);
 | |
|   }
 | |
| 
 | |
|   List<T?> getDataHistory() => _history;
 | |
| 
 | |
|   T? getLatestData() => _history.last;
 | |
| }
 |