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

Keep and display recently picked data

parent 69a9b0e6
No related branches found
No related tags found
1 merge request!21Resolve "Keep and display last picked letters"
Pipeline #1783 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