Skip to content

Commit

Permalink
Merge pull request davidanaya#2 from ewertonrp/master
Browse files Browse the repository at this point in the history
Add NullSafety support
  • Loading branch information
jeancamilo authored Oct 24, 2023
2 parents fa28203 + a344580 commit 0368b90
Show file tree
Hide file tree
Showing 12 changed files with 598 additions and 280 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@
.pub-cache/
.pub/
/build/
/example/ios/Flutter/
/example/pubspec.lock
pubspec.lock

# Android related
**/android/**/gradle-wrapper.jar
Expand Down
1 change: 1 addition & 0 deletions example/android/gradle.properties
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
org.gradle.jvmargs=-Xmx1536M
android.enableR8=true
13 changes: 13 additions & 0 deletions example/ios/Flutter/flutter_export_environment.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/sh
# This is a generated file; do not edit or check into version control.
export "FLUTTER_ROOT=/Users/macserverm1/Development/flutter"
export "FLUTTER_APPLICATION_PATH=/Users/macserverm1/Development/github_crmall/spinning_wheel_caio/example"
export "COCOAPODS_PARALLEL_CODE_SIGN=true"
export "FLUTTER_TARGET=lib/main.dart"
export "FLUTTER_BUILD_DIR=build"
export "FLUTTER_BUILD_NAME=1.0.0"
export "FLUTTER_BUILD_NUMBER=1"
export "DART_OBFUSCATION=false"
export "TRACK_WIDGET_CREATION=false"
export "TREE_SHAKE_ICONS=false"
export "PACKAGE_CONFIG=.dart_tool/package_config.json"
217 changes: 151 additions & 66 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import 'dart:async';
import 'dart:math' as math;
import 'dart:math';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_spinning_wheel/flutter_spinning_wheel.dart';

void main() {
SystemChrome.setEnabledSystemUIOverlays([]);
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []);
runApp(MyApp());
}

Expand Down Expand Up @@ -61,11 +62,13 @@ class MyHomePage extends StatelessWidget {
}

Widget buildNavigationButton({String text, Function onPressedFn}) {
return FlatButton(
color: Color.fromRGBO(255, 255, 255, 0.3),
textColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(50.0),
return TextButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(Color.fromRGBO(255, 255, 255, 0.3)),
foregroundColor: MaterialStateProperty.all(Colors.white),
shape: MaterialStateProperty.all(RoundedRectangleBorder(
borderRadius: BorderRadius.circular(50.0),
)),
),
onPressed: onPressedFn,
child: Text(
Expand All @@ -76,8 +79,66 @@ class MyHomePage extends StatelessWidget {
}
}

enum CircleAlignment {
topLeft,
topRight,
bottomLeft,
bottomRight,
}

class QuarterCircle extends StatelessWidget {
final CircleAlignment circleAlignment;
final Color color;

const QuarterCircle({
this.color = Colors.grey,
this.circleAlignment = CircleAlignment.topLeft,
Key key,
}) : super(key: key);

@override
Widget build(BuildContext context) {
return SizedBox.expand(
child: ClipRect(
child: CustomPaint(
painter: QuarterCirclePainter(
circleAlignment: circleAlignment,
color: color,
),
),
),
);
}
}

class QuarterCirclePainter extends CustomPainter {
final CircleAlignment circleAlignment;
final Color color;

const QuarterCirclePainter({this.circleAlignment, this.color});

@override
void paint(Canvas canvas, Size size) {
final radius = math.min(size.height, size.width);
final offset = circleAlignment == CircleAlignment.topLeft
? Offset(.0, .0)
: circleAlignment == CircleAlignment.topRight
? Offset(size.width, .0)
: circleAlignment == CircleAlignment.bottomLeft
? Offset(.0, size.height)
: Offset(size.width, size.height);
canvas.drawCircle(offset, radius, Paint()..color = color);
}

@override
bool shouldRepaint(QuarterCirclePainter oldDelegate) {
return color == oldDelegate.color && circleAlignment == oldDelegate.circleAlignment;
}
}

class Basic extends StatelessWidget {
final StreamController _dividerController = StreamController<int>();
final SpinningWheelController _spinController = SpinningWheelController();

dispose() {
_dividerController.close();
Expand All @@ -88,32 +149,58 @@ class Basic extends StatelessWidget {
return Scaffold(
appBar: AppBar(backgroundColor: Color(0xffB0F9D2), elevation: 0.0),
backgroundColor: Color(0xffB0F9D2),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SpinningWheel(
Image.asset('assets/images/wheel-6-300.png'),
width: 310,
height: 310,
initialSpinAngle: _generateRandomAngle(),
spinResistance: 0.2,
dividers: 6,
onUpdate: _dividerController.add,
onEnd: _dividerController.add,
body: GestureDetector(
onTap: () => _spinController.spin(4000),
child: Center(
child: Container(
width: 310,
height: 310,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SpinningWheel.custom(
children: List.generate(
4,
(index) => Container(
width: 110,
height: 110,
color: Color.fromRGBO(math.Random().nextInt(255), math.Random().nextInt(255), math.Random().nextInt(255), 1),
child: Text(
(index + 1).toString(),
textAlign: TextAlign.center,
style: TextStyle(fontSize: 30, backgroundColor: Colors.white),
),
),
),
controller: _spinController,
width: 310,
height: 310,
// initialSpinAngle: _generateRandomAngle(),
spinResistance: 0.2,
onUpdate: _dividerController.add,
onEnd: _dividerController.add,
),
// SpinningWheel(
// child: Image.asset('assets/images/wheel-6-300.png'),
// width: 310,
// height: 310,
// // initialSpinAngle: _generateRandomAngle(),
// spinResistance: 0.2,
// dividers: 6,
// onUpdate: _dividerController.add,
// onEnd: _dividerController.add,
// ),
StreamBuilder(
stream: _dividerController.stream,
builder: (context, snapshot) => snapshot.hasData ? BasicScore(snapshot.data) : Container(),
),
],
),
StreamBuilder(
stream: _dividerController.stream,
builder: (context, snapshot) =>
snapshot.hasData ? BasicScore(snapshot.data) : Container(),
)
],
),
),
),
);
}

double _generateRandomAngle() => Random().nextDouble() * pi * 2;
}

class BasicScore extends StatelessWidget {
Expand All @@ -132,19 +219,17 @@ class BasicScore extends StatelessWidget {

@override
Widget build(BuildContext context) {
return Text('${labels[selected]}',
style: TextStyle(fontStyle: FontStyle.italic));
// return Text('${selected.toString()}', style: TextStyle(fontStyle: FontStyle.italic));
return Text('${selected.toString()} - ${labels[selected]}', style: TextStyle(fontStyle: FontStyle.italic));
}
}

class Roulette extends StatelessWidget {
final StreamController _dividerController = StreamController<int>();

final _wheelNotifier = StreamController<double>();
final SpinningWheelController _spinController = SpinningWheelController();

dispose() {
_dividerController.close();
_wheelNotifier.close();
}

@override
Expand All @@ -153,38 +238,39 @@ class Roulette extends StatelessWidget {
appBar: AppBar(backgroundColor: Color(0xffDDC3FF), elevation: 0.0),
backgroundColor: Color(0xffDDC3FF),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SpinningWheel(
Image.asset('assets/images/roulette-8-300.png'),
width: 310,
height: 310,
initialSpinAngle: _generateRandomAngle(),
spinResistance: 0.6,
canInteractWhileSpinning: false,
dividers: 8,
onUpdate: _dividerController.add,
onEnd: _dividerController.add,
secondaryImage:
Image.asset('assets/images/roulette-center-300.png'),
secondaryImageHeight: 110,
secondaryImageWidth: 110,
shouldStartOrStop: _wheelNotifier.stream,
),
SizedBox(height: 30),
StreamBuilder(
stream: _dividerController.stream,
builder: (context, snapshot) =>
snapshot.hasData ? RouletteScore(snapshot.data) : Container(),
),
SizedBox(height: 30),
new RaisedButton(
child: new Text("Start"),
onPressed: () =>
_wheelNotifier.sink.add(_generateRandomVelocity()),
)
],
child: Container(
width: 310,
height: 310,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SpinningWheel(
child: Image.asset('assets/images/roulette-8-300.png'),
width: 310,
height: 310,
initialSpinAngle: _generateRandomAngle(),
spinResistance: 0.6,
canInteractWhileSpinning: false,
dividers: 8,
onUpdate: _dividerController.add,
onEnd: _dividerController.add,
secondaryImage: Image.asset('assets/images/roulette-center-300.png'),
secondaryImageHeight: 110,
secondaryImageWidth: 110,
controller: _spinController,
),
SizedBox(height: 30),
StreamBuilder(
stream: _dividerController.stream,
builder: (context, snapshot) => snapshot.hasData ? RouletteScore(snapshot.data) : Container(),
),
SizedBox(height: 30),
new ElevatedButton(
child: new Text("Start"),
onPressed: () => _spinController.spin(_generateRandomVelocity()),
)
],
),
),
),
);
Expand Down Expand Up @@ -213,7 +299,6 @@ class RouletteScore extends StatelessWidget {

@override
Widget build(BuildContext context) {
return Text('${labels[selected]}',
style: TextStyle(fontStyle: FontStyle.italic, fontSize: 24.0));
return Text('${labels[selected]}', style: TextStyle(fontStyle: FontStyle.italic, fontSize: 24.0));
}
}
Loading

0 comments on commit 0368b90

Please sign in to comment.