value method
Implementation
@override
MatexDividendReinvestmentResult value() {
if (result != null) return result!;
if (isValid) {
final reports = <MatexDividendReinvestementYearlyPayoutReport>[];
MatexDividendReinvestementYearlyPayoutReport? lastReport;
MatexDividendReinvestementYearlyPayoutReport? futureReport;
var dividendAmountPerShare =
toDecimal(state.sharePrice!) * dDividendYield;
for (var i = 0; i <= state.yearsToGrow!; i++) {
if (lastReport != null) {
dividendAmountPerShare =
toDecimal(lastReport.dividendAmountPerShare) *
(Decimal.one + dAnnualDividendIncrease);
}
if (i < state.yearsToGrow!) {
lastReport = _makeYearlyReport(lastReport, dividendAmountPerShare);
reports.add(lastReport);
} else {
futureReport = _makeYearlyReport(lastReport, dividendAmountPerShare);
}
}
return MatexDividendReinvestmentResult(
totalReturn: _computeTotalReturn(lastReport!.endingBalance).toDouble(),
grossDividendPaid: lastReport.cumulativeGrossAmount,
netDividendeIncome: futureReport!.netDividendPayout,
netDividendPaid: lastReport.cumulativeNetAmount,
totalContribution: dTotalContribution.toDouble(),
startingBalance: dStartingPrincipal.toDouble(),
numberOfShares: lastReport.numberOfShares,
endingBalance: lastReport.endingBalance,
sharePrice: lastReport.sharePrice,
yearlyReports: reports,
);
}
return const MatexDividendReinvestmentResult();
}