Untitled
unknown
plain_text
a year ago
42 kB
11
Indexable
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:sudoku_master/core/color_constants.dart';
import 'package:sudoku_master/providers/sudoku_provider.dart';
import 'package:sudoku_master/providers/theme_providers.dart';
import 'package:sudoku_master/screens/home_screen.dart';
import 'package:sudoku_master/screens/widget/custom_container.dart';
class SudokuBoardWidget extends StatelessWidget {
const SudokuBoardWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final themeProvider = Provider.of<ThemeProvider>(context, listen: false);
final double sw = MediaQuery.of(context).size.width;
final double sh = MediaQuery.of(context).size.height;
return Center(
child: PopScope(
canPop: false,
onPopInvoked: (didPop) {
_onPopInvoked(
didPop,
context,
themeProvider,
);
},
child: Scaffold(
backgroundColor: themeProvider.themeMode == ThemeMode.dark
? ColorConstants.scaffoldColorDark
: ColorConstants.scaffoldColorLight,
appBar: AppBar(
elevation: 1,
leading: InkWell(
onTap: () {
_onPopInvoked(
false,
context,
themeProvider,
);
},
child: Icon(
Icons.arrow_back_sharp,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
),
),
title: Center(
child: Text(
'Sudoku Game',
style: Theme.of(context).textTheme.headlineLarge?.copyWith(
fontSize: 22,
fontWeight: FontWeight.w500,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
),
),
),
backgroundColor: themeProvider.themeMode == ThemeMode.dark
? ColorConstants.primaryColorDark
: ColorConstants.primaryColorLight.withOpacity(0.8),
iconTheme: IconThemeData(
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
),
actions: [
Switch(
activeColor: Colors.green,
inactiveThumbColor: Colors.green,
trackOutlineColor:
WidgetStateProperty.all(Colors.grey.withOpacity(0.7)),
value: Provider.of<ThemeProvider>(context).themeMode ==
ThemeMode.dark,
onChanged: (value) {
if (value) {
Provider.of<ThemeProvider>(context, listen: false)
.setThemeMode(ThemeMode.dark);
} else {
Provider.of<ThemeProvider>(context, listen: false)
.setThemeMode(ThemeMode.light);
}
},
),
],
),
body: Consumer<SudokuProvider>(
builder: (context, sudokuBoardProvider, child) {
// List<List<int?>> initialPuzzle = sudokuBoardProvider.initialPuzzle;
return Column(
children: [
SizedBox(height: sh * 0.025),
_timerRow(sudokuBoardProvider, context, themeProvider, sh),
const SizedBox(height: 8),
_bannerSection(context),
const SizedBox(height: 8),
_mainBoardWidget(sudokuBoardProvider, themeProvider),
SizedBox(height: sh * 0.03),
_numberInputUpperRow(sudokuBoardProvider),
_numberInputLowerRow(
sudokuBoardProvider, context, themeProvider),
_optionsRow(sudokuBoardProvider, context, themeProvider),
SizedBox(height: sh * 0.02),
],
);
},
),
),
),
);
}
Widget _bannerSection(BuildContext context){
return Container(
height: MediaQuery.sizeOf(context).height * 0.065,
width: MediaQuery.sizeOf(context).width,
color: Colors.red,
margin: const EdgeInsets.only(bottom: 8),
);
}
void _onPopInvoked(
didPop,
BuildContext context,
ThemeProvider themeProvider,
) {
if (didPop) {
return;
}
showModalBottomSheet(
isDismissible: true,
isScrollControlled: false,
context: context,
builder: (context) {
return Container(
width: MediaQuery.sizeOf(context).width,
decoration: BoxDecoration(
color: themeProvider.themeMode == ThemeMode.dark
? ColorConstants.primaryColorDark
: ColorConstants.primaryColorLight,
borderRadius: const BorderRadius.only(
topRight: Radius.circular(12),
topLeft: Radius.circular(12))),
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'Want to exit?',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
),
),
const SizedBox(height: 20),
Text('You will lose all your progress.',
style: Theme.of(context).textTheme.headlineMedium?.copyWith(
fontWeight: FontWeight.w400,
fontSize: 16,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
)),
const SizedBox(height: 12),
Row(
children: [
Expanded(
child: InkWell(
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () {
Navigator.of(context).pop();
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: themeProvider.themeMode == ThemeMode.dark
? Colors.black
: Colors.white,
),
padding: const EdgeInsets.symmetric(
horizontal: 6, vertical: 12),
margin: const EdgeInsets.symmetric(
horizontal: 18, vertical: 8),
child: Center(
child: Text(
'No',
style: TextStyle(
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
),
),
),
),
Expanded(
child: InkWell(
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => const HomeScreen()));
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Colors.red,
),
padding: const EdgeInsets.symmetric(
horizontal: 6, vertical: 12),
margin: const EdgeInsets.symmetric(
horizontal: 18, vertical: 8),
child: const Center(
child: Text(
'Yes',
style: TextStyle(
color: Colors.white,
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
),
),
),
)
],
),
],
));
},
);
}
Padding _optionsRow(
SudokuProvider sudokuBoardProvider,
BuildContext context,
ThemeProvider themeProvider,
) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
CustomContainer(
icon: Icon(
Icons.undo,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
),
isCircle: true,
hideExpanded: true,
onTap: () {
sudokuBoardProvider.undo();
}),
CustomContainer(
title: 'Restart',
onTap: () {
_showRestartGameDialog(
context,
sudokuBoardProvider,
themeProvider,
);
},
),
CustomContainer(
title: 'Solve',
onTap: () {
_showSolveDialog(
context,
sudokuBoardProvider,
themeProvider,
);
},
),
CustomContainer(
icon: Icon(
Icons.delete,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
),
isCircle: true,
hideExpanded: true,
onTap: () {
sudokuBoardProvider.deleteSelectedCell();
},
),
CustomContainer(
icon: Icon(
sudokuBoardProvider.isTimerVisible
? Icons.timer
: Icons.timer_off,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
),
isCircle: true,
hideExpanded: true,
onTap: () {
sudokuBoardProvider.toggleTimerVisibility();
}),
],
),
);
}
Future<dynamic> _showSolveDialog(
BuildContext context,
SudokuProvider sudokuBoardProvider,
ThemeProvider themeProvider,
) {
return showModalBottomSheet(
isDismissible: true,
isScrollControlled: false,
context: context,
builder: (context) {
return Container(
width: MediaQuery.sizeOf(context).width,
decoration: BoxDecoration(
color: themeProvider.themeMode == ThemeMode.dark
? ColorConstants.primaryColorDark
: ColorConstants.primaryColorLight,
borderRadius: const BorderRadius.only(
topRight: Radius.circular(12),
topLeft: Radius.circular(12))),
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'Want to solve?',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
),
),
const SizedBox(height: 20),
Row(
children: [
Expanded(
child: InkWell(
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () {
Navigator.of(context).pop(false);
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: themeProvider.themeMode == ThemeMode.dark
? Colors.black
: Colors.white,
),
padding: const EdgeInsets.symmetric(
horizontal: 6, vertical: 12),
margin: const EdgeInsets.symmetric(
horizontal: 12, vertical: 8),
child: Center(
child: Text(
'No',
style: TextStyle(
color:
themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
),
),
),
),
Expanded(
child: InkWell(
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () {
sudokuBoardProvider.solvePuzzle(context);
Navigator.of(context).pop();
ScaffoldMessenger.of(context).clearSnackBars();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
margin: const EdgeInsets.symmetric(horizontal: 12,vertical: 12),
behavior: SnackBarBehavior.floating,
elevation: 10,
shape: RoundedRectangleBorder(
side: BorderSide( color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black, width: 0.5),
borderRadius: BorderRadius.circular(12),
),
content: Center(
child: Text(
'Solved the puzzle.If not solved remove incorrect input.',
textAlign: TextAlign.center,
style: TextStyle(
fontWeight: FontWeight.w500,
color: themeProvider.themeMode ==
ThemeMode.dark
? Colors.white
: Colors.black,
),
)),
backgroundColor:
themeProvider.themeMode == ThemeMode.dark
? ColorConstants.primaryColorDark
: ColorConstants.primaryColorLight,
),
);
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Colors.green,
),
padding: const EdgeInsets.symmetric(
horizontal: 6, vertical: 12),
margin: const EdgeInsets.symmetric(
horizontal: 12, vertical: 8),
child: const Center(
child: Text(
'Yes',
style: TextStyle(
color: Colors.white,
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
),
),
),
)
],
),
],
));
});
return showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
backgroundColor: Theme.of(context).colorScheme.primary,
title: Text(' Want to solve?',
style: Theme.of(context).textTheme.headlineMedium),
content: Text('You will lose all your progress.',
style: Theme.of(context).textTheme.headlineSmall),
actions: <Widget>[
TextButton(
child:
Text('No', style: Theme.of(context).textTheme.headlineSmall),
onPressed: () {
Navigator.of(context).pop(false);
},
),
TextButton(
child:
Text('Yes', style: Theme.of(context).textTheme.headlineSmall),
onPressed: () {
sudokuBoardProvider.solvePuzzle(context);
Navigator.of(context).pop();
ScaffoldMessenger.of(context).clearSnackBars();
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text(
'Solved the puzzle.If not solved remove incorrect input.')),
);
},
),
],
);
},
);
}
Future<dynamic> _showRestartGameDialog(
BuildContext context,
SudokuProvider sudokuBoardProvider,
ThemeProvider themeProvider,
) {
return showModalBottomSheet(
isDismissible: true,
isScrollControlled: false,
context: context,
builder: (context) {
return Container(
width: MediaQuery.sizeOf(context).width,
decoration: BoxDecoration(
color: themeProvider.themeMode == ThemeMode.dark
? ColorConstants.primaryColorDark
: ColorConstants.primaryColorLight,
borderRadius: const BorderRadius.only(
topRight: Radius.circular(12),
topLeft: Radius.circular(12))),
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'Want to restart?',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
),
),
const SizedBox(height: 20),
Text('You will lose all your progress.',
style:
Theme.of(context).textTheme.headlineMedium?.copyWith(
fontWeight: FontWeight.w400,
fontSize: 16,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
)),
const SizedBox(height: 12),
Row(
children: [
Expanded(
child: InkWell(
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () {
Navigator.of(context).pop(false);
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: themeProvider.themeMode == ThemeMode.dark
? Colors.black
: Colors.white,
),
padding: const EdgeInsets.symmetric(
horizontal: 6, vertical: 12),
margin: const EdgeInsets.symmetric(
horizontal: 12, vertical: 8),
child: Center(
child: Text(
'No',
style: TextStyle(
color:
themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
),
),
),
),
Expanded(
child: InkWell(
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () {
sudokuBoardProvider.resetPuzzle();
Navigator.of(context).pop();
ScaffoldMessenger.of(context).clearSnackBars();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
margin: const EdgeInsets.symmetric(horizontal: 12,vertical: 12),
padding: const EdgeInsets.symmetric(vertical: 20),
behavior: SnackBarBehavior.floating,
elevation: 10,
shape: RoundedRectangleBorder(
side: BorderSide( color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black, width: 0.5),
borderRadius: BorderRadius.circular(12),
),
content: Center(
child: Text(
'Puzzle Restarted. ',
textAlign: TextAlign.center,
style: TextStyle(
fontWeight: FontWeight.w500,
color: themeProvider.themeMode ==
ThemeMode.dark
? Colors.white
: Colors.black,
),
)),
backgroundColor:
themeProvider.themeMode == ThemeMode.dark
? ColorConstants.primaryColorDark
: ColorConstants.primaryColorLight,
)
);
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Colors.red,
),
padding: const EdgeInsets.symmetric(
horizontal: 6, vertical: 12),
margin: const EdgeInsets.symmetric(
horizontal: 12, vertical: 8),
child: const Center(
child: Text(
'Yes',
style: TextStyle(
color: Colors.white,
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
),
),
),
)
],
),
],
));
});
return showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
backgroundColor: Theme.of(context).colorScheme.primary,
title: Text(' Want to restart?',
style: Theme.of(context).textTheme.headlineMedium),
content: Text('You will lose all your progress.',
style: Theme.of(context).textTheme.headlineSmall),
actions: <Widget>[
TextButton(
child:
Text('No', style: Theme.of(context).textTheme.headlineSmall),
onPressed: () {
Navigator.of(context).pop(false);
},
),
TextButton(
child:
Text('Yes', style: Theme.of(context).textTheme.headlineSmall),
onPressed: () {
sudokuBoardProvider.resetPuzzle();
Navigator.of(context).pop();
ScaffoldMessenger.of(context).clearSnackBars();
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Puzzle Restarted.')),
);
},
),
],
);
},
);
}
Padding _numberInputUpperRow(SudokuProvider sudokuBoardProvider) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
for (int i = 1; i <= 5; i++)
CustomContainer(
title: i.toString(),
onTap: () {
if (sudokuBoardProvider.selectedRow != -1 &&
sudokuBoardProvider.selectedCol != -1) {
sudokuBoardProvider.updatePuzzle(
sudokuBoardProvider.selectedRow,
sudokuBoardProvider.selectedCol,
i);
}
},
)
],
),
);
}
Padding _numberInputLowerRow(
SudokuProvider sudokuBoardProvider,
BuildContext context,
ThemeProvider themeProvider,
) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [
for (int i = 6; i <= 9; i++)
CustomContainer(
title: i.toString(),
onTap: () {
if (sudokuBoardProvider.selectedRow != -1 &&
sudokuBoardProvider.selectedCol != -1) {
sudokuBoardProvider.updatePuzzle(
sudokuBoardProvider.selectedRow,
sudokuBoardProvider.selectedCol,
i);
}
},
),
CustomContainer(
icon: Icon(
Icons.check,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
),
onTap: sudokuBoardProvider.checkIfPuzzleIsSolved()
? () {
_showPuzzleSolvedSheet(
context,
sudokuBoardProvider,
themeProvider,
);
}
: () {},
)
]),
);
}
Future<dynamic> _showPuzzleSolvedSheet(
BuildContext context,
SudokuProvider sudokuBoardProvider,
ThemeProvider themeProvider,
) {
return showModalBottomSheet(
isDismissible: true,
isScrollControlled: false,
context: context,
builder: (context) {
return Container(
width: MediaQuery.sizeOf(context).width,
decoration: BoxDecoration(
color: themeProvider.themeMode == ThemeMode.dark
? ColorConstants.primaryColorDark
: ColorConstants.primaryColorLight,
borderRadius: const BorderRadius.only(
topRight: Radius.circular(12),
topLeft: Radius.circular(12))),
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'Congratulations!',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
),
),
const SizedBox(height: 20),
Text('You solved the puzzle!',
style:
Theme.of(context).textTheme.headlineMedium?.copyWith(
fontWeight: FontWeight.w400,
fontSize: 16,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
)),
const SizedBox(height: 4),
Text(
'Time taken: ${Duration(seconds: sudokuBoardProvider.elapsedSeconds).toString().split('.').first.padLeft(8, "0")}',
style:
Theme.of(context).textTheme.headlineMedium?.copyWith(
fontWeight: FontWeight.w400,
fontSize: 16,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
)),
const SizedBox(height: 12),
InkWell(
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () {
sudokuBoardProvider.nextPuzzle();
sudokuBoardProvider.startTimer();
Navigator.of(context).pop();
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Colors.green,
),
padding: const EdgeInsets.symmetric(
horizontal: 6, vertical: 12),
margin: const EdgeInsets.symmetric(
horizontal: 18, vertical: 8),
child: Center(
child: Text(
'Play Again',
style: TextStyle(
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.white,
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
),
),
)
],
));
});
}
Padding _timerRow(SudokuProvider sudokuBoardProvider, BuildContext context,
ThemeProvider themeProvider, double sh) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 12),
child: Row(
mainAxisSize: MainAxisSize.max,
children: [
Text(
'Difficulty: ${sudokuBoardProvider.getDifficultyText()}',
style: Theme.of(context).textTheme.headlineMedium?.copyWith(
fontSize: 16,
fontWeight: FontWeight.w400,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
),
),
const SizedBox(width: 12),
Expanded(
child: sudokuBoardProvider.isTimerVisible
? Text(
' Time: ${Duration(seconds: sudokuBoardProvider.elapsedSeconds).toString().split('.').first.padLeft(8, "0")} ',
style: Theme.of(context).textTheme.headlineMedium?.copyWith(
fontSize: 16,
fontWeight: FontWeight.w400,
color: themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black,
),
textAlign: TextAlign.end,
)
: SizedBox(height: sh * 0.02),
),
],
),
);
}
Expanded _mainBoardWidget(
SudokuProvider sudokuBoardProvider, ThemeProvider themeProvider) {
return Expanded(
child: Center(
child: GridView.builder(
padding: EdgeInsets.zero,
scrollDirection: Axis.vertical,
physics: const NeverScrollableScrollPhysics(),
itemCount: 81,
shrinkWrap: true,
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 9,
),
itemBuilder: (BuildContext context, int index) {
int row = (index / 9).floor();
int col = index % 9;
int gridRow = (row / 3).floor();
int gridCol = (col / 3).floor();
bool isDarkGrid = (gridRow + gridCol) % 2 == 1;
bool isSelected = sudokuBoardProvider.selectedRow >= 0 &&
sudokuBoardProvider.selectedRow < 9 &&
sudokuBoardProvider.selectedCol >= 0 &&
sudokuBoardProvider.selectedCol < 9 &&
sudokuBoardProvider.selectedRow == row &&
sudokuBoardProvider.selectedCol == col;
bool isMatchingSelectedValue = sudokuBoardProvider.selectedRow >=
0 &&
sudokuBoardProvider.selectedRow < 9 &&
sudokuBoardProvider.selectedCol >= 0 &&
sudokuBoardProvider.selectedCol < 9 &&
sudokuBoardProvider.puzzle[row][col] ==
sudokuBoardProvider.puzzle[sudokuBoardProvider.selectedRow]
[sudokuBoardProvider.selectedCol];
return GestureDetector(
onTap: () {
sudokuBoardProvider.selectedRow = row;
sudokuBoardProvider.selectedCol = col;
},
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.black,
width: 0.5,
),
color: isSelected
? themeProvider.themeMode == ThemeMode.dark
? ColorConstants.selectedTileColorDark
: ColorConstants.selectedTileColorLight
: isDarkGrid
? themeProvider.themeMode == ThemeMode.dark
? ColorConstants.innerTileColorDark
: ColorConstants.innerTileColorLight
: themeProvider.themeMode == ThemeMode.dark
? ColorConstants.tileColorDark
: ColorConstants.tileColorLight,
),
child: Center(
child: Text(
sudokuBoardProvider.puzzle[row][col] != null &&
sudokuBoardProvider.puzzle[row][col] != 0
? sudokuBoardProvider.puzzle[row][col].toString()
: '',
style: TextStyle(
color: isSelected
? themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black // Color for user tapped cell
: isMatchingSelectedValue
? Colors.orange
: // Color for matching selected value:
(sudokuBoardProvider.initialPuzzle[row][col] !=
null &&
sudokuBoardProvider.initialPuzzle[row]
[col] !=
0)
? themeProvider.themeMode == ThemeMode.dark
? Colors.white
: Colors.black // Color for initial values
: sudokuBoardProvider.checkIfIncorrect(
row, col)
? Colors.red // Color for incorrect input
: Colors.green,
//Color for text that user has entered manually and aren't wrong
// Color for updated numbers
fontSize: 18,
fontWeight: isMatchingSelectedValue
? FontWeight.w600
: FontWeight.w400,
),
),
),
),
);
},
),
),
);
}
Color _getTextColor(bool isSelected, bool isMatchingSelectedValue,
SudokuProvider sudokuBoardProvider, int row, int col) {
return isSelected
? Colors.black // Color for selected cell
: isMatchingSelectedValue
? Colors.green // Color for matching selected value
: (sudokuBoardProvider.initialPuzzle[row][col] != null &&
sudokuBoardProvider.initialPuzzle[row][col] != 0)
? Colors.black // Color for initial values
: sudokuBoardProvider.checkIfIncorrect(row, col)
? Colors.black // Color for incorrect input
: Colors.black;
}
}
Editor is loading...
Leave a Comment