provider_mvc 0.2.2 provider_mvc: ^0.2.2 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();
//if the view's controller is registred you can use this
//Controller.of<CounterController>().single.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;
refresh();
}*/
void reset() {
_count.value = 0;
refresh();
}
void increment() {
_count.value++;
refresh();
}
}
class CounterView extends View<CounterController> {
CounterView() : super(controller: CounterController());
//To register a controller while view creation's
/*CounterView()
: super(
controller: Controller.put<CounterController>(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());*/
}