Flutter下拉菜单插件flutter_dropdown的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter下拉菜单插件flutter_dropdown的使用

flutter_dropdown 是一个简化了Flutter框架中复杂下拉按钮操作的插件。本文将介绍如何使用这个插件,并提供完整的示例代码。

简单使用示例

以下是一个简单的下拉菜单实现,展示了如何设置基本的下拉选项和回调函数:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Dropdown Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Dropdown Example'),
        ),
        body: Center(
          child: DropDown(
            items: ["Male", "Female", "Other"],
            hint: Text("Select Gender"),
            icon: Icon(Icons.expand_more, color: Colors.blue),
            onChanged: (value) {
              print(value);
            },
          ),
        ),
      ),
    );
  }
}

自定义下拉项

你也可以为每个下拉选项创建自定义的小部件,比如添加图片或图标:

DropDown<String>(
  items: <String>["Male", "Female", "Other"],
  icon: Icon(Icons.expand_more, color: Colors.blue),
  customWidgets: <Widget>[
    Row(
      children: <Widget>[
        Text("Male"),
        CircleAvatar(
          backgroundImage: NetworkImage("https://example.com/male.jpg"),
        ),
      ],
    ),
    Row(
      children: <Widget>[
        Text("Female"),
        CircleAvatar(
          backgroundImage: NetworkImage("https://example.com/female.jpg"),
        ),
      ],
    ),
    Row(
      children: <Widget>[
        Text("Other"),
        CircleAvatar(
          backgroundImage: NetworkImage("https://example.com/other.jpg"),
        ),
      ],
    )
  ],
  hint: Text("Select Gender"),
  onChanged: (value) {
    print(value);
  },
)

完整示例

下面是一个更复杂的例子,演示了如何与对象一起使用下拉菜单,并根据选择更新UI。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Dropdown Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Dropdown Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<Person> persons = [
    Person(gender: "Male", url: "https://example.com/male.jpg"),
    Person(gender: "Female", url: "https://example.com/female.jpg"),
    Person(gender: "Other", url: "https://example.com/other.jpg"),
  ];

  Person selectedPerson;

  [@override](/user/override)
  void initState() {
    selectedPerson = persons.first;
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text("Selected person's gender is: ${selectedPerson?.gender ?? "None"}"),
            SizedBox(height: 20),
            DropDown<Person>(
              items: persons,
              initialValue: persons.first,
              hint: Text("Select Gender"),
              onChanged: (Person p) {
                setState(() {
                  selectedPerson = p;
                });
              },
              customWidgets: persons.map((p) => buildDropDownRow(p)).toList(),
              isExpanded: true,
            ),
          ],
        ),
      ),
    );
  }

  Row buildDropDownRow(Person person) {
    return Row(
      children: <Widget>[
        Expanded(child: Text(person?.gender ?? "Select")),
        CircleAvatar(
          backgroundImage: NetworkImage(person.url),
        ),
      ],
    );
  }
}

class Person {
  final String gender;
  final String url;

  Person({this.gender, this.url});
}

更多关于Flutter下拉菜单插件flutter_dropdown的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter下拉菜单插件flutter_dropdown的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter中使用flutter_dropdown_menu插件来实现下拉菜单功能的代码示例。需要注意的是,flutter_dropdown_menu并不是Flutter官方提供的插件,而是一个第三方库。如果你指的是官方的下拉菜单功能,通常我们会使用DropdownButton。不过,为了符合你的要求,这里假设你确实想使用flutter_dropdown_menu插件。

首先,确保你的pubspec.yaml文件中已经添加了flutter_dropdown_menu依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_dropdown_menu: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

以下是一个使用flutter_dropdown_menu插件的简单示例:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Dropdown Menu Example'),
        ),
        body: Center(
          child: DropdownMenuExample(),
        ),
      ),
    );
  }
}

class DropdownMenuExample extends StatefulWidget {
  @override
  _DropdownMenuExampleState createState() => _DropdownMenuExampleState();
}

class _DropdownMenuExampleState extends State<DropdownMenuExample> {
  String selectedValue = 'Option 1';

  @override
  Widget build(BuildContext context) {
    return DropdownMenu(
      data: ['Option 1', 'Option 2', 'Option 3'],
      onValueChanged: (value) {
        setState(() {
          selectedValue = value;
        });
      },
      hint: Text('Select an option'),
      value: selectedValue,
      dropdownDecoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(8),
        boxShadow: [
          BoxShadow(
            color: Colors.grey.withOpacity(0.5),
            spreadRadius: 5,
            blurRadius: 7,
            offset: Offset(0, 3), // changes position of shadow
          ),
        ],
      ),
      dropdownMenuItemBuilder: (context, item) {
        return Container(
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(8),
          ),
          child: Center(
            child: Text(item),
          ),
        );
      },
    );
  }
}

注意:上述代码是一个假设性的示例,因为flutter_dropdown_menu插件的实际API可能与上述代码不完全匹配。如果你使用的是这个插件,请参考其官方文档以获取正确的API使用方式。

实际上,Flutter官方更推荐使用DropdownButton来实现下拉菜单功能。以下是一个使用DropdownButton的示例:

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('DropdownButton Example'),
        ),
        body: Center(
          child: DropdownButtonExample(),
        ),
      ),
    );
  }
}

class DropdownButtonExample extends StatefulWidget {
  @override
  _DropdownButtonExampleState createState() => _DropdownButtonExampleState();
}

class _DropdownButtonExampleState extends State<DropdownButtonExample> {
  String? selectedValue;

  @override
  Widget build(BuildContext context) {
    return DropdownButton<String>(
      value: selectedValue,
      hint: Text('Select an option'),
      onChanged: (newValue) {
        setState(() {
          selectedValue = newValue;
        });
      },
      items: <String>['Option 1', 'Option 2', 'Option 3']
          .map<DropdownMenuItem<String>>((String value) {
        return DropdownMenuItem<String>(
          value: value,
          child: Text(value),
        );
      }).toList(),
    );
  }
}

这个示例使用了Flutter官方的DropdownButton组件,并且是一个更为常见和推荐的做法。希望这些代码示例能帮助你理解如何在Flutter中实现下拉菜单功能。

回到顶部