flutter_infinite_listview icon indicating copy to clipboard operation
flutter_infinite_listview copied to clipboard

Question about PageStorage

Open 3DRaven opened this issue 4 years ago • 0 comments

Hi, I don't known where I can make a question.

I need to make infinite list with expandable tiles. Used packages expansion_tile_card infinite_listview

In expansion_tile_card I have children widgets-buttons. I need to collapse expansion_tile_card when button pressed. But, how to I get state of expansion_tile_card from PageStorage? When I try, I not found State by index in builder. Example code: _buildTab is method name from example of infinite_listview This is not work and always returned null because in PageStorage can't found state for builded card.

var s = PageStorage.of(context)
                          ?.readState(context, identifier: index);

code example

 Widget _buildTab(int tab) {
    final ButtonStyle flatButtonStyle = TextButton.styleFrom(
      shape: const RoundedRectangleBorder(
        borderRadius: BorderRadius.all(Radius.circular(4.0)),
      ),
    );

    return InfiniteListView.separated(
      controller: _infiniteController,
      itemBuilder: (BuildContext context, int index) {
        return Padding(
          padding: const EdgeInsets.symmetric(horizontal: 12.0),
          child: ExpansionTileCard(
            key: PageStorageKey(index),
            leading: CircleAvatar(child: Text('A')),
            title: Text('Tap me!'),
            subtitle: Text('I expand!'),
            children: <Widget>[
              Divider(
                thickness: 1.0,
                height: 1.0,
              ),
              Align(
                alignment: Alignment.centerLeft,
                child: Padding(
                  padding: const EdgeInsets.symmetric(
                    horizontal: 16.0,
                    vertical: 8.0,
                  ),
                  child: Text(
                    """Hi there, I'm a drop-in replacement for Flutter's ExpansionTile.

Use me any time you think your app could benefit from being just a bit more Material.

These buttons control the next card down!""",
                    style: Theme.of(context)
                        .textTheme
                        .bodyText2!
                        .copyWith(fontSize: 16),
                  ),
                ),
              ),
              ButtonBar(
                alignment: MainAxisAlignment.spaceAround,
                buttonHeight: 52.0,
                buttonMinWidth: 90.0,
                children: <Widget>[
                  TextButton(
                    style: flatButtonStyle,
                    onPressed: () {
                      var s = PageStorage.of(context)
                          ?.readState(context, identifier: index);
                      print("");
                    },
                    child: Column(
                      children: <Widget>[
                        Icon(Icons.arrow_downward),
                        Padding(
                          padding: const EdgeInsets.symmetric(vertical: 2.0),
                        ),
                        Text('Open'),
                      ],
                    ),
                  ),
                  TextButton(
                    style: flatButtonStyle,
                    onPressed: () {
                      // keys[index]?.currentState?.collapse();
                    },
                    child: Column(
                      children: <Widget>[
                        Icon(Icons.arrow_upward),
                        Padding(
                          padding: const EdgeInsets.symmetric(vertical: 2.0),
                        ),
                        Text('Close'),
                      ],
                    ),
                  ),
                  TextButton(
                    style: flatButtonStyle,
                    onPressed: () {
                      // keys[index]?.currentState?.toggleExpansion();
                    },
                    child: Column(
                      children: <Widget>[
                        Icon(Icons.swap_vert),
                        Padding(
                          padding: const EdgeInsets.symmetric(vertical: 2.0),
                        ),
                        Text('Toggle'),
                      ],
                    ),
                  ),
                ],
              ),
            ],
          ),
        );
      },
      separatorBuilder: (BuildContext context, int index) =>
          const Divider(height: 2.0),
      anchor: 0.5,
    );
  }

3DRaven avatar Apr 18 '21 16:04 3DRaven