provider_mvc 2.0.8 provider_mvc: ^2.0.8 copied to clipboard
Flutter Provider MVC Implementation that make state management easier.
import 'package:flutter/material.dart';
import 'package:provider_mvc/controller.dart';
import 'package:provider_mvc/view.dart';
void main() => runApp(
MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: CounterApp()),
);
class Value {
int value = 0;
}
class CounterApp extends StatelessWidget {
final _counter = CounterView();
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(
title: Text('Flutter Demo Home Page'),
),
body: Center(
child: _counter,
),
floatingActionButton: FloatingActionButton(
onPressed: () => _counter.controller?.increment(),
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
class CounterController extends Controller {
final Value _count = Value();
//CounterController({String tag}) : super(tag: tag);
int get count => _count.value;
/*set count(int v) {
_count = v;
update();
}*/
void reset() {
_count.value = 0;
update();
}
void increment() {
_count.value++;
update();
}
}
class CounterView extends View<CounterController> {
@override
Widget builder(
BuildContext context, CounterController controller, Widget widget) =>
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'${controller.count}',
style: Theme.of(context).textTheme.headline4,
),
RaisedButton(
child: Text("Reset"),
onPressed: controller.reset,
)
],
);
@override
CounterController create(BuildContext context) =>
Controller.put<CounterController>(CounterController());
CounterController get controller =>
Controller.of<CounterController>()?.single;
}