|
|
|
@ -37,6 +37,8 @@ class QuestionScreen extends StatefulWidget { |
|
|
|
class _QuestionScreenState extends State<QuestionScreen> |
|
|
|
with TickerProviderStateMixin, WidgetsBindingObserver { |
|
|
|
late final isTablet = MyDevice.isTablet(context); |
|
|
|
late final boxRation = isTablet ? 320 / 300 : 180 / 250; |
|
|
|
|
|
|
|
@override |
|
|
|
void initState() { |
|
|
|
super.initState(); |
|
|
|
@ -99,6 +101,7 @@ class _QuestionScreenState extends State<QuestionScreen> |
|
|
|
return FadeAnimController( |
|
|
|
controller: context.read<QuestionBloc>().imageAnimationController!, |
|
|
|
child: SingleChildScrollView( |
|
|
|
controller: context.read<QuestionBloc>().scrollController, |
|
|
|
child: Column( |
|
|
|
children: [ |
|
|
|
_titles(context), |
|
|
|
@ -178,224 +181,61 @@ class _QuestionScreenState extends State<QuestionScreen> |
|
|
|
builder: (context, state) => Column( |
|
|
|
spacing: 30, |
|
|
|
children: [ |
|
|
|
Row( |
|
|
|
key: Key('${state.currentQuestion?.id}answer0'), |
|
|
|
spacing: 20, |
|
|
|
children: [ |
|
|
|
Expanded( |
|
|
|
child: Builder( |
|
|
|
key: Key('${state.currentQuestion?.id}0'), |
|
|
|
builder: (context) { |
|
|
|
if (state.currentQuestion?.answers?[0].imageId == |
|
|
|
null) { |
|
|
|
return const SizedBox.shrink(); |
|
|
|
} else { |
|
|
|
return Container( |
|
|
|
alignment: isTablet ? Alignment.center : null, |
|
|
|
width: isTablet ? 320 : 180, |
|
|
|
height: isTablet ? 300 :250, |
|
|
|
child: SlideAnim( |
|
|
|
controller: context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.answerAnimationController!, |
|
|
|
index: 0, |
|
|
|
child: AnswerBox( |
|
|
|
index: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.answers?[0] |
|
|
|
.order ?? |
|
|
|
1, |
|
|
|
answer: |
|
|
|
state.currentQuestion?.answers?[0] ?? |
|
|
|
AnswerEntity(), |
|
|
|
correctAnswer: |
|
|
|
state.currentQuestion?.correctAnswer ?? 0, |
|
|
|
onNotifTap: (AnswerEntity answer) { |
|
|
|
context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.showAnswerDialog( |
|
|
|
context: context, |
|
|
|
answerEntity: answer, |
|
|
|
); |
|
|
|
}, |
|
|
|
onTap: (isCorrect, correctAnswer) => |
|
|
|
context.read<QuestionBloc>().add( |
|
|
|
ChooseAnswerEvent( |
|
|
|
isCorrect, |
|
|
|
correctAnswer, |
|
|
|
context, |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
); |
|
|
|
} |
|
|
|
}, |
|
|
|
), |
|
|
|
), |
|
|
|
Expanded( |
|
|
|
child: Builder( |
|
|
|
key: Key('${state.currentQuestion?.id}1'), |
|
|
|
builder: (context) { |
|
|
|
if (state.currentQuestion?.answers?[1].imageId == |
|
|
|
null) { |
|
|
|
return const SizedBox.shrink(); |
|
|
|
} else { |
|
|
|
return Container( |
|
|
|
alignment: isTablet ? Alignment.center : null, |
|
|
|
width: isTablet ? 320 : 180, |
|
|
|
height: isTablet ? 300 :250, |
|
|
|
child: SlideAnim( |
|
|
|
controller: context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.answerAnimationController!, |
|
|
|
index: 1, |
|
|
|
child: AnswerBox( |
|
|
|
index: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.answers?[1] |
|
|
|
.order ?? |
|
|
|
1, |
|
|
|
answer: |
|
|
|
state.currentQuestion?.answers?[1] ?? |
|
|
|
AnswerEntity(), |
|
|
|
correctAnswer: |
|
|
|
state.currentQuestion?.correctAnswer ?? 0, |
|
|
|
onNotifTap: (AnswerEntity answer) { |
|
|
|
context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.showAnswerDialog( |
|
|
|
context: context, |
|
|
|
answerEntity: answer, |
|
|
|
); |
|
|
|
}, |
|
|
|
onTap: (isCorrect, correctAnswer) => |
|
|
|
context.read<QuestionBloc>().add( |
|
|
|
ChooseAnswerEvent( |
|
|
|
isCorrect, |
|
|
|
correctAnswer, |
|
|
|
context, |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
); |
|
|
|
} |
|
|
|
}, |
|
|
|
), |
|
|
|
), |
|
|
|
], |
|
|
|
), |
|
|
|
if ((state.currentQuestion?.answers?.length ?? 0) == 3) |
|
|
|
Row( |
|
|
|
key: Key('${state.currentQuestion?.id}answer1'), |
|
|
|
mainAxisAlignment: MainAxisAlignment.center, |
|
|
|
children: [ |
|
|
|
Builder( |
|
|
|
key: Key('${state.currentQuestion?.id}2'), |
|
|
|
builder: (context) { |
|
|
|
if (state.currentQuestion?.answers?[2].imageId == |
|
|
|
null) { |
|
|
|
return const SizedBox.shrink(); |
|
|
|
} else { |
|
|
|
return Container( |
|
|
|
alignment: isTablet ? Alignment.center : null, |
|
|
|
width: isTablet ? 320 : 180, |
|
|
|
height: isTablet ? 300 :250, |
|
|
|
child: SlideAnim( |
|
|
|
controller: context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.answerAnimationController!, |
|
|
|
index: 2, |
|
|
|
child: AnswerBox( |
|
|
|
index: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.answers?[2] |
|
|
|
.order ?? |
|
|
|
1, |
|
|
|
answer: |
|
|
|
state.currentQuestion?.answers?[2] ?? |
|
|
|
AnswerEntity(), |
|
|
|
correctAnswer: |
|
|
|
state.currentQuestion?.correctAnswer ?? 0, |
|
|
|
onNotifTap: (AnswerEntity answer) { |
|
|
|
context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.showAnswerDialog( |
|
|
|
context: context, |
|
|
|
answerEntity: answer, |
|
|
|
); |
|
|
|
}, |
|
|
|
onTap: (isCorrect, correctAnswer) => |
|
|
|
context.read<QuestionBloc>().add( |
|
|
|
ChooseAnswerEvent( |
|
|
|
isCorrect, |
|
|
|
correctAnswer, |
|
|
|
context, |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
); |
|
|
|
} |
|
|
|
}, |
|
|
|
), |
|
|
|
], |
|
|
|
), |
|
|
|
if ((state.currentQuestion?.answers?.length ?? 0) == 4) |
|
|
|
Row( |
|
|
|
key: Key('${state.currentQuestion?.id}answer2'), |
|
|
|
key: Key('${state.currentQuestion?.id}answer0'), |
|
|
|
spacing: 20, |
|
|
|
children: [ |
|
|
|
Expanded( |
|
|
|
child: Builder( |
|
|
|
key: Key('${state.currentQuestion?.id}2'), |
|
|
|
key: Key('${state.currentQuestion?.id}0'), |
|
|
|
builder: (context) { |
|
|
|
if (state.currentQuestion?.answers?[2].imageId == |
|
|
|
if (state.currentQuestion?.answers?[0].imageId == |
|
|
|
null) { |
|
|
|
return const SizedBox.shrink(); |
|
|
|
} else { |
|
|
|
return Container( |
|
|
|
alignment: isTablet ? Alignment.center : null, |
|
|
|
width: isTablet ? 320 : 180, |
|
|
|
height: isTablet ? 300 :250, |
|
|
|
child: SlideAnim( |
|
|
|
controller: context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.answerAnimationController!, |
|
|
|
index: 2, |
|
|
|
child: AnswerBox( |
|
|
|
index: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.answers?[2] |
|
|
|
.order ?? |
|
|
|
1, |
|
|
|
answer: |
|
|
|
state.currentQuestion?.answers?[2] ?? |
|
|
|
AnswerEntity(), |
|
|
|
correctAnswer: |
|
|
|
state.currentQuestion?.correctAnswer ?? |
|
|
|
0, |
|
|
|
onNotifTap: (AnswerEntity answer) { |
|
|
|
context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.showAnswerDialog( |
|
|
|
context: context, |
|
|
|
answerEntity: answer, |
|
|
|
); |
|
|
|
}, |
|
|
|
onTap: (isCorrect, correctAnswer) => |
|
|
|
context.read<QuestionBloc>().add( |
|
|
|
ChooseAnswerEvent( |
|
|
|
isCorrect, |
|
|
|
correctAnswer, |
|
|
|
context, |
|
|
|
return AspectRatio( |
|
|
|
aspectRatio: boxRation, |
|
|
|
child: Container( |
|
|
|
alignment: isTablet ? Alignment.center : null, |
|
|
|
width: isTablet ? 320 : 180, |
|
|
|
height: isTablet ? 300 : 250, |
|
|
|
child: SlideAnim( |
|
|
|
controller: context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.answerAnimationController!, |
|
|
|
index: 0, |
|
|
|
child: AnswerBox( |
|
|
|
index: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.answers?[0] |
|
|
|
.order ?? |
|
|
|
1, |
|
|
|
answer: |
|
|
|
state.currentQuestion?.answers?[0] ?? |
|
|
|
AnswerEntity(), |
|
|
|
correctAnswer: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.correctAnswer ?? |
|
|
|
0, |
|
|
|
onNotifTap: (AnswerEntity answer) { |
|
|
|
context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.showAnswerDialog( |
|
|
|
context: context, |
|
|
|
answerEntity: answer, |
|
|
|
); |
|
|
|
}, |
|
|
|
onTap: (isCorrect, correctAnswer) => |
|
|
|
context.read<QuestionBloc>().add( |
|
|
|
ChooseAnswerEvent( |
|
|
|
isCorrect, |
|
|
|
correctAnswer, |
|
|
|
context, |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
); |
|
|
|
@ -405,50 +245,55 @@ class _QuestionScreenState extends State<QuestionScreen> |
|
|
|
), |
|
|
|
Expanded( |
|
|
|
child: Builder( |
|
|
|
key: Key('${state.currentQuestion?.id}3'), |
|
|
|
key: Key('${state.currentQuestion?.id}1'), |
|
|
|
builder: (context) { |
|
|
|
if (state.currentQuestion?.answers?[3].imageId == |
|
|
|
if (state.currentQuestion?.answers?[1].imageId == |
|
|
|
null) { |
|
|
|
return const SizedBox.shrink(); |
|
|
|
} else { |
|
|
|
return Container( |
|
|
|
alignment: isTablet ? Alignment.center : null, |
|
|
|
width: isTablet ? 320 : 180, |
|
|
|
height: isTablet ? 300 :250, |
|
|
|
child: SlideAnim( |
|
|
|
controller: context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.answerAnimationController!, |
|
|
|
index: 3, |
|
|
|
child: AnswerBox( |
|
|
|
index: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.answers?[3] |
|
|
|
.order ?? |
|
|
|
1, |
|
|
|
answer: |
|
|
|
state.currentQuestion?.answers?[3] ?? |
|
|
|
AnswerEntity(), |
|
|
|
correctAnswer: |
|
|
|
state.currentQuestion?.correctAnswer ?? |
|
|
|
0, |
|
|
|
onNotifTap: (AnswerEntity answer) { |
|
|
|
context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.showAnswerDialog( |
|
|
|
context: context, |
|
|
|
answerEntity: answer, |
|
|
|
); |
|
|
|
}, |
|
|
|
onTap: (isCorrect, correctAnswer) => |
|
|
|
context.read<QuestionBloc>().add( |
|
|
|
ChooseAnswerEvent( |
|
|
|
isCorrect, |
|
|
|
correctAnswer, |
|
|
|
context, |
|
|
|
return AspectRatio( |
|
|
|
aspectRatio: boxRation, |
|
|
|
child: Container( |
|
|
|
alignment: isTablet ? Alignment.center : null, |
|
|
|
width: isTablet ? 320 : 180, |
|
|
|
height: isTablet ? 300 : 250, |
|
|
|
child: SlideAnim( |
|
|
|
controller: context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.answerAnimationController!, |
|
|
|
index: 1, |
|
|
|
child: AnswerBox( |
|
|
|
index: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.answers?[1] |
|
|
|
.order ?? |
|
|
|
1, |
|
|
|
answer: |
|
|
|
state.currentQuestion?.answers?[1] ?? |
|
|
|
AnswerEntity(), |
|
|
|
correctAnswer: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.correctAnswer ?? |
|
|
|
0, |
|
|
|
onNotifTap: (AnswerEntity answer) { |
|
|
|
context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.showAnswerDialog( |
|
|
|
context: context, |
|
|
|
answerEntity: answer, |
|
|
|
); |
|
|
|
}, |
|
|
|
onTap: (isCorrect, correctAnswer) => |
|
|
|
context.read<QuestionBloc>().add( |
|
|
|
ChooseAnswerEvent( |
|
|
|
isCorrect, |
|
|
|
correctAnswer, |
|
|
|
context, |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
); |
|
|
|
@ -458,6 +303,200 @@ class _QuestionScreenState extends State<QuestionScreen> |
|
|
|
), |
|
|
|
], |
|
|
|
), |
|
|
|
if ((state.currentQuestion?.answers?.length ?? 0) == 3) |
|
|
|
Row( |
|
|
|
key: Key('${state.currentQuestion?.id}answer1'), |
|
|
|
mainAxisAlignment: MainAxisAlignment.center, |
|
|
|
children: [ |
|
|
|
Builder( |
|
|
|
key: Key('${state.currentQuestion?.id}2'), |
|
|
|
builder: (context) { |
|
|
|
if (state.currentQuestion?.answers?[2].imageId == |
|
|
|
null) { |
|
|
|
return const SizedBox.shrink(); |
|
|
|
} else { |
|
|
|
return AspectRatio( |
|
|
|
aspectRatio: boxRation, |
|
|
|
child: Container( |
|
|
|
alignment: isTablet ? Alignment.center : null, |
|
|
|
width: isTablet ? 320 : 180, |
|
|
|
height: isTablet ? 300 : 250, |
|
|
|
child: SlideAnim( |
|
|
|
controller: context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.answerAnimationController!, |
|
|
|
index: 2, |
|
|
|
child: AnswerBox( |
|
|
|
index: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.answers?[2] |
|
|
|
.order ?? |
|
|
|
1, |
|
|
|
answer: |
|
|
|
state.currentQuestion?.answers?[2] ?? |
|
|
|
AnswerEntity(), |
|
|
|
correctAnswer: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.correctAnswer ?? |
|
|
|
0, |
|
|
|
onNotifTap: (AnswerEntity answer) { |
|
|
|
context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.showAnswerDialog( |
|
|
|
context: context, |
|
|
|
answerEntity: answer, |
|
|
|
); |
|
|
|
}, |
|
|
|
onTap: (isCorrect, correctAnswer) => |
|
|
|
context.read<QuestionBloc>().add( |
|
|
|
ChooseAnswerEvent( |
|
|
|
isCorrect, |
|
|
|
correctAnswer, |
|
|
|
context, |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
); |
|
|
|
} |
|
|
|
}, |
|
|
|
), |
|
|
|
], |
|
|
|
), |
|
|
|
if ((state.currentQuestion?.answers?.length ?? 0) == 4) |
|
|
|
Row( |
|
|
|
key: Key('${state.currentQuestion?.id}answer2'), |
|
|
|
spacing: 20, |
|
|
|
children: [ |
|
|
|
Expanded( |
|
|
|
child: Builder( |
|
|
|
key: Key('${state.currentQuestion?.id}2'), |
|
|
|
builder: (context) { |
|
|
|
if (state.currentQuestion?.answers?[2].imageId == |
|
|
|
null) { |
|
|
|
return const SizedBox.shrink(); |
|
|
|
} else { |
|
|
|
return AspectRatio( |
|
|
|
aspectRatio: boxRation, |
|
|
|
child: Container( |
|
|
|
alignment: isTablet |
|
|
|
? Alignment.center |
|
|
|
: null, |
|
|
|
width: isTablet ? 320 : 180, |
|
|
|
height: isTablet ? 300 : 250, |
|
|
|
child: SlideAnim( |
|
|
|
controller: context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.answerAnimationController!, |
|
|
|
index: 2, |
|
|
|
child: AnswerBox( |
|
|
|
index: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.answers?[2] |
|
|
|
.order ?? |
|
|
|
1, |
|
|
|
answer: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.answers?[2] ?? |
|
|
|
AnswerEntity(), |
|
|
|
correctAnswer: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.correctAnswer ?? |
|
|
|
0, |
|
|
|
onNotifTap: (AnswerEntity answer) { |
|
|
|
context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.showAnswerDialog( |
|
|
|
context: context, |
|
|
|
answerEntity: answer, |
|
|
|
); |
|
|
|
}, |
|
|
|
onTap: (isCorrect, correctAnswer) => |
|
|
|
context.read<QuestionBloc>().add( |
|
|
|
ChooseAnswerEvent( |
|
|
|
isCorrect, |
|
|
|
correctAnswer, |
|
|
|
context, |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
); |
|
|
|
} |
|
|
|
}, |
|
|
|
), |
|
|
|
), |
|
|
|
Expanded( |
|
|
|
child: Builder( |
|
|
|
key: Key('${state.currentQuestion?.id}3'), |
|
|
|
builder: (context) { |
|
|
|
if (state.currentQuestion?.answers?[3].imageId == |
|
|
|
null) { |
|
|
|
return const SizedBox.shrink(); |
|
|
|
} else { |
|
|
|
return AspectRatio( |
|
|
|
aspectRatio: boxRation, |
|
|
|
child: Container( |
|
|
|
alignment: isTablet |
|
|
|
? Alignment.center |
|
|
|
: null, |
|
|
|
width: isTablet ? 320 : 180, |
|
|
|
height: isTablet ? 300 : 250, |
|
|
|
child: SlideAnim( |
|
|
|
controller: context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.answerAnimationController!, |
|
|
|
index: 3, |
|
|
|
child: AnswerBox( |
|
|
|
index: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.answers?[3] |
|
|
|
.order ?? |
|
|
|
1, |
|
|
|
answer: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.answers?[3] ?? |
|
|
|
AnswerEntity(), |
|
|
|
correctAnswer: |
|
|
|
state |
|
|
|
.currentQuestion |
|
|
|
?.correctAnswer ?? |
|
|
|
0, |
|
|
|
onNotifTap: (AnswerEntity answer) { |
|
|
|
context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.showAnswerDialog( |
|
|
|
context: context, |
|
|
|
answerEntity: answer, |
|
|
|
); |
|
|
|
}, |
|
|
|
onTap: (isCorrect, correctAnswer) => |
|
|
|
context.read<QuestionBloc>().add( |
|
|
|
ChooseAnswerEvent( |
|
|
|
isCorrect, |
|
|
|
correctAnswer, |
|
|
|
context, |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
), |
|
|
|
); |
|
|
|
} |
|
|
|
}, |
|
|
|
), |
|
|
|
), |
|
|
|
], |
|
|
|
), |
|
|
|
], |
|
|
|
), |
|
|
|
), |
|
|
|
@ -475,24 +514,21 @@ class _QuestionScreenState extends State<QuestionScreen> |
|
|
|
alignment: AlignmentDirectional.centerStart, |
|
|
|
children: [ |
|
|
|
AnimatedBuilder( |
|
|
|
animation: context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.globeAnimationController!, |
|
|
|
builder: (context, child) => |
|
|
|
Gif( |
|
|
|
image: AssetImage(context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.statesGlobe[context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.globeAnimationController |
|
|
|
?.value ?? |
|
|
|
animation: context.read<QuestionBloc>().globeAnimationController!, |
|
|
|
builder: (context, child) => Gif( |
|
|
|
image: AssetImage( |
|
|
|
context.read<QuestionBloc>().statesGlobe[context |
|
|
|
.read<QuestionBloc>() |
|
|
|
.globeAnimationController |
|
|
|
?.value ?? |
|
|
|
0] ?? |
|
|
|
MyAnimations.globeStateSpeaking), |
|
|
|
fps: 10, |
|
|
|
autostart: Autostart.loop, |
|
|
|
width: 80, |
|
|
|
height: 80, |
|
|
|
) |
|
|
|
MyAnimations.globeStateSpeaking, |
|
|
|
), |
|
|
|
fps: 10, |
|
|
|
autostart: Autostart.loop, |
|
|
|
width: 80, |
|
|
|
height: 80, |
|
|
|
), |
|
|
|
), |
|
|
|
Positioned( |
|
|
|
left: 90, |
|
|
|
@ -520,7 +556,9 @@ class _QuestionScreenState extends State<QuestionScreen> |
|
|
|
show: false, |
|
|
|
); |
|
|
|
context.read<QuestionBloc>().pausePlaying(); |
|
|
|
context.read<QuestionBloc>().changeGlobeState(key: MyAnimations.globeStateNormal); |
|
|
|
context.read<QuestionBloc>().changeGlobeState( |
|
|
|
key: MyAnimations.globeStateNormal, |
|
|
|
); |
|
|
|
} |
|
|
|
}, |
|
|
|
style: TextButton.styleFrom( |
|
|
|
|