@@ -20,7 +20,7 @@
|
||||
android:gravity="center"
|
||||
android:text="1."
|
||||
android:textColor="@color/filc"
|
||||
android:textColorLink="#ff3D7BF4"
|
||||
android:textColorLink="#ff052460"
|
||||
android:textSize="30sp"
|
||||
android:textStyle="bold"
|
||||
tools:ignore="HardcodedText" />
|
||||
@@ -110,4 +110,4 @@
|
||||
android:textColor="@color/white"
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<color name="yellow_light">#ffFFCC00</color>
|
||||
<color name="light_yellow_light">#40FFD60A</color>
|
||||
<color name="green_light">#ff34C759</color>
|
||||
<color name="filc_light">#ff3D7BF4</color>
|
||||
<color name="filc_light">#ff052460</color>
|
||||
<color name="teal_light">#ff5AC8FA</color>
|
||||
<color name="blue_light">#ff007AFF</color>
|
||||
<color name="indigo_light">#ff5856D6</color>
|
||||
@@ -49,8 +49,8 @@
|
||||
<color name="yellow">#ffFFD60A</color>
|
||||
<color name="light_yellow">#40FFD60A</color>
|
||||
<color name="green">#ff32D74B</color>
|
||||
<color name="filc">#ff3D7BF4</color>
|
||||
<color name="filc_gradient">#ff3D93F5</color>
|
||||
<color name="filc">#ff052460</color>
|
||||
<color name="filc_gradient">#ff06348f</color>
|
||||
<color name="teal">#ff64D2FF</color>
|
||||
<color name="blue">#ff0A84FF</color>
|
||||
<color name="indigo">#ff5E5CE6</color>
|
||||
@@ -66,4 +66,4 @@
|
||||
<color name="pink_shade300">#FFF06292</color>
|
||||
<color name="purple_shade300">#FFBA68C8</color>
|
||||
<color name="teal_shade300">#FF22AC9B</color>
|
||||
</resources>
|
||||
</resources>
|
||||
|
||||
43
refilc/assets/svg/cover_arts/grid.svg
Normal file
43
refilc/assets/svg/cover_arts/grid.svg
Normal file
@@ -0,0 +1,43 @@
|
||||
<svg width="375" height="174" viewBox="0 0 375 174" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1575_5258)">
|
||||
<g style="mix-blend-mode:color-burn">
|
||||
<rect x="187.881" y="36.8047" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="238.186" y="36.8047" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="187.881" y="-13.5" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="238.186" y="-13.5" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="288.49" y="36.8047" width="49.3049" height="50.4482" stroke="#858585"/>
|
||||
<rect x="337.652" y="36.8047" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="288.49" y="-13.5" width="49.3049" height="50.4482" stroke="#858585"/>
|
||||
<rect x="337.652" y="-13.5" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="187.881" y="136.271" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="238.186" y="136.271" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="187.881" y="87.1099" width="50.4482" height="49.3049" stroke="#858585"/>
|
||||
<rect x="238.186" y="87.1099" width="50.4482" height="49.3049" stroke="#858585"/>
|
||||
<rect x="288.49" y="136.271" width="49.3049" height="50.4482" stroke="#858585"/>
|
||||
<rect x="337.652" y="136.271" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="288.49" y="87.1099" width="49.3049" height="49.3049" stroke="#858585"/>
|
||||
<rect x="337.652" y="87.1099" width="50.4482" height="49.3049" stroke="#858585"/>
|
||||
<rect x="-12.1953" y="36.8047" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="-12.1953" y="-13.5" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="38.1094" y="36.8047" width="49.3049" height="50.4482" stroke="#858585"/>
|
||||
<rect x="87.2705" y="36.8047" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="38.1094" y="-13.5" width="49.3049" height="50.4482" stroke="#858585"/>
|
||||
<rect x="87.2705" y="-13.5" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="-12.1953" y="136.271" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="-12.1953" y="87.1099" width="50.4482" height="49.3049" stroke="#858585"/>
|
||||
<rect x="38.1094" y="136.271" width="49.3049" height="50.4482" stroke="#858585"/>
|
||||
<rect x="87.2705" y="136.271" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="38.1094" y="87.1099" width="49.3049" height="49.3049" stroke="#858585"/>
|
||||
<rect x="87.2705" y="87.1099" width="50.4482" height="49.3049" stroke="#858585"/>
|
||||
<rect x="137.576" y="36.8047" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="137.576" y="-13.5" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="137.576" y="136.271" width="50.4482" height="50.4482" stroke="#858585"/>
|
||||
<rect x="137.576" y="87.1099" width="50.4482" height="49.3049" stroke="#858585"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1575_5258">
|
||||
<rect width="375" height="173.78" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
27
refilc/assets/svg/cover_arts/line.svg
Normal file
27
refilc/assets/svg/cover_arts/line.svg
Normal file
@@ -0,0 +1,27 @@
|
||||
<svg width="375" height="175" viewBox="0 0 375 175" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1575_5259)">
|
||||
<g style="mix-blend-mode:color-burn">
|
||||
<mask id="path-1-inside-1_1575_5259" fill="white">
|
||||
<path d="M0 37H375V89H0V37Z"/>
|
||||
</mask>
|
||||
<path d="M0 38H375V36H0V38Z" fill="#858585" mask="url(#path-1-inside-1_1575_5259)"/>
|
||||
<mask id="path-3-inside-2_1575_5259" fill="white">
|
||||
<path d="M0 -13H375V38H0V-13Z"/>
|
||||
</mask>
|
||||
<path d="M0 -12H375V-14H0V-12Z" fill="#858585" mask="url(#path-3-inside-2_1575_5259)"/>
|
||||
<mask id="path-5-inside-3_1575_5259" fill="white">
|
||||
<path d="M0 137H375V188H0V137Z"/>
|
||||
</mask>
|
||||
<path d="M0 138H375V136H0V138Z" fill="#858585" mask="url(#path-5-inside-3_1575_5259)"/>
|
||||
<mask id="path-7-inside-4_1575_5259" fill="white">
|
||||
<path d="M0 87H375V138H0V87Z"/>
|
||||
</mask>
|
||||
<path d="M0 88H375V86H0V88Z" fill="#858585" mask="url(#path-7-inside-4_1575_5259)"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1575_5259">
|
||||
<rect width="375" height="173.78" fill="white" transform="translate(0 0.780518)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
47
refilc/assets/svg/cover_arts/plain.svg
Normal file
47
refilc/assets/svg/cover_arts/plain.svg
Normal file
@@ -0,0 +1,47 @@
|
||||
<svg width="375" height="175" viewBox="0 0 375 175" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1575_5260)">
|
||||
<g style="mix-blend-mode:color-burn">
|
||||
<circle cx="17" cy="19.561" r="1" fill="#858585"/>
|
||||
<circle cx="59" cy="19.561" r="1" fill="#858585"/>
|
||||
<circle cx="101" cy="19.561" r="1" fill="#858585"/>
|
||||
<circle cx="143" cy="19.561" r="1" fill="#858585"/>
|
||||
<circle cx="185" cy="19.561" r="1" fill="#858585"/>
|
||||
<circle cx="227" cy="19.561" r="1" fill="#858585"/>
|
||||
<circle cx="269" cy="19.561" r="1" fill="#858585"/>
|
||||
<circle cx="311" cy="19.561" r="1" fill="#858585"/>
|
||||
<circle cx="353" cy="19.561" r="1" fill="#858585"/>
|
||||
<circle cx="17" cy="61.561" r="1" fill="#858585"/>
|
||||
<circle cx="59" cy="61.561" r="1" fill="#858585"/>
|
||||
<circle cx="101" cy="61.561" r="1" fill="#858585"/>
|
||||
<circle cx="143" cy="61.561" r="1" fill="#858585"/>
|
||||
<circle cx="185" cy="61.561" r="1" fill="#858585"/>
|
||||
<circle cx="227" cy="61.561" r="1" fill="#858585"/>
|
||||
<circle cx="269" cy="61.561" r="1" fill="#858585"/>
|
||||
<circle cx="311" cy="61.561" r="1" fill="#858585"/>
|
||||
<circle cx="353" cy="61.561" r="1" fill="#858585"/>
|
||||
<circle cx="17" cy="103.561" r="1" fill="#858585"/>
|
||||
<circle cx="59" cy="103.561" r="1" fill="#858585"/>
|
||||
<circle cx="101" cy="103.561" r="1" fill="#858585"/>
|
||||
<circle cx="143" cy="103.561" r="1" fill="#858585"/>
|
||||
<circle cx="185" cy="103.561" r="1" fill="#858585"/>
|
||||
<circle cx="227" cy="103.561" r="1" fill="#858585"/>
|
||||
<circle cx="269" cy="103.561" r="1" fill="#858585"/>
|
||||
<circle cx="311" cy="103.561" r="1" fill="#858585"/>
|
||||
<circle cx="353" cy="103.561" r="1" fill="#858585"/>
|
||||
<circle cx="17" cy="145.561" r="1" fill="#858585"/>
|
||||
<circle cx="59" cy="145.561" r="1" fill="#858585"/>
|
||||
<circle cx="101" cy="145.561" r="1" fill="#858585"/>
|
||||
<circle cx="143" cy="145.561" r="1" fill="#858585"/>
|
||||
<circle cx="185" cy="145.561" r="1" fill="#858585"/>
|
||||
<circle cx="227" cy="145.561" r="1" fill="#858585"/>
|
||||
<circle cx="269" cy="145.561" r="1" fill="#858585"/>
|
||||
<circle cx="311" cy="145.561" r="1" fill="#858585"/>
|
||||
<circle cx="353" cy="145.561" r="1" fill="#858585"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1575_5260">
|
||||
<rect width="375" height="173.78" fill="white" transform="translate(0 0.561035)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
28
refilc/assets/svg/cover_arts/vocal.svg
Normal file
28
refilc/assets/svg/cover_arts/vocal.svg
Normal file
@@ -0,0 +1,28 @@
|
||||
<svg width="375" height="175" viewBox="0 0 375 175" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1575_5261)">
|
||||
<g style="mix-blend-mode:color-burn">
|
||||
<path d="M0 63.0001H375" stroke="#858585"/>
|
||||
<path d="M0 75.0001H375" stroke="#858585"/>
|
||||
<path d="M0 87.0001H375" stroke="#858585"/>
|
||||
<path d="M0 99.0001H375" stroke="#858585"/>
|
||||
<path d="M0 111H375" stroke="#858585"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:color-burn">
|
||||
<path d="M0 135H375" stroke="#858585"/>
|
||||
<path d="M0 147H375" stroke="#858585"/>
|
||||
<path d="M0 159H375" stroke="#858585"/>
|
||||
<path d="M0 171H375" stroke="#858585"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:color-burn">
|
||||
<path d="M0 3.00012H375" stroke="#858585"/>
|
||||
<path d="M0 15.0001H375" stroke="#858585"/>
|
||||
<path d="M0 27.0001H375" stroke="#858585"/>
|
||||
<path d="M0 39.0001H375" stroke="#858585"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1575_5261">
|
||||
<rect width="375" height="173.78" fill="white" transform="translate(0 0.341431)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 973 B |
@@ -1,43 +0,0 @@
|
||||
<svg width="375" height="174" viewBox="0 0 375 174" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_581_2504)">
|
||||
<g style="mix-blend-mode:color-burn">
|
||||
<rect x="138.881" y="36.8047" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="189.186" y="36.8047" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="138.881" y="-13.5" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="189.186" y="-13.5" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="239.49" y="36.8047" width="49.3049" height="50.4482" stroke="black"/>
|
||||
<rect x="288.652" y="36.8047" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="239.49" y="-13.5" width="49.3049" height="50.4482" stroke="black"/>
|
||||
<rect x="288.652" y="-13.5" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="138.881" y="136.271" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="189.186" y="136.271" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="138.881" y="87.1099" width="50.4482" height="49.3049" stroke="black"/>
|
||||
<rect x="189.186" y="87.1099" width="50.4482" height="49.3049" stroke="black"/>
|
||||
<rect x="239.49" y="136.271" width="49.3049" height="50.4482" stroke="black"/>
|
||||
<rect x="288.652" y="136.271" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="239.49" y="87.1099" width="49.3049" height="49.3049" stroke="black"/>
|
||||
<rect x="288.652" y="87.1099" width="50.4482" height="49.3049" stroke="black"/>
|
||||
<rect x="338.957" y="36.8047" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="338.957" y="-13.5" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="338.957" y="136.271" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="338.957" y="87.1099" width="50.4482" height="49.3049" stroke="black"/>
|
||||
<rect x="-10.8906" y="36.8047" width="49.3049" height="50.4482" stroke="black"/>
|
||||
<rect x="38.2705" y="36.8047" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="-10.8906" y="-13.5" width="49.3049" height="50.4482" stroke="black"/>
|
||||
<rect x="38.2705" y="-13.5" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="-10.8906" y="136.271" width="49.3049" height="50.4482" stroke="black"/>
|
||||
<rect x="38.2705" y="136.271" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="-10.8906" y="87.1099" width="49.3049" height="49.3049" stroke="black"/>
|
||||
<rect x="38.2705" y="87.1099" width="50.4482" height="49.3049" stroke="black"/>
|
||||
<rect x="88.5762" y="36.8047" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="88.5762" y="-13.5" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="88.5762" y="136.271" width="50.4482" height="50.4482" stroke="black"/>
|
||||
<rect x="88.5762" y="87.1099" width="50.4482" height="49.3049" stroke="black"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_581_2504">
|
||||
<rect width="375" height="173.78" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.8 KiB |
@@ -52,14 +52,31 @@ struct LockScreenLiveActivityView: View {
|
||||
VStack(alignment: .center) {
|
||||
// Jelenlegi óra
|
||||
VStack {
|
||||
Text(context.state.index + " " + context.state.title)
|
||||
.font(.body)
|
||||
.bold()
|
||||
.multilineTextAlignment(.center)
|
||||
if(context.state.title.contains("Az első órádig")) {
|
||||
Text(context.state.title)
|
||||
.font(.system(size: 15))
|
||||
.bold()
|
||||
.multilineTextAlignment(.center)
|
||||
} else if(context.state.title == "Szünet") {
|
||||
Text(context.state.title)
|
||||
.font(.body)
|
||||
.bold()
|
||||
.padding(.trailing, 90)
|
||||
|
||||
Text("Terem: \(context.state.subtitle)")
|
||||
.italic()
|
||||
.font(.caption)
|
||||
} else {
|
||||
MultilineTextView(text: "\(context.state.index) \(context.state.title)", limit: 25)
|
||||
.font(.body)
|
||||
.bold()
|
||||
.multilineTextAlignment(.center)
|
||||
}
|
||||
|
||||
//Terem
|
||||
if (!context.state.subtitle.isEmpty) {
|
||||
Text(context.state.subtitle)
|
||||
.italic()
|
||||
.bold()
|
||||
.font(.system(size: 13))
|
||||
}
|
||||
}
|
||||
|
||||
// Leírás
|
||||
@@ -69,6 +86,7 @@ struct LockScreenLiveActivityView: View {
|
||||
}
|
||||
|
||||
// Következő óra
|
||||
if(context.state.nextSubject != "" && context.state.nextRoom != "") {
|
||||
HStack {
|
||||
Image(systemName: "arrow.right")
|
||||
.resizable()
|
||||
@@ -80,18 +98,24 @@ struct LockScreenLiveActivityView: View {
|
||||
.font(.caption2)
|
||||
}
|
||||
.multilineTextAlignment(.center)
|
||||
} else {
|
||||
Spacer(minLength: 5)
|
||||
Text("Ez az utolsó óra! Kitartást!")
|
||||
.font(.system(size: 15))
|
||||
}
|
||||
|
||||
}
|
||||
.padding(15)
|
||||
|
||||
Spacer()
|
||||
|
||||
|
||||
// Visszaszámláló
|
||||
Text(timerInterval: context.state.date, countsDown: true)
|
||||
.multilineTextAlignment(.center)
|
||||
.frame(width: 85)
|
||||
.font(.title2)
|
||||
.monospacedDigit()
|
||||
.padding(.trailing, CGFloat(24))
|
||||
.padding(.trailing)
|
||||
}
|
||||
.activityBackgroundTint(
|
||||
context.state.color != "#676767"
|
||||
@@ -109,7 +133,7 @@ struct LiveCardWidget: Widget {
|
||||
LockScreenLiveActivityView(context: context)
|
||||
/// Dynamic Island
|
||||
} dynamicIsland: { context in
|
||||
|
||||
|
||||
/// Expanded
|
||||
return DynamicIsland {
|
||||
DynamicIslandExpandedRegion(.leading) {
|
||||
@@ -133,39 +157,95 @@ struct LiveCardWidget: Widget {
|
||||
).progressViewStyle(.circular)
|
||||
}
|
||||
}
|
||||
DynamicIslandExpandedRegion(.center) {
|
||||
VStack(alignment: .center) {
|
||||
Text(context.state.index + context.state.title)
|
||||
.lineLimit(1)
|
||||
.font(.body)
|
||||
.bold()
|
||||
|
||||
Text(context.state.subtitle)
|
||||
.lineLimit(1)
|
||||
.font(.subheadline)
|
||||
Spacer()
|
||||
|
||||
Text(context.state.description)
|
||||
.lineLimit(2)
|
||||
.font(.caption)
|
||||
}.padding(EdgeInsets(top: 0.0, leading: 5.0, bottom: 0.0, trailing: 0.0))
|
||||
}
|
||||
DynamicIslandExpandedRegion(.center) {
|
||||
VStack(alignment: .center) {
|
||||
// Első óra előtti expanded DynamicIsland
|
||||
if(context.state.title.contains("Az első órádig")) {
|
||||
Text("Az első órád:")
|
||||
.font(.body)
|
||||
.bold()
|
||||
.padding(.trailing, -15)
|
||||
MultilineTextView(text: "\(context.state.nextSubject)", limit: 25)
|
||||
.font(.body)
|
||||
.padding(.trailing, -25)
|
||||
|
||||
Text("Ebben a teremben:")
|
||||
.font(.body)
|
||||
.bold()
|
||||
.padding(.leading, 15)
|
||||
Text(context.state.nextRoom)
|
||||
.font(.body)
|
||||
.padding(.leading, 15)
|
||||
} else if(context.state.title == "Szünet") {
|
||||
// Amikor szünet van, expanded DynamicIsland
|
||||
Text(context.state.title)
|
||||
.lineLimit(1)
|
||||
.font(.body)
|
||||
.bold()
|
||||
.padding(.leading, 15)
|
||||
|
||||
Spacer(minLength: 5)
|
||||
Text("Következő óra és terem:")
|
||||
.font(.system(size: 13))
|
||||
.padding(.leading, 25)
|
||||
Text(context.state.nextSubject)
|
||||
.font(.caption)
|
||||
.padding(.leading, 15)
|
||||
Text(context.state.nextRoom)
|
||||
.font(.caption2)
|
||||
.padding(.leading, 15)
|
||||
|
||||
} else {
|
||||
// Amikor óra van, expanded DynamicIsland
|
||||
MultilineTextView(text: "\(context.state.index) \(context.state.title)", limit: 25)
|
||||
.lineLimit(1)
|
||||
.font(.body)
|
||||
.bold()
|
||||
.padding(.trailing, -35)
|
||||
|
||||
Text(context.state.subtitle)
|
||||
.lineLimit(1)
|
||||
.italic()
|
||||
.bold()
|
||||
.font(.system(size: 13))
|
||||
.padding(.trailing, -50)
|
||||
|
||||
Spacer(minLength: 5)
|
||||
|
||||
if(context.state.nextRoom != "" && context.state.nextSubject != "") {
|
||||
Text("Következő óra és terem:")
|
||||
.font(.system(size: 14))
|
||||
.padding(.trailing, -35)
|
||||
Spacer(minLength: 2)
|
||||
Text(context.state.nextSubject)
|
||||
.modifier(DynamicFontSizeModifier(text: context.state.nextSubject))
|
||||
.padding(.trailing, -35)
|
||||
Text(context.state.nextRoom)
|
||||
// ignore: based on nextSubject characters, I check that the font size of the room is the same as the next subject.
|
||||
.modifier(DynamicFontSizeModifier(text: context.state.nextSubject))
|
||||
.padding(.trailing, -35)
|
||||
} else {
|
||||
Text("Ez az utolsó óra! Kitartást!")
|
||||
.font(.system(size: 14))
|
||||
.padding(.trailing, -30)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}.padding(EdgeInsets(top: 0.0, leading: 5.0, bottom: 0.0, trailing: 0.0))
|
||||
|
||||
}
|
||||
|
||||
/// Compact
|
||||
} compactLeading: {
|
||||
Label {
|
||||
Text(context.state.title)
|
||||
} icon: {
|
||||
Image(systemName: context.state.icon)
|
||||
}
|
||||
.font(.caption2)
|
||||
Image(systemName: context.state.icon)
|
||||
}
|
||||
compactTrailing: {
|
||||
Text(timerInterval: context.state.date, countsDown: true)
|
||||
.multilineTextAlignment(.center)
|
||||
.frame(width: 40)
|
||||
.font(.caption2)
|
||||
|
||||
|
||||
/// Collapsed
|
||||
} minimal: {
|
||||
VStack(alignment: .center, content: {
|
||||
@@ -191,7 +271,59 @@ struct LiveCardWidget: Widget {
|
||||
context.state.color != "#676767"
|
||||
? Color(hex: context.state.color)
|
||||
: Color.clear
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct MultilineTextView: View {
|
||||
var text: String
|
||||
var limit: Int = 20 // default is 20 character
|
||||
|
||||
var body: some View {
|
||||
let words = text.split(separator: " ")
|
||||
var currentLine = ""
|
||||
var lines: [String] = []
|
||||
|
||||
for word in words {
|
||||
if (currentLine.count + word.count + 1) > limit {
|
||||
lines.append(currentLine)
|
||||
currentLine = ""
|
||||
}
|
||||
if !currentLine.isEmpty {
|
||||
currentLine += " "
|
||||
}
|
||||
currentLine += word
|
||||
}
|
||||
if !currentLine.isEmpty {
|
||||
lines.append(currentLine)
|
||||
}
|
||||
|
||||
return VStack(alignment: .center) {
|
||||
ForEach(lines, id: \.self) { line in
|
||||
Text(line)
|
||||
}
|
||||
Spacer(minLength: 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct DynamicFontSizeModifier: ViewModifier {
|
||||
var text: String
|
||||
|
||||
func body(content: Content) -> some View {
|
||||
content
|
||||
.font(.system(size: fontSize(for: text)))
|
||||
}
|
||||
|
||||
private func fontSize(for text: String) -> CGFloat {
|
||||
let length = text.count
|
||||
if length < 10 {
|
||||
return 12
|
||||
} else if length < 20 {
|
||||
return 12
|
||||
} else {
|
||||
return 11
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -336,6 +336,8 @@ class FilcAPI {
|
||||
|
||||
if (res.statusCode == 200) {
|
||||
return (jsonDecode(res.body) as Map);
|
||||
} else if (res.statusCode == 404) {
|
||||
return {"public_id": ""};
|
||||
} else {
|
||||
throw "HTTP ${res.statusCode}: ${res.body}";
|
||||
}
|
||||
|
||||
@@ -88,24 +88,24 @@ class LiveCardProvider extends ChangeNotifier {
|
||||
case LiveCardState.morning:
|
||||
return {
|
||||
"color":
|
||||
'#${_settings.liveActivityColor.toString().substring(10, 16)}',
|
||||
'#${_settings.liveActivityColor.toString().substring(10, 16)}',
|
||||
"icon": nextLesson != null
|
||||
? SubjectIcon.resolveName(subject: nextLesson?.subject)
|
||||
: "book",
|
||||
"title": "Első órádig:",
|
||||
"title": "Jó reggelt! Az első órádig:",
|
||||
"subtitle": "",
|
||||
"description": "",
|
||||
"startDate": storeFirstRunDate != null
|
||||
? ((storeFirstRunDate?.millisecondsSinceEpoch ?? 0) -
|
||||
(_delay.inMilliseconds))
|
||||
.toString()
|
||||
(_delay.inMilliseconds))
|
||||
.toString()
|
||||
: "",
|
||||
"endDate": ((nextLesson?.start.millisecondsSinceEpoch ?? 0) -
|
||||
_delay.inMilliseconds)
|
||||
_delay.inMilliseconds)
|
||||
.toString(),
|
||||
"nextSubject": nextLesson != null
|
||||
? nextLesson?.subject.renamedTo ??
|
||||
ShortSubject.resolve(subject: nextLesson?.subject).capital()
|
||||
ShortSubject.resolve(subject: nextLesson?.subject).capital()
|
||||
: "",
|
||||
"nextRoom": nextLesson?.room.replaceAll("_", " ") ?? "",
|
||||
};
|
||||
@@ -113,24 +113,24 @@ class LiveCardProvider extends ChangeNotifier {
|
||||
case LiveCardState.afternoon:
|
||||
return {
|
||||
"color":
|
||||
'#${_settings.liveActivityColor.toString().substring(10, 16)}',
|
||||
'#${_settings.liveActivityColor.toString().substring(10, 16)}',
|
||||
"icon": nextLesson != null
|
||||
? SubjectIcon.resolveName(subject: nextLesson?.subject)
|
||||
: "book",
|
||||
"title": "Első órádig:",
|
||||
"title": "Jó napot! Az első órádig:",
|
||||
"subtitle": "",
|
||||
"description": "",
|
||||
"startDate": storeFirstRunDate != null
|
||||
? ((storeFirstRunDate?.millisecondsSinceEpoch ?? 0) -
|
||||
(_delay.inMilliseconds))
|
||||
.toString()
|
||||
(_delay.inMilliseconds))
|
||||
.toString()
|
||||
: "",
|
||||
"endDate": ((nextLesson?.start.millisecondsSinceEpoch ?? 0) -
|
||||
_delay.inMilliseconds)
|
||||
_delay.inMilliseconds)
|
||||
.toString(),
|
||||
"nextSubject": nextLesson != null
|
||||
? nextLesson?.subject.renamedTo ??
|
||||
ShortSubject.resolve(subject: nextLesson?.subject).capital()
|
||||
ShortSubject.resolve(subject: nextLesson?.subject).capital()
|
||||
: "",
|
||||
"nextRoom": nextLesson?.room.replaceAll("_", " ") ?? "",
|
||||
};
|
||||
@@ -138,24 +138,24 @@ class LiveCardProvider extends ChangeNotifier {
|
||||
case LiveCardState.night:
|
||||
return {
|
||||
"color":
|
||||
'#${_settings.liveActivityColor.toString().substring(10, 16)}',
|
||||
'#${_settings.liveActivityColor.toString().substring(10, 16)}',
|
||||
"icon": nextLesson != null
|
||||
? SubjectIcon.resolveName(subject: nextLesson?.subject)
|
||||
: "book",
|
||||
"title": "Első órádig:",
|
||||
"title": "Jó estét! Az első órádig:",
|
||||
"subtitle": "",
|
||||
"description": "",
|
||||
"startDate": storeFirstRunDate != null
|
||||
? ((storeFirstRunDate?.millisecondsSinceEpoch ?? 0) -
|
||||
(_delay.inMilliseconds))
|
||||
.toString()
|
||||
(_delay.inMilliseconds))
|
||||
.toString()
|
||||
: "",
|
||||
"endDate": ((nextLesson?.start.millisecondsSinceEpoch ?? 0) -
|
||||
_delay.inMilliseconds)
|
||||
_delay.inMilliseconds)
|
||||
.toString(),
|
||||
"nextSubject": nextLesson != null
|
||||
? nextLesson?.subject.renamedTo ??
|
||||
ShortSubject.resolve(subject: nextLesson?.subject).capital()
|
||||
ShortSubject.resolve(subject: nextLesson?.subject).capital()
|
||||
: "",
|
||||
"nextRoom": nextLesson?.room.replaceAll("_", " ") ?? "",
|
||||
};
|
||||
@@ -163,28 +163,28 @@ class LiveCardProvider extends ChangeNotifier {
|
||||
case LiveCardState.duringLesson:
|
||||
return {
|
||||
"color":
|
||||
'#${_settings.liveActivityColor.toString().substring(10, 16)}',
|
||||
'#${_settings.liveActivityColor.toString().substring(10, 16)}',
|
||||
"icon": currentLesson != null
|
||||
? SubjectIcon.resolveName(subject: currentLesson?.subject)
|
||||
: "book",
|
||||
"index":
|
||||
currentLesson != null ? '${currentLesson!.lessonIndex}. ' : "",
|
||||
currentLesson != null ? '${currentLesson!.lessonIndex}. ' : "",
|
||||
"title": currentLesson != null
|
||||
? currentLesson?.subject.renamedTo ??
|
||||
ShortSubject.resolve(subject: currentLesson?.subject)
|
||||
.capital()
|
||||
ShortSubject.resolve(subject: currentLesson?.subject)
|
||||
.capital()
|
||||
: "",
|
||||
"subtitle": currentLesson?.room.replaceAll("_", " ") ?? "",
|
||||
"subtitle": "Terem: ${currentLesson?.room.replaceAll("_", " ") ?? ""}",
|
||||
"description": currentLesson?.description ?? "",
|
||||
"startDate": ((currentLesson?.start.millisecondsSinceEpoch ?? 0) -
|
||||
_delay.inMilliseconds)
|
||||
_delay.inMilliseconds)
|
||||
.toString(),
|
||||
"endDate": ((currentLesson?.end.millisecondsSinceEpoch ?? 0) -
|
||||
_delay.inMilliseconds)
|
||||
_delay.inMilliseconds)
|
||||
.toString(),
|
||||
"nextSubject": nextLesson != null
|
||||
? nextLesson?.subject.renamedTo ??
|
||||
ShortSubject.resolve(subject: nextLesson?.subject).capital()
|
||||
ShortSubject.resolve(subject: nextLesson?.subject).capital()
|
||||
: "",
|
||||
"nextRoom": nextLesson?.room.replaceAll("_", " ") ?? "",
|
||||
};
|
||||
@@ -200,23 +200,23 @@ class LiveCardProvider extends ChangeNotifier {
|
||||
|
||||
return {
|
||||
"color":
|
||||
'#${_settings.liveActivityColor.toString().substring(10, 16)}',
|
||||
'#${_settings.liveActivityColor.toString().substring(10, 16)}',
|
||||
"icon": iconFloorMap[diff] ?? "cup.and.saucer",
|
||||
"title": "Szünet",
|
||||
"description": "go $diff".i18n.fill([
|
||||
diff != "to room" ? (nextLesson!.getFloor() ?? 0) : nextLesson!.room
|
||||
]),
|
||||
"startDate": ((prevLesson?.end.millisecondsSinceEpoch ?? 0) -
|
||||
_delay.inMilliseconds)
|
||||
_delay.inMilliseconds)
|
||||
.toString(),
|
||||
"endDate": ((nextLesson?.start.millisecondsSinceEpoch ?? 0) -
|
||||
_delay.inMilliseconds)
|
||||
_delay.inMilliseconds)
|
||||
.toString(),
|
||||
"nextSubject": (nextLesson != null
|
||||
? nextLesson?.subject.renamedTo ??
|
||||
ShortSubject.resolve(subject: nextLesson?.subject)
|
||||
.capital()
|
||||
: "")
|
||||
? nextLesson?.subject.renamedTo ??
|
||||
ShortSubject.resolve(subject: nextLesson?.subject)
|
||||
.capital()
|
||||
: "")
|
||||
.capital(),
|
||||
"nextRoom": nextLesson?.room.replaceAll("_", " ") ?? "",
|
||||
"index": "",
|
||||
@@ -243,8 +243,8 @@ class LiveCardProvider extends ChangeNotifier {
|
||||
DateTime now = _now().add(_delay);
|
||||
|
||||
if ((currentState == LiveCardState.morning ||
|
||||
currentState == LiveCardState.afternoon ||
|
||||
currentState == LiveCardState.night) &&
|
||||
currentState == LiveCardState.afternoon ||
|
||||
currentState == LiveCardState.night) &&
|
||||
storeFirstRunDate == null) {
|
||||
storeFirstRunDate = now;
|
||||
}
|
||||
@@ -253,9 +253,9 @@ class LiveCardProvider extends ChangeNotifier {
|
||||
// Filter label lessons #128
|
||||
today = today
|
||||
.where((lesson) =>
|
||||
lesson.status?.name != "Elmaradt" &&
|
||||
lesson.subject.id != '' &&
|
||||
!lesson.isEmpty)
|
||||
lesson.status?.name != "Elmaradt" &&
|
||||
lesson.subject.id != '' &&
|
||||
!lesson.isEmpty)
|
||||
.toList();
|
||||
|
||||
if (today.isNotEmpty) {
|
||||
@@ -263,7 +263,7 @@ class LiveCardProvider extends ChangeNotifier {
|
||||
today.sort((a, b) => a.start.compareTo(b.start));
|
||||
|
||||
final _lesson = today.firstWhere(
|
||||
(l) => l.start.isBefore(now) && l.end.isAfter(now),
|
||||
(l) => l.start.isBefore(now) && l.end.isAfter(now),
|
||||
orElse: () => Lesson.fromJson({}));
|
||||
|
||||
if (_lesson.start.year != 0) {
|
||||
@@ -328,7 +328,7 @@ class LiveCardProvider extends ChangeNotifier {
|
||||
hasActivityStarted = true;
|
||||
} else if (!hasActivityStarted &&
|
||||
((currentState == LiveCardState.duringLesson &&
|
||||
currentLesson != null) ||
|
||||
currentLesson != null) ||
|
||||
currentState == LiveCardState.duringBreak)) {
|
||||
debugPrint("Óra van, vagy szünet, de nincs LiveActivity. létrehozás...");
|
||||
PlatformChannel.createLiveActivity(toMap());
|
||||
@@ -362,7 +362,12 @@ class LiveCardProvider extends ChangeNotifier {
|
||||
}
|
||||
|
||||
//END
|
||||
if (hasActivityStarted &&
|
||||
if ((currentState == LiveCardState.afternoon || currentState == LiveCardState.morning || currentState == LiveCardState.night) && hasActivityStarted && nextLesson != null &&
|
||||
nextLesson!.start.difference(now).inMinutes > 60) {
|
||||
debugPrint("Több, mint 1 óra van az első óráig. Befejezés...");
|
||||
PlatformChannel.endLiveActivity();
|
||||
hasActivityStarted = false;
|
||||
} else if (hasActivityStarted &&
|
||||
!hasDayEnd &&
|
||||
nextLesson == null &&
|
||||
now.isAfter(prevLesson!.end)) {
|
||||
@@ -384,4 +389,4 @@ class LiveCardProvider extends ChangeNotifier {
|
||||
List<Lesson> _today(TimetableProvider p) => (p.getWeek(Week.current()) ?? [])
|
||||
.where((l) => _sameDate(l.date, _now()))
|
||||
.toList();
|
||||
}
|
||||
}
|
||||
@@ -7,17 +7,23 @@ import 'package:provider/provider.dart';
|
||||
|
||||
class SelfNoteProvider with ChangeNotifier {
|
||||
late List<SelfNote> _notes;
|
||||
late List<TodoItem> _todoItems;
|
||||
late BuildContext _context;
|
||||
|
||||
List<SelfNote> get notes => _notes;
|
||||
List<TodoItem> get todos => _todoItems;
|
||||
|
||||
SelfNoteProvider({
|
||||
List<SelfNote> initialNotes = const [],
|
||||
List<TodoItem> initialTodoItems = const [],
|
||||
required BuildContext context,
|
||||
}) {
|
||||
_notes = List.castFrom(initialNotes);
|
||||
_todoItems = List.castFrom(initialTodoItems);
|
||||
_context = context;
|
||||
|
||||
if (_notes.isEmpty) restore();
|
||||
if (_todoItems.isEmpty) restoreTodo();
|
||||
}
|
||||
|
||||
// restore self notes from db
|
||||
@@ -38,6 +44,24 @@ class SelfNoteProvider with ChangeNotifier {
|
||||
}
|
||||
}
|
||||
|
||||
// restore todo items from db
|
||||
Future<void> restoreTodo() async {
|
||||
String? userId = Provider.of<UserProvider>(_context, listen: false).id;
|
||||
|
||||
// await Provider.of<DatabaseProvider>(_context, listen: false)
|
||||
// .userStore
|
||||
// .storeSelfNotes([], userId: userId!);
|
||||
|
||||
// load self notes from db
|
||||
if (userId != null) {
|
||||
var dbTodo = await Provider.of<DatabaseProvider>(_context, listen: false)
|
||||
.userQuery
|
||||
.getTodoItems(userId: userId);
|
||||
_todoItems = dbTodo;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
// fetches fresh data from api (not needed, cuz no api for that)
|
||||
// Future<void> fetch() async {
|
||||
// }
|
||||
@@ -54,4 +78,17 @@ class SelfNoteProvider with ChangeNotifier {
|
||||
_notes = notes;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// store todo items in db
|
||||
Future<void> storeTodo(List<TodoItem> todos) async {
|
||||
User? user = Provider.of<UserProvider>(_context, listen: false).user;
|
||||
if (user == null) throw "Cannot store Self Notes for User null";
|
||||
String userId = user.id;
|
||||
|
||||
await Provider.of<DatabaseProvider>(_context, listen: false)
|
||||
.userStore
|
||||
.storeSelfTodoItems(todos, userId: userId);
|
||||
_todoItems = todos;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ class UserProvider with ChangeNotifier {
|
||||
String? get nickname => user?.nickname;
|
||||
String get picture => user?.picture ?? "";
|
||||
String? get displayName => user?.displayName;
|
||||
int? get gradeStreak => user?.gradeStreak;
|
||||
|
||||
final SettingsProvider _settings;
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@ const settingsDB = DatabaseStruct("settings", {
|
||||
// more
|
||||
"show_breaks": int,
|
||||
"font_family": String,
|
||||
"title_only_font": int,
|
||||
"plus_session_id": String,
|
||||
"cal_sync_room_location": String, "cal_sync_show_exams": int,
|
||||
"cal_sync_show_teacher": int, "cal_sync_renamed": int,
|
||||
@@ -52,6 +53,7 @@ const settingsDB = DatabaseStruct("settings", {
|
||||
"nav_shadow": int,
|
||||
"new_colors": int,
|
||||
"uwu_mode": int,
|
||||
"new_popups": int,
|
||||
// quick settings
|
||||
"q_timetable_lesson_num": int, "q_timetable_sub_tiles": int,
|
||||
"q_subjects_sub_tiles": int,
|
||||
@@ -61,7 +63,8 @@ const settingsDB = DatabaseStruct("settings", {
|
||||
const usersDB = DatabaseStruct("users", {
|
||||
"id": String, "name": String, "username": String, "password": String,
|
||||
"institute_code": String, "student": String, "role": int,
|
||||
"nickname": String, "picture": String // premium only
|
||||
"nickname": String, "picture": String, // premium only (it's now plus btw)
|
||||
"grade_streak": int,
|
||||
});
|
||||
const userDataDB = DatabaseStruct("user_data", {
|
||||
"id": String, "grades": String, "timetable": String, "exams": String,
|
||||
@@ -84,12 +87,13 @@ const userDataDB = DatabaseStruct("user_data", {
|
||||
"goal_befores": String,
|
||||
"goal_pin_dates": String,
|
||||
// todo and notes
|
||||
"todo_items": String, "self_notes": String,
|
||||
"todo_items": String, "self_notes": String, "self_todo": String,
|
||||
// v5 shit
|
||||
"roundings": String,
|
||||
"grade_rarities": String,
|
||||
"linked_accounts": String,
|
||||
"custom_lesson_desc": String,
|
||||
"watch_data": String,
|
||||
});
|
||||
|
||||
Future<void> createTable(Database db, DatabaseStruct struct) =>
|
||||
@@ -129,7 +133,12 @@ Future<Database> initDB(DatabaseProvider database) async {
|
||||
await migrateDB(
|
||||
db,
|
||||
struct: usersDB,
|
||||
defaultValues: {"role": 0, "nickname": "", "picture": ""},
|
||||
defaultValues: {
|
||||
"role": 0,
|
||||
"nickname": "",
|
||||
"picture": "",
|
||||
"grade_streak": 0
|
||||
},
|
||||
);
|
||||
await migrateDB(db, struct: userDataDB, defaultValues: {
|
||||
"grades": "[]", "timetable": "[]", "exams": "[]", "homework": "[]",
|
||||
@@ -152,12 +161,13 @@ Future<Database> initDB(DatabaseProvider database) async {
|
||||
"goal_befores": "{}",
|
||||
"goal_pin_dates": "{}",
|
||||
// todo and notes
|
||||
"todo_items": "{}", "self_notes": "[]",
|
||||
"todo_items": "{}", "self_notes": "[]", "self_todo": "[]",
|
||||
// v5 shit
|
||||
"roundings": "{}",
|
||||
"grade_rarities": "{}",
|
||||
"linked_accounts": "[]",
|
||||
"custom_lesson_desc": "{}",
|
||||
"watch_data": "{}",
|
||||
});
|
||||
} catch (error) {
|
||||
print("ERROR: migrateDB: $error");
|
||||
|
||||
@@ -317,6 +317,18 @@ class UserDatabaseQuery {
|
||||
return selfNotes;
|
||||
}
|
||||
|
||||
Future<List<TodoItem>> getTodoItems({required String userId}) async {
|
||||
List<Map> userData =
|
||||
await db.query("user_data", where: "id = ?", whereArgs: [userId]);
|
||||
if (userData.isEmpty) return [];
|
||||
String? todoItemsJson = userData.elementAt(0)["self_todo"] as String?;
|
||||
if (todoItemsJson == null) return [];
|
||||
List<TodoItem> todoItems = (jsonDecode(todoItemsJson) as List)
|
||||
.map((e) => TodoItem.fromJson(e))
|
||||
.toList();
|
||||
return todoItems;
|
||||
}
|
||||
|
||||
// v5
|
||||
Future<Map<String, String>> getRoundings({required String userId}) async {
|
||||
List<Map> userData =
|
||||
|
||||
@@ -196,6 +196,13 @@ class UserDatabaseStore {
|
||||
where: "id = ?", whereArgs: [userId]);
|
||||
}
|
||||
|
||||
Future<void> storeSelfTodoItems(List<TodoItem> todoItems,
|
||||
{required String userId}) async {
|
||||
String todoItemsJson = jsonEncode(todoItems.map((e) => e.json).toList());
|
||||
await db.update("user_data", {"self_todo": todoItemsJson},
|
||||
where: "id = ?", whereArgs: [userId]);
|
||||
}
|
||||
|
||||
// v5
|
||||
Future<void> storeRoundings(Map<String, String> roundings,
|
||||
{required String userId}) async {
|
||||
|
||||
@@ -212,7 +212,7 @@ nem lesz tőle használhatatlan az app, de kikommenteltem, mert még a végén k
|
||||
),
|
||||
notificationDetails,
|
||||
payload: "grades");
|
||||
} else if (settingsProvider.gradeOpeningFun) {
|
||||
} else if (settingsProvider.gradeOpeningFun) {
|
||||
// if surprise grades are enabled, show a notification without the grade
|
||||
await flutterLocalNotificationsPlugin.show(
|
||||
grade.id.hashCode,
|
||||
@@ -485,9 +485,10 @@ nem lesz tőle használhatatlan az app, de kikommenteltem, mert még a végén k
|
||||
lesson.lessonIndex,
|
||||
lesson.name,
|
||||
dayTitle(lesson.date),
|
||||
lesson.substituteTeacher!.isRenamed
|
||||
? lesson.substituteTeacher!.renamedTo!
|
||||
: lesson.substituteTeacher!.name
|
||||
((lesson.substituteTeacher?.isRenamed ?? false)
|
||||
? lesson.substituteTeacher?.renamedTo!
|
||||
: lesson.substituteTeacher?.name) ??
|
||||
'',
|
||||
],
|
||||
),
|
||||
notificationDetails,
|
||||
@@ -505,9 +506,10 @@ nem lesz tőle használhatatlan az app, de kikommenteltem, mert még a végén k
|
||||
dayTitle(lesson.date),
|
||||
lesson.lessonIndex,
|
||||
lesson.name,
|
||||
lesson.substituteTeacher!.isRenamed
|
||||
? lesson.substituteTeacher!.renamedTo!
|
||||
: lesson.substituteTeacher!.name
|
||||
((lesson.substituteTeacher?.isRenamed ?? false)
|
||||
? lesson.substituteTeacher?.renamedTo!
|
||||
: lesson.substituteTeacher?.name) ??
|
||||
'',
|
||||
],
|
||||
),
|
||||
notificationDetails,
|
||||
@@ -525,9 +527,10 @@ nem lesz tőle használhatatlan az app, de kikommenteltem, mert még a végén k
|
||||
lesson.lessonIndex,
|
||||
lesson.name,
|
||||
dayTitle(lesson.date),
|
||||
lesson.substituteTeacher!.isRenamed
|
||||
? lesson.substituteTeacher!.renamedTo!
|
||||
: lesson.substituteTeacher!.name
|
||||
((lesson.substituteTeacher?.isRenamed ?? false)
|
||||
? lesson.substituteTeacher?.renamedTo!
|
||||
: lesson.substituteTeacher?.name) ??
|
||||
'',
|
||||
],
|
||||
),
|
||||
notificationDetails,
|
||||
@@ -608,9 +611,10 @@ nem lesz tőle használhatatlan az app, de kikommenteltem, mert még a végén k
|
||||
lesson.lessonIndex,
|
||||
lesson.name,
|
||||
dayTitle(lesson.date),
|
||||
lesson.substituteTeacher!.isRenamed
|
||||
? lesson.substituteTeacher!.renamedTo!
|
||||
: lesson.substituteTeacher!.name
|
||||
((lesson.substituteTeacher?.isRenamed ?? false)
|
||||
? lesson.substituteTeacher?.renamedTo!
|
||||
: lesson.substituteTeacher?.name) ??
|
||||
'',
|
||||
],
|
||||
),
|
||||
notificationDetails,
|
||||
@@ -629,9 +633,10 @@ nem lesz tőle használhatatlan az app, de kikommenteltem, mert még a végén k
|
||||
dayTitle(lesson.date),
|
||||
lesson.lessonIndex,
|
||||
lesson.name,
|
||||
lesson.substituteTeacher!.isRenamed
|
||||
? lesson.substituteTeacher!.renamedTo!
|
||||
: lesson.substituteTeacher!.name
|
||||
((lesson.substituteTeacher?.isRenamed ?? false)
|
||||
? lesson.substituteTeacher?.renamedTo!
|
||||
: lesson.substituteTeacher?.name) ??
|
||||
'',
|
||||
],
|
||||
),
|
||||
notificationDetails,
|
||||
|
||||
@@ -292,3 +292,105 @@ class ShortSubject {
|
||||
return subject?.name.capital() ?? subjectName?.capital() ?? "?";
|
||||
}
|
||||
}
|
||||
|
||||
// new v5 thingie
|
||||
class SubjectBooklet {
|
||||
// static String resolveName({GradeSubject? subject, String? subjectName}) =>
|
||||
// _resolve(subject: subject, subjectName: subjectName).name;
|
||||
static String resolveVariant(
|
||||
{GradeSubject? subject,
|
||||
String? subjectName,
|
||||
required BuildContext context}) =>
|
||||
_resolve(subject: subject, subjectName: subjectName);
|
||||
|
||||
static String _resolve({GradeSubject? subject, String? subjectName}) {
|
||||
assert(!(subject == null && subjectName == null));
|
||||
|
||||
String name = (subject?.name ?? subjectName ?? "")
|
||||
.toLowerCase()
|
||||
.specialChars()
|
||||
.trim();
|
||||
String category =
|
||||
subject?.category.description.toLowerCase().specialChars() ?? "";
|
||||
|
||||
String basePath = "assets/svg/cover_arts";
|
||||
|
||||
// todo: check for categories
|
||||
if (RegExp("mate(k|matika)").hasMatch(name) || category == "matematika") {
|
||||
return "$basePath/grid.svg";
|
||||
} else if (RegExp("magyar nyelv|nyelvtan").hasMatch(name)) {
|
||||
return "$basePath/line.svg";
|
||||
} else if (RegExp("irodalom").hasMatch(name)) {
|
||||
return "$basePath/line.svg";
|
||||
} else if (RegExp("tor(i|tenelem)").hasMatch(name)) {
|
||||
return "$basePath/line.svg";
|
||||
} else if (RegExp("foldrajz").hasMatch(name)) {
|
||||
return "$basePath/plain.svg";
|
||||
} else if (RegExp("rajz|muvtori|muveszet|vizualis").hasMatch(name)) {
|
||||
return "$basePath/plain.svg";
|
||||
} else if (RegExp("fizika").hasMatch(name)) {
|
||||
return "$basePath/plain.svg";
|
||||
} else if (RegExp("^enek|zene|szolfezs|zongora|korus").hasMatch(name)) {
|
||||
return "$basePath/vocal.svg";
|
||||
} else if (RegExp("^tes(i|tneveles)|sport|edzeselmelet").hasMatch(name)) {
|
||||
return "$basePath/plain.svg";
|
||||
} else if (RegExp("kemia").hasMatch(name)) {
|
||||
return "$basePath/plain.svg";
|
||||
} else if (RegExp("biologia").hasMatch(name)) {
|
||||
return "$basePath/plain.svg";
|
||||
} else if (RegExp(
|
||||
"kornyezet|termeszet ?(tudomany|ismeret)|hon( es nep)?ismeret")
|
||||
.hasMatch(name)) {
|
||||
return "$basePath/plain.svg";
|
||||
} else if (RegExp("(hit|erkolcs)tan|vallas|etika|bibliaismeret")
|
||||
.hasMatch(name)) {
|
||||
return "$basePath/line.svg";
|
||||
} else if (RegExp("penzugy").hasMatch(name)) {
|
||||
return "$basePath/plain.svg";
|
||||
} else if (RegExp("informatika|szoftver|iroda|digitalis").hasMatch(name)) {
|
||||
return "$basePath/grid.svg";
|
||||
} else if (RegExp("prog").hasMatch(name)) {
|
||||
return "$basePath/grid.svg";
|
||||
} else if (RegExp("halozat").hasMatch(name)) {
|
||||
return "$basePath/grid.svg";
|
||||
} else if (RegExp("szinhaz").hasMatch(name)) {
|
||||
return "$basePath/vocal.svg";
|
||||
} else if (RegExp("film|media").hasMatch(name)) {
|
||||
return "$basePath/plain.svg";
|
||||
} else if (RegExp("elektro(tech)?nika").hasMatch(name)) {
|
||||
return "$basePath/grid.svg";
|
||||
} else if (RegExp("gepesz|mernok|ipar").hasMatch(name)) {
|
||||
return "$basePath/grid.svg";
|
||||
} else if (RegExp("technika").hasMatch(name)) {
|
||||
return "$basePath/plain.svg";
|
||||
} else if (RegExp("tanc").hasMatch(name)) {
|
||||
return "$basePath/vocal.svg";
|
||||
} else if (RegExp("filozofia").hasMatch(name)) {
|
||||
return "$basePath/line.svg";
|
||||
} else if (RegExp("osztaly(fonoki|kozosseg)|kozossegi|neveles")
|
||||
.hasMatch(name) ||
|
||||
name == "ofo") {
|
||||
return "$basePath/plain.svg";
|
||||
} else if (RegExp("gazdasag").hasMatch(name)) {
|
||||
return "$basePath/line.svg";
|
||||
} else if (RegExp("szorgalom").hasMatch(name)) {
|
||||
return "$basePath/plain.svg";
|
||||
} else if (RegExp("magatartas").hasMatch(name)) {
|
||||
return "$basePath/plain.svg";
|
||||
} else if (RegExp(
|
||||
"angol|nemet|francia|olasz|orosz|spanyol|latin|kinai|nyelv")
|
||||
.hasMatch(name)) {
|
||||
return "$basePath/line.svg";
|
||||
} else if (RegExp("linux").hasMatch(name)) {
|
||||
return "$basePath/plain.svg";
|
||||
} else if (RegExp("adatbazis").hasMatch(name)) {
|
||||
return "$basePath/grid.svg";
|
||||
} else if (RegExp("asztali alkalmazasok").hasMatch(name)) {
|
||||
return "$basePath/grid.svg";
|
||||
} else if (RegExp("projekt").hasMatch(name)) {
|
||||
return "$basePath/plain.svg";
|
||||
}
|
||||
|
||||
return "$basePath/plain.svg";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,3 +33,37 @@ class SelfNote {
|
||||
'note_type': noteType == NoteType.image ? 'image' : 'text',
|
||||
};
|
||||
}
|
||||
|
||||
class TodoItem {
|
||||
String id;
|
||||
String title;
|
||||
String content;
|
||||
bool done;
|
||||
|
||||
Map? json;
|
||||
|
||||
TodoItem({
|
||||
required this.id,
|
||||
required this.title,
|
||||
required this.content,
|
||||
required this.done,
|
||||
this.json,
|
||||
});
|
||||
|
||||
factory TodoItem.fromJson(Map json) {
|
||||
return TodoItem(
|
||||
id: json['id'],
|
||||
title: json['title'],
|
||||
content: json['content'],
|
||||
done: json['done'],
|
||||
json: json,
|
||||
);
|
||||
}
|
||||
|
||||
get toJson => {
|
||||
'id': id,
|
||||
'title': title,
|
||||
'content': content,
|
||||
'done': done,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -96,6 +96,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
// more
|
||||
bool _showBreaks;
|
||||
String _fontFamily;
|
||||
bool _titleOnlyFont;
|
||||
String _plusSessionId;
|
||||
String _calSyncRoomLocation;
|
||||
bool _calSyncShowExams;
|
||||
@@ -105,6 +106,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
bool _navShadow;
|
||||
bool _newColors;
|
||||
bool _uwuMode;
|
||||
bool _newPopups;
|
||||
// quick settings
|
||||
bool _qTimetableLessonNum;
|
||||
bool _qTimetableSubTiles;
|
||||
@@ -167,6 +169,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
required String pinSetNotify,
|
||||
required String pinSetExtras,
|
||||
required String fontFamily,
|
||||
required bool titleOnlyFont,
|
||||
required String plusSessionId,
|
||||
required String calSyncRoomLocation,
|
||||
required bool calSyncShowExams,
|
||||
@@ -176,6 +179,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
required bool navShadow,
|
||||
required bool newColors,
|
||||
required bool uwuMode,
|
||||
required bool newPopups,
|
||||
required bool qTimetableLessonNum,
|
||||
required bool qTimetableSubTiles,
|
||||
required bool qSubjectsSubTiles,
|
||||
@@ -235,6 +239,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
_pinSetNotify = pinSetNotify,
|
||||
_pinSetExtras = pinSetExtras,
|
||||
_fontFamily = fontFamily,
|
||||
_titleOnlyFont = titleOnlyFont,
|
||||
_plusSessionId = plusSessionId,
|
||||
_calSyncRoomLocation = calSyncRoomLocation,
|
||||
_calSyncShowExams = calSyncShowExams,
|
||||
@@ -244,6 +249,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
_navShadow = navShadow,
|
||||
_newColors = newColors,
|
||||
_uwuMode = uwuMode,
|
||||
_newPopups = newPopups,
|
||||
_qTimetableLessonNum = qTimetableLessonNum,
|
||||
_qTimetableSubTiles = qTimetableSubTiles,
|
||||
_qSubjectsSubTiles = qSubjectsSubTiles;
|
||||
@@ -322,6 +328,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
pinSetNotify: map['notify_s_pin'],
|
||||
pinSetExtras: map['extras_s_pin'],
|
||||
fontFamily: map['font_family'],
|
||||
titleOnlyFont: map['title_only_font'] == 1,
|
||||
plusSessionId: map['plus_session_id'],
|
||||
calSyncRoomLocation: map['cal_sync_room_location'],
|
||||
calSyncShowExams: map['cal_sync_show_exams'] == 1,
|
||||
@@ -331,6 +338,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
navShadow: map['nav_shadow'] == 1,
|
||||
newColors: map['new_colors'] == 1,
|
||||
uwuMode: map['uwu_mode'] == 1,
|
||||
newPopups: map['new_popups'] == 1,
|
||||
qTimetableLessonNum: map['q_timetable_lesson_num'] == 1,
|
||||
qTimetableSubTiles: map['q_timetable_sub_tiles'] == 1,
|
||||
qSubjectsSubTiles: map['q_subjects_sub_tiles'] == 1,
|
||||
@@ -397,6 +405,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
"notify_s_pin": _pinSetNotify,
|
||||
"extras_s_pin": _pinSetExtras,
|
||||
"font_family": _fontFamily,
|
||||
"title_only_font": _titleOnlyFont ? 1 : 0,
|
||||
"plus_session_id": _plusSessionId,
|
||||
"cal_sync_room_location": _calSyncRoomLocation,
|
||||
"cal_sync_show_exams": _calSyncShowExams ? 1 : 0,
|
||||
@@ -406,6 +415,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
"nav_shadow": _navShadow ? 1 : 0,
|
||||
"new_colors": _newColors ? 1 : 0,
|
||||
"uwu_mode": _uwuMode ? 1 : 0,
|
||||
"new_popups": _newPopups ? 1 : 0,
|
||||
"q_timetable_lesson_num": _qTimetableLessonNum ? 1 : 0,
|
||||
"q_timetable_sub_tiles": _qTimetableSubTiles ? 1 : 0,
|
||||
"q_subjects_sub_tiles": _qSubjectsSubTiles ? 1 : 0,
|
||||
@@ -476,6 +486,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
pinSetNotify: '',
|
||||
pinSetExtras: '',
|
||||
fontFamily: '',
|
||||
titleOnlyFont: false,
|
||||
plusSessionId: '',
|
||||
calSyncRoomLocation: 'location',
|
||||
calSyncShowExams: true,
|
||||
@@ -485,6 +496,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
navShadow: true,
|
||||
newColors: true,
|
||||
uwuMode: false,
|
||||
newPopups: true,
|
||||
qTimetableLessonNum: true,
|
||||
qTimetableSubTiles: true,
|
||||
qSubjectsSubTiles: true,
|
||||
@@ -546,6 +558,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
String get currentThemeCreator => _currentThemeCreator;
|
||||
bool get showBreaks => _showBreaks;
|
||||
String get fontFamily => _fontFamily;
|
||||
bool get titleOnlyFont => _titleOnlyFont;
|
||||
String get plusSessionId => _plusSessionId;
|
||||
String get calSyncRoomLocation => _calSyncRoomLocation;
|
||||
bool get calSyncShowExams => _calSyncShowExams;
|
||||
@@ -555,6 +568,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
bool get navShadow => _navShadow;
|
||||
bool get newColors => _newColors;
|
||||
bool get uwuMode => _uwuMode;
|
||||
bool get newPopups => _newPopups;
|
||||
bool get qTimetableLessonNum => _qTimetableLessonNum;
|
||||
bool get qTimetableSubTiles => _qTimetableSubTiles;
|
||||
bool get qSubjectsSubTiles => _qSubjectsSubTiles;
|
||||
@@ -612,6 +626,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
String? currentThemeCreator,
|
||||
bool? showBreaks,
|
||||
String? fontFamily,
|
||||
bool? titleOnlyFont,
|
||||
String? plusSessionId,
|
||||
String? calSyncRoomLocation,
|
||||
bool? calSyncShowExams,
|
||||
@@ -621,6 +636,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
bool? navShadow,
|
||||
bool? newColors,
|
||||
bool? uwuMode,
|
||||
bool? newPopups,
|
||||
bool? qTimetableLessonNum,
|
||||
bool? qTimetableSubTiles,
|
||||
bool? qSubjectsSubTiles,
|
||||
@@ -777,6 +793,9 @@ class SettingsProvider extends ChangeNotifier {
|
||||
if (fontFamily != null && fontFamily != _fontFamily) {
|
||||
_fontFamily = fontFamily;
|
||||
}
|
||||
if (titleOnlyFont != null && titleOnlyFont != _titleOnlyFont) {
|
||||
_titleOnlyFont = titleOnlyFont;
|
||||
}
|
||||
if (plusSessionId != null && plusSessionId != _plusSessionId) {
|
||||
_plusSessionId = plusSessionId;
|
||||
}
|
||||
@@ -806,6 +825,9 @@ class SettingsProvider extends ChangeNotifier {
|
||||
if (uwuMode != null && uwuMode != _uwuMode) {
|
||||
_uwuMode = uwuMode;
|
||||
}
|
||||
if (newPopups != null && newPopups != _newPopups) {
|
||||
_newPopups = newPopups;
|
||||
}
|
||||
if (qTimetableLessonNum != null &&
|
||||
qTimetableLessonNum != _qTimetableLessonNum) {
|
||||
_qTimetableLessonNum = qTimetableLessonNum;
|
||||
|
||||
@@ -16,8 +16,10 @@ class User {
|
||||
Role role;
|
||||
String nickname;
|
||||
String picture;
|
||||
int gradeStreak;
|
||||
|
||||
String get displayName => nickname != '' ? nickname : name;
|
||||
bool get hasStreak => gradeStreak > 0;
|
||||
|
||||
User({
|
||||
String? id,
|
||||
@@ -29,6 +31,7 @@ class User {
|
||||
required this.role,
|
||||
this.nickname = "",
|
||||
this.picture = "",
|
||||
this.gradeStreak = 0,
|
||||
}) {
|
||||
if (id != null) {
|
||||
this.id = id;
|
||||
@@ -57,6 +60,7 @@ class User {
|
||||
role: Role.values[map["role"] ?? 0],
|
||||
nickname: map["nickname"] ?? "",
|
||||
picture: map["picture"] ?? "",
|
||||
gradeStreak: map["grade_streak"] ?? 0,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -104,9 +104,10 @@ class AppTheme {
|
||||
brightness: Brightness.light,
|
||||
useMaterial3: true,
|
||||
fontFamily: _defaultFontFamily,
|
||||
textTheme:
|
||||
googleFontsMap[settings.fontFamily]?.apply(bodyColor: textColor) ??
|
||||
const TextTheme().apply(bodyColor: textColor),
|
||||
textTheme: !settings.titleOnlyFont
|
||||
? (googleFontsMap[settings.fontFamily]?.apply(bodyColor: textColor) ??
|
||||
const TextTheme().apply(bodyColor: textColor))
|
||||
: null,
|
||||
scaffoldBackgroundColor: backgroundColor,
|
||||
primaryColor: lightColors.filc,
|
||||
dividerColor: const Color(0x00000000),
|
||||
@@ -229,8 +230,9 @@ class AppTheme {
|
||||
brightness: Brightness.dark,
|
||||
useMaterial3: true,
|
||||
fontFamily: _defaultFontFamily,
|
||||
textTheme:
|
||||
googleFontsMap[settings.fontFamily]?.apply(bodyColor: textColor),
|
||||
textTheme: !settings.titleOnlyFont
|
||||
? (googleFontsMap[settings.fontFamily]?.apply(bodyColor: textColor))
|
||||
: null,
|
||||
scaffoldBackgroundColor: backgroundColor,
|
||||
primaryColor: darkColors.filc,
|
||||
dividerColor: const Color(0x00000000),
|
||||
|
||||
@@ -192,6 +192,8 @@ class FilcColorPickerState extends State<FilcColorPicker> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
bool advOverride = widget.colorMode == CustomColorMode.grade ? true : false;
|
||||
|
||||
if (MediaQuery.of(context).orientation == Orientation.portrait ||
|
||||
widget.portraitOnly) {
|
||||
return Column(
|
||||
@@ -218,7 +220,7 @@ class FilcColorPickerState extends State<FilcColorPicker> {
|
||||
child: colorPickerSlider(TrackType.saturation),
|
||||
),
|
||||
),
|
||||
if (isAdvancedView)
|
||||
if (isAdvancedView || advOverride)
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 12.0, right: 12.0),
|
||||
child: SizedBox(
|
||||
@@ -230,7 +232,7 @@ class FilcColorPickerState extends State<FilcColorPicker> {
|
||||
],
|
||||
),
|
||||
),
|
||||
if (isAdvancedView &&
|
||||
if ((isAdvancedView || advOverride) &&
|
||||
widget.colorMode != CustomColorMode.theme &&
|
||||
widget.colorMode != CustomColorMode.enterId)
|
||||
Padding(
|
||||
@@ -295,7 +297,8 @@ class FilcColorPickerState extends State<FilcColorPicker> {
|
||||
],
|
||||
),
|
||||
),
|
||||
if (widget.colorMode != CustomColorMode.enterId)
|
||||
if (widget.colorMode != CustomColorMode.enterId &&
|
||||
widget.colorMode != CustomColorMode.grade)
|
||||
SizedBox(
|
||||
height: 70 * (widget.colorMode == CustomColorMode.theme ? 2 : 1),
|
||||
child: BlockPicker(
|
||||
@@ -347,7 +350,8 @@ class FilcColorPickerState extends State<FilcColorPicker> {
|
||||
),
|
||||
),
|
||||
if (widget.colorMode != CustomColorMode.theme &&
|
||||
widget.colorMode != CustomColorMode.enterId)
|
||||
widget.colorMode != CustomColorMode.enterId &&
|
||||
!advOverride)
|
||||
Material(
|
||||
color: Colors.transparent,
|
||||
child: InkWell(
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:i18n_extension/i18n_extension.dart';
|
||||
import 'package:refilc/models/settings.dart';
|
||||
import 'package:refilc_kreta_api/providers/exam_provider.dart';
|
||||
import 'package:refilc_kreta_api/providers/homework_provider.dart';
|
||||
@@ -8,7 +9,8 @@ import 'package:refilc_kreta_api/models/lesson.dart';
|
||||
import 'package:refilc/utils/format.dart';
|
||||
import 'package:refilc_mobile_ui/common/panel/panel.dart';
|
||||
import 'package:refilc_mobile_ui/common/round_border_icon.dart';
|
||||
import 'package:refilc_mobile_ui/common/widgets/exam/exam_view.dart';
|
||||
// import 'package:refilc_mobile_ui/common/widgets/exam/exam_view.dart';
|
||||
import 'package:refilc_mobile_ui/common/widgets/exam/exam_viewable.dart';
|
||||
import 'package:refilc_mobile_ui/common/widgets/homework/homework_view.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
|
||||
@@ -109,7 +111,8 @@ class LessonTile extends StatelessWidget {
|
||||
title: exam.description != ""
|
||||
? exam.description
|
||||
: exam.mode?.description ?? "exam".i18n,
|
||||
onPressed: () => ExamView.show(exam, context: context),
|
||||
// onPressed: () => ExamView.show(exam, context: context),
|
||||
onPressed: () => ExamPopup.show(context: context, exam: exam),
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -190,7 +193,7 @@ class LessonTile extends StatelessWidget {
|
||||
: Transform.translate(
|
||||
offset: const Offset(0, -2.0),
|
||||
child: Text(
|
||||
"${DateFormat("H:mm").format(lesson.start)}-${DateFormat("H:mm").format(lesson.end)}",
|
||||
"${DateFormat("E, H:mm", I18n.of(context).locale.toString()).format(lesson.start)}-${DateFormat("H:mm").format(lesson.end)}",
|
||||
textAlign: TextAlign.start,
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
|
||||
@@ -3,7 +3,7 @@ description: "Egy nem hivatalos e-KRÉTA kliens, diákoktól diákoknak."
|
||||
homepage: https://refilc.hu
|
||||
publish_to: "none"
|
||||
|
||||
version: 5.0.0+257
|
||||
version: 5.0.1+265
|
||||
|
||||
environment:
|
||||
sdk: ">=2.17.0 <=3.3.2"
|
||||
@@ -104,6 +104,7 @@ flutter:
|
||||
- assets/svg/menu_icons/
|
||||
- assets/other/dirtywords.xml
|
||||
- assets/svg/
|
||||
- assets/svg/cover_arts/
|
||||
|
||||
fonts:
|
||||
- family: FilcIcons
|
||||
|
||||
Reference in New Issue
Block a user