Files
smooth-app/packages/smooth_app/lib/data_models/onboarding_loader.dart
monsieurtanuki 954449e437 feat: #935 - now we display localized (downloaded) data during onboarding (#986)
Deleted files:
* `sample_eco_knowledge_panels.json`: replaced by new file `sample_knowledge_panels.json`
* `sample_health_knowledge_panels.json`: replaced by new file `sample_knowledge_panels.json`

New files:
* `abstract_onboarding_data.dart`: Abstraction of data we download, store and reuse at onboarding.
* `dao_string.dart`: Where we store strings.
* `loading_dialog.dart`: Dialog with a stop button, while a future is running.
* `onboarding_data_knowledge_panels.dart`: Helper around knowledge panels we download, store and reuse at onboarding.
* `onboarding_data_product.dart`: Helper around a product we download, store and reuse at onboarding.
* `onboarding_loader.dart`: Helper around data we download, store and reuse at onboarding.
* `sample_knowledge_panels.json`: json data downloaded today for en_US, cf. onboarding_data_knowledge_panels.dart
* `tmp.dart`: Fixes to off-dart.

Impacted files:
* `knowledge_panel_page_template.dart`: added parameters to 1. use the database (and downloaded data) and 2. limit the display to a given panel
* `knowlegde_panel_builder.dart`: added a method to display only one panel
* `local_database.dart`: added new dao `DaoString`
* `new_product_page.dart`: refactored
* `next_button.dart`: added an optional call to async methods at "next" time - e.g. data download
* `nutrition_page_loaded.dart`: now uses the new `LoadingDialog`
* `onboarding_flow_navigator.dart`: now using the database to get more relevant (previoulsy downloaded) data
* `preferences_page.dart`: now using previously downloaded data instead of assets
* `product_dialog_helper.dart`: now uses the new `LoadingDialog`
* `question_card.dart`: unrelated minor refactoring
* `sample_eco_card_page.dart`: now using previously downloaded data instead of assets, and displaying only the environment card
* `sample_health_card_page.dart`: now using previously downloaded data instead of assets, and displaying only the health card
* `sample_product_json.dart`: json data downloaded today for en_US, cf. onboarding_data_product.dart
* `sign_up_page.dart`: now uses the new `LoadingDialog`
2022-01-20 20:28:07 +01:00

51 lines
1.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:smooth_app/data_models/onboarding_data_knowledge_panels.dart';
import 'package:smooth_app/data_models/onboarding_data_product.dart';
import 'package:smooth_app/database/local_database.dart';
import 'package:smooth_app/pages/onboarding/onboarding_flow_navigator.dart';
import 'package:smooth_app/widgets/loading_dialog.dart';
/// Helper around data we download, store and reuse at onboarding.
class OnboardingLoader {
OnboardingLoader(this._localDatabase);
final LocalDatabase _localDatabase;
/// To be called first thing when we click on "next" during onboarding.
Future<void> runAtNextTime(
final OnboardingPage page,
final BuildContext context,
) async {
switch (page) {
case OnboardingPage.WELCOME:
await LoadingDialog.run<void>(
context: context,
future: _downloadData(),
title: 'Loading internet data', // TODO(monsieurtanuki): localize
);
return;
case OnboardingPage.NOT_STARTED:
case OnboardingPage.SCAN_EXAMPLE:
case OnboardingPage.HEALTH_CARD_EXAMPLE:
case OnboardingPage.ECO_CARD_EXAMPLE:
case OnboardingPage.PREFERENCES_PAGE:
return;
case OnboardingPage.ONBOARDING_COMPLETE:
await _unloadData();
return;
}
}
/// Actual download of all data.
Future<void> _downloadData() async {
await OnboardingDataProduct(_localDatabase).downloadData();
await OnboardingDataKnowledgePanels(_localDatabase).downloadData();
}
/// Unloads all data that are no longer required.
Future<void> _unloadData() async {
await OnboardingDataProduct(_localDatabase).clear();
await OnboardingDataKnowledgePanels(_localDatabase).clear();
}
}