Questions Fetching process in Progress

merge-requests/77/head
Faiz Hashmi 3 years ago
parent 192647031a
commit 904e4df424

@ -1,5 +1,6 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:logger/logger.dart' as L;
import 'package:logging/logging.dart';
@ -8,6 +9,9 @@ import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/models/marathon/marathon_generic_model.dart';
import 'package:mohem_flutter_app/models/marathon/marathon_model.dart';
import 'package:mohem_flutter_app/models/marathon/question_model.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
import 'package:provider/provider.dart';
import 'package:signalr_netcore/http_connection_options.dart';
import 'package:signalr_netcore/hub_connection.dart';
import 'package:signalr_netcore/hub_connection_builder.dart';
@ -79,7 +83,7 @@ class MarathonApiClient {
late HubConnection hubConnection;
L.Logger logger = L.Logger();
Future<void> buildHubConnection() async {
Future<void> buildHubConnection(BuildContext context) async {
HttpConnectionOptions httpOptions = HttpConnectionOptions(skipNegotiation: false, logMessageContent: true);
hubConnection = HubConnectionBuilder()
.withUrl(
@ -125,7 +129,6 @@ class MarathonApiClient {
logger.i("Error in AddParticipant: $e");
});
logger.i("MarathonId: ${AppState().getMarathonProjectId}");
await hubConnection.invoke(
"SendQuestionToParticipant",
args: <Object>[
@ -138,16 +141,33 @@ class MarathonApiClient {
});
try {
hubConnection.on("OnSendQuestionToParticipant", onSendQuestionToParticipant);
hubConnection.on("OnSendQuestionToParticipant", (List<Object?>? arguments) {
onSendQuestionToParticipant(arguments, context);
});
} catch (e, s) {
logger.i("s");
logger.i("Error in OnSendQuestionToParticipant");
}
try {
hubConnection.on("OnParticipantJoin", onParticipantJoin);
} catch (e, s) {
logger.i("Error in OnParticipantJoin");
}
}
}
Future<void> onSendQuestionToParticipant(List<Object?>? arguments) async {
print("arguments: $arguments");
Future<void> onSendQuestionToParticipant(List<Object?>? arguments, BuildContext context) async {
logger.i("onSendQuestionToParticipant arguments: $arguments");
if (arguments != null) {
Map<dynamic, dynamic> data = arguments.first! as Map<dynamic, dynamic>;
var json = data["data"];
QuestionModel newQuestion = QuestionModel.fromJson(json);
context.read<MarathonProvider>().addNewQuestionsToTheList(newQuestion, 0);
}
}
logger.i(arguments);
Future<void> onParticipantJoin(List<Object?>? arguments) async {
logger.i("OnParticipantJoin arguments: $arguments");
}
}

@ -1,3 +1,6 @@
import 'package:mohem_flutter_app/models/marathon/question_model.dart';
import 'package:mohem_flutter_app/ui/marathon/widgets/question_card.dart';
class ApiConsts {
//static String baseUrl = "http://10.200.204.20:2801/"; // Local server
static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server
@ -23,13 +26,48 @@ class ApiConsts {
// 42062 is CurrentUserID and 36745 is targetUserID and 0 is For Pagination
// static String chatSearchMember = "https://apiderichat.hmg.com/api/user/getUserWithStatusAndFavAsync/aamir.muhammad/36239";
//Brain Marathon Constants
//Brain Marathon Constants
static String marathonBaseUrl = "https://18.188.181.12/service/";
static String marathonParticipantLoginUrl = marathonBaseUrl + "api/auth/participantlogin";
static String marathonProjectGetUrl = marathonBaseUrl + "api/Project/Project_Get";
static String marathonUpcomingUrl = marathonBaseUrl + "api/marathon/upcoming/";
static String marathonHubConnectionUrl = marathonBaseUrl + "MarathonBroadCast";
//DummyCards for the UI
static List<QuestionOptions> questionOptions = <QuestionOptions>[
QuestionOptions(
id: "id",
image: "image",
isCorrectOption: true,
questionId: "questionId",
sequence: 0,
titleAr: "titleAr",
titleEn: "titleEn",
),
];
static QuestionModel dummyQuestion = QuestionModel(
id: "id",
titleEn: "titleEn",
titleAr: "titleAr",
marathonId: "marathonId",
questionTypeId: 0,
questionTime: 0,
nextQuestGap: 5,
gapType: 0,
gapText: "gapText",
gapImage: "gapImage",
questOptionsLimit: 4,
questionOptions: questionOptions,
);
static List<CardContent> dummyQuestions = <CardContent>[
CardContent(question: dummyQuestion),
CardContent(question: dummyQuestion),
CardContent(question: dummyQuestion),
CardContent(question: dummyQuestion),
CardContent(question: dummyQuestion),
];
}
class SharedPrefsConsts {

@ -15,6 +15,7 @@ class MarathonDetailModel {
Projects? projects;
List<Sponsors>? sponsors;
List<Questions>? questions;
int? totalQuestions;
MarathonDetailModel(
{id,
@ -32,7 +33,8 @@ class MarathonDetailModel {
selectedLanguage,
projects,
sponsors,
questions});
questions,
totalQuestions});
MarathonDetailModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
@ -63,6 +65,7 @@ class MarathonDetailModel {
questions!.add( Questions.fromJson(v));
});
}
totalQuestions = json["totalQuestions"];
}
Map<String, dynamic> toJson() {
@ -89,6 +92,8 @@ class MarathonDetailModel {
if (questions != null) {
data['questions'] = questions!.map((v) => v.toJson()).toList();
}
data['totalQuestions'] = totalQuestions;
return data;
}
}

@ -12,19 +12,20 @@ class QuestionModel {
int? questOptionsLimit;
List<QuestionOptions>? questionOptions;
QuestionModel(
{id,
titleEn,
titleAr,
marathonId,
questionTypeId,
questionTime,
nextQuestGap,
gapType,
gapText,
gapImage,
questOptionsLimit,
questionOptions});
QuestionModel({
String? id,
String? titleEn,
String? titleAr,
String? marathonId,
int? questionTypeId,
int? questionTime,
int? nextQuestGap,
int? gapType,
String? gapText,
String? gapImage,
int? questOptionsLimit,
List<QuestionOptions>? questionOptions,
});
QuestionModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
@ -41,13 +42,13 @@ class QuestionModel {
if (json['questionOptions'] != null) {
questionOptions = <QuestionOptions>[];
json['questionOptions'].forEach((v) {
questionOptions!.add( QuestionOptions.fromJson(v));
questionOptions!.add(QuestionOptions.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
Map<String, dynamic> data = <String, dynamic>{};
Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['titleEn'] = titleEn;
data['titleAr'] = titleAr;
@ -60,8 +61,7 @@ class QuestionModel {
data['gapImage'] = gapImage;
data['questOptionsLimit'] = questOptionsLimit;
if (questionOptions != null) {
data['questionOptions'] =
questionOptions!.map((v) => v.toJson()).toList();
data['questionOptions'] = questionOptions!.map((v) => v.toJson()).toList();
}
return data;
}
@ -76,14 +76,15 @@ class QuestionOptions {
String? image;
bool? isCorrectOption;
QuestionOptions(
{id,
titleEn,
titleAr,
questionId,
sequence,
image,
isCorrectOption});
QuestionOptions({
String? id,
String? titleEn,
String? titleAr,
String? questionId,
int? sequence,
String? image,
bool? isCorrectOption,
});
QuestionOptions.fromJson(Map<String, dynamic> json) {
id = json['id'];

@ -143,7 +143,7 @@ class _LoginScreenState extends State<LoginScreen> {
if (!kReleaseMode) {
// username.text = "15444"; // Maha User
username.text = "15153"; // Tamer User
password.text = "Abcd@12345";
password.text = "Abcd@1234";
// username.text = "206535"; // Hashim User
// password.text = "Namira786";

@ -6,6 +6,8 @@ import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/date_uitl.dart';
import 'package:mohem_flutter_app/classes/decorations_helper.dart';
import 'package:mohem_flutter_app/classes/lottie_consts.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
@ -219,10 +221,21 @@ class MarathonFooter extends StatelessWidget {
@override
Widget build(BuildContext context) {
return provider.itsMarathonTime
? DefaultButton(LocaleKeys.joinMarathon.tr(), () {
provider.connectSignalrAndJoinMarathon();
// Navigator.pushNamed(context, AppRoutes.marathonScreen);
}, ).insideContainer
? DefaultButton(
LocaleKeys.joinMarathon.tr(),
() async {
Utils.showLoading(context);
try {
provider.resetValues();
await provider.connectSignalrAndJoinMarathon(context);
} catch (e, s) {
Utils.hideLoading(context);
print(s);
}
Utils.hideLoading(context);
Navigator.pushNamed(context, AppRoutes.marathonScreen);
},
).insideContainer
: Container(
color: Colors.white,
child: Column(
@ -232,7 +245,7 @@ class MarathonFooter extends StatelessWidget {
DefaultButton(
LocaleKeys.joinDemoMarathon.tr(),
() {
provider.connectSignalrAndJoinMarathon();
provider.connectSignalrAndJoinMarathon(context);
},
color: MyColors.yellowColorII,
).insideContainer,

@ -4,11 +4,39 @@ import 'package:appinio_swiper/appinio_swiper.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/marathon/marathon_api_client.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/models/marathon/marathon_model.dart';
import 'package:mohem_flutter_app/models/marathon/question_model.dart';
import 'package:mohem_flutter_app/ui/marathon/widgets/question_card.dart';
class MarathonProvider extends ChangeNotifier {
final AppinioSwiperController swiperController = AppinioSwiperController();
MarathonDetailModel marathonDetailModel = MarathonDetailModel();
List<CardContent> cardContentList = <CardContent>[
CardContent(question: ApiConsts.dummyQuestion),
CardContent(question: ApiConsts.dummyQuestion),
CardContent(question: ApiConsts.dummyQuestion),
CardContent(question: ApiConsts.dummyQuestion),
CardContent(question: ApiConsts.dummyQuestion),
];
int currentGapTime = 0;
void addNewQuestionsToTheList(QuestionModel newQuestion, int index) {
//TODO: THIS SHOULD NOT SWIPE THE CARD ON THE FIRST TRIGGER
swipeCardLeft();
cardContentList.add(CardContent(question: newQuestion));
currentGapTime = newQuestion.nextQuestGap!;
notifyListeners();
}
void removeQuestionFromTheList(int index) {
cardContentList.removeAt(index);
notifyListeners();
}
bool _isLoading = false;
bool get isLoading => _isLoading;
@ -18,10 +46,6 @@ class MarathonProvider extends ChangeNotifier {
notifyListeners();
}
MarathonDetailModel marathonDetailModel = MarathonDetailModel();
final AppinioSwiperController swiperController = AppinioSwiperController();
bool _itsMarathonTime = false;
bool get itsMarathonTime => _itsMarathonTime;
@ -40,14 +64,7 @@ class MarathonProvider extends ChangeNotifier {
notifyListeners();
}
void swipeCardLeft() {
currentQuestionNumber = currentQuestionNumber + 1;
swiperController.swipeLeft();
notifyListeners();
}
int _currentQuestionNumber = 1;
final int totalQuestions = 10;
int _currentQuestionNumber = 0;
int get currentQuestionNumber => _currentQuestionNumber;
@ -56,44 +73,44 @@ class MarathonProvider extends ChangeNotifier {
notifyListeners();
}
void resetAll() {
isSelectedOptions[0] = false;
isSelectedOptions[1] = false;
isSelectedOptions[2] = false;
isSelectedOptions[3] = false;
int _totalMarathoners = 23;
int get totalMarathoners => _totalMarathoners;
set totalMarathoners(int value) {
_totalMarathoners = value;
notifyListeners();
}
void swipeCardLeft() {
swiperController.swipeLeft();
currentQuestionNumber++;
notifyListeners();
}
Timer timerU = Timer.periodic(const Duration(seconds: 1), (Timer timer) {});
int start = 8;
void startTimer(BuildContext context) {
start = 8;
const Duration oneSec = Duration(seconds: 1);
timerU = Timer.periodic(
oneSec,
(Timer timer) async {
if (start == 0) {
if (currentQuestionNumber == 9) {
timer.cancel();
cancelTimer();
isMarathonCompleted = true;
await Future<dynamic>.delayed(const Duration(seconds: 3)).whenComplete(
() => Navigator.pushReplacementNamed(
context,
AppRoutes.marathonWinnerSelection,
),
);
resetValues();
return;
}
resetAll();
timer.cancel();
cancelTimer();
swipeCardLeft();
if (currentGapTime == 0) {
// if (currentQuestionNumber == 9) {
// timer.cancel();
// cancelTimer();
// isMarathonCompleted = true;
// await Future<dynamic>.delayed(const Duration(seconds: 3)).whenComplete(
// () => Navigator.pushReplacementNamed(context, AppRoutes.marathonWinnerSelection),
// );
//
// resetValues();
//
// return;
// }
// timer.cancel();
} else {
start--;
currentGapTime--;
}
notifyListeners();
},
@ -101,9 +118,10 @@ class MarathonProvider extends ChangeNotifier {
}
void resetValues() {
_currentQuestionNumber = 0;
cardContentList.clear();
timerU.cancel();
_isMarathonCompleted = false;
_currentQuestionNumber = 1;
notifyListeners();
}
@ -122,9 +140,7 @@ class MarathonProvider extends ChangeNotifier {
});
}
Future<void> connectSignalrAndJoinMarathon() async {
await MarathonApiClient().buildHubConnection();
Future<void> connectSignalrAndJoinMarathon(BuildContext context) async {
await MarathonApiClient().buildHubConnection(context);
}
}

@ -25,49 +25,54 @@ class MarathonScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
MarathonProvider provider = context.watch<MarathonProvider>();
return Scaffold(
appBar: AppBarWidget(context, title: LocaleKeys.brainMarathon.tr()),
body: SingleChildScrollView(
child: Column(
children: <Widget>[
20.height,
MarathonProgressContainer(provider: provider).paddingOnly(left: 21, right: 21),
if (provider.isMarathonCompleted)
InkWell(
onTap: () {
Navigator.pushReplacementNamed(
context,
AppRoutes.marathonWinnerSelection,
);
},
child: CustomStatusWidget(
asset: Lottie.asset(
MyLottieConsts.allQuestions,
height: 200,
),
title: Text(
LocaleKeys.congrats.tr(),
style: const TextStyle(
height: 23 / 24,
color: MyColors.greenColor,
fontSize: 27,
letterSpacing: -1,
fontWeight: FontWeight.w600,
),
),
subTitle: Text(
LocaleKeys.allQuestionsCorrect.tr(),
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.w600, color: MyColors.darkTextColor, letterSpacing: -1.08),
),
).paddingOnly(top: 12, left: 21, right: 21),
)
else
QuestionCard(provider: provider).paddingOnly(top: 12, left: 21, right: 21),
],
return WillPopScope(
child: Scaffold(
appBar: AppBarWidget(context, title: LocaleKeys.brainMarathon.tr()),
body: SingleChildScrollView(
child: Column(
children: <Widget>[
20.height,
MarathonProgressContainer(provider: provider).paddingOnly(left: 21, right: 21),
if (provider.isMarathonCompleted)
InkWell(
onTap: () {
Navigator.pushReplacementNamed(
context,
AppRoutes.marathonWinnerSelection,
);
},
child: CustomStatusWidget(
asset: Lottie.asset(
MyLottieConsts.allQuestions,
height: 200,
),
title: Text(
LocaleKeys.congrats.tr(),
style: const TextStyle(
height: 23 / 24,
color: MyColors.greenColor,
fontSize: 27,
letterSpacing: -1,
fontWeight: FontWeight.w600,
),
),
subTitle: Text(
LocaleKeys.allQuestionsCorrect.tr(),
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.w600, color: MyColors.darkTextColor, letterSpacing: -1.08),
),
).paddingOnly(top: 12, left: 21, right: 21),
)
else
QuestionCard(provider: provider).paddingOnly(top: 12, left: 21, right: 21),
],
),
),
),
),
);
onWillPop: () {
provider.resetValues();
return Future<bool>.value(true);
});
}
}
@ -91,7 +96,6 @@ class _MarathonProgressContainerState extends State<MarathonProgressContainer> {
@override
void dispose() {
widget.provider.cancelTimer();
super.dispose();
}
@ -113,10 +117,11 @@ class _MarathonProgressContainerState extends State<MarathonProgressContainer> {
borderRadius: BorderRadius.circular(5),
),
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 8),
child: "${widget.provider.currentQuestionNumber.toString()} / ${widget.provider.totalQuestions.toString()} ${LocaleKeys.question.tr()}".toText12(color: MyColors.white),
child: "${widget.provider.currentQuestionNumber.toString()} / ${widget.provider.marathonDetailModel.totalQuestions.toString()} ${LocaleKeys.question.tr()}"
.toText12(color: MyColors.white),
),
"23 ${LocaleKeys.marathoners.tr()}".toText14(),
"00:${widget.provider.start < 10 ? "0${widget.provider.start}" : widget.provider.start}".toText18(),
"${widget.provider.totalMarathoners} ${LocaleKeys.marathoners.tr()}".toText14(),
"00:${widget.provider.currentGapTime < 10 ? "0${widget.provider.currentGapTime}" : widget.provider.currentGapTime}".toText18(),
],
),
15.height,
@ -144,7 +149,7 @@ class _MarathonProgressContainerState extends State<MarathonProgressContainer> {
12.height,
Row(
children: <Widget>[
"${widget.provider.currentQuestionNumber * 10}% ${LocaleKeys.completed.tr()}".toText14(isBold: true),
"${((widget.provider.currentQuestionNumber / widget.provider.marathonDetailModel.totalQuestions!) * 100).toInt()}% ${LocaleKeys.completed.tr()}".toText14(isBold: true),
],
),
],

@ -108,14 +108,14 @@ class _QualifiersContainerState extends State<QualifiersContainer> {
@override
void initState() {
scheduleMicrotask(() {
widget.provider.startTimer(context);
// widget.provider.startTimer(context);
});
super.initState();
}
@override
void dispose() {
widget.provider.cancelTimer();
// widget.provider.cancelTimer();
super.dispose();
}
@ -132,7 +132,7 @@ class _QualifiersContainerState extends State<QualifiersContainer> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
LocaleKeys.winnerSelection.tr().toText18(isBold: true, color: MyColors.grey3AColor),
"00:${widget.provider.start < 10 ? "0${widget.provider.start}" : widget.provider.start}".toText18(isBold: true, color: MyColors.redColor),
// "00:${widget.provider.start < 10 ? "0${widget.provider.start}" : widget.provider.start}".toText18(isBold: true, color: MyColors.redColor),
],
),
10.height,

@ -28,8 +28,6 @@ class MarathonHeader extends StatelessWidget {
color: MyColors.black,
constraints: const BoxConstraints(),
onPressed: () {
Provider.of<MarathonProvider>(context, listen: false)
.resetValues();
Navigator.pop(context);
},
)

@ -1,11 +1,11 @@
import 'package:appinio_swiper/appinio_swiper.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/decorations_helper.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/models/marathon_question_model.dart';
import 'package:mohem_flutter_app/models/marathon/question_model.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
import 'package:provider/provider.dart';
@ -16,35 +16,11 @@ List<bool> isSelectedOptions = [
false,
];
class QuestionCard extends StatefulWidget {
class QuestionCard extends StatelessWidget {
final MarathonProvider provider;
const QuestionCard({Key? key, required this.provider}) : super(key: key);
@override
State<QuestionCard> createState() => _QuestionCardState();
}
class _QuestionCardState extends State<QuestionCard> {
final List<CardContent> questionCards = <CardContent>[];
@override
void initState() {
_loadCards();
super.initState();
}
void _loadCards() {
for (DummyQuestionModel question in questions) {
questionCards.add(
CardContent(
question: question,
provider: widget.provider,
),
);
}
}
@override
Widget build(BuildContext context) {
return CupertinoPageScaffold(
@ -58,12 +34,11 @@ class _QuestionCardState extends State<QuestionCard> {
isDisabled: true,
controller: provider.swiperController,
unswipe: (int index, AppinioSwiperDirection direction) {},
cards: questionCards,
onSwipe: (int index, AppinioSwiperDirection direction) {
if (direction == AppinioSwiperDirection.left) {
provider.startTimer(context);
}
print("here is the length: ${provider.cardContentList.length} and index : $index");
},
cards: provider.cardContentList,
);
},
),
@ -73,14 +48,9 @@ class _QuestionCardState extends State<QuestionCard> {
}
class CardContent extends StatelessWidget {
final DummyQuestionModel question;
final MarathonProvider provider;
final QuestionModel question;
const CardContent({
Key? key,
required this.question,
required this.provider,
}) : super(key: key);
const CardContent({Key? key, required this.question}) : super(key: key);
@override
Widget build(BuildContext context) {
@ -118,12 +88,12 @@ class CardContent extends StatelessWidget {
topRight: Radius.circular(10),
),
),
child: const Center(
child: Center(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 13),
padding: const EdgeInsets.symmetric(horizontal: 13),
child: Text(
"What is the capital of Saudi Arabia?",
style: TextStyle(
AppState().isArabic(context) ? question.titleAr ?? "" : question.titleEn ?? "",
style: const TextStyle(
color: MyColors.white,
fontSize: 16,
fontWeight: FontWeight.w600,
@ -132,7 +102,7 @@ class CardContent extends StatelessWidget {
),
),
),
AnswerContent(question: question, provider: provider),
AnswerContent(question: question),
],
),
);
@ -140,36 +110,37 @@ class CardContent extends StatelessWidget {
}
class AnswerContent extends StatefulWidget {
final DummyQuestionModel question;
final MarathonProvider provider;
final QuestionModel question;
const AnswerContent({Key? key, required this.question, required this.provider}) : super(key: key);
const AnswerContent({Key? key, required this.question}) : super(key: key);
@override
State<AnswerContent> createState() => _AnswerContentState();
}
class _AnswerContentState extends State<AnswerContent> {
void updateOption(int index, bool value) {
isSelectedOptions[0] = false;
isSelectedOptions[1] = false;
isSelectedOptions[2] = false;
isSelectedOptions[3] = false;
isSelectedOptions[index] = value;
setState(() {});
}
Decoration getContainerColor(int index) {
if (!isSelectedOptions[index]) {
return MyDecorations.getContainersDecoration(MyColors.greyF7Color);
}
if (isSelectedOptions[index] && context.watch<MarathonProvider>().start > 0) {
return MyDecorations.getContainersDecoration(MyColors.yellowColorII);
}
return MyDecorations.getContainersDecoration(
isSelectedOptions[index] ? MyColors.greenColor : MyColors.greyF7Color,
);
}
// void updateOption(int index, bool value) {
// isSelectedOptions[0] = false;
// isSelectedOptions[1] = false;
// isSelectedOptions[2] = false;
// isSelectedOptions[3] = false;
// isSelectedOptions[index] = value;
// setState(() {});
// }
//
// Decoration getContainerColor(int index) {
// if (!isSelectedOptions[index]) {
// return MyDecorations.getContainersDecoration(MyColors.greyF7Color);
// }
// if (isSelectedOptions[index] && context
// .watch<MarathonProvider>()
// .currentGapTime > 0) {
// return MyDecorations.getContainersDecoration(MyColors.yellowColorII);
// }
// return MyDecorations.getContainersDecoration(
// isSelectedOptions[index] ? MyColors.greenColor : MyColors.greyF7Color,
// );
// }
@override
Widget build(BuildContext context) {
@ -182,128 +153,172 @@ class _AnswerContentState extends State<AnswerContent> {
bottomRight: Radius.circular(10),
),
),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
InkWell(
onTap: () {
if (widget.provider.currentQuestionNumber == 9) {
widget.provider.cancelTimer();
widget.provider.resetValues();
Navigator.pushReplacementNamed(
context,
AppRoutes.marathonWinnerSelection,
);
return;
}
updateOption(0, true);
},
child: Container(
alignment: Alignment.centerLeft,
decoration: getContainerColor(0),
child: Center(
child: Text(
widget.question.opt1!,
style: TextStyle(
color: isSelectedOptions[0] ? MyColors.white : MyColors.darkTextColor,
fontWeight: FontWeight.w600,
fontSize: 16,
),
).paddingOnly(top: 17, bottom: 17),
),
),
),
const SizedBox(height: 15),
InkWell(
onTap: () {
if (widget.provider.currentQuestionNumber == 9) {
widget.provider.cancelTimer();
widget.provider.resetValues();
Navigator.pushReplacementNamed(
context,
AppRoutes.marathonWinnerSelection,
);
return;
}
updateOption(1, true);
},
child: Container(
alignment: Alignment.centerLeft,
decoration: getContainerColor(1),
child: Center(
child: Text(
widget.question.opt2!,
style: TextStyle(
color: isSelectedOptions[1] ? MyColors.white : MyColors.darkTextColor,
fontWeight: FontWeight.w600,
fontSize: 16,
),
).paddingOnly(top: 17, bottom: 17),
),
),
),
const SizedBox(height: 15),
InkWell(
onTap: () {
if (widget.provider.currentQuestionNumber == 9) {
widget.provider.cancelTimer();
widget.provider.resetValues();
Navigator.pushReplacementNamed(
context,
AppRoutes.marathonWinnerSelection,
);
return;
}
updateOption(2, true);
},
child: Container(
alignment: Alignment.centerLeft,
decoration: getContainerColor(2),
child: Center(
child: Text(
widget.question.opt3!,
style: TextStyle(
color: isSelectedOptions[2] ? MyColors.white : MyColors.darkTextColor,
fontWeight: FontWeight.w600,
fontSize: 16,
),
).paddingOnly(top: 17, bottom: 17),
),
),
),
const SizedBox(height: 15),
InkWell(
onTap: () {
if (widget.provider.currentQuestionNumber == 9) {
widget.provider.cancelTimer();
widget.provider.resetValues();
Navigator.pushReplacementNamed(
context,
AppRoutes.marathonWinnerSelection,
);
return;
}
updateOption(3, true);
},
child: Container(
alignment: Alignment.centerLeft,
decoration: getContainerColor(3),
child: Center(
child: Text(
widget.question.opt3!,
style: TextStyle(
color: isSelectedOptions[3] ? MyColors.white : MyColors.darkTextColor,
fontWeight: FontWeight.w600,
fontSize: 16,
),
).paddingOnly(top: 17, bottom: 17),
),
child: widget.question.questionOptions != null
? Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: widget.question.questionOptions!.map((QuestionOptions e) => AnswerTileForText(questionOption: e, onAnswerTapped: () {})).toList(),
)
: const SizedBox(),
);
}
}
class AnswerTileForText extends StatelessWidget {
final QuestionOptions questionOption;
final Function() onAnswerTapped;
const AnswerTileForText({Key? key, required this.questionOption, required this.onAnswerTapped}) : super(key: key);
// Decoration getContainerColor(int index) {
// if (!isSelectedOptions[index]) {
// return MyDecorations.getContainersDecoration(MyColors.greyF7Color);
// }
// if (isSelectedOptions[index] && context.watch<MarathonProvider>().currentGapTime > 0) {
// return MyDecorations.getContainersDecoration(MyColors.yellowColorII);
// }
// return MyDecorations.getContainersDecoration(
// isSelectedOptions[index] ? MyColors.greenColor : MyColors.greyF7Color,
// );
// }
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () {
onAnswerTapped();
},
child: Container(
alignment: Alignment.centerLeft,
decoration: MyDecorations.getContainersDecoration(MyColors.greyF7Color),
child: Center(
child: Text(
questionOption.titleEn!,
style: TextStyle(
color: isSelectedOptions[0] ? MyColors.white : MyColors.darkTextColor,
fontWeight: FontWeight.w600,
fontSize: 16,
),
),
],
).paddingOnly(top: 17, bottom: 17),
),
),
);
).paddingOnly(top: 8, bottom: 8);
}
}
// InkWell(
// onTap: () {
// if (widget.provider.currentQuestionNumber == 9) {
// widget.provider.cancelTimer();
// widget.provider.resetValues();
// Navigator.pushReplacementNamed(
// context,
// AppRoutes.marathonWinnerSelection,
// );
// return;
// }
// updateOption(0, true);
// },
// child: Container(
// alignment: Alignment.centerLeft,
// decoration: getContainerColor(0),
// child: Center(
// child: Text(
// widget.question.questionOptions![0].titleEn!,
// style: TextStyle(
// color: isSelectedOptions[0] ? MyColors.white : MyColors.darkTextColor,
// fontWeight: FontWeight.w600,
// fontSize: 16,
// ),
// ).paddingOnly(top: 17, bottom: 17),
// ),
// ),
// ),
// const SizedBox(height: 15),
// InkWell(
// onTap: () {
// if (widget.provider.currentQuestionNumber == 9) {
// widget.provider.cancelTimer();
// widget.provider.resetValues();
// Navigator.pushReplacementNamed(
// context,
// AppRoutes.marathonWinnerSelection,
// );
// return;
// }
// updateOption(1, true);
// },
// child: Container(
// alignment: Alignment.centerLeft,
// decoration: getContainerColor(1),
// child: Center(
// child: Text(
// widget.question.questionOptions![1].titleEn!,
// style: TextStyle(
// color: isSelectedOptions[1] ? MyColors.white : MyColors.darkTextColor,
// fontWeight: FontWeight.w600,
// fontSize: 16,
// ),
// ).paddingOnly(top: 17, bottom: 17),
// ),
// ),
// ),
// const SizedBox(height: 15),
// InkWell(
// onTap: () {
// if (widget.provider.currentQuestionNumber == 9) {
// widget.provider.cancelTimer();
// widget.provider.resetValues();
// Navigator.pushReplacementNamed(
// context,
// AppRoutes.marathonWinnerSelection,
// );
// return;
// }
// updateOption(2, true);
// },
// child: Container(
// alignment: Alignment.centerLeft,
// decoration: getContainerColor(2),
// child: Center(
// child: Text(
// widget.question.questionOptions![2].titleEn!,
// style: TextStyle(
// color: isSelectedOptions[2] ? MyColors.white : MyColors.darkTextColor,
// fontWeight: FontWeight.w600,
// fontSize: 16,
// ),
// ).paddingOnly(top: 17, bottom: 17),
// ),
// ),
// ),
// const SizedBox(height: 15),
// InkWell(
// onTap: () {
// if (widget.provider.currentQuestionNumber == 9) {
// widget.provider.cancelTimer();
// widget.provider.resetValues();
// Navigator.pushReplacementNamed(
// context,
// AppRoutes.marathonWinnerSelection,
// );
// return;
// }
// updateOption(3, true);
// },
// child: Container(
// alignment: Alignment.centerLeft,
// decoration: getContainerColor(3),
// child: Center(
// child: Text(
// widget.question.questionOptions![3].titleEn!,
// style: TextStyle(
// color: isSelectedOptions[3] ? MyColors.white : MyColors.darkTextColor,
// fontWeight: FontWeight.w600,
// fontSize: 16,
// ),
// ).paddingOnly(top: 17, bottom: 17),
// ),
// ),
// ),

Loading…
Cancel
Save