Skip to content

Commit 585a784

Browse files
committed
remove flutter_image_compress device_info_plus
1 parent 6be680a commit 585a784

File tree

5 files changed

+133
-31
lines changed

5 files changed

+133
-31
lines changed

lib/util/utils.dart

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import 'package:dio/dio.dart';
44
import 'package:flutter/cupertino.dart';
55
import 'package:flutter/material.dart';
66
import 'package:flutter/services.dart';
7-
import 'package:flutter_image_compress/flutter_image_compress.dart';
87
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
98
import 'package:intl/intl.dart' as intl;
109
import 'package:ityu_tools/exports.dart';
@@ -99,6 +98,10 @@ class Utils {
9998
return data ?? false;
10099
}
101100

101+
static String getStringForDefault(dynamic data, {String defaultStr = ""}) {
102+
return data ?? defaultStr;
103+
}
104+
102105
static bool getSafeIsEmpty(dynamic data) {
103106
return (data == null ? 0 : data.length) == 0;
104107
}
@@ -281,31 +284,31 @@ class Utils {
281284
return time;
282285
}
283286

284-
static Future<ResponseBodyMt> postFormData3Web(
285-
Dio dio, List<XFile> files) async {
286-
const extra = <String, dynamic>{};
287-
final queryParameters = <String, dynamic>{};
288-
final headers = <String, dynamic>{};
289-
final data = FormData();
290-
291-
for (int i = 0; i < files.length; i++) {
292-
final bytes = await files[i].readAsBytes();
293-
final entry = MapEntry(
294-
'file', MultipartFile.fromBytes(bytes, filename: files[i].name));
295-
data.files.add(entry);
296-
}
297-
final result = await dio.fetch<Map<String, dynamic>>(
298-
setStreamType2<ResponseBodyMt>(Options(
299-
method: 'POST',
300-
headers: headers,
301-
extra: extra,
302-
contentType: 'multipart/form-data')
303-
.compose(dio.options, 'comm/uploadFile',
304-
queryParameters: queryParameters, data: data)
305-
.copyWith(baseUrl: dio.options.baseUrl)));
306-
final value = ResponseBodyMt.fromJson(result.data!);
307-
return value;
308-
}
287+
// static Future<ResponseBodyMt> postFormData3Web(
288+
// Dio dio, List<XFile> files) async {
289+
// const extra = <String, dynamic>{};
290+
// final queryParameters = <String, dynamic>{};
291+
// final headers = <String, dynamic>{};
292+
// final data = FormData();
293+
//
294+
// for (int i = 0; i < files.length; i++) {
295+
// final bytes = await files[i].readAsBytes();
296+
// final entry = MapEntry(
297+
// 'file', MultipartFile.fromBytes(bytes, filename: files[i].name));
298+
// data.files.add(entry);
299+
// }
300+
// final result = await dio.fetch<Map<String, dynamic>>(
301+
// setStreamType2<ResponseBodyMt>(Options(
302+
// method: 'POST',
303+
// headers: headers,
304+
// extra: extra,
305+
// contentType: 'multipart/form-data')
306+
// .compose(dio.options, 'comm/uploadFile',
307+
// queryParameters: queryParameters, data: data)
308+
// .copyWith(baseUrl: dio.options.baseUrl)));
309+
// final value = ResponseBodyMt.fromJson(result.data!);
310+
// return value;
311+
// }
309312

310313
static RequestOptions setStreamType2<T>(RequestOptions requestOptions) {
311314
if (T != dynamic &&

lib/widget/export_widget.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ export 'my_iframe/my_iframe.dart';
1616
export 'pin_code_widget.dart';
1717
export 'radio_list_title_x.dart';
1818
export 'refresh_loadmore/empty_wrap_widget.dart';
19-
export 'refresh_loadmore/load_more_child.dart';
2019
export 'refresh_loadmore/refresh_nested_widget.dart';
2120
export 'round_widget.dart';
2221
export 'segment_control_x.dart';

lib/widget/tree_list.dart

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:ityu_tools/exports.dart';
3+
4+
typedef ListExpansionTile<T> = List<T> Function(T);
5+
typedef ModelToMap<T> = Map<String, dynamic> Function(T);
6+
typedef ButtonsByT<T> = Widget? Function(T);
7+
8+
class TreeUtils {
9+
static List<Widget> generateRows<T>(List<T> items,
10+
{int depth = 0,
11+
required ListExpansionTile<T> listExpansionTile,
12+
required ModelToMap<T> modelToMap,
13+
ButtonsByT<T>? btnS}) {
14+
final list = items
15+
.map((e) => listExpansionTile(e).isNotEmpty == true
16+
? ExpansionTile(
17+
controlAffinity: ListTileControlAffinity.leading,
18+
tilePadding: EdgeInsets.only(left: (depth) * 15),
19+
title: ItemExpansionTile(
20+
dept: depth,
21+
item: modelToMap(e),
22+
btnS: btnS?.call(e),
23+
),
24+
children: generateRows(listExpansionTile(e),
25+
listExpansionTile: listExpansionTile,
26+
depth: depth + 1,
27+
btnS: btnS,
28+
modelToMap: modelToMap),
29+
)
30+
: Padding(
31+
padding: EdgeInsets.only(left: (depth * 20.0) + 30),
32+
child: ItemExpansionTile(
33+
item: modelToMap(e),
34+
dept: depth,
35+
btnS: btnS?.call(e),
36+
),
37+
))
38+
.toList();
39+
return list;
40+
}
41+
}
42+
43+
class ItemExpansionTileHeader extends StatelessWidget {
44+
final List<String> headers;
45+
final double width;
46+
47+
const ItemExpansionTileHeader(
48+
{super.key, required this.headers, this.width = 150});
49+
50+
@override
51+
Widget build(BuildContext context) {
52+
return Row(
53+
children: [
54+
SizedBox(
55+
width: 40 + width,
56+
height: 60,
57+
child: Center(
58+
child: Padding(
59+
padding: const EdgeInsets.only(right: 30),
60+
child: Text(headers.first),
61+
)),
62+
),
63+
...headers.skip(1).map((e) => Expanded(child: Center(child: Text(e))))
64+
],
65+
);
66+
}
67+
}
68+
69+
class ItemExpansionTile extends StatelessWidget {
70+
final int dept;
71+
final Map<String, dynamic> item;
72+
final Widget? btnS;
73+
74+
const ItemExpansionTile(
75+
{super.key, required this.item, this.dept = 0, this.btnS});
76+
77+
@override
78+
Widget build(BuildContext context) {
79+
const space = 20.0;
80+
return Row(
81+
mainAxisAlignment: MainAxisAlignment.spaceBetween,
82+
children: [
83+
SizedBox(
84+
width: 150 - space * dept,
85+
child: Text(
86+
item[item.keys.first] ?? "",
87+
style: TextStyle(color: context.colorScheme.primary),
88+
),
89+
),
90+
...item.keys.skip(1).map((e) => Expanded(
91+
child: Center(child: Text(Utils.getStringForDefault(item[e]))))),
92+
if (btnS != null) Expanded(child: Center(child: btnS!)),
93+
],
94+
);
95+
}
96+
}

pubspec.yaml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ dependencies:
1313
cupertino_icons: ^1.0.6
1414
intl: any
1515
dio: ^5.3.2
16-
logger: ^2.0.2
16+
# logger: ^2.0.2
17+
logger: ^2.0.2+1
1718
#路由相关
1819
# go_router: ^7.0.1
1920

@@ -35,9 +36,7 @@ dependencies:
3536
#选择图片
3637
image_picker: ^1.0.4
3738
#侧滑
38-
flutter_image_compress: ^2.0.4
3939
webview_flutter: ^4.2.4
40-
device_info_plus: ^9.0.3
4140
path_provider: ^2.1.1
4241

4342
dev_dependencies:

test/ityu_tools_test.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'package:flutter_test/flutter_test.dart';
2-
2+
import 'package:ityu_tools/exports.dart';
33
import 'package:ityu_tools/ityu_tools.dart';
44

55
void main() {
@@ -9,4 +9,9 @@ void main() {
99
expect(calculator.addOne(-7), -6);
1010
expect(calculator.addOne(0), 1);
1111
});
12+
13+
test('test getStringForDefault', () {
14+
int? a;
15+
expect(Utils.getStringForDefault(a), "");
16+
});
1217
}

0 commit comments

Comments
 (0)