osam 4.3.5
osam: ^4.3.5 copied to clipboard
State management library inspired redux, bloc and SOLID prenciples. It is null safety and very stable solution to avoid red screens and bad code.
example/lib/main.dart
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:osam/osam.dart';
import 'presenter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final store = Store(AppState());
runApp(
StoreProvider(
store: store,
child: MaterialApp(
home: PresenterExample(),
),
),
);
}
class Body extends StatefulWidget {
@override
_BodyState createState() => _BodyState();
}
class _BodyState extends State<Body> {
var c = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: OsamBuilder<int>(
stream: context.presenter<ExamplePresenter>().count,
builder: (ctx, snap) => Text(snap.data.toString()),
),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.plus_one),
onPressed: () {
setState(() {
context.presenter<ExamplePresenter>().inc();
});
},
),
);
}
}
class PresenterExample extends StatefulWidget {
@override
_PresenterExampleState createState() => _PresenterExampleState();
}
class _PresenterExampleState extends State<PresenterExample> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: PresenterProvider(
key: const ValueKey('ex_presenter'),
presenter: ExamplePresenter(),
child: Body(),
));
}
}
// ignore: must_be_immutable
class AppState extends BaseState<AppState> {
var count = 0;
@override
List<Object> get props => [count];
}