Skip to content
Snippets Groups Projects
Commit 30bdffb4 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Merge branch '13-keep-and-display-last-picked-letters' into 'master'

Resolve "Keep and display last picked letters"

Closes #13

See merge request !21
parents 69a9b0e6 8124597e
No related branches found
No related tags found
1 merge request!21Resolve "Keep and display last picked letters"
Pipeline #1785 passed
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
app.versionName=1.2.12 app.versionName=1.2.13
app.versionCode=18 app.versionCode=19
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:flutter/services.dart';
import 'provider/data.dart'; import 'provider/data.dart';
import 'screens/home.dart'; import 'screens/home.dart';
void main() => runApp(MyApp()); void main() {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
.then((value) => runApp(MyApp()));
}
class MyApp extends StatelessWidget { class MyApp extends StatelessWidget {
@override @override
......
...@@ -2,44 +2,61 @@ import 'package:flutter/foundation.dart'; ...@@ -2,44 +2,61 @@ import 'package:flutter/foundation.dart';
class Data extends ChangeNotifier { class Data extends ChangeNotifier {
// randomization
bool _searchingCategory = false; bool _searchingCategory = false;
bool _searchingLetter = false; bool _searchingLetter = false;
String _category = ''; String _category = '';
String _letter = ''; String _letter = '';
int _countdown = -1; int _countdown = -1;
bool get searchingCategory => _searchingCategory; final int _recentCategoriesCount = 15;
final int _recentLettersCount = 10;
List _recentCategories = [];
List _recentLetters = [];
set searchingCategory(bool value) { bool get searchingCategory => _searchingCategory;
void setSearchingCategory(bool value) {
_searchingCategory = value; _searchingCategory = value;
notifyListeners(); notifyListeners();
} }
bool get searchingLetter => _searchingLetter; bool get searchingLetter => _searchingLetter;
void setSearchingLetter(bool value) {
set searchingLetter(bool value) {
_searchingLetter = value; _searchingLetter = value;
notifyListeners(); notifyListeners();
} }
String get category => _category; String get category => _category;
void updateCategory(String value) {
set updateCategory(String value) {
_category = value; _category = value;
if (value != null && value != '') {
_recentCategories.insert(0, value);
_recentCategories = _recentCategories.take(_recentCategoriesCount).toList();
}
notifyListeners(); notifyListeners();
} }
String get letter => _letter; String get letter => _letter;
void updateLetter(String value) {
set updateLetter(String value) {
_letter = value; _letter = value;
if (value != null && value != '') {
_recentLetters.insert(0, value);
_recentLetters = _recentLetters.take(_recentLettersCount).toList();
}
notifyListeners(); notifyListeners();
} }
int get countdown => _countdown; String recentlyPickedLetter(int count) {
if (_recentLetters.length > count) {
return _recentLetters[count];
}
return '';
}
set updateCountdown(int value) { int get countdown => _countdown;
void updateCountdown(int value) {
_countdown = value; _countdown = value;
notifyListeners(); notifyListeners();
} }
......
...@@ -30,7 +30,7 @@ class Home extends StatelessWidget { ...@@ -30,7 +30,7 @@ class Home extends StatelessWidget {
dispose(); dispose();
} }
_countdownStart = 10; _countdownStart = 10;
myProvider.updateCountdown = _countdownStart; myProvider.updateCountdown(_countdownStart);
_timer = new Timer.periodic( _timer = new Timer.periodic(
oneSec, oneSec,
(Timer timer) { (Timer timer) {
...@@ -38,7 +38,7 @@ class Home extends StatelessWidget { ...@@ -38,7 +38,7 @@ class Home extends StatelessWidget {
timer.cancel(); timer.cancel();
} else { } else {
_countdownStart--; _countdownStart--;
myProvider.updateCountdown = _countdownStart; myProvider.updateCountdown(_countdownStart);
} }
}, },
); );
...@@ -50,15 +50,15 @@ class Home extends StatelessWidget { ...@@ -50,15 +50,15 @@ class Home extends StatelessWidget {
} }
Future<void> pickCategory(Data myProvider) async { Future<void> pickCategory(Data myProvider) async {
myProvider.searchingCategory = true; myProvider.setSearchingCategory(true);
RandomPickCategory randomPickCategory; RandomPickCategory randomPickCategory;
int attempts = 0; int attempts = 0;
do { do {
randomPickCategory = RandomPickCategory(); randomPickCategory = RandomPickCategory();
await randomPickCategory.init(); await randomPickCategory.init();
if (randomPickCategory.category != null) { if (randomPickCategory.category != null) {
myProvider.updateCategory = randomPickCategory.category; myProvider.updateCategory(randomPickCategory.category);
myProvider.searchingCategory = false; myProvider.setSearchingCategory(false);
break; break;
} }
attempts++; attempts++;
...@@ -66,15 +66,15 @@ class Home extends StatelessWidget { ...@@ -66,15 +66,15 @@ class Home extends StatelessWidget {
} }
Future<void> pickLetter(Data myProvider) async { Future<void> pickLetter(Data myProvider) async {
myProvider.searchingLetter = true; myProvider.setSearchingLetter(true);
RandomPickLetter randomPickLetter; RandomPickLetter randomPickLetter;
int attempts = 0; int attempts = 0;
do { do {
randomPickLetter = RandomPickLetter(); randomPickLetter = RandomPickLetter();
await randomPickLetter.init(); await randomPickLetter.init();
if (randomPickLetter.letter != null) { if (randomPickLetter.letter != null) {
myProvider.updateLetter = randomPickLetter.letter; myProvider.updateLetter(randomPickLetter.letter);
myProvider.searchingLetter = false; myProvider.setSearchingLetter(false);
break; break;
} }
attempts++; attempts++;
...@@ -87,15 +87,10 @@ class Home extends StatelessWidget { ...@@ -87,15 +87,10 @@ class Home extends StatelessWidget {
return hslDark.toColor(); return hslDark.toColor();
} }
Container _buildPickedLetterContainer(Data myProvider, Color backgroundColor, double borderWidth) { Container mainLetterButtonContainer(Data myProvider, Color backgroundColor, double borderWidth) {
Color borderColor = darken(backgroundColor); Color borderColor = darken(backgroundColor);
return Container( return Container(
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
margin: EdgeInsets.all(borderWidth), margin: EdgeInsets.all(borderWidth),
padding: EdgeInsets.all(borderWidth), padding: EdgeInsets.all(borderWidth),
decoration: BoxDecoration( decoration: BoxDecoration(
...@@ -117,9 +112,85 @@ class Home extends StatelessWidget { ...@@ -117,9 +112,85 @@ class Home extends StatelessWidget {
), ),
), ),
), ),
);
}
Container previousLetterBlockContainer(Data myProvider, int position, bool displayed) {
double spacingWidth = 2;
double borderWidth = 3;
Color backgroundColor = Colors.grey;
Color borderColor = darken(backgroundColor);
Color fontColor = Colors.black;
String letter = myProvider.recentlyPickedLetter(position);
if (letter == '' || displayed == false) {
backgroundColor = Colors.white;
borderColor = Colors.white;
fontColor = Colors.white;
}
return Container(
margin: EdgeInsets.all(spacingWidth),
padding: EdgeInsets.all(spacingWidth),
decoration: BoxDecoration(
color: backgroundColor,
borderRadius: BorderRadius.circular(borderWidth),
border: Border.all(
color: borderColor,
width: borderWidth,
),
),
child: Text(
' ' + letter + ' ',
style: TextStyle(
fontSize: 35.0 - (7 * position),
fontWeight: FontWeight.w600,
color: fontColor,
),
), ),
], );
}
Container _buildPickedLetterContainer(Data myProvider, Color backgroundColor, double borderWidth) {
int previousLettersCountToShow = 3;
List <Widget> cells = [];
// Add previous letters blocks
for (var i = 0; i < previousLettersCountToShow; i++) {
cells.add(TableCell(
verticalAlignment: TableCellVerticalAlignment.middle,
child: previousLetterBlockContainer(myProvider, previousLettersCountToShow - i, true)
));
}
// Add current letter block
cells.add(TableCell(
verticalAlignment: TableCellVerticalAlignment.middle,
child: mainLetterButtonContainer(myProvider, backgroundColor, borderWidth)
));
// Pad with empty blocks to keep symetrical layout
for (var i = 0; i < previousLettersCountToShow; i++) {
cells.add(TableCell(
verticalAlignment: TableCellVerticalAlignment.middle,
child: previousLetterBlockContainer(myProvider, i + 1, false)
));
}
return Container(
margin: EdgeInsets.all(2),
padding: EdgeInsets.all(2),
child: Table(
defaultColumnWidth: IntrinsicColumnWidth(),
children: [
TableRow(
children: cells
), ),
]
)
); );
} }
......
...@@ -7,7 +7,7 @@ packages: ...@@ -7,7 +7,7 @@ packages:
name: async name: async
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.6.1" version: "2.7.0"
boolean_selector: boolean_selector:
dependency: transitive dependency: transitive
description: description:
...@@ -28,7 +28,7 @@ packages: ...@@ -28,7 +28,7 @@ packages:
name: charcode name: charcode
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0" version: "1.3.1"
clock: clock:
dependency: transitive dependency: transitive
description: description:
...@@ -73,7 +73,7 @@ packages: ...@@ -73,7 +73,7 @@ packages:
name: meta name: meta
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.3.0" version: "1.7.0"
nested: nested:
dependency: transitive dependency: transitive
description: description:
...@@ -141,7 +141,7 @@ packages: ...@@ -141,7 +141,7 @@ packages:
name: test_api name: test_api
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.3.0" version: "0.4.1"
typed_data: typed_data:
dependency: transitive dependency: transitive
description: description:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment