Skip to content

Instantly share code, notes, and snippets.

@AdnanKhan45
Last active July 26, 2023 18:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AdnanKhan45/48cd3f1d841ac9d831992b9de56d1614 to your computer and use it in GitHub Desktop.
Save AdnanKhan45/48cd3f1d841ac9d831992b9de56d1614 to your computer and use it in GitHub Desktop.
NumbersApp which swaps two int values is for visualizing "Keys under the hood".

NumbersApp which swaps two int values is for visualizing "Keys under the hood" -- Blog post on medium

import 'dart:math';
import 'package:flutter/material.dart';
class NumbersApp extends StatefulWidget {
@override
_NumbersAppState createState() => _NumbersAppState();
}
class _NumbersAppState extends State<NumbersApp> {
late List<Widget> children;
@override
void initState() {
children = [
StatelessNumber(),
StatelessNumber(),
];
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Column(
children: children,
),
ElevatedButton(
onPressed: () {
setState(() {
children.insert(1, children.removeAt(0));
});
},
child: Text("Swap")
)
],
),
),
);
}
}
class StatelessNumber extends StatelessWidget {
int count = NumberGenerator.getNumber();
@override
Widget build(BuildContext context) {
return Text('Count: $count', style: TextStyle(fontSize: 20),);
}
}
class StatefulNumber extends StatefulWidget {
const StatefulNumber({Key? key}) : super(key: key);
@override
_StatefulNumberState createState() => _StatefulNumberState();
}
class _StatefulNumberState extends State<StatefulNumber> {
late int count;
@override
void initState() {
super.initState();
count = NumberGenerator.getNumber();
}
@override
Widget build(BuildContext context) {
return Text('Count: $count', style: TextStyle(fontSize: 20),);
}
}
class NumberGenerator {
static List<int> numberOptions = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
static Random random = new Random();
static int getNumber() {
if (numberOptions.length > 0) {
int number = numberOptions.removeAt(random.nextInt(numberOptions.length));
return number;
} else {
int number = random.nextInt(9); // Generates either 0 or 1
return number;
}
}
}
void main() {
runApp(MaterialApp(
theme: ThemeData(
brightness: Brightness.light,
),
home: NumbersApp(),
));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment