roll_slot_machine 1.0.0 roll_slot_machine: ^1.0.0 copied to clipboard
A flutter package for randoming widgets.
import 'dart:math';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:roll_slot_machine/roll_slot_machine.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Roll Slot Machine',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
initialRoute: 'home',
onGenerateRoute: onGenerateRoute,
);
}
Route onGenerateRoute(RouteSettings settings) {
if (settings.name == 'home') {
return MaterialPageRoute(
builder: (BuildContext context) {
return MyHomePage(
title: 'title',
);
},
);
}
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<int> values = List.generate(100, (index) => index);
var _rollSlotController = RollSlotController();
var _rollSlotController1 = RollSlotController();
var _rollSlotController2 = RollSlotController();
var _rollSlotController3 = RollSlotController();
final random = Random();
final List<String> emojiList = [
'๐',
'๐',
'๐',
'๐',
'๐',
'๐
',
'๐คฃ',
'๐',
'๐',
'๐',
'๐',
'๐',
'๐',
'๐ฅฐ',
'๐',
'๐คฉ',
'๐',
'๐',
'โบ',
'๐',
'๐',
'๐ฅฒ',
'๐',
'๐',
'๐',
'๐คช',
'๐',
'๐ค',
'๐ค',
'๐คญ',
'๐คซ',
'๐ค',
'๐ค',
'๐คจ',
'๐',
'๐',
'๐ถ',
'๐',
'๐',
'๐',
'๐ฌ',
'๐คฅ',
'๐',
'๐',
'๐ช',
'๐คค',
'๐ด',
'๐ท',
'๐ค',
'๐ค',
'๐คข',
'๐คฎ',
'๐คง',
'๐ฅต',
'๐ฅถ',
'๐ฅด',
'๐ต',
'๐คฏ',
'๐ค ',
'๐ฅณ',
'๐ฅธ',
'๐',
'๐ค',
'๐ง',
'๐',
'๐',
'๐',
'โน',
'๐ฎ',
'๐ฏ',
'๐ฒ',
'๐ณ',
'๐ฅบ',
'๐ฆ',
'๐ง',
'๐จ',
'๐ฐ',
'๐ฅ',
'๐ข',
'๐ญ',
'๐ฑ',
'๐',
'๐ฃ',
'๐',
'๐',
'๐ฉ',
'๐ซ',
'๐ฅฑ',
'๐ค',
'๐ก',
'๐ ',
'๐คฌ',
'๐',
'๐ฟ',
'๐',
'โ ',
'๐ฉ',
'๐คก',
'๐น',
'๐บ',
'๐ป',
'๐ฝ',
'๐พ',
'๐ค',
'๐บ',
'๐ธ',
'๐น',
'๐ป',
'๐ผ',
'๐ฝ',
'๐',
'๐ฟ',
'๐พ',
'๐',
'๐',
'๐ค',
'๐',
'โ',
'๐',
'๐',
'๐ค',
'๐ค',
'โ',
'๐ค',
'๐ค',
'๐ค',
'๐ค',
'๐',
'๐',
'๐',
'๐',
'๐',
'โ',
'๐',
'๐',
'โ',
'๐',
'๐ค',
'๐ค',
'๐',
'๐',
'๐',
'๐คฒ',
'๐ค',
'๐',
'โ',
'๐
',
'๐คณ',
'๐ช',
'๐ฆพ',
'๐ฆฟ',
'๐ฆต',
'๐ฆถ',
'๐',
'๐ฆป',
'๐',
'๐ง ',
'๐ซ',
'๐ซ',
'๐ฆท',
'๐ฆด',
'๐',
'๐',
'๐
',
'๐',
'๐ถ',
'๐ง',
'๐ฆ',
'๐ง',
'๐ง',
'๐ฑ',
'๐จ',
'๐ง',
'๐จ',
'๐จ',
'๐จ',
'๐จ',
'๐ฉ',
'๐ฉ',
'๐ง',
'๐ฉ',
'๐ง',
'๐ฉ',
'๐ง',
'๐ฉ',
'๐ง',
'๐ฑ',
'๐ฑ',
'๐ง',
'๐ด',
'๐ต',
'๐',
'๐',
'๐',
'๐',
'๐',
'๐',
'๐
',
'๐
',
'๐
',
'๐',
'๐',
'๐',
'๐',
'๐',
'๐',
'๐',
'๐',
'๐',
'๐ง',
'๐ง',
'๐ง',
'๐',
'๐',
'๐',
'๐คฆ',
'๐คฆ',
'๐คฆ',
'๐คท',
'๐คท',
'๐คท',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ฎ',
'๐ฎ',
'๐ฎ',
'๐ต',
'๐ต',
'๐ต',
'๐',
'๐',
'๐',
'๐ฅท',
'๐ท',
'๐ท',
'๐ท',
'๐คด',
'๐ธ',
'๐ณ',
'๐ณ',
'๐ณ',
'๐ฒ',
'๐ง',
'๐คต',
'๐คต',
'๐คต',
'๐ฐ',
'๐ฐ',
'๐ฐ',
'๐คฐ',
'๐คฑ',
'๐ฉ',
'๐จ',
'๐ง',
'๐ผ',
'๐
',
'๐คถ',
'๐ง',
'๐ฆธ',
'๐ฆธ',
'๐ฆธ',
'๐ฆน',
'๐ฆน',
'๐ฆน',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐',
'๐',
'๐',
'๐',
'๐',
'๐',
'๐ถ',
'๐ถ',
'๐ถ',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐ง',
'๐จ',
'๐ฉ',
'๐',
'๐',
'๐',
'๐',
'๐บ',
'๐ด',
'๐ฏ',
'๐ฏ',
'๐ฏ',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ง',
'๐ญ',
'๐ซ',
'๐ฌ',
'๐',
'๐ฉ',
'๐จ',
'๐ฉ',
'๐',
'๐ฉ',
'๐จ',
'๐ฉ',
'๐ช',
'๐จ',
'๐จ',
'๐จ',
'๐จ',
'๐จ',
'๐จ',
'๐จ',
'๐จ',
'๐จ',
'๐จ',
'๐ฉ',
'๐ฉ',
'๐ฉ',
'๐ฉ',
'๐ฉ',
'๐จ',
'๐จ',
'๐จ',
'๐จ',
'๐จ',
'๐ฉ',
'๐ฉ',
'๐ฉ',
'๐ฉ',
'๐ฉ',
'๐ฃ',
'๐ค',
'๐ฅ',
'๐ซ',
'๐ฃ',
'๐งณ',
'๐',
'โ',
'๐',
'๐งต',
'๐งถ',
'๐',
'๐ถ',
'๐ฅฝ',
'๐ฅผ',
'๐ฆบ',
'๐',
'๐',
'๐',
'๐งฃ',
'๐งค',
'๐งฅ',
'๐งฆ',
'๐',
'๐',
'๐ฅป',
'๐ฉฑ',
'๐ฉฒ',
'๐ฉณ',
'๐',
'๐',
'๐',
'๐',
'๐',
'๐',
'๐ฉด',
'๐',
'๐',
'๐ฅพ',
'๐ฅฟ',
'๐ ',
'๐ก',
'๐ฉฐ',
'๐ข',
'๐',
'๐',
'๐ฉ',
'๐',
'๐งข',
'๐ช',
'โ',
'๐',
'๐',
'๐ผ',
'๐ฉธ',
'๐ฎ',
'๐ต',
'๐ถ',
];
@override
void initState() {
_rollSlotController.addListener(() {
// trigger setState method to reload ui with new index
// in our case the AppBar title will change
setState(() {});
});
super.initState();
}
@override
Widget build(BuildContext context) {
final size = MediaQuery.of(context).size;
return Scaffold(
appBar: AppBar(
title: Text(getText()),
),
body: Center(
child: Stack(
children: [
Align(
alignment: Alignment.center,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 100),
child: Row(
children: [
RollSlotWidget(
emojiList: emojiList,
rollSlotController: _rollSlotController,
),
if (size.width > 500)
RollSlotWidget(
emojiList: emojiList,
rollSlotController: _rollSlotController1,
),
if (size.width > 800)
RollSlotWidget(
emojiList: emojiList,
rollSlotController: _rollSlotController2,
),
if (size.width > 1000)
RollSlotWidget(
emojiList: emojiList,
rollSlotController: _rollSlotController3,
),
],
),
),
),
Align(
alignment: Alignment.center,
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
Expanded(
child: Container(
color: Colors.white,
),
),
Container(
height: 600,
decoration: BoxDecoration(
border:
Border.all(color: Color(0xff2f5d62), width: 50)),
),
Expanded(
child: Container(
color: Colors.white,
),
),
],
),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
_rollSlotController.animateRandomly();
if (size.width > 500) _rollSlotController1.animateRandomly();
if (size.width > 800) _rollSlotController2.animateRandomly();
if (size.width > 800) _rollSlotController3.animateRandomly();
},
child: Icon(Icons.refresh),
),
);
}
String getText() {
final String x = emojiList.elementAt(_rollSlotController.currentIndex) +
emojiList.elementAt(_rollSlotController1.currentIndex) +
emojiList.elementAt(_rollSlotController2.currentIndex) +
emojiList.elementAt(_rollSlotController3.currentIndex);
return x;
}
}
class RollSlotWidget extends StatelessWidget {
final List<String> emojiList;
final RollSlotController rollSlotController;
const RollSlotWidget({Key key, this.emojiList, this.rollSlotController})
: super(key: key);
@override
Widget build(BuildContext context) {
return Flexible(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Flexible(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: RollSlot(
duration: Duration(milliseconds: 6000),
itemExtend: 300,
shuffleList: false,
rollSlotController: rollSlotController,
children: emojiList.map(
(e) {
return BuildItem(
emoji: e,
);
},
).toList()),
),
),
],
),
);
}
}
class BuildItem extends StatelessWidget {
const BuildItem({
Key key,
this.index,
this.emoji,
}) : super(key: key);
final int index;
final String emoji;
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
color: Colors.transparent,
boxShadow: [
BoxShadow(
color: Color(0xff2f5d62).withOpacity(.2), offset: Offset(5, 5)),
BoxShadow(
color: Color(0xff2f5d62).withOpacity(.2), offset: Offset(-5, -5)),
],
borderRadius: BorderRadius.circular(20),
border: Border.all(
color: Color(0xff2f5d62),
),
),
alignment: Alignment.center,
child: Text(
emoji,
key: Key(emoji),
style: const TextStyle(fontSize: 100),
),
);
}
}