当状态代码在单独的文件中定义时,Listview 不显示

安什萨赫德瓦

我是 Flutter 开发的新手,这可能是一个幼稚的问题,但我正在关注 Flutter 开发站点上的初学者教程,但我的列表视图没有显示。我更改了一些类/函数名称,并将代码放在不同的文件中,但我不确定这里有什么问题,这应该是一个无限随机单词列表的列表。
这是完整的代码:

//File name: main.dart
import 'package:english_words/english_words.dart';
import 'package:flutter/material.dart';
import 'package:flutter_app_as/StatefulWidgetStates.dart';

class StatefulRandomWordsWidget extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return RandomWordsState();
  }

}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var wordWidget = StatefulRandomWordsWidget();
    return MaterialApp(
        title: 'Useless Title',
        home: Scaffold(
            appBar: AppBar(title: Text('Welcome to Flutter')),
            body: wordWidget));
  }
}

void main() {
  runApp(MyApp());
}

//File name: StatefulWidgetStates.dart
import 'package:english_words/english_words.dart';
import 'package:flutter/material.dart';
import 'package:flutter_app_as/main.dart';


class RandomWordsState extends State<StatefulRandomWordsWidget> {
  final dataList = <WordPair>[];

  @override
  Widget build(BuildContext context) {
    return getListView();
  }

  Widget getListView() {
    ListView listViewWidget = ListView.builder(
        itemCount: dataList.length,
        padding: EdgeInsets.all(8.0),
        itemBuilder: (context, pos) {
          if (pos.isOdd) {
            return Divider();
          }
          else {
            final index = pos ~/ 2;
            if (index >= dataList.length) {
              List<WordPair> pairs=generateWordPairs().take(10);
              dataList.addAll(pairs);
            }

            WordPair childData = dataList[index];
            return ListTile(title:  Text(childData.asCamelCase, style: TextStyle(fontSize: 12.0)));
          }

        });
    return listViewWidget;
  }

}

我也不明白这是什么final index = pos ~/ 2;逻辑。官方文档说:

表达式 i ~/ 2 将 i 除以 2 并返回整数结果。例如: 1, 2, 3, 4, 5 变成 0, 1, 1, 2, 2。这会计算 ListView 中单词配对的实际数量,减去分隔符小部件。

但我猜我用错了。

塞尔吉奥·贝纳尔

请记住,当您使用 StateFul 小部件时,您需要告诉框架该小部件中的某些状态(日期)已更改并且需要重建。因此,当您将事物添加到 te 列表时,状态会发生变化并且需要重新构建。您可以通过调用该setState((){ });方法来告诉框架进行重建

例子:

List<WordPair> pairs = generateWordPairs().take(10);
dataList.addAll(pairs);
setState(() {});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章