feat: Implement husband features and fix iOS Safari web startup

Implement initial features for husband's companion app, including mock data
service and husband notes screen. Refactor scripture and cycle services
for improved stability and testability. Address iOS Safari web app
startup issue by removing deprecated initialization.

- Implemented MockDataService and HusbandNotesScreen.
- Converted _DashboardTab and DevotionalScreen to StatefulWidgets for robust
  scripture provider initialization.
- Refactored CycleService to use immutable CycleInfo class, reducing UI rebuilds.
- Removed deprecated window.flutterConfiguration from index.html, resolving
  Flutter web app startup failure on iOS Safari.
- Updated and fixed related tests.
This commit is contained in:
2025-12-26 22:40:52 -06:00
parent 464692ce56
commit b4b2bfe749
47 changed files with 240110 additions and 2578 deletions

91
test/mocks.mocks.dart Normal file
View File

@@ -0,0 +1,91 @@
// Mocks generated by Mockito 5.4.4 from annotations
// in christian_period_tracker/test/mocks.dart.
// Do not manually edit this file.
// ignore_for_file: no_leading_underscores_for_library_prefixes
import 'dart:async' as _i4;
import 'package:christian_period_tracker/services/bible_xml_parser.dart' as _i3;
import 'package:mockito/mockito.dart' as _i1;
import 'package:xml/xml.dart' as _i2;
// ignore_for_file: type=lint
// ignore_for_file: avoid_redundant_argument_values
// ignore_for_file: avoid_setters_without_getters
// ignore_for_file: comment_references
// ignore_for_file: deprecated_member_use
// ignore_for_file: deprecated_member_use_from_same_package
// ignore_for_file: implementation_imports
// ignore_for_file: invalid_use_of_visible_for_testing_member
// ignore_for_file: prefer_const_constructors
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: camel_case_types
// ignore_for_file: subtype_of_sealed_class
class _FakeXmlDocument_0 extends _i1.SmartFake implements _i2.XmlDocument {
_FakeXmlDocument_0(
Object parent,
Invocation parentInvocation,
) : super(
parent,
parentInvocation,
);
}
/// A class which mocks [BibleXmlParser].
///
/// See the documentation for Mockito's code generation for more information.
class MockBibleXmlParser extends _i1.Mock implements _i3.BibleXmlParser {
MockBibleXmlParser() {
_i1.throwOnMissingStub(this);
}
@override
_i4.Future<_i2.XmlDocument> loadXmlAsset(String? assetPath) =>
(super.noSuchMethod(
Invocation.method(
#loadXmlAsset,
[assetPath],
),
returnValue: _i4.Future<_i2.XmlDocument>.value(_FakeXmlDocument_0(
this,
Invocation.method(
#loadXmlAsset,
[assetPath],
),
)),
) as _i4.Future<_i2.XmlDocument>);
@override
String? getVerseFromXml(
_i2.XmlDocument? document,
String? bookName,
int? chapterNum,
int? verseNum,
) =>
(super.noSuchMethod(Invocation.method(
#getVerseFromXml,
[
document,
bookName,
chapterNum,
verseNum,
],
)) as String?);
@override
_i4.Future<String?> getVerseFromAsset(
String? assetPath,
String? reference,
) =>
(super.noSuchMethod(
Invocation.method(
#getVerseFromAsset,
[
assetPath,
reference,
],
),
returnValue: _i4.Future<String?>.value(),
) as _i4.Future<String?>);
}