Skip to content

Instantly share code, notes, and snippets.

@diefferson
Created October 20, 2021 14:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save diefferson/01a8c895737f2f2ca348d36bfc146e9d to your computer and use it in GitHub Desktop.
Save diefferson/01a8c895737f2f2ca348d36bfc146e9d to your computer and use it in GitHub Desktop.
MVVMP example
import 'package:base/base.dart';
import 'package:flutter/material.dart';
class MyScreen extends StatefulWidget {
@override
_MyScreenState createState() => _MyScreenState();
}
class _MyScreenState extends BaseState<MyScreen, MyPresenter>
with MyScreenActions {
@override
void initState() {
super.initState();
presenter.getAsyncName();
}
@override
Widget build(BuildContext context) {
return Container(
child: Center(
child: StreamBuilder<String>(
initialData: '',
stream: presenter.name,
builder: (context, snapshot) {
return Text(snapshot.data);
},
),
),
);
}
}
mixin MyScreenActions<T extends StatefulWidget> on State<T> {
void showAlertError() {
// show dialog here
}
}
class MyPresenter extends BasePresenter<MyScreenActions> {
final _name = BehaviorSubject<String>();
Stream<String> get name => _name.stream;
void getAsyncName() {
Future.delayed(Duration(seconds: 3)).then((value) {
_name.add('Async Name');
}).onError((error, stackTrace) {
view.showAlertError();
});
}
@override
void dispose() {
_name.close();
super.dispose();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment