Skip to content

Commit 058a8e0

Browse files
committed
feat:优化数据层为provide
1 parent 9953ae4 commit 058a8e0

24 files changed

+241
-389
lines changed

analysis_options.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
analyzer:
2-
errors:
3-
mixin_inherits_from_not_object: ignore
1+
# analyzer:
2+
# errors:
3+
# mixin_inherits_from_not_object: ignore

lib/components/baseComp.dart

Lines changed: 0 additions & 51 deletions
This file was deleted.

lib/components/exampleComp.dart

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
import 'package:flutter/material.dart';
2-
import 'package:efox_flutter/store/models/main_state_model.dart'
3-
show MainStateModel;
4-
import 'package:efox_flutter/store/index.dart' show Store;
52
import 'package:efox_flutter/config/theme.dart' show AppTheme;
63

74
class Index extends StatelessWidget {
@@ -12,21 +9,17 @@ class Index extends StatelessWidget {
129
@override
1310
Widget build(BuildContext context) {
1411
Size size = MediaQuery.of(context).size;
15-
return Store.connect(
16-
builder: (context, child, MainStateModel model) {
17-
return Center(
18-
child: Container(
19-
margin: EdgeInsets.all(10),
20-
decoration: BoxDecoration(
21-
border: Border.all(color: Color(AppTheme.mainColor), width: 1.0),
22-
),
23-
child: SizedBox.fromSize(
24-
size: size / 1.3,
25-
child: this.child,
26-
),
27-
),
28-
);
29-
},
12+
return Center(
13+
child: Container(
14+
margin: EdgeInsets.all(10),
15+
decoration: BoxDecoration(
16+
border: Border.all(color: Color(AppTheme.mainColor), width: 1.0),
17+
),
18+
child: SizedBox.fromSize(
19+
size: size / 1.3,
20+
child: this.child,
21+
),
22+
),
3023
);
3124
}
3225
}

lib/components/headerComp.dart

Lines changed: 0 additions & 15 deletions
This file was deleted.

lib/components/markdownComp.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@ import 'package:flutter/material.dart';
22
import 'package:flutter_markdown/flutter_markdown.dart' as md;
33
import 'package:efox_flutter/utils/syntaxHighlighter.dart'
44
show DartSyntaxHighlighter;
5-
import 'package:efox_flutter/config/color.dart' show materialColor;
6-
import 'package:efox_flutter/config/theme.dart' show AppTheme;
7-
import 'package:efox_flutter/store/index.dart' show model;
85

96
class Index extends StatelessWidget {
107
final String data;

lib/components/widgetComp.dart

Lines changed: 27 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
import 'package:flutter/material.dart';
2-
import 'package:efox_flutter/store/index.dart' show Store;
32
import 'package:efox_flutter/components/markdownComp.dart' as MarkDownComp;
43
import 'package:efox_flutter/lang/index.dart' show AppLocalizations;
5-
import 'package:efox_flutter/components/baseComp.dart' as BaseComp;
64
import 'package:efox_flutter/components/exampleComp.dart' as ExampleComp;
75
import 'package:efox_flutter/components/updatingComp.dart' as UpdatingComp;
86
import 'package:efox_flutter/utils/file.dart' as FileUtils;
9-
import 'package:efox_flutter/utils/loadAsset.dart' as LoadAssetUtils;
107
import 'package:efox_flutter/router/index.dart' show FluroRouter;
118
import 'package:efox_flutter/config/theme.dart' show AppTheme;
129
import 'package:efox_flutter/utils/share.dart' as AppShare;
1310
import 'package:efox_flutter/widget/author_list.dart' as AuthorList;
1411
import 'package:efox_flutter/store/objects/author_info.dart' show AuthorInfo;
12+
import 'package:efox_flutter/store/index.dart' show AuthorModel, ConfigModel, Provide;
1513

1614
class Index extends StatefulWidget {
1715
final List<Widget> demoChild;
@@ -42,12 +40,11 @@ class IndexState extends State<Index> {
4240
}
4341

4442
authorTile(nameKey) {
45-
AuthorInfo info = this.model.author.state[nameKey];
43+
AuthorInfo info = Provide.value<AuthorModel>(context).list[nameKey];
4644
return Container(
4745
child: ListTile(
4846
onTap: () {
49-
FluroRouter.router.navigateTo(context,
50-
'/webview?title=${'GitHub-' + info.name}&url=${Uri.encodeComponent(info.url)}');
47+
FluroRouter.webview(context: context, title: 'GitHub-' + info.name, url: Uri.encodeComponent(info.url));
5148
},
5249
leading: CircleAvatar(
5350
backgroundImage: NetworkImage(
@@ -78,12 +75,11 @@ class IndexState extends State<Index> {
7875
this._bodyList.length = 0;
7976
String mdText = await this.getMdFile(widget.mdUrl);
8077
String nameKey = AuthorList.list[widget.title];
81-
print('name $nameKey');
8278
if (nameKey != null) {
8379
this._bodyList.add(authorTile(nameKey));
8480
this._bodyList.add(Divider());
8581
}
86-
if (mdText.length > 30 || !this.model.config.state.isPro) {
82+
if (mdText.length > 30) {
8783
this._bodyList.add(await MarkDownComp.Index(mdText));
8884
// demo
8985
if (widget.demoChild != null && widget.demoChild.length > 0) {
@@ -101,59 +97,36 @@ class IndexState extends State<Index> {
10197

10298
@override
10399
Widget build(BuildContext context) {
104-
return Store.connect(builder: (context, child, model) {
105-
this.model = model;
106-
return Scaffold(
107-
appBar: AppBar(
108-
//title: Text(this.title),
109-
elevation: 0,
110-
backgroundColor: Color(AppTheme.secondColor),
111-
actions: this.getActions(
112-
context,
113-
),
114-
leading: IconButton(
115-
icon: Icon(Icons.arrow_back),
116-
//color: Theme.of(context).primaryTextTheme.title.color,
117-
color: Color(AppTheme.blackColor),
118-
onPressed: () => Navigator.pop(context),
119-
),
100+
return Scaffold(
101+
appBar: AppBar(
102+
elevation: 0,
103+
backgroundColor: Color(AppTheme.secondColor),
104+
actions: this.getActions(
105+
context,
120106
),
121-
body: this.loading ? this.renderLoading() : this.renderWidget(),
122-
);
123-
});
107+
leading: IconButton(
108+
icon: Icon(Icons.arrow_back),
109+
color: Color(AppTheme.blackColor),
110+
onPressed: () => Navigator.pop(context),
111+
),
112+
),
113+
body: this.loading ? this.renderLoading() : this.renderWidget(),
114+
);
124115
}
125116

126-
openPage(context) async {
127-
String url = widget.mdUrl;
128-
// 加载页面
129-
if (this.model.config.state.isPro) {
130-
FluroRouter.router.navigateTo(context,
131-
'/webview?title=${widget.title}&url=${Uri.encodeComponent(this.model.config.state.env.githubAssetOrigin + url.replaceAll(RegExp('/index.md'), '').replaceAll('docs', 'lib'))}');
117+
Future getMdFile(url) async {
118+
// bool productionEnv = Provide.value<ConfigModel>(context).isPro;
119+
bool productionEnv = false;
120+
if (productionEnv) {
121+
return await FileUtils.readRemoteFile(url);
132122
} else {
133-
// 加载本地
134-
String mdStr = await FileUtils.readLocaleFile(url);
135-
Navigator.of(context).push(
136-
MaterialPageRoute(builder: (BuildContext context) {
137-
return BaseComp.Index(
138-
title: widget.title,
139-
child: (context, child, model) {
140-
return MarkDownComp.Index(mdStr);
141-
},
142-
);
143-
}),
144-
);
123+
return await FileUtils.readLocaleFile(url);
145124
}
146125
}
147126

148-
Future getMdFile(url) async {
149-
String mdStr = (await LoadAssetUtils.loadMarkdownAssets(url)).toString();
150-
return mdStr;
151-
}
152-
153127
getActions(context) {
154128
return [
155129
IconButton(
156-
//color: Theme.of(context).primaryTextTheme.title.color,
157130
color: Color(AppTheme.blackColor),
158131
icon: Icon(
159132
Icons.insert_link,
@@ -165,22 +138,13 @@ class IndexState extends State<Index> {
165138
);
166139
},
167140
),
168-
/* IconButton(
169-
icon: Icon(
170-
Icons.code,
171-
),
172-
onPressed: () async {
173-
this.openPage(context);
174-
},
175-
), */
176141
IconButton(
177142
icon: Icon(Icons.share),
178-
//color: Theme.of(context).primaryTextTheme.title.color,
179143
color: Color(AppTheme.blackColor),
180144
onPressed: () {
181-
final String msg =
182-
this.model.config.state.env.githubAssetOrigin + widget.mdUrl;
183-
AppShare.shareText(msg);
145+
dynamic origin =
146+
Provide.value<ConfigModel>(context).env.githubAssetOrigin;
147+
AppShare.shareText(origin + widget.mdUrl);
184148
},
185149
),
186150
];

lib/controller/index.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import 'package:efox_flutter/store/index.dart' show model;
1+
// import 'package:efox_flutter/store/index.dart' show Store, ConfigModel, Provider;
22

33
void initState() {
4-
model.dispatch('config', 'setVersion');
4+
// Store.valueNotContext<ConfigModel>().setVersion();
5+
// Provider,
56
}

lib/main.dart

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ import 'package:flutter_localizations/flutter_localizations.dart'; //语言包
33
import 'package:efox_flutter/lang/index.dart'
44
show AppLocalizationsDelegate, AppLocalizations;
55
import 'package:efox_flutter/lang/config.dart' show ConfigLanguage;
6-
import 'package:efox_flutter/store/index.dart' show model, Store; //引用Store 层
6+
import 'package:efox_flutter/store/index.dart'
7+
show Store, ConfigModel; //引用Store 层
8+
import 'package:provide/provide.dart' show Provide;
79
import 'package:efox_flutter/router/index.dart' show FluroRouter; //路由
810
import 'package:efox_flutter/config/theme.dart' show AppTheme; //主题
911
import 'package:efox_flutter/utils/analytics.dart' as Analytics; //统计
1012

11-
void main() => runApp(MainApp());
12-
1313
class MainApp extends StatefulWidget {
1414
MainApp() {
1515
FluroRouter.initRouter();
@@ -27,14 +27,16 @@ class MainAppState extends State<MainApp> {
2727
//实例化多语言
2828
super.initState();
2929
_delegate = AppLocalizationsDelegate();
30-
model.dispatch('config', 'getTheme');
30+
print('===main ============ $context');
3131
}
3232

3333
@override
3434
Widget build(BuildContext context) {
35-
return Store.init(
36-
model: model,
37-
child: Store.connect(builder: (context, child, model) {
35+
print('main view rebuild $context');
36+
Provide.value<ConfigModel>(context).getTheme();
37+
return Store.connect<ConfigModel>(
38+
builder: (context, child, model) {
39+
print('model===========================${model.theme}');
3840
return MaterialApp(
3941
localeResolutionCallback: (deviceLocale, supportedLocales) {
4042
print(
@@ -55,12 +57,13 @@ class MainAppState extends State<MainApp> {
5557
_delegate,
5658
],
5759
supportedLocales: ConfigLanguage.supportedLocales,
58-
// title: 'Flutter Demo',
59-
theme: AppTheme.getThemeData(model.config.state.theme),
60+
theme: AppTheme.getThemeData(model.theme),
6061
onGenerateRoute: FluroRouter.router.generator,
6162
navigatorObservers: <NavigatorObserver>[Analytics.observer],
6263
);
63-
}),
64+
},
6465
);
6566
}
6667
}
68+
69+
void main() => runApp(Store.init(child: MainApp()));

lib/page/app-login/index.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
import 'package:flutter/material.dart';
2-
import 'package:efox_flutter/store/models/main_state_model.dart'
3-
show MainStateModel;
42
import 'package:efox_flutter/lang/index.dart' show AppLocalizations;
53

64
class Index extends StatefulWidget {
7-
MainStateModel model;
85

9-
Index({Key key, @required this.model}) : super(key: key);
6+
Index({Key key}) : super(key: key);
107

118
@override
129
_IndexState createState() => _IndexState();
@@ -76,8 +73,8 @@ class _IndexState extends State<Index> {
7673
onPressed: () {
7774
if ((_formKey.currentState as FormState)
7875
.validate()) {
79-
widget.model.dispatch('user', 'login',
80-
{'name': nameCtl.text, 'pwd': pwdCtl.text});
76+
// widget.model.dispatch('user', 'login',
77+
// {'name': nameCtl.text, 'pwd': pwdCtl.text});
8178
}
8279
},
8380
),

lib/page/component/tabs.dart

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
import 'package:flutter/material.dart';
2-
import 'package:efox_flutter/store/models/main_state_model.dart'
3-
show MainStateModel;
42
import 'package:efox_flutter/config/theme.dart' show AppTheme;
53
import 'package:efox_flutter/widget/index.dart' as WidgetRoot;
64
import 'package:efox_flutter/router/index.dart' show FluroRouter;
75
import 'package:efox_flutter/lang/index.dart' show AppLocalizations;
86

97
class Index extends StatefulWidget {
10-
final MainStateModel model;
11-
Index({Key key, this.model}) : super(key: key);
8+
Index({Key key}) : super(key: key);
129
@override
1310
_IndexState createState() => new _IndexState();
1411
}

0 commit comments

Comments
 (0)