颤振传递数据::找不到吸气剂

时间:2020-05-24 12:08:16

标签: flutter

我正在尝试创建一个初始屏幕,供用户选择一个城市,每个城市通过url_items变量具有自己的API,以访问其数据以在第二个屏幕中填充ListViews。

当我在第二个屏幕中调用数据时,通过http.Response response = await http.get(url_items);出现错误Getter not found: url_items

我如何正确使用吸气剂?

class Splash extends StatefulWidget {
  _SplashState createState() => _SplashState();
}

class _SplashState extends State<Splash> {
  String dropdownValue = 'NY';
  String city = 'NY';
  String url_items = 'https://ny.com/items';
  String url_stores = 'https://ny.com/stores';

  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: <Widget>[
          ListTile(
            title: DropdownButton<String>(
              value: dropdownValue,
              onChanged: (String newValue) {
                setState(() {
                  dropdownValue = newValue;
                  city = newValue;
                  if (city == 'NY'){url_items = 'https://ny.com/items';} else {url_items = 'https://chicago.com/items';}
                });
              },
              items: <String>['NY', 'Chicago'].map<DropdownMenuItem<String>>(
                (String value) {
                  return DropdownMenuItem<String>(
                    value: value,
                    child: Text(value),
                  );
                }
              ).toList(),
            ),
          ),          
          RaisedButton(
            child: Text('View Items'),
            onPressed: () {
              Navigator.push(context,
                MaterialPageRoute(
                  builder: (context) => Items(url_items: url_items, url_stores: url_stores, city: city)
                ),
              );
            },
          ),          
        ],
      ),
    );
  }
}

class Items extends StatelessWidget {
  var url_items=""; 
  var url_stores=""; 
  var city=""; 

  Items({Key key, this.url_items, this.url_stores, this.city}) : super(key: key);

  static Future<List<Item>> getItems() async {
    http.Response response = await http.get(url_items);
    String data = response.body;
    List collection = json.decode(data);
    Iterable<Item> _items = collection.map((_) => Item.fromJson(_));
    return _items.toList();
  }

  Stream<List<Item>> get itemListView => Stream.fromFuture(getItems());

  Widget build(BuildContext context) {
    return Scaffold(
      body: StreamBuilder(
        stream: itemListView,
        builder: (BuildContext context, AsyncSnapshot<List<Item>> snapshot) {
          List<Item> items = snapshot.data;
          return ListView.separated(
            itemBuilder: (BuildContext context, int index) {
              Item item = items[index];
              return ListTile(
                title: Html(data: item.name),
                subtitle: Html(data: item.userName),
                onTap: () {
                  Navigator.push(context,
                    MaterialPageRoute(
                      builder: (context) => ItemDetail(item.name, item.userName..),
                    ),
                  );
                },
              );
            },
            separatorBuilder: (context, index) => Divider(),
            );
          }
        }
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

无法通过variables/members方法访问实例static。所以尝试更改

static Future<List<Item>> getItems() async {...}

Future<List<Item>> getItems() async {...}