- Complete MVP with Repository Pattern, SQLite storage - Provider + ChangeNotifier state management - Navigation 2.0 with deep link support - Habit CRUD with twoDayRule, notifications, categories - Backup/Restore via JSON - Statistics with streak tracking - Material You theme support - Biometric lock support - Desktop widget support - 27 languages i18n structure - Comprehensive test suite (87/89 passing)
54 lines
1.2 KiB
Dart
54 lines
1.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:habo/model/habit_data.dart';
|
|
import 'package:habo/model/category.dart';
|
|
|
|
/// Habit is a StatefulWidget wrapper around HabitData.
|
|
/// It manages the UI state for a single habit card.
|
|
class Habit extends StatefulWidget {
|
|
final HabitData habitData;
|
|
|
|
Habit({
|
|
super.key,
|
|
required this.habitData,
|
|
});
|
|
|
|
set setId(int id) {
|
|
habitData.id = id;
|
|
}
|
|
|
|
factory Habit.fromJson(Map<String, dynamic> json) {
|
|
return Habit(
|
|
habitData: HabitData.fromJson(json),
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
final data = habitData.toJson();
|
|
data['categories'] = habitData.categories.map((c) => c.toJson()).toList();
|
|
return data;
|
|
}
|
|
|
|
@override
|
|
State<Habit> createState() => _HabitState();
|
|
}
|
|
|
|
class _HabitState extends State<Habit> {
|
|
DateTime? _selectedDate;
|
|
bool _isExpanded = false;
|
|
|
|
DateTime get selectedDate => _selectedDate ?? DateTime.now();
|
|
set selectedDate(DateTime date) {
|
|
_selectedDate = date;
|
|
}
|
|
|
|
bool get isExpanded => _isExpanded;
|
|
set isExpanded(bool value) {
|
|
_isExpanded = value;
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Container();
|
|
}
|
|
}
|