Skip to content

Commit bb50f4e

Browse files
committed
2.0.0-beta4
1 parent 790458b commit bb50f4e

File tree

3 files changed

+43
-22
lines changed

3 files changed

+43
-22
lines changed

package_src/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## [2.0.0-beta3]
1+
## [2.0.0-beta4]
22
- fix LogPanel bugs
33

44
## [2.0.0-beta2]

package_src/lib/src/log_panel.dart

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -345,19 +345,20 @@ class LogListenerScope extends StatefulWidget {
345345

346346
final LogPanelBuilder? logPanelBuilder;
347347

348-
static LogListener? of(BuildContext context) {
349-
return context
350-
.findAncestorStateOfType<_LogListenerScopeState>()
351-
?.logNotifier as LogListener;
348+
static LogListenerScopeState? of(BuildContext context) {
349+
return context.findAncestorStateOfType<LogListenerScopeState>();
352350
}
353351

354352
@override
355-
_LogListenerScopeState createState() => _LogListenerScopeState();
353+
LogListenerScopeState createState() => LogListenerScopeState();
356354
}
357355

358-
class _LogListenerScopeState extends LogState<LogListenerScope> {
356+
class LogListenerScopeState extends LogState<LogListenerScope> {
359357
late LogListener _logListener;
360358

359+
// 日志面板(位于子树中,默认是LogPanel)会缓存自身的高度
360+
double? storage;
361+
361362
@override
362363
void initState() {
363364
_logListener = LogListener(widget.logEmitter);
@@ -458,11 +459,24 @@ class _LogPanelState extends State<LogPanel> {
458459
double _height = 0;
459460
bool _drag = false;
460461
late LogValueNotifier _listenable;
462+
late LogValueNotifier _originalListenable;
463+
LogInfo? _last;
464+
465+
//每一次都从该位置开始处理
466+
late int _lastLength;
461467

462468
bool get _canExpanded => widget.maxHeight - _height > .0001;
463469

464470
bool get _draggable => widget.maxHeight - widget.minHeight > 0.0001;
465471

472+
set height(double v) {
473+
_height = v.clamp(widget.minHeight, widget.maxHeight);
474+
final scope = LogListenerScope.of(context);
475+
if (scope != null) {
476+
scope.storage = _height;
477+
}
478+
}
479+
466480
void _jumpToListEnd() {
467481
SchedulerBinding.instance!.addPostFrameCallback((_) {
468482
if (mounted) {
@@ -476,12 +490,6 @@ class _LogPanelState extends State<LogPanel> {
476490
);
477491
}
478492

479-
late LogValueNotifier _originalListenable;
480-
LogInfo? _last;
481-
482-
//每一次都从该位置开始处理
483-
int _lastLength = 0;
484-
485493
//合并相邻重复日志
486494
void _mergeLog() {
487495
final list = _originalListenable.value;
@@ -506,7 +514,7 @@ class _LogPanelState extends State<LogPanel> {
506514
<LogInfo>[],
507515
(List<LogInfo> previousValue, element) {
508516
if (_last == null) {
509-
_last = element;
517+
_last = element..times = 1;
510518
return previousValue..add(_last!);
511519
} else {
512520
if (_last!.isEqual(element)) {
@@ -515,7 +523,7 @@ class _LogPanelState extends State<LogPanel> {
515523
return previousValue;
516524
}
517525
//和上一条不同
518-
_last = element;
526+
_last = element..times = 1;
519527
return previousValue..add(_last!);
520528
}
521529
},
@@ -534,9 +542,13 @@ class _LogPanelState extends State<LogPanel> {
534542
'[listenable] required! Consider [LogListenerScope] as an ancestor widget.',
535543
);
536544
_originalListenable = listenable!;
545+
_lastLength = 0;
546+
_last = null;
537547
if (widget.mergeDuplicateLogs) {
538548
_listenable = LogValueNotifier();
539549
_originalListenable.addListener(_mergeLog);
550+
// 可能_originalListenable已经有日志了,先触发一次合并
551+
_originalListenable.notifyListeners();
540552
} else {
541553
_listenable = _originalListenable;
542554
}
@@ -545,14 +557,16 @@ class _LogPanelState extends State<LogPanel> {
545557

546558
@override
547559
void initState() {
548-
_height = widget.minHeight;
549-
_init(widget.listenable ?? LogListenerScope.of(context));
560+
final scope = LogListenerScope.of(context);
561+
height = scope?.storage ?? widget.minHeight;
562+
_init(widget.listenable ?? scope?.logListener);
550563
super.initState();
551564
}
552565

553566
@override
554567
void didUpdateWidget(covariant LogPanel oldWidget) {
555-
final listenable = widget.listenable ?? LogListenerScope.of(context);
568+
final listenable =
569+
widget.listenable ?? LogListenerScope.of(context)?.logListener;
556570
if (widget.mergeDuplicateLogs != oldWidget.mergeDuplicateLogs ||
557571
_originalListenable != listenable) {
558572
_originalListenable.removeListener(_mergeLog);
@@ -572,7 +586,8 @@ class _LogPanelState extends State<LogPanel> {
572586

573587
@override
574588
Widget build(BuildContext context) {
575-
_height = _height.clamp(widget.minHeight, widget.maxHeight);
589+
//触发setter,setter中会根据最大最小高度调整日志面板高度。
590+
height = _height;
576591
return Material(
577592
child: SizedBox(
578593
height: _height,
@@ -605,7 +620,7 @@ class _LogPanelState extends State<LogPanel> {
605620
var newHeight = _height - details.delta.dy;
606621
if (newHeight != _height) {
607622
setState(() {
608-
_height = newHeight;
623+
height = newHeight;
609624
});
610625
}
611626
},
@@ -633,7 +648,13 @@ class _LogPanelState extends State<LogPanel> {
633648
else
634649
const Spacer(),
635650
IconButton(
636-
onPressed: () => _listenable.clear(),
651+
onPressed: () {
652+
// 清空日志
653+
_originalListenable.value.clear();
654+
_listenable.value.clear();
655+
// 触发_mergeLog执行,最终会通知 ValueListenableBuilder 重新 build
656+
_originalListenable.notifyListenersUnsafe();
657+
},
637658
icon: const Icon(Icons.delete_outline),
638659
),
639660
IconButton(

package_src/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: flukit
22
description: flukit(Flutter UI Kit), a flutter common library which contains ScaleView, Swiper, GradientCircularProgressIndicator...
3-
version: 2.0.0-beta3
3+
version: 2.0.0-beta4
44
homepage: https://github.com/flutterchina/flukit
55

66

0 commit comments

Comments
 (0)