去年做了几个Flutter应用,同一套代码fork了几个分支(如下截图是最新的一个分支实现),花点时间整理一个简单的APP工程模版:
- 最小依赖原则
- 之前只面向移动端,这次代码整理主要适配web
- 只把涉及到的且常用的功能摘出来,尽量简化实现,方便后面项目复用
home |
shop |
warehouse |
mine |
detail |
select |
checkout |
open box record |
- 国际化
- 自定义字体
- 首页
- 轮播图
- Google登录
必选
- intl 国际化
- dio 网络交互
- shared_preferences 本地存储
- injectable 依赖注入
- logger 日志
- card_swiper 轮播图
- google_sign_in 谷歌登录
- firebase_analytics firebase分析
- fluttertoast toast
- font_awesome_flutter FontAwesome(MaterialIcons带的icon比较少)
可选
- shimmer 骨架加载动画
- cached_network_image 图片缓存( Web不可用 )
- https://xeno-canto.org/explore/api (flutter web 有跨域问题,运行时禁用web-security)
flutter run -d chrome --web-browser-flag "--disable-web-security"
- injectable
依赖注入,定义di.dart
文件
@InjectableInit()
Future<void> configureDependencies() async => await GetIt.instance.init();
添加injectable_generator插件,可以自动生成di.config.dart文件
flutter pub add dev:injectable_generator
在main.dart初始化
Future<void> main() async {
await configureDependencies();
runApp(const MainApp());
}
以SharedPreferences为例,全局注入SharedPreferences实例,避免非async方法里使用时await问题。
@module
abstract class SharedPreferenceService {
@preResolve
Future<SharedPreferences> get prefs => SharedPreferences.getInstance();
}