Как создать панель расширения с помощью streambuilder во Flutter? - PullRequest
0 голосов
/ 04 августа 2020

У меня проблемы с реализацией Streambuilder для образца флаттера виджета Expandpanellist. Я не смог найти много информации по этой теме, поэтому я практически застрял здесь. Я предполагаю, что должен заменить эту часть generateitems на streambuilder, но я не совсем уверен. Я только начал изучать флаттер.

Любая помощь будет принята с благодарностью.

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';


class ExpansionPanelScreen extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.blue[50],
      appBar: AppBar(
        title: Text('test'),
        backgroundColor: Colors.blue[400],
        elevation: 0.0,
        actions: <Widget>[
          FlatButton.icon(
              onPressed: () async {
                await _auth.signout();
              },
              icon: Icon(Icons.person),
              label: Text('LogOut'))
        ],
      ),
      body: PanelList(),
    );
  }
}

//stores ExpansionPanel state information
class Item {
  Item({
    this.id,
    this.expandedValue,
    this.headerValue,
  });

  int id;
  String expandedValue;
  String headerValue;
}

List<Item> generateItems(int numberOfItems) {
  return List.generate(numberOfItems, (int index) {
    return Item(
      id: index,
      headerValue: 'Panel $index',
      expandedValue: 'This is item number $index',
    );
  });
}

class PanelList extends StatefulWidget {
  PanelList({Key key}) : super(key: key);

  @override
  _PanelListState createState() => _PanelListState();
}

class _PanelListState extends State<PanelList> {
  List<Item> _data = generateItems(8);

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      child: Container(
        child: _buildPanel(),
      ),
    );
  }

  Widget _buildPanel() {
    return ExpansionPanelList.radio(
      initialOpenPanelValue: 2,
      children: _data.map<ExpansionPanelRadio>((Item item) {
        return ExpansionPanelRadio(
            canTapOnHeader: true,
            value: item.id,
            headerBuilder: (BuildContext context, bool isExpanded) {
              return ListTile(
                title: Text(item.headerValue),
              );
            },
            body: ListTile(
                title: Text(item.expandedValue),
                subtitle: Text('To delete this panel, tap the trash can icon'),
                trailing: Icon(Icons.delete),
                onTap: () {
                  setState(() {
                    _data.removeWhere((currentItem) => item == currentItem);
                  });
                }));
      }).toList(),
    );
  }


}


...