diff --git a/assets/fonts/Inter-OFL.txt b/assets/fonts/Inter-OFL.txt
new file mode 100644
index 00000000..21f6aff9
--- /dev/null
+++ b/assets/fonts/Inter-OFL.txt
@@ -0,0 +1,93 @@
+Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/assets/fonts/Inter.ttf b/assets/fonts/Inter.ttf
new file mode 100644
index 00000000..047c92f6
Binary files /dev/null and b/assets/fonts/Inter.ttf differ
diff --git a/assets/fonts/InterItalic.ttf b/assets/fonts/InterItalic.ttf
new file mode 100644
index 00000000..c1775784
Binary files /dev/null and b/assets/fonts/InterItalic.ttf differ
diff --git a/assets/fonts/JetBrainsMono-OFL.txt b/assets/fonts/JetBrainsMono-OFL.txt
new file mode 100644
index 00000000..821a3dac
--- /dev/null
+++ b/assets/fonts/JetBrainsMono-OFL.txt
@@ -0,0 +1,93 @@
+Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+
+This license is copied below, and is also available with a FAQ at: https://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/assets/fonts/JetBrainsMono.ttf b/assets/fonts/JetBrainsMono.ttf
new file mode 100644
index 00000000..aa310be8
Binary files /dev/null and b/assets/fonts/JetBrainsMono.ttf differ
diff --git a/ios/ExportOptions.plist b/ios/ExportOptions.plist
new file mode 100644
index 00000000..aadd0dac
--- /dev/null
+++ b/ios/ExportOptions.plist
@@ -0,0 +1,16 @@
+
+
+
+
+ method
+ app-store-connect
+ teamID
+ X74VJ4UAST
+ signingStyle
+ automatic
+ uploadSymbols
+
+ destination
+ export
+
+
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index b0e98ca4..bc43ea0c 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -1,73 +1,21 @@
PODS:
- Flutter (1.0.0)
- - flutter_blue_plus_darwin (0.0.2):
- - Flutter
- - FlutterMacOS
- flutter_foreground_task (0.0.1):
- Flutter
- - flutter_local_notifications (0.0.1):
- - Flutter
- - mobile_scanner (7.0.0):
- - Flutter
- - FlutterMacOS
- - package_info_plus (0.4.5):
- - Flutter
- - share_plus (0.0.1):
- - Flutter
- - shared_preferences_foundation (0.0.1):
- - Flutter
- - FlutterMacOS
- - sqflite_darwin (0.0.4):
- - Flutter
- - FlutterMacOS
- - url_launcher_ios (0.0.1):
- - Flutter
DEPENDENCIES:
- Flutter (from `Flutter`)
- - flutter_blue_plus_darwin (from `.symlinks/plugins/flutter_blue_plus_darwin/darwin`)
- flutter_foreground_task (from `.symlinks/plugins/flutter_foreground_task/ios`)
- - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
- - mobile_scanner (from `.symlinks/plugins/mobile_scanner/darwin`)
- - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- - share_plus (from `.symlinks/plugins/share_plus/ios`)
- - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- - sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
- - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
EXTERNAL SOURCES:
Flutter:
:path: Flutter
- flutter_blue_plus_darwin:
- :path: ".symlinks/plugins/flutter_blue_plus_darwin/darwin"
flutter_foreground_task:
:path: ".symlinks/plugins/flutter_foreground_task/ios"
- flutter_local_notifications:
- :path: ".symlinks/plugins/flutter_local_notifications/ios"
- mobile_scanner:
- :path: ".symlinks/plugins/mobile_scanner/darwin"
- package_info_plus:
- :path: ".symlinks/plugins/package_info_plus/ios"
- share_plus:
- :path: ".symlinks/plugins/share_plus/ios"
- shared_preferences_foundation:
- :path: ".symlinks/plugins/shared_preferences_foundation/darwin"
- sqflite_darwin:
- :path: ".symlinks/plugins/sqflite_darwin/darwin"
- url_launcher_ios:
- :path: ".symlinks/plugins/url_launcher_ios/ios"
SPEC CHECKSUMS:
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
- flutter_blue_plus_darwin: 20a08bfeaa0f7804d524858d3d8744bcc1b6dbc3
flutter_foreground_task: a159d2c2173b33699ddb3e6c2a067045d7cebb89
- flutter_local_notifications: a5a732f069baa862e728d839dd2ebb904737effb
- mobile_scanner: 9157936403f5a0644ca3779a38ff8404c5434a93
- package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
- share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a
- shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb
- sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
- url_launcher_ios: 7a95fa5b60cc718a708b8f2966718e93db0cef1b
PODFILE CHECKSUM: e42b502c78c33aa1ed9d42eaea8960ce2139504b
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 7bf9b4cd..52009fe5 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -11,6 +11,7 @@
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+ 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
@@ -52,6 +53,7 @@
718BC7DCCFC5C370705C12E5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
@@ -67,6 +69,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */,
9A698254711B63C3940A64CB /* libPods-Runner.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -85,6 +88,7 @@
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
+ 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */,
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
@@ -180,13 +184,15 @@
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
F0D7F2413C6E4B7A9B1C2D3E /* Fix Native Asset Minimum OS */,
- B788CEDB957A87EE8AC593BB /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
);
name = Runner;
+ packageProductDependencies = (
+ 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */,
+ );
productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
productType = "com.apple.product-type.application";
@@ -220,6 +226,9 @@
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
+ packageReferences = (
+ 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */,
+ );
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
@@ -283,39 +292,6 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
- B788CEDB957A87EE8AC593BB /* [CP] Copy Pods Resources */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
- );
- name = "[CP] Copy Pods Resources";
- outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
- showEnvVarsInLog = 0;
- };
- F0D7F2413C6E4B7A9B1C2D3E /* Fix Native Asset Minimum OS */ = {
- isa = PBXShellScriptBuildPhase;
- alwaysOutOfDate = 1;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}",
- );
- name = "Fix Native Asset Minimum OS";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "set -e\nFRAMEWORKS_DIR=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nMIN_OS=\"${IPHONEOS_DEPLOYMENT_TARGET}\"\nif [ ! -d \"$FRAMEWORKS_DIR\" ] || [ -z \"$MIN_OS\" ]; then\n exit 0\nfi\nfind \"$FRAMEWORKS_DIR\" -maxdepth 2 -name Info.plist | while read -r plist; do\n bundle_id=$(/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' \"$plist\" 2>/dev/null || true)\n case \"$bundle_id\" in\n io.flutter.flutter.native-assets.*)\n /usr/libexec/PlistBuddy -c \"Set :MinimumOSVersion $MIN_OS\" \"$plist\" 2>/dev/null || \\\n /usr/libexec/PlistBuddy -c \"Add :MinimumOSVersion string $MIN_OS\" \"$plist\"\n ;;\n esac\ndone\n";
- };
DE3B2E091393835C0B38492E /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -338,6 +314,22 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
+ F0D7F2413C6E4B7A9B1C2D3E /* Fix Native Asset Minimum OS */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}",
+ );
+ name = "Fix Native Asset Minimum OS";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "set -e\nFRAMEWORKS_DIR=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nMIN_OS=\"${IPHONEOS_DEPLOYMENT_TARGET}\"\nif [ ! -d \"$FRAMEWORKS_DIR\" ] || [ -z \"$MIN_OS\" ]; then\n exit 0\nfi\nfind \"$FRAMEWORKS_DIR\" -maxdepth 2 -name Info.plist | while read -r plist; do\n bundle_id=$(/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' \"$plist\" 2>/dev/null || true)\n case \"$bundle_id\" in\n io.flutter.flutter.native-assets.*)\n /usr/libexec/PlistBuddy -c \"Set :MinimumOSVersion $MIN_OS\" \"$plist\" 2>/dev/null || \\\n /usr/libexec/PlistBuddy -c \"Add :MinimumOSVersion string $MIN_OS\" \"$plist\"\n ;;\n esac\ndone\n";
+ };
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@@ -446,7 +438,9 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = X74VJ4UAST;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -625,7 +619,9 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = X74VJ4UAST;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -647,7 +643,9 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = X74VJ4UAST;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -696,6 +694,20 @@
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
+
+/* Begin XCLocalSwiftPackageReference section */
+ 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = {
+ isa = XCLocalSwiftPackageReference;
+ relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage;
+ };
+/* End XCLocalSwiftPackageReference section */
+
+/* Begin XCSwiftPackageProductDependency section */
+ 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = {
+ isa = XCSwiftPackageProductDependency;
+ productName = FlutterGeneratedPluginSwiftPackage;
+ };
+/* End XCSwiftPackageProductDependency section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}
diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index e3773d42..c3fedb29 100644
--- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -5,6 +5,24 @@
+
+
+
+
+
+
+
+
+
+
{
mainAxisAlignment: isOutgoing
? MainAxisAlignment.end
: MainAxisAlignment.start,
- crossAxisAlignment: CrossAxisAlignment.end,
+ crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (!isOutgoing) ...[
- _buildAvatar(message.senderName),
+ _buildAvatar(message.senderName, textScale),
const SizedBox(width: 6),
],
Flexible(
@@ -610,10 +610,10 @@ class _ChannelChatScreenState extends State {
: EdgeInsets.zero,
child: Text(
message.senderName,
- style: MeshTheme.mono(
- fontSize: 11,
+ style: TextStyle(
+ fontSize: 13 * textScale,
fontWeight: FontWeight.w700,
- color: _colorForName(message.senderName),
+ color: textColor,
),
),
),
@@ -1037,8 +1037,11 @@ class _ChannelChatScreenState extends State {
);
}
- Widget _buildAvatar(String senderName) {
- return AvatarCircle(name: senderName, size: 32);
+ Widget _buildAvatar(String senderName, double textScale) {
+ return AvatarCircle(
+ name: senderName,
+ size: (32 * textScale).clamp(28.0, 56.0),
+ );
}
Widget _buildReplyBanner(double textScale) {
@@ -1202,7 +1205,7 @@ class _ChannelChatScreenState extends State {
hintText: context.l10n.chat_typeMessage,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(
- MeshRadii.pill,
+ MeshRadii.md,
),
borderSide: BorderSide(
color: scheme.outlineVariant,
@@ -1210,7 +1213,7 @@ class _ChannelChatScreenState extends State {
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(
- MeshRadii.pill,
+ MeshRadii.md,
),
borderSide: BorderSide(
color: scheme.outlineVariant,
@@ -1218,7 +1221,7 @@ class _ChannelChatScreenState extends State {
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(
- MeshRadii.pill,
+ MeshRadii.md,
),
borderSide: BorderSide(
color: scheme.primary,
@@ -1581,23 +1584,6 @@ class _ChannelChatScreenState extends State {
.join(',');
}
- /// Deterministic name-to-hue mapping consistent with [AvatarCircle].
- Color _colorForName(String name) {
- const hues = [
- MeshPalette.blue,
- MeshPalette.magenta,
- MeshPalette.signal,
- MeshPalette.warn,
- Color(0xFF8FA8F0),
- Color(0xFF6FD9CE),
- ];
- var h = 0;
- for (final c in name.codeUnits) {
- h = (h * 31 + c) & 0x7fffffff;
- }
- return hues[h % hues.length];
- }
-
Future openRegionSelectDialog(Channel channel) async {
// The AppBar subtitle reads the region from the connector inside a
// Consumer, so setChannelRegion's notifyListeners refreshes it directly —
diff --git a/lib/screens/channels_screen.dart b/lib/screens/channels_screen.dart
index d9846db3..1d5b4646 100644
--- a/lib/screens/channels_screen.dart
+++ b/lib/screens/channels_screen.dart
@@ -511,10 +511,12 @@ class _ChannelsScreenState extends State
),
),
const SizedBox(width: 6),
- StatusChip(
- label: 'CH ${channel.index}',
- color: MeshPalette.blue,
- fontSize: 10,
+ Text(
+ 'CH ${channel.index}',
+ style: MeshTheme.mono(
+ fontSize: 11,
+ color: scheme.onSurfaceVariant.withValues(alpha: 0.7),
+ ),
),
],
),
diff --git a/lib/screens/chat_screen.dart b/lib/screens/chat_screen.dart
index 7eca042b..2822f18e 100644
--- a/lib/screens/chat_screen.dart
+++ b/lib/screens/chat_screen.dart
@@ -546,15 +546,15 @@ class _ChatScreenState extends State {
decoration: InputDecoration(
hintText: context.l10n.chat_typeMessage,
border: OutlineInputBorder(
- borderRadius: BorderRadius.circular(MeshRadii.pill),
+ borderRadius: BorderRadius.circular(MeshRadii.md),
borderSide: BorderSide(color: scheme.outlineVariant),
),
enabledBorder: OutlineInputBorder(
- borderRadius: BorderRadius.circular(MeshRadii.pill),
+ borderRadius: BorderRadius.circular(MeshRadii.md),
borderSide: BorderSide(color: scheme.outlineVariant),
),
focusedBorder: OutlineInputBorder(
- borderRadius: BorderRadius.circular(MeshRadii.pill),
+ borderRadius: BorderRadius.circular(MeshRadii.md),
borderSide: BorderSide(
color: scheme.primary,
width: 1.5,
diff --git a/lib/theme/mesh_theme.dart b/lib/theme/mesh_theme.dart
index 883ea2a2..281b1145 100644
--- a/lib/theme/mesh_theme.dart
+++ b/lib/theme/mesh_theme.dart
@@ -11,16 +11,16 @@ class MeshPalette {
static const bg3 = Color(0xFF1E293B);
static const bg4 = Color(0xFF334155);
- // Lines
- static const line = Color(0xFF1E293B);
- static const line2 = Color(0xFF334155);
- static const line3 = Color(0xFF475569);
+ // Lines — lifted for clearer element separation on the near-black surface
+ static const line = Color(0xFF2A3850);
+ static const line2 = Color(0xFF3B4A61);
+ static const line3 = Color(0xFF546376);
- // Ink
+ // Ink — muted tones brightened for readable secondary/tertiary text in dark
static const ink = Color(0xFFF8FAFC);
- static const ink2 = Color(0xFFCBD5E1);
- static const ink3 = Color(0xFF94A3B8);
- static const ink4 = Color(0xFF64748B);
+ static const ink2 = Color(0xFFD5DEE9);
+ static const ink3 = Color(0xFFAAB6C6);
+ static const ink4 = Color(0xFF828FA3);
// Signal-quality green (used only for SNR coloring, not UI chrome)
static const signal = Color(0xFF22C55E);
@@ -394,9 +394,9 @@ class MeshTheme {
labelTextStyle: WidgetStateProperty.resolveWith((states) {
final selected = states.contains(WidgetState.selected);
return TextStyle(
- fontFamily: MeshFonts.mono,
- fontFamilyFallback: MeshFonts.monoFallback,
- fontSize: 10,
+ fontFamily: MeshFonts.sans,
+ fontFamilyFallback: MeshFonts.sansFallback,
+ fontSize: 11.5,
fontWeight: selected ? FontWeight.w700 : FontWeight.w500,
letterSpacing: 0.1,
color: selected ? scheme.onPrimary : scheme.onSurfaceVariant,
@@ -582,14 +582,15 @@ class MeshTheme {
);
}
- /// Small-caps mono label — used for section accents and chip labels.
+ /// Section-accent / chip label — sans for legibility, with light tracking
+ /// to keep the "label" feel that section headers rely on.
static TextStyle accentLabel({Color? color, double? fontSize}) {
return TextStyle(
- fontFamily: MeshFonts.mono,
- fontFamilyFallback: MeshFonts.monoFallback,
- fontSize: fontSize ?? 9.5,
- fontWeight: FontWeight.w600,
- letterSpacing: 1.8,
+ fontFamily: MeshFonts.sans,
+ fontFamilyFallback: MeshFonts.sansFallback,
+ fontSize: fontSize ?? 11,
+ fontWeight: FontWeight.w700,
+ letterSpacing: 0.6,
color: color,
);
}
diff --git a/lib/utils/route_transitions.dart b/lib/utils/route_transitions.dart
index 7de5a9c5..2d68bbdf 100644
--- a/lib/utils/route_transitions.dart
+++ b/lib/utils/route_transitions.dart
@@ -6,20 +6,15 @@ Route buildQuickSwitchRoute(Widget page) {
transitionDuration: const Duration(milliseconds: 220),
reverseTransitionDuration: const Duration(milliseconds: 200),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
- final curved = CurvedAnimation(
- parent: animation,
- curve: Curves.easeOutCubic,
- reverseCurve: Curves.easeInCubic,
- );
+ // Pure crossfade — no positional slide, so the shared top chrome
+ // (app bar + Contacts/Channels toggle) stays rock-steady while switching.
return FadeTransition(
- opacity: curved,
- child: SlideTransition(
- position: Tween(
- begin: const Offset(0.02, 0),
- end: Offset.zero,
- ).animate(curved),
- child: child,
+ opacity: CurvedAnimation(
+ parent: animation,
+ curve: Curves.easeOut,
+ reverseCurve: Curves.easeIn,
),
+ child: child,
);
},
);
diff --git a/lib/widgets/unread_badge.dart b/lib/widgets/unread_badge.dart
index 1cf5c1d6..dd2e2ab3 100644
--- a/lib/widgets/unread_badge.dart
+++ b/lib/widgets/unread_badge.dart
@@ -11,18 +11,19 @@ class UnreadBadge extends StatelessWidget {
Widget build(BuildContext context) {
final display = count > 9999 ? '9999+' : count.toString();
return Container(
- padding: const EdgeInsets.symmetric(horizontal: 7, vertical: 2),
+ constraints: const BoxConstraints(minWidth: 20),
+ padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2),
+ alignment: Alignment.center,
decoration: BoxDecoration(
- color: MeshPalette.blue.withValues(alpha: 0.18),
+ color: MeshPalette.alert,
borderRadius: BorderRadius.circular(MeshRadii.pill),
- border: Border.all(color: MeshPalette.blue.withValues(alpha: 0.45)),
),
child: Text(
display,
style: MeshTheme.mono(
fontSize: 11,
fontWeight: FontWeight.w700,
- color: MeshPalette.blue,
+ color: Colors.white,
),
),
);
diff --git a/pubspec.yaml b/pubspec.yaml
index eaf46c9f..5b30cfab 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -111,6 +111,17 @@ flutter:
assets:
- assets/images/
- assets/icons/
+ - assets/fonts/
+
+ fonts:
+ - family: Inter
+ fonts:
+ - asset: assets/fonts/Inter.ttf
+ - asset: assets/fonts/InterItalic.ttf
+ style: italic
+ - family: JetBrains Mono
+ fonts:
+ - asset: assets/fonts/JetBrainsMono.ttf
flutter_launcher_icons:
android: true