Skip to content

Commit 9ecc52d

Browse files
committed
merge develop
2 parents 540cd7d + dfcf0ce commit 9ecc52d

26 files changed

+1469
-20
lines changed

assets/images/ali_connors.png

19 KB
Loading

flutter_01.png

40.8 KB
Loading

lib/blocs/bak/search_api.dart

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* Created with Android Studio.
3+
* User: 一晟
4+
* Date: 2019/4/28
5+
* Time: 3:20 PM
6+
7+
* tartget: FlatButton 的示例
8+
*/
9+
import 'dart:async';
10+
import 'package:dio/dio.dart';
11+
import 'dart:convert';
12+
import './search_result.dart';
13+
import 'package:html/parser.dart' show parse;
14+
15+
var dio = new Dio();
16+
class Api {
17+
Future<List<SearchResult>> search(name) async {
18+
print('=========>>>');
19+
var response = await dio.get("https://www.so.com/s?ie=utf-8&q=$name");
20+
// var document = parse(response.data);
21+
// var app = document.querySelectorAll('.res-title a');
22+
List<SearchResult> res = [];
23+
// app.forEach((f) {
24+
// res.add(
25+
// SearchResult(
26+
// title: f.text,
27+
// source: f.attributes["data-url"] ?? f.attributes["href"],
28+
// ),
29+
// );
30+
// });
31+
return res;
32+
}
33+
}
34+
35+
Api api = Api();

lib/blocs/bak/search_bloc.dart

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* Created with Android Studio.
3+
* User: 一晟
4+
* Date: 2019/4/28
5+
* Time: 7:17 PM
6+
7+
* tartget:
8+
*/
9+
import 'dart:async';
10+
import 'package:bloc/bloc.dart';
11+
12+
import './search_event.dart';
13+
import './search_state.dart';
14+
import './search_api.dart';
15+
16+
17+
/// 这里导入api类与上面的SearchEvent与SearchState文件
18+
19+
class SearchBloc extends Bloc<SearchEvent, SearchState> {
20+
@override
21+
SearchState get initialState => SearchUninitialized();
22+
23+
@override
24+
Stream<SearchState> mapEventToState(SearchEvent event,) async* {
25+
if (event is SearchFetch) {
26+
try {
27+
yield SearchLoading();
28+
final res = await api.search(event.query);
29+
yield SearchLoaded(res: res);
30+
} catch (_) {
31+
yield SearchError();
32+
}
33+
}
34+
}
35+
}

lib/blocs/bak/search_event.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* Created with Android Studio.
3+
* User: 一晟
4+
* Date: 2019/4/28
5+
* Time: 7:18 PM
6+
7+
* tartget:
8+
*/
9+
abstract class SearchEvent {}
10+
11+
class SearchFetch extends SearchEvent {
12+
final String query;
13+
14+
SearchFetch({this.query});
15+
16+
@override
17+
String toString() => 'SearchFetch:获取搜索结果事件';
18+
}

lib/blocs/bak/search_result.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/**
2+
* Created with Android Studio.
3+
* User: 一晟
4+
* Date: 2019/4/28
5+
* Time: 7:11 PM
6+
7+
* tartget:
8+
*/
9+
class SearchResult {
10+
String title;
11+
String source;
12+
13+
SearchResult({this.title, this.source});
14+
}

lib/blocs/bak/search_state.dart

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* Created with Android Studio.
3+
* User: 一晟
4+
* Date: 2019/4/28
5+
* Time: 7:13 PM
6+
7+
* tartget:
8+
*/
9+
import './search_result.dart';
10+
11+
abstract class SearchState {}
12+
13+
class SearchError extends SearchState {
14+
@override
15+
String toString() => 'SearchError:获取失败';
16+
}
17+
18+
class SearchUninitialized extends SearchState {
19+
@override
20+
String toString() => 'SearchUninitialized:未初始化';
21+
}
22+
23+
class SearchLoading extends SearchState {
24+
@override
25+
String toString() => 'SearchLoading :正在加载';
26+
}
27+
28+
class SearchLoaded extends SearchState {
29+
final List<SearchResult> res;
30+
31+
SearchLoaded({
32+
this.res,
33+
});
34+
35+
@override
36+
String toString() => 'SearchLoaded:加载完毕';
37+
}

lib/blocs/bak/search_widget.dart

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/**
2+
* Created with Android Studio.
3+
* User: 一晟
4+
* Date: 2019/4/28
5+
* Time: 7:19 PM
6+
7+
* tartget:
8+
*/
9+
import 'package:flutter/material.dart';
10+
import 'package:flutter_bloc/flutter_bloc.dart';
11+
//import 'package:suiyi/blocs/search/bloc.dart';
12+
import './search_event.dart';
13+
import './search_state.dart';
14+
import './search_bloc.dart';
15+
16+
17+
class SearchWidget extends StatefulWidget {
18+
final SearchDelegate delegate;
19+
final String query;
20+
SearchWidget({this.delegate, this.query});
21+
@override
22+
_SearchWidgetState createState() => _SearchWidgetState();
23+
}
24+
25+
class _SearchWidgetState extends State<SearchWidget> {
26+
final SearchBloc _search = SearchBloc();
27+
String old;
28+
@override
29+
void dispose() {
30+
_search.dispose();
31+
super.dispose();
32+
}
33+
34+
@override
35+
Widget build(BuildContext context) {
36+
print('1:${old}');
37+
print('2:${widget.query}');
38+
if (old != widget.query) {
39+
_search.dispatch(SearchFetch(query: widget.query));
40+
old = widget.query;
41+
}
42+
return BlocBuilder(
43+
bloc: _search,
44+
builder: (BuildContext context, SearchState state) {
45+
print('-------${state}');
46+
if (state is SearchUninitialized || state is SearchLoading) {
47+
return Center(
48+
child: CircularProgressIndicator(),
49+
);
50+
} else if (state is SearchError) {
51+
return Center(
52+
child: Text('获取失败'),
53+
);
54+
} else if (state is SearchLoaded) {
55+
return ListView.builder(
56+
itemBuilder: (BuildContext context, int index) {
57+
return ListTile(
58+
dense: true,
59+
leading: Icon(
60+
Icons.bookmark_border,
61+
size: 32,
62+
),
63+
title: Text(
64+
state.res[index].title,
65+
overflow: TextOverflow.ellipsis,
66+
),
67+
subtitle: Text(state.res[index].source),
68+
onTap: () {
69+
// 在这里对选中的结果进行解析,因为我目前是用golang实现的,所以就没贴代码了。
70+
print(state.res[index].source);
71+
},
72+
);
73+
},
74+
itemCount: state.res.length,
75+
);
76+
}
77+
},
78+
);
79+
}
80+
}

lib/blocs/industry_api.dart

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/**
2+
* Created with Android Studio.
3+
* User: 一晟
4+
* Date: 2019/4/28
5+
* Time: 3:20 PM
6+
7+
* tartget: FlatButton 的示例
8+
*/
9+
import 'dart:async';
10+
import 'package:dio/dio.dart';
11+
import 'dart:convert';
12+
import 'package:html/parser.dart' show parse;
13+
import './industry_model.dart';
14+
import './search_result.dart';
15+
16+
var dio = new Dio();
17+
//class Api2 {
18+
// /// 关键字提示(起点)
19+
// Future<List<String>> suggestion(String query) async {
20+
//// http.Response response = await http.get(
21+
//// "https://www.qidian.com/ajax/Search/AutoComplete?siteid=1&query=$query");
22+
// var response = await dio.get("https://www.qidian.com/ajax/Search/AutoComplete?siteid=1&query=$query", data: {});
23+
// //var response = await dio.get("https://www.so.com/s?ie=utf-8&q=$query");
24+
// print('1=====>${query}');
25+
// print('2=====>${response.data}');
26+
// //var data = Suggestion.fromJson(json.decode(response.body));
27+
// //var data = Suggestion.fromJson(json.decode(response.data));
28+
// var data = Suggestion.fromJson(json.decode(response.data));
29+
// List<String> suggestion = [];
30+
// data.suggestions.forEach((k) {
31+
// //print('=====>${k.value}');
32+
// suggestion.add(k.value);
33+
// });
34+
//
35+
// return Future.delayed(Duration(seconds:2), () {
36+
// return suggestion;
37+
// });
38+
// //return suggestion;
39+
// }
40+
//}
41+
class Api {
42+
/// 关键字提示(起点)
43+
Future<List<SearchResult>> suggestion(String query) async {
44+
// http.Response response = await http.get(
45+
// "https://www.qidian.com/ajax/Search/AutoComplete?siteid=1&query=$query");
46+
/// var response = await dio.get("https://www.qidian.com/ajax/Search/AutoComplete?siteid=1&query=$query", data: {});
47+
var response = await dio.get("https://www.so.com/s?ie=utf-8&q=$query flutter");
48+
var document = parse(response.data);
49+
var app = document.querySelectorAll('.res-title a');
50+
///print('1=====>${query}');
51+
///print('2=====>${response.data}');
52+
////print('3=====>${app}');
53+
List<SearchResult> res = [];
54+
app.forEach((f) {
55+
///print('f==>${f}');
56+
res.add(
57+
SearchResult(
58+
title: f.text,
59+
source: f.attributes["data-url"] ?? f.attributes["href"],
60+
),
61+
);
62+
});
63+
64+
return Future.delayed(Duration(seconds:2), () {
65+
return res;
66+
});
67+
//return suggestion;
68+
}
69+
}
70+
71+
Api api = Api();

lib/blocs/industry_bloc.dart

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* Created with Android Studio.
3+
* User: 一晟
4+
* Date: 2019/4/28
5+
* Time: 5:19 PM
6+
7+
* tartget:
8+
*/
9+
import 'dart:async';
10+
import 'package:bloc/bloc.dart';
11+
import './industry_api.dart';
12+
import './industry_event.dart';
13+
import './industry_state.dart';
14+
15+
class SuggestionBloc extends Bloc<SuggestionEvent, SuggestionState> {
16+
@override
17+
SuggestionState get initialState => SuggestionUninitialized();
18+
@override
19+
Stream<SuggestionState> mapEventToState(SuggestionEvent event)async* {
20+
//Stream<SuggestionState> mapEventToState(SuggestionState currentState, SuggestionEvent event,) async* {
21+
if (event is SuggestionFetch) {
22+
//print('event==>${event}');
23+
try {
24+
yield SuggestionLoading();
25+
final res = await api.suggestion(event.query);
26+
print('res====>${res}');
27+
yield SuggestionLoaded(res: res);
28+
} catch (_) {
29+
yield SuggestionError();
30+
}
31+
}
32+
if (event is SuggestionClearFetch) {
33+
//print('event==>${event}');
34+
try {
35+
yield SuggestionUninitialized();
36+
} catch (_) {
37+
yield SuggestionError();
38+
}
39+
}
40+
}
41+
}

lib/blocs/industry_event.dart

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* Created with Android Studio.
3+
* User: 一晟
4+
* Date: 2019/4/28
5+
* Time: 3:35 PM
6+
7+
*/
8+
abstract class SuggestionEvent {}
9+
10+
class SuggestionFetch extends SuggestionEvent {
11+
final String query;
12+
13+
SuggestionFetch({this.query});
14+
15+
@override
16+
String toString() => 'SuggestionFetch:获取关键字提示事件';
17+
}
18+
19+
class SuggestionClearFetch extends SuggestionEvent {
20+
final String query;
21+
22+
SuggestionClearFetch({this.query});
23+
24+
@override
25+
String toString() => 'SuggestionClearFetch:清空界面';
26+
}

0 commit comments

Comments
 (0)