A beautifully designed Flutter VPN application with an elegant UI, smooth animations, and multiple free server locations. The app features a modern design, real-time network statistics, and comprehensive VPN functionality.
- Flutter (UI Framework)
- GetX (State Management)
- Hive (Local Storage)
- Custom Animations
- Material Design
- VPN Engine Integration
- ✅ Multiple Server Locations: Free servers across various countries
- ✅ Real-time Network Stats: Monitor your connection details
- ✅ Dark/Light Theme: Customizable app appearance
- ✅ Network Testing: Check connection speed and details
- ✅ Location Selection: Choose from various VPN servers
- ✅ Connection Timer: Track connection duration
- ✅ Modern UI: Elegant and responsive interface
- ✅ Onboarding Screens: Smooth introduction to the app
![]() Home Screen (Light) |
![]() Home Screen (Dark) |
![]() VPN Locations |
![]() Network Info (Light) |
![]() Network Info (Dark) |
![]() Status Updates |
![]() Splash Screen |
![]() Walkthrough 1 |
![]() Walkthrough 2 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
lib/
├── apis/
│ └── apis.dart
├── controllers/
│ ├── home_controller.dart
│ └── location_controller.dart
├── core/
│ └── vpn_engine.dart
├── helpers/
│ ├── pref.dart
│ └── my_dialogs.dart
├── models/
│ ├── ip_details.dart
│ ├── network_data.dart
│ └── vpn.dart
├── screens/
│ ├── home_screen.dart
│ ├── location_screen.dart
│ ├── network_test_screen.dart
│ ├── splash_screen.dart
│ └── walkthrough_screen.dart
├── widgets/
│ ├── count_down_timer.dart
│ ├── network_card.dart
│ └── vpn_card.dart
└── main.dart
You can download the latest version of the app from: APK/app-armeabi-v7a-release.apk
Developed by Jam Ali Hassan
Connect or Disconnect vpn with single line of code!
...
_vpnStage = AliVpn.vpnDisconnected;
_selectedVpn = VpnConfig(
config: "OVPN CONFIG IS HERE",
name: "Japan",
username: "VPN Username",
password:"VPN Password"
);
...
...
if (_selectedVpn == null) return; //Stop right here if user not select a vpn
if (_vpnStage == AliVpn.vpnDisconnected) {
//Start if stage is disconnected
AliVpn.startVpn(_selectedVpn);
} else {
//Stop if stage is "not" disconnected
AliVpn.stopVpn();
}
...
Don't forget to listen your vpn stage and status, you can simply show them with this.
...
//Add listener to update vpnStage
AliVpn.vpnStageSnapshot().listen((event) {
setState(() {
_vpnStage = event; //Look at stages detail below
});
});
...
...
//Add listener to update vpnStatus
AliVpn.vpnStatusSnapshot().listen((event){
setState((){
_vpnStatus = event;
});
})
...
Let me be clearer, VPN Stage shows the connection indicator when connecting the VPN
static const String vpnConnected = "connected";
static const String vpnDisconnected = "disconnected";
static const String vpnWaitConnection = "wait_connection";
static const String vpnAuthenticating = "authenticating";
static const String vpnReconnect = "reconnect";
static const String vpnNoConnection = "no_connection";
static const String vpnConnecting = "connecting";
static const String vpnPrepare = "prepare";
static const String vpnDenied = "denied";
Note : To change notification's icon, you can go to vpnLib/main/res/drawable
and replace ic_notification.png from there!