flutter - StatelessWidget 中的 Futurebuilder - Flutter

标签 flutter stateless stateful flutter-futurebuilder

我在 Stateful Widget 和 future 中有以下代码:在 Futurebuilder 中正确调用函数 _getCategory()

class Categories extends StatefulWidget {
  @override
  _CategoriesState createState() => _CategoriesState();
}

class _CategoriesState extends State<Categories> {
  List<AllAccounts> _allaccounts;
  DatabaseHelper _dbHelper;
  int _count = 0;

  @override
  void initState() {
    super.initState();
    setState(() {
      _dbHelper = DatabaseHelper.instance;
    });
    _getCategory();
  }

  Future _getCategory() async {
    List<AllAccounts> x = await _dbHelper.getCategory();
    setState(() {
      _allaccounts = x;
    });
    _count = _allaccounts.length;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Add/Edit Categories'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: [
            SizedBox(
              height: 20.0,
            ),
            Text('Select a Category', style: TextStyle(fontSize: 18.0),),
            SizedBox(
              height: 20.0,
            ),
            _list(),
          ],
        ),
      ),
    );
  }

  _list() =>
      Expanded(
        child: ListView.builder(
          itemCount: _count,
          itemBuilder: (context, position) {
            return Card(
              color: Colors.grey[600],
              elevation: 2.0,
              child: ListTile(
                leading: Icon(Icons.group),
                title: Text(_allaccounts[position].category,
                  style: TextStyle(fontSize: 17.0),),
                trailing: Icon(Icons.arrow_forward),
                onTap: (){},
              ),
            );
          },
        ),
      );

}

但是,当我在 StatelessWidget 中尝试相同的操作时,Futurebuilder 中的 future: 不会被调用。

class Test extends StatelessWidget {
  List<AllAccounts> _allaccounts;
  DatabaseHelper _dbHelper;
  int _count = 0;


  Future<int> _getCat() async {
    List<AllAccounts> x = await _dbHelper.getCategory();
    _allaccounts = x;
    _count = x.length;
    print(_count);
    return _count;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Test'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: [
            _list(),
          ],
        ),
      ),);
  }

  _list() => Expanded(
        child: FutureBuilder<int>(
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.none &&
                snapshot.hasData == null) {
              return Center(
                child: CircularProgressIndicator(),
              );
            }
            return Container(
              child: Text('Printing $_count'),
            );
          },
          future: _getCat(),
        ),
      );
}

Text('正在打印 $_count) 返回'正在打印 0'。此外,_getCat() 函数中的打印不会显示在控制台中。

Stateless Widget 中 Futurebuilder 的使用方式有问题吗?

最佳答案

您需要使用 snapshot.data 来获取从 _getCat 返回的值,而不是打印 _count

return Container(
              child: Text('Printing ${snapshot.data}'),
            );

关于flutter - StatelessWidget 中的 Futurebuilder - Flutter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64501776/

相关文章:

flutter - 5 个字符后自动添加破折号

firebase - Face 对象的属性在 firebase ml vision flutter 中始终为 null

session - CaSTLe ActiveRecord 能否开启无状态 session ?

java - 如何在有状态 session bean 上下文查找期间定义名称?

flutter 应用程序 : how about changing the state inside 'build' ?

android - 使用 flutter wifi 包获取类型错误

firebase - 如何使用 Flutter 获取 Firebase 存储目录中的所有文件

flutter - 无状态和有状态小部件,我可以同时使用吗?

java - 限制和跳过操作在无序时变得无状态