Flutter가 모든 위젯을 다시 빌드/다시 그리도록 강제하는 방법은 무엇입니까?
같은 준비가 되셨습니까?
Flutter가 Flutter에서 모든 위젯을 다시 빌드/다시 그리도록 강제하는 방법은 무엇입니까?
자식이 읽을 수 있는 데이터가 있지만 모든 자식의 생성자 인수에 데이터를 명시적으로 전달하고 싶지 않은 이러한 유형의 사용 사례는 일반적으로 상속된 위젯을 호출합니다. flutter는 데이터에 의존하는 위젯을 자동으로 추적하고 변경된 트리 부분을 다시 빌드합니다.
로캘 변경을 처리하도록 설계된 LocaleQuery 위젯이 있습니다. 이러한 솔루션을 구현하고 Flutter 모바일 애플리케이션 개발을 위해 Flutter Agency의 전문 Flutter 개발자에게 문의할 수 있습니다.
로케일 변경 이외의 것을 추적하려는 경우 확장하는 자체 클래스를 만들고inherited widget 앱 루트 근처의 계층 구조에 포함할 수 있습니다. 부모는 자식이 액세스할 수 있는 GlobalKey로 키가 설정된 상태 저장 위젯이어야 합니다.
stateful widget의 상태는 배포하려는 데이터를 소유하고 setState를 호출하는 변경 방법을 노출해야 합니다. 하위 위젯이 State의 데이터를 변경하려는 경우 전역 키를 사용하여 State(key.currentState)에 대한 포인터를 가져오고 이에 대한 메서드를 호출할 수 있습니다.
데이터를 읽으려면 Inherited Widget 하위 클래스의 static of(context) 메서드를 호출하면 State가 setState를 호출할 때마다 이러한 위젯을 다시 빌드해야 한다고 Flutter에 알릴 수 있습니다.
위젯에는 setState() 메서드가 있어야 하며 이 메서드가 호출될 때마다 위젯이 다시 그려집니다.
https://api.flutter.dev/flutter/widgets/State/setState.html
예를 들어 MaterialApp을 위젯으로 래핑하여 위젯을 사용할 수 있습니다.
Widget build(BuildContext context) {
return AppBuilder(builder: (context) {
return MaterialApp(
...
);
});
}
AppBuilder.of(context).rebuild();
@override
Widget build(BuildContext context) {
rebuildAllChildren(context);
return ...
}
void rebuildAllChildren(BuildContext context) {
void rebuild(Element el) {
el.markNeedsBuild();
el.visitChildren(rebuild);
}
(context as Element).visitChildren(rebuild);
}
이것은 모든 어린이를 방문하여 재건이 필요한 것으로 표시합니다. 이 코드를 위젯 트리의 최상위 위젯에 넣으면 모든 것이 다시 빌드됩니다.
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State {
final ValueNotifier _counter = ValueNotifier(0);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("ValueListenableBuilder")),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text('You have pushed the button this many times:'),
ValueListenableBuilder(
valueListenable: _counter,
builder: (context, value, _) {
// This builder will only get called when the _counter
// is updated.
return Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Text(
'$value',
style: const TextStyle(fontSize: 25),
),
],
);
},
// The child parameter is most helpful if the child is
// expensive to build and does not depend on the value from
// the notifier.
)
],
),
),
floatingActionButton: FloatingActionButton(
child: const Icon(Icons.plus_one),
onPressed: () => _counter.value += 1,
),
);
}
}
또한 setState(() {});
산출
결론:
읽어주셔서 감사합니다.
이 기사에서는 Force Flutter를 통해 모든 위젯을 다시 빌드/다시 그립니다.
계속 배우도록 !!! 계속 설레발!!!
FlutterAgency.com은 Flutter 기술 및 Flutter 개발자 전용 포털 플랫폼입니다. 포털에는 Flutter 위젯 가이드, Flutter 프로젝트, 코드 라이브러리 등과 같은 Flutter의 멋진 리소스가 가득합니다.
Reference
이 문제에 관하여(Flutter가 모든 위젯을 다시 빌드/다시 그리도록 강제하는 방법은 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pankajdas0909/how-to-force-flutter-to-rebuildredraw-all-widgets-afg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)