/* * SPDX-FileCopyrightText: 2019-2021 Vishesh Handa * * 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 directly @HiveType(typeId: 1) class _LinksList { @HiveField(0) final List list; _LinksList(this.list); } class NoteLinksView extends NotesMaterializedView<_LinksList> { NoteLinksView({ required super.name, required super.computeFn, required super.repoId, }); Future> 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(context); } } final _linksLoader = LinksLoader(); Future<_LinksList> _compute(Note note) async { var list = await _linksLoader.parseLinks( body: note.body, filePath: note.filePath, ); return _LinksList(list); }