💄 Optimize styling
This commit is contained in:
3
devtools_options.yaml
Normal file
3
devtools_options.yaml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
description: This file stores settings for Dart & Flutter DevTools.
|
||||||
|
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
|
||||||
|
extensions:
|
157
lib/main.dart
157
lib/main.dart
@@ -1,20 +1,28 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
import 'package:latext/latext.dart';
|
import 'package:latext/latext.dart';
|
||||||
import 'package:simple_math_calc/models/calculation_step.dart';
|
import 'package:simple_math_calc/models/calculation_step.dart';
|
||||||
import 'package:simple_math_calc/solver_service.dart';
|
import 'package:simple_math_calc/solver.dart';
|
||||||
|
import 'dart:math';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
runApp(const MyApp());
|
runApp(const CalcApp());
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyApp extends StatelessWidget {
|
class CalcApp extends StatelessWidget {
|
||||||
const MyApp({super.key});
|
const CalcApp({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return MaterialApp(
|
return MaterialApp(
|
||||||
title: '方程计算器',
|
title: '方程计算器',
|
||||||
theme: ThemeData(primarySwatch: Colors.blue, useMaterial3: true),
|
theme: ThemeData(
|
||||||
|
primarySwatch: Colors.blue,
|
||||||
|
useMaterial3: true,
|
||||||
|
textTheme: GoogleFonts.notoSerifScTextTheme(
|
||||||
|
Theme.of(context).textTheme, // Inherit existing text theme
|
||||||
|
),
|
||||||
|
),
|
||||||
home: const CalculatorHomePage(),
|
home: const CalculatorHomePage(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -68,32 +76,41 @@ class _CalculatorHomePageState extends State<CalculatorHomePage> {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(title: const Text('方程与表达式计算器')),
|
appBar: AppBar(title: const Text('方程与表达式计算器')),
|
||||||
body: Padding(
|
body: Column(
|
||||||
padding: const EdgeInsets.all(16.0),
|
children: [
|
||||||
child: Column(
|
Padding(
|
||||||
children: [
|
padding: const EdgeInsets.only(left: 16.0, right: 16.0, top: 16.0),
|
||||||
TextField(
|
child: Row(
|
||||||
controller: _controller,
|
spacing: 8,
|
||||||
decoration: const InputDecoration(
|
children: [
|
||||||
border: OutlineInputBorder(),
|
Expanded(
|
||||||
labelText: '输入方程或表达式',
|
child: TextField(
|
||||||
hintText: '例如: 2x^2 - 8x + 6 = 0',
|
controller: _controller,
|
||||||
),
|
textAlign: TextAlign.center,
|
||||||
onSubmitted: (_) => _solveEquation(),
|
decoration: InputDecoration(
|
||||||
|
border: const OutlineInputBorder(),
|
||||||
|
labelText: '输入方程或表达式',
|
||||||
|
floatingLabelAlignment: FloatingLabelAlignment.center,
|
||||||
|
hintText: '例如: 2x^2 - 8x + 6 = 0',
|
||||||
|
),
|
||||||
|
onSubmitted: (_) => _solveEquation(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
IconButton(
|
||||||
|
onPressed: _solveEquation,
|
||||||
|
icon: Icon(Icons.play_arrow),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
const SizedBox(height: 16),
|
),
|
||||||
ElevatedButton(onPressed: _solveEquation, child: const Text('计算')),
|
Expanded(
|
||||||
const SizedBox(height: 16),
|
child: _isLoading
|
||||||
const Divider(),
|
? const Center(child: CircularProgressIndicator())
|
||||||
Expanded(
|
: _result == null
|
||||||
child: _isLoading
|
? const Center(child: Text('请输入方程开始计算'))
|
||||||
? const Center(child: CircularProgressIndicator())
|
: buildResultView(_result!),
|
||||||
: _result == null
|
),
|
||||||
? const Center(child: Text('请输入方程开始计算'))
|
],
|
||||||
: buildResultView(_result!),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -101,23 +118,66 @@ class _CalculatorHomePageState extends State<CalculatorHomePage> {
|
|||||||
// 构建结果展示视图
|
// 构建结果展示视图
|
||||||
Widget buildResultView(CalculationResult result) {
|
Widget buildResultView(CalculationResult result) {
|
||||||
return ListView(
|
return ListView(
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
left: 16,
|
||||||
|
right: 16,
|
||||||
|
bottom: MediaQuery.of(context).padding.bottom + 16,
|
||||||
|
top: 16,
|
||||||
|
),
|
||||||
children: [
|
children: [
|
||||||
...result.steps.map(
|
...result.steps.map(
|
||||||
(step) => Card(
|
(step) => Card(
|
||||||
margin: const EdgeInsets.symmetric(vertical: 8),
|
margin: const EdgeInsets.symmetric(vertical: 8),
|
||||||
child: Padding(
|
child: ClipRRect(
|
||||||
padding: const EdgeInsets.all(12.0),
|
borderRadius: const BorderRadius.all(Radius.circular(8)),
|
||||||
child: Column(
|
child: Stack(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Padding(
|
||||||
step.title,
|
padding: const EdgeInsets.only(
|
||||||
style: Theme.of(context).textTheme.titleMedium,
|
left: 12,
|
||||||
|
right: 12,
|
||||||
|
bottom: 4,
|
||||||
|
top: 16,
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
step.title,
|
||||||
|
style: Theme.of(context).textTheme.titleMedium,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 4),
|
||||||
|
SelectableText(step.explanation),
|
||||||
|
Center(
|
||||||
|
child: LaTexT(
|
||||||
|
laTeXCode: Text(
|
||||||
|
step.formula,
|
||||||
|
style: Theme.of(context).textTheme.titleMedium,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
left: -8,
|
||||||
|
top: -8,
|
||||||
|
child: Transform.rotate(
|
||||||
|
angle: pi / -5,
|
||||||
|
child: Opacity(
|
||||||
|
opacity: 0.8,
|
||||||
|
child: Badge(
|
||||||
|
backgroundColor: Theme.of(
|
||||||
|
context,
|
||||||
|
).colorScheme.primary,
|
||||||
|
label: Text(
|
||||||
|
step.stepNumber.toString(),
|
||||||
|
style: TextStyle(fontSize: 32),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 4),
|
|
||||||
SelectableText(step.explanation),
|
|
||||||
const SizedBox(height: 8),
|
|
||||||
Center(child: LaTexT(laTeXCode: Text(step.formula))),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -127,17 +187,24 @@ class _CalculatorHomePageState extends State<CalculatorHomePage> {
|
|||||||
Card(
|
Card(
|
||||||
color: Theme.of(context).colorScheme.primaryContainer,
|
color: Theme.of(context).colorScheme.primaryContainer,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(16.0),
|
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
|
const SizedBox(height: 16),
|
||||||
Text(
|
Text(
|
||||||
"最终答案:",
|
"最终答案",
|
||||||
style: Theme.of(context).textTheme.titleLarge?.copyWith(
|
style: Theme.of(context).textTheme.titleLarge?.copyWith(
|
||||||
color: Theme.of(context).colorScheme.onPrimaryContainer,
|
color: Theme.of(context).colorScheme.onPrimaryContainer,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 8),
|
LaTexT(
|
||||||
LaTexT(laTeXCode: Text(result.finalAnswer)),
|
laTeXCode: Text(
|
||||||
|
result.finalAnswer,
|
||||||
|
style: Theme.of(context).textTheme.titleMedium?.copyWith(
|
||||||
|
color: Theme.of(context).colorScheme.onPrimaryContainer,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@@ -1,10 +1,12 @@
|
|||||||
// 用来描述计算过程中的每一步
|
// 用来描述计算过程中的每一步
|
||||||
class CalculationStep {
|
class CalculationStep {
|
||||||
final String title; // 这一步的标题,例如:“第一步:整理方程”
|
final int stepNumber; // 步骤编号,例如:1, 2, 3...
|
||||||
|
final String title; // 这一步的标题,例如:"整理方程"
|
||||||
final String explanation; // 对这一步的具体文字描述
|
final String explanation; // 对这一步的具体文字描述
|
||||||
final String formula; // 这一步得到的数学式子 (可以使用 LaTeX 格式)
|
final String formula; // 这一步得到的数学式子 (可以使用 LaTeX 格式)
|
||||||
|
|
||||||
CalculationStep({
|
CalculationStep({
|
||||||
|
required this.stepNumber,
|
||||||
required this.title,
|
required this.title,
|
||||||
required this.explanation,
|
required this.explanation,
|
||||||
required this.formula,
|
required this.formula,
|
||||||
|
@@ -56,16 +56,16 @@ class SolverService {
|
|||||||
final steps = <CalculationStep>[];
|
final steps = <CalculationStep>[];
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第一步:表达式求值',
|
stepNumber: 1,
|
||||||
|
title: '表达式求值',
|
||||||
explanation: '这是一个标准的数学表达式,我们将直接计算其结果。',
|
explanation: '这是一个标准的数学表达式,我们将直接计算其结果。',
|
||||||
formula: input,
|
formula: input,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
Parser p = Parser();
|
GrammarParser p = GrammarParser();
|
||||||
Expression exp = p.parse(input);
|
Expression exp = p.parse(input);
|
||||||
ContextModel cm = ContextModel();
|
final result = RealEvaluator().evaluate(exp);
|
||||||
final result = exp.evaluate(EvaluationType.REAL, cm);
|
|
||||||
|
|
||||||
return CalculationResult(steps: steps, finalAnswer: result.toString());
|
return CalculationResult(steps: steps, finalAnswer: result.toString());
|
||||||
}
|
}
|
||||||
@@ -75,6 +75,7 @@ class SolverService {
|
|||||||
final steps = <CalculationStep>[];
|
final steps = <CalculationStep>[];
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
|
stepNumber: 0,
|
||||||
title: '原方程',
|
title: '原方程',
|
||||||
explanation: '这是一元一次方程。',
|
explanation: '这是一元一次方程。',
|
||||||
formula: '\$\$$input\$\$',
|
formula: '\$\$$input\$\$',
|
||||||
@@ -89,7 +90,8 @@ class SolverService {
|
|||||||
|
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第一步:移项',
|
stepNumber: 1,
|
||||||
|
title: '移项',
|
||||||
explanation: '将所有含 x 的项移到等式左边,常数项移到右边。',
|
explanation: '将所有含 x 的项移到等式左边,常数项移到右边。',
|
||||||
formula:
|
formula:
|
||||||
'\$\$${a}x ${c >= 0 ? '-' : '+'} ${c.abs()}x = $d ${b >= 0 ? '-' : '+'} ${b.abs()}\$\$',
|
'\$\$${a}x ${c >= 0 ? '-' : '+'} ${c.abs()}x = $d ${b >= 0 ? '-' : '+'} ${b.abs()}\$\$',
|
||||||
@@ -98,7 +100,8 @@ class SolverService {
|
|||||||
|
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第二步:合并同类项',
|
stepNumber: 2,
|
||||||
|
title: '合并同类项',
|
||||||
explanation: '合并等式两边的项。',
|
explanation: '合并等式两边的项。',
|
||||||
formula: '\$\$${newA}x = $newD\$\$',
|
formula: '\$\$${newA}x = $newD\$\$',
|
||||||
),
|
),
|
||||||
@@ -114,7 +117,8 @@ class SolverService {
|
|||||||
final x = newD / newA;
|
final x = newD / newA;
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第三步:求解 x',
|
stepNumber: 3,
|
||||||
|
title: '求解 x',
|
||||||
explanation: '两边同时除以 x 的系数 ($newA)。',
|
explanation: '两边同时除以 x 的系数 ($newA)。',
|
||||||
formula: '\$\$x = \frac{$newD}{$newA}\$\$',
|
formula: '\$\$x = \frac{$newD}{$newA}\$\$',
|
||||||
),
|
),
|
||||||
@@ -143,7 +147,8 @@ class SolverService {
|
|||||||
|
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第一步:整理方程',
|
stepNumber: 1,
|
||||||
|
title: '整理方程',
|
||||||
explanation: r'将方程整理成标准形式 ax^2+bx+c=0。',
|
explanation: r'将方程整理成标准形式 ax^2+bx+c=0。',
|
||||||
formula:
|
formula:
|
||||||
'\$\$${a}x^2 ${b >= 0 ? '+' : ''} ${b}x ${c >= 0 ? '+' : ''} $c = 0\$\$',
|
'\$\$${a}x^2 ${b >= 0 ? '+' : ''} ${b}x ${c >= 0 ? '+' : ''} $c = 0\$\$',
|
||||||
@@ -155,16 +160,18 @@ class SolverService {
|
|||||||
if (factors != null) {
|
if (factors != null) {
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第二步:因式分解法 (十字相乘)',
|
stepNumber: 2,
|
||||||
|
title: '因式分解法 (十字相乘)',
|
||||||
explanation: '我们发现可以将方程分解为两个一次因式的乘积。',
|
explanation: '我们发现可以将方程分解为两个一次因式的乘积。',
|
||||||
formula: factors.formula,
|
formula: factors.formula,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第三步:求解',
|
stepNumber: 3,
|
||||||
|
title: '求解',
|
||||||
explanation: '分别令每个因式等于 0,解出 x。',
|
explanation: '分别令每个因式等于 0,解出 x。',
|
||||||
formula: '解得 ${factors.solution}',
|
formula: factors.solution,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
return CalculationResult(steps: steps, finalAnswer: factors.solution);
|
return CalculationResult(steps: steps, finalAnswer: factors.solution);
|
||||||
@@ -173,7 +180,8 @@ class SolverService {
|
|||||||
|
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第二步:选择解法',
|
stepNumber: 2,
|
||||||
|
title: '选择解法',
|
||||||
explanation: '无法进行因式分解,我们选择使用求根公式法。',
|
explanation: '无法进行因式分解,我们选择使用求根公式法。',
|
||||||
formula: '\$\$\\Delta = b^2 - 4ac\$\$',
|
formula: '\$\$\\Delta = b^2 - 4ac\$\$',
|
||||||
),
|
),
|
||||||
@@ -182,7 +190,8 @@ class SolverService {
|
|||||||
final delta = b * b - 4 * a * c;
|
final delta = b * b - 4 * a * c;
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第三步:计算判别式 (Delta)',
|
stepNumber: 3,
|
||||||
|
title: '计算判别式 (Delta)',
|
||||||
explanation:
|
explanation:
|
||||||
'\$\$\\Delta = b^2 - 4ac = ($b)^2 - 4 \\cdot ($a) \\cdot ($c) = $delta\$\$',
|
'\$\$\\Delta = b^2 - 4ac = ($b)^2 - 4 \\cdot ($a) \\cdot ($c) = $delta\$\$',
|
||||||
formula: '\$\$\\Delta = $delta\$\$',
|
formula: '\$\$\\Delta = $delta\$\$',
|
||||||
@@ -194,7 +203,8 @@ class SolverService {
|
|||||||
final x2 = (-b - sqrt(delta)) / (2 * a);
|
final x2 = (-b - sqrt(delta)) / (2 * a);
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第四步:应用求根公式',
|
stepNumber: 4,
|
||||||
|
title: '应用求根公式',
|
||||||
explanation:
|
explanation:
|
||||||
r'因为 $\Delta > 0$,方程有两个不相等的实数根。公式: $x = \frac{-b \pm \sqrt{\Delta}}{2a}$。',
|
r'因为 $\Delta > 0$,方程有两个不相等的实数根。公式: $x = \frac{-b \pm \sqrt{\Delta}}{2a}$。',
|
||||||
formula:
|
formula:
|
||||||
@@ -210,7 +220,8 @@ class SolverService {
|
|||||||
final x = -b / (2 * a);
|
final x = -b / (2 * a);
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第四步:应用求根公式',
|
stepNumber: 4,
|
||||||
|
title: '应用求根公式',
|
||||||
explanation: r'因为 $\Delta = 0$,方程有两个相等的实数根。',
|
explanation: r'因为 $\Delta = 0$,方程有两个相等的实数根。',
|
||||||
formula: '\$\$x_1 = x_2 = ${x.toStringAsFixed(4)}\$\$',
|
formula: '\$\$x_1 = x_2 = ${x.toStringAsFixed(4)}\$\$',
|
||||||
),
|
),
|
||||||
@@ -222,7 +233,8 @@ class SolverService {
|
|||||||
} else {
|
} else {
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第四步:判断解',
|
stepNumber: 4,
|
||||||
|
title: '判断解',
|
||||||
explanation: r'因为 $\Delta < 0$,该方程在实数范围内无解。',
|
explanation: r'因为 $\Delta < 0$,该方程在实数范围内无解。',
|
||||||
formula: '无实数解',
|
formula: '无实数解',
|
||||||
),
|
),
|
||||||
@@ -245,6 +257,7 @@ class SolverService {
|
|||||||
|
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
|
stepNumber: 0,
|
||||||
title: '原始方程组',
|
title: '原始方程组',
|
||||||
explanation: '这是一个二元一次方程组,我们将使用加减消元法求解。',
|
explanation: '这是一个二元一次方程组,我们将使用加减消元法求解。',
|
||||||
formula:
|
formula:
|
||||||
@@ -272,7 +285,8 @@ ${a2}x ${b2 >= 0 ? '+' : ''} ${b2}y = $c2 & (2)
|
|||||||
|
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第一步:消元',
|
stepNumber: 1,
|
||||||
|
title: '消元',
|
||||||
explanation: '为了消去变量 y,将方程(1)两边乘以 $b2,方程(2)两边乘以 $b1。',
|
explanation: '为了消去变量 y,将方程(1)两边乘以 $b2,方程(2)两边乘以 $b1。',
|
||||||
formula:
|
formula:
|
||||||
'''
|
'''
|
||||||
@@ -291,17 +305,19 @@ ${newA2}x ${b1 * b2 >= 0 ? '+' : ''} ${b1 * b2}y = $newC2 & (4)
|
|||||||
|
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第二步:相减',
|
stepNumber: 2,
|
||||||
|
title: '相减',
|
||||||
explanation: '将方程(3)减去方程(4),得到一个只含 x 的方程。',
|
explanation: '将方程(3)减去方程(4),得到一个只含 x 的方程。',
|
||||||
formula:
|
formula:
|
||||||
'\$\$($newA1 - $newA2)x = $newC1 - $newC2 \Rightarrow ${xCoeff}x = $constCoeff\$\$',
|
'\$\$($newA1 - $newA2)x = $newC1 - $newC2 \\Rightarrow ${xCoeff}x = $constCoeff\$\$',
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
final x = constCoeff / xCoeff;
|
final x = constCoeff / xCoeff;
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第三步:解出 x',
|
stepNumber: 3,
|
||||||
|
title: '解出 x',
|
||||||
explanation: '求解上述方程得到 x 的值。',
|
explanation: '求解上述方程得到 x 的值。',
|
||||||
formula: '\$\$x = $x\$\$',
|
formula: '\$\$x = $x\$\$',
|
||||||
),
|
),
|
||||||
@@ -313,7 +329,8 @@ ${newA2}x ${b1 * b2 >= 0 ? '+' : ''} ${b1 * b2}y = $newC2 & (4)
|
|||||||
final y = yConst / yCoeff;
|
final y = yConst / yCoeff;
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第四步:回代求解 y',
|
stepNumber: 4,
|
||||||
|
title: '回代求解 y',
|
||||||
explanation: '将 x = $x 代入原方程(2)中。',
|
explanation: '将 x = $x 代入原方程(2)中。',
|
||||||
formula:
|
formula:
|
||||||
'''
|
'''
|
||||||
@@ -330,14 +347,15 @@ ${b2}y &= ${c2 - a2 * x}
|
|||||||
);
|
);
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第五步:解出 y',
|
stepNumber: 5,
|
||||||
|
title: '解出 y',
|
||||||
explanation: '求解得到 y 的值。',
|
explanation: '求解得到 y 的值。',
|
||||||
formula: '\$\$y = $y\$\$',
|
formula: '\$\$y = $y\$\$',
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
return CalculationResult(
|
return CalculationResult(
|
||||||
steps: steps,
|
steps: steps,
|
||||||
finalAnswer: '\$\$x = $x, \quad y = $y\$\$',
|
finalAnswer: '\$\$x = $x, \\quad y = $y\$\$',
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
final yCoeff = b1;
|
final yCoeff = b1;
|
||||||
@@ -345,7 +363,8 @@ ${b2}y &= ${c2 - a2 * x}
|
|||||||
final y = yConst / yCoeff;
|
final y = yConst / yCoeff;
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第四步:回代求解 y',
|
stepNumber: 4,
|
||||||
|
title: '回代求解 y',
|
||||||
explanation: '将 x = $x 代入原方程(1)中。',
|
explanation: '将 x = $x 代入原方程(1)中。',
|
||||||
formula:
|
formula:
|
||||||
'''
|
'''
|
||||||
@@ -362,7 +381,8 @@ ${b1}y &= ${c1 - a1 * x}
|
|||||||
);
|
);
|
||||||
steps.add(
|
steps.add(
|
||||||
CalculationStep(
|
CalculationStep(
|
||||||
title: '第五步:解出 y',
|
stepNumber: 5,
|
||||||
|
title: '解出 y',
|
||||||
explanation: '求解得到 y 的值。',
|
explanation: '求解得到 y 的值。',
|
||||||
formula: '\$\$y = $y\$\$',
|
formula: '\$\$y = $y\$\$',
|
||||||
),
|
),
|
Reference in New Issue
Block a user