Flutter训练日志插件traindown的使用
Flutter训练日志插件traindown的使用
Traindown 是一种帮助运动员表达其训练的语言。灵感来源于 Markdown。
这是 Traindown 语言规范版本 1.2.1 的 Dart 实现。更多详细信息,请访问 Traindown 官网。
示例代码
以下是 example/example.dart
文件中的示例代码:
import 'dart:io';
import 'package:traindown/src/presenters/console_presenter.dart';
import 'package:traindown/src/presenters/json_presenter.dart';
import 'package:traindown/src/formatter.dart';
import 'package:traindown/src/parser.dart';
import 'package:traindown/src/session.dart';
void main() {
// 这是一个示例 Traindown 字符串,可以进行美化并传递给解析器进行解析。
Parser parser = Parser(
'@ 2019-10-21; # unit:lbs; Squat: 500 #rir:10; 550 2r; 600 3r 3s; * Was hard');
// 解析结果是一个 Token 列表,我们可以将其传递给格式化器等工具。
Formatter formatter = Formatter();
// 让我们看看格式化器的功能!这里我们创建一个新的格式化器,使用默认输出选项。
String formatted = formatter.format(parser.tokens());
// 输出美化后的 Traindown
print('Enjoy this formatted Traindown!\n');
print(formatted);
print('\n\n---\n\n');
// 输出样例
/*
Enjoy this formatted Traindown!
@ 2019-10-21
# unit: lbs
Squat:
500
# rir: 10
550 2r
600 3r 3s
* Was hard
*/
// 使用格式化器,您可以根据具体需求调整输出。这里我们打开一些呼吸空间。
formatter.indenter = ' ';
print('Very space. Much wow\n');
print(formatter.format(parser.tokens()));
print('\n\n---\n\n');
// 输出样例
/*
Very space. Much wow
@ 2019-10-21
# unit: lbs
Squat:
500
# rir: 10
550 2r
600 3r 3s
* Was hard
*/
// 一旦解析,我们通常希望对数据进行某种处理。这就是会话(Session)发挥作用的地方。让我们试一试。
Session session = Session(parser.tokens());
// 这是会话的默认 toString 方法。
print(session);
// 我们还有一系列预设的呈现器,也可以基于基类构建自己的呈现器!
ConsolePresenter cp = ConsolePresenter(session);
// 这里是我们使用文本呈现器的结果。
print("An example of a text based presenter\n");
print(cp.present());
print('\n\n---\n\n');
// 还有 JSON 可用。
JsonPresenter jp = JsonPresenter(session);
// 输出如下
print("And here is some JSON\n");
print(jp.present());
print('\n\n---\n\n');
// 您还可以轻松读取文件
File file = File("./example/example.traindown");
String src = file.readAsStringSync();
Parser fileParser = Parser(src);
Session fileSession = Session(fileParser.tokens());
// 使用我们的方便的呈现器
ConsolePresenter fcp = ConsolePresenter(fileSession);
// 我们看到一些令人惊叹的东西!
print("A longer example presented for the console\n");
print(fcp.present());
print('\n\n---\n\n');
}
更多关于Flutter训练日志插件traindown的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter训练日志插件traindown的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用traindown
插件的示例代码。traindown
是一个用于记录和追踪健身训练日志的Flutter插件。假设你已经在你的Flutter项目中添加了traindown
依赖(通常在pubspec.yaml
文件中)。
首先,确保你已经在pubspec.yaml
文件中添加了依赖:
dependencies:
flutter:
sdk: flutter
traindown: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,我将展示一个简单的Flutter应用示例,该应用使用traindown
插件来记录和显示训练日志。
main.dart
import 'package:flutter/material.dart';
import 'package:traindown/traindown.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Traindown Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: TraindownExample(),
);
}
}
class TraindownExample extends StatefulWidget {
@override
_TraindownExampleState createState() => _TraindownExampleState();
}
class _TraindownExampleState extends State<TraindownExample> {
final Traindown _traindown = Traindown();
List<String> _logs = [];
@override
void initState() {
super.initState();
// 加载已有的训练日志(假设从本地存储或其他来源)
_loadLogs();
}
Future<void> _loadLogs() async {
// 这里假设你已经有方法从存储中获取日志列表
// 例如,从本地文件、数据库等
// 这里只是模拟一些日志数据
setState(() {
_logs = [
"Squat: 3x5 @ 225lb",
"Bench Press: 4x4 @ 185lb",
"Deadlift: 5x1 @ 315lb",
];
});
}
Future<void> _addLog(String log) async {
// 假设这里将日志保存到本地存储或其他持久化存储中
// 这里只是简单地将日志添加到列表中并刷新UI
setState(() {
_logs.add(log);
});
// 使用traindown的格式解析和存储日志(这里仅作为示例,实际存储逻辑可能不同)
// Traindown格式通常较为简单,但你可能需要根据具体需求调整
final parsedLog = TraindownParser().parse(log);
// 这里可以添加将parsedLog保存到数据库或文件的代码
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Traindown Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Training Logs:', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
SizedBox(height: 16),
Expanded(
child: ListView.builder(
itemCount: _logs.length,
itemBuilder: (context, index) {
return Card(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(_logs[index]),
),
);
},
),
),
SizedBox(height: 16),
TextField(
decoration: InputDecoration(labelText: 'Add Log'),
onEditingComplete: () {
final log = _textController.text;
if (log.isNotEmpty) {
_addLog(log);
_textController.clear();
}
},
controller: _textController,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
final log = _textController.text;
if (log.isNotEmpty) {
_addLog(log);
_textController.clear();
_scrollController.animateTo(
_scrollController.position.maxScrollExtent,
duration: const Duration(milliseconds: 300),
curve: Curves.easeOut,
);
}
},
tooltip: 'Add Log',
child: Icon(Icons.add),
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
);
}
final TextEditingController _textController = TextEditingController();
final ScrollController _scrollController = ScrollController();
@override
void dispose() {
_textController.dispose();
_scrollController.dispose();
super.dispose();
}
}
说明
- 依赖添加:确保在
pubspec.yaml
中添加了traindown
依赖。 - 初始化:在
initState
方法中,加载已有的训练日志(此处为模拟数据)。 - 日志添加:提供了一个文本字段用于输入新的训练日志,点击浮动按钮或完成文本编辑时会将日志添加到列表中。
- UI显示:使用
ListView.builder
来显示训练日志列表。 - 解析与存储:虽然示例中仅将日志添加到内存中的列表,但你可以根据需要使用
TraindownParser
来解析日志,并将其保存到数据库或文件中。
请注意,这个示例并未实际使用traindown
插件提供的所有功能,而是展示了如何结合Flutter的基本组件来记录和显示训练日志。你可能需要根据实际需求进一步调整和扩展代码。