Перейти к основному содержимому

Простые приложения на Dart

Разработчику Архитектору

Простые приложения на Dart

Dart знаком по Flutter, но консольные скрипты (dart run) полезны для утилит и прототипов API. Стандартные библиотеки: dart:io, dart:convert.

Как запускать примеры из главы

  1. Файл: bin/main.dart в проекте dart create cli или один файл script.dart.
  2. Команда: dart run script.dart или dart run bin/main.dart.
  3. Нужно: Dart SDK 3+ (dart --version).

Генератор паролей

Как запустить

  • Файл: password.dart
  • Команда: dart run password.dart
  • Результат: пароль в консоли.
import 'dart:math';

String generatePassword([int length = 16]) {
const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#\$%';
final rand = Random.secure();
return List.generate(length, (_) => chars[rand.nextInt(chars.length)]).join();
}

void main() => print(generatePassword());

Сортировщик файла

import 'dart:io';

Future<void> sortFile(String input, String output) async {
final lines = await File(input).readAsLines();
final cleaned = lines.map((l) => l.trim()).where((l) => l.isNotEmpty).toList()..sort();
await File(output).writeAsString('${cleaned.join('\n')}\n');
}

Калькулятор

double? calculate(double a, double b, String op) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return b == 0 ? null : a / b;
default: return null;
}
}

Трекер задач (jsonEncode)

import 'dart:convert';
import 'dart:io';

class Task {
final int id;
final String title;
bool done;
Task({required this.id, required this.title, this.done = false});
Map<String, dynamic> toJson() => {'id': id, 'title': title, 'done': done};
factory Task.fromJson(Map<String, dynamic> j) =>
Task(id: j['id'], title: j['title'], done: j['done'] ?? false);
}

Future<List<Task>> load(String path) async {
if (!await File(path).exists()) return [];
final list = jsonDecode(await File(path).readAsString()) as List;
return list.map((e) => Task.fromJson(e as Map<String, dynamic>)).toList();
}

HTTP-сервер (HttpServer)

import 'dart:convert';
import 'dart:io';

Future<void> main() async {
final server = await HttpServer.bind('127.0.0.1', 8080);
await for (final req in server) {
req.response
..headers.contentType = ContentType.json
..write(jsonEncode({'ok': true, 'time': DateTime.now().toIso8601String()}))
..close();
}
}

Характерный пример — Future и async/await

Future<int> fetchLength(Uri url) async {
final client = HttpClient();
try {
final req = await client.getUrl(url);
final res = await req.close();
final body = await res.transform(utf8.decoder).join();
return body.length;
} finally {
client.close();
}
}

Асинхронность встроена в язык — основа Flutter и серверного Dart.


См. также: Flutter в разделе 4-code-dev

См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).