Skip to content

Commit 8edec0b

Browse files
author
jiaoyaning
committed
feat(顶部): 历史记录
1 parent e746546 commit 8edec0b

File tree

3 files changed

+77
-5
lines changed

3 files changed

+77
-5
lines changed

app/src/main/java/com/jyn/composecalculator/DateViewModel.kt

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
package com.jyn.composecalculator
22

33
import android.app.Application
4+
import android.widget.Toast
45
import androidx.compose.runtime.mutableStateOf
56
import androidx.compose.ui.unit.dp
67
import androidx.lifecycle.AndroidViewModel
78
import com.udojava.evalex.Expression
89

10+
data class Date(var input: String, var result: String)
11+
912
class DateViewModel(application: Application) : AndroidViewModel(application) {
1013
var textBoxHeight = 0.dp
14+
var results = mutableListOf<Date>()
1115
var inputText = mutableStateOf("")
1216
var resultText = mutableStateOf("")
17+
var lastInputText = mutableStateOf("")
1318

1419
fun append(text: String) {
1520
inputText.value = inputText.value + text
@@ -26,7 +31,13 @@ class DateViewModel(application: Application) : AndroidViewModel(application) {
2631
}
2732

2833
fun calculate() {
29-
val expr = inputText.value.replace('×', '*').replace('÷', '/')
34+
if (lastInputText.value == inputText.value) {
35+
inputText.value = resultText.value
36+
resultText.value = ""
37+
return
38+
}
39+
40+
val expr = inputText.value.replace('×', '*').replace('÷', '/').replace("%", "/100")
3041
val expressions = arrayOf('+', '-', '*', '/')
3142
if (expr.isEmpty()) return
3243
if (!expressions.any { expr.contains(it) }) {
@@ -36,8 +47,16 @@ class DateViewModel(application: Application) : AndroidViewModel(application) {
3647
resultText.value = ""
3748
return
3849
}
39-
val eval = Expression(expr).eval()
50+
try {
51+
val eval = Expression(expr).setPrecision(18).eval()
52+
resultText.value = eval.toString()
53+
lastInputText.value = inputText.value
4054

41-
resultText.value = eval.toString()
55+
if (results.size > 10) results.removeFirst()
56+
results.add(0, Date(inputText.value, resultText.value))
57+
} catch (e: Exception) {
58+
e.printStackTrace()
59+
Toast.makeText(getApplication(), "计算错误!", Toast.LENGTH_SHORT).show()
60+
}
4261
}
4362
}

app/src/main/java/com/jyn/composecalculator/ui/TopResultView.kt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.jyn.composecalculator.ui
22

3+
import androidx.compose.foundation.background
34
import androidx.compose.foundation.gestures.Orientation
45
import androidx.compose.foundation.layout.*
6+
import androidx.compose.foundation.lazy.LazyColumn
7+
import androidx.compose.foundation.lazy.items
58
import androidx.compose.foundation.shape.RoundedCornerShape
69
import androidx.compose.material.ExperimentalMaterialApi
710
import androidx.compose.material.FractionalThreshold
@@ -11,6 +14,7 @@ import androidx.compose.material.swipeable
1114
import androidx.compose.material3.Surface
1215
import androidx.compose.runtime.Composable
1316
import androidx.compose.ui.Modifier
17+
import androidx.compose.ui.graphics.Color
1418
import androidx.compose.ui.platform.LocalConfiguration
1519
import androidx.compose.ui.platform.LocalDensity
1620
import androidx.compose.ui.tooling.preview.Preview
@@ -21,6 +25,7 @@ import com.apkfuns.logutils.LogUtils
2125
import com.jyn.composecalculator.BOTTOM_FRACTION
2226
import com.jyn.composecalculator.DateViewModel
2327
import com.jyn.composecalculator.ui.view.InputText
28+
import com.jyn.composecalculator.ui.view.ItemText
2429
import com.jyn.composecalculator.ui.view.SlideIndicator
2530

2631
/**
@@ -59,7 +64,7 @@ fun TopResultView() {
5964
thresholds = { _, _ -> FractionalThreshold(0.2f) },
6065
resistance = resistanceConfig(
6166
anchors.keys,
62-
10.dp.value,
67+
5.dp.value,
6368
0f
6469
),
6570
velocityThreshold = 60.dp
@@ -81,6 +86,19 @@ fun TextBox(process: Float) {
8186
.padding(10.dp),
8287
verticalArrangement = Arrangement.Bottom
8388
) {
89+
LazyColumn(
90+
modifier = Modifier
91+
.weight(1f)
92+
.background(Color.Gray),
93+
reverseLayout = true,
94+
userScrollEnabled = false
95+
) {
96+
items(viewModel.results) {
97+
Spacer(modifier = Modifier.height(5.dp))
98+
ItemText(input = it.input, result = it.result)
99+
}
100+
}
101+
84102
InputText(viewModel.inputText.value)
85103

86104
Spacer(modifier = Modifier.height(5.dp))

app/src/main/java/com/jyn/composecalculator/ui/view/ItemTextView.kt

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,14 @@ import androidx.compose.ui.Alignment
1212
import androidx.compose.ui.Modifier
1313
import androidx.compose.ui.graphics.Color
1414
import androidx.compose.ui.layout.onSizeChanged
15+
import androidx.compose.ui.text.ExperimentalTextApi
16+
import androidx.compose.ui.text.PlatformTextStyle
17+
import androidx.compose.ui.text.TextStyle
18+
import androidx.compose.ui.text.font.FontStyle
1519
import androidx.compose.ui.text.style.TextAlign
20+
import androidx.compose.ui.tooling.preview.Preview
1621
import androidx.compose.ui.unit.dp
22+
import androidx.compose.ui.unit.em
1723
import androidx.compose.ui.unit.sp
1824
import androidx.lifecycle.viewmodel.compose.viewModel
1925
import com.jyn.composecalculator.DateViewModel
@@ -68,9 +74,38 @@ fun InputText(input: String) {
6874
}
6975
}
7076

77+
@OptIn(ExperimentalTextApi::class)
7178
@Composable
7279
fun ItemText(input: String, result: String) {
7380
Column(verticalArrangement = Arrangement.Bottom) {
74-
Text(modifier = Modifier.fillMaxWidth(), text = input, textAlign = TextAlign.End)
81+
Text(
82+
modifier = Modifier.fillMaxWidth(),
83+
text = input,
84+
fontSize = 20.sp,
85+
textAlign = TextAlign.End,
86+
style = TextStyle(
87+
platformStyle = PlatformTextStyle(
88+
includeFontPadding = false
89+
)
90+
)
91+
)
92+
93+
Text(
94+
modifier = Modifier.fillMaxWidth(),
95+
text = result,
96+
fontSize = 28.sp,
97+
textAlign = TextAlign.End,
98+
style = TextStyle(
99+
platformStyle = PlatformTextStyle(
100+
includeFontPadding = false
101+
)
102+
)
103+
)
75104
}
105+
}
106+
107+
@Preview(showBackground = true)
108+
@Composable
109+
fun ItemTextPre() {
110+
ItemText("123456+1231231", "67474774747")
76111
}

0 commit comments

Comments
 (0)