From 06888240e1549cc32bc6bd3510a5844657aed178 Mon Sep 17 00:00:00 2001 From: rachana-egov Date: Mon, 29 Jan 2024 11:15:52 +0530 Subject: [PATCH] issues fixes --- .../lib/blocs/DateSelection.dart | 25 +- .../lib/blocs/TimeSelectionBloc.dart | 16 +- .../digit-ui-components/example/lib/main.dart | 807 +++++++++--------- .../digit-ui-components/example/pubspec.lock | 4 +- .../example/pubspec_overrides.yaml | 2 +- 5 files changed, 414 insertions(+), 440 deletions(-) diff --git a/flutter/digit-ui-components/digit_components/lib/blocs/DateSelection.dart b/flutter/digit-ui-components/digit_components/lib/blocs/DateSelection.dart index e16486c76c..d6a0d742b3 100644 --- a/flutter/digit-ui-components/digit_components/lib/blocs/DateSelection.dart +++ b/flutter/digit-ui-components/digit_components/lib/blocs/DateSelection.dart @@ -1,4 +1,3 @@ -import 'package:digit_components/digit_components.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; @@ -6,33 +5,19 @@ class DateSelectionBloc { Future selectDate({ required BuildContext context, required TextEditingController controller, - DateFormat? dateFormat, - - /// Added parameter for custom date format + DateFormat? dateFormat, /// Added parameter for custom date format }) async { DateTime? selectedDate = await showDatePicker( context: context, initialDate: DateTime.now(), firstDate: DateTime(2000), lastDate: DateTime(2101), - builder: (context, child) { - return Theme( - data: Theme.of(context).copyWith( - colorScheme: DigitTheme.instance.colorScheme, - textButtonTheme: TextButtonThemeData( - style: TextButton.styleFrom( - foregroundColor: Colors.red, - ), - ), - ), - child: child!, - ); - }, ); if (selectedDate != null) { - String formattedDate = dateFormat?.format(selectedDate.toLocal()) ?? - DateFormat('dd/MM/yyyy').format(selectedDate.toLocal()); + String formattedDate = + dateFormat?.format(selectedDate.toLocal()) ?? + DateFormat('dd/MM/yyyy').format(selectedDate.toLocal()); controller.text = formattedDate; } } -} +} \ No newline at end of file diff --git a/flutter/digit-ui-components/digit_components/lib/blocs/TimeSelectionBloc.dart b/flutter/digit-ui-components/digit_components/lib/blocs/TimeSelectionBloc.dart index b4759c48ef..2110692eb5 100644 --- a/flutter/digit-ui-components/digit_components/lib/blocs/TimeSelectionBloc.dart +++ b/flutter/digit-ui-components/digit_components/lib/blocs/TimeSelectionBloc.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import '../../utils/time_utils.dart'; -import '../theme/digit_theme.dart'; class TimeSelectionBloc { Future selectTime({ @@ -11,16 +10,9 @@ class TimeSelectionBloc { TimeOfDay? selectedTime = await showTimePicker( context: context, initialTime: TimeOfDay.now(), - builder: (context, child) { - return Theme( - data: Theme.of(context).copyWith( - colorScheme: DigitTheme.instance.colorScheme, - textButtonTheme: TextButtonThemeData( - style: TextButton.styleFrom( - foregroundColor: Colors.red, - ), - ), - ), + builder: (BuildContext context, Widget? child) { + return MediaQuery( + data: MediaQuery.of(context).copyWith(alwaysUse24HourFormat: false), child: child!, ); }, @@ -29,4 +21,4 @@ class TimeSelectionBloc { controller.text = formatTime(selectedTime); } } -} +} \ No newline at end of file diff --git a/flutter/digit-ui-components/example/lib/main.dart b/flutter/digit-ui-components/example/lib/main.dart index 8741064918..be27aaf1b8 100644 --- a/flutter/digit-ui-components/example/lib/main.dart +++ b/flutter/digit-ui-components/example/lib/main.dart @@ -24,7 +24,6 @@ import 'package:digit_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:url_strategy/url_strategy.dart'; - final List Nodes = [ TreeNode('A', 'A', [ TreeNode('A.A1', 'A1', [ @@ -65,8 +64,8 @@ class MyApp extends StatelessWidget { /// This widget is the root of the application. @override Widget build(BuildContext context) { - return MaterialApp( - title: 'Custom Text Field Example', + return MaterialApp( + title: 'Digit UI Flutter', theme: DigitTheme.instance.mobileTheme, home: const MyHomePage(title: 'Digit Components Page'), ); @@ -75,6 +74,7 @@ class MyApp extends StatelessWidget { class MyHomePage extends StatefulWidget { final String title; + const MyHomePage({required this.title, super.key}); @override @@ -82,7 +82,6 @@ class MyHomePage extends StatefulWidget { } class MyHomePageState extends State { - @override void initState() { super.initState(); @@ -91,420 +90,418 @@ class MyHomePageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: Text(widget.title, textAlign: TextAlign.center,), + appBar: AppBar( + title: Text( + widget.title, + textAlign: TextAlign.center, ), - body:ScrollableContent( - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - DigitTextFormInput( - label: "Text Field", - initialValue: 'value', - controller: TextEditingController(), - innerLabel: 'label', - helpText: 'help text', - charCount: true, - validations: [ - Validator(ValidatorType.maxLength, 10, - errorMessage: 'Maximum length is 10.'), - Validator(ValidatorType.pattern, r'^[a-zA-Z0-9]+$', - errorMessage: 'Invalid format.'), - ], - ), - const SizedBox( - height: 8, - ), - DigitTextAreaFormInput( - label: "Text Area", - controller: TextEditingController(), - innerLabel: 'label', - helpText: 'help text', - ), - const SizedBox( - height: 8, - ), - DigitDateFormInput( - label: "Date Field", - controller: TextEditingController(), - innerLabel: 'innerlabel', - helpText: 'help text', - ), - const SizedBox( - height: 8, - ), - DigitTimeFormInput( - label: "Time Field", - controller: TextEditingController(), - innerLabel: 'innerlabel', - helpText: 'help text', - ), - const SizedBox( - height: 8, - ), - DigitSearchFormInput( - label: "Search Field", - controller: TextEditingController(), - innerLabel: 'innerlabel', - helpText: 'help text', - ), - const SizedBox( - height: 8, - ), - DigitPasswordFormInput( - label: "password Field", - controller: TextEditingController(), - innerLabel: 'innerlabel', - helpText: 'help text', - validations: [ - Validator(ValidatorType.minLength, 6, - errorMessage: - 'Password must be at least 6 characters.'), - ], - ), - const SizedBox( - height: 8, - ), - DigitTextFormInput( - label: "Text Field With Suffix Icon", - controller: TextEditingController(), - innerLabel: 'innerlabel', - helpText: 'help text', - suffixIcon: Icons.currency_rupee_sharp, - ), - const SizedBox( - height: 8, - ), - DigitNumericFormInput( - label: "Numeric Field", - controller: TextEditingController(), - innerLabel: 'innerlabel', - helpText: 'help text', - initialValue: '0', - step: 1, - ), - const SizedBox( - height: 8, - ), - DigitLocationFormInput( - label: "Location Field", - controller: TextEditingController(), - innerLabel: 'innerlabel', - helpText: 'help text', - ), - const SizedBox( - height: 8, - ), - const Text('Dropdown Varients'), - DigitDropdown( - onChange: (String value, String index) => {}, - textEditingController: TextEditingController(), - items: const [ - DropdownItem( - name: 'first', - code: '1', - description: 'description for first one', - profileImage: NetworkImage( - 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSzBXNuO6PezhC18aYH_2cYtS0I7KbxoKYdwA&usqp=CAU', - ), - ), - DropdownItem( - name: 'second', - code: '2', - description: 'description for second one', - profileImage: NetworkImage( - 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSzBXNuO6PezhC18aYH_2cYtS0I7KbxoKYdwA&usqp=CAU', - ), - ), - DropdownItem( - name: 'third', - code: '3', - description: 'description for third one', - profileImage: NetworkImage( - 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSzBXNuO6PezhC18aYH_2cYtS0I7KbxoKYdwA&usqp=CAU', - ), + ), + body: ScrollableContent( + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + DigitTextFormInput( + label: "Text Field", + initialValue: 'value', + controller: TextEditingController(), + innerLabel: 'label', + helpText: 'help text', + charCount: true, + validations: [ + Validator(ValidatorType.maxLength, 10, + errorMessage: 'Maximum length is 10.'), + Validator(ValidatorType.pattern, r'^[a-zA-Z0-9]+$', + errorMessage: 'Invalid format.'), + ], + ), + const SizedBox( + height: 8, + ), + DigitTextAreaFormInput( + label: "Text Area", + controller: TextEditingController(), + innerLabel: 'label', + helpText: 'help text', + ), + const SizedBox( + height: 8, + ), + DigitDateFormInput( + label: "Date Field", + controller: TextEditingController(), + innerLabel: 'innerlabel', + helpText: 'help text', + ), + const SizedBox( + height: 8, + ), + DigitTimeFormInput( + label: "Time Field", + controller: TextEditingController(), + innerLabel: 'innerlabel', + helpText: 'help text', + ), + const SizedBox( + height: 8, + ), + DigitSearchFormInput( + label: "Search Field", + controller: TextEditingController(), + innerLabel: 'innerlabel', + helpText: 'help text', + ), + const SizedBox( + height: 8, + ), + DigitPasswordFormInput( + label: "password Field", + controller: TextEditingController(), + innerLabel: 'innerlabel', + helpText: 'help text', + validations: [ + Validator(ValidatorType.minLength, 6, + errorMessage: + 'Password must be at least 6 characters.'), + ], + ), + const SizedBox( + height: 8, + ), + DigitTextFormInput( + label: "Text Field With Suffix Icon", + controller: TextEditingController(), + innerLabel: 'innerlabel', + helpText: 'help text', + suffixIcon: Icons.currency_rupee_sharp, + ), + const SizedBox( + height: 8, + ), + DigitNumericFormInput( + label: "Numeric Field", + controller: TextEditingController(), + innerLabel: 'innerlabel', + helpText: 'help text', + initialValue: '0', + step: 1, + ), + const SizedBox( + height: 8, + ), + DigitLocationFormInput( + label: "Location Field", + controller: TextEditingController(), + innerLabel: 'innerlabel', + helpText: 'help text', + ), + const SizedBox( + height: 8, + ), + const Text('Dropdown Varients'), + DigitDropdown( + onChange: (String value, String index) => {}, + textEditingController: TextEditingController(), + items: const [ + DropdownItem( + name: 'first', + code: '1', + description: 'description for first one', + profileImage: NetworkImage( + 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSzBXNuO6PezhC18aYH_2cYtS0I7KbxoKYdwA&usqp=CAU', ), - DropdownItem( - name: 'fourth', - code: '4', - description: 'description for fourth one', - profileImage: NetworkImage( - 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSzBXNuO6PezhC18aYH_2cYtS0I7KbxoKYdwA&usqp=CAU', - ), + ), + DropdownItem( + name: 'second', + code: '2', + description: 'description for second one', + profileImage: NetworkImage( + 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSzBXNuO6PezhC18aYH_2cYtS0I7KbxoKYdwA&usqp=CAU', ), - ], - ), - const SizedBox( - height: 8, - ), - DigitDropdown( - onChange: (String value, String index) => {}, - textEditingController: TextEditingController(), - items: [ - 'one', - 'two', - 'three', - 'four', - ] - .asMap() - .entries - .map( - (item) => DropdownItem( - name: item.value, - code: item.key.toString(), + ), + DropdownItem( + name: 'third', + code: '3', + description: 'description for third one', + profileImage: NetworkImage( + 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSzBXNuO6PezhC18aYH_2cYtS0I7KbxoKYdwA&usqp=CAU', ), - ) - .toList(), - ), - const SizedBox(height: 16,), - DigitDropdown( - onChange: (String value, String index) => {}, - textEditingController: TextEditingController(), - textIcon: Icons.article, - items: [ - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - ] - .asMap() - .entries - .map( - (item) => DropdownItem( - name: item.value, - code: item.key.toString(), - description: 'description for ${item.value} one', + ), + DropdownItem( + name: 'fourth', + code: '4', + description: 'description for fourth one', + profileImage: NetworkImage( + 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSzBXNuO6PezhC18aYH_2cYtS0I7KbxoKYdwA&usqp=CAU', ), - ) - .toList(), - ), - const SizedBox( - height: 16, - ), - DigitDropdown( - onChange: (String value, String type) => {}, - textEditingController: TextEditingController(), - dropdownType: DropdownType.nestedSelect, - selectedOption: const DropdownItem( + ), + ], + ), + const SizedBox( + height: 8, + ), + DigitDropdown( + onChange: (String value, String index) => {}, + textEditingController: TextEditingController(), + items: [ + 'one', + 'two', + 'three', + 'four', + ] + .asMap() + .entries + .map( + (item) => DropdownItem( + name: item.value, + code: item.key.toString(), + ), + ) + .toList(), + ), + const SizedBox( + height: 16, + ), + DigitDropdown( + onChange: (String value, String index) => {}, + textEditingController: TextEditingController(), + textIcon: Icons.article, + items: [ + 'one', + 'two', + 'three', + 'four', + 'five', + 'six', + 'seven', + 'eight', + ] + .asMap() + .entries + .map( + (item) => DropdownItem( + name: item.value, + code: item.key.toString(), + description: 'description for ${item.value} one', + ), + ) + .toList(), + ), + const SizedBox( + height: 16, + ), + DigitDropdown( + onChange: (String value, String type) => {}, + textEditingController: TextEditingController(), + dropdownType: DropdownType.nestedSelect, + selectedOption: const DropdownItem( + name: 'one', + code: '1', + type: 'group B', + ), + items: const [ + DropdownItem( name: 'one', code: '1', type: 'group B', ), - items: const [ - DropdownItem( - name: 'one', - code: '1', - type: 'group B', - ), - DropdownItem( - name: 'two', - code: '2', - type: 'group A', - ), - DropdownItem( - name: 'three', - code: '3', - type: 'group B', - ), - DropdownItem( - name: 'four', - code:'4', - type: 'group A', - ), - DropdownItem( - name: 'five', - code: '5', - type: 'group B', - ), - DropdownItem( - name: 'six', - code: '6', - type: 'group A', - ), - ], - ), - const SizedBox( - height: 16, - ), - const Text('MultiSelect Dropdowns'), - MultiSelectDropDown( - onOptionSelected: - (List selectedOptions) {}, - options: const [ - DropdownItem(code: '1', name: 'first'), - DropdownItem( - code: '2', name: 'second'), - DropdownItem(code: '3', name: 'third'), - DropdownItem(code: '4', name: 'four'), - DropdownItem(code: '5', name: 'five'), - ], - selectionType: SelectionType.multiSelect, - ), - const SizedBox(height: 8,), - MultiSelectDropDown( - onOptionSelected: - (List selectedOptions) {}, - options: const [ - DropdownItem(code: '1', name: 'first'), - DropdownItem( - code: '2', name: 'second'), - DropdownItem(code: '3', name: 'third'), - DropdownItem(code: '4', name: 'four'), - DropdownItem(code: '5', name: 'five'), - ], - selectionType: SelectionType.multiSelect, - ), - const SizedBox(height: 8,), - MultiSelectDropDown( - onOptionSelected: - (List selectedOptions) {}, - selectedOptions: const [DropdownItem( + DropdownItem( + name: 'two', + code: '2', + type: 'group A', + ), + DropdownItem( + name: 'three', + code: '3', + type: 'group B', + ), + DropdownItem( + name: 'four', + code: '4', + type: 'group A', + ), + DropdownItem( + name: 'five', + code: '5', + type: 'group B', + ), + DropdownItem( + name: 'six', + code: '6', + type: 'group A', + ), + ], + ), + const SizedBox( + height: 16, + ), + const Text('MultiSelect Dropdowns'), + MultiSelectDropDown( + onOptionSelected: (List selectedOptions) {}, + options: const [ + DropdownItem(code: '1', name: 'first'), + DropdownItem(code: '2', name: 'second'), + DropdownItem(code: '3', name: 'third'), + DropdownItem(code: '4', name: 'four'), + DropdownItem(code: '5', name: 'five'), + ], + selectionType: SelectionType.multiSelect, + ), + const SizedBox( + height: 8, + ), + MultiSelectDropDown( + onOptionSelected: (List selectedOptions) {}, + options: const [ + DropdownItem(code: '1', name: 'first'), + DropdownItem(code: '2', name: 'second'), + DropdownItem(code: '3', name: 'third'), + DropdownItem(code: '4', name: 'four'), + DropdownItem(code: '5', name: 'five'), + ], + selectionType: SelectionType.multiSelect, + ), + const SizedBox( + height: 8, + ), + MultiSelectDropDown( + onOptionSelected: (List selectedOptions) {}, + selectedOptions: const [ + DropdownItem( code: '1', name: 'first', description: 'description', - ),], - options: const [ - DropdownItem( - code: '1', - name: 'first', - description: 'description', - ), - DropdownItem( - code: '2', - name: 'second', - description: 'description', - ), - DropdownItem( - code: '3', - name: 'third', - description: 'description', - ), - DropdownItem( - code: '4', - name: 'four', - description: 'description', - ), - DropdownItem( - code: '5', - name: 'five', - description: 'description', - ), - ], - selectionType: SelectionType.multiSelect, - ), - const SizedBox( - height: 8, - ), - const Text('TreeSelect Dropdowns'), - TreeSelectDropDown( - onOptionSelected: (List selectedOptions) { - // print(selectedOptions); - for (TreeNode node in selectedOptions) { - // print("Node: ${node.value}"); - } - }, - options: Nodes, - treeSelectionType: TreeSelectionType.MultiSelect, - controller: _controller, - ), - const SizedBox( - height: 8, - ), - TreeSelectDropDown( - onOptionSelected: (List selectedOptions) { - // print(selectedOptions); - for (TreeNode node in selectedOptions) { - // print("Node: ${node.value}"); - } - }, - options: Nodes, - treeSelectionType: TreeSelectionType.singleSelect, - ), - const SizedBox( - height: 8, - ), - - DigitRadioList( - onChanged: (value) {}, - radioButtons: [ - RadioButtonModel( - code: '1', - name: 'One', - ), - RadioButtonModel(code: '2', name: 'Two'), - RadioButtonModel(code: '3', name: 'Three'), - // Add more radio buttons as needed - ], - ), - const SizedBox( - height: 8, - ), - DigitToggleList( - toggleButtons: [ - ToggleButtonModel( - name: 'Toggle 1', - key: 'key1', - onSelected: (value) {}), - ToggleButtonModel( - name: 'Toggle 2', - key: 'key2', - onSelected: (value) {}), - ToggleButtonModel( - name: 'Toggle 3', - key: 'key3', - onSelected: (value) {}), - ], - selectedIndex: 1, - onChanged: (selectedValues) {}, - ), - const SizedBox( - height: 8, - ), - DigitButton( - prefixIcon: Icons.add, - label: 'p', - onPressed: () {}, - type: ButtonType.primary, - ), - const SizedBox(height: 8), - DigitButton( - label: 'secondary Button', - onPressed: () {}, - type: ButtonType.secondary, - ), - const SizedBox(height: 8), - DigitButton( - label: 'link', - onPressed: () {}, - type: ButtonType.link, - ), - const SizedBox(height: 8), - DigitButton( - label: 'tertiary Button', - onPressed: () {}, - type: ButtonType.tertiary, - ), - const SizedBox(height: 8,), - DigitCheckbox( - label: 'checkbox', - value: false, - onChanged: (value) {}, - ), - ], - ), + ), + ], + options: const [ + DropdownItem( + code: '1', + name: 'first', + description: 'description', + ), + DropdownItem( + code: '2', + name: 'second', + description: 'description', + ), + DropdownItem( + code: '3', + name: 'third', + description: 'description', + ), + DropdownItem( + code: '4', + name: 'four', + description: 'description', + ), + DropdownItem( + code: '5', + name: 'five', + description: 'description', + ), + ], + selectionType: SelectionType.multiSelect, + ), + const SizedBox( + height: 8, + ), + const Text('TreeSelect Dropdowns'), + TreeSelectDropDown( + onOptionSelected: (List selectedOptions) { + // print(selectedOptions); + for (TreeNode node in selectedOptions) { + // print("Node: ${node.value}"); + } + }, + options: Nodes, + treeSelectionType: TreeSelectionType.MultiSelect, + controller: _controller, + ), + const SizedBox( + height: 8, + ), + TreeSelectDropDown( + onOptionSelected: (List selectedOptions) { + // print(selectedOptions); + for (TreeNode node in selectedOptions) { + // print("Node: ${node.value}"); + } + }, + options: Nodes, + treeSelectionType: TreeSelectionType.singleSelect, + ), + const SizedBox( + height: 8, + ), + DigitRadioList( + onChanged: (value) {}, + radioButtons: [ + RadioButtonModel( + code: '1', + name: 'One', + ), + RadioButtonModel(code: '2', name: 'Two'), + RadioButtonModel(code: '3', name: 'Three'), + // Add more radio buttons as needed + ], + ), + const SizedBox( + height: 8, + ), + DigitToggleList( + toggleButtons: [ + ToggleButtonModel( + name: 'Toggle 1', key: 'key1', onSelected: (value) {}), + ToggleButtonModel( + name: 'Toggle 2', key: 'key2', onSelected: (value) {}), + ToggleButtonModel( + name: 'Toggle 3', key: 'key3', onSelected: (value) {}), + ], + selectedIndex: 1, + onChanged: (selectedValues) {}, + ), + const SizedBox( + height: 8, + ), + DigitButton( + prefixIcon: Icons.add, + label: 'p', + onPressed: () {}, + type: ButtonType.primary, + ), + const SizedBox(height: 8), + DigitButton( + label: 'secondary Button', + onPressed: () {}, + type: ButtonType.secondary, + ), + const SizedBox(height: 8), + DigitButton( + label: 'link', + onPressed: () {}, + type: ButtonType.link, + ), + const SizedBox(height: 8), + DigitButton( + label: 'tertiary Button', + onPressed: () {}, + type: ButtonType.tertiary, + ), + const SizedBox( + height: 8, + ), + DigitCheckbox( + label: 'checkbox', + value: false, + onChanged: (value) {}, + ), + ], ), - ], - ), + ), + ], + ), ); - } - } - diff --git a/flutter/digit-ui-components/example/pubspec.lock b/flutter/digit-ui-components/example/pubspec.lock index 7607a8070a..31d127c25c 100644 --- a/flutter/digit-ui-components/example/pubspec.lock +++ b/flutter/digit-ui-components/example/pubspec.lock @@ -285,8 +285,8 @@ packages: dependency: "direct main" description: path: "flutter/digit-ui-components/digit_components" - ref: build-branch - resolved-ref: af0d40fc2019430ea5daeb542508cb7aa05ee46e + ref: master + resolved-ref: ec78acc6a33addc6811e198c7a9182960df27ffa url: "https://github.com/egovernments/DIGIT-UI-LIBRARIES" source: git version: "0.0.1+8" diff --git a/flutter/digit-ui-components/example/pubspec_overrides.yaml b/flutter/digit-ui-components/example/pubspec_overrides.yaml index 26faa7441f..570aa0da77 100644 --- a/flutter/digit-ui-components/example/pubspec_overrides.yaml +++ b/flutter/digit-ui-components/example/pubspec_overrides.yaml @@ -2,5 +2,5 @@ dependency_overrides: digit_components: git: url: https://github.com/egovernments/DIGIT-UI-LIBRARIES - ref: build-branch + ref: master path: ./flutter/digit-ui-components/digit_components