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.
hmg-mohemm-flutter-app/lib/widgets/Updater.dart

39 lines
907 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);
});
}
pushData(T? data) {
_history.add(data);
sink?.sink.add(data);
}
List<T?> getDataHistory() => _history;
T? getLatestData() => _history.last;
}