相关疑难解决方法(0)

Flutter切换到Tab重新加载小部件并运行FutureBuilder

问题:

我有2个选项卡使用Default Tabs Controller,如下所示:

Widget build(BuildContext context) {
    return DefaultTabController(
      length: 2,
      child: Scaffold(
        drawer: Menu(),
        appBar: AppBar(
          title: Container(
            child: Text('Dashboard'),
          ),
          bottom: TabBar(
            tabs: <Widget>[
              Container(
                padding: EdgeInsets.all(8.0),
                child: Text('Deals'),
              ),
              Container(
                padding: EdgeInsets.all(8.0),
                child: Text('Viewer'),
              ),
            ],
          ),
        ),
        body: TabBarView(
          children: <Widget>[
            DealList(),
            ViewersPage(),
          ],
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

DealList()是一个StatefulWidget像这样建立的:

Widget build(BuildContext context) {
    return FutureBuilder(
      future: this.loadDeals(),
      builder: (BuildContext context, AsyncSnapshot snapshot) {
        print('Has error: ${snapshot.hasError}');
        print('Has data: ${snapshot.hasData}');
        print('Snapshot …
Run Code Online (Sandbox Code Playgroud)

dart flutter

26
推荐指数
1
解决办法
1万
查看次数

Flutter - 键盘显示和隐藏导致构建调用

我最近一直在学习 Flutter 并遇到了一些奇怪的问题,当我单击 TextField 时,将显示键盘,并将build为托管和所有祖先小部件调用。

我读过当 TextField 单击时,该build方法将被调用,然后整个小部件将被重建,但我遇到的情况有点奇怪,因为在第一个打开的小部件上没有调用构建。

设想:

1 - 打开应用程序。

2 - 第一个小部件加载并打印在屏幕上:"First build called",当我点击 TextField 时,键盘会弹出,控制台上没有打印任何内容。

3 - 点击“打开第二个”,第二个小部件加载并打印在屏幕上: “第二个构建调用”,当我点击文本字段时,键盘弹出并打印:“第二个构建调用”(在步骤[1]中)没有打印!)。

4 - 点击“首先打开”,第一个小部件再次加载并打印在屏幕上:“First build called”,当我点击 TextField 时,键盘弹出并打印:“Second build called First build called”(在步骤 [1] 用于未打印任何内容的同一个小部件!)。

代码:

void main() {
  runApp(MaterialApp(home: First()));
}

class First extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    print('First build called');
    return Scaffold(
      appBar: AppBar(
        title: Text("HI Ramadan"),
      ),
      body: Column( …
Run Code Online (Sandbox Code Playgroud)

dart flutter

11
推荐指数
1
解决办法
6303
查看次数

在Streambuilder中使用TextField

我们如何在StreamBuilder中添加TextField?我有一个TextField / TextFormField作为StreamBuilder或FutureBuilder的构建器函数内的小部件之一,每当我们尝试与文本字段进行交互时,它只会刷新整个构建器小部件并再次调用流/未来。

body: StreamBuilder(
      stream: getClientProfile().snapshots(),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.active) {
          print(snapshot.data.data);
          Client tempClient = Client.from(snapshot.data);
          print('details = ${tempClient.representative.email} ${tempClient
              .address.location} ${tempClient.businessDescription}');
          return Container(
            child: Column(
              children: <Widget>[
                TextFormField(

                )
              ],
            ),
          );
        } else if (snapshot.connectionState == ConnectionState.waiting) {
          return Center(child: CircularProgressIndicator());
        } else {
          return Center(
            child: Row(
              crossAxisAlignment: CrossAxisAlignment.center,
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Icon(Icons.error),
                ),
                Text('Error loading data')
              ],
            ),
          );
        }
      }),
Run Code Online (Sandbox Code Playgroud)

和消防功能

DocumentReference getClientProfile() { …
Run Code Online (Sandbox Code Playgroud)

dart firebase flutter google-cloud-firestore

5
推荐指数
1
解决办法
2760
查看次数

标签 统计

dart ×3

flutter ×3

firebase ×1

google-cloud-firestore ×1