• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

inventree / inventree-app / 19921246168

04 Dec 2025 07:34AM UTC coverage: 1.464% (-0.003%) from 1.467%
19921246168

push

github

web-flow
Parameters refactor (#738)

* refactor attachment code into its own file

* Add getters

* Remove custom models for each type of attachment

* Refactor existing widgets

* Fix double camera open bug

* Add check for modern parameter API

* Add generic parameter type

* Remove old code

* Remove dead code

* Refactor previous widget

* Remove unused imports

* Refactor common code

* format

* Update release notes

* Helper func to render parameters list tile

* Display parameters on part page

* parameters for company

* Supplier more model types:

- ManufacturerPart
- SupplierPart
- PurchaseOrder
- SalesOrder

* dart format

* Fix image prefix

* Remove unused import

* Adjust API version

0 of 162 new or added lines in 9 files covered. (0.0%)

4 existing lines in 4 files now uncovered.

768 of 52456 relevant lines covered (1.46%)

0.05 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/lib/widget/parameter_widget.dart
1
import "package:flutter/material.dart";
2
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
3
import "package:inventree/api.dart";
4
import "package:inventree/app_colors.dart";
5
import "package:inventree/inventree/model.dart";
6
import "package:inventree/inventree/parameter.dart";
7

8
import "package:inventree/l10.dart";
9
import "package:inventree/widget/link_icon.dart";
10
import "package:inventree/widget/paginator.dart";
11
import "package:inventree/widget/progress.dart";
12
import "package:inventree/widget/refreshable_state.dart";
13

14
/*
15
 * Widget for displaying a list of parameters associated with a given Part instance
16
 */
17
class ParameterWidget extends StatefulWidget {
NEW
18
  const ParameterWidget(this.modelType, this.modelId, this.editable) : super();
×
19

20
  final String modelType;
21
  final int modelId;
22
  final bool editable;
23

24
  @override
×
25
  _ParameterWidgetState createState() => _ParameterWidgetState();
×
26
}
27

28
class _ParameterWidgetState extends RefreshableState<ParameterWidget> {
29
  _ParameterWidgetState();
×
30

31
  @override
×
32
  String getAppBarTitle() {
33
    return L10().parameters;
×
34
  }
35

36
  @override
×
37
  List<Widget> appBarActions(BuildContext context) {
38
    return [];
×
39
  }
40

41
  @override
×
42
  Widget getBody(BuildContext context) {
NEW
43
    Map<String, String> filters = {
×
NEW
44
      "model_type": widget.modelType,
×
NEW
45
      "model_id": widget.modelId.toString(),
×
46
    };
47

NEW
48
    return Column(
×
NEW
49
      children: [
×
NEW
50
        Expanded(child: PaginatedParameterList(filters, widget.editable)),
×
51
      ],
52
    );
53
  }
54
}
55

56
/*
57
 * Widget for displaying a paginated list of Part parameters
58
 */
59
class PaginatedParameterList extends PaginatedSearchWidget {
NEW
60
  const PaginatedParameterList(Map<String, String> filters, this.editable)
×
61
    : super(filters: filters);
×
62

63
  final bool editable;
64

65
  @override
×
66
  String get searchTitle => L10().parameters;
×
67

68
  @override
×
69
  _PaginatedParameterState createState() => _PaginatedParameterState();
×
70
}
71

72
class _PaginatedParameterState
73
    extends PaginatedSearchState<PaginatedParameterList> {
74
  _PaginatedParameterState() : super();
×
75

76
  @override
×
77
  String get prefix => "parameters_";
78

79
  @override
×
80
  Map<String, String> get orderingOptions => {};
×
81

82
  @override
×
83
  Map<String, Map<String, dynamic>> get filterOptions => {
×
84
    // TODO
85
  };
86

87
  @override
×
88
  Future<InvenTreePageResponse?> requestPage(
89
    int limit,
90
    int offset,
91
    Map<String, String> params,
92
  ) async {
NEW
93
    final page = await InvenTreeParameter().listPaginated(
×
94
      limit,
95
      offset,
96
      filters: params,
97
    );
98

99
    return page;
100
  }
101

NEW
102
  Future<void> editParameter(InvenTreeParameter parameter) async {
×
103
    // Checkbox values are handled separately
104
    if (parameter.is_checkbox) {
×
105
      return;
106
    } else {
107
      parameter.editForm(
×
108
        context,
×
109
        L10().editParameter,
×
110
        onSuccess: (data) async {
×
111
          updateSearchTerm();
×
112
        },
113
      );
114
    }
115
  }
116

117
  @override
×
118
  Widget buildItem(BuildContext context, InvenTreeModel model) {
119
    InvenTreeParameter parameter = model as InvenTreeParameter;
120

121
    String title = parameter.name;
×
122

123
    if (parameter.units.isNotEmpty) {
×
124
      title += " [${parameter.units}]";
×
125
    }
126

127
    return ListTile(
×
128
      title: Text(title),
×
129
      subtitle: Text(parameter.description),
×
130
      trailing: parameter.is_checkbox
×
131
          ? Switch(
×
132
              value: parameter.as_bool,
×
133
              onChanged: (bool value) {
×
NEW
134
                if (widget.editable) {
×
135
                  showLoadingOverlay();
×
136
                  parameter.update(values: {"data": value.toString()}).then((
×
137
                    value,
138
                  ) async {
139
                    hideLoadingOverlay();
×
140
                    updateSearchTerm();
×
141
                  });
142
                }
143
              },
144
            )
145
          : Text(parameter.value),
×
146
      onTap: parameter.is_checkbox
×
147
          ? null
148
          : () async {
×
NEW
149
              if (widget.editable) {
×
150
                editParameter(parameter);
×
151
              }
152
            },
153
    );
154
  }
155
}
156

157
/*
158
 * Return a ListTile to display parameters for the specified model
159
 */
NEW
160
ListTile? ShowParametersItem(
×
161
  BuildContext context,
162
  String modelType,
163
  int modelId,
164
  int parameterCount,
165
  bool editable,
166
) {
167
  // Note: Currently cannot add parameters from the app,
168
  // So, if there are no parameters, do not show the item
NEW
169
  if (parameterCount == 0) {
×
170
    return null;
171
  }
172

NEW
173
  if (!InvenTreeAPI().supportsModernParameters) {
×
174
    return null;
175
  }
176

NEW
177
  return ListTile(
×
NEW
178
    title: Text(L10().parameters),
×
NEW
179
    leading: Icon(TablerIcons.list_details, color: COLOR_ACTION),
×
NEW
180
    trailing: LinkIcon(
×
NEW
181
      text: parameterCount > 0 ? parameterCount.toString() : null,
×
182
    ),
NEW
183
    onTap: () {
×
NEW
184
      Navigator.push(
×
185
        context,
NEW
186
        MaterialPageRoute(
×
NEW
187
          builder: (context) => ParameterWidget(modelType, modelId, editable),
×
188
        ),
189
      );
190
    },
191
  );
192
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc