一些杂项

常用插件

  • logger:日志打印
  • fluttertoast:吐司弹窗
  • carousel_slider:轮播图
  • intl:时间格式化
  • image_picker:图片选择
  • flutter_screenutil:屏幕适配
  • flutter_html:渲染 HTML(需要更改配置文件(配置文件位于 android/app/build.gradleminSdkVersion 版本为 19,默认值为 flutter.minSdkVersion,同时添加配置项 multiDexEnabled 的值为 true
  • async:一个异步包,增强了 dart:async

常用操作

软键盘

  • 强制关闭软键盘:FocusScope.of(context).requestFocus(FocusNode());
  • 使用 FocusNode 管理聚焦状态
class MyPage extends StatefulWidget {
  
  _MyPageState createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> {
  final _focusNode = FocusNode();

  
  void dispose() {
    _focusNode.dispose();
    super.dispose();
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("我的页面"),
      ),
      body: TextField(
        focusNode: _focusNode,
        decoration: InputDecoration(
          hintText: "请输入文本",
        ),
      ),
    );
  }
}

使用 iconfont 图标

  • 引入字体文件
fonts:
    - family: Iconfont
      fonts:
        - asset: assets/fonts/iconfont.ttf
  • 在页面上使用
// 0x 为固定,e6cd 为图标的 unicode 码
Icon(
    IconData(0xe6cd, fontFamily: 'Iconfont'),
    size: 20.0,
    color: Colors.pink,
)

退出程序

import 'package:flutter/services.dart';
SystemNavigator.pop(); // 仅适用于 Android 和 iOS 平台

计时器

需要用到 Timer.periodic() 方法

import 'dart:async';

class BodyWidget extends StatefulWidget {
  const BodyWidget({super.key});

  
  State<BodyWidget> createState() => _BodyWidgetState();
}

class _BodyWidgetState extends State<BodyWidget> {
  int _counter = 10;
  dynamic _timer;
  var _codeText = '获取验证码';

  void _stopTimer() {
    if (_timer != null) {
      _timer.cancel();
      setState(() {
        _counter = 0;
        _timer = null;
        _codeText = '获取验证码';
      });
    }
  }

  void _startTimer() {
    if (_timer != null) {
      return;
    }
    _timer = Timer.periodic(const Duration(seconds: 1), (timer) {
      setState(() {
        _counter -= 1;
        _codeText = '$_counter秒后重发';
      });
      if (_counter < 1) {
        _stopTimer();
      }
    });
  }

  
  void dispose() {
    if (_timer != null) {
      _timer.cancel();
    }
    super.dispose();
  }

  
  Widget build(BuildContext context) {
    return TextButton(
        onPressed: () {
            _startTimer();
        },
        child: Text(_codeText),
    );
  }
}
Last Updated:
Contributors: af