import 'package:flutter/material.dart'; import 'package:logger/logger.dart'; import 'package:provider/provider.dart'; import '../../core/util/logger.dart'; import '../../core/viewmodels/base_model.dart'; import '../../locator.dart'; class BaseView extends StatefulWidget { final Widget Function(BuildContext context, T model, Widget? child)? builder; final Function(T)? onModelReady; const BaseView({super.key, this.builder, this.onModelReady}); @override _BaseViewState createState() => _BaseViewState(); } class _BaseViewState extends State> { final Logger _logger = getLogger(); T model = locator(); @override void initState() { if (widget.onModelReady != null) { widget.onModelReady!(model); } super.initState(); } @override Widget build(BuildContext context) { return ChangeNotifierProvider( create: (context) => model, child: Consumer(builder: widget.builder!)); } @override void dispose() { Type type = T; _logger.d("Disposing '${type.toString()}'"); super.dispose(); } }