mirror of
https://github.com/kuhyx/todo-app.git
synced 2026-11-10 20:27:01 +01:00
Some checks are pending
dependency freshness / dependencies on newest stable (push) Waiting to run
file-length / file length <= 250 lines (push) Waiting to run
md-naming / markdown naming convention (push) Waiting to run
release-apk / release (APK) (push) Waiting to run
repo-contract / repo contract (push) Waiting to run
Four optional note fields (repo, done_check, by, evidence) in the crdt_sync record, written only when set, so editing a plain idea stays wire-identical to v3 (note_repository_sync_compat_test). The log is schemaless: no stored schema version; the legacy sqlite reader stays at v3. NoteFilter gains a sources facet (ideas / every repo task / one repo); search also matches the repo. The notes list shows only open ideas by default (no badge); the filter sheet adds Ideas, Repo tasks and one chip per repo when repo tasks exist. The per-note sheet shows the task fields read-only. BACKLOG.md markers carry the new attributes, entity-escaped. CLI: --repo --done-check --by on add, --close <id> --evidence (refused without), --list [--repo] [--status], --search, and every id flag takes a unique 8-character prefix. --list prints id8, status, priority, repo, title. install_hooks.sh: the wrapper finds pre-commit's generated hook next to itself, so commits from a git worktree (where .git is a file) work. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
34 lines
975 B
Dart
34 lines
975 B
Dart
import 'package:flutter/material.dart';
|
|
import 'package:todo/data/note.dart';
|
|
|
|
/// Read-only repo-task fields of [note]; empty for a plain idea.
|
|
class NoteTaskDetails extends StatelessWidget {
|
|
/// Shows the fields [note] has set.
|
|
const NoteTaskDetails({required this.note, super.key});
|
|
|
|
/// The note whose task fields are shown.
|
|
final Note note;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final theme = Theme.of(context).textTheme;
|
|
final rows = [
|
|
('Repo', note.repo),
|
|
('Done check', note.doneCheck),
|
|
('By', note.by),
|
|
('Evidence', note.evidence),
|
|
].where((row) => row.$2 != null);
|
|
return Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
for (final (label, value) in rows) ...[
|
|
const SizedBox(height: 12),
|
|
Text(label, style: theme.labelLarge),
|
|
const SizedBox(height: 4),
|
|
Text(value!, style: theme.bodyMedium),
|
|
],
|
|
],
|
|
);
|
|
}
|
|
}
|