Created
November 1, 2018 18:59
Revisions
-
Andrious created this gist
Nov 1, 2018 .There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,25 @@ import 'package:mvc_pattern/mvc_pattern.dart'; /// Notice 'the rest of the app' has no idea this Dart file even exists. import 'Model.dart'; class Controller extends ControllerMVC { Controller() { con = this; } static Controller con; @override initState() { /// Demonstrating how the 'initState()' is easily implemented. _counter = Model.counter; } int get displayThis => _counter; int _counter; void whatever() { /// The Controller knows how to 'talk to' the Model. It knows the name, but Model does the work. _counter = Model.incrementCounter(); } } This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,8 @@ class Model { static int get counter => _counter; static int _counter = 0; static int incrementCounter() { return ++_counter; } } This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,55 @@ import 'package:flutter/material.dart'; import 'package:mvc_pattern/mvc_pattern.dart'; /// Dependency Injection of 'the Controller' in the design pattern. import 'Controller.dart'; class MyHomePage extends StatefulWidget { MyHomePage({Key key}) : super(key: key); // Fields in a Widget subclass are always marked "final". static final String title = 'Flutter Demo Home Page'; @override _MyHomePageState createState() => new _MyHomePageState(); } class _MyHomePageState extends StateMVC { _MyHomePageState():super(Controller()){ _con = Controller.con; } Controller _con; @override @protected Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(MyHomePage.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( MyHomePage.title, ), Text( '${_con.displayThis}', style: Theme.of(context).textTheme.display1, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: () { setState(_con.whatever); }, tooltip: 'Increment', child: Icon(Icons.add), ), ); } } This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,21 @@ import 'package:flutter/material.dart'; import 'MyHomePage.dart'; /// Dependency Injection of 'the Controller' in the design pattern. import 'Controller.dart'; void main() => runApp(MVCCounterApp()); class MVCCounterApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(), ); } }