Line data Source code
1 : import 'package:flutter/widgets.dart'; 2 : import 'package:get/src/rx/rx_interface.dart'; 3 : import 'rx_impl.dart'; 4 : 5 2 : Widget obx(Widget Function() builder) { 6 : final b = builder; 7 2 : return Obxx(b); 8 : } 9 : 10 : /// it's very very very very experimental 11 : class Obxx extends StatelessWidget { 12 : final Widget Function() builder; 13 4 : Obxx(this.builder, {Key key}) : super(key: key); 14 : final RxInterface _observer = Rx(); 15 : 16 2 : @override 17 : Widget build(_) { 18 10 : _observer.subject.stream.listen((data) => (_ as Element)..markNeedsBuild()); 19 : final observer = getObs; 20 2 : getObs = _observer; 21 4 : final result = builder(); 22 : getObs = observer; 23 : return result; 24 : } 25 : } 26 : 27 : class Obx extends StatefulWidget { 28 : final Widget Function() builder; 29 : 30 1 : const Obx(this.builder); 31 2 : _ObxState createState() => _ObxState(); 32 : } 33 : 34 : class _ObxState extends State<Obx> { 35 : RxInterface _observer; 36 : 37 1 : _ObxState() { 38 2 : _observer = Rx(); 39 : } 40 : 41 1 : @override 42 : void initState() { 43 7 : _observer.subject.stream.listen((data) => setState(() {})); 44 1 : super.initState(); 45 : } 46 : 47 1 : @override 48 : void dispose() { 49 2 : _observer.close(); 50 1 : super.dispose(); 51 : } 52 : 53 1 : Widget get notifyChilds { 54 : final observer = getObs; 55 1 : getObs = _observer; 56 3 : final result = widget.builder(); 57 : getObs = observer; 58 : return result; 59 : } 60 : 61 1 : @override 62 1 : Widget build(BuildContext context) => notifyChilds; 63 : }