Files
GitJournal/lib/core/views/note_links_view.dart
Vishesh Handa 88d5cf8713 Upgrade deps + flutter
* Also remove dart_code_metrics
2023-11-25 00:51:25 +01:00

77 lines
1.7 KiB
Dart

/*
* SPDX-FileCopyrightText: 2019-2021 Vishesh Handa <me@vhanda.in>
*
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import 'package:flutter/material.dart';
import 'package:gitjournal/core/link.dart';
import 'package:gitjournal/core/links_loader.dart';
import 'package:gitjournal/core/transformers/base.dart';
import 'package:hive/hive.dart';
import 'package:nested/nested.dart';
import 'package:provider/provider.dart';
import 'notes_materialized_view.dart';
part 'note_links_view.g.dart';
// Only needed because Hive cannot store List<T> directly
@HiveType(typeId: 1)
class _LinksList {
@HiveField(0)
final List<Link> list;
_LinksList(this.list);
}
class NoteLinksView extends NotesMaterializedView<_LinksList> {
NoteLinksView({
required super.name,
required super.computeFn,
required super.repoId,
});
Future<List<Link>> fetchLinks(Note note) async {
var linksList = await fetch(note);
return linksList.list;
}
}
class NoteLinksProvider extends SingleChildStatelessWidget {
final String repoId;
const NoteLinksProvider({
super.key,
super.child,
required this.repoId,
});
@override
Widget buildWithChild(BuildContext context, Widget? child) {
return Provider(
create: (_) {
return NoteLinksView(
name: 'note_links',
repoId: repoId,
computeFn: _compute,
);
},
child: child,
);
}
static NoteLinksView of(BuildContext context) {
return Provider.of<NoteLinksView>(context);
}
}
final _linksLoader = LinksLoader();
Future<_LinksList> _compute(Note note) async {
var list = await _linksLoader.parseLinks(
body: note.body,
filePath: note.filePath,
);
return _LinksList(list);
}