auto_size_text icon indicating copy to clipboard operation
auto_size_text copied to clipboard

Create an DefaultAutoSizeGroup

Open jamesblasco opened this issue 3 years ago • 1 comments

Describe the solution you'd like

I would like to make use of AutoSizeGroup without the need to create an stateful widget time.

DefaultAutoSizeGroup(
 child: Column(
      children: [
           AutoSizeText('hey'),
           AutoSizeText('hey')
      ]
   )
)

This would behave similar to what any other DefaultFoo widgets behave. It would inject an inherited widget that contains a AutoSizeGroup that is used by any AutoSizeText if no autoSizeGroup is passed. Similar cases are DefaultTabController or DefaultTextStyle.

Implementation:


class DefaultAutoSizeGroup extends StatefulWidget {
  const DefaultAutoSizeGroup({super.key, required this.child}) : super();

  static AutoSizeGroup? of(BuildContext context) {
    return context
        .dependOnInheritedWidgetOfExactType<_InheritedAutoSizeGroup>()
        ?.autoSizeGroup;
  }

  final Widget child;

  @override
  State<DefaultAutoSizeGroup> createState() => _DefaultAutoSizeGroupState();
}

class _DefaultAutoSizeGroupState extends State<DefaultAutoSizeGroup> {
  final AutoSizeGroup autoSizeGroup = AutoSizeGroup();

  @override
  Widget build(BuildContext context) {
    return _InheritedAutoSizeGroup(
      autoSizeGroup: autoSizeGroup,
      child: widget.child,
    );
  }
}

class _InheritedAutoSizeGroup extends InheritedWidget {
  const _InheritedAutoSizeGroup({
    required super.child,
    required this.autoSizeGroup,
  }) : super();

  final AutoSizeGroup autoSizeGroup;

  @override
  bool updateShouldNotify(_InheritedAutoSizeGroup oldWidget) {
    return autoSizeGroup != oldWidget.autoSizeGroup;
  }
}

Version

  • Flutter version: [e.g. 1.5.4]
  • auto_size_text version: [e.g. 1.2.1]

jamesblasco avatar Aug 22 '22 09:08 jamesblasco

I can create a PR if this looks something interesting to have in the package

jamesblasco avatar Aug 22 '22 09:08 jamesblasco