fbmobile/lib/ui/views/base_view.dart

46 lines
1.1 KiB
Dart
Raw Normal View History

2021-02-02 14:33:23 +00:00
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<T extends BaseModel> extends StatefulWidget {
final Widget Function(BuildContext context, T model, Widget? child)? builder;
final Function(T)? onModelReady;
2021-02-02 14:33:23 +00:00
2023-01-04 20:17:54 +00:00
const BaseView({super.key, this.builder, this.onModelReady});
2021-02-02 14:33:23 +00:00
@override
_BaseViewState<T> createState() => _BaseViewState<T>();
}
class _BaseViewState<T extends BaseModel> extends State<BaseView<T>> {
final Logger _logger = getLogger();
T model = locator<T>();
@override
void initState() {
if (widget.onModelReady != null) {
widget.onModelReady!(model);
2021-02-02 14:33:23 +00:00
}
super.initState();
}
@override
Widget build(BuildContext context) {
2023-01-16 00:44:34 +00:00
return ChangeNotifierProvider<T?>(
create: (context) => model,
child: Consumer<T>(builder: widget.builder!));
2021-02-02 14:33:23 +00:00
}
@override
void dispose() {
Type type = T;
_logger.d("Disposing '${type.toString()}'");
super.dispose();
}
}