From 3bbc0f1b10063cb9804805e5cfbbb274d9e2f145 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E6=82=9F=E7=A9=BA?= <39251474@163.com> Date: Thu, 6 Apr 2023 16:52:39 +0800 Subject: [PATCH] Update size_detector_widget.dart Use SizeChangedLayoutNotifier to refactor --- lib/src/size_detector_widget.dart | 36 +++++++++++++++---------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/lib/src/size_detector_widget.dart b/lib/src/size_detector_widget.dart index e4f7c09..be466d5 100644 --- a/lib/src/size_detector_widget.dart +++ b/lib/src/size_detector_widget.dart @@ -2,41 +2,41 @@ import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; class SizeDetectorWidget extends StatefulWidget { - final Widget child; - final ValueChanged onSizeDetect; - const SizeDetectorWidget({ Key? key, required this.child, required this.onSizeDetect, }) : super(key: key); + final Widget child; + final ValueChanged onSizeDetect; + @override - _SizeDetectorWidgetState createState() => _SizeDetectorWidgetState(); + State createState() => _SizeDetectorWidgetState(); } class _SizeDetectorWidgetState extends State { - Size? _oldSize; + + void _listenSize() { + SchedulerBinding.instance?.addPostFrameCallback((_) { + widget.onSizeDetect(context.size!); + }); + } @override void initState() { super.initState(); - SchedulerBinding.instance?.addPostFrameCallback((_) => _detectSize()); + _listenSize(); } @override Widget build(BuildContext context) { - return widget.child; - } - - void _detectSize() { - if (!mounted) { - return; - } - final size = context.size; - if (_oldSize != size) { - _oldSize = size; - widget.onSizeDetect(size!); - } + return NotificationListener( + onNotification: (_) { + _listenSize(); + return false; + }, + child: SizeChangedLayoutNotifier(child: widget.child), + ); } }