gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 07:17:04 25 4
gpt4 key购买 nike

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

//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; 逻辑是什么。官方文档说:

The expression i ~/ 2 divides i by 2 and returns an integer result. For example: 1, 2, 3, 4, 5 becomes 0, 1, 1, 2, 2. This calculates the actual number of word pairings in the ListView, minus the divider widgets.

但我猜我用错了。

最佳答案

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

例子:

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

关于flutter - 当状态代码在单独的文件中定义时, ListView 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57045524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com