Виджет Builder
Виджет Builder вызывает builder
с BuildContext,
привязанным к этому Builder.
Так получают context ниже InheritedWidget
или внутри методов, где context родителя недоступен.
Синтаксис
Builder(
builder: (context) {
return Text('abcde');
},
)
Параметры
| Параметр | Описание |
|---|---|
builder |
Функция, которая получает BuildContext Builder
и возвращает виджет.
|
Пример
Давайте прочитаем Theme внутри Builder:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.purple)),
home: Scaffold(
body: Center(
child: Builder(
builder: (context) {
final color = Theme.of(context).colorScheme.primary;
return Text('abcde', style: TextStyle(color: color));
},
),
),
),
),
);
}
На экране Builder даст context и окрасит 'abcde'.
Пример
Давайте найдем ScaffoldState через Builder:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: Builder(
builder: (context) {
final has = context.findAncestorStateOfType<ScaffoldState>() != null;
return Text(has ? '12345' : 'abcde');
},
),
),
),
),
);
}
На экране Builder покажет '12345', потому что ScaffoldState найден.
Смотрите также
-
класс
BuildContext,
который передают в builder -
виджет
StatefulBuilder,
который добавляетsetStateк builder -
метод
build,
который тоже получаетBuildContext -
виджет
ListenableBuilder,
который перестраивает subtree по Listenable