Flutter国家旗帜展示插件country_flags_flutter的使用

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

Flutter国家旗帜展示插件country_flags_flutter的使用

国家旗帜展示插件country_flags_flutter

项目概述

(Fork from flag as it was not maintained anymore)

Pub Version Bless

这是一个用于Android / iOS / Web的国家旗帜Flutter插件。基于flutter_svg

截图

SVG源文件

所有旗帜来自https://github.com/lipis/flag-icons/releases/tag/v4.1.4

感谢伟大的项目flag-icons

旗帜列表

ISO 3166-1-alpha-2 Flags

注意:

组织:

  • eu 欧洲联盟。

争议领土:

  • hk 香港。中国特别行政区。
  • mo 澳门。中国特别行政区。
  • eh 西撒哈拉。摩洛哥声称拥有主权。
  • tw 台湾。中国声称拥有主权。

未争议的非联合国成员国领土:

  • va 梵蒂冈城。由圣座管理。

如何使用

Flag.fromCode(FlagsCode.COUNTRY_CODE, height: HEIGHT, width: WIDTH),
Flag.fromString(COUNTRY_CODE, height: HEIGHT, width: WIDTH),
Flags.fromCode([FlagsCode.GB, FlagsCode.US], height: 100, width: 100 * 4 / 3),

例如:

Flag.fromCode(FlagsCode.AD, height: 100, width: null)
Flag.fromString('AD', height: null, width: null)
Flag.fromString('AD', height: 10, width: 100, fit: BoxFit.fill)

完整示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用country_flags_flutter插件来展示国家旗帜。

import 'package:example/restart_widget.dart';
import 'package:country_flags_flutter/flag.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

void main() => runApp(RestartWidget(child: MyApp()));

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

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  bool? displayFlagPicker;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: SafeArea(
        child: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            children: <Widget>[
              Flag.fromCode(
                FlagsCode.KI,
                height: 100,
              ),
              Flag.fromCode(
                FlagsCode.AD,
                height: 10,
                width: 100,
                fit: BoxFit.fill,
              ),
              Flag.fromCode(
                FlagsCode.AD,
                height: 50,
                width: 50,
                fit: BoxFit.fill,
                flagSize: FlagSize.size_1x1,
                borderRadius: 25,
              ),
              Flags.fromCode(
                [
                  FlagsCode.GB,
                  FlagsCode.US,
                ],
                height: 100,
                width: 100 * 4 / 3,
              ),
              Flag.fromString(
                'ACC',
                height: 10,
                width: 100,
                fit: BoxFit.fill,
                replacement: Text('ACC not found'),
              ),
              if (Flag.flagsCode.contains('AF'.toLowerCase()))
                Flag.fromString(
                  'af',
                  height: 10,
                  width: 100,
                  fit: BoxFit.fill,
                ),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                children: [
                  ElevatedButton(
                    onPressed: displayFlagPicker == null
                        ? () => setState(() {
                              displayFlagPicker = false;
                            })
                        : null,
                    child: Text('no preCache'),
                  ),
                  ElevatedButton(
                    onPressed: displayFlagPicker == null
                        ? () => setState(() {
                              displayFlagPicker = true;
                            })
                        : null,
                    child: Text('preCache'),
                  ),
                  ElevatedButton(
                    onPressed: () => RestartWidget.restartApp(context),
                    child: Text('restart'),
                  ),
                ],
              ),
              if (displayFlagPicker != null)
                FlagPicker(
                  width: 50,
                  height: 300,
                  preCache: displayFlagPicker!,
                ),
            ],
          ),
        ),
      ),
    );
  }
}

class FlagPicker extends StatefulWidget {
  const FlagPicker({Key? key, this.width, this.height, this.preCache = false})
      : super(key: key);

  final double? width;
  final double? height;
  final bool preCache;

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

class _FlagPicker extends State<FlagPicker> {
  late FixedExtentScrollController _controller;
  late int _currentIndex;

  [@override](/user/override)
  void initState() {
    super.initState();
    _currentIndex = 0;
    _controller = FixedExtentScrollController(
      initialItem: _currentIndex,
    );
  }

  [@override](/user/override)
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      height: widget.height,
      width: widget.width,
      child: CupertinoPicker.builder(
        scrollController: _controller,
        offAxisFraction: 0.0,
        itemExtent: 40,
        childCount: Flag.flagsCode.length,
        useMagnifier: true,
        magnification: 1.0,
        diameterRatio: 0.8,
        onSelectedItemChanged: (value) {
          setState(() {
            print(value);
          });
        },
        itemBuilder: (context, index) => Center(
          child: Flag.fromString(
            Flag.flagsCode[index],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter国家旗帜展示插件country_flags_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter国家旗帜展示插件country_flags_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用country_flags_flutter插件来展示国家旗帜的示例代码。这个插件提供了一个简单的方法来展示各国的国旗。

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

dependencies:
  flutter:
    sdk: flutter
  country_flags_flutter: ^0.20.0  # 请检查最新版本号

然后,运行flutter pub get来获取依赖。

接下来,你可以在你的Flutter应用中使用这个插件。以下是一个简单的示例,展示如何在列表中显示一些国家的国旗:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Country Flags Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: FlagListScreen(),
    );
  }
}

class FlagListScreen extends StatelessWidget {
  // 一个包含国家代码(ISO 3166-1 alpha-2 code)的列表
  final List<String> countryCodes = [
    'US', // 美国
    'CN', // 中国
    'IN', // 印度
    'BR', // 巴西
    'DE', // 德国
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Country Flags Demo'),
      ),
      body: ListView.builder(
        itemCount: countryCodes.length,
        itemBuilder: (context, index) {
          final String countryCode = countryCodes[index];
          return ListTile(
            leading: CountryFlag(countryCode), // 使用CountryFlag小部件显示国旗
            title: Text(countryCode),
          );
        },
      ),
    );
  }
}

在这个示例中:

  1. 我们首先在pubspec.yaml中添加了country_flags_flutter依赖。
  2. MyApp类中,我们定义了应用的主题和主页。
  3. FlagListScreen类包含一个国家代码的列表,并使用ListView.builder来动态生成列表项。
  4. 对于每个列表项,我们使用CountryFlag小部件来显示相应的国旗,并将国家代码作为参数传递给CountryFlag

运行这个应用后,你将看到一个包含美国、中国、印度、巴西和德国国旗的列表。

确保你根据项目的需求调整国家代码列表和其他UI元素。这个插件非常灵活,可以很容易地集成到各种Flutter应用中。

回到顶部