fix percentage showing
This commit is contained in:
parent
7bac9f8a85
commit
314ab88551
|
|
@ -650,7 +650,7 @@ code + .copy-button {
|
|||
<script type="text/javascript">
|
||||
function configurationCacheProblems() { return (
|
||||
// begin-report-data
|
||||
{"diagnostics":[{"problem":[{"text":"Executing Gradle on JVM versions 16 and lower has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This will fail with an error in Gradle 9.0."}],"contextualLabel":"Executing Gradle on JVM versions 16 and lower has been deprecated.","documentationLink":"https://docs.gradle.org/8.13/userguide/upgrading_version_8.html#minimum_daemon_jvm_version","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"executing-gradle-on-jvm-versions-and-lower","displayName":"Executing Gradle on JVM versions 16 and lower has been deprecated."}],"solutions":[[{"text":"Use JVM 17 or greater to execute Gradle. Projects can continue to use older JVM versions via toolchains."}]]}],"problemsReport":{"totalProblemCount":1,"requestedTasks":"","documentationLink":"https://docs.gradle.org/8.13/userguide/reporting_problems.html","documentationLinkCaption":"Problem report","summaries":[]}}
|
||||
{"diagnostics":[{"problem":[{"text":"Executing Gradle on JVM versions 16 and lower has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This will fail with an error in Gradle 9.0."}],"contextualLabel":"Executing Gradle on JVM versions 16 and lower has been deprecated.","documentationLink":"https://docs.gradle.org/8.13/userguide/upgrading_version_8.html#minimum_daemon_jvm_version","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"executing-gradle-on-jvm-versions-and-lower","displayName":"Executing Gradle on JVM versions 16 and lower has been deprecated."}],"solutions":[[{"text":"Use JVM 17 or greater to execute Gradle. Projects can continue to use older JVM versions via toolchains."}]]},{"problem":[{"text":"No variants exist that would match the request"}],"severity":"ERROR","contextualLabel":"Dependency requires at least JVM runtime version 11. This build uses a Java 8 JVM.","documentationLink":"https://docs.gradle.org/8.13/userguide/variant_model.html#sec:variant-select-errors","problemId":[{"name":"dependency-variant-resolution","displayName":"Variant resolution"},{"name":"no-compatible-variants","displayName":"No variants exist that would match the request"}]}],"problemsReport":{"totalProblemCount":2,"requestedTasks":"","documentationLink":"https://docs.gradle.org/8.13/userguide/reporting_problems.html","documentationLinkCaption":"Problem report","summaries":[]}}
|
||||
// end-report-data
|
||||
);}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
[{"family":"MaterialIcons","fonts":[{"asset":"fonts/MaterialIcons-Regular.otf"}]},{"family":"packages/cupertino_icons/CupertinoIcons","fonts":[{"asset":"packages/cupertino_icons/assets/CupertinoIcons.ttf"}]},{"family":"packages/material/Material","fonts":[{"asset":"packages/material/lib/fonts/material.ttf"}]}]
|
||||
[{"family":"MaterialIcons","fonts":[{"asset":"fonts/MaterialIcons-Regular.otf"}]},{"family":"packages/material/Material","fonts":[{"asset":"packages/material/lib/fonts/material.ttf"}]},{"family":"packages/cupertino_icons/CupertinoIcons","fonts":[{"asset":"packages/cupertino_icons/assets/CupertinoIcons.ttf"}]}]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -223,6 +223,12 @@ abstract class L10n {
|
|||
/// **'Resume'**
|
||||
String get resume;
|
||||
|
||||
/// No description provided for @endPoll.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'End poll'**
|
||||
String get endPoll;
|
||||
|
||||
/// No description provided for @anonymousPoll.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nAr extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nBe extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nBn extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nBo extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nCa extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nCs extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nDe extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nEl extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nEn extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nEo extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nEs extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nEt extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nEu extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nFa extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nFi extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nFil extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nFr extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nGa extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nGl extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nHe extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nHi extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nHr extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nHu extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nIa extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nId extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nIe extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nIt extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nJa extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nKa extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nKo extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nLt extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nLv extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nNb extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nNl extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nPl extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nPt extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nRo extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nRu extends L10n {
|
|||
@override
|
||||
String get resume => 'Продолжить';
|
||||
|
||||
@override
|
||||
String get endPoll => 'Завершить опрос';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Анонимный';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nSk extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nSl extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nSr extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nSv extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nTa extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nTe extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nTh extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nTr extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nUk extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nVi extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class L10nZh extends L10n {
|
|||
@override
|
||||
String get resume => 'Resume';
|
||||
|
||||
@override
|
||||
String get endPoll => 'End poll';
|
||||
|
||||
@override
|
||||
String get anonymousPoll => 'Anonymous';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import 'package:extera_next/generated/l10n/l10n.dart';
|
||||
import 'package:extera_next/utils/poll_events.dart';
|
||||
import 'package:extera_next/widgets/matrix.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
||||
|
|
@ -29,6 +30,7 @@ class PollWidgetState extends State<PollWidget> {
|
|||
Map<String, int>? pollResults;
|
||||
bool hasVoted = false;
|
||||
bool isLoading = false;
|
||||
bool hasEnded = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
|
|
@ -38,8 +40,7 @@ class PollWidgetState extends State<PollWidget> {
|
|||
|
||||
void _loadPollData() {
|
||||
final event = widget.event;
|
||||
final content =
|
||||
event.content[PollEvents.PollStart] as Map<String, dynamic>;
|
||||
final content = event.content[PollEvents.PollStart] as Map<String, dynamic>;
|
||||
|
||||
// Check if user has already voted
|
||||
_checkExistingVote();
|
||||
|
|
@ -51,47 +52,49 @@ class PollWidgetState extends State<PollWidget> {
|
|||
}
|
||||
}
|
||||
|
||||
void _checkExistingVote() {
|
||||
void _checkExistingVote() async {
|
||||
final room = widget.event.room;
|
||||
final currentUserId = room.client.userID;
|
||||
|
||||
|
||||
final rel = await Matrix.of(context)
|
||||
.client
|
||||
.getRelatingEventsWithRelTypeAndEventType(room.id, widget.event.eventId,
|
||||
"m.reference", "org.matrix.msc3381.poll.response");
|
||||
|
||||
// Find existing poll response events from current user
|
||||
final responses = widget.timeline!.events.where((e) {
|
||||
return e.type == 'org.matrix.msc3381.poll.response' &&
|
||||
e.senderId == currentUserId &&
|
||||
e.relationshipEventId == widget.event.eventId;
|
||||
}).toList();
|
||||
// Get all poll response events for this poll
|
||||
final responses = rel.chunk;
|
||||
|
||||
if (responses.isNotEmpty) {
|
||||
// Use the latest response
|
||||
final latestResponse = responses.last;
|
||||
final responseContent = latestResponse
|
||||
.content['org.matrix.msc3381.poll.response'] as Map<String, dynamic>;
|
||||
if (responseContent != null) {
|
||||
final List<dynamic> answers = responseContent['answers'];
|
||||
setState(() {
|
||||
selectedAnswers = answers.cast<String>();
|
||||
originalVote = List.from(answers.cast<String>()); // Store original vote
|
||||
hasVoted = true;
|
||||
});
|
||||
for (final response in responses) {
|
||||
final responseContent =
|
||||
response.content['org.matrix.msc3381.poll.response']
|
||||
as Map<String, dynamic>;
|
||||
if (responseContent != null && response.senderId == currentUserId) {
|
||||
final List<dynamic> answers = responseContent['answers'];
|
||||
setState(() {
|
||||
selectedAnswers = answers.cast<String>();
|
||||
originalVote =
|
||||
List.from(answers.cast<String>()); // Store original vote
|
||||
hasVoted = true;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void _calculateResults() {
|
||||
void _calculateResults() async {
|
||||
final room = widget.event.room;
|
||||
final pollEventId = widget.event.eventId;
|
||||
final results = <String, int>{};
|
||||
|
||||
|
||||
final rel = await Matrix.of(context)
|
||||
.client
|
||||
.getRelatingEventsWithRelTypeAndEventType(room.id, pollEventId,
|
||||
"m.reference", "org.matrix.msc3381.poll.response");
|
||||
|
||||
// Get all poll response events for this poll
|
||||
final responses = widget.timeline!.events.where((e) {
|
||||
return e.type == 'org.matrix.msc3381.poll.response' &&
|
||||
e.relationshipEventId == pollEventId;
|
||||
}).toList();
|
||||
final responses = rel.chunk;
|
||||
|
||||
// Count votes for each answer
|
||||
for (final response in responses) {
|
||||
|
|
@ -121,18 +124,15 @@ class PollWidgetState extends State<PollWidget> {
|
|||
final room = widget.event.room;
|
||||
|
||||
// Send poll response event
|
||||
await room.sendEvent(
|
||||
{
|
||||
'm.relates_to': {
|
||||
'rel_type': 'm.reference',
|
||||
'event_id': widget.event.eventId,
|
||||
},
|
||||
'org.matrix.msc3381.poll.response': {
|
||||
'answers': answers,
|
||||
},
|
||||
await room.sendEvent({
|
||||
'm.relates_to': {
|
||||
'rel_type': 'm.reference',
|
||||
'event_id': widget.event.eventId,
|
||||
},
|
||||
type: 'org.matrix.msc3381.poll.response'
|
||||
);
|
||||
'org.matrix.msc3381.poll.response': {
|
||||
'answers': answers,
|
||||
},
|
||||
}, type: 'org.matrix.msc3381.poll.response');
|
||||
|
||||
setState(() {
|
||||
selectedAnswers = answers;
|
||||
|
|
@ -206,30 +206,35 @@ class PollWidgetState extends State<PollWidget> {
|
|||
final isDisclosed = kind == 'org.matrix.msc3381.disclosed';
|
||||
final isEnded = _isPollEnded();
|
||||
|
||||
return isDisclosed || isEnded || hasVoted;
|
||||
return isDisclosed ? (isEnded || hasVoted) : isEnded;
|
||||
}
|
||||
|
||||
double _getAnswerPercentage(String answerId) {
|
||||
if (pollResults == null || pollResults!.isEmpty) return 0.0;
|
||||
|
||||
final totalVotes = pollResults!.values.reduce((a, b) => a + b);
|
||||
if (totalVotes == 0) return 0.0;
|
||||
|
||||
return pollResults![answerId]?.toDouble() ?? 0 / totalVotes.toDouble();
|
||||
// if (_shouldShowResults()) {
|
||||
// Logs().w("Get answer percentage for $answerId");
|
||||
// Logs().w(pollResults.toString());
|
||||
// Logs().w("${pollResults![answerId]?.toDouble() ?? 0} / $totalVotes");
|
||||
// }
|
||||
|
||||
return (pollResults![answerId]?.toDouble() ?? 0) / totalVotes.toDouble();
|
||||
}
|
||||
|
||||
// Check if the current selection is different from the original vote
|
||||
bool _hasSelectionChanged() {
|
||||
if (selectedAnswers.length != originalVote.length) return true;
|
||||
|
||||
|
||||
// Sort both lists to compare regardless of order
|
||||
final sortedSelected = List.from(selectedAnswers)..sort();
|
||||
final sortedOriginal = List.from(originalVote)..sort();
|
||||
|
||||
|
||||
for (int i = 0; i < sortedSelected.length; i++) {
|
||||
if (sortedSelected[i] != sortedOriginal[i]) return true;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -364,7 +369,9 @@ class PollWidgetState extends State<PollWidget> {
|
|||
height: 16,
|
||||
child: CircularProgressIndicator(strokeWidth: 2),
|
||||
)
|
||||
: Text(hasVoted ? L10n.of(context).changeVote : L10n.of(context).vote),
|
||||
: Text(hasVoted
|
||||
? L10n.of(context).changeVote
|
||||
: L10n.of(context).vote),
|
||||
),
|
||||
|
||||
const Spacer(),
|
||||
|
|
@ -386,7 +393,8 @@ class PollWidgetState extends State<PollWidget> {
|
|||
Padding(
|
||||
padding: const EdgeInsets.only(top: 8),
|
||||
child: Text(
|
||||
L10n.of(context).choicesSelected(selectedAnswers.length, maxSelections),
|
||||
L10n.of(context)
|
||||
.choicesSelected(selectedAnswers.length, maxSelections),
|
||||
style: TextStyle(
|
||||
fontSize: widget.fontSize - 2,
|
||||
color: widget.color.withOpacity(0.6),
|
||||
|
|
@ -397,4 +405,4 @@ class PollWidgetState extends State<PollWidget> {
|
|||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue