GIfatahTH / states_rebuilder

a simple yet powerful state management technique for Flutter
494 stars 56 forks source link

Alternative to model.streamBuilder()? #271

Open am2074 opened 2 years ago

am2074 commented 2 years ago

In previous versions, you were able to use 'model.streamBuilder()' and have it listen to a value stream. Now with the most recent update, you can no longer do this. What is the alternative to this method?

GIfatahTH commented 2 years ago

Use OnBuilder.createStream like in this simple example:

import 'package:flutter/material.dart';
import 'package:states_rebuilder/scr/state_management/rm.dart';

void main() {
  runApp(_App());
}

class _App extends StatelessWidget {
  const _App({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: _Home(),
    );
  }
}

class MyMode {
  Stream<int> fakeStream() {
    return Stream.periodic(const Duration(seconds: 1), (v) => v);
  }
}

final myModel = RM.inject(() => MyMode());

class _Home extends StatelessWidget {
  const _Home({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: OnBuilder<int>.createStream(
          creator: () => myModel.state.fakeStream(),
          builder: (streamRM) {
            return streamRM.onAll(
              onWaiting: () => Text('Waiting ...'),
              onError: (err, refresh) => Text('Error'),
              onData: (data) => Text('$data'),
            );
          },
        ),
      ),
    );
  }
}