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

如何将Flutter项目main.dart的number变量传递到Node.js后端app.js中使用

实现步骤

第一步:修改Node.js后端(app.js),新增HTTP接口接收号码参数

原来的app.js是单次执行的脚本,需要改成可接收前端请求的服务:

  • 先安装所需依赖:npm install express cors
  • 修改后的app.js代码如下:
const express = require('express');
const cors = require('cors');
const accountSid = '***';
const authToken = '***';
const client = require('twilio')(accountSid, authToken);

const app = express();
const port = 3000;

// 解析JSON格式的请求参数
app.use(express.json());
// 允许跨域请求,调试阶段可开启,线上按需配置
app.use(cors());

// 对外提供的拨号接口
app.post('/make-call', async (req, res) => {
  const { toNumber } = req.body;
  if (!toNumber) {
    return res.status(400).json({ error: '缺少拨打号码参数' });
  }
  try {
    const call = await client.calls.create({
      url: 'http://demo.twilio.com/docs/voice.xml',
      to: toNumber, // 直接使用前端传入的号码
      from: '+1000000', // 替换为你自己的Twilio平台号码
    });
    res.json({ success: true, callSid: call.sid });
  } catch (err) {
    console.log('呼叫错误:', err);
    res.status(500).json({ error: err.message });
  }
});

app.listen(port, () => {
  console.log(`后端服务已启动,访问地址:http://localhost:${port}`);
});

第二步:修改Flutter前端(main.dart),向后端发送拨号号码

  • 先在项目根目录的pubspec.yaml中添加网络请求依赖:
dependencies:
  flutter:
    sdk: flutter
  http: ^1.1.0
  flutter_dialpad: ^最新版本
  • 修改后的main.dart代码如下:
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:flutter_dialpad/flutter_dialpad.dart';

// 如果是开发移动端APP,可删除原来的dart:js相关导入,仅web端需要

void main() => runApp(const MyApp());

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

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        backgroundColor: Colors.black,
        body: SafeArea(
            child:
            DialPad(
                enableDtmf: true,
                outputMask: "(000) 000-0000",
                backspaceButtonIconColor: Colors.red,
                makeCall: (number) async {
                  // 先处理拨号盘返回的掩码格式,去除括号、空格、横杠
                  String processedNumber = number.replaceAll(RegExp(r'[()\s-]'), '');
                  // 按Twilio要求转成E.164格式,补充对应国家码,比如中国号码加+86
                  String e164Number = '+86$processedNumber';
                  // 替换为你后端服务的实际地址,真机调试需填后端设备的局域网IP
                  final apiUrl = Uri.parse('http://你的后端IP:3000/make-call');
                  try {
                    final response = await http.post(
                      apiUrl,
                      headers: {'Content-Type': 'application/json'},
                      body: jsonEncode({'toNumber': e164Number}),
                    );
                    if (response.statusCode == 200) {
                      print('呼叫发起成功:${response.body}');
                    } else {
                      print('呼叫失败:${response.body}');
                    }
                  } catch (e) {
                    print('请求异常:$e');
                  }
                }
            )
        ),
      ),
    );
  }
}

注意事项

  • Twilio试用账号需要先在后台把要拨打的目标号码加入验证列表,否则会触发呼叫失败
  • 前端和后端需要在同一网络环境下调试,避免跨域或网络不通问题
  • 线上部署时需要配置HTTPS证书,同时限制接口调用权限,避免被恶意刷取呼叫接口

内容的提问来源于stack exchange,提问作者4PS18CS033 Fathima Zia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:36:07