-
Notifications
You must be signed in to change notification settings - Fork 495
Expand file tree
/
Copy pathprovider_widget_selector.dart
More file actions
53 lines (44 loc) · 1.13 KB
/
provider_widget_selector.dart
File metadata and controls
53 lines (44 loc) · 1.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
/// Provider封装类
///
/// 方便数据初始化
class ProviderWidget<T extends ChangeNotifier,S> extends StatefulWidget {
final ValueWidgetBuilder<S> builder;
final S Function(BuildContext, T) selector;
final T model;
final Widget child;
final Function(T) onModelReady;
ProviderWidget({
Key key,
@required this.builder,
@required this.model,
this.selector,
this.child,
this.onModelReady,
}) : super(key: key);
_ProviderWidgetState<T,S> createState() => _ProviderWidgetState<T,S>();
}
class _ProviderWidgetState<T extends ChangeNotifier,S>
extends State<ProviderWidget<T,S>> {
T model;
@override
void initState() {
model = widget.model;
if (widget.onModelReady != null) {
widget.onModelReady(model);
}
super.initState();
}
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<T>(
builder: (context) => model,
child: Selector<T,S>(
selector: widget.selector,
builder:widget.builder,
child: widget.child,
),
);
}
}