Skip to content

Commit 2e3820b

Browse files
committed
✨ issue #251 add support of suggestion item type (Scrollable/Newline)
1 parent 8659c68 commit 2e3820b

File tree

5 files changed

+71
-26
lines changed

5 files changed

+71
-26
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
## [2.3.1]
22

3+
* **Feat**: [251](https://github.com/SimformSolutionsPvtLtd/flutter_chatview/issues/251) Add
4+
support to provide a type of suggestions item(Scrollable or New Line).
35
* **Fix**: [282](https://github.com/SimformSolutionsPvtLtd/flutter_chatview/pull/282) Upgrade
46
version of audio wave forms 1.2.0
57
* **Fix**: [276](https://github.com/SimformSolutionsPvtLtd/flutter_chatview/issues/276) link preview

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,6 +1025,21 @@ ChatView(
10251025
),
10261026
```
10271027

1028+
1029+
36. Use `suggestionItemType` to displays a suggestion items in new line and not in scrollable form.
1030+
1031+
1032+
```dart
1033+
ChatView(
1034+
...
1035+
replySuggestionsConfig: ReplySuggestionsConfig(
1036+
suggestionItemType: SuggestionItemsType.newLine,
1037+
),
1038+
...
1039+
),
1040+
```
1041+
1042+
10281043
## How to use
10291044

10301045
Check out [blog](https://medium.com/simform-engineering/chatview-a-cutting-edge-chat-ui-solution-7367b1f9d772) for better understanding and basic implementation.

lib/src/models/config_models/reply_suggestions_config.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:chatview/src/models/data_models/suggestion_item_data.dart';
22
import 'package:flutter/material.dart';
33

4+
import '../../values/enumeration.dart';
45
import 'suggestion_item_config.dart';
56
import 'suggestion_list_config.dart';
67

@@ -9,11 +10,15 @@ class ReplySuggestionsConfig {
910
final SuggestionListConfig? listConfig;
1011
final ValueSetter<SuggestionItemData>? onTap;
1112
final bool autoDismissOnSelection;
13+
final SuggestionItemsType suggestionItemType;
14+
final double spaceBetweenSuggestionItemRow;
1215

1316
const ReplySuggestionsConfig({
1417
this.listConfig,
1518
this.itemConfig,
1619
this.onTap,
1720
this.autoDismissOnSelection = true,
21+
this.suggestionItemType = SuggestionItemsType.scrollable,
22+
this.spaceBetweenSuggestionItemRow = 10,
1823
});
1924
}

lib/src/values/enumeration.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,3 +143,12 @@ enum ScrollButtonAlignment {
143143

144144
final Alignment alignment;
145145
}
146+
147+
enum SuggestionItemsType {
148+
scrollable,
149+
multiline;
150+
151+
bool get isScrollType => this == SuggestionItemsType.scrollable;
152+
153+
bool get isMultilineType => this == SuggestionItemsType.multiline;
154+
}

lib/src/widgets/suggestions/suggestion_list.dart

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -78,39 +78,53 @@ class _SuggestionListState extends State<SuggestionList>
7878
alignment: const AlignmentDirectional(-1.0, -1.0),
7979
heightFactor: math.max(_controller.value, 0.0),
8080
widthFactor: 1,
81-
child: SingleChildScrollView(
82-
scrollDirection: Axis.horizontal,
83-
child: Row(
84-
mainAxisAlignment: MainAxisAlignment.end,
85-
children: List.generate(
86-
suggestions.length,
87-
(index) {
88-
final suggestion = suggestions[index];
89-
return suggestion.config?.customItemBuilder
90-
?.call(index, suggestion) ??
91-
suggestionsItemConfig?.customItemBuilder
92-
?.call(index, suggestion) ??
93-
Padding(
94-
padding: EdgeInsets.only(
95-
right: index == suggestions.length
96-
? 0
97-
: suggestionsListConfig.itemSeparatorWidth,
98-
),
99-
child: SuggestionItem(
100-
suggestionItemData: suggestion,
101-
),
102-
);
103-
},
104-
),
105-
),
106-
),
81+
child: suggestionsConfig?.suggestionItemType.isScrollType ?? false
82+
? SingleChildScrollView(
83+
scrollDirection: Axis.horizontal,
84+
child: Row(
85+
children: _suggestionListWidget(
86+
suggestionsItemConfig,
87+
),
88+
),
89+
)
90+
: Wrap(
91+
runSpacing:
92+
suggestionsConfig?.spaceBetweenSuggestionItemRow ??
93+
10,
94+
alignment: WrapAlignment.end,
95+
children: _suggestionListWidget(suggestionsItemConfig),
96+
),
10797
);
10898
},
10999
),
110100
),
111101
);
112102
}
113103

104+
List<Widget> _suggestionListWidget(
105+
SuggestionItemConfig? suggestionsItemConfig) {
106+
final suggestionsListConfig =
107+
suggestionsConfig?.listConfig ?? const SuggestionListConfig();
108+
return List.generate(
109+
suggestions.length,
110+
(index) {
111+
final suggestion = suggestions[index];
112+
return suggestion.config?.customItemBuilder?.call(index, suggestion) ??
113+
suggestionsItemConfig?.customItemBuilder?.call(index, suggestion) ??
114+
Padding(
115+
padding: EdgeInsets.only(
116+
right: index == suggestions.length
117+
? 0
118+
: suggestionsListConfig.itemSeparatorWidth,
119+
),
120+
child: SuggestionItem(
121+
suggestionItemData: suggestion,
122+
),
123+
);
124+
},
125+
);
126+
}
127+
114128
@override
115129
void deactivate() {
116130
final newSuggestions = chatViewIW?.chatController.newSuggestions;

0 commit comments

Comments
 (0)