Flutter密码隐藏显示插件asterisk的使用

Flutter密码隐藏显示插件asterisk的使用

package:asterisk 是一个用于在 Dart 中构建通信应用的包。它提供了对 Asterisk REST 接口和事件 WebSocket 机制的高级绑定。

功能

package:asterisk 可以帮助你构建以下功能:

  • 自动语音邮件系统。
  • 基于语音的定时器。
  • 电话转盘游戏。
  • 你的专属电话会议系统。
  • 包含等待队列的客户服务系统。

一些例子已经在 examples/ 目录下实现,可以去查看它们!

然而,请注意,这个包不支持实时通话交互。你可以通过使用 Flutter WebRTC 来编写一个可以通过此包管理的 Asterisk 调用的语音功能 Flutter 应用。

开始使用

使用这个包需要运行一个 Asterisk 服务器。要与实际电话网络进行交互,你需要一个可以与该服务器通信的 VoIP 提供商。

本地测试

对于测试,你可以通过 WebRTC 模拟本地电话网络,并在浏览器中拨打电话。首先启动 Asterisk:

docker run -ti --network host ghcr.io/simolus3/asterisk_demo:latest

启动 Asterisk 后,它会打印大量错误信息,因为会加载很多我们不需要的模块。当它打印出 “Asterisk Ready.” 时,系统就准备好了。

访问 http://localhost:8088/。首次打开网站时,会显示一个设置屏幕。你需要在 “账户” 下输入一个 SIP 用户名,服务器接受 201202203204205。这些用户都使用 demo 作为密码,并且可以通过拨打其账户号码来联系他们。

接下来,运行一个示例程序来拨打电话:

dart run example/main.dart

所有示例都可以通过拨打 1 在演示服务器上访问到。

使用示例

以下是一个简单的 Asterisk 应用程序,它接收来电,播报来电者的 ID 然后挂断电话:

import 'package:asterisk/asterisk.dart';

void main() async {
  final asterisk = Asterisk(
    baseUri: Uri.parse('http://localhost:8088'),
    applicationName: 'demo',
    username: 'demoapp',
    password: 'demo',
  );
  await for (final incoming in asterisk.stasisStart) {
    _announceId(incoming.channel);
  }
}

Future<void> _announceId(LiveChannel channel) async {
  print('Has incoming call from ${channel.channel.caller}');

  await channel.answer();
  await Future.delayed(const Duration(seconds: 1));

  // 这里可以简化为直接调用 play() 方法,但这样做展示了事件处理的一些能力。
  var playback = await channel.play(sources: [MediaSource.sound('hello-world')]);
  await playback.events.where((e) => e is PlaybackFinished).first;

  playback = await channel.play(sources: [MediaSource.digits(channel.channel.caller.number)]);
  await playback.events.where((e) => e is PlaybackFinished).first;

  if (!channel.isClosed) {
    await channel.hangUp();
  }
}

更多关于Flutter密码隐藏显示插件asterisk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter密码隐藏显示插件asterisk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter应用中,如果你想要实现密码的隐藏和显示功能,可以使用password_field或类似的插件。虽然asterisk不是一个特别流行的Flutter插件名称,但通常这类功能可以通过自定义TextField来实现,或者使用现有的成熟插件如flutter_hidden_password_field。不过,为了展示目的,这里我将提供一个简单的自定义TextField示例,实现密码的隐藏和显示功能。

首先,确保你的pubspec.yaml文件中已经包含了Flutter的依赖:

dependencies:
  flutter:
    sdk: flutter

然后,你可以创建一个自定义的密码输入框组件,如下所示:

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Password Toggle Example'),
        ),
        body: Center(
          child: PasswordFieldWidget(),
        ),
      ),
    );
  }
}

class PasswordFieldWidget extends StatefulWidget {
  @override
  _PasswordFieldWidgetState createState() => _PasswordFieldWidgetState();
}

class _PasswordFieldWidgetState extends State<PasswordFieldWidget> {
  bool _obscureText = true;
  String _password = '';

  void _toggleVisibility() {
    setState(() {
      _obscureText = !_obscureText;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        TextField(
          obscureText: _obscureText,
          decoration: InputDecoration(
            labelText: 'Password',
            suffixIcon: IconButton(
              icon: Icon(
                _obscureText ? Icons.visibility_off : Icons.visibility,
              ),
              onPressed: _toggleVisibility,
            ),
          ),
          onChanged: (value) {
            setState(() {
              _password = value;
            });
          },
        ),
        SizedBox(height: 20),
        Text('Your password is: $_password'), // 仅用于演示,实际中不应显示密码
      ],
    );
  }
}

在这个示例中,我们创建了一个PasswordFieldWidget,它是一个有状态的widget,用于管理密码的隐藏和显示状态。_obscureText变量控制TextFieldobscureText属性,而_toggleVisibility方法用于切换这个状态。

TextFielddecoration属性中,我们使用了suffixIcon来添加一个IconButton,点击这个按钮时会调用_toggleVisibility方法来切换密码的可见性。

这个示例提供了一个简单而有效的方法来实现密码的隐藏和显示功能,无需依赖第三方插件。当然,如果你想要更多的功能和更好的用户体验,可以考虑使用现有的成熟插件,如flutter_hidden_password_field,它们通常提供了更多的自定义选项和更好的跨平台兼容性。

回到顶部