gpt4 book ai didi

flutter - 分段条列表动态

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

我是 flutter 的新手,我一直在做 segemented bar,暂时我已经完成了静态代码并希望做动态我在做动态列表时遇到问题,下面的代码是写的。

     import 'dart:async';
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:westerAf/paymentPage.dart';
import 'package:http/http.dart' as http;

class EventsPage extends StatefulWidget {
@override
EventsPageState createState() => new EventsPageState();
}

class EventsPageState extends State<EventsPage> {
List data = List();

String url = 'https://d57b9120.ngrok.io/api/events/westernaf/packages';
Future<String> makeRequest() async {
var response = await http
.get(Uri.encodeFull(url), headers: {"Accept": "application/json"});

setState(() {
var extractdata = json.decode(response.body);
data = extractdata["result"];
});
}

int theirGroupValue = 0;

final Map<int, Widget> logoWidgets = const <int, Widget>{
0: Text('Early Bird'),
1: Text('General'),
2: Text('Onsite'),
};

static Widget giveCenter(String ListView) {
return Container(
child: Text(
"Text: $ListView",
style: TextStyle(color: Colors.blue, fontSize: 20.0),
),
);
}

@override
void initState() {
super.initState();
this.makeRequest();
}

List<Widget> bodies = [
new ListView.builder(
itemCount: data == null ? 0 : data.length,
itemBuilder: (BuildContext context, i) {
return new ListTile(
title: new Text(data[i]["package"]),
subtitle: new Text(data[i]["packageName"].toString()),
);
},
),
];

@override
Widget build(BuildContext context) {
return Scaffold(
body: bodies[theirGroupValue],
appBar: AppBar(
elevation: 2.0,
backgroundColor: Colors.white,
centerTitle: true,
title: Text(
'title',
style: TextStyle(color: Colors.black),
),
bottom: PreferredSize(
preferredSize: Size(double.infinity, 45.0),
child: Padding(
padding: EdgeInsets.only(top: 5.0, bottom: 10.0),
child: Row(
children: <Widget>[
SizedBox(
width: 15.0,
),
Expanded(
child: CupertinoSegmentedControl(
groupValue: theirGroupValue,
onValueChanged: (changeFromGroupValue) {
setState(() {
theirGroupValue = changeFromGroupValue;
});
},
children: logoWidgets,
),
)
],
),
),
),
),
);
}
}

和下面的代码我正在尝试做动态。我有 http get 请求数据。这里 data 有信息列表和数据获取错误。我不知道如何做动态。请帮我找出我哪里出错了。

List<Widget> bodies = [
new ListView.builder(
itemCount: data == null ? 0 : data.length,
itemBuilder: (BuildContext context, i) {
return new ListTile(
title: new Text(data[i]["package"]),
subtitle: new Text(data[i]["packageName"].toString() +
' ' +
" price: " +
data[i]["price"].toString()),
);
},
),
];

错误 enter image description here

这里数据显示为红色,表示只有静态成员可以访问init enter image description here

最佳答案

1)改变

@override
void initState() {
this.makeRequest();
}

@override
void initState() {
super.initState();
this.makeRequest();
}

为什么?

initState()是第一次在小部件树中插入有状态小部件时调用的方法。 super.initState()转发到 State<T> 的默认实现你的小部件的基类。你不能在 initState 方法中错过它。

2)改变

List data;

List data = List();

为什么?

告诉框架这个列表是不固定的。否则它会假定您的列表为空,因为您尚未为其分配任何默认值。

其余代码看起来不错,应该可以工作。如果它仍然不起作用,请在评论中告诉我们。

关于flutter - 分段条列表动态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57143264/

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