import 'package:flutter/material.dart'; import 'package:timemanage/model/project.dart'; import 'package:timemanage/model/timer_entry.dart'; abstract class DataProvider { Future createProject({required String name, Color? colour}); Future> listProjects(); Future editProject(Project project); Future deleteProject(Project project); Future createTimer({ String? description, int? projectID, DateTime? startTime, DateTime? endTime, }); Future> listTimers(); Future editTimer(TimerEntry timer); Future deleteTimer(TimerEntry timer); Future import(DataProvider other) async { List otherEntries = await other.listTimers(); List otherProjects = await other.listProjects(); List newOtherProjects = await Stream.fromIterable(otherProjects) .asyncMap((event) => createProject(name: event.name)) .toList(); for (TimerEntry otherEntry in otherEntries) { int projectOffset = otherProjects .indexWhere((element) => element.id == otherEntry.projectID); int? projectID; if (projectOffset >= 0) { projectID = newOtherProjects[projectOffset].id; } await createTimer( description: otherEntry.description, projectID: projectID, startTime: otherEntry.startTime, endTime: otherEntry.endTime, ); } } }