I have this class:
import 'package:flutter/material.dart';
class AgeText extends StatelessWidget {
  final String dateOfBirth;
  const AgeText({Key key, @required this.dateOfBirth}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    final age = _calculateAge();
    return Text(age.toString());
  }
  int _calculateAge() {
    final dateOfBirthDate = DateTime.parse(dateOfBirth);
    final difference = DateTime.now().difference(dateOfBirthDate);
    final age = difference.inDays / 365;
    return age.floor();
  }
}
I'd like to test that it produces the correct age when a date of birth is passed into it. What is the best way to do this in Flutter?
SOLUTION: For those interested, here's the solution using @Günter Zöchbauer's suggestion of the clock package.
My widget class:
import 'package:flutter/material.dart';
import 'package:clock/clock.dart';
class AgeText extends StatelessWidget {
  final String dateOfBirth;
  final Clock clock;
  const AgeText({Key key, @required this.dateOfBirth, this.clock = const Clock()}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    final age = _calculateAge();
    return Text(age.toString());
  }
  int _calculateAge() {
    final dateOfBirthDate = DateTime.parse(dateOfBirth);
    final difference = clock.now().difference(dateOfBirthDate);
    final age = difference.inDays / 365;
    return age.floor();
  }
}
and my test class:
import 'package:clock/clock.dart';
import 'package:flutter/material.dart';
import 'package:flutter_app/age.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
  testWidgets("shows age 30 when date of birth is 30 years ago", (WidgetTester tester) async {
    final mockClock = Clock.fixed(DateTime(2000, 01, 01));
    final testableWidget = MaterialApp(
      home: AgeText(
        dateOfBirth: "1970-01-01T00:00:00",
        clock: mockClock,
      ),
    );
    await tester.pumpWidget(testableWidget);
    expect(find.text("30"), findsOneWidget);
  });
}
 
     
     
     
    