ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## Builder - Builder 用于获取父组件或者部分状态管理的方法 - 这个小部件是定义[StatelessWidget](https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html)子类的简单内联替代方案 ``` class Foo extends StatelessWidget { @override Widget build(BuildContext context) => Text('foo'); } Center(child: Foo()) ``` 可用Builder替换 ``` Center( child: Builder( builder: (BuildContext context) => Text('foo'); ), ) ``` ``` child: Builder( builder: (context){ return TextButton( onPressed: (){ ScaffoldState _sate = context.findAncestorStateOfType<ScaffoldState>()!; _sate.closeDrawer(); }, child: Text("hello world"), ); }, ) ``` ## FutureBuilder ``` class LoginPage extends StatefulWidget { @override _LoginPageState createState() => _LoginPageState(); } class _LoginPageState extends State<LoginPage> { Future<void>? _loginFuture; @override Widget build(BuildContext context) { return Scaffold( body: FutureBuilder( future: _loginFuture, builder: (context, snapshot) { // 处理加载状态 if (snapshot.connectionState == ConnectionState.waiting) { return const Center(child: CircularProgressIndicator()); } // 处理错误状态 if (snapshot.hasError) { return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text('登录失败: ${snapshot.error}'), ElevatedButton( onPressed: () { setState(() { _loginFuture = login(); // 重试 }); }, child: const Text('重试'), ), ], ), ); } // 正常显示登录表单 return LoginForm( onLogin: () { setState(() { _loginFuture = login(); }); }, ); }, ), ); } } ```