-
-
Save Andrious/0ca1dd1b2409f8eb31c3809ed9c0a4b8 to your computer and use it in GitHub Desktop.
Example app demonstrating the StateX class
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 characters
import 'package:flutter/material.dart'; | |
import 'package:state_extended/state_extended.dart'; | |
void main() => runApp(const MaterialApp(home: MyHomePage())); | |
class MyHomePage extends StatefulWidget { | |
const MyHomePage({Key? key, this.title = 'Flutter Demo Home Page'}) | |
: super(key: key); | |
// Fields in a StatefulWidget should always be "final". | |
final String title; | |
@override | |
State createState() => _MyHomePageState(); | |
} | |
class _MyHomePageState extends StateX<MyHomePage> { | |
_MyHomePageState() : super(Controller()) { | |
con = controller as Controller; | |
} | |
late Controller con; | |
@override | |
Widget build(BuildContext context) => Scaffold( | |
appBar: AppBar( | |
title: Text(widget.title), | |
), | |
body: Center( | |
child: Column( | |
mainAxisAlignment: MainAxisAlignment.center, | |
children: <Widget>[ | |
const Text('You have pushed the button this many times:'), | |
Text( | |
'${con.data}', | |
style: Theme.of(context).textTheme.headline4, | |
), | |
], | |
), | |
), | |
floatingActionButton: FloatingActionButton( | |
onPressed: con.onPressed, | |
tooltip: 'Increment', | |
child: const Icon(Icons.add), | |
), | |
); | |
} | |
class Controller extends StateXController { | |
// Using a factory constructor on Controllers and implementing the Singleton design pattern | |
factory Controller() => _this ??= Controller._(); | |
Controller._() | |
: model = _Model(), | |
super(); | |
static Controller? _this; | |
final _Model model; | |
int get data => model.integer; | |
void onPressed() => setState(() => model._incrementCounter()); | |
} | |
class _Model { | |
int get integer => _integer; | |
int _integer = 0; | |
int _incrementCounter() => ++_integer; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment