Адаптивный макет Flutter, заключив все в корневой виджет / Как изменить все двойные значения виджетов-потомков, используя один корневой виджет

#flutter #responsive

#flutter #отзывчивый

Вопрос:

Я писал свои собственные адаптивные макеты следующим образом: вместо того, чтобы писать обычный код

 Container(padding: EdgeInsets.all(10)),
Text("abc", style: TextStyle(fontSize: 20)),
 

Я использовал функцию responsiveSize()

 Container(padding: EdgeInsets.all(responsiveSize(10, context))),
Text("abc", style: TextStyle(fontSize: responsiveSize(20, context))),
 

и определите функцию responsiveSize() как

 double responsiveSize(double number, BuildContext context){
  if (MediaQuery.of(context).size.width < 450) {
    return number;
  } else {
    return number * 1.5;
  }
}
 

или что-то в этом роде, что я могу легко изменить.

Но проблема в том, что мне приходится переносить каждое двойное значение в свой код с помощью функции responsiveSize(), что очень утомительно. Я ищу способ объединить все мои виджеты в один корневой виджет, например, обернуть мой виджет MaterialApp внутри виджета ResponsiveSize:

 class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ResponsiveSize(
      child: MaterialApp(
        home: HomePage(),
      ),
    );
  }
}
 

и написание обычного кода (как упоминалось выше, используйте двойные значения как есть, не заключая их в функцию responsiveSize()) и определите виджет ResponsiveSize каким-то образом, которого я не знаю. Таким образом, я могу использовать адаптивный макет только одним виджетом и могу легко удалить корневой виджет ResponsiveSize, если он мне не понадобится позже.

Однако это включает в себя изменение всех двойных значений во всех дочерних виджетах виджета ResponsiveSize, и это то, что я не знаю, как сделать.

Итак, я хотел бы знать, как я могу изменить все двойные значения всех виджетов-потомков корневого виджета?Как я должен определить корневой виджет?

Комментарии:

1. я думаю, что более простым подходом будет использование этого пакета .

2. @hiwa Ваш комментарий полезен, спасибо. (хотя и не полное решение)

Ответ №1:

Виджет LayoutBuilder может быть тем, что вы ищете.