provider_mvc 2.0.4 provider_mvc: ^2.0.4 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(CounterApp());
class Value {
int value = 0;
}
class CounterApp extends StatelessWidget {
final _counter = CounterView();
@override
Widget build(BuildContext context) => MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: 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;
}