# 创建发送短信验证码服务

# 创建服务单例

# 安装get_it
dependencies:
  get_it: ^7.2.0

使用flutter pub get安装。

创建文件lib/services/user_service.dart

class UserService {
  Future sendCode(String mobile) async {
    var params = {
      'mobile': mobile,
    };
    var res = await DioHttp().get('/public/sendcode', params);
    // ...
  }
}

创建lib/setup_get_it.dart文件:

import 'package:get_it/get_it.dart';
import 'package:my_app/services/user_service.dart';

final getIt = GetIt.instance;

void setupGetIt() {
  getIt.registerLazySingleton<UserService>(() => UserService());
}

# 完善button事件与数据传递

需求:

  • 获取mobile输入框部分的内容;
  • 进行正则判断(后续)->包括,按钮状态的改变;
  • 通过则发送网络请求

找到main.dart

// 获取数据,需要创建一个TextEditingController
TextEditingController controller = TextEditingController();
TextEditingController codeController = TextEditingController();

// methods2: Padding
Padding(
  padding: const EdgeInsets.only(top: 10.0),
  child: SizedBox(
    width: 120,
    child: ElevatedButton(
      child: Text('登录'),
      onPressed: () async {
        String mobile = controller.text;
        String code = codeController.text;
        await userService.login(mobile, code);
      },
    ),
  ),
)

调试过程中,需要获取本地的IP地址——原因:模拟器中的localhost代表着它自己,所以就请求不到服务器端的接口。

调整config.dart其中的baseUrl为本地的ip地址,命令:mac通过ifconfig |grep 192,windows通过ipconfig

例如:static const String baseUrl = 'http://192.168.31.132:3000';

# 获取数据

image-20220122110701650

思考:

返回的是map类型,取用数据不太方便(嵌套数据)。