You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dart Flutter中让函数返回两个字符串值?

解决Flutter中SharedPreferences方法返回多个值的问题

Dart确实不支持直接返回多个独立参数,你可以通过以下几种方式实现需求:

方法1:使用元组(Tuple)

借助tuple包可以便捷返回多个值,步骤如下:

  1. 在pubspec.yaml中添加依赖:
dependencies:
  tuple: ^2.0.2
  1. 修改getCredentials方法:
import 'package:tuple/tuple.dart';
import 'package:shared_preferences/shared_preferences.dart';

class SharedPreference { // 类名建议遵循大驼峰命名规范
  Future<Tuple2<String?, String?>> getCredentials() async {
    final localStorage = await SharedPreferences.getInstance();
    final email = localStorage.getString('email');
    final password = localStorage.getString('password');
    return Tuple2(email, password);
  }
}

调用示例:

final prefs = SharedPreference();
final credentials = await prefs.getCredentials();
final email = credentials.item1;
final password = credentials.item2;

方法2:自定义数据类

创建专门的类封装邮箱和密码,可读性更强:

import 'package:shared_preferences/shared_preferences.dart';

// 自定义封装类
class Credentials {
  final String? email;
  final String? password;

  Credentials({this.email, this.password});
}

class SharedPreference {
  Future<Credentials> getCredentials() async {
    final localStorage = await SharedPreferences.getInstance();
    final email = localStorage.getString('email');
    final password = localStorage.getString('password');
    return Credentials(email: email, password: password);
  }

  // 修正saveCredentials的返回类型,该方法无需返回值
  Future<void> saveCredentials({
    required String email,
    required String password,
  }) async {
    final localStorage = await SharedPreferences.getInstance();
    await localStorage.setString('email', email);
    await localStorage.setString('password', password);
  }
}

调用示例:

final prefs = SharedPreference();
final credentials = await prefs.getCredentials();
final email = credentials.email;
final password = credentials.password;

方法3:返回Map

无需额外依赖或类,直接返回Map封装数据:

import 'package:shared_preferences/shared_preferences.dart';

class SharedPreference {
  Future<Map<String, String?>> getCredentials() async {
    final localStorage = await SharedPreferences.getInstance();
    return {
      'email': localStorage.getString('email'),
      'password': localStorage.getString('password'),
    };
  }
}

调用示例:

final prefs = SharedPreference();
final credentials = await prefs.getCredentials();
final email = credentials['email'];
final password = credentials['password'];

内容的提问来源于stack exchange,提问作者Mr Fin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:25:47