在 Flutter 中使用 onDetailsPressed 的範例

在 Flutter 中, `onDetailsPressed`  最常用於  `ExpansionPanelList`  Widget 中。 `ExpansionPanelList`  是一個可以擴展和收縮的 Widget,當用戶點擊時可以顯示或隱藏詳細資訊。

以下範例演示如何在  `ExpansionPanelList`  中使用  `onDetailsPressed` :

import 'package:flutter/material.dart';

 void main() => runApp(MyApp());

 class MyApp extends StatelessWidget {

  @override

  Widget build(BuildContext context) {

    return MaterialApp(

      title: 'ExpansionPanelList Demo',

      home: MyHomePage(),

    );

  }

}

 class MyHomePage extends StatefulWidget {

  @override

  _MyHomePageState createState() => _MyHomePageState();

}

 class _MyHomePageState extends State<MyHomePage> {

  List<Item> _data = generateItems(8);

   @override

  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(

        title: Text('ExpansionPanelList Demo'),

      ),

      body: SingleChildScrollView(

        child: Container(

          child: _buildPanel(),

        ),

      ),

    );

  }

   Widget _buildPanel() {

    return ExpansionPanelList(

      expansionCallback: (int index, bool isExpanded) {

        setState(() {

          _data[index].isExpanded = !isExpanded;

        });

      },

      children: _data.map<ExpansionPanel>((Item item) {

        return ExpansionPanel(

          headerBuilder: (BuildContext context, bool isExpanded) {

            return ListTile(

              title: Text('Item ${item.headerValue}'),

            );

          },

          body: ListTile(

              title: Text('Details ${item.expandedValue}'),

              subtitle: Text('Subtitle ${item.expandedValue}'),

              trailing: Text('Trailing ${item.expandedValue}'),

              onTap: () {

                print('onDetailsPressed ${item.expandedValue}');

              }),

          isExpanded: item.isExpanded,

        );

      }).toList(),

    );

  }

}

 class Item {

  Item({

    required this.expandedValue,

    required this.headerValue,

    required this.isExpanded,

  });

   String expandedValue;

  String headerValue;

  bool isExpanded;

}

 List<Item> generateItems(int numberOfItems) {

  return List.generate(numberOfItems, (int index) {

    return Item(

      headerValue: 'Header $index',

      expandedValue: 'This is item number $index',

      isExpanded: false,

    );

  });

}

在上面的範例中,當用戶點擊面板的詳細資訊時,將會印出  `onDetailsPressed`  以及展開的項目資訊。



留言

這個網誌中的熱門文章

flutter 使用 ToastDialog 範例

[flutter]flutter如何防止GPS偽定位

ScaffoldMessenger 範例