如何在Dart Flutter中让函数返回两个字符串值?
Dart确实不支持直接返回多个独立参数,你可以通过以下几种方式实现需求:
方法1:使用元组(Tuple)
借助tuple包可以便捷返回多个值,步骤如下:
- 在
pubspec.yaml中添加依赖:
dependencies: tuple: ^2.0.2
- 修改
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
相关产品推荐
相关产品推荐

