forked from cwtch.im/cwtch-ui
refactor themes from methods to get fields; add theme selector; add neon1
This commit is contained in:
parent
194ade9aa6
commit
53e79f5b9d
|
@ -25,7 +25,7 @@ import 'dart:io' show Platform, exit;
|
||||||
import 'themes/opaque.dart';
|
import 'themes/opaque.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
var globalSettings = Settings(Locale("en", ''), OpaqueDark());
|
var globalSettings = Settings(Locale("en", ''), CwtchDark());
|
||||||
var globalErrorHandler = ErrorHandler();
|
var globalErrorHandler = ErrorHandler();
|
||||||
var globalTorStatus = TorStatus();
|
var globalTorStatus = TorStatus();
|
||||||
var globalAppState = AppState();
|
var globalAppState = AppState();
|
||||||
|
|
|
@ -37,15 +37,9 @@ class Settings extends ChangeNotifier {
|
||||||
bool blockUnknownConnections = false;
|
bool blockUnknownConnections = false;
|
||||||
bool streamerMode = false;
|
bool streamerMode = false;
|
||||||
|
|
||||||
/// Set the dark theme.
|
|
||||||
void setDark() {
|
|
||||||
theme = OpaqueDark();
|
|
||||||
notifyListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Set the Light theme.
|
void setTheme(String themeId, String mode) {
|
||||||
void setLight() {
|
theme = getTheme(themeId, mode);
|
||||||
theme = OpaqueLight();
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,11 +64,12 @@ class Settings extends ChangeNotifier {
|
||||||
/// be sent to the function and new settings will be instantiated based on the contents.
|
/// be sent to the function and new settings will be instantiated based on the contents.
|
||||||
handleUpdate(dynamic settings) {
|
handleUpdate(dynamic settings) {
|
||||||
// Set Theme and notify listeners
|
// Set Theme and notify listeners
|
||||||
if (settings["Theme"] == "light") {
|
this.setTheme(settings["Theme"], settings["ThemeMode"] ?? mode_dark);
|
||||||
|
/*if (settings["Theme"] == "light") {
|
||||||
this.setLight();
|
this.setLight();
|
||||||
} else {
|
} else {
|
||||||
this.setDark();
|
this.setDark();
|
||||||
}
|
}*/
|
||||||
|
|
||||||
// Set Locale and notify listeners
|
// Set Locale and notify listeners
|
||||||
switchLocale(Locale(settings["Locale"]));
|
switchLocale(Locale(settings["Locale"]));
|
||||||
|
@ -230,11 +225,11 @@ class Settings extends ChangeNotifier {
|
||||||
/// Convert this Settings object to a JSON representation for serialization on the
|
/// Convert this Settings object to a JSON representation for serialization on the
|
||||||
/// event bus.
|
/// event bus.
|
||||||
dynamic asJson() {
|
dynamic asJson() {
|
||||||
var themeString = theme.identifier();
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"Locale": this.locale.languageCode,
|
"Locale": this.locale.languageCode,
|
||||||
"Theme": themeString,
|
"Theme": theme.theme,
|
||||||
|
"ThemeMode": theme.mode,
|
||||||
"PreviousPid": -1,
|
"PreviousPid": -1,
|
||||||
"BlockUnknownConnections": blockUnknownConnections,
|
"BlockUnknownConnections": blockUnknownConnections,
|
||||||
"StreamerMode": streamerMode,
|
"StreamerMode": streamerMode,
|
||||||
|
|
|
@ -5,6 +5,9 @@ import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'opaque.dart';
|
import 'opaque.dart';
|
||||||
|
|
||||||
|
final cwtch_name = "Cwtch"; // todo translate
|
||||||
|
final cwtch_theme = "cwtch";
|
||||||
|
|
||||||
final Color darkGreyPurple = Color(0xFF281831);
|
final Color darkGreyPurple = Color(0xFF281831);
|
||||||
final Color deepPurple = Color(0xFF422850);
|
final Color deepPurple = Color(0xFF422850);
|
||||||
final Color mauvePurple = Color(0xFF8E64A5);
|
final Color mauvePurple = Color(0xFF8E64A5);
|
||||||
|
@ -25,7 +28,15 @@ final Color softGrey = Color(0xFFB3B6B3); // not in new theme: blocked
|
||||||
//static final Color softGreen = Color(0xFFA0FFB0);
|
//static final Color softGreen = Color(0xFFA0FFB0);
|
||||||
//static final Color softRed = Color(0xFFFFA0B0);
|
//static final Color softRed = Color(0xFFFFA0B0);
|
||||||
|
|
||||||
class OpaqueDark extends OpaqueThemeType {
|
OpaqueThemeType GetCwtchTheme(String mode) {
|
||||||
|
if (mode == mode_dark) {
|
||||||
|
return CwtchDark();
|
||||||
|
} else {
|
||||||
|
return CwtchLight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class CwtchDark extends OpaqueThemeType {
|
||||||
static final Color background = darkGreyPurple;
|
static final Color background = darkGreyPurple;
|
||||||
static final Color header = darkGreyPurple;
|
static final Color header = darkGreyPurple;
|
||||||
static final Color userBubble = mauvePurple;
|
static final Color userBubble = mauvePurple;
|
||||||
|
@ -34,136 +45,44 @@ class OpaqueDark extends OpaqueThemeType {
|
||||||
static final Color settings = whiteishPurple;
|
static final Color settings = whiteishPurple;
|
||||||
static final Color accent = hotPink;
|
static final Color accent = hotPink;
|
||||||
|
|
||||||
String identifier() {
|
get name => cwtch_name;
|
||||||
return mode_dark;
|
get theme => cwtch_theme;
|
||||||
}
|
get mode => mode_dark;
|
||||||
|
|
||||||
Color backgroundMainColor() {
|
get backgroundMainColor => background; // darkGreyPurple;
|
||||||
return background; // darkGreyPurple;
|
get backgroundPaneColor => header; //darkGreyPurple;
|
||||||
}
|
get backgroundHilightElementColor => deepPurple;
|
||||||
|
get mainTextColor => font; //whiteishPurple;
|
||||||
Color backgroundPaneColor() {
|
get sendHintTextColor => mauvePurple;
|
||||||
return header; //darkGreyPurple;
|
get hilightElementColor => purple;
|
||||||
}
|
get defaultButtonColor => accent; //hotPink;
|
||||||
|
get defaultButtonActiveColor => pink;
|
||||||
Color backgroundHilightElementColor() {
|
get defaultButtonTextColor => whiteishPurple;
|
||||||
return deepPurple;
|
get defaultButtonDisabledColor => lightGrey;
|
||||||
}
|
get defaultButtonDisabledTextColor => darkGreyPurple;
|
||||||
|
get textfieldBackgroundColor => deepPurple;
|
||||||
Color mainTextColor() {
|
get textfieldBorderColor => deepPurple;
|
||||||
return font; //whiteishPurple;
|
get textfieldHintColor => mainTextColor; //TODO pick
|
||||||
}
|
get textfieldErrorColor => hotPink;
|
||||||
|
get scrollbarDefaultColor => purple;
|
||||||
Color sendHintTextColor() {
|
get portraitBackgroundColor => deepPurple;
|
||||||
return mauvePurple;
|
get portraitOnlineBorderColor => whiteishPurple;
|
||||||
}
|
get portraitOfflineBorderColor => purple;
|
||||||
|
get portraitBlockedBorderColor => lightGrey;
|
||||||
Color hilightElementColor() {
|
get portraitBlockedTextColor => lightGrey;
|
||||||
return purple;
|
get portraitContactBadgeColor => hotPink;
|
||||||
}
|
get portraitContactBadgeTextColor => whiteishPurple;
|
||||||
|
get portraitProfileBadgeColor => mauvePurple;
|
||||||
Color defaultButtonColor() {
|
get portraitProfileBadgeTextColor => darkGreyPurple;
|
||||||
return accent; //hotPink;
|
get dropShadowColor => mauvePurple;
|
||||||
}
|
get toolbarIconColor => settings; //whiteishPurple;
|
||||||
|
get messageFromMeBackgroundColor => userBubble; // mauvePurple;
|
||||||
Color defaultButtonActiveColor() {
|
get messageFromMeTextColor => font; //whiteishPurple;
|
||||||
return pink;
|
get messageFromOtherBackgroundColor => peerBubble; //deepPurple;
|
||||||
}
|
get messageFromOtherTextColor => font; //whiteishPurple;
|
||||||
|
|
||||||
Color defaultButtonTextColor() {
|
|
||||||
return whiteishPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color defaultButtonDisabledColor() {
|
|
||||||
return lightGrey;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color defaultButtonDisabledTextColor() {
|
|
||||||
return darkGreyPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color textfieldBackgroundColor() {
|
|
||||||
return deepPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color textfieldBorderColor() {
|
|
||||||
return deepPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color textfieldHintColor() {
|
|
||||||
return mainTextColor(); //TODO pick
|
|
||||||
}
|
|
||||||
|
|
||||||
Color textfieldErrorColor() {
|
|
||||||
return hotPink;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color scrollbarDefaultColor() {
|
|
||||||
return purple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitBackgroundColor() {
|
|
||||||
return deepPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitOnlineBorderColor() {
|
|
||||||
return whiteishPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitOfflineBorderColor() {
|
|
||||||
return purple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitBlockedBorderColor() {
|
|
||||||
return lightGrey;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitBlockedTextColor() {
|
|
||||||
return lightGrey;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitContactBadgeColor() {
|
|
||||||
return hotPink;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitContactBadgeTextColor() {
|
|
||||||
return whiteishPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitProfileBadgeColor() {
|
|
||||||
return mauvePurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitProfileBadgeTextColor() {
|
|
||||||
return darkGreyPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color dropShadowColor() {
|
|
||||||
return mauvePurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color toolbarIconColor() {
|
|
||||||
return settings; //whiteishPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color messageFromMeBackgroundColor() {
|
|
||||||
return userBubble; // mauvePurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color messageFromMeTextColor() {
|
|
||||||
return font; //whiteishPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color messageFromOtherBackgroundColor() {
|
|
||||||
return peerBubble; //deepPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color messageFromOtherTextColor() {
|
|
||||||
return font; //whiteishPurple;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class OpaqueLight extends OpaqueThemeType {
|
class CwtchLight extends OpaqueThemeType {
|
||||||
static final Color background = whitePurple;
|
static final Color background = whitePurple;
|
||||||
static final Color header = softPurple;
|
static final Color header = softPurple;
|
||||||
static final Color userBubble = purple;
|
static final Color userBubble = purple;
|
||||||
|
@ -172,139 +91,38 @@ class OpaqueLight extends OpaqueThemeType {
|
||||||
static final Color settings = darkPurple;
|
static final Color settings = darkPurple;
|
||||||
static final Color accent = hotPink;
|
static final Color accent = hotPink;
|
||||||
|
|
||||||
|
get name => cwtch_name;
|
||||||
|
get theme => cwtch_theme;
|
||||||
|
get mode => mode_light;
|
||||||
|
|
||||||
String identifier() {
|
get backgroundMainColor => background; //whitePurple;
|
||||||
return mode_light;
|
get backgroundPaneColor => header; //softPurple;
|
||||||
}
|
get backgroundHilightElementColor => softPurple;
|
||||||
|
get mainTextColor => settings;
|
||||||
// Main screen background color (message pane, item rows)
|
get sendHintTextColor => purple;
|
||||||
Color backgroundMainColor() {
|
get hilightElementColor => purple; //darkPurple; // todo shouldn't be this, too dark, makes font unreadable
|
||||||
return background; //whitePurple;
|
get defaultButtonColor => accent; // hotPink;
|
||||||
}
|
get defaultButtonActiveColor => pink; // todo: lighten in light, darken in dark
|
||||||
|
get defaultButtonTextColor => whitePurple; // ?
|
||||||
// Top pane ane pane colors (settings)
|
get defaultButtonDisabledColor => softGrey;
|
||||||
Color backgroundPaneColor() {
|
get textfieldBackgroundColor => purple;
|
||||||
return header; //softPurple;
|
get textfieldBorderColor => purple;
|
||||||
}
|
get textfieldHintColor => font; //TODO pick
|
||||||
|
get textfieldErrorColor => hotPink;
|
||||||
// Selected row color
|
get scrollbarDefaultColor => accent;
|
||||||
Color backgroundHilightElementColor() {
|
get portraitBackgroundColor => softPurple;
|
||||||
// Todo: lighten? cant
|
get portraitOnlineBorderColor => greyPurple;
|
||||||
// hm... in light its the top pane color. but in dark its unique
|
get portraitOfflineBorderColor => greyPurple;
|
||||||
return softPurple;
|
get portraitBlockedBorderColor => softGrey;
|
||||||
}
|
get portraitBlockedTextColor => softGrey;
|
||||||
|
get portraitContactBadgeColor => accent;
|
||||||
// Main text color
|
get portraitContactBadgeTextColor => whitePurple;
|
||||||
Color mainTextColor() {
|
get portraitProfileBadgeColor => brightPurple;
|
||||||
return settings;
|
get portraitProfileBadgeTextColor => whitePurple;
|
||||||
}
|
get dropShadowColor => purple;
|
||||||
|
get toolbarIconColor => settings; //darkPurple;
|
||||||
// Faded text color for suggestions in textfields
|
get messageFromMeBackgroundColor => userBubble; //brightPurple;
|
||||||
Color sendHintTextColor() {
|
get messageFromMeTextColor => font; //mainTextColor;
|
||||||
return purple;
|
get messageFromOtherBackgroundColor => peerBubble; //purple;
|
||||||
}
|
get messageFromOtherTextColor => font; //darkPurple;
|
||||||
|
|
||||||
// pressed row, offline heart
|
|
||||||
Color hilightElementColor() {
|
|
||||||
return purple; //darkPurple; // todo shouldn't be this, too dark, makes font unreadable
|
|
||||||
}
|
|
||||||
|
|
||||||
Color defaultButtonColor() {
|
|
||||||
return accent; // hotPink;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color defaultButtonActiveColor() {
|
|
||||||
return pink; // todo: lighten in light, darken in dark
|
|
||||||
}
|
|
||||||
|
|
||||||
Color defaultButtonTextColor() {
|
|
||||||
return whitePurple; // ?
|
|
||||||
}
|
|
||||||
|
|
||||||
Color defaultButtonDisabledColor() {
|
|
||||||
return softGrey;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color textfieldBackgroundColor() {
|
|
||||||
return purple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color textfieldBorderColor() {
|
|
||||||
return purple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color textfieldHintColor() {
|
|
||||||
return font; //TODO pick
|
|
||||||
}
|
|
||||||
|
|
||||||
Color textfieldErrorColor() {
|
|
||||||
return hotPink;
|
|
||||||
}
|
|
||||||
|
|
||||||
// todo button
|
|
||||||
Color scrollbarDefaultColor() {
|
|
||||||
return accent;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitBackgroundColor() {
|
|
||||||
return softPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitOnlineBorderColor() {
|
|
||||||
return greyPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitOfflineBorderColor() {
|
|
||||||
return greyPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitBlockedBorderColor() {
|
|
||||||
return softGrey;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitBlockedTextColor() {
|
|
||||||
return softGrey;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitContactBadgeColor() {
|
|
||||||
return accent;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitContactBadgeTextColor() {
|
|
||||||
return whitePurple; // todo button color
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO del
|
|
||||||
Color portraitProfileBadgeColor() {
|
|
||||||
return brightPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO del
|
|
||||||
Color portraitProfileBadgeTextColor() {
|
|
||||||
return whitePurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color dropShadowColor() {
|
|
||||||
return purple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color toolbarIconColor() {
|
|
||||||
return settings; //darkPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color messageFromMeBackgroundColor() {
|
|
||||||
return userBubble; //brightPurple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color messageFromMeTextColor() {
|
|
||||||
return font; //mainTextColor();
|
|
||||||
}
|
|
||||||
|
|
||||||
Color messageFromOtherBackgroundColor() {
|
|
||||||
return peerBubble; //purple;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color messageFromOtherTextColor() {
|
|
||||||
return font; //darkPurple;
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -0,0 +1,126 @@
|
||||||
|
import 'dart:ui';
|
||||||
|
import 'dart:core';
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
import 'opaque.dart';
|
||||||
|
|
||||||
|
final neon1_theme = "neon1";
|
||||||
|
final neon1_name = "Neon1"; //Todo translate
|
||||||
|
|
||||||
|
final Color darkGreyPurple = Color(0xFF281831);
|
||||||
|
final Color deepPurple = Color(0xFF422850);
|
||||||
|
final Color mauvePurple = Color(0xFF8E64A5);
|
||||||
|
final Color whiteishPurple = Color(0xFFE3DFE4);
|
||||||
|
final Color lightGrey = Color(0xFF9E9E9E);
|
||||||
|
|
||||||
|
final Color whitePurple = Color(0xFFFFFDFF);
|
||||||
|
final Color softPurple = Color(0xFFFDF3FC);
|
||||||
|
final Color purple = Color(0xFFDFB9DE);
|
||||||
|
final Color brightPurple = Color(0xFFD1B0E0); // not in new: portrait badge color
|
||||||
|
final Color darkPurple = Color(0xFF350052);
|
||||||
|
final Color greyPurple = Color(0xFF775F84); // not in new: portrait borders
|
||||||
|
final Color pink = Color(0xFFE85DA1); // not in new: active button color
|
||||||
|
final Color hotPink = Color(0xFFD20070); // Color(0xFFD01972);
|
||||||
|
final Color softGrey = Color(0xFFB3B6B3); // not in new theme: blocked
|
||||||
|
//static final Color softGreen = Color(0xFFA0FFB0);
|
||||||
|
//static final Color softRed = Color(0xFFFFA0B0);
|
||||||
|
|
||||||
|
OpaqueThemeType GetNeon1Theme(String mode) {
|
||||||
|
if (mode == mode_dark) {
|
||||||
|
return Neon1Dark();
|
||||||
|
} else {
|
||||||
|
return Neon1Light();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Neon1Dark extends OpaqueThemeType {
|
||||||
|
static final Color background = Color(0xFF290826);
|
||||||
|
static final Color header = Color(0xFF290826);
|
||||||
|
static final Color userBubble = Color(0xFFD20070);
|
||||||
|
static final Color peerBubble = Color(0xFF26A9A4);
|
||||||
|
static final Color font = Color(0xFFFFFFFF);
|
||||||
|
static final Color settings = Color(0xFFFFFDFF);
|
||||||
|
static final Color accent = Color(0xFFA604FE);
|
||||||
|
|
||||||
|
get name => neon1_name;
|
||||||
|
get theme => neon1_theme;
|
||||||
|
get mode => mode_dark;
|
||||||
|
|
||||||
|
get backgroundMainColor => background; // darkGreyPurple;
|
||||||
|
get backgroundPaneColor => header; //darkGreyPurple;
|
||||||
|
get backgroundHilightElementColor => deepPurple;
|
||||||
|
get mainTextColor => font; //whiteishPurple;
|
||||||
|
get sendHintTextColor => mauvePurple;
|
||||||
|
get hilightElementColor => purple;
|
||||||
|
get defaultButtonColor => accent; //hotPink;
|
||||||
|
get defaultButtonActiveColor => pink;
|
||||||
|
get defaultButtonTextColor => whiteishPurple;
|
||||||
|
get defaultButtonDisabledColor => lightGrey;
|
||||||
|
get defaultButtonDisabledTextColor => darkGreyPurple;
|
||||||
|
get textfieldBackgroundColor => deepPurple;
|
||||||
|
get textfieldBorderColor => deepPurple;
|
||||||
|
get textfieldHintColor => mainTextColor; //TODO pick
|
||||||
|
get textfieldErrorColor => hotPink;
|
||||||
|
get scrollbarDefaultColor => purple;
|
||||||
|
get portraitBackgroundColor => deepPurple;
|
||||||
|
get portraitOnlineBorderColor => whiteishPurple;
|
||||||
|
get portraitOfflineBorderColor => purple;
|
||||||
|
get portraitBlockedBorderColor => lightGrey;
|
||||||
|
get portraitBlockedTextColor => lightGrey;
|
||||||
|
get portraitContactBadgeColor => hotPink;
|
||||||
|
get portraitContactBadgeTextColor => whiteishPurple;
|
||||||
|
get portraitProfileBadgeColor => mauvePurple;
|
||||||
|
get portraitProfileBadgeTextColor => darkGreyPurple;
|
||||||
|
get dropShadowColor => mauvePurple;
|
||||||
|
get toolbarIconColor => settings; //whiteishPurple;
|
||||||
|
get messageFromMeBackgroundColor => userBubble; // mauvePurple;
|
||||||
|
get messageFromMeTextColor => font; //whiteishPurple;
|
||||||
|
get messageFromOtherBackgroundColor => peerBubble; //deepPurple;
|
||||||
|
get messageFromOtherTextColor => font; //whiteishPurple;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Neon1Light extends OpaqueThemeType {
|
||||||
|
static final Color background = Color(0xFFFFFDFF);
|
||||||
|
static final Color header = Color(0xFFFF94C2);
|
||||||
|
static final Color userBubble = Color(0xFFFF94C2);
|
||||||
|
static final Color peerBubble = Color(0xFFE7F6F6);
|
||||||
|
static final Color font = Color(0xFF290826);
|
||||||
|
static final Color settings = Color(0xFF290826);
|
||||||
|
static final Color accent = Color(0xFFA604FE);
|
||||||
|
|
||||||
|
get name => neon1_name;
|
||||||
|
get theme => neon1_theme;
|
||||||
|
get mode => mode_light;
|
||||||
|
|
||||||
|
get backgroundMainColor => background; //whitePurple;
|
||||||
|
get backgroundPaneColor => header; //softPurple;
|
||||||
|
get backgroundHilightElementColor => softPurple;
|
||||||
|
get mainTextColor => settings;
|
||||||
|
get sendHintTextColor => purple;
|
||||||
|
get hilightElementColor => purple; //darkPurple; // todo shouldn't be this, too dark, makes font unreadable
|
||||||
|
get defaultButtonColor => accent; // hotPink;
|
||||||
|
get defaultButtonActiveColor => pink; // todo: lighten in light, darken in dark
|
||||||
|
get defaultButtonTextColor => whitePurple; // ?
|
||||||
|
get defaultButtonDisabledColor => softGrey;
|
||||||
|
get textfieldBackgroundColor => purple;
|
||||||
|
get textfieldBorderColor => purple;
|
||||||
|
get textfieldHintColor => font; //TODO pick
|
||||||
|
get textfieldErrorColor => hotPink;
|
||||||
|
get scrollbarDefaultColor => accent;
|
||||||
|
get portraitBackgroundColor => softPurple;
|
||||||
|
get portraitOnlineBorderColor => greyPurple;
|
||||||
|
get portraitOfflineBorderColor => greyPurple;
|
||||||
|
get portraitBlockedBorderColor => softGrey;
|
||||||
|
get portraitBlockedTextColor => softGrey;
|
||||||
|
get portraitContactBadgeColor => accent;
|
||||||
|
get portraitContactBadgeTextColor => whitePurple;
|
||||||
|
get portraitProfileBadgeColor => brightPurple;
|
||||||
|
get portraitProfileBadgeTextColor => whitePurple;
|
||||||
|
get dropShadowColor => purple;
|
||||||
|
get toolbarIconColor => settings; //darkPurple;
|
||||||
|
get messageFromMeBackgroundColor => userBubble; //brightPurple;
|
||||||
|
get messageFromMeTextColor => font; //mainTextColor;
|
||||||
|
get messageFromOtherBackgroundColor => peerBubble; //purple;
|
||||||
|
get messageFromOtherTextColor => font; //darkPurple;
|
||||||
|
}
|
|
@ -1,148 +1,100 @@
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
import 'dart:core';
|
import 'dart:core';
|
||||||
|
|
||||||
|
import 'package:cwtch/themes/cwtch.dart';
|
||||||
|
import 'package:cwtch/themes/neon1.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:cwtch/settings.dart';
|
import 'package:cwtch/settings.dart';
|
||||||
|
|
||||||
const mode_light = "light";
|
const mode_light = "light";
|
||||||
const mode_dark = "dark";
|
const mode_dark = "dark";
|
||||||
|
|
||||||
|
final themes = { cwtch_theme: {mode_light: CwtchLight(), mode_dark: CwtchDark()},
|
||||||
|
neon1_theme: {mode_light: Neon1Light(), mode_dark: Neon1Dark()},
|
||||||
|
};
|
||||||
|
|
||||||
|
OpaqueThemeType getTheme(String themeId, String mode) {
|
||||||
|
if (themeId == "") {
|
||||||
|
themeId = cwtch_theme;
|
||||||
|
}
|
||||||
|
if (themeId == mode_light) {
|
||||||
|
themeId = cwtch_theme;
|
||||||
|
mode = mode_light;
|
||||||
|
}
|
||||||
|
if (themeId == mode_dark) {
|
||||||
|
themeId = cwtch_theme;
|
||||||
|
mode = mode_dark;
|
||||||
|
}
|
||||||
|
|
||||||
|
var theme = themes[themeId]?[mode];
|
||||||
|
return theme ?? CwtchDark();
|
||||||
|
}
|
||||||
|
|
||||||
|
Color lighten(Color color, [double amount = 0.15]) {
|
||||||
|
final hsl = HSLColor.fromColor(color);
|
||||||
|
final hslLight = hsl.withLightness((hsl.lightness + amount).clamp(0.0, 1.0));
|
||||||
|
|
||||||
|
return hslLight.toColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
Color darken(Color color, [double amount = 0.15]) {
|
||||||
|
final hsl = HSLColor.fromColor(color);
|
||||||
|
final hslDarken = hsl.withLightness((hsl.lightness - amount).clamp(0.0, 1.0));
|
||||||
|
|
||||||
|
return hslDarken.toColor();
|
||||||
|
}
|
||||||
|
|
||||||
abstract class OpaqueThemeType {
|
abstract class OpaqueThemeType {
|
||||||
static final Color red = Color(0xFFFF0000);
|
static final Color red = Color(0xFFFF0000);
|
||||||
|
|
||||||
String identifier() {
|
get name => "Dummy";
|
||||||
return "dummy";
|
get theme => "dummy";
|
||||||
}
|
get mode => mode_light;
|
||||||
|
|
||||||
// Main screen background color (message pane, item rows)
|
// Main screen background color (message pane, item rows)
|
||||||
Color backgroundMainColor() {
|
get backgroundMainColor => red;
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Top pane ane pane colors (settings)
|
// Top pane ane pane colors (settings)
|
||||||
Color backgroundPaneColor() {
|
get backgroundPaneColor => red;
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Selected Row
|
get mainTextColor => red;
|
||||||
Color backgroundHilightElementColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color mainTextColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Faded text color for suggestions in textfields
|
|
||||||
// Todo: implement way more places
|
|
||||||
Color sendHintTextColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
// pressed row, offline heart
|
// pressed row, offline heart
|
||||||
Color hilightElementColor() {
|
get hilightElementColor => red;
|
||||||
return red;
|
// Selected Row
|
||||||
}
|
get backgroundHilightElementColor => red;
|
||||||
|
// Faded text color for suggestions in textfields
|
||||||
|
// Todo: implement way more places
|
||||||
|
get sendHintTextColor => red;
|
||||||
|
|
||||||
Color defaultButtonColor() {
|
get defaultButtonColor => red;
|
||||||
return red;
|
get defaultButtonActiveColor => mode == mode_light ? lighten(defaultButtonColor) : darken(defaultButtonColor);
|
||||||
}
|
get defaultButtonTextColor => red;
|
||||||
|
get defaultButtonDisabledColor => red;
|
||||||
Color defaultButtonActiveColor() {
|
get textfieldBackgroundColor => red;
|
||||||
return red;
|
get textfieldBorderColor => red;
|
||||||
}
|
get textfieldHintColor => red;
|
||||||
|
get textfieldErrorColor => red;
|
||||||
Color defaultButtonTextColor() {
|
get scrollbarDefaultColor => red;
|
||||||
return red;
|
get portraitBackgroundColor => red;
|
||||||
}
|
get portraitOnlineBorderColor => red;
|
||||||
|
get portraitOfflineBorderColor => red;
|
||||||
Color defaultButtonDisabledColor() {
|
get portraitBlockedBorderColor => red;
|
||||||
return red;
|
get portraitBlockedTextColor => red;
|
||||||
}
|
get portraitContactBadgeColor => red;
|
||||||
|
get portraitContactBadgeTextColor => red;
|
||||||
Color textfieldBackgroundColor() {
|
get portraitProfileBadgeColor => red;
|
||||||
return red;
|
get portraitProfileBadgeTextColor => red;
|
||||||
}
|
|
||||||
|
|
||||||
Color textfieldBorderColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color textfieldHintColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color textfieldErrorColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color scrollbarDefaultColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitBackgroundColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitOnlineBorderColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitOfflineBorderColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitBlockedBorderColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitBlockedTextColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitContactBadgeColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitContactBadgeTextColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitProfileBadgeColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color portraitProfileBadgeTextColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
// dropshaddpow
|
// dropshaddpow
|
||||||
// todo: probably should not be reply icon color in messagerow
|
// todo: probably should not be reply icon color in messagerow
|
||||||
Color dropShadowColor() {
|
get dropShadowColor => red;
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color toolbarIconColor() {
|
get toolbarIconColor => red;
|
||||||
return red;
|
get messageFromMeBackgroundColor => red;
|
||||||
}
|
get messageFromMeTextColor => red;
|
||||||
|
get messageFromOtherBackgroundColor => red;
|
||||||
Color messageFromMeBackgroundColor() {
|
get messageFromOtherTextColor => red;
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color messageFromMeTextColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color messageFromOtherBackgroundColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color messageFromOtherTextColor() {
|
|
||||||
return red;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ... more to come
|
|
||||||
|
|
||||||
// Sizes
|
// Sizes
|
||||||
|
|
||||||
|
@ -151,51 +103,49 @@ abstract class OpaqueThemeType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ThemeData mkThemeData(Settings opaque) {
|
ThemeData mkThemeData(Settings opaque) {
|
||||||
return ThemeData(
|
return ThemeData(
|
||||||
visualDensity: VisualDensity.adaptivePlatformDensity,
|
visualDensity: VisualDensity.adaptivePlatformDensity,
|
||||||
primarySwatch: Colors.red,
|
primarySwatch: Colors.red,
|
||||||
primaryIconTheme: IconThemeData(
|
primaryIconTheme: IconThemeData(
|
||||||
color: opaque.current().mainTextColor(),
|
color: opaque.current().mainTextColor,
|
||||||
),
|
),
|
||||||
primaryColor: opaque.current().backgroundMainColor(),
|
primaryColor: opaque.current().backgroundMainColor,
|
||||||
canvasColor: opaque.current().backgroundPaneColor(),
|
canvasColor: opaque.current().backgroundPaneColor,
|
||||||
backgroundColor: opaque.current().backgroundMainColor(),
|
backgroundColor: opaque.current().backgroundMainColor,
|
||||||
highlightColor: opaque.current().hilightElementColor(),
|
highlightColor: opaque.current().hilightElementColor,
|
||||||
iconTheme: IconThemeData(
|
iconTheme: IconThemeData(
|
||||||
color: opaque.current().toolbarIconColor(),
|
color: opaque.current().toolbarIconColor,
|
||||||
),
|
),
|
||||||
cardColor: opaque.current().backgroundMainColor(),
|
cardColor: opaque.current().backgroundMainColor,
|
||||||
appBarTheme: AppBarTheme(
|
appBarTheme: AppBarTheme(
|
||||||
backgroundColor: opaque.current().backgroundPaneColor(),
|
backgroundColor: opaque.current().backgroundPaneColor,
|
||||||
iconTheme: IconThemeData(
|
iconTheme: IconThemeData(
|
||||||
color: opaque.current().mainTextColor(),
|
color: opaque.current().mainTextColor,
|
||||||
),
|
),
|
||||||
titleTextStyle: TextStyle(
|
titleTextStyle: TextStyle(
|
||||||
color: opaque.current().mainTextColor(),
|
color: opaque.current().mainTextColor,
|
||||||
),
|
),
|
||||||
actionsIconTheme: IconThemeData(
|
actionsIconTheme: IconThemeData(
|
||||||
color: opaque.current().mainTextColor(),
|
color: opaque.current().mainTextColor,
|
||||||
)),
|
)),
|
||||||
//bottomNavigationBarTheme: BottomNavigationBarThemeData(type: BottomNavigationBarType.fixed, backgroundColor: opaque.current().backgroundHilightElementColor()), // Can't determine current use
|
//bottomNavigationBarTheme: BottomNavigationBarThemeData(type: BottomNavigationBarType.fixed, backgroundColor: opaque.current().backgroundHilightElementColor()), // Can't determine current use
|
||||||
textButtonTheme: TextButtonThemeData(
|
textButtonTheme: TextButtonThemeData(
|
||||||
style: ButtonStyle(
|
style: ButtonStyle(
|
||||||
backgroundColor: MaterialStateProperty.all(opaque.current().defaultButtonColor()),
|
backgroundColor: MaterialStateProperty.all(opaque.current().defaultButtonColor),
|
||||||
foregroundColor: MaterialStateProperty.all(opaque.current().defaultButtonTextColor()),
|
foregroundColor: MaterialStateProperty.all(opaque.current().defaultButtonTextColor),
|
||||||
overlayColor: MaterialStateProperty.all(opaque.current().defaultButtonActiveColor()),
|
overlayColor: MaterialStateProperty.all(opaque.current().defaultButtonActiveColor),
|
||||||
padding: MaterialStateProperty.all(EdgeInsets.all(20))),
|
padding: MaterialStateProperty.all(EdgeInsets.all(20))),
|
||||||
),
|
),
|
||||||
hintColor: opaque.current().textfieldHintColor(),
|
hintColor: opaque.current().textfieldHintColor,
|
||||||
elevatedButtonTheme: ElevatedButtonThemeData(
|
elevatedButtonTheme: ElevatedButtonThemeData(
|
||||||
style: ButtonStyle(
|
style: ButtonStyle(
|
||||||
backgroundColor: MaterialStateProperty.resolveWith((states) => states.contains(MaterialState.disabled) ? opaque.current().defaultButtonDisabledColor() : opaque.current().defaultButtonColor()),
|
backgroundColor: MaterialStateProperty.resolveWith((states) => states.contains(MaterialState.disabled) ? opaque.current().defaultButtonDisabledColor : opaque.current().defaultButtonColor),
|
||||||
foregroundColor: MaterialStateProperty.all(opaque.current().defaultButtonTextColor()),
|
foregroundColor: MaterialStateProperty.all(opaque.current().defaultButtonTextColor),
|
||||||
overlayColor: MaterialStateProperty.resolveWith((states) => (states.contains(MaterialState.pressed) && states.contains(MaterialState.hovered))
|
overlayColor: MaterialStateProperty.resolveWith((states) => (states.contains(MaterialState.pressed) && states.contains(MaterialState.hovered))
|
||||||
? opaque.current().defaultButtonActiveColor()
|
? opaque.current().defaultButtonActiveColor
|
||||||
: states.contains(MaterialState.disabled)
|
: states.contains(MaterialState.disabled)
|
||||||
? opaque.current().defaultButtonDisabledColor()
|
? opaque.current().defaultButtonDisabledColor
|
||||||
: null),
|
: null),
|
||||||
enableFeedback: true,
|
enableFeedback: true,
|
||||||
splashFactory: InkRipple.splashFactory,
|
splashFactory: InkRipple.splashFactory,
|
||||||
|
@ -206,37 +156,37 @@ ThemeData mkThemeData(Settings opaque) {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
scrollbarTheme: ScrollbarThemeData(
|
scrollbarTheme: ScrollbarThemeData(
|
||||||
isAlwaysShown: false, thumbColor: MaterialStateProperty.all(opaque.current().scrollbarDefaultColor())),
|
isAlwaysShown: false, thumbColor: MaterialStateProperty.all(opaque.current().scrollbarDefaultColor)),
|
||||||
tabBarTheme: TabBarTheme(indicator: UnderlineTabIndicator(borderSide: BorderSide(color: opaque.current().defaultButtonActiveColor()))),
|
tabBarTheme: TabBarTheme(indicator: UnderlineTabIndicator(borderSide: BorderSide(color: opaque.current().defaultButtonActiveColor))),
|
||||||
dialogTheme: DialogTheme(
|
dialogTheme: DialogTheme(
|
||||||
backgroundColor: opaque.current().backgroundPaneColor(),
|
backgroundColor: opaque.current().backgroundPaneColor,
|
||||||
titleTextStyle: TextStyle(color: opaque.current().mainTextColor()),
|
titleTextStyle: TextStyle(color: opaque.current().mainTextColor),
|
||||||
contentTextStyle: TextStyle(color: opaque.current().mainTextColor())),
|
contentTextStyle: TextStyle(color: opaque.current().mainTextColor)),
|
||||||
textTheme: TextTheme(
|
textTheme: TextTheme(
|
||||||
headline1: TextStyle(color: opaque.current().mainTextColor()),
|
headline1: TextStyle(color: opaque.current().mainTextColor),
|
||||||
headline2: TextStyle(color: opaque.current().mainTextColor()),
|
headline2: TextStyle(color: opaque.current().mainTextColor),
|
||||||
headline3: TextStyle(color: opaque.current().mainTextColor()),
|
headline3: TextStyle(color: opaque.current().mainTextColor),
|
||||||
headline4: TextStyle(color: opaque.current().mainTextColor()),
|
headline4: TextStyle(color: opaque.current().mainTextColor),
|
||||||
headline5: TextStyle(color: opaque.current().mainTextColor()),
|
headline5: TextStyle(color: opaque.current().mainTextColor),
|
||||||
headline6: TextStyle(color: opaque.current().mainTextColor()),
|
headline6: TextStyle(color: opaque.current().mainTextColor),
|
||||||
bodyText1: TextStyle(color: opaque.current().mainTextColor()),
|
bodyText1: TextStyle(color: opaque.current().mainTextColor),
|
||||||
bodyText2: TextStyle(color: opaque.current().mainTextColor()),
|
bodyText2: TextStyle(color: opaque.current().mainTextColor),
|
||||||
subtitle1: TextStyle(color: opaque.current().mainTextColor()),
|
subtitle1: TextStyle(color: opaque.current().mainTextColor),
|
||||||
subtitle2: TextStyle(color: opaque.current().mainTextColor()),
|
subtitle2: TextStyle(color: opaque.current().mainTextColor),
|
||||||
caption: TextStyle(color: opaque.current().mainTextColor()),
|
caption: TextStyle(color: opaque.current().mainTextColor),
|
||||||
button: TextStyle(color: opaque.current().mainTextColor()),
|
button: TextStyle(color: opaque.current().mainTextColor),
|
||||||
overline: TextStyle(color: opaque.current().mainTextColor())),
|
overline: TextStyle(color: opaque.current().mainTextColor)),
|
||||||
switchTheme: SwitchThemeData(
|
switchTheme: SwitchThemeData(
|
||||||
overlayColor: MaterialStateProperty.all(opaque.current().defaultButtonActiveColor()),
|
overlayColor: MaterialStateProperty.all(opaque.current().defaultButtonActiveColor),
|
||||||
thumbColor: MaterialStateProperty.all(opaque.current().mainTextColor()),
|
thumbColor: MaterialStateProperty.all(opaque.current().mainTextColor),
|
||||||
trackColor: MaterialStateProperty.all(opaque.current().dropShadowColor()),
|
trackColor: MaterialStateProperty.all(opaque.current().dropShadowColor),
|
||||||
),
|
),
|
||||||
floatingActionButtonTheme: FloatingActionButtonThemeData(
|
floatingActionButtonTheme: FloatingActionButtonThemeData(
|
||||||
backgroundColor: opaque.current().defaultButtonColor(),
|
backgroundColor: opaque.current().defaultButtonColor,
|
||||||
hoverColor: opaque.current().defaultButtonActiveColor(),
|
hoverColor: opaque.current().defaultButtonActiveColor,
|
||||||
enableFeedback: true,
|
enableFeedback: true,
|
||||||
splashColor: opaque.current().defaultButtonActiveColor()),
|
splashColor: opaque.current().defaultButtonActiveColor),
|
||||||
textSelectionTheme: TextSelectionThemeData(
|
textSelectionTheme: TextSelectionThemeData(
|
||||||
cursorColor: opaque.current().defaultButtonActiveColor(), selectionColor: opaque.current().defaultButtonActiveColor(), selectionHandleColor: opaque.current().defaultButtonActiveColor()),
|
cursorColor: opaque.current().defaultButtonActiveColor, selectionColor: opaque.current().defaultButtonActiveColor, selectionHandleColor: opaque.current().defaultButtonActiveColor),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,7 +91,7 @@ class _AddEditProfileViewState extends State<AddEditProfileView> {
|
||||||
imagePath: Provider.of<ProfileInfoState>(context).imagePath,
|
imagePath: Provider.of<ProfileInfoState>(context).imagePath,
|
||||||
diameter: 120,
|
diameter: 120,
|
||||||
maskOut: false,
|
maskOut: false,
|
||||||
border: theme.theme.portraitOnlineBorderColor(),
|
border: theme.theme.portraitOnlineBorderColor,
|
||||||
badgeTextColor: Colors.red,
|
badgeTextColor: Colors.red,
|
||||||
badgeColor: Colors.red,
|
badgeColor: Colors.red,
|
||||||
)
|
)
|
||||||
|
@ -145,13 +145,13 @@ class _AddEditProfileViewState extends State<AddEditProfileView> {
|
||||||
child: Column(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
|
child: Column(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
|
||||||
Checkbox(
|
Checkbox(
|
||||||
value: usePassword,
|
value: usePassword,
|
||||||
fillColor: MaterialStateProperty.all(theme.current().defaultButtonColor()),
|
fillColor: MaterialStateProperty.all(theme.current().defaultButtonColor),
|
||||||
activeColor: theme.current().defaultButtonActiveColor(),
|
activeColor: theme.current().defaultButtonActiveColor,
|
||||||
onChanged: _handleSwitchPassword,
|
onChanged: _handleSwitchPassword,
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
AppLocalizations.of(context)!.radioUsePassword,
|
AppLocalizations.of(context)!.radioUsePassword,
|
||||||
style: TextStyle(color: theme.current().mainTextColor()),
|
style: TextStyle(color: theme.current().mainTextColor),
|
||||||
),
|
),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: 20,
|
height: 20,
|
||||||
|
|
|
@ -33,6 +33,7 @@ class _AddEditServerViewState extends State<AddEditServerView> {
|
||||||
final ctrlrOnion = TextEditingController(text: "");
|
final ctrlrOnion = TextEditingController(text: "");
|
||||||
|
|
||||||
late bool usePassword;
|
late bool usePassword;
|
||||||
|
|
||||||
//late bool deleted;
|
//late bool deleted;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
|
@ -78,7 +78,7 @@ class _ContactsViewState extends State<ContactsView> {
|
||||||
ProfileImage(
|
ProfileImage(
|
||||||
imagePath: Provider.of<ProfileInfoState>(context).imagePath,
|
imagePath: Provider.of<ProfileInfoState>(context).imagePath,
|
||||||
diameter: 42,
|
diameter: 42,
|
||||||
border: Provider.of<Settings>(context).current().portraitOnlineBorderColor(),
|
border: Provider.of<Settings>(context).current().portraitOnlineBorderColor,
|
||||||
badgeTextColor: Colors.red,
|
badgeTextColor: Colors.red,
|
||||||
badgeColor: Colors.red,
|
badgeColor: Colors.red,
|
||||||
),
|
),
|
||||||
|
@ -87,7 +87,7 @@ class _ContactsViewState extends State<ContactsView> {
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Text("%1 » %2".replaceAll("%1", Provider.of<ProfileInfoState>(context).nickname).replaceAll("%2", AppLocalizations.of(context)!.titleManageContacts),
|
child: Text("%1 » %2".replaceAll("%1", Provider.of<ProfileInfoState>(context).nickname).replaceAll("%2", AppLocalizations.of(context)!.titleManageContacts),
|
||||||
overflow: TextOverflow.ellipsis, style: TextStyle(color: Provider.of<Settings>(context).current().mainTextColor()))),
|
overflow: TextOverflow.ellipsis, style: TextStyle(color: Provider.of<Settings>(context).current().mainTextColor))),
|
||||||
])),
|
])),
|
||||||
actions: getActions(context),
|
actions: getActions(context),
|
||||||
),
|
),
|
||||||
|
|
|
@ -2,6 +2,7 @@ import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'package:cwtch/cwtch_icons_icons.dart';
|
import 'package:cwtch/cwtch_icons_icons.dart';
|
||||||
import 'package:cwtch/models/servers.dart';
|
import 'package:cwtch/models/servers.dart';
|
||||||
|
import 'package:cwtch/themes/opaque.dart';
|
||||||
import 'package:package_info_plus/package_info_plus.dart';
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:cwtch/settings.dart';
|
import 'package:cwtch/settings.dart';
|
||||||
|
@ -36,7 +37,7 @@ class _GlobalSettingsViewState extends State<GlobalSettingsView> {
|
||||||
Widget _buildSettingsList() {
|
Widget _buildSettingsList() {
|
||||||
return Consumer<Settings>(builder: (context, settings, child) {
|
return Consumer<Settings>(builder: (context, settings, child) {
|
||||||
return LayoutBuilder(builder: (BuildContext context, BoxConstraints viewportConstraints) {
|
return LayoutBuilder(builder: (BuildContext context, BoxConstraints viewportConstraints) {
|
||||||
var appIcon = Icon(Icons.info, color: settings.current().mainTextColor());
|
var appIcon = Icon(Icons.info, color: settings.current().mainTextColor);
|
||||||
return Scrollbar(
|
return Scrollbar(
|
||||||
isAlwaysShown: true,
|
isAlwaysShown: true,
|
||||||
child: SingleChildScrollView(
|
child: SingleChildScrollView(
|
||||||
|
@ -47,8 +48,8 @@ class _GlobalSettingsViewState extends State<GlobalSettingsView> {
|
||||||
),
|
),
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text(AppLocalizations.of(context)!.settingLanguage, style: TextStyle(color: settings.current().mainTextColor())),
|
title: Text(AppLocalizations.of(context)!.settingLanguage, style: TextStyle(color: settings.current().mainTextColor)),
|
||||||
leading: Icon(CwtchIcons.change_language, color: settings.current().mainTextColor()),
|
leading: Icon(CwtchIcons.change_language, color: settings.current().mainTextColor),
|
||||||
trailing: DropdownButton(
|
trailing: DropdownButton(
|
||||||
value: Provider.of<Settings>(context).locale.languageCode,
|
value: Provider.of<Settings>(context).locale.languageCode,
|
||||||
onChanged: (String? newValue) {
|
onChanged: (String? newValue) {
|
||||||
|
@ -64,25 +65,42 @@ class _GlobalSettingsViewState extends State<GlobalSettingsView> {
|
||||||
);
|
);
|
||||||
}).toList())),
|
}).toList())),
|
||||||
SwitchListTile(
|
SwitchListTile(
|
||||||
title: Text(AppLocalizations.of(context)!.settingTheme, style: TextStyle(color: settings.current().mainTextColor())),
|
title: Text(AppLocalizations.of(context)!.settingTheme, style: TextStyle(color: settings.current().mainTextColor)),
|
||||||
value: settings.current().identifier() == "light",
|
value: settings.current().mode == mode_light,
|
||||||
onChanged: (bool value) {
|
onChanged: (bool value) {
|
||||||
if (value) {
|
if (value) {
|
||||||
settings.setLight();
|
settings.setTheme(settings.theme.theme, mode_light);
|
||||||
} else {
|
} else {
|
||||||
settings.setDark();
|
settings.setTheme(settings.theme.theme, mode_dark);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save Settings...
|
// Save Settings...
|
||||||
saveSettings(context);
|
saveSettings(context);
|
||||||
},
|
},
|
||||||
activeTrackColor: settings.theme.defaultButtonActiveColor(),
|
activeTrackColor: settings.theme.defaultButtonActiveColor,
|
||||||
inactiveTrackColor: settings.theme.defaultButtonDisabledColor(),
|
inactiveTrackColor: settings.theme.defaultButtonDisabledColor,
|
||||||
secondary: Icon(CwtchIcons.change_theme, color: settings.current().mainTextColor()),
|
secondary: Icon(CwtchIcons.change_theme, color: settings.current().mainTextColor),
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text(AppLocalizations.of(context)!.settingUIColumnPortrait, style: TextStyle(color: settings.current().mainTextColor())),
|
title: Text("Colour Theme"),
|
||||||
leading: Icon(Icons.table_chart, color: settings.current().mainTextColor()),
|
//AppLocalizations.of(context)!.settingTheme)),
|
||||||
|
trailing: DropdownButton<String>(
|
||||||
|
value: Provider.of<Settings>(context).theme.theme,
|
||||||
|
onChanged: (String? newValue) {
|
||||||
|
setState(() {
|
||||||
|
settings.setTheme(newValue!, settings.theme.mode);
|
||||||
|
saveSettings(context);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
items: themes.keys.map<DropdownMenuItem<String>>((String themeId) {
|
||||||
|
return DropdownMenuItem<String>(
|
||||||
|
value: themeId,
|
||||||
|
child: Text(themes[themeId]?[mode_light]?.name ?? "Unknown"), //todo translate
|
||||||
|
);
|
||||||
|
}).toList())),
|
||||||
|
ListTile(
|
||||||
|
title: Text(AppLocalizations.of(context)!.settingUIColumnPortrait, style: TextStyle(color: settings.current().mainTextColor)),
|
||||||
|
leading: Icon(Icons.table_chart, color: settings.current().mainTextColor),
|
||||||
trailing: DropdownButton(
|
trailing: DropdownButton(
|
||||||
value: settings.uiColumnModePortrait.toString(),
|
value: settings.uiColumnModePortrait.toString(),
|
||||||
onChanged: (String? newValue) {
|
onChanged: (String? newValue) {
|
||||||
|
@ -100,9 +118,9 @@ class _GlobalSettingsViewState extends State<GlobalSettingsView> {
|
||||||
AppLocalizations.of(context)!.settingUIColumnLandscape,
|
AppLocalizations.of(context)!.settingUIColumnLandscape,
|
||||||
textWidthBasis: TextWidthBasis.longestLine,
|
textWidthBasis: TextWidthBasis.longestLine,
|
||||||
softWrap: true,
|
softWrap: true,
|
||||||
style: TextStyle(color: settings.current().mainTextColor()),
|
style: TextStyle(color: settings.current().mainTextColor),
|
||||||
),
|
),
|
||||||
leading: Icon(Icons.table_chart, color: settings.current().mainTextColor()),
|
leading: Icon(Icons.table_chart, color: settings.current().mainTextColor),
|
||||||
trailing: Container(
|
trailing: Container(
|
||||||
width: 200.0,
|
width: 200.0,
|
||||||
child: DropdownButton(
|
child: DropdownButton(
|
||||||
|
@ -122,7 +140,7 @@ class _GlobalSettingsViewState extends State<GlobalSettingsView> {
|
||||||
);
|
);
|
||||||
}).toList()))),
|
}).toList()))),
|
||||||
SwitchListTile(
|
SwitchListTile(
|
||||||
title: Text(AppLocalizations.of(context)!.blockUnknownLabel, style: TextStyle(color: settings.current().mainTextColor())),
|
title: Text(AppLocalizations.of(context)!.blockUnknownLabel, style: TextStyle(color: settings.current().mainTextColor)),
|
||||||
subtitle: Text(AppLocalizations.of(context)!.descriptionBlockUnknownConnections),
|
subtitle: Text(AppLocalizations.of(context)!.descriptionBlockUnknownConnections),
|
||||||
value: settings.blockUnknownConnections,
|
value: settings.blockUnknownConnections,
|
||||||
onChanged: (bool value) {
|
onChanged: (bool value) {
|
||||||
|
@ -135,12 +153,12 @@ class _GlobalSettingsViewState extends State<GlobalSettingsView> {
|
||||||
// Save Settings...
|
// Save Settings...
|
||||||
saveSettings(context);
|
saveSettings(context);
|
||||||
},
|
},
|
||||||
activeTrackColor: settings.theme.defaultButtonActiveColor(),
|
activeTrackColor: settings.theme.defaultButtonActiveColor,
|
||||||
inactiveTrackColor: settings.theme.defaultButtonDisabledColor(),
|
inactiveTrackColor: settings.theme.defaultButtonDisabledColor,
|
||||||
secondary: Icon(CwtchIcons.block_unknown, color: settings.current().mainTextColor()),
|
secondary: Icon(CwtchIcons.block_unknown, color: settings.current().mainTextColor),
|
||||||
),
|
),
|
||||||
SwitchListTile(
|
SwitchListTile(
|
||||||
title: Text(AppLocalizations.of(context)!.streamerModeLabel, style: TextStyle(color: settings.current().mainTextColor())),
|
title: Text(AppLocalizations.of(context)!.streamerModeLabel, style: TextStyle(color: settings.current().mainTextColor)),
|
||||||
subtitle: Text(AppLocalizations.of(context)!.descriptionStreamerMode),
|
subtitle: Text(AppLocalizations.of(context)!.descriptionStreamerMode),
|
||||||
value: settings.streamerMode,
|
value: settings.streamerMode,
|
||||||
onChanged: (bool value) {
|
onChanged: (bool value) {
|
||||||
|
@ -148,12 +166,12 @@ class _GlobalSettingsViewState extends State<GlobalSettingsView> {
|
||||||
// Save Settings...
|
// Save Settings...
|
||||||
saveSettings(context);
|
saveSettings(context);
|
||||||
},
|
},
|
||||||
activeTrackColor: settings.theme.defaultButtonActiveColor(),
|
activeTrackColor: settings.theme.defaultButtonActiveColor,
|
||||||
inactiveTrackColor: settings.theme.defaultButtonDisabledColor(),
|
inactiveTrackColor: settings.theme.defaultButtonDisabledColor,
|
||||||
secondary: Icon(CwtchIcons.streamer_bunnymask, color: settings.current().mainTextColor()),
|
secondary: Icon(CwtchIcons.streamer_bunnymask, color: settings.current().mainTextColor),
|
||||||
),
|
),
|
||||||
SwitchListTile(
|
SwitchListTile(
|
||||||
title: Text(AppLocalizations.of(context)!.experimentsEnabled, style: TextStyle(color: settings.current().mainTextColor())),
|
title: Text(AppLocalizations.of(context)!.experimentsEnabled, style: TextStyle(color: settings.current().mainTextColor)),
|
||||||
subtitle: Text(AppLocalizations.of(context)!.descriptionExperiments),
|
subtitle: Text(AppLocalizations.of(context)!.descriptionExperiments),
|
||||||
value: settings.experimentsEnabled,
|
value: settings.experimentsEnabled,
|
||||||
onChanged: (bool value) {
|
onChanged: (bool value) {
|
||||||
|
@ -165,16 +183,16 @@ class _GlobalSettingsViewState extends State<GlobalSettingsView> {
|
||||||
// Save Settings...
|
// Save Settings...
|
||||||
saveSettings(context);
|
saveSettings(context);
|
||||||
},
|
},
|
||||||
activeTrackColor: settings.theme.defaultButtonActiveColor(),
|
activeTrackColor: settings.theme.defaultButtonActiveColor,
|
||||||
inactiveTrackColor: settings.theme.defaultButtonDisabledColor(),
|
inactiveTrackColor: settings.theme.defaultButtonDisabledColor,
|
||||||
secondary: Icon(CwtchIcons.enable_experiments, color: settings.current().mainTextColor()),
|
secondary: Icon(CwtchIcons.enable_experiments, color: settings.current().mainTextColor),
|
||||||
),
|
),
|
||||||
Visibility(
|
Visibility(
|
||||||
visible: settings.experimentsEnabled,
|
visible: settings.experimentsEnabled,
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
SwitchListTile(
|
SwitchListTile(
|
||||||
title: Text(AppLocalizations.of(context)!.enableGroups, style: TextStyle(color: settings.current().mainTextColor())),
|
title: Text(AppLocalizations.of(context)!.enableGroups, style: TextStyle(color: settings.current().mainTextColor)),
|
||||||
subtitle: Text(AppLocalizations.of(context)!.descriptionExperimentsGroups),
|
subtitle: Text(AppLocalizations.of(context)!.descriptionExperimentsGroups),
|
||||||
value: settings.isExperimentEnabled(TapirGroupsExperiment),
|
value: settings.isExperimentEnabled(TapirGroupsExperiment),
|
||||||
onChanged: (bool value) {
|
onChanged: (bool value) {
|
||||||
|
@ -186,14 +204,14 @@ class _GlobalSettingsViewState extends State<GlobalSettingsView> {
|
||||||
// Save Settings...
|
// Save Settings...
|
||||||
saveSettings(context);
|
saveSettings(context);
|
||||||
},
|
},
|
||||||
activeTrackColor: settings.theme.defaultButtonActiveColor(),
|
activeTrackColor: settings.theme.defaultButtonActiveColor,
|
||||||
inactiveTrackColor: settings.theme.defaultButtonDisabledColor(),
|
inactiveTrackColor: settings.theme.defaultButtonDisabledColor,
|
||||||
secondary: Icon(CwtchIcons.enable_groups, color: settings.current().mainTextColor()),
|
secondary: Icon(CwtchIcons.enable_groups, color: settings.current().mainTextColor),
|
||||||
),
|
),
|
||||||
Visibility(
|
Visibility(
|
||||||
visible: !Platform.isAndroid && !Platform.isIOS,
|
visible: !Platform.isAndroid && !Platform.isIOS,
|
||||||
child: SwitchListTile(
|
child: SwitchListTile(
|
||||||
title: Text(AppLocalizations.of(context)!.settingServers, style: TextStyle(color: settings.current().mainTextColor())),
|
title: Text(AppLocalizations.of(context)!.settingServers, style: TextStyle(color: settings.current().mainTextColor)),
|
||||||
subtitle: Text(AppLocalizations.of(context)!.settingServersDescription),
|
subtitle: Text(AppLocalizations.of(context)!.settingServersDescription),
|
||||||
value: settings.isExperimentEnabled(ServerManagementExperiment),
|
value: settings.isExperimentEnabled(ServerManagementExperiment),
|
||||||
onChanged: (bool value) {
|
onChanged: (bool value) {
|
||||||
|
@ -206,12 +224,12 @@ class _GlobalSettingsViewState extends State<GlobalSettingsView> {
|
||||||
// Save Settings...
|
// Save Settings...
|
||||||
saveSettings(context);
|
saveSettings(context);
|
||||||
},
|
},
|
||||||
activeTrackColor: settings.theme.defaultButtonActiveColor(),
|
activeTrackColor: settings.theme.defaultButtonActiveColor,
|
||||||
inactiveTrackColor: settings.theme.defaultButtonDisabledColor(),
|
inactiveTrackColor: settings.theme.defaultButtonDisabledColor,
|
||||||
secondary: Icon(CwtchIcons.dns_24px, color: settings.current().mainTextColor()),
|
secondary: Icon(CwtchIcons.dns_24px, color: settings.current().mainTextColor),
|
||||||
)),
|
)),
|
||||||
SwitchListTile(
|
SwitchListTile(
|
||||||
title: Text(AppLocalizations.of(context)!.settingFileSharing, style: TextStyle(color: settings.current().mainTextColor())),
|
title: Text(AppLocalizations.of(context)!.settingFileSharing, style: TextStyle(color: settings.current().mainTextColor)),
|
||||||
subtitle: Text(AppLocalizations.of(context)!.descriptionFileSharing),
|
subtitle: Text(AppLocalizations.of(context)!.descriptionFileSharing),
|
||||||
value: settings.isExperimentEnabled(FileSharingExperiment),
|
value: settings.isExperimentEnabled(FileSharingExperiment),
|
||||||
onChanged: (bool value) {
|
onChanged: (bool value) {
|
||||||
|
@ -222,9 +240,9 @@ class _GlobalSettingsViewState extends State<GlobalSettingsView> {
|
||||||
}
|
}
|
||||||
saveSettings(context);
|
saveSettings(context);
|
||||||
},
|
},
|
||||||
activeTrackColor: settings.theme.defaultButtonActiveColor(),
|
activeTrackColor: settings.theme.defaultButtonActiveColor,
|
||||||
inactiveTrackColor: settings.theme.defaultButtonDisabledColor(),
|
inactiveTrackColor: settings.theme.defaultButtonDisabledColor,
|
||||||
secondary: Icon(Icons.attach_file, color: settings.current().mainTextColor()),
|
secondary: Icon(Icons.attach_file, color: settings.current().mainTextColor),
|
||||||
),
|
),
|
||||||
SwitchListTile(
|
SwitchListTile(
|
||||||
title: Text(AppLocalizations.of(context)!.enableExperimentClickableLinks, style: TextStyle(color: settings.current().mainTextColor())),
|
title: Text(AppLocalizations.of(context)!.enableExperimentClickableLinks, style: TextStyle(color: settings.current().mainTextColor())),
|
||||||
|
@ -238,9 +256,9 @@ class _GlobalSettingsViewState extends State<GlobalSettingsView> {
|
||||||
}
|
}
|
||||||
saveSettings(context);
|
saveSettings(context);
|
||||||
},
|
},
|
||||||
activeTrackColor: settings.theme.defaultButtonActiveColor(),
|
activeTrackColor: settings.theme.defaultButtonActiveColor,
|
||||||
inactiveTrackColor: settings.theme.defaultButtonDisabledColor(),
|
inactiveTrackColor: settings.theme.defaultButtonDisabledColor,
|
||||||
secondary: Icon(Icons.link, color: settings.current().mainTextColor()),
|
secondary: Icon(Icons.link, color: settings.current().mainTextColor),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)),
|
)),
|
||||||
|
@ -251,8 +269,8 @@ class _GlobalSettingsViewState extends State<GlobalSettingsView> {
|
||||||
applicationLegalese: '\u{a9} 2021 Open Privacy Research Society',
|
applicationLegalese: '\u{a9} 2021 Open Privacy Research Society',
|
||||||
aboutBoxChildren: <Widget>[
|
aboutBoxChildren: <Widget>[
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.fromLTRB(
|
padding: EdgeInsets.fromLTRB(24.0 + 10.0 + (appIcon.size ?? 24.0), 16.0, 0.0, 0.0),
|
||||||
24.0 + 10.0 + (appIcon.size ?? 24.0), 16.0, 0.0, 0.0), // About has 24 padding (ln 389) and there appears to be another 10 of padding in the widget
|
// About has 24 padding (ln 389) and there appears to be another 10 of padding in the widget
|
||||||
child: SelectableText(AppLocalizations.of(context)!.versionBuilddate.replaceAll("%1", EnvironmentConfig.BUILD_VER).replaceAll("%2", EnvironmentConfig.BUILD_DATE)),
|
child: SelectableText(AppLocalizations.of(context)!.versionBuilddate.replaceAll("%1", EnvironmentConfig.BUILD_VER).replaceAll("%2", EnvironmentConfig.BUILD_DATE)),
|
||||||
)
|
)
|
||||||
]),
|
]),
|
||||||
|
|
|
@ -104,7 +104,7 @@ class _MessageViewState extends State<MessageView> {
|
||||||
return WillPopScope(
|
return WillPopScope(
|
||||||
onWillPop: _onWillPop,
|
onWillPop: _onWillPop,
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
backgroundColor: Provider.of<Settings>(context).theme.backgroundMainColor(),
|
backgroundColor: Provider.of<Settings>(context).theme.backgroundMainColor,
|
||||||
floatingActionButton: appState.unreadMessagesBelow
|
floatingActionButton: appState.unreadMessagesBelow
|
||||||
? FloatingActionButton(
|
? FloatingActionButton(
|
||||||
child: Icon(Icons.arrow_downward),
|
child: Icon(Icons.arrow_downward),
|
||||||
|
@ -121,7 +121,7 @@ class _MessageViewState extends State<MessageView> {
|
||||||
ProfileImage(
|
ProfileImage(
|
||||||
imagePath: Provider.of<ContactInfoState>(context).imagePath,
|
imagePath: Provider.of<ContactInfoState>(context).imagePath,
|
||||||
diameter: 42,
|
diameter: 42,
|
||||||
border: Provider.of<Settings>(context).current().portraitOnlineBorderColor(),
|
border: Provider.of<Settings>(context).current().portraitOnlineBorderColor,
|
||||||
badgeTextColor: Colors.red,
|
badgeTextColor: Colors.red,
|
||||||
badgeColor: Colors.red,
|
badgeColor: Colors.red,
|
||||||
),
|
),
|
||||||
|
@ -226,7 +226,7 @@ class _MessageViewState extends State<MessageView> {
|
||||||
bool isOffline = Provider.of<ContactInfoState>(context).isOnline() == false;
|
bool isOffline = Provider.of<ContactInfoState>(context).isOnline() == false;
|
||||||
|
|
||||||
var composeBox = Container(
|
var composeBox = Container(
|
||||||
color: Provider.of<Settings>(context).theme.backgroundMainColor(),
|
color: Provider.of<Settings>(context).theme.backgroundMainColor,
|
||||||
padding: EdgeInsets.all(2),
|
padding: EdgeInsets.all(2),
|
||||||
margin: EdgeInsets.all(2),
|
margin: EdgeInsets.all(2),
|
||||||
height: 100,
|
height: 100,
|
||||||
|
@ -234,7 +234,7 @@ class _MessageViewState extends State<MessageView> {
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(border: Border(top: BorderSide(color: Provider.of<Settings>(context).theme.defaultButtonActiveColor()))),
|
decoration: BoxDecoration(border: Border(top: BorderSide(color: Provider.of<Settings>(context).theme.defaultButtonActiveColor))),
|
||||||
child: RawKeyboardListener(
|
child: RawKeyboardListener(
|
||||||
focusNode: FocusNode(),
|
focusNode: FocusNode(),
|
||||||
onKey: handleKeyPress,
|
onKey: handleKeyPress,
|
||||||
|
@ -254,12 +254,12 @@ class _MessageViewState extends State<MessageView> {
|
||||||
enabled: !isOffline,
|
enabled: !isOffline,
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
hintText: isOffline ? "" : AppLocalizations.of(context)!.placeholderEnterMessage,
|
hintText: isOffline ? "" : AppLocalizations.of(context)!.placeholderEnterMessage,
|
||||||
hintStyle: TextStyle(color: Provider.of<Settings>(context).theme.sendHintTextColor()),
|
hintStyle: TextStyle(color: Provider.of<Settings>(context).theme.sendHintTextColor),
|
||||||
enabledBorder: InputBorder.none,
|
enabledBorder: InputBorder.none,
|
||||||
focusedBorder: InputBorder.none,
|
focusedBorder: InputBorder.none,
|
||||||
enabled: true,
|
enabled: true,
|
||||||
suffixIcon: ElevatedButton(
|
suffixIcon: ElevatedButton(
|
||||||
child: Icon(CwtchIcons.send_24px, size: 24, color: Provider.of<Settings>(context).theme.defaultButtonTextColor()),
|
child: Icon(CwtchIcons.send_24px, size: 24, color: Provider.of<Settings>(context).theme.defaultButtonTextColor),
|
||||||
onPressed: isOffline ? null : _sendMessage,
|
onPressed: isOffline ? null : _sendMessage,
|
||||||
))),
|
))),
|
||||||
)))),
|
)))),
|
||||||
|
@ -279,8 +279,8 @@ class _MessageViewState extends State<MessageView> {
|
||||||
margin: EdgeInsets.all(5),
|
margin: EdgeInsets.all(5),
|
||||||
padding: EdgeInsets.all(5),
|
padding: EdgeInsets.all(5),
|
||||||
color: message.getMetadata().senderHandle != Provider.of<AppState>(context).selectedProfile
|
color: message.getMetadata().senderHandle != Provider.of<AppState>(context).selectedProfile
|
||||||
? Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor()
|
? Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor
|
||||||
: Provider.of<Settings>(context).theme.messageFromMeBackgroundColor(),
|
: Provider.of<Settings>(context).theme.messageFromMeBackgroundColor,
|
||||||
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
||||||
Stack(children: [
|
Stack(children: [
|
||||||
Align(
|
Align(
|
||||||
|
@ -315,7 +315,7 @@ class _MessageViewState extends State<MessageView> {
|
||||||
}
|
}
|
||||||
|
|
||||||
return Container(
|
return Container(
|
||||||
color: Provider.of<Settings>(context).theme.backgroundMainColor(), child: Column(mainAxisSize: MainAxisSize.min, children: children));
|
color: Provider.of<Settings>(context).theme.backgroundMainColor, child: Column(mainAxisSize: MainAxisSize.min, children: children));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the message if enter is pressed without the shift key...
|
// Send the message if enter is pressed without the shift key...
|
||||||
|
|
|
@ -105,7 +105,7 @@ class _PeerSettingsViewState extends State<PeerSettingsView> {
|
||||||
height: 20,
|
height: 20,
|
||||||
),
|
),
|
||||||
SwitchListTile(
|
SwitchListTile(
|
||||||
title: Text(AppLocalizations.of(context)!.blockBtn, style: TextStyle(color: settings.current().mainTextColor())),
|
title: Text(AppLocalizations.of(context)!.blockBtn, style: TextStyle(color: settings.current().mainTextColor)),
|
||||||
value: Provider.of<ContactInfoState>(context).isBlocked,
|
value: Provider.of<ContactInfoState>(context).isBlocked,
|
||||||
onChanged: (bool blocked) {
|
onChanged: (bool blocked) {
|
||||||
// Save local blocked status
|
// Save local blocked status
|
||||||
|
@ -137,14 +137,14 @@ class _PeerSettingsViewState extends State<PeerSettingsView> {
|
||||||
Provider.of<FlwtchState>(context, listen: false).cwtch.SendProfileEvent(profileOnion, setPeerAttributeJson);
|
Provider.of<FlwtchState>(context, listen: false).cwtch.SendProfileEvent(profileOnion, setPeerAttributeJson);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
activeTrackColor: settings.theme.defaultButtonActiveColor(),
|
activeTrackColor: settings.theme.defaultButtonActiveColor,
|
||||||
inactiveTrackColor: settings.theme.defaultButtonDisabledColor(),
|
inactiveTrackColor: settings.theme.defaultButtonDisabledColor,
|
||||||
secondary: Icon(CwtchIcons.block_peer, color: settings.current().mainTextColor()),
|
secondary: Icon(CwtchIcons.block_peer, color: settings.current().mainTextColor),
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text(AppLocalizations.of(context)!.savePeerHistory, style: TextStyle(color: settings.current().mainTextColor())),
|
title: Text(AppLocalizations.of(context)!.savePeerHistory, style: TextStyle(color: settings.current().mainTextColor)),
|
||||||
subtitle: Text(AppLocalizations.of(context)!.savePeerHistoryDescription),
|
subtitle: Text(AppLocalizations.of(context)!.savePeerHistoryDescription),
|
||||||
leading: Icon(CwtchIcons.peer_history, color: settings.current().mainTextColor()),
|
leading: Icon(CwtchIcons.peer_history, color: settings.current().mainTextColor),
|
||||||
trailing: DropdownButton(
|
trailing: DropdownButton(
|
||||||
value: Provider.of<ContactInfoState>(context).savePeerHistory == "DefaultDeleteHistory"
|
value: Provider.of<ContactInfoState>(context).savePeerHistory == "DefaultDeleteHistory"
|
||||||
? AppLocalizations.of(context)!.dontSavePeerHistory
|
? AppLocalizations.of(context)!.dontSavePeerHistory
|
||||||
|
|
|
@ -46,20 +46,20 @@ class _ProfileMgrViewState extends State<ProfileMgrView> {
|
||||||
return Provider.of<AppState>(context, listen: false).cwtchIsClosing;
|
return Provider.of<AppState>(context, listen: false).cwtchIsClosing;
|
||||||
},
|
},
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
backgroundColor: settings.theme.backgroundMainColor(),
|
backgroundColor: settings.theme.backgroundMainColor,
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: Row(children: [
|
title: Row(children: [
|
||||||
Icon(
|
Icon(
|
||||||
CwtchIcons.cwtch_knott,
|
CwtchIcons.cwtch_knott,
|
||||||
size: 36,
|
size: 36,
|
||||||
color: settings.theme.mainTextColor(),
|
color: settings.theme.mainTextColor,
|
||||||
),
|
),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: 10,
|
width: 10,
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Text(MediaQuery.of(context).size.width > 600 ? AppLocalizations.of(context)!.titleManageProfiles : AppLocalizations.of(context)!.titleManageProfilesShort,
|
child: Text(MediaQuery.of(context).size.width > 600 ? AppLocalizations.of(context)!.titleManageProfiles : AppLocalizations.of(context)!.titleManageProfilesShort,
|
||||||
style: TextStyle(color: settings.current().mainTextColor())))
|
style: TextStyle(color: settings.current().mainTextColor)))
|
||||||
]),
|
]),
|
||||||
actions: getActions(),
|
actions: getActions(),
|
||||||
),
|
),
|
||||||
|
@ -93,7 +93,7 @@ class _ProfileMgrViewState extends State<ProfileMgrView> {
|
||||||
// Unlock Profiles
|
// Unlock Profiles
|
||||||
actions.add(IconButton(
|
actions.add(IconButton(
|
||||||
icon: Icon(CwtchIcons.lock_open_24px),
|
icon: Icon(CwtchIcons.lock_open_24px),
|
||||||
color: Provider.of<ProfileListState>(context).profiles.isEmpty ? Provider.of<Settings>(context).theme.defaultButtonColor() : Provider.of<Settings>(context).theme.mainTextColor(),
|
color: Provider.of<ProfileListState>(context).profiles.isEmpty ? Provider.of<Settings>(context).theme.defaultButtonColor : Provider.of<Settings>(context).theme.mainTextColor,
|
||||||
tooltip: AppLocalizations.of(context)!.tooltipUnlockProfiles,
|
tooltip: AppLocalizations.of(context)!.tooltipUnlockProfiles,
|
||||||
onPressed: _modalUnlockProfiles,
|
onPressed: _modalUnlockProfiles,
|
||||||
));
|
));
|
||||||
|
|
|
@ -77,7 +77,7 @@ class _ServersView extends State<ServersView> {
|
||||||
// Unlock Profiles
|
// Unlock Profiles
|
||||||
actions.add(IconButton(
|
actions.add(IconButton(
|
||||||
icon: Icon(CwtchIcons.lock_open_24px),
|
icon: Icon(CwtchIcons.lock_open_24px),
|
||||||
color: Provider.of<ServerListState>(context).servers.isEmpty ? Provider.of<Settings>(context).theme.defaultButtonColor() : Provider.of<Settings>(context).theme.mainTextColor(),
|
color: Provider.of<ServerListState>(context).servers.isEmpty ? Provider.of<Settings>(context).theme.defaultButtonColor : Provider.of<Settings>(context).theme.mainTextColor,
|
||||||
tooltip: AppLocalizations.of(context)!.tooltipUnlockProfiles,
|
tooltip: AppLocalizations.of(context)!.tooltipUnlockProfiles,
|
||||||
onPressed: _modalUnlockServers,
|
onPressed: _modalUnlockServers,
|
||||||
));
|
));
|
||||||
|
|
|
@ -28,7 +28,7 @@ class SplashView extends StatelessWidget {
|
||||||
padding: const EdgeInsets.all(20.0),
|
padding: const EdgeInsets.all(20.0),
|
||||||
child: Text(appState.appError == "" ? "Loading Cwtch..." : appState.appError,
|
child: Text(appState.appError == "" ? "Loading Cwtch..." : appState.appError,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 16.0, color: appState.appError == "" ? Provider.of<Settings>(context).theme.mainTextColor() : Provider.of<Settings>(context).theme.textfieldErrorColor())),
|
fontSize: 16.0, color: appState.appError == "" ? Provider.of<Settings>(context).theme.mainTextColor : Provider.of<Settings>(context).theme.textfieldErrorColor)),
|
||||||
),
|
),
|
||||||
Image(image: AssetImage("assets/Open_Privacy_Logo_lightoutline.png")),
|
Image(image: AssetImage("assets/Open_Privacy_Logo_lightoutline.png")),
|
||||||
])),
|
])),
|
||||||
|
|
|
@ -48,23 +48,23 @@ class _CwtchButtonTextFieldState extends State<CwtchButtonTextField> {
|
||||||
padding: EdgeInsets.fromLTRB(0.0, 4.0, 2.0, 2.0),
|
padding: EdgeInsets.fromLTRB(0.0, 4.0, 2.0, 2.0),
|
||||||
tooltip: widget.tooltip,
|
tooltip: widget.tooltip,
|
||||||
enableFeedback: true,
|
enableFeedback: true,
|
||||||
color: theme.current().mainTextColor(),
|
color: theme.current().mainTextColor,
|
||||||
highlightColor: theme.current().defaultButtonColor(),
|
highlightColor: theme.current().defaultButtonColor,
|
||||||
focusColor: theme.current().defaultButtonActiveColor(),
|
focusColor: theme.current().defaultButtonActiveColor,
|
||||||
splashColor: theme.current().defaultButtonActiveColor(),
|
splashColor: theme.current().defaultButtonActiveColor,
|
||||||
),
|
),
|
||||||
floatingLabelBehavior: FloatingLabelBehavior.never,
|
floatingLabelBehavior: FloatingLabelBehavior.never,
|
||||||
filled: true,
|
filled: true,
|
||||||
fillColor: theme.current().textfieldBackgroundColor(),
|
fillColor: theme.current().textfieldBackgroundColor,
|
||||||
focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor(), width: 3.0)),
|
focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor, width: 3.0)),
|
||||||
focusedErrorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor(), width: 3.0)),
|
focusedErrorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor, width: 3.0)),
|
||||||
errorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor(), width: 3.0)),
|
errorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor, width: 3.0)),
|
||||||
errorStyle: TextStyle(
|
errorStyle: TextStyle(
|
||||||
color: theme.current().textfieldErrorColor(),
|
color: theme.current().textfieldErrorColor,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
),
|
),
|
||||||
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
|
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
|
||||||
enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor(), width: 3.0))),
|
enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor, width: 3.0))),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ class _ContactRowState extends State<ContactRow> {
|
||||||
var contact = Provider.of<ContactInfoState>(context);
|
var contact = Provider.of<ContactInfoState>(context);
|
||||||
return Card(
|
return Card(
|
||||||
clipBehavior: Clip.antiAlias,
|
clipBehavior: Clip.antiAlias,
|
||||||
color: Provider.of<AppState>(context).selectedConversation == contact.onion ? Provider.of<Settings>(context).theme.backgroundHilightElementColor() : null,
|
color: Provider.of<AppState>(context).selectedConversation == contact.onion ? Provider.of<Settings>(context).theme.backgroundHilightElementColor : null,
|
||||||
borderOnForeground: false,
|
borderOnForeground: false,
|
||||||
margin: EdgeInsets.all(0.0),
|
margin: EdgeInsets.all(0.0),
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
|
@ -32,16 +32,16 @@ class _ContactRowState extends State<ContactRow> {
|
||||||
padding: const EdgeInsets.all(6.0), //border size
|
padding: const EdgeInsets.all(6.0), //border size
|
||||||
child: ProfileImage(
|
child: ProfileImage(
|
||||||
badgeCount: contact.unreadMessages,
|
badgeCount: contact.unreadMessages,
|
||||||
badgeColor: Provider.of<Settings>(context).theme.portraitContactBadgeColor(),
|
badgeColor: Provider.of<Settings>(context).theme.portraitContactBadgeColor,
|
||||||
badgeTextColor: Provider.of<Settings>(context).theme.portraitContactBadgeTextColor(),
|
badgeTextColor: Provider.of<Settings>(context).theme.portraitContactBadgeTextColor,
|
||||||
diameter: 64.0,
|
diameter: 64.0,
|
||||||
imagePath: contact.imagePath,
|
imagePath: contact.imagePath,
|
||||||
maskOut: !contact.isOnline(),
|
maskOut: !contact.isOnline(),
|
||||||
border: contact.isOnline()
|
border: contact.isOnline()
|
||||||
? Provider.of<Settings>(context).theme.portraitOnlineBorderColor()
|
? Provider.of<Settings>(context).theme.portraitOnlineBorderColor
|
||||||
: contact.isBlocked
|
: contact.isBlocked
|
||||||
? Provider.of<Settings>(context).theme.portraitBlockedBorderColor()
|
? Provider.of<Settings>(context).theme.portraitBlockedBorderColor
|
||||||
: Provider.of<Settings>(context).theme.portraitOfflineBorderColor()),
|
: Provider.of<Settings>(context).theme.portraitOfflineBorderColor),
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
|
@ -55,20 +55,20 @@ class _ContactRowState extends State<ContactRow> {
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: Provider.of<Settings>(context).theme.contactOnionTextSize(),
|
fontSize: Provider.of<Settings>(context).theme.contactOnionTextSize(),
|
||||||
color: contact.isBlocked
|
color: contact.isBlocked
|
||||||
? Provider.of<Settings>(context).theme.portraitBlockedTextColor()
|
? Provider.of<Settings>(context).theme.portraitBlockedTextColor
|
||||||
: Provider.of<Settings>(context).theme.mainTextColor()), //Provider.of<FlwtchState>(context).biggerFont,
|
: Provider.of<Settings>(context).theme.mainTextColor), //Provider.of<FlwtchState>(context).biggerFont,
|
||||||
softWrap: true,
|
softWrap: true,
|
||||||
overflow: TextOverflow.visible,
|
overflow: TextOverflow.visible,
|
||||||
),
|
),
|
||||||
Visibility(
|
Visibility(
|
||||||
visible: contact.isGroup && contact.status == "Authenticated",
|
visible: contact.isGroup && contact.status == "Authenticated",
|
||||||
child: LinearProgressIndicator(
|
child: LinearProgressIndicator(
|
||||||
color: Provider.of<Settings>(context).theme.defaultButtonActiveColor(),
|
color: Provider.of<Settings>(context).theme.defaultButtonActiveColor,
|
||||||
)),
|
)),
|
||||||
Visibility(
|
Visibility(
|
||||||
visible: !Provider.of<Settings>(context).streamerMode,
|
visible: !Provider.of<Settings>(context).streamerMode,
|
||||||
child: Text(contact.onion,
|
child: Text(contact.onion,
|
||||||
style: TextStyle(color: contact.isBlocked ? Provider.of<Settings>(context).theme.portraitBlockedTextColor() : Provider.of<Settings>(context).theme.mainTextColor())),
|
style: TextStyle(color: contact.isBlocked ? Provider.of<Settings>(context).theme.portraitBlockedTextColor : Provider.of<Settings>(context).theme.mainTextColor)),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
))),
|
))),
|
||||||
|
@ -81,7 +81,7 @@ class _ContactRowState extends State<ContactRow> {
|
||||||
iconSize: 16,
|
iconSize: 16,
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
Icons.favorite,
|
Icons.favorite,
|
||||||
color: Provider.of<Settings>(context).theme.mainTextColor(),
|
color: Provider.of<Settings>(context).theme.mainTextColor,
|
||||||
),
|
),
|
||||||
tooltip: AppLocalizations.of(context)!.tooltipAcceptContactRequest,
|
tooltip: AppLocalizations.of(context)!.tooltipAcceptContactRequest,
|
||||||
onPressed: _btnApprove,
|
onPressed: _btnApprove,
|
||||||
|
@ -89,7 +89,7 @@ class _ContactRowState extends State<ContactRow> {
|
||||||
IconButton(
|
IconButton(
|
||||||
padding: EdgeInsets.zero,
|
padding: EdgeInsets.zero,
|
||||||
iconSize: 16,
|
iconSize: 16,
|
||||||
icon: Icon(Icons.delete, color: Provider.of<Settings>(context).theme.mainTextColor()),
|
icon: Icon(Icons.delete, color: Provider.of<Settings>(context).theme.mainTextColor),
|
||||||
tooltip: AppLocalizations.of(context)!.tooltipRejectContactRequest,
|
tooltip: AppLocalizations.of(context)!.tooltipRejectContactRequest,
|
||||||
onPressed: _btnReject,
|
onPressed: _btnReject,
|
||||||
)
|
)
|
||||||
|
@ -98,7 +98,7 @@ class _ContactRowState extends State<ContactRow> {
|
||||||
? IconButton(
|
? IconButton(
|
||||||
padding: EdgeInsets.zero,
|
padding: EdgeInsets.zero,
|
||||||
iconSize: 16,
|
iconSize: 16,
|
||||||
icon: Icon(Icons.block, color: Provider.of<Settings>(context).theme.mainTextColor()),
|
icon: Icon(Icons.block, color: Provider.of<Settings>(context).theme.mainTextColor),
|
||||||
onPressed: () {},
|
onPressed: () {},
|
||||||
)
|
)
|
||||||
: Text(dateToNiceString(contact.lastMessageTime))),
|
: Text(dateToNiceString(contact.lastMessageTime))),
|
||||||
|
|
|
@ -18,7 +18,7 @@ class _CwtchLabelState extends State<CwtchLabel> {
|
||||||
return Consumer<Settings>(builder: (context, theme, child) {
|
return Consumer<Settings>(builder: (context, theme, child) {
|
||||||
return Text(
|
return Text(
|
||||||
widget.label,
|
widget.label,
|
||||||
style: TextStyle(fontSize: 20, color: theme.current().mainTextColor()),
|
style: TextStyle(fontSize: 20, color: theme.current().mainTextColor),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ class FileBubbleState extends State<FileBubble> {
|
||||||
var wdgSender = Center(
|
var wdgSender = Center(
|
||||||
widthFactor: 1,
|
widthFactor: 1,
|
||||||
child: SelectableText(senderDisplayStr + '\u202F',
|
child: SelectableText(senderDisplayStr + '\u202F',
|
||||||
style: TextStyle(fontSize: 9.0, color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor() : Provider.of<Settings>(context).theme.messageFromOtherTextColor())));
|
style: TextStyle(fontSize: 9.0, color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor : Provider.of<Settings>(context).theme.messageFromOtherTextColor)));
|
||||||
|
|
||||||
var wdgMessage = !showFileSharing
|
var wdgMessage = !showFileSharing
|
||||||
? Text(AppLocalizations.of(context)!.messageEnableFileSharing)
|
? Text(AppLocalizations.of(context)!.messageEnableFileSharing)
|
||||||
|
@ -84,7 +84,7 @@ class FileBubbleState extends State<FileBubble> {
|
||||||
} else {
|
} else {
|
||||||
wdgDecorations = LinearProgressIndicator(
|
wdgDecorations = LinearProgressIndicator(
|
||||||
value: Provider.of<ProfileInfoState>(context).downloadProgress(widget.fileKey()),
|
value: Provider.of<ProfileInfoState>(context).downloadProgress(widget.fileKey()),
|
||||||
color: Provider.of<Settings>(context).theme.defaultButtonActiveColor(),
|
color: Provider.of<Settings>(context).theme.defaultButtonActiveColor,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else if (flagStarted) {
|
} else if (flagStarted) {
|
||||||
|
@ -114,9 +114,9 @@ class FileBubbleState extends State<FileBubble> {
|
||||||
widthFactor: 1.0,
|
widthFactor: 1.0,
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor() : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor(),
|
color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor,
|
||||||
border:
|
border:
|
||||||
Border.all(color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor() : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor(), width: 1),
|
Border.all(color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor, width: 1),
|
||||||
borderRadius: BorderRadius.only(
|
borderRadius: BorderRadius.only(
|
||||||
topLeft: Radius.circular(borderRadiousEh),
|
topLeft: Radius.circular(borderRadiousEh),
|
||||||
topRight: Radius.circular(borderRadiousEh),
|
topRight: Radius.circular(borderRadiousEh),
|
||||||
|
@ -196,7 +196,7 @@ class FileBubbleState extends State<FileBubble> {
|
||||||
SelectableText(
|
SelectableText(
|
||||||
chrome + '\u202F',
|
chrome + '\u202F',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Provider.of<Settings>(context).theme.messageFromMeTextColor(),
|
color: Provider.of<Settings>(context).theme.messageFromMeTextColor,
|
||||||
),
|
),
|
||||||
textAlign: TextAlign.left,
|
textAlign: TextAlign.left,
|
||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
|
@ -205,7 +205,7 @@ class FileBubbleState extends State<FileBubble> {
|
||||||
SelectableText(
|
SelectableText(
|
||||||
fileName + '\u202F',
|
fileName + '\u202F',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Provider.of<Settings>(context).theme.messageFromMeTextColor(),
|
color: Provider.of<Settings>(context).theme.messageFromMeTextColor,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
),
|
),
|
||||||
|
@ -216,7 +216,7 @@ class FileBubbleState extends State<FileBubble> {
|
||||||
SelectableText(
|
SelectableText(
|
||||||
prettyBytes(fileSize) + '\u202F' + '\n',
|
prettyBytes(fileSize) + '\u202F' + '\n',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Provider.of<Settings>(context).theme.messageFromMeTextColor(),
|
color: Provider.of<Settings>(context).theme.messageFromMeTextColor,
|
||||||
),
|
),
|
||||||
textAlign: TextAlign.left,
|
textAlign: TextAlign.left,
|
||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
|
@ -225,7 +225,7 @@ class FileBubbleState extends State<FileBubble> {
|
||||||
subtitle: SelectableText(
|
subtitle: SelectableText(
|
||||||
'sha512: ' + rootHash + '\u202F',
|
'sha512: ' + rootHash + '\u202F',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Provider.of<Settings>(context).theme.messageFromMeTextColor(),
|
color: Provider.of<Settings>(context).theme.messageFromMeTextColor,
|
||||||
fontSize: 10,
|
fontSize: 10,
|
||||||
fontFamily: "monospace",
|
fontFamily: "monospace",
|
||||||
),
|
),
|
||||||
|
@ -233,7 +233,7 @@ class FileBubbleState extends State<FileBubble> {
|
||||||
maxLines: 4,
|
maxLines: 4,
|
||||||
textWidthBasis: TextWidthBasis.parent,
|
textWidthBasis: TextWidthBasis.parent,
|
||||||
),
|
),
|
||||||
leading: Icon(Icons.attach_file, size: 32, color: Provider.of<Settings>(context).theme.messageFromMeTextColor()));
|
leading: Icon(Icons.attach_file, size: 32, color: Provider.of<Settings>(context).theme.messageFromMeTextColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Construct an file chrome
|
// Construct an file chrome
|
||||||
|
@ -244,7 +244,7 @@ class FileBubbleState extends State<FileBubble> {
|
||||||
SelectableText(
|
SelectableText(
|
||||||
chrome + '\u202F',
|
chrome + '\u202F',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Provider.of<Settings>(context).theme.messageFromOtherTextColor(),
|
color: Provider.of<Settings>(context).theme.messageFromOtherTextColor,
|
||||||
),
|
),
|
||||||
textAlign: TextAlign.left,
|
textAlign: TextAlign.left,
|
||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
|
@ -253,7 +253,7 @@ class FileBubbleState extends State<FileBubble> {
|
||||||
SelectableText(
|
SelectableText(
|
||||||
fileName + '\u202F',
|
fileName + '\u202F',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Provider.of<Settings>(context).theme.messageFromOtherTextColor(),
|
color: Provider.of<Settings>(context).theme.messageFromOtherTextColor,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
),
|
),
|
||||||
|
@ -264,7 +264,7 @@ class FileBubbleState extends State<FileBubble> {
|
||||||
SelectableText(
|
SelectableText(
|
||||||
AppLocalizations.of(context)!.labelFilesize + ': ' + prettyBytes(fileSize) + '\u202F' + '\n',
|
AppLocalizations.of(context)!.labelFilesize + ': ' + prettyBytes(fileSize) + '\u202F' + '\n',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Provider.of<Settings>(context).theme.messageFromOtherTextColor(),
|
color: Provider.of<Settings>(context).theme.messageFromOtherTextColor,
|
||||||
),
|
),
|
||||||
textAlign: TextAlign.left,
|
textAlign: TextAlign.left,
|
||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
|
@ -273,7 +273,7 @@ class FileBubbleState extends State<FileBubble> {
|
||||||
subtitle: SelectableText(
|
subtitle: SelectableText(
|
||||||
'sha512: ' + rootHash + '\u202F',
|
'sha512: ' + rootHash + '\u202F',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Provider.of<Settings>(context).theme.messageFromMeTextColor(),
|
color: Provider.of<Settings>(context).theme.messageFromMeTextColor,
|
||||||
fontSize: 10,
|
fontSize: 10,
|
||||||
fontFamily: "monospace",
|
fontFamily: "monospace",
|
||||||
),
|
),
|
||||||
|
@ -281,13 +281,13 @@ class FileBubbleState extends State<FileBubble> {
|
||||||
maxLines: 4,
|
maxLines: 4,
|
||||||
textWidthBasis: TextWidthBasis.parent,
|
textWidthBasis: TextWidthBasis.parent,
|
||||||
),
|
),
|
||||||
leading: Icon(Icons.attach_file, size: 32, color: Provider.of<Settings>(context).theme.messageFromOtherTextColor()),
|
leading: Icon(Icons.attach_file, size: 32, color: Provider.of<Settings>(context).theme.messageFromOtherTextColor),
|
||||||
trailing: Visibility(
|
trailing: Visibility(
|
||||||
visible: speed != "0 B/s",
|
visible: speed != "0 B/s",
|
||||||
child: SelectableText(
|
child: SelectableText(
|
||||||
speed + '\u202F',
|
speed + '\u202F',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Provider.of<Settings>(context).theme.messageFromMeTextColor(),
|
color: Provider.of<Settings>(context).theme.messageFromMeTextColor,
|
||||||
),
|
),
|
||||||
textAlign: TextAlign.left,
|
textAlign: TextAlign.left,
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
|
|
|
@ -56,7 +56,7 @@ class InvitationBubbleState extends State<InvitationBubble> {
|
||||||
var wdgSender = Center(
|
var wdgSender = Center(
|
||||||
widthFactor: 1,
|
widthFactor: 1,
|
||||||
child: SelectableText(senderDisplayStr + '\u202F',
|
child: SelectableText(senderDisplayStr + '\u202F',
|
||||||
style: TextStyle(fontSize: 9.0, color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor() : Provider.of<Settings>(context).theme.messageFromOtherTextColor())));
|
style: TextStyle(fontSize: 9.0, color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor : Provider.of<Settings>(context).theme.messageFromOtherTextColor)));
|
||||||
|
|
||||||
// If we receive an invite for ourselves, treat it as a bug. The UI no longer allows this so it could have only come from
|
// If we receive an invite for ourselves, treat it as a bug. The UI no longer allows this so it could have only come from
|
||||||
// some kind of malfeasance.
|
// some kind of malfeasance.
|
||||||
|
@ -96,9 +96,9 @@ class InvitationBubbleState extends State<InvitationBubble> {
|
||||||
widthFactor: 1.0,
|
widthFactor: 1.0,
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor() : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor(),
|
color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor,
|
||||||
border:
|
border:
|
||||||
Border.all(color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor() : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor(), width: 1),
|
Border.all(color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor, width: 1),
|
||||||
borderRadius: BorderRadius.only(
|
borderRadius: BorderRadius.only(
|
||||||
topLeft: Radius.circular(borderRadiousEh),
|
topLeft: Radius.circular(borderRadiousEh),
|
||||||
topRight: Radius.circular(borderRadiousEh),
|
topRight: Radius.circular(borderRadiousEh),
|
||||||
|
@ -149,7 +149,7 @@ class InvitationBubbleState extends State<InvitationBubble> {
|
||||||
SelectableText(
|
SelectableText(
|
||||||
chrome + '\u202F',
|
chrome + '\u202F',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Provider.of<Settings>(context).theme.messageFromMeTextColor(),
|
color: Provider.of<Settings>(context).theme.messageFromMeTextColor,
|
||||||
),
|
),
|
||||||
textAlign: TextAlign.left,
|
textAlign: TextAlign.left,
|
||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
|
@ -158,7 +158,7 @@ class InvitationBubbleState extends State<InvitationBubble> {
|
||||||
SelectableText(
|
SelectableText(
|
||||||
targetName + '\u202F',
|
targetName + '\u202F',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Provider.of<Settings>(context).theme.messageFromMeTextColor(),
|
color: Provider.of<Settings>(context).theme.messageFromMeTextColor,
|
||||||
),
|
),
|
||||||
textAlign: TextAlign.left,
|
textAlign: TextAlign.left,
|
||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
|
@ -173,7 +173,7 @@ class InvitationBubbleState extends State<InvitationBubble> {
|
||||||
SelectableText(
|
SelectableText(
|
||||||
chrome + '\u202F',
|
chrome + '\u202F',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Provider.of<Settings>(context).theme.messageFromOtherTextColor(),
|
color: Provider.of<Settings>(context).theme.messageFromOtherTextColor,
|
||||||
),
|
),
|
||||||
textAlign: TextAlign.left,
|
textAlign: TextAlign.left,
|
||||||
textWidthBasis: TextWidthBasis.longestLine,
|
textWidthBasis: TextWidthBasis.longestLine,
|
||||||
|
@ -181,7 +181,7 @@ class InvitationBubbleState extends State<InvitationBubble> {
|
||||||
),
|
),
|
||||||
SelectableText(
|
SelectableText(
|
||||||
targetName + '\u202F',
|
targetName + '\u202F',
|
||||||
style: TextStyle(color: Provider.of<Settings>(context).theme.messageFromOtherTextColor()),
|
style: TextStyle(color: Provider.of<Settings>(context).theme.messageFromOtherTextColor),
|
||||||
textAlign: TextAlign.left,
|
textAlign: TextAlign.left,
|
||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
textWidthBasis: TextWidthBasis.longestLine,
|
textWidthBasis: TextWidthBasis.longestLine,
|
||||||
|
|
|
@ -48,7 +48,7 @@ class MessageBubbleState extends State<MessageBubble> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var wdgSender = SelectableText(senderDisplayStr,
|
var wdgSender = SelectableText(senderDisplayStr,
|
||||||
style: TextStyle(fontSize: 9.0, color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor() : Provider.of<Settings>(context).theme.messageFromOtherTextColor()));
|
style: TextStyle(fontSize: 9.0, color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor : Provider.of<Settings>(context).theme.messageFromOtherTextColor));
|
||||||
|
|
||||||
var wdgMessage;
|
var wdgMessage;
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ class MessageBubbleState extends State<MessageBubble> {
|
||||||
//key: Key(myKey),
|
//key: Key(myKey),
|
||||||
focusNode: _focus,
|
focusNode: _focus,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor() : Provider.of<Settings>(context).theme.messageFromOtherTextColor(),
|
color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor : Provider.of<Settings>(context).theme.messageFromOtherTextColor,
|
||||||
),
|
),
|
||||||
textAlign: TextAlign.left,
|
textAlign: TextAlign.left,
|
||||||
textWidthBasis: TextWidthBasis.longestLine,
|
textWidthBasis: TextWidthBasis.longestLine,
|
||||||
|
@ -75,10 +75,10 @@ class MessageBubbleState extends State<MessageBubble> {
|
||||||
//key: Key(myKey),
|
//key: Key(myKey),
|
||||||
focusNode: _focus,
|
focusNode: _focus,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor() : Provider.of<Settings>(context).theme.messageFromOtherTextColor(),
|
color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor : Provider.of<Settings>(context).theme.messageFromOtherTextColor,
|
||||||
),
|
),
|
||||||
linkStyle: TextStyle(
|
linkStyle: TextStyle(
|
||||||
color: Provider.of<Settings>(context).current().mainTextColor(),
|
color: Provider.of<Settings>(context).current().mainTextColor,
|
||||||
),
|
),
|
||||||
textAlign: TextAlign.left,
|
textAlign: TextAlign.left,
|
||||||
textWidthBasis: TextWidthBasis.longestLine,
|
textWidthBasis: TextWidthBasis.longestLine,
|
||||||
|
@ -97,11 +97,11 @@ class MessageBubbleState extends State<MessageBubble> {
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: error
|
color: error
|
||||||
? malformedColor
|
? malformedColor
|
||||||
: (fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor() : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor()),
|
: (fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor),
|
||||||
border: Border.all(
|
border: Border.all(
|
||||||
color: error
|
color: error
|
||||||
? malformedColor
|
? malformedColor
|
||||||
: (fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor() : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor()),
|
: (fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor),
|
||||||
width: 1),
|
width: 1),
|
||||||
borderRadius: BorderRadius.only(
|
borderRadius: BorderRadius.only(
|
||||||
topLeft: Radius.circular(borderRadiousEh),
|
topLeft: Radius.circular(borderRadiousEh),
|
||||||
|
|
|
@ -26,7 +26,7 @@ class _MessageBubbleDecoration extends State<MessageBubbleDecoration> {
|
||||||
children: [
|
children: [
|
||||||
Text(widget.prettyDate,
|
Text(widget.prettyDate,
|
||||||
style:
|
style:
|
||||||
TextStyle(fontSize: 9.0, color: widget.fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor() : Provider.of<Settings>(context).theme.messageFromOtherTextColor()),
|
TextStyle(fontSize: 9.0, color: widget.fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor : Provider.of<Settings>(context).theme.messageFromOtherTextColor),
|
||||||
textAlign: widget.fromMe ? TextAlign.right : TextAlign.left),
|
textAlign: widget.fromMe ? TextAlign.right : TextAlign.left),
|
||||||
!widget.fromMe
|
!widget.fromMe
|
||||||
? SizedBox(width: 1, height: 1)
|
? SizedBox(width: 1, height: 1)
|
||||||
|
@ -35,14 +35,14 @@ class _MessageBubbleDecoration extends State<MessageBubbleDecoration> {
|
||||||
child: widget.ackd == true
|
child: widget.ackd == true
|
||||||
? Tooltip(
|
? Tooltip(
|
||||||
message: AppLocalizations.of(context)!.acknowledgedLabel,
|
message: AppLocalizations.of(context)!.acknowledgedLabel,
|
||||||
child: Icon(Icons.check_circle_outline, color: Provider.of<Settings>(context).theme.messageFromMeTextColor(), size: 16))
|
child: Icon(Icons.check_circle_outline, color: Provider.of<Settings>(context).theme.messageFromMeTextColor, size: 16))
|
||||||
: (widget.errored == true
|
: (widget.errored == true
|
||||||
? Tooltip(
|
? Tooltip(
|
||||||
message: AppLocalizations.of(context)!.couldNotSendMsgError,
|
message: AppLocalizations.of(context)!.couldNotSendMsgError,
|
||||||
child: Icon(Icons.error_outline, color: Provider.of<Settings>(context).theme.messageFromMeTextColor(), size: 16))
|
child: Icon(Icons.error_outline, color: Provider.of<Settings>(context).theme.messageFromMeTextColor, size: 16))
|
||||||
: Tooltip(
|
: Tooltip(
|
||||||
message: AppLocalizations.of(context)!.pendingLabel,
|
message: AppLocalizations.of(context)!.pendingLabel,
|
||||||
child: Icon(Icons.hourglass_bottom_outlined, color: Provider.of<Settings>(context).theme.messageFromMeTextColor(), size: 16))))
|
child: Icon(Icons.hourglass_bottom_outlined, color: Provider.of<Settings>(context).theme.messageFromMeTextColor, size: 16))))
|
||||||
],
|
],
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,15 +35,15 @@ class _MessageListState extends State<MessageList> {
|
||||||
|
|
||||||
return RepaintBoundary(
|
return RepaintBoundary(
|
||||||
child: Container(
|
child: Container(
|
||||||
color: Provider.of<Settings>(context).theme.backgroundMainColor(),
|
color: Provider.of<Settings>(context).theme.backgroundMainColor,
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
Visibility(
|
Visibility(
|
||||||
visible: showMessageWarning,
|
visible: showMessageWarning,
|
||||||
child: Container(
|
child: Container(
|
||||||
padding: EdgeInsets.all(5.0),
|
padding: EdgeInsets.all(5.0),
|
||||||
color: Provider.of<Settings>(context).theme.defaultButtonActiveColor(),
|
color: Provider.of<Settings>(context).theme.defaultButtonActiveColor,
|
||||||
child: DefaultTextStyle(
|
child: DefaultTextStyle(
|
||||||
style: TextStyle(color: Provider.of<Settings>(context).theme.defaultButtonTextColor()),
|
style: TextStyle(color: Provider.of<Settings>(context).theme.defaultButtonTextColor),
|
||||||
child: showSyncing
|
child: showSyncing
|
||||||
? Text(AppLocalizations.of(context)!.serverNotSynced, textAlign: TextAlign.center)
|
? Text(AppLocalizations.of(context)!.serverNotSynced, textAlign: TextAlign.center)
|
||||||
: showOfflineWarning
|
: showOfflineWarning
|
||||||
|
@ -66,7 +66,7 @@ class _MessageListState extends State<MessageList> {
|
||||||
fit: BoxFit.scaleDown,
|
fit: BoxFit.scaleDown,
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
image: AssetImage("assets/core/negative_heart_512px.png"),
|
image: AssetImage("assets/core/negative_heart_512px.png"),
|
||||||
colorFilter: ColorFilter.mode(Provider.of<Settings>(context).theme.hilightElementColor(), BlendMode.srcIn))),
|
colorFilter: ColorFilter.mode(Provider.of<Settings>(context).theme.hilightElementColor, BlendMode.srcIn))),
|
||||||
// Don't load messages for syncing server...
|
// Don't load messages for syncing server...
|
||||||
child: loadMessages
|
child: loadMessages
|
||||||
? ScrollablePositionedList.builder(
|
? ScrollablePositionedList.builder(
|
||||||
|
|
|
@ -85,7 +85,7 @@ class MessageRowState extends State<MessageRow> with SingleTickerProviderStateMi
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Provider.of<AppState>(context, listen: false).selectedIndex = Provider.of<MessageMetadata>(context, listen: false).messageID;
|
Provider.of<AppState>(context, listen: false).selectedIndex = Provider.of<MessageMetadata>(context, listen: false).messageID;
|
||||||
},
|
},
|
||||||
icon: Icon(Icons.reply, color: Provider.of<Settings>(context).theme.dropShadowColor())));
|
icon: Icon(Icons.reply, color: Provider.of<Settings>(context).theme.dropShadowColor)));
|
||||||
Widget wdgSpacer = Flexible(child: SizedBox(width: 60, height: 10));
|
Widget wdgSpacer = Flexible(child: SizedBox(width: 60, height: 10));
|
||||||
var widgetRow = <Widget>[];
|
var widgetRow = <Widget>[];
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ class MessageRowState extends State<MessageRow> with SingleTickerProviderStateMi
|
||||||
actualMessage,
|
actualMessage,
|
||||||
];
|
];
|
||||||
} else if (isBlocked && !showBlockedMessage) {
|
} else if (isBlocked && !showBlockedMessage) {
|
||||||
Color blockedMessageBackground = Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor();
|
Color blockedMessageBackground = Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor;
|
||||||
Widget wdgPortrait = Padding(padding: EdgeInsets.all(4.0), child: Icon(CwtchIcons.account_blocked));
|
Widget wdgPortrait = Padding(padding: EdgeInsets.all(4.0), child: Icon(CwtchIcons.account_blocked));
|
||||||
widgetRow = <Widget>[
|
widgetRow = <Widget>[
|
||||||
wdgPortrait,
|
wdgPortrait,
|
||||||
|
@ -118,7 +118,7 @@ class MessageRowState extends State<MessageRow> with SingleTickerProviderStateMi
|
||||||
AppLocalizations.of(context)!.blockedMessageMessage,
|
AppLocalizations.of(context)!.blockedMessageMessage,
|
||||||
//key: Key(myKey),
|
//key: Key(myKey),
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Provider.of<Settings>(context).theme.messageFromOtherTextColor(),
|
color: Provider.of<Settings>(context).theme.messageFromOtherTextColor,
|
||||||
),
|
),
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
textWidthBasis: TextWidthBasis.longestLine,
|
textWidthBasis: TextWidthBasis.longestLine,
|
||||||
|
@ -152,8 +152,9 @@ class MessageRowState extends State<MessageRow> with SingleTickerProviderStateMi
|
||||||
diameter: 48.0,
|
diameter: 48.0,
|
||||||
imagePath: Provider.of<MessageMetadata>(context).senderImage ?? contact.imagePath,
|
imagePath: Provider.of<MessageMetadata>(context).senderImage ?? contact.imagePath,
|
||||||
//maskOut: contact.status != "Authenticated",
|
//maskOut: contact.status != "Authenticated",
|
||||||
border: contact.status == "Authenticated" ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor() : Provider.of<Settings>(context).theme.portraitOfflineBorderColor(),
|
border: contact.status == "Authenticated" ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor : Provider.of<Settings>(context).theme.portraitOfflineBorderColor,
|
||||||
badgeTextColor: Colors.red, badgeColor: Colors.red,
|
badgeTextColor: Colors.red,
|
||||||
|
badgeColor: Colors.red,
|
||||||
tooltip: isContact ? AppLocalizations.of(context)!.contactGoto.replaceFirst("%1", senderDisplayStr) : AppLocalizations.of(context)!.addContact,
|
tooltip: isContact ? AppLocalizations.of(context)!.contactGoto.replaceFirst("%1", senderDisplayStr) : AppLocalizations.of(context)!.addContact,
|
||||||
)));
|
)));
|
||||||
|
|
||||||
|
@ -216,8 +217,8 @@ class MessageRowState extends State<MessageRow> with SingleTickerProviderStateMi
|
||||||
Widget _bubbleNew() {
|
Widget _bubbleNew() {
|
||||||
return Container(
|
return Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: Provider.of<Settings>(context).theme.messageFromMeBackgroundColor(),
|
color: Provider.of<Settings>(context).theme.messageFromMeBackgroundColor,
|
||||||
border: Border.all(color: Provider.of<Settings>(context).theme.messageFromMeBackgroundColor(), width: 1),
|
border: Border.all(color: Provider.of<Settings>(context).theme.messageFromMeBackgroundColor, width: 1),
|
||||||
borderRadius: BorderRadius.only(
|
borderRadius: BorderRadius.only(
|
||||||
topLeft: Radius.circular(8),
|
topLeft: Radius.circular(8),
|
||||||
topRight: Radius.circular(8),
|
topRight: Radius.circular(8),
|
||||||
|
|
|
@ -53,21 +53,21 @@ class _CwtchTextFieldState extends State<CwtchPasswordField> {
|
||||||
},
|
},
|
||||||
icon: Icon((obscureText ? CwtchIcons.eye_closed : CwtchIcons.eye_open), semanticLabel: label),
|
icon: Icon((obscureText ? CwtchIcons.eye_closed : CwtchIcons.eye_open), semanticLabel: label),
|
||||||
tooltip: label,
|
tooltip: label,
|
||||||
color: theme.current().mainTextColor(),
|
color: theme.current().mainTextColor,
|
||||||
highlightColor: theme.current().defaultButtonColor(),
|
highlightColor: theme.current().defaultButtonColor,
|
||||||
focusColor: theme.current().defaultButtonActiveColor(),
|
focusColor: theme.current().defaultButtonActiveColor,
|
||||||
splashColor: theme.current().defaultButtonActiveColor(),
|
splashColor: theme.current().defaultButtonActiveColor,
|
||||||
),
|
),
|
||||||
errorStyle: TextStyle(
|
errorStyle: TextStyle(
|
||||||
color: theme.current().textfieldErrorColor(),
|
color: theme.current().textfieldErrorColor,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
),
|
),
|
||||||
focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor(), width: 3.0)),
|
focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor, width: 3.0)),
|
||||||
focusedErrorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor(), width: 3.0)),
|
focusedErrorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor, width: 3.0)),
|
||||||
errorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor(), width: 3.0)),
|
errorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor, width: 3.0)),
|
||||||
filled: true,
|
filled: true,
|
||||||
fillColor: theme.current().textfieldBackgroundColor(),
|
fillColor: theme.current().textfieldBackgroundColor,
|
||||||
enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor(), width: 3.0)),
|
enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor, width: 3.0)),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
@ -28,11 +28,11 @@ class _ProfileImageState extends State<ProfileImage> {
|
||||||
filterQuality: FilterQuality.medium,
|
filterQuality: FilterQuality.medium,
|
||||||
// We need some theme specific blending here...we might want to consider making this a theme level attribute
|
// We need some theme specific blending here...we might want to consider making this a theme level attribute
|
||||||
colorBlendMode: !widget.maskOut
|
colorBlendMode: !widget.maskOut
|
||||||
? Provider.of<Settings>(context).theme.identifier() == "dark"
|
? Provider.of<Settings>(context).theme.mode == mode_dark
|
||||||
? BlendMode.softLight
|
? BlendMode.softLight
|
||||||
: BlendMode.darken
|
: BlendMode.darken
|
||||||
: BlendMode.srcOut,
|
: BlendMode.srcOut,
|
||||||
color: Provider.of<Settings>(context).theme.portraitBackgroundColor(),
|
color: Provider.of<Settings>(context).theme.portraitBackgroundColor,
|
||||||
isAntiAlias: true,
|
isAntiAlias: true,
|
||||||
width: widget.diameter,
|
width: widget.diameter,
|
||||||
height: widget.diameter,
|
height: widget.diameter,
|
||||||
|
|
|
@ -32,11 +32,11 @@ class _ProfileRowState extends State<ProfileRow> {
|
||||||
padding: const EdgeInsets.all(6.0), //border size
|
padding: const EdgeInsets.all(6.0), //border size
|
||||||
child: ProfileImage(
|
child: ProfileImage(
|
||||||
badgeCount: 0,
|
badgeCount: 0,
|
||||||
badgeColor: Provider.of<Settings>(context).theme.portraitProfileBadgeColor(),
|
badgeColor: Provider.of<Settings>(context).theme.portraitProfileBadgeColor,
|
||||||
badgeTextColor: Provider.of<Settings>(context).theme.portraitProfileBadgeTextColor(),
|
badgeTextColor: Provider.of<Settings>(context).theme.portraitProfileBadgeTextColor,
|
||||||
diameter: 64.0,
|
diameter: 64.0,
|
||||||
imagePath: profile.imagePath,
|
imagePath: profile.imagePath,
|
||||||
border: profile.isOnline ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor() : Provider.of<Settings>(context).theme.portraitOfflineBorderColor())),
|
border: profile.isOnline ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor : Provider.of<Settings>(context).theme.portraitOfflineBorderColor)),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
|
@ -60,7 +60,7 @@ class _ProfileRowState extends State<ProfileRow> {
|
||||||
IconButton(
|
IconButton(
|
||||||
enableFeedback: true,
|
enableFeedback: true,
|
||||||
tooltip: AppLocalizations.of(context)!.editProfile + " " + profile.nickname,
|
tooltip: AppLocalizations.of(context)!.editProfile + " " + profile.nickname,
|
||||||
icon: Icon(Icons.create, color: Provider.of<Settings>(context).current().mainTextColor()),
|
icon: Icon(Icons.create, color: Provider.of<Settings>(context).current().mainTextColor),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
_pushEditProfile(onion: profile.onion, displayName: profile.nickname, profileImage: profile.imagePath, encrypted: profile.isEncrypted);
|
_pushEditProfile(onion: profile.onion, displayName: profile.nickname, profileImage: profile.imagePath, encrypted: profile.isEncrypted);
|
||||||
},
|
},
|
||||||
|
|
|
@ -42,13 +42,13 @@ class QuotedMessageBubbleState extends State<QuotedMessageBubble> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var wdgSender = SelectableText(senderDisplayStr,
|
var wdgSender = SelectableText(senderDisplayStr,
|
||||||
style: TextStyle(fontSize: 9.0, color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor() : Provider.of<Settings>(context).theme.messageFromOtherTextColor()));
|
style: TextStyle(fontSize: 9.0, color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor : Provider.of<Settings>(context).theme.messageFromOtherTextColor));
|
||||||
|
|
||||||
var wdgMessage = SelectableText(
|
var wdgMessage = SelectableText(
|
||||||
widget.body + '\u202F',
|
widget.body + '\u202F',
|
||||||
focusNode: _focus,
|
focusNode: _focus,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor() : Provider.of<Settings>(context).theme.messageFromOtherTextColor(),
|
color: fromMe ? Provider.of<Settings>(context).theme.messageFromMeTextColor : Provider.of<Settings>(context).theme.messageFromOtherTextColor,
|
||||||
),
|
),
|
||||||
textAlign: TextAlign.left,
|
textAlign: TextAlign.left,
|
||||||
textWidthBasis: TextWidthBasis.longestLine,
|
textWidthBasis: TextWidthBasis.longestLine,
|
||||||
|
@ -61,11 +61,11 @@ class QuotedMessageBubbleState extends State<QuotedMessageBubble> {
|
||||||
try {
|
try {
|
||||||
var qMessage = (snapshot.data! as Message);
|
var qMessage = (snapshot.data! as Message);
|
||||||
// Swap the background color for quoted tweets..
|
// Swap the background color for quoted tweets..
|
||||||
var qTextColor = fromMe ? Provider.of<Settings>(context).theme.messageFromOtherTextColor() : Provider.of<Settings>(context).theme.messageFromMeTextColor();
|
var qTextColor = fromMe ? Provider.of<Settings>(context).theme.messageFromOtherTextColor : Provider.of<Settings>(context).theme.messageFromMeTextColor;
|
||||||
return Container(
|
return Container(
|
||||||
margin: EdgeInsets.all(5),
|
margin: EdgeInsets.all(5),
|
||||||
padding: EdgeInsets.all(5),
|
padding: EdgeInsets.all(5),
|
||||||
color: fromMe ? Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor() : Provider.of<Settings>(context).theme.messageFromMeBackgroundColor(),
|
color: fromMe ? Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor : Provider.of<Settings>(context).theme.messageFromMeBackgroundColor,
|
||||||
child: Wrap(runAlignment: WrapAlignment.spaceEvenly, alignment: WrapAlignment.spaceEvenly, runSpacing: 1.0, crossAxisAlignment: WrapCrossAlignment.center, children: [
|
child: Wrap(runAlignment: WrapAlignment.spaceEvenly, alignment: WrapAlignment.spaceEvenly, runSpacing: 1.0, crossAxisAlignment: WrapCrossAlignment.center, children: [
|
||||||
Center(widthFactor: 1, child: Padding(padding: EdgeInsets.all(10.0), child: Icon(Icons.reply, size: 32, color: qTextColor))),
|
Center(widthFactor: 1, child: Padding(padding: EdgeInsets.all(10.0), child: Icon(Icons.reply, size: 32, color: qTextColor))),
|
||||||
Center(widthFactor: 1.0, child: DefaultTextStyle(child: qMessage.getPreviewWidget(context), style: TextStyle(color: qTextColor)))
|
Center(widthFactor: 1.0, child: DefaultTextStyle(child: qMessage.getPreviewWidget(context), style: TextStyle(color: qTextColor)))
|
||||||
|
@ -92,11 +92,11 @@ class QuotedMessageBubbleState extends State<QuotedMessageBubble> {
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: error
|
color: error
|
||||||
? malformedColor
|
? malformedColor
|
||||||
: (fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor() : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor()),
|
: (fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor),
|
||||||
border: Border.all(
|
border: Border.all(
|
||||||
color: error
|
color: error
|
||||||
? malformedColor
|
? malformedColor
|
||||||
: (fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor() : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor()),
|
: (fromMe ? Provider.of<Settings>(context).theme.messageFromMeBackgroundColor : Provider.of<Settings>(context).theme.messageFromOtherBackgroundColor),
|
||||||
width: 1),
|
width: 1),
|
||||||
borderRadius: BorderRadius.only(
|
borderRadius: BorderRadius.only(
|
||||||
topLeft: Radius.circular(borderRadiousEh),
|
topLeft: Radius.circular(borderRadiousEh),
|
||||||
|
|
|
@ -29,7 +29,7 @@ class _ServerRowState extends State<ServerRow> {
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.all(6.0), //border size
|
padding: const EdgeInsets.all(6.0), //border size
|
||||||
child: Icon(CwtchIcons.dns_24px,
|
child: Icon(CwtchIcons.dns_24px,
|
||||||
color: server.running ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor() : Provider.of<Settings>(context).theme.portraitOfflineBorderColor(), size: 64)),
|
color: server.running ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor : Provider.of<Settings>(context).theme.portraitOfflineBorderColor, size: 64)),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
|
@ -38,7 +38,7 @@ class _ServerRowState extends State<ServerRow> {
|
||||||
semanticsLabel: server.description,
|
semanticsLabel: server.description,
|
||||||
style: Provider.of<FlwtchState>(context)
|
style: Provider.of<FlwtchState>(context)
|
||||||
.biggerFont
|
.biggerFont
|
||||||
.apply(color: server.running ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor() : Provider.of<Settings>(context).theme.portraitOfflineBorderColor()),
|
.apply(color: server.running ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor : Provider.of<Settings>(context).theme.portraitOfflineBorderColor),
|
||||||
softWrap: true,
|
softWrap: true,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
),
|
),
|
||||||
|
@ -49,7 +49,7 @@ class _ServerRowState extends State<ServerRow> {
|
||||||
server.onion,
|
server.onion,
|
||||||
softWrap: true,
|
softWrap: true,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: TextStyle(color: server.running ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor() : Provider.of<Settings>(context).theme.portraitOfflineBorderColor()),
|
style: TextStyle(color: server.running ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor : Provider.of<Settings>(context).theme.portraitOfflineBorderColor),
|
||||||
)))
|
)))
|
||||||
],
|
],
|
||||||
)),
|
)),
|
||||||
|
@ -58,7 +58,7 @@ class _ServerRowState extends State<ServerRow> {
|
||||||
IconButton(
|
IconButton(
|
||||||
enableFeedback: true,
|
enableFeedback: true,
|
||||||
tooltip: AppLocalizations.of(context)!.copyServerKeys,
|
tooltip: AppLocalizations.of(context)!.copyServerKeys,
|
||||||
icon: Icon(CwtchIcons.address_copy_2, color: Provider.of<Settings>(context).current().mainTextColor()),
|
icon: Icon(CwtchIcons.address_copy_2, color: Provider.of<Settings>(context).current().mainTextColor),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Clipboard.setData(new ClipboardData(text: server.serverBundle));
|
Clipboard.setData(new ClipboardData(text: server.serverBundle));
|
||||||
},
|
},
|
||||||
|
@ -68,7 +68,7 @@ class _ServerRowState extends State<ServerRow> {
|
||||||
IconButton(
|
IconButton(
|
||||||
enableFeedback: true,
|
enableFeedback: true,
|
||||||
tooltip: AppLocalizations.of(context)!.editServerTitle,
|
tooltip: AppLocalizations.of(context)!.editServerTitle,
|
||||||
icon: Icon(Icons.create, color: Provider.of<Settings>(context).current().mainTextColor()),
|
icon: Icon(Icons.create, color: Provider.of<Settings>(context).current().mainTextColor),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
_pushEditServer(server);
|
_pushEditServer(server);
|
||||||
},
|
},
|
||||||
|
|
|
@ -45,17 +45,17 @@ class _CwtchTextFieldState extends State<CwtchTextField> {
|
||||||
hintText: widget.hintText,
|
hintText: widget.hintText,
|
||||||
floatingLabelBehavior: FloatingLabelBehavior.never,
|
floatingLabelBehavior: FloatingLabelBehavior.never,
|
||||||
filled: true,
|
filled: true,
|
||||||
focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor(), width: 3.0)),
|
focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor, width: 3.0)),
|
||||||
focusedErrorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor(), width: 3.0)),
|
focusedErrorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor, width: 3.0)),
|
||||||
|
|
||||||
errorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor(), width: 3.0)),
|
errorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldErrorColor, width: 3.0)),
|
||||||
errorStyle: TextStyle(
|
errorStyle: TextStyle(
|
||||||
color: theme.current().textfieldErrorColor(),
|
color: theme.current().textfieldErrorColor,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
),
|
),
|
||||||
fillColor: theme.current().textfieldBackgroundColor(),
|
fillColor: theme.current().textfieldBackgroundColor,
|
||||||
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
|
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
|
||||||
enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor(), width: 3.0))),
|
enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(15.0), borderSide: BorderSide(color: theme.current().textfieldBorderColor, width: 3.0))),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ class _TorIconState extends State<TorIcon> {
|
||||||
return RepaintBoundary(
|
return RepaintBoundary(
|
||||||
child: Icon(
|
child: Icon(
|
||||||
Provider.of<TorStatus>(context).progress == 0 ? CwtchIcons.onion_off : (Provider.of<TorStatus>(context).progress == 100 ? CwtchIcons.onion_on : CwtchIcons.onion_waiting),
|
Provider.of<TorStatus>(context).progress == 0 ? CwtchIcons.onion_off : (Provider.of<TorStatus>(context).progress == 100 ? CwtchIcons.onion_on : CwtchIcons.onion_waiting),
|
||||||
color: Provider.of<Settings>(context).theme.mainTextColor(),
|
color: Provider.of<Settings>(context).theme.mainTextColor,
|
||||||
semanticLabel: Provider.of<TorStatus>(context).progress == 100
|
semanticLabel: Provider.of<TorStatus>(context).progress == 100
|
||||||
? AppLocalizations.of(context)!.networkStatusOnline
|
? AppLocalizations.of(context)!.networkStatusOnline
|
||||||
: (Provider.of<TorStatus>(context).progress == 0 ? AppLocalizations.of(context)!.networkStatusDisconnected : AppLocalizations.of(context)!.networkStatusAttemptingTor),
|
: (Provider.of<TorStatus>(context).progress == 0 ? AppLocalizations.of(context)!.networkStatusDisconnected : AppLocalizations.of(context)!.networkStatusAttemptingTor),
|
||||||
|
|
|
@ -33,10 +33,10 @@ void main() {
|
||||||
|
|
||||||
Widget testWidget = ProfileImage(
|
Widget testWidget = ProfileImage(
|
||||||
imagePath: "profiles/001-centaur.png",
|
imagePath: "profiles/001-centaur.png",
|
||||||
badgeTextColor: settingsEnglishDark.theme.portraitProfileBadgeTextColor(),
|
badgeTextColor: settingsEnglishDark.theme.portraitProfileBadgeTextColor,
|
||||||
badgeColor: settingsEnglishDark.theme.portraitProfileBadgeColor(),
|
badgeColor: settingsEnglishDark.theme.portraitProfileBadgeColor,
|
||||||
maskOut: false,
|
maskOut: false,
|
||||||
border: settingsEnglishDark.theme.portraitOfflineBorderColor(),
|
border: settingsEnglishDark.theme.portraitOfflineBorderColor,
|
||||||
diameter: 64.0,
|
diameter: 64.0,
|
||||||
badgeCount: 10,
|
badgeCount: 10,
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue