Love Iwara (also known as i_iwara or 2i) is a third-party mobile application for Iwara built with Flutter. Our goal is to provide users with an excellent experience, supporting multiple platforms and devices including mobile phones, tablets and computers, compatible with Android, Windows, macOS, Linux, and iOS operating systems.
As a Flutter beginner, this is my first attempt at developing a cross-platform application. While there may be areas in the project that need improvement and code that could be optimized, the main purpose is to learn and understand Flutter development through hands-on practice.
-
Learning Objectives
- Familiarize with Flutter development basics
- Understand cross-platform application development processes
- Document insights and experiences during the learning process
-
Project Status
- Currently in the learning and exploration phase
- Code may not be sufficiently standardized and complete
- Feature implementation primarily focuses on learning purposes
-
Usage Notes
- This project is for learning reference only
- Not recommended for production environment
- Welcome discussions with other learners
-
Usage Restrictions
- Strictly prohibited from promotion on any platform
- Violations will result in measures including but not limited to maintenance suspension and repository deletion
-
Known Issues
- Due to limited experience, the project may have room for performance optimization
- Some features may not be fully developed
- On Android, Impeller rendering has been disabled due to severe performance issues. This might pose a hidden risk for future updates, and the root cause is currently unknown. To re-enable Impeller, you can add
<meta-data android:name="flutter.embedding.android.EnableImpeller" android:value="true" />within the<application>tag inandroid/app/src/main/AndroidManifest.xml. If you have insights or solutions, please feel free to submit a PR, open an Issues, or discuss it in the Communication Group. - Suggestions for improvement are welcome
Thank you for your understanding and support! If you're also a Flutter beginner, I hope we can progress together in our learning journey.
-
🖥️ Supported Platforms
- 📱 Android
- 🪟 Windows
- 🍎 MacOS
- 🐧 Linux (Due to lack of Linux device, testing unavailable)
- 📱 iOS (Due to lack of iOS device, testing unavailable)
-
🔍 Search
- Search videos/galleries/posts/users/forums
-
📜 History
- Browsing history: videos/galleries/posts/forums
-
📜 Local Favorite
- Favorite folder
- Local favorite
-
🔍 Download (Test Version)
- Download videos/galleries/single files
-
🔄 Translation
- Translate video descriptions/gallery descriptions/posts/comments/forums/conversations, etc.
-
🎥 Video
- Video playback
- Video tags
- Video quality selection
- Playback speed control
- Fullscreen support
- Desktop support for drag-and-drop video files to play directly
-
🖼️ Gallery
- Image browsing
- Image zoom and pan
- Gallery view
-
📝 Posts
- Browse/comment
-
🗣️ Forum System
- Publish/edit posts
- Publish/edit replies
-
📜 Comments
- Comment browsing
- Comment reply
-
📜 Local Favorite
- Favorite folder
- Local favorite
-
📩 Private Messages
- Private message browsing
- Private message reply
-
🔔 In-app Message Notifications
- Message notification browsing
- Message notification reply
-
👤 User System
- User authentication
- Profile management
- Following system
-
🔗 Share
- Share video/gallery/post/thread/user
- Android app jump (Only Android, other apps will jump to the app to continue browsing when trying to open the link)
-
🌍 Multi-language Support
- English
- Simplified Chinese
- Traditional Chinese
- Japanese
-
🔍 More features to be discovered
- Temporary no new features planned, you can submit your ideas in the Issues or Communication Group
- Enhanced User Experience
- Others
Join our community on Telegram: Click here to join the communication group.
- Flutter SDK (Latest stable version recommended)
- Dart SDK
- Git
- Recommended IDEs:
- Android Studio / Cursor
- VS Code / Cursor + Flutter plugin
- Check the pubspec.yaml for more dependencies. Some of them needs to run some magic commonds to prepare your environment.
Windows Development Environment:
- Windows 10 or higher (64-bit)
- Visual Studio 2022 or newer
- Windows 10 SDK
# Check Windows development environment
flutter doctor -vmacOS Development Environment:
- macOS (latest version recommended)
- Xcode (latest version)
- CocoaPods
# Install CocoaPods
sudo gem install cocoapodsLinux Development Environment:
# Ubuntu/Debian
sudo apt-get install clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev
# Fedora
sudo dnf install clang cmake ninja-build gtk3-develAndroid Development Environment:
- Android Studio
- Android SDK
- Android emulator or physical device
iOS Development Environment:
- Xcode
- iOS simulator or physical device
- Apple Developer account (required for publishing)
# 1. Clone repository
git clone [repository address]
cd [project directory]
# 2. Check Flutter environment
flutter doctor
# 3. Get dependencies
flutter pub get
# 4. Start development
# Run on default device
flutter run
# Run on specific platform
flutter run -d windows # Windows
flutter run -d macos # macOS
flutter run -d linux # Linux
flutter run -d android # Android
flutter run -d ios # iOS
# 5. Build release version
# Android
flutter build apk --release
flutter build appbundle --release
# iOS
flutter build ios --release
# Windows
flutter build windows --release
# macOS
flutter build macos --release
# Linux
flutter build linux --release
# Generate internationalization text
dart run slang
# Clean build cache
flutter clean
# Update Flutter SDK
flutter upgrade
# Analyze code
flutter analyze
# Run tests
flutter test
# View connected devices
flutter devices
# Create new page/component
flutter create component_name- Ensure proper configuration of development environments for each platform
- iOS development requires macOS system
- Regularly update Flutter SDK and dependencies
- Use
.gitignoreto exclude unnecessary files - Follow Flutter official best practices guide
# Dependency conflict resolution
flutter pub cache repair
flutter clean
flutter pub get
# Emulator issues
flutter emulators
flutter emulators --launch <emulator_id>
# Development tool reset
flutter config --clear-featuresThese settings cover the main aspects of Flutter cross-platform development. Depending on specific project requirements, additional configuration or tools may be needed. It's recommended to regularly check Flutter official documentation for the latest development guides and best practices.
Currently, the project's internationalization text is mainly generated by GPT. If you're willing to help improve translations, please refer to the Simplified Chinese template file: lib/i18n/zh-CN.i18n.yaml.
If you have any suggestions or find any bugs, feel free to submit feedback in the project's issues section.
The development of this project was inspired by the following excellent projects. Many implementation methods and best practices were learned from these repositories.
|
iwrqk/iwrqk Excellent Flutter-implemented Iwara client |
wgh136/PicaComic Well-structured Flutter comic application |
Thanks to all the developers who have contributed to this project!
Made with contrib.rocks
Pull requests are welcome! For major changes, please open an issue first to discuss what you would like to change.
Before reporting a new issue, take a look at the already opened issues; if you have any questions, join our Telegram group.
The developer(s) of this application does not have any affiliation with Iwara or its content providers, and this application hosts zero content.
Before building the Android version, you need to configure the correct signing information to generate the official release APK. Please follow these steps:
-
Generate keystore file
Open terminal in the project's
android/appdirectory and execute the following command (please replace<your_key_alias>and other parameters with your own information):keytool -genkeypair -v -keystore keystore.jks -alias <your_key_alias> -keyalg RSA -keysize 2048 -validity 10000
This command will generate a file named
keystore.jksin the current directory. Please ensure this file is located in theandroid/appdirectory. -
Configure signing information
Please check the signing configuration in the
android/app/build.gradlefile to ensure it's configured as follows:signingConfigs { release { storeFile file("keystore.jks") storePassword System.getenv("KEYSTORE_PASSWORD") ?: project.findProperty("MY_KEYSTORE_PASSWORD") keyAlias System.getenv("KEY_ALIAS") ?: project.findProperty("MY_KEY_ALIAS") keyPassword System.getenv("KEY_PASSWORD") ?: project.findProperty("MY_KEY_PASSWORD") } }At the same time, ensure the following placeholders are included in the
android/gradle.propertiesfile:MY_KEYSTORE_PASSWORD=${KEYSTORE_PASSWORD} MY_KEY_ALIAS=${KEY_ALIAS} MY_KEY_PASSWORD=${KEY_PASSWORD}
This ensures that signing information can be injected through system environment variables, or configured directly with actual values locally (recommended only for debugging environments).
-
GitHub Actions Configuration
To automatically build signed APKs on GitHub Actions, the following preparations are needed:
- Convert the
keystore.jksfile to a Base64-encoded string, then add a Secret in the repository's Secrets (for example, namedKEYSTORE_BASE64). - At the same time, add the following entries in the repository Secrets:
KEYSTORE_PASSWORD(your keystore password)KEY_ALIAS(alias used for signing)KEY_PASSWORD(your key password)
In the workflow file (such as
.github/workflows/build.yml), configure environment variables and restore keystore file steps as shown in the following example:env: KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} KEY_ALIAS: ${{ secrets.KEY_ALIAS }} KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} steps: - name: Setup Keystore run: | echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > android/app/keystore.jks shell: bash
- Convert the
-
Build Command
After configuration is complete, execute in the project root directory:
flutter build apk --release
After successful build, the generated APK will be located at
build/app/outputs/flutter-apk/app-release.apk.
After following the above steps for configuration, you can generate and use signed Android APKs for publishing or subsequent overlay installations.