mirror of
https://gitlab.com/famedly/fluffychat.git
synced 2025-01-11 18:22:49 +01:00
refactor: Migrate to Flutter 3.7.0
This commit is contained in:
parent
426ca2480f
commit
8503bbd33c
@ -1,5 +1,5 @@
|
|||||||
variables:
|
variables:
|
||||||
FLUTTER_VERSION: 3.3.9
|
FLUTTER_VERSION: 3.7.0
|
||||||
|
|
||||||
image:
|
image:
|
||||||
name: cirrusci/flutter:${FLUTTER_VERSION}
|
name: cirrusci/flutter:${FLUTTER_VERSION}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.6.10'
|
ext.kotlin_version = '1.8.0'
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -2009,7 +2009,7 @@
|
|||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholder": {}
|
"placeholder": {}
|
||||||
},
|
},
|
||||||
"cantOpenUri": "Impossibile aprire l'URI",
|
"cantOpenUri": "Can't open the URI {uri}",
|
||||||
"@cantOpenUri": {
|
"@cantOpenUri": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -1,292 +0,0 @@
|
|||||||
{
|
|
||||||
"@@last_modified": "2021-08-14 12:41:09.895217",
|
|
||||||
"about": "පිළිබඳව",
|
|
||||||
"@about": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"accept": "පිළිගන්න",
|
|
||||||
"@accept": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"account": "ගිණුම",
|
|
||||||
"@account": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"addEmail": "වි-තැපෑල එකතු කරන්න",
|
|
||||||
"@addEmail": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"admin": "පරිපාලක",
|
|
||||||
"@admin": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"allChats": "සියලුම සංවාද",
|
|
||||||
"@allChats": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"anyoneCanJoin": "ඕනෑම කෙනෙකුට එක්විය හැකිය",
|
|
||||||
"@anyoneCanJoin": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"archive": "සංරක්ෂිතය",
|
|
||||||
"@archive": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"archivedRoom": "සංරක්ෂිත කාමරය",
|
|
||||||
"@archivedRoom": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"areGuestsAllowedToJoin": "ආගන්තුක පරිශීලකයින්ට එක්වීමට අවසර තිබේද",
|
|
||||||
"@areGuestsAllowedToJoin": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"areYouSure": "ඔබට විශ්වාසද?",
|
|
||||||
"@areYouSure": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"areYouSureYouWantToLogout": "ඔබට නික්මීමට අවශ්ය බව විශ්වාසද?",
|
|
||||||
"@areYouSureYouWantToLogout": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"blockDevice": "උපාංගය අවහිර කරන්න",
|
|
||||||
"@blockDevice": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"cancel": "අවලංගු කරන්න",
|
|
||||||
"@cancel": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"changeDeviceName": "උපාංගයේ නම වෙනස් කරන්න",
|
|
||||||
"@changeDeviceName": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"changePassword": "මුරපදය වෙනස් කරන්න",
|
|
||||||
"@changePassword": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"chat": "සංවාදය",
|
|
||||||
"@chat": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"chatBackup": "සංවාද උපස්ථය",
|
|
||||||
"@chatBackup": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"chatDetails": "සංවාදයේ විස්තර",
|
|
||||||
"@chatDetails": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"chats": "සංවාද",
|
|
||||||
"@chats": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"chooseAStrongPassword": "ශක්තිමත් මුරපදයක් තෝරන්න",
|
|
||||||
"@chooseAStrongPassword": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"chooseAUsername": "පරිශීලක නාමයක් තෝරන්න",
|
|
||||||
"@chooseAUsername": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"clearArchive": "සංරක්ෂිතය හිස් කරන්න",
|
|
||||||
"@clearArchive": {},
|
|
||||||
"close": "වසන්න",
|
|
||||||
"@close": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"commandHint_join": "දී ඇති කාමරයට එක්වන්න",
|
|
||||||
"@commandHint_join": {
|
|
||||||
"type": "text",
|
|
||||||
"description": "Usage hint for the command /join"
|
|
||||||
},
|
|
||||||
"commandHint_leave": "මෙම කාමරය හැරයන්න",
|
|
||||||
"@commandHint_leave": {
|
|
||||||
"type": "text",
|
|
||||||
"description": "Usage hint for the command /leave"
|
|
||||||
},
|
|
||||||
"commandInvalid": "විධානය වලංගු නොවේ",
|
|
||||||
"@commandInvalid": {
|
|
||||||
"type": "text"
|
|
||||||
},
|
|
||||||
"commandMissing": "{{command} විධානයක් නොවේ.",
|
|
||||||
"@commandMissing": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {
|
|
||||||
"command": {}
|
|
||||||
},
|
|
||||||
"description": "State that {command} is not a valid /command."
|
|
||||||
},
|
|
||||||
"compareEmojiMatch": "සසඳා බලා පහත දැක්වෙන ඉමොජි අනෙක් උපාංගයට නිසැකවම ගැලපෙන බවට වග බලා ගන්න:",
|
|
||||||
"@compareEmojiMatch": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"compareNumbersMatch": "සංසන්දනය කර පහත දැක්වෙන අංක අනෙක් උපාංගට නිසැකව ගැලපෙන බවට වග බලා ගන්න:",
|
|
||||||
"@compareNumbersMatch": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"confirm": "තහවුරු කරන්න",
|
|
||||||
"@confirm": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"connect": "සබඳින්න",
|
|
||||||
"@connect": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"contactHasBeenInvitedToTheGroup": "සමූහය වෙත සබඳතාවයකට ආරාධනා කර ඇත",
|
|
||||||
"@contactHasBeenInvitedToTheGroup": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"copy": "පිටපත්",
|
|
||||||
"@copy": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"create": "සාදන්න",
|
|
||||||
"@create": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"createNewGroup": "නව සමූහයක් සාදන්න",
|
|
||||||
"@createNewGroup": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"encryption": "සංකේතාංකනය",
|
|
||||||
"@encryption": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"everythingReady": "සියල්ල සූදානම්!",
|
|
||||||
"@everythingReady": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"fontSize": "මුද්රණඅකුරේ ප්රමාණය",
|
|
||||||
"@fontSize": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"goToTheNewRoom": "නව කාමරයට යන්න",
|
|
||||||
"@goToTheNewRoom": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"joinRoom": "කාමරයට එක්වන්න",
|
|
||||||
"@joinRoom": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"keysCached": "යතුරු නිහිතගත යි",
|
|
||||||
"@keysCached": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"next": "ඊලඟ",
|
|
||||||
"@next": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"people": "මිනිසුන්",
|
|
||||||
"@people": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"removeDevice": "උපාංගය ඉවත්කරන්න",
|
|
||||||
"@removeDevice": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"roomVersion": "කාමරයේ අනුවාදය",
|
|
||||||
"@roomVersion": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"saveFile": "ගොනුව සුරකින්න",
|
|
||||||
"@saveFile": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"send": "යවන්න",
|
|
||||||
"@send": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"showPassword": "මුරපදය පෙන්වන්න",
|
|
||||||
"@showPassword": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"sunday": "ඉරිදා",
|
|
||||||
"@sunday": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"username": "පරිශීලක නාමය",
|
|
||||||
"@username": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"videoCall": "දෘශ්ය ඇමතුම",
|
|
||||||
"@videoCall": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"wallpaper": "බිතුපත",
|
|
||||||
"@wallpaper": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"warning": "අවවාදයයි!",
|
|
||||||
"@warning": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"wednesday": "බදාදා",
|
|
||||||
"@wednesday": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"writeAMessage": "පණිවිඩයක් ලියන්න…",
|
|
||||||
"@writeAMessage": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"yes": "ඔව්",
|
|
||||||
"@yes": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"you": "ඔබ",
|
|
||||||
"@you": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders": {}
|
|
||||||
}
|
|
||||||
}
|
|
@ -812,7 +812,7 @@
|
|||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"play": "Prehrať (fileName}",
|
"play": "Prehrať {fileName}",
|
||||||
"@play": {
|
"@play": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
@ -23,19 +23,19 @@ abstract class FluffyThemes {
|
|||||||
);
|
);
|
||||||
|
|
||||||
static var fallbackTextTheme = const TextTheme(
|
static var fallbackTextTheme = const TextTheme(
|
||||||
bodyText1: fallbackTextStyle,
|
bodyLarge: fallbackTextStyle,
|
||||||
bodyText2: fallbackTextStyle,
|
bodyMedium: fallbackTextStyle,
|
||||||
button: fallbackTextStyle,
|
labelLarge: fallbackTextStyle,
|
||||||
caption: fallbackTextStyle,
|
bodySmall: fallbackTextStyle,
|
||||||
overline: fallbackTextStyle,
|
labelSmall: fallbackTextStyle,
|
||||||
headline1: fallbackTextStyle,
|
displayLarge: fallbackTextStyle,
|
||||||
headline2: fallbackTextStyle,
|
displayMedium: fallbackTextStyle,
|
||||||
headline3: fallbackTextStyle,
|
displaySmall: fallbackTextStyle,
|
||||||
headline4: fallbackTextStyle,
|
headlineMedium: fallbackTextStyle,
|
||||||
headline5: fallbackTextStyle,
|
headlineSmall: fallbackTextStyle,
|
||||||
headline6: fallbackTextStyle,
|
titleLarge: fallbackTextStyle,
|
||||||
subtitle1: fallbackTextStyle,
|
titleMedium: fallbackTextStyle,
|
||||||
subtitle2: fallbackTextStyle,
|
titleSmall: fallbackTextStyle,
|
||||||
);
|
);
|
||||||
|
|
||||||
static const Duration animationDuration = Duration(milliseconds: 250);
|
static const Duration animationDuration = Duration(milliseconds: 250);
|
||||||
|
@ -269,7 +269,7 @@ class BootstrapDialogState extends State<BootstrapDialog> {
|
|||||||
labelStyle: TextStyle(
|
labelStyle: TextStyle(
|
||||||
fontFamily: Theme.of(context)
|
fontFamily: Theme.of(context)
|
||||||
.textTheme
|
.textTheme
|
||||||
.bodyText1
|
.bodyLarge
|
||||||
?.fontFamily),
|
?.fontFamily),
|
||||||
labelText: L10n.of(context)!.recoveryKey,
|
labelText: L10n.of(context)!.recoveryKey,
|
||||||
errorText: _recoveryKeyInputError,
|
errorText: _recoveryKeyInputError,
|
||||||
|
@ -1072,11 +1072,13 @@ class ChatController extends State<Chat> {
|
|||||||
Matrix.of(context).voipPlugin!.voip.requestTurnServerCredentials());
|
Matrix.of(context).voipPlugin!.voip.requestTurnServerCredentials());
|
||||||
if (success.result != null) {
|
if (success.result != null) {
|
||||||
final voipPlugin = Matrix.of(context).voipPlugin;
|
final voipPlugin = Matrix.of(context).voipPlugin;
|
||||||
await voipPlugin!.voip.inviteToCall(room!.id, callType).catchError((e) {
|
try {
|
||||||
|
await voipPlugin!.voip.inviteToCall(room!.id, callType);
|
||||||
|
} catch (e) {
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(content: Text((e as Object).toLocalizedString(context))),
|
SnackBar(content: Text(e.toLocalizedString(context))),
|
||||||
);
|
);
|
||||||
});
|
}
|
||||||
} else {
|
} else {
|
||||||
await showOkAlertDialog(
|
await showOkAlertDialog(
|
||||||
context: context,
|
context: context,
|
||||||
|
@ -69,7 +69,7 @@ class _CuteContentState extends State<CuteContent> {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
Overlay.of(context)?.insert(overlay);
|
Overlay.of(context).insert(overlay);
|
||||||
}
|
}
|
||||||
|
|
||||||
generateLabel(User? user) {
|
generateLabel(User? user) {
|
||||||
|
@ -52,7 +52,7 @@ class HtmlMessage extends StatelessWidget {
|
|||||||
defaultTextStyle: defaultTextStyle,
|
defaultTextStyle: defaultTextStyle,
|
||||||
emoteSize: emoteSize,
|
emoteSize: emoteSize,
|
||||||
linkStyle: linkStyle ??
|
linkStyle: linkStyle ??
|
||||||
themeData.textTheme.bodyText2!.copyWith(
|
themeData.textTheme.bodyMedium!.copyWith(
|
||||||
color: themeData.colorScheme.secondary,
|
color: themeData.colorScheme.secondary,
|
||||||
decoration: TextDecoration.underline,
|
decoration: TextDecoration.underline,
|
||||||
),
|
),
|
||||||
|
@ -303,8 +303,11 @@ class Message extends StatelessWidget {
|
|||||||
child: Center(
|
child: Center(
|
||||||
child: Material(
|
child: Material(
|
||||||
color: displayTime
|
color: displayTime
|
||||||
? Theme.of(context).backgroundColor
|
? Theme.of(context).colorScheme.background
|
||||||
: Theme.of(context).backgroundColor.withOpacity(0.33),
|
: Theme.of(context)
|
||||||
|
.colorScheme
|
||||||
|
.background
|
||||||
|
.withOpacity(0.33),
|
||||||
borderRadius: BorderRadius.circular(AppConfig.borderRadius / 2),
|
borderRadius: BorderRadius.circular(AppConfig.borderRadius / 2),
|
||||||
clipBehavior: Clip.antiAlias,
|
clipBehavior: Clip.antiAlias,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
|
@ -37,7 +37,7 @@ class VerificationRequestContent extends StatelessWidget {
|
|||||||
color: Theme.of(context).dividerColor,
|
color: Theme.of(context).dividerColor,
|
||||||
),
|
),
|
||||||
borderRadius: BorderRadius.circular(AppConfig.borderRadius),
|
borderRadius: BorderRadius.circular(AppConfig.borderRadius),
|
||||||
color: Theme.of(context).backgroundColor,
|
color: Theme.of(context).colorScheme.background,
|
||||||
),
|
),
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
@ -232,7 +232,7 @@ class InputBar extends StatelessWidget {
|
|||||||
hint,
|
hint,
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: Theme.of(context).textTheme.caption,
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -160,7 +160,7 @@ class RecordingDialogState extends State<RecordingDialog> {
|
|||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Theme.of(context)
|
color: Theme.of(context)
|
||||||
.textTheme
|
.textTheme
|
||||||
.bodyText2
|
.bodyMedium
|
||||||
?.color
|
?.color
|
||||||
?.withAlpha(150),
|
?.withAlpha(150),
|
||||||
),
|
),
|
||||||
@ -183,7 +183,7 @@ class RecordingDialogState extends State<RecordingDialog> {
|
|||||||
L10n.of(context)!.cancel.toUpperCase(),
|
L10n.of(context)!.cancel.toUpperCase(),
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color:
|
color:
|
||||||
Theme.of(context).textTheme.bodyText2?.color?.withAlpha(150),
|
Theme.of(context).textTheme.bodyMedium?.color?.withAlpha(150),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -80,7 +80,7 @@ class _EditContent extends StatelessWidget {
|
|||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Theme.of(context).textTheme.bodyText2!.color,
|
color: Theme.of(context).textTheme.bodyMedium!.color,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
|
@ -51,7 +51,7 @@ class SeenByRow extends StatelessWidget {
|
|||||||
width: 16,
|
width: 16,
|
||||||
height: 16,
|
height: 16,
|
||||||
child: Material(
|
child: Material(
|
||||||
color: Theme.of(context).backgroundColor,
|
color: Theme.of(context).colorScheme.background,
|
||||||
borderRadius: BorderRadius.circular(32),
|
borderRadius: BorderRadius.circular(32),
|
||||||
child: Center(
|
child: Center(
|
||||||
child: Text(
|
child: Text(
|
||||||
|
@ -49,6 +49,7 @@ class SendFileDialogState extends State<SendFileDialog> {
|
|||||||
scaffoldMessenger.showSnackBar(
|
scaffoldMessenger.showSnackBar(
|
||||||
SnackBar(content: Text(e.toLocalizedString())),
|
SnackBar(content: Text(e.toLocalizedString())),
|
||||||
);
|
);
|
||||||
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Navigator.of(context, rootNavigator: false).pop();
|
Navigator.of(context, rootNavigator: false).pop();
|
||||||
|
@ -42,7 +42,7 @@ class ChatDetailsView extends StatelessWidget {
|
|||||||
(room.summary.mJoinedMemberCount ?? 0);
|
(room.summary.mJoinedMemberCount ?? 0);
|
||||||
final canRequestMoreMembers =
|
final canRequestMoreMembers =
|
||||||
controller.members!.length < actualMembersCount;
|
controller.members!.length < actualMembersCount;
|
||||||
final iconColor = Theme.of(context).textTheme.bodyText1!.color;
|
final iconColor = Theme.of(context).textTheme.bodyLarge!.color;
|
||||||
return StreamBuilder(
|
return StreamBuilder(
|
||||||
stream: room.onUpdate.stream,
|
stream: room.onUpdate.stream,
|
||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
@ -127,7 +127,7 @@ class ChatDetailsView extends StatelessWidget {
|
|||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
color: Theme.of(context)
|
color: Theme.of(context)
|
||||||
.textTheme
|
.textTheme
|
||||||
.bodyText2!
|
.bodyMedium!
|
||||||
.color,
|
.color,
|
||||||
),
|
),
|
||||||
onLinkTap: (url) =>
|
onLinkTap: (url) =>
|
||||||
|
@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
|||||||
|
|
||||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
import 'package:matrix/matrix.dart';
|
import 'package:matrix/matrix.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
import 'package:vrouter/vrouter.dart';
|
import 'package:vrouter/vrouter.dart';
|
||||||
|
|
||||||
import 'package:fluffychat/config/app_config.dart';
|
import 'package:fluffychat/config/app_config.dart';
|
||||||
@ -30,7 +30,8 @@ class ChatEncryptionSettingsView extends StatelessWidget {
|
|||||||
title: Text(L10n.of(context)!.endToEndEncryption),
|
title: Text(L10n.of(context)!.endToEndEncryption),
|
||||||
actions: [
|
actions: [
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () => launch(AppConfig.encryptionTutorial),
|
onPressed: () =>
|
||||||
|
launchUrlString(AppConfig.encryptionTutorial),
|
||||||
child: Text(L10n.of(context)!.help),
|
child: Text(L10n.of(context)!.help),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -228,9 +228,9 @@ class ChatListViewBody extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
const dummyChatCount = 5;
|
const dummyChatCount = 5;
|
||||||
final titleColor =
|
final titleColor =
|
||||||
Theme.of(context).textTheme.bodyText1!.color!.withAlpha(100);
|
Theme.of(context).textTheme.bodyLarge!.color!.withAlpha(100);
|
||||||
final subtitleColor =
|
final subtitleColor =
|
||||||
Theme.of(context).textTheme.bodyText1!.color!.withAlpha(50);
|
Theme.of(context).textTheme.bodyLarge!.color!.withAlpha(50);
|
||||||
return ListView.builder(
|
return ListView.builder(
|
||||||
key: const Key('dummychats'),
|
key: const Key('dummychats'),
|
||||||
itemCount: dummyChatCount,
|
itemCount: dummyChatCount,
|
||||||
@ -241,7 +241,7 @@ class ChatListViewBody extends StatelessWidget {
|
|||||||
backgroundColor: titleColor,
|
backgroundColor: titleColor,
|
||||||
child: CircularProgressIndicator(
|
child: CircularProgressIndicator(
|
||||||
strokeWidth: 1,
|
strokeWidth: 1,
|
||||||
color: Theme.of(context).textTheme.bodyText1!.color,
|
color: Theme.of(context).textTheme.bodyLarge!.color,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
title: Row(
|
title: Row(
|
||||||
|
@ -189,7 +189,7 @@ class ChatListItem extends StatelessWidget {
|
|||||||
fontSize: 13,
|
fontSize: 13,
|
||||||
color: unread
|
color: unread
|
||||||
? Theme.of(context).colorScheme.secondary
|
? Theme.of(context).colorScheme.secondary
|
||||||
: Theme.of(context).textTheme.bodyText2!.color,
|
: Theme.of(context).textTheme.bodyMedium!.color,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -102,7 +102,7 @@ class ClientChooserButton extends StatelessWidget {
|
|||||||
Text(
|
Text(
|
||||||
bundle!,
|
bundle!,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Theme.of(context).textTheme.subtitle1!.color,
|
color: Theme.of(context).textTheme.titleMedium!.color,
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -158,7 +158,7 @@ class _SpaceViewState extends State<SpaceView> {
|
|||||||
MatrixLocals(L10n.of(context)!),
|
MatrixLocals(L10n.of(context)!),
|
||||||
);
|
);
|
||||||
return Material(
|
return Material(
|
||||||
color: Theme.of(context).backgroundColor,
|
color: Theme.of(context).colorScheme.background,
|
||||||
child: ListTile(
|
child: ListTile(
|
||||||
leading: Avatar(
|
leading: Avatar(
|
||||||
mxContent: rootSpace.avatar,
|
mxContent: rootSpace.avatar,
|
||||||
|
@ -94,7 +94,7 @@ class StoriesHeader extends StatelessWidget {
|
|||||||
leading: CircleAvatar(
|
leading: CircleAvatar(
|
||||||
radius: Avatar.defaultSize / 2,
|
radius: Avatar.defaultSize / 2,
|
||||||
backgroundColor: Theme.of(context).colorScheme.surface,
|
backgroundColor: Theme.of(context).colorScheme.surface,
|
||||||
foregroundColor: Theme.of(context).textTheme.bodyText1?.color,
|
foregroundColor: Theme.of(context).textTheme.bodyLarge?.color,
|
||||||
child: const Icon(Icons.camera_alt_outlined),
|
child: const Icon(Icons.camera_alt_outlined),
|
||||||
),
|
),
|
||||||
title: Text(L10n.of(context)!.addToStory),
|
title: Text(L10n.of(context)!.addToStory),
|
||||||
@ -226,7 +226,7 @@ class _StoryButton extends StatelessWidget {
|
|||||||
backgroundColor:
|
backgroundColor:
|
||||||
Theme.of(context).colorScheme.surface,
|
Theme.of(context).colorScheme.surface,
|
||||||
foregroundColor:
|
foregroundColor:
|
||||||
Theme.of(context).textTheme.bodyText1?.color,
|
Theme.of(context).textTheme.bodyLarge?.color,
|
||||||
child: Hero(
|
child: Hero(
|
||||||
tag: heroTag,
|
tag: heroTag,
|
||||||
child: Avatar(
|
child: Avatar(
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:matrix_homeserver_recommendations/matrix_homeserver_recommendations.dart';
|
import 'package:matrix_homeserver_recommendations/matrix_homeserver_recommendations.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
|
|
||||||
class HomeserverBottomSheet extends StatelessWidget {
|
class HomeserverBottomSheet extends StatelessWidget {
|
||||||
final HomeserverBenchmarkResult homeserver;
|
final HomeserverBenchmarkResult homeserver;
|
||||||
@ -38,25 +38,26 @@ class HomeserverBottomSheet extends StatelessWidget {
|
|||||||
title: Text(homeserverSoftware),
|
title: Text(homeserverSoftware),
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
onTap: () => launch(homeserver.homeserver.baseUrl.toString()),
|
onTap: () =>
|
||||||
|
launchUrlString(homeserver.homeserver.baseUrl.toString()),
|
||||||
leading: const Icon(Icons.link_outlined),
|
leading: const Icon(Icons.link_outlined),
|
||||||
title: Text(homeserver.homeserver.baseUrl.toString()),
|
title: Text(homeserver.homeserver.baseUrl.toString()),
|
||||||
),
|
),
|
||||||
if (registration != null)
|
if (registration != null)
|
||||||
ListTile(
|
ListTile(
|
||||||
onTap: () => launch(registration.toString()),
|
onTap: () => launchUrlString(registration.toString()),
|
||||||
leading: const Icon(Icons.person_add_outlined),
|
leading: const Icon(Icons.person_add_outlined),
|
||||||
title: Text(registration.toString()),
|
title: Text(registration.toString()),
|
||||||
),
|
),
|
||||||
if (rules != null)
|
if (rules != null)
|
||||||
ListTile(
|
ListTile(
|
||||||
onTap: () => launch(rules.toString()),
|
onTap: () => launchUrlString(rules.toString()),
|
||||||
leading: const Icon(Icons.visibility_outlined),
|
leading: const Icon(Icons.visibility_outlined),
|
||||||
title: Text(rules.toString()),
|
title: Text(rules.toString()),
|
||||||
),
|
),
|
||||||
if (privacy != null)
|
if (privacy != null)
|
||||||
ListTile(
|
ListTile(
|
||||||
onTap: () => launch(privacy.toString()),
|
onTap: () => launchUrlString(privacy.toString()),
|
||||||
leading: const Icon(Icons.shield_outlined),
|
leading: const Icon(Icons.shield_outlined),
|
||||||
title: Text(privacy.toString()),
|
title: Text(privacy.toString()),
|
||||||
),
|
),
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
|
|
||||||
import 'package:fluffychat/config/app_config.dart';
|
import 'package:fluffychat/config/app_config.dart';
|
||||||
import 'package:fluffychat/widgets/layouts/login_scaffold.dart';
|
import 'package:fluffychat/widgets/layouts/login_scaffold.dart';
|
||||||
@ -121,7 +121,7 @@ class HomeserverPickerView extends StatelessWidget {
|
|||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
children: [
|
children: [
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () => launch(AppConfig.privacyUrl),
|
onPressed: () => launchUrlString(AppConfig.privacyUrl),
|
||||||
child: Text(L10n.of(context)!.privacy),
|
child: Text(L10n.of(context)!.privacy),
|
||||||
),
|
),
|
||||||
TextButton(
|
TextButton(
|
||||||
|
@ -115,10 +115,7 @@ class LoginController extends State<Login> {
|
|||||||
// do nothing, newDomain is already set to a reasonable fallback
|
// do nothing, newDomain is already set to a reasonable fallback
|
||||||
}
|
}
|
||||||
if (newDomain != oldHomeserver) {
|
if (newDomain != oldHomeserver) {
|
||||||
Matrix.of(context)
|
await Matrix.of(context).getLoginClient().checkHomeserver(newDomain);
|
||||||
.getLoginClient()
|
|
||||||
.checkHomeserver(newDomain)
|
|
||||||
.catchError((e) {});
|
|
||||||
|
|
||||||
if (Matrix.of(context).getLoginClient().homeserver == null) {
|
if (Matrix.of(context).getLoginClient().homeserver == null) {
|
||||||
Matrix.of(context).getLoginClient().homeserver = oldHomeserver;
|
Matrix.of(context).getLoginClient().homeserver = oldHomeserver;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
import 'package:vrouter/vrouter.dart';
|
import 'package:vrouter/vrouter.dart';
|
||||||
|
|
||||||
import 'package:fluffychat/config/app_config.dart';
|
import 'package:fluffychat/config/app_config.dart';
|
||||||
@ -93,12 +93,12 @@ class SettingsView extends StatelessWidget {
|
|||||||
ListTile(
|
ListTile(
|
||||||
leading: const Icon(Icons.help_outline_outlined),
|
leading: const Icon(Icons.help_outline_outlined),
|
||||||
title: Text(L10n.of(context)!.help),
|
title: Text(L10n.of(context)!.help),
|
||||||
onTap: () => launch(AppConfig.supportUrl),
|
onTap: () => launchUrlString(AppConfig.supportUrl),
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
leading: const Icon(Icons.shield_sharp),
|
leading: const Icon(Icons.shield_sharp),
|
||||||
title: Text(L10n.of(context)!.privacy),
|
title: Text(L10n.of(context)!.privacy),
|
||||||
onTap: () => launch(AppConfig.privacyUrl),
|
onTap: () => launchUrlString(AppConfig.privacyUrl),
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
leading: const Icon(Icons.info_outline_rounded),
|
leading: const Icon(Icons.info_outline_rounded),
|
||||||
|
@ -17,7 +17,7 @@ class SettingsAccountView extends StatelessWidget {
|
|||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(title: Text(L10n.of(context)!.account)),
|
appBar: AppBar(title: Text(L10n.of(context)!.account)),
|
||||||
body: ListTileTheme(
|
body: ListTileTheme(
|
||||||
iconColor: Theme.of(context).textTheme.bodyText1!.color,
|
iconColor: Theme.of(context).textTheme.bodyLarge!.color,
|
||||||
child: MaxWidthBody(
|
child: MaxWidthBody(
|
||||||
withScrolling: true,
|
withScrolling: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
|
@ -22,7 +22,7 @@ class SettingsChatView extends StatelessWidget {
|
|||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(title: Text(L10n.of(context)!.chat)),
|
appBar: AppBar(title: Text(L10n.of(context)!.chat)),
|
||||||
body: ListTileTheme(
|
body: ListTileTheme(
|
||||||
iconColor: Theme.of(context).textTheme.bodyText1!.color,
|
iconColor: Theme.of(context).textTheme.bodyLarge!.color,
|
||||||
child: MaxWidthBody(
|
child: MaxWidthBody(
|
||||||
withScrolling: true,
|
withScrolling: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
|
@ -19,7 +19,7 @@ class SettingsSecurityView extends StatelessWidget {
|
|||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(title: Text(L10n.of(context)!.security)),
|
appBar: AppBar(title: Text(L10n.of(context)!.security)),
|
||||||
body: ListTileTheme(
|
body: ListTileTheme(
|
||||||
iconColor: Theme.of(context).textTheme.bodyText1!.color,
|
iconColor: Theme.of(context).textTheme.bodyLarge!.color,
|
||||||
child: MaxWidthBody(
|
child: MaxWidthBody(
|
||||||
withScrolling: true,
|
withScrolling: true,
|
||||||
child: Column(
|
child: Column(
|
||||||
|
@ -123,7 +123,7 @@ class SettingsStyleView extends StatelessWidget {
|
|||||||
title: Text(L10n.of(context)!.changeWallpaper),
|
title: Text(L10n.of(context)!.changeWallpaper),
|
||||||
trailing: Icon(
|
trailing: Icon(
|
||||||
Icons.photo_outlined,
|
Icons.photo_outlined,
|
||||||
color: Theme.of(context).textTheme.bodyText1?.color,
|
color: Theme.of(context).textTheme.bodyLarge?.color,
|
||||||
),
|
),
|
||||||
onTap: controller.setWallpaperAction,
|
onTap: controller.setWallpaperAction,
|
||||||
);
|
);
|
||||||
|
@ -30,8 +30,12 @@ extension LocalizedExceptionExtension on Object {
|
|||||||
.toString()
|
.toString()
|
||||||
.replaceAll('{', '"')
|
.replaceAll('{', '"')
|
||||||
.replaceAll('}', '"');
|
.replaceAll('}', '"');
|
||||||
return L10n.of(context)!
|
return L10n.of(context)!.badServerVersionsException(
|
||||||
.badServerVersionsException(serverVersions, supportedVersions);
|
serverVersions,
|
||||||
|
supportedVersions,
|
||||||
|
serverVersions,
|
||||||
|
supportedVersions,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
if (this is BadServerLoginTypesException) {
|
if (this is BadServerLoginTypesException) {
|
||||||
final serverVersions = (this as BadServerLoginTypesException)
|
final serverVersions = (this as BadServerLoginTypesException)
|
||||||
@ -44,8 +48,11 @@ extension LocalizedExceptionExtension on Object {
|
|||||||
.toString()
|
.toString()
|
||||||
.replaceAll('{', '"')
|
.replaceAll('{', '"')
|
||||||
.replaceAll('}', '"');
|
.replaceAll('}', '"');
|
||||||
return L10n.of(context)!
|
return L10n.of(context)!.badServerLoginTypesException(
|
||||||
.badServerLoginTypesException(serverVersions, supportedVersions);
|
serverVersions,
|
||||||
|
supportedVersions,
|
||||||
|
supportedVersions,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
if (this is MatrixConnectionException || this is SocketException) {
|
if (this is MatrixConnectionException || this is SocketException) {
|
||||||
return L10n.of(context)!.noConnectionToTheServer;
|
return L10n.of(context)!.noConnectionToTheServer;
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
import 'dart:io';
|
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:file_picker_cross/file_picker_cross.dart';
|
import 'package:file_picker_cross/file_picker_cross.dart';
|
||||||
|
import 'package:image_picker/image_picker.dart';
|
||||||
import 'package:matrix/matrix.dart';
|
import 'package:matrix/matrix.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
|
||||||
import 'package:share_plus/share_plus.dart';
|
import 'package:share_plus/share_plus.dart';
|
||||||
|
|
||||||
import 'package:fluffychat/utils/platform_infos.dart';
|
import 'package:fluffychat/utils/platform_infos.dart';
|
||||||
@ -22,17 +20,12 @@ extension MatrixFileExtension on MatrixFile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void share(BuildContext context) async {
|
void share(BuildContext context) async {
|
||||||
final fileName = name.split('/').last;
|
|
||||||
final tmpDirectory = await getTemporaryDirectory();
|
|
||||||
final path = '${tmpDirectory.path}$fileName';
|
|
||||||
await File(path).writeAsBytes(bytes);
|
|
||||||
|
|
||||||
// Workaround for iPad from
|
// Workaround for iPad from
|
||||||
// https://github.com/fluttercommunity/plus_plugins/tree/main/packages/share_plus/share_plus#ipad
|
// https://github.com/fluttercommunity/plus_plugins/tree/main/packages/share_plus/share_plus#ipad
|
||||||
final box = context.findRenderObject() as RenderBox?;
|
final box = context.findRenderObject() as RenderBox?;
|
||||||
|
|
||||||
await Share.shareFiles(
|
await Share.shareXFiles(
|
||||||
[path],
|
[XFile.fromData(bytes)],
|
||||||
sharePositionOrigin:
|
sharePositionOrigin:
|
||||||
box == null ? null : box.localToGlobal(Offset.zero) & box.size,
|
box == null ? null : box.localToGlobal(Offset.zero) & box.size,
|
||||||
);
|
);
|
||||||
|
@ -19,7 +19,7 @@ class MatrixLocals extends MatrixLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String answeredTheCall(String senderName) {
|
String answeredTheCall(String senderName) {
|
||||||
return l10n.answeredTheCall(senderName);
|
return l10n.answeredTheCall(senderName, senderName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -245,7 +245,7 @@ class MatrixLocals extends MatrixLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String unknownEvent(String typeKey) {
|
String unknownEvent(String typeKey) {
|
||||||
return l10n.unknownEvent(typeKey);
|
return l10n.unknownEvent(typeKey, typeKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -5,7 +5,7 @@ import 'package:flutter/material.dart';
|
|||||||
|
|
||||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
import 'package:package_info_plus/package_info_plus.dart';
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
import 'package:vrouter/vrouter.dart';
|
import 'package:vrouter/vrouter.dart';
|
||||||
|
|
||||||
import '../config/app_config.dart';
|
import '../config/app_config.dart';
|
||||||
@ -50,11 +50,11 @@ abstract class PlatformInfos {
|
|||||||
children: [
|
children: [
|
||||||
Text('Version: $version'),
|
Text('Version: $version'),
|
||||||
OutlinedButton(
|
OutlinedButton(
|
||||||
onPressed: () => launch(AppConfig.sourceCodeUrl),
|
onPressed: () => launchUrlString(AppConfig.sourceCodeUrl),
|
||||||
child: Text(L10n.of(context)!.sourceCode),
|
child: Text(L10n.of(context)!.sourceCode),
|
||||||
),
|
),
|
||||||
OutlinedButton(
|
OutlinedButton(
|
||||||
onPressed: () => launch(AppConfig.emojiFontUrl),
|
onPressed: () => launchUrlString(AppConfig.emojiFontUrl),
|
||||||
child: const Text(AppConfig.emojiFontName),
|
child: const Text(AppConfig.emojiFontName),
|
||||||
),
|
),
|
||||||
OutlinedButton(
|
OutlinedButton(
|
||||||
|
@ -3,7 +3,7 @@ import 'dart:async';
|
|||||||
import 'package:adaptive_dialog/adaptive_dialog.dart';
|
import 'package:adaptive_dialog/adaptive_dialog.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
import 'package:matrix/matrix.dart';
|
import 'package:matrix/matrix.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
|
|
||||||
import 'package:fluffychat/widgets/matrix.dart';
|
import 'package:fluffychat/widgets/matrix.dart';
|
||||||
|
|
||||||
@ -83,11 +83,7 @@ extension UiaRequestManager on MatrixState {
|
|||||||
default:
|
default:
|
||||||
final url = Uri.parse(
|
final url = Uri.parse(
|
||||||
'${client.homeserver}/_matrix/client/r0/auth/$stage/fallback/web?session=${uiaRequest.session}');
|
'${client.homeserver}/_matrix/client/r0/auth/$stage/fallback/web?session=${uiaRequest.session}');
|
||||||
launch(
|
launchUrlString(url.toString());
|
||||||
url.toString(),
|
|
||||||
forceSafariVC: true,
|
|
||||||
forceWebView: false,
|
|
||||||
);
|
|
||||||
if (OkCancelResult.ok ==
|
if (OkCancelResult.ok ==
|
||||||
await showOkCancelAlertDialog(
|
await showOkCancelAlertDialog(
|
||||||
useRootNavigator: false,
|
useRootNavigator: false,
|
||||||
|
@ -6,7 +6,7 @@ import 'package:flutter_gen/gen_l10n/l10n.dart';
|
|||||||
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
||||||
import 'package:matrix/matrix.dart';
|
import 'package:matrix/matrix.dart';
|
||||||
import 'package:punycode/punycode.dart';
|
import 'package:punycode/punycode.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
import 'package:vrouter/vrouter.dart';
|
import 'package:vrouter/vrouter.dart';
|
||||||
|
|
||||||
import 'package:fluffychat/config/app_config.dart';
|
import 'package:fluffychat/config/app_config.dart';
|
||||||
@ -56,17 +56,17 @@ class UrlLauncher {
|
|||||||
// to an apple maps thingy
|
// to an apple maps thingy
|
||||||
// https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html
|
// https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html
|
||||||
final ll = '${latlong.first},${latlong.last}';
|
final ll = '${latlong.first},${latlong.last}';
|
||||||
launch('https://maps.apple.com/?q=$ll&sll=$ll');
|
launchUrlString('https://maps.apple.com/?q=$ll&sll=$ll');
|
||||||
} else {
|
} else {
|
||||||
// transmute geo URIs on desktop to openstreetmap links, as those usually can't handle
|
// transmute geo URIs on desktop to openstreetmap links, as those usually can't handle
|
||||||
// geo URIs
|
// geo URIs
|
||||||
launch(
|
launchUrlString(
|
||||||
'https://www.openstreetmap.org/?mlat=${latlong.first}&mlon=${latlong.last}#map=16/${latlong.first}/${latlong.last}');
|
'https://www.openstreetmap.org/?mlat=${latlong.first}&mlon=${latlong.last}#map=16/${latlong.first}/${latlong.last}');
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
launch(url!);
|
launchUrlString(url!);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (uri.host.isEmpty) {
|
if (uri.host.isEmpty) {
|
||||||
@ -84,7 +84,7 @@ class UrlLauncher {
|
|||||||
? 'xn--$hostPartPunycode'
|
? 'xn--$hostPartPunycode'
|
||||||
: hostPart;
|
: hostPart;
|
||||||
}).join('.');
|
}).join('.');
|
||||||
launch(uri.replace(host: newHost).toString());
|
launchUrlString(uri.replace(host: newHost).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
void openMatrixToUrl() async {
|
void openMatrixToUrl() async {
|
||||||
|
@ -91,7 +91,7 @@ class VoipPlugin with WidgetsBindingObserver implements WebRTCDelegate {
|
|||||||
overlayEntry = null;
|
overlayEntry = null;
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
Overlay.of(context)!.insert(overlayEntry!);
|
Overlay.of(context).insert(overlayEntry!);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,8 +70,8 @@ class ContentBanner extends StatelessWidget {
|
|||||||
mini: true,
|
mini: true,
|
||||||
heroTag: null,
|
heroTag: null,
|
||||||
onPressed: onEdit,
|
onPressed: onEdit,
|
||||||
backgroundColor: Theme.of(context).backgroundColor,
|
backgroundColor: Theme.of(context).colorScheme.background,
|
||||||
foregroundColor: Theme.of(context).textTheme.bodyText1?.color,
|
foregroundColor: Theme.of(context).textTheme.bodyLarge?.color,
|
||||||
child: const Icon(Icons.camera_alt_outlined),
|
child: const Icon(Icons.camera_alt_outlined),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -40,7 +40,7 @@ class LockScreenState extends State<LockScreen> {
|
|||||||
),
|
),
|
||||||
body: Container(
|
body: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: Theme.of(context).backgroundColor,
|
color: Theme.of(context).colorScheme.background,
|
||||||
gradient: LinearGradient(
|
gradient: LinearGradient(
|
||||||
begin: Alignment.topRight,
|
begin: Alignment.topRight,
|
||||||
end: Alignment.bottomLeft,
|
end: Alignment.bottomLeft,
|
||||||
@ -54,7 +54,7 @@ class LockScreenState extends State<LockScreen> {
|
|||||||
Theme.of(context).secondaryHeaderColor.withAlpha(16),
|
Theme.of(context).secondaryHeaderColor.withAlpha(16),
|
||||||
Theme.of(context).primaryColor.withAlpha(16),
|
Theme.of(context).primaryColor.withAlpha(16),
|
||||||
Theme.of(context).colorScheme.secondary.withAlpha(16),
|
Theme.of(context).colorScheme.secondary.withAlpha(16),
|
||||||
Theme.of(context).backgroundColor.withAlpha(16),
|
Theme.of(context).colorScheme.background.withAlpha(16),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -34,7 +34,7 @@ class M2PopupMenuButton<T> extends StatelessWidget {
|
|||||||
borderRadius: BorderRadius.circular(AppConfig.borderRadius),
|
borderRadius: BorderRadius.circular(AppConfig.borderRadius),
|
||||||
),
|
),
|
||||||
elevation: theme.appBarTheme.scrolledUnderElevation,
|
elevation: theme.appBarTheme.scrolledUnderElevation,
|
||||||
textStyle: theme.textTheme.bodyText1,
|
textStyle: theme.textTheme.bodyLarge,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: PopupMenuButton<T>(
|
child: PopupMenuButton<T>(
|
||||||
|
@ -19,7 +19,7 @@ import 'package:matrix/matrix.dart';
|
|||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:universal_html/html.dart' as html;
|
import 'package:universal_html/html.dart' as html;
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
import 'package:vrouter/vrouter.dart';
|
import 'package:vrouter/vrouter.dart';
|
||||||
|
|
||||||
import 'package:fluffychat/utils/client_manager.dart';
|
import 'package:fluffychat/utils/client_manager.dart';
|
||||||
@ -410,7 +410,7 @@ class MatrixState extends State<Matrix> with WidgetsBindingObserver {
|
|||||||
cancelLabel: L10n.of(context)!.doNotShowAgain,
|
cancelLabel: L10n.of(context)!.doNotShowAgain,
|
||||||
);
|
);
|
||||||
if (result == OkCancelResult.ok && link != null) {
|
if (result == OkCancelResult.ok && link != null) {
|
||||||
launch(link.toString());
|
launchUrlString(link.toString());
|
||||||
}
|
}
|
||||||
if (result == OkCancelResult.cancel) {
|
if (result == OkCancelResult.cancel) {
|
||||||
await store.setItemBool(SettingKeys.showNoGoogle, true);
|
await store.setItemBool(SettingKeys.showNoGoogle, true);
|
||||||
|
@ -144,7 +144,7 @@ class PublicRoomBottomSheet extends StatelessWidget {
|
|||||||
linkStyle: const TextStyle(color: Colors.blueAccent),
|
linkStyle: const TextStyle(color: Colors.blueAccent),
|
||||||
textStyle: TextStyle(
|
textStyle: TextStyle(
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
color: Theme.of(context).textTheme.bodyText2!.color,
|
color: Theme.of(context).textTheme.bodyMedium!.color,
|
||||||
),
|
),
|
||||||
onLinkTap: (url) =>
|
onLinkTap: (url) =>
|
||||||
UrlLauncher(context, url).launchUrl(),
|
UrlLauncher(context, url).launchUrl(),
|
||||||
|
@ -96,7 +96,6 @@ class ThemeController extends State<ThemeBuilder> {
|
|||||||
// https://github.com/bdlukaa/system_theme/issues/10
|
// https://github.com/bdlukaa/system_theme/issues/10
|
||||||
final accentColor = SystemTheme.accentColor;
|
final accentColor = SystemTheme.accentColor;
|
||||||
final color = accentColor.accent;
|
final color = accentColor.accent;
|
||||||
if (color == kDefaultSystemAccentColor) return AppConfig.chatColor;
|
|
||||||
return color;
|
return color;
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
return AppConfig.chatColor;
|
return AppConfig.chatColor;
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:badges/badges.dart';
|
import 'package:badges/badges.dart' as b;
|
||||||
import 'package:matrix/matrix.dart';
|
import 'package:matrix/matrix.dart';
|
||||||
|
|
||||||
import 'matrix.dart';
|
import 'matrix.dart';
|
||||||
|
|
||||||
class UnreadRoomsBadge extends StatelessWidget {
|
class UnreadRoomsBadge extends StatelessWidget {
|
||||||
final bool Function(Room) filter;
|
final bool Function(Room) filter;
|
||||||
final BadgePosition? badgePosition;
|
final b.BadgePosition? badgePosition;
|
||||||
final Widget? child;
|
final Widget? child;
|
||||||
|
|
||||||
const UnreadRoomsBadge({
|
const UnreadRoomsBadge({
|
||||||
@ -32,7 +32,7 @@ class UnreadRoomsBadge extends StatelessWidget {
|
|||||||
.where(filter)
|
.where(filter)
|
||||||
.where((r) => (r.isUnread || r.membership == Membership.invite))
|
.where((r) => (r.isUnread || r.membership == Membership.invite))
|
||||||
.length;
|
.length;
|
||||||
return Badge(
|
return b.Badge(
|
||||||
alignment: Alignment.bottomRight,
|
alignment: Alignment.bottomRight,
|
||||||
badgeContent: Text(
|
badgeContent: Text(
|
||||||
unreadCount.toString(),
|
unreadCount.toString(),
|
||||||
@ -42,14 +42,13 @@ class UnreadRoomsBadge extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
showBadge: unreadCount != 0,
|
showBadge: unreadCount != 0,
|
||||||
animationType: BadgeAnimationType.scale,
|
animationType: b.BadgeAnimationType.scale,
|
||||||
badgeColor: Theme.of(context).colorScheme.primary,
|
badgeColor: Theme.of(context).colorScheme.primary,
|
||||||
position: badgePosition,
|
position: badgePosition,
|
||||||
elevation: 4,
|
elevation: 4,
|
||||||
borderSide: BorderSide(
|
borderSide: BorderSide(
|
||||||
color: Theme.of(context).colorScheme.background,
|
color: Theme.of(context).colorScheme.background,
|
||||||
width: 2,
|
width: 2,
|
||||||
strokeAlign: StrokeAlign.outside,
|
|
||||||
),
|
),
|
||||||
child: child,
|
child: child,
|
||||||
);
|
);
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h>
|
#include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h>
|
||||||
#include <handy_window/handy_window_plugin.h>
|
#include <handy_window/handy_window_plugin.h>
|
||||||
#include <record_linux/record_linux_plugin.h>
|
#include <record_linux/record_linux_plugin.h>
|
||||||
|
#include <system_theme/system_theme_plugin.h>
|
||||||
#include <url_launcher_linux/url_launcher_plugin.h>
|
#include <url_launcher_linux/url_launcher_plugin.h>
|
||||||
|
|
||||||
void fl_register_plugins(FlPluginRegistry* registry) {
|
void fl_register_plugins(FlPluginRegistry* registry) {
|
||||||
@ -41,6 +42,9 @@ void fl_register_plugins(FlPluginRegistry* registry) {
|
|||||||
g_autoptr(FlPluginRegistrar) record_linux_registrar =
|
g_autoptr(FlPluginRegistrar) record_linux_registrar =
|
||||||
fl_plugin_registry_get_registrar_for_plugin(registry, "RecordLinuxPlugin");
|
fl_plugin_registry_get_registrar_for_plugin(registry, "RecordLinuxPlugin");
|
||||||
record_linux_plugin_register_with_registrar(record_linux_registrar);
|
record_linux_plugin_register_with_registrar(record_linux_registrar);
|
||||||
|
g_autoptr(FlPluginRegistrar) system_theme_registrar =
|
||||||
|
fl_plugin_registry_get_registrar_for_plugin(registry, "SystemThemePlugin");
|
||||||
|
system_theme_plugin_register_with_registrar(system_theme_registrar);
|
||||||
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
|
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
|
||||||
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
|
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
|
||||||
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
|
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
|
||||||
|
@ -11,6 +11,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
|||||||
flutter_secure_storage_linux
|
flutter_secure_storage_linux
|
||||||
handy_window
|
handy_window
|
||||||
record_linux
|
record_linux
|
||||||
|
system_theme
|
||||||
url_launcher_linux
|
url_launcher_linux
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ import desktop_lifecycle
|
|||||||
import device_info_plus
|
import device_info_plus
|
||||||
import dynamic_color
|
import dynamic_color
|
||||||
import emoji_picker_flutter
|
import emoji_picker_flutter
|
||||||
|
import file_selector_macos
|
||||||
import flutter_app_badger
|
import flutter_app_badger
|
||||||
import flutter_local_notifications
|
import flutter_local_notifications
|
||||||
import flutter_secure_storage_macos
|
import flutter_secure_storage_macos
|
||||||
@ -21,11 +22,12 @@ import geolocator_apple
|
|||||||
import just_audio
|
import just_audio
|
||||||
import macos_ui
|
import macos_ui
|
||||||
import package_info_plus_macos
|
import package_info_plus_macos
|
||||||
import path_provider_macos
|
import path_provider_foundation
|
||||||
import record_macos
|
import record_macos
|
||||||
import share_plus_macos
|
import share_plus_macos
|
||||||
import shared_preferences_macos
|
import shared_preferences_foundation
|
||||||
import sqflite
|
import sqflite
|
||||||
|
import system_theme
|
||||||
import url_launcher_macos
|
import url_launcher_macos
|
||||||
import video_compress
|
import video_compress
|
||||||
import wakelock_macos
|
import wakelock_macos
|
||||||
@ -38,9 +40,10 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
|||||||
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
|
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
|
||||||
DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin"))
|
DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin"))
|
||||||
EmojiPickerFlutterPlugin.register(with: registry.registrar(forPlugin: "EmojiPickerFlutterPlugin"))
|
EmojiPickerFlutterPlugin.register(with: registry.registrar(forPlugin: "EmojiPickerFlutterPlugin"))
|
||||||
|
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
|
||||||
FlutterAppBadgerPlugin.register(with: registry.registrar(forPlugin: "FlutterAppBadgerPlugin"))
|
FlutterAppBadgerPlugin.register(with: registry.registrar(forPlugin: "FlutterAppBadgerPlugin"))
|
||||||
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
|
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
|
||||||
FlutterSecureStorageMacosPlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStorageMacosPlugin"))
|
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
|
||||||
FlutterWebAuthPlugin.register(with: registry.registrar(forPlugin: "FlutterWebAuthPlugin"))
|
FlutterWebAuthPlugin.register(with: registry.registrar(forPlugin: "FlutterWebAuthPlugin"))
|
||||||
FlutterWebRTCPlugin.register(with: registry.registrar(forPlugin: "FlutterWebRTCPlugin"))
|
FlutterWebRTCPlugin.register(with: registry.registrar(forPlugin: "FlutterWebRTCPlugin"))
|
||||||
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
|
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
|
||||||
@ -52,6 +55,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
|||||||
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
|
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
|
||||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||||
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
||||||
|
SystemThemePlugin.register(with: registry.registrar(forPlugin: "SystemThemePlugin"))
|
||||||
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
||||||
VideoCompressPlugin.register(with: registry.registrar(forPlugin: "VideoCompressPlugin"))
|
VideoCompressPlugin.register(with: registry.registrar(forPlugin: "VideoCompressPlugin"))
|
||||||
WakelockMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockMacosPlugin"))
|
WakelockMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockMacosPlugin"))
|
||||||
|
1186
pubspec.lock
1186
pubspec.lock
File diff suppressed because it is too large
Load Diff
@ -41,7 +41,8 @@ dependencies:
|
|||||||
flutter_openssl_crypto: ^0.1.0
|
flutter_openssl_crypto: ^0.1.0
|
||||||
flutter_ringtone_player: ^3.1.1
|
flutter_ringtone_player: ^3.1.1
|
||||||
flutter_secure_storage: ^7.0.1
|
flutter_secure_storage: ^7.0.1
|
||||||
flutter_typeahead: ^4.0.0
|
flutter_typeahead: # until https://github.com/AbdulRahmanAlHamali/flutter_typeahead/pull/447 is merged released
|
||||||
|
git: https://github.com/krillefear/flutter_typeahead.git
|
||||||
flutter_web_auth: ^0.5.0
|
flutter_web_auth: ^0.5.0
|
||||||
flutter_webrtc: # Until https://github.com/flutter-webrtc/flutter-webrtc/issues/1212 is fixed
|
flutter_webrtc: # Until https://github.com/flutter-webrtc/flutter-webrtc/issues/1212 is fixed
|
||||||
git: https://github.com/radzio-it/flutter-webrtc.git
|
git: https://github.com/radzio-it/flutter-webrtc.git
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include <desktop_lifecycle/desktop_lifecycle_plugin.h>
|
#include <desktop_lifecycle/desktop_lifecycle_plugin.h>
|
||||||
#include <dynamic_color/dynamic_color_plugin_c_api.h>
|
#include <dynamic_color/dynamic_color_plugin_c_api.h>
|
||||||
#include <emoji_picker_flutter/emoji_picker_flutter_plugin_c_api.h>
|
#include <emoji_picker_flutter/emoji_picker_flutter_plugin_c_api.h>
|
||||||
|
#include <file_selector_windows/file_selector_windows.h>
|
||||||
#include <flutter_webrtc/flutter_web_r_t_c_plugin.h>
|
#include <flutter_webrtc/flutter_web_r_t_c_plugin.h>
|
||||||
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
||||||
#include <record_windows/record_windows_plugin_c_api.h>
|
#include <record_windows/record_windows_plugin_c_api.h>
|
||||||
@ -28,6 +29,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
|
|||||||
registry->GetRegistrarForPlugin("DynamicColorPluginCApi"));
|
registry->GetRegistrarForPlugin("DynamicColorPluginCApi"));
|
||||||
EmojiPickerFlutterPluginCApiRegisterWithRegistrar(
|
EmojiPickerFlutterPluginCApiRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("EmojiPickerFlutterPluginCApi"));
|
registry->GetRegistrarForPlugin("EmojiPickerFlutterPluginCApi"));
|
||||||
|
FileSelectorWindowsRegisterWithRegistrar(
|
||||||
|
registry->GetRegistrarForPlugin("FileSelectorWindows"));
|
||||||
FlutterWebRTCPluginRegisterWithRegistrar(
|
FlutterWebRTCPluginRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("FlutterWebRTCPlugin"));
|
registry->GetRegistrarForPlugin("FlutterWebRTCPlugin"));
|
||||||
PermissionHandlerWindowsPluginRegisterWithRegistrar(
|
PermissionHandlerWindowsPluginRegisterWithRegistrar(
|
||||||
|
@ -8,6 +8,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
|||||||
desktop_lifecycle
|
desktop_lifecycle
|
||||||
dynamic_color
|
dynamic_color
|
||||||
emoji_picker_flutter
|
emoji_picker_flutter
|
||||||
|
file_selector_windows
|
||||||
flutter_webrtc
|
flutter_webrtc
|
||||||
permission_handler_windows
|
permission_handler_windows
|
||||||
record_windows
|
record_windows
|
||||||
|
Loading…
Reference in New Issue
Block a user