Skip to content

Commit 0131bdd

Browse files
committed
Merge branch 'dev' of https://github.com/efoxTeam/flutter-ui into dev
2 parents ce27fdd + 2e6bd93 commit 0131bdd

File tree

15 files changed

+1651
-21
lines changed

15 files changed

+1651
-21
lines changed

lib/config/index.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@ import 'development.dart' as Development;
22
import 'production.dart' as Production;
33

44
const bool isPro = false;
5+
const String owner_repo = 'efoxTeam/flutter-ui';
56

67
Object env = isPro ? Production.Config() : Development.Config();

lib/controller/index.dart

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@ import 'package:efox_flutter/store/index.dart'
33

44
import 'package:efox_flutter/utils/appVersion.dart' show AppVersion;
55

6-
void initState() {
6+
void initState() async {
77
// 获取版本号
88
Store.valueNotCtx<ConfigModel>().$getAppVersion();
99
// 登录
10-
//Store.valueNotCtx<UserModel>().getLocalUserInfo();
10+
Store.valueNotCtx<UserModel>().getLocalUserInfo().then((res) {
11+
if (res) {
12+
Store.valueNotCtx<UserModel>().getUserStar();
13+
}
14+
});
15+
Store.valueNotCtx<UserModel>().getFlutterUIStar();
1116
Future.delayed(Duration(seconds: 3), () {
1217
AppVersion().check(Store.widgetCtx);
1318
});

lib/http/index.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,8 @@ Future post({url, data = const {}, options, loading}) async {
8282
return getDio(options: options, loading: loading ?? Map())
8383
.post(url, data: data);
8484
}
85+
86+
Future put({url, data = const {}, options, loading}) async {
87+
return getDio(options: options, loading: loading ?? Map())
88+
.put(url, data: data);
89+
}

lib/page/app_login/index.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ class _IndexState extends State<Index> {
216216
'name': nameCtl.text.trim(),
217217
'pwd': pwdCtl.text.trim()
218218
});
219+
await Store.value<UserModel>(context).getUserStar();
219220
}
220221
},
221222
),

lib/page/comment/details.dart

Lines changed: 273 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,273 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:efox_flutter/lang/index.dart' show AppLocalizations;
3+
import 'package:efox_flutter/store/index.dart' show Store, UserModel;
4+
import 'package:efox_flutter/store/objects/flutter_ui_issues.dart' show IssuesContent;
5+
import 'package:efox_flutter/store/objects/issues_comment.dart' show IssuesDetails;
6+
import 'package:efox_flutter/page/app_login/index.dart' as LoginIndex;
7+
8+
class Index extends StatefulWidget {
9+
int indexes;
10+
Index({ Key key, @required this.indexes }):super(key: key);
11+
@override
12+
_IndexState createState() => _IndexState();
13+
}
14+
15+
class _IndexState extends State<Index> {
16+
final TextEditingController _controller = TextEditingController();
17+
var _getComment;
18+
bool isCanSend = false;
19+
20+
@override
21+
void initState() {
22+
// TODO: implement initState
23+
super.initState();
24+
_getComment = this._getIssueComment(context);
25+
}
26+
27+
@override
28+
Widget build(BuildContext context) {
29+
return Scaffold(
30+
appBar: AppBar(
31+
elevation: 0,
32+
centerTitle: true,
33+
title: Text(
34+
AppLocalizations.$t('title_comment_detials')
35+
),
36+
),
37+
body: Stack(
38+
children: <Widget>[
39+
Container(
40+
margin: EdgeInsets.only(bottom: 50),
41+
child: _ContentList(context),
42+
),
43+
_SendComment(context)
44+
],
45+
)
46+
);
47+
}
48+
49+
Widget _ContentList (BuildContext context) {
50+
return ListView(
51+
children: <Widget>[
52+
_IssueContent(context),
53+
_CommentContent(context)
54+
],
55+
);
56+
}
57+
58+
Widget _IssueContent (BuildContext context) {
59+
return Store.connect<UserModel>(
60+
builder: (context, child, model) {
61+
IssuesContent issuesContent = model.flutter_ui_issues.issuesContent[widget.indexes];
62+
return Column(
63+
crossAxisAlignment: CrossAxisAlignment.start,
64+
children: <Widget>[
65+
ListTile(
66+
leading: CircleAvatar(
67+
backgroundImage: NetworkImage(
68+
issuesContent.user.avatarUrl??'http://thumb10.jfcdns.com/2018-06/bce5b10ae530f530.png',
69+
),
70+
),
71+
title: Text('${issuesContent.user.login}'),
72+
subtitle: Text('更新时间:${issuesContent.updatedAt}'),
73+
),
74+
Container(
75+
padding: EdgeInsets.fromLTRB(20.0, 20, 20, 0),
76+
child: Text(
77+
'${issuesContent.title != '' ? issuesContent.title : '无标题'} #${issuesContent.number}',
78+
style: Theme.of(context).textTheme.title,
79+
),
80+
),
81+
Container(
82+
padding: EdgeInsets.fromLTRB(20.0, 10, 20, 20.0),
83+
child: Text(
84+
issuesContent.body,
85+
// != '' ?issuesContent.body:'无主体内容'
86+
style: Theme.of(context).textTheme.subhead
87+
),
88+
),
89+
Divider(
90+
height: 1,
91+
)
92+
],
93+
);
94+
}
95+
);
96+
}
97+
98+
Widget _CommentContent (BuildContext context) {
99+
return FutureBuilder(
100+
future: _getComment,
101+
builder: (BuildContext context, AsyncSnapshot snapshot) {
102+
if (snapshot.connectionState == ConnectionState.waiting) {
103+
return Container(
104+
padding: EdgeInsets.all(20),
105+
child: Center(
106+
child: Text('loading....'),
107+
),
108+
);
109+
} else if(snapshot.connectionState == ConnectionState.done) {
110+
if (snapshot.hasData) {
111+
return Store.connect<UserModel>(
112+
builder: (context, child, model) {
113+
List<Widget> items = [];
114+
for(var issuesDetails in model.issues_comment.issuesDetails) {
115+
items.add(_CommentContentItem(context, issuesDetails));
116+
}
117+
return Column(
118+
children: items,
119+
);
120+
}
121+
);
122+
} else {
123+
return Center(
124+
child: Text('暂无数据'),
125+
);
126+
}
127+
}
128+
},
129+
);
130+
}
131+
132+
Future<String> _getIssueComment(BuildContext context) async {
133+
IssuesContent issuesContent = Store.valueNotCtx<UserModel>().flutter_ui_issues.issuesContent[widget.indexes];
134+
await Store.valueNotCtx<UserModel>().getIssueComment(issuesContent.number);
135+
return 'end';
136+
}
137+
138+
Widget _CommentContentItem(BuildContext context, IssuesDetails issuesDetails) {
139+
return Container(
140+
padding: EdgeInsets.fromLTRB(10, 20, 10, 0),
141+
child: Column(
142+
children: <Widget>[
143+
ListTile(
144+
leading: CircleAvatar(
145+
backgroundImage: NetworkImage(
146+
issuesDetails.user.avatarUrl??'http://thumb10.jfcdns.com/2018-06/bce5b10ae530f530.png',
147+
),
148+
),
149+
title: Text('${issuesDetails.user.login}'),
150+
subtitle: Text('${issuesDetails.body}')
151+
),
152+
Divider(height: 1,)
153+
],
154+
),
155+
);
156+
}
157+
158+
Widget _SendComment (BuildContext context) {
159+
return Positioned(
160+
bottom: 0,
161+
left: 0,
162+
child: Container(
163+
width: MediaQuery.of(context).size.width,
164+
height: 50,
165+
decoration: BoxDecoration(
166+
color: Colors.white,
167+
border: Border(
168+
top: BorderSide(width: 0.5, color: Color(int.parse('0xffe4e4e4')))
169+
)
170+
),
171+
child: Row(
172+
children: <Widget>[
173+
Expanded(
174+
flex: 1,
175+
child: _InputBox(),
176+
),
177+
Store.connect<UserModel>(
178+
builder: (context, child, model) {
179+
IssuesContent issuesContent = model.flutter_ui_issues.issuesContent[widget.indexes];
180+
return GestureDetector(
181+
onTap: () async {
182+
if (isCanSend) {
183+
if (model.user.id != null) {
184+
print('发布内容:${_controller.text}');
185+
bool isSendSuccess = await model.setIssueComment(
186+
_controller.text,
187+
issuesContent.number
188+
);
189+
if (isSendSuccess) {
190+
await this._getIssueComment(context);
191+
_controller.text = '';
192+
} else {
193+
print('网络错误');
194+
Scaffold.of(context).showSnackBar(SnackBar(
195+
content: Text('网络出错,请稍后重试'),
196+
));
197+
}
198+
} else {
199+
print('去往登陆');
200+
Navigator.of(context).push(
201+
MaterialPageRoute(
202+
builder: (BuildContext context) {
203+
return LoginIndex.Index();
204+
}
205+
)
206+
);
207+
}
208+
}
209+
},
210+
child: Container(
211+
padding: EdgeInsets.fromLTRB(0, 0, 10, 0),
212+
child: Text(
213+
'发布',
214+
style: TextStyle(
215+
color: isCanSend ? Theme.of(context).primaryColor : Colors.grey,
216+
fontSize: 17
217+
)
218+
),
219+
),
220+
);
221+
}
222+
)
223+
],
224+
)
225+
),
226+
);
227+
}
228+
Widget _InputBox() {
229+
return Container(
230+
height: 30,
231+
margin: EdgeInsets.fromLTRB(10, 10, 10, 10),
232+
decoration: BoxDecoration(
233+
color: Color(int.parse('0xffEDEDED')),
234+
borderRadius: BorderRadius.circular(15)
235+
),
236+
child: Row(
237+
children: <Widget>[
238+
Expanded(
239+
flex: 1,
240+
child: TextField(
241+
controller: _controller,
242+
autofocus: false,
243+
onChanged: _onChanged,
244+
style: TextStyle(
245+
fontSize: 18.0,
246+
color: Colors.black,
247+
fontWeight: FontWeight.w300
248+
),
249+
decoration: InputDecoration(
250+
contentPadding: EdgeInsets.fromLTRB(10, 0, 10, 0),
251+
border: InputBorder.none,
252+
hintText: '说点什么吧',
253+
hintStyle: TextStyle(fontSize: 15)
254+
),
255+
),
256+
)
257+
],
258+
)
259+
);
260+
}
261+
262+
_onChanged(String text) {
263+
if (text.length > 0) {
264+
setState(() {
265+
isCanSend = true;
266+
});
267+
} else {
268+
setState(() {
269+
isCanSend = false;
270+
});
271+
}
272+
}
273+
}

0 commit comments

Comments
 (0)