build method Null safety

  1. @override
dynamic build(
  1. dynamic context
)

Implementation

@override
Widget build(BuildContext context) {
  final ThemeData themeData = Theme.of(context);
  final String currentImportanceId =
      productPreferences.getImportanceIdForAttributeId(attribute.id!);
  const double horizontalPadding = LARGE_SPACE;
  final double widgetWidth =
      MediaQuery.of(context).size.width - 2 * horizontalPadding;
  final double importanceWidth = widgetWidth / 4;
  final TextStyle style = themeData.textTheme.headline4!;
  final String? info = attribute.settingNote;
  final List<Widget> children = <Widget>[];
  for (final String importanceId in _importanceIds) {
    children.add(
      GestureDetector(
        onTap: () async {
          await productPreferences.setImportance(attribute.id!, importanceId);

          final AppLocalizations appLocalizations =
              //ignore: use_build_context_synchronously
              AppLocalizations.of(context);
          await showDialog<void>(
            context: context,
            builder: (BuildContext context) => SmoothAlertDialog(
              body: Text(
                appLocalizations.importance_label(
                    attribute.name.toString(), importanceId),
              ),
              actions: <SmoothActionButton>[
                SmoothActionButton(
                  text: appLocalizations.close,
                  onPressed: () => Navigator.pop(context),
                ),
              ],
            ),
          );
        },
        child: Container(
          width: importanceWidth,
          constraints: const BoxConstraints(minHeight: MINIMUM_TARGET_SIZE),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.start,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              Icon(
                currentImportanceId == importanceId
                    ? Icons.radio_button_checked
                    : Icons.radio_button_off,
                color: themeData.colorScheme.primary,
              ),
              AutoSizeText(
                productPreferences
                    .getPreferenceImportanceFromImportanceId(importanceId)!
                    .name!,
                maxLines: 2,
                textAlign: TextAlign.center,
              ),
            ],
          ),
        ),
      ),
    );
  }
  return Padding(
    padding: const EdgeInsets.symmetric(
      vertical: SMALL_SPACE,
      horizontal: horizontalPadding,
    ),
    child: Column(
      mainAxisAlignment: MainAxisAlignment.start,
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        ListTile(
          trailing: info == null ? null : const Icon(Icons.info_outline),
          title: AutoSizeText(
            attribute.settingName ?? attribute.name!,
            maxLines: 2,
            style: style,
          ),
          onTap: info == null
              ? null
              : () async => showDialog<void>(
                    context: context,
                    builder: (BuildContext context) {
                      final AppLocalizations appLocalizations =
                          AppLocalizations.of(context);
                      return SmoothAlertDialog(
                        body: Text(info),
                        actions: <SmoothActionButton>[
                          SmoothActionButton(
                            text: appLocalizations.close,
                            onPressed: () => Navigator.pop(context),
                          ),
                        ],
                      );
                    },
                  ),
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          crossAxisAlignment: CrossAxisAlignment.start,
          children: children,
        ),
      ],
    ),
  );
}