Skip to content

Create an DefaultAutoSizeGroup #121

@jamesblasco

Description

@jamesblasco

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]

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions