Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 0131bdd

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /