flutter dart 函数语法

以下是 Dart 语言中函数语法的 详细实例说明,涵盖了所有常用写法

  • 基本语法
  • 参数类型(必选、可选、命名、默认值)
  • 匿名函数、箭头函数
  • 高阶函数(函数作为参数/返回值)
  • 异步函数(async / await)

1. 函数的基本语法

复制代码
int add(int a, int b) {
  return a + b;
}

void main() {
  print(add(2, 3)); // 输出:5
}
  • int:返回类型
  • add:函数名
  • (int a, int b):参数
  • return:返回结果

可选参数(位置和命名)

  • 位置可选参数(使用 [])

    String greet(String name, [String? title]) {
    return title == null ? 'Hello name' : 'Hello title $name';
    }

    void main() {
    print(greet('Tom')); // Hello Tom
    print(greet('Tom', 'Dr.')); // Hello Dr. Tom
    }

  • 命名可选参数(使用 {})

    String greet2({required String name, String title = 'Mr.'}) {
    return 'Hello title name';
    }

    void main() {
    print(greet2(name: 'Jerry')); // Hello Mr. Jerry
    print(greet2(name: 'Jerry', title: 'Dr.')); // Hello Dr. Jerry
    }

  • 默认参数值

    int multiply(int a, [int b = 2]) {
    return a * b;
    }

    void main() {
    print(multiply(4)); // 8
    print(multiply(4, 3)); // 12
    }

  • 箭头函数(简写)

    int square(int x) => x * x;

    void main() {
    print(square(5)); // 25
    }

  • 只能用于单表达式函数

  • 自动推断 return

  • 5匿名函数(无名字的函数)

    void main() {
    var list = ['apple', 'banana', 'cherry'];

    复制代码
    list.forEach((item) {
      print('Fruit: $item');
    });

    }

  • 函数作为参数(高阶函数)

    void printResult(int a, int b, int Function(int, int) operation) {
    print('结果:${operation(a, b)}');
    }

    void main() {
    printResult(10, 5, (a, b) => a + b); // 结果:15
    printResult(10, 5, (a, b) => a - b); // 结果:5
    }

  • 函数作为返回值(闭包)

    Function createMultiplier(int factor) {
    return (int value) => value * factor;
    }

    void main() {
    var triple = createMultiplier(3);
    print(triple(4)); // 12
    }

  • 异步函数(async / await)

    Future<String> fetchData() async {
    await Future.delayed(Duration(seconds: 2));
    return '数据加载完毕';
    }

    void main() async {
    print('开始加载');
    String data = await fetchData();
    print(data); // 数据加载完毕
    }

  • 类型推断函数(无返回类型)

复制代码
sayHi(name) {
  print('Hi, $name!');
}
类型 写法示例
普通函数 int sum(int a, int b) {...}
箭头函数 int square(int x) => x * x;
匿名函数 () => print('hi')
高阶函数 (int a, int b, Function op)
默认参数 add(int a, [int b = 2])
命名参数 greet({String name})
异步函数 Future<String> getData() async {...}

示例

复制代码
import 'package:flutter/material.dart';

class GreetingPage extends StatefulWidget {
  @override
  _GreetingPageState createState() => _GreetingPageState();
}

class _GreetingPageState extends State<GreetingPage> {
  final TextEditingController _nameController = TextEditingController();
  String _greeting = '';
  bool _isLoading = false;

  // 普通函数:生成问候语
  String _generateGreeting(String name) {
    return '你好,$name,欢迎来到 Flutter 世界!';
  }

  // 异步函数:模拟加载过程(网络请求)
  Future<void> _handleGreeting() async {
    String name = _nameController.text.trim();

    if (name.isEmpty) {
      _showSnackBar('请输入你的名字');
      return;
    }

    setState(() => _isLoading = true);

    // 模拟网络延迟
    await Future.delayed(Duration(seconds: 2));

    setState(() {
      _greeting = _generateGreeting(name); // 调用普通函数
      _isLoading = false;
    });
  }

  // 箭头函数:显示提示
  void _showSnackBar(String msg) =>
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(msg)));

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('问候示例')),
      body: Padding(
        padding: const EdgeInsets.all(20.0),
        child: Column(
          children: [
            TextField(
              controller: _nameController,
              decoration: InputDecoration(labelText: '请输入你的名字'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _isLoading ? null : _handleGreeting,
              child: _isLoading
                  ? CircularProgressIndicator(color: Colors.white)
                  : Text('点击问候'),
            ),
            SizedBox(height: 30),
            if (_greeting.isNotEmpty)
              Text(
                _greeting,
                style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
              ),
          ],
        ),
      ),
    );
  }
}
类型 函数名 / 用法 说明
普通函数 _generateGreeting() 返回问候字符串
异步函数 _handleGreeting() 模拟网络请求、更新状态
箭头函数 _showSnackBar() 简化写法:()=>
回调函数 onPressed: _handleGreeting 按钮点击绑定函数

函数返回一个对象(基础写法)

  • 假设有一个类 User:

    class User {
    String name;
    int age;

    复制代码
    User({required this.name, required this.age});
    
    @override
    String toString() => 'User(name: $name, age: $age)';

    }

  • 函数返回 User 对象:

    User createUser(String name, int age) {
    return User(name: name, age: age);
    }

  • 调用:

    void main() {
    User user = createUser('Alice', 30);
    print(user); // 输出:User(name: Alice, age: 30)
    }

✅ 二、函数返回一个对象列表(List)

复制代码
List<User> getUsers() {
  return [
    User(name: 'Tom', age: 25),
    User(name: 'Jerry', age: 28),
  ];
}

void main() {
  var users = getUsers();
  for (var user in users) {
    print(user);
  }
}

✅ 三、箭头函数返回对象(简洁写法)

复制代码
User getAdmin() => User(name: 'Admin', age: 99);

✅ 四、异步函数返回对象(Future)

复制代码
Future<User> fetchUser() async {
  await Future.delayed(Duration(seconds: 1)); // 模拟延迟
  return User(name: 'RemoteUser', age: 22);
}

void main() async {
  User user = await fetchUser();
  print(user); // 输出:User(name: RemoteUser, age: 22)
}

✅ 五、工厂函数(工厂构造返回对象)

复制代码
class Product {
  final String name;
  final double price;

  Product(this.name, this.price);

  // 工厂函数:从 JSON 创建对象
  factory Product.fromJson(Map<String, dynamic> json) {
    return Product(json['name'], json['price']);
  }
}

Product getProductFromJson() {
  Map<String, dynamic> json = {'name': 'iPhone', 'price': 999.0};
  return Product.fromJson(json);
}

:函数返回对象的写法

返回类型 示例代码
返回单个对象 User getUser() { return User(...); }
返回对象列表 List<User> getUsers() { ... }
箭头返回对象 User getUser() => User(...);
异步返回对象 Future<User> fetchUser() async { ... }
工厂函数生成对象 Product.fromJson({...})
相关推荐
唔666 小时前
网络图片的缓存和压缩
flutter
初遇你时动了情9 小时前
flutter getx路由管理、状态管理、路由守卫中间件、永久储存get_storage
flutter·中间件
爱吃鱼的锅包肉1 天前
记录一下flutter项目自己封窗的弹窗
前端·javascript·flutter
Frank学习路上1 天前
【Flutter】创建BMI计算器应用并添加依赖和打包
前端·javascript·flutter
kirk_wang1 天前
鸿蒙版Flutter库torch_light手电筒功能深度适配
flutter·华为·harmonyos
初遇你时动了情1 天前
flutter长列表 ListView、GridView、SingleChildScrollView、CustomScrollView区别
前端·javascript·flutter
WDeLiang3 天前
Flutter - 集成三方库:数据库(sqflite)
数据库·flutter·dart
程序猿阿伟4 天前
《社交应用动态表情:RN与Flutter实战解码》
javascript·flutter·react native
明似水4 天前
Flutter 开发入门:从一个简单的计数器应用开始
前端·javascript·flutter