| 插件 | 说明 | 安装 |
|---|
provider | 官方推荐的状态管理 | flutter pub add provider |
riverpod | Provider 的改进版 | flutter pub add flutter_riverpod |
bloc | 事件驱动的状态管理 | flutter pub add flutter_bloc |
get | 功能全面的框架(路由+状态+DI) | flutter pub add get |
| 插件 | 说明 | 安装 |
|---|
http | 基础 HTTP 请求 | flutter pub add http |
dio | 功能丰富的 HTTP 客户端 | flutter pub add dio |
graphql_flutter | GraphQL 客户端 | flutter pub add graphql_flutter |
web_socket_channel | WebSocket 支持 | flutter pub add web_socket_channel |
dependencies:
flutter_screenutil: ^5.9.0
cached_network_image: ^3.3.0
shimmer: ^3.0.0
lottie: ^2.7.0
flutter_swiper_view: ^1.1.8
badges: ^3.1.2
flutter_slidable: ^3.0.1
flutter_staggered_grid_view: ^0.7.0
video_player: ^2.8.2
flutter_rating_bar: ^4.0.1
fluttertoast: ^8.2.4
loading_animation_widget: ^1.2.1
flutter_svg: ^2.0.9
photo_view: ^0.15.0
import 'package:lottie/lottie.dart';
Lottie.asset(
'assets/animations/loading.json',
width: 200,
height: 200,
fit: BoxFit.cover,
repeat: true,
reverse: true,
animate: true,
)
import 'package:shimmer/shimmer.dart';
Shimmer.fromColors(
baseColor: Colors.grey.shade300,
highlightColor: Colors.grey.shade100,
child: Column(
children: [
Container(width: double.infinity, height: 16, color: Colors.white),
const SizedBox(height: 8),
Container(width: 200, height: 16, color: Colors.white),
],
),
)
dependencies:
shared_preferences: ^2.2.2
hive: ^2.2.3
hive_flutter: ^1.1.0
sqflite: ^2.3.0
isar: ^3.1.0
isar_flutter_libs: ^3.1.0
secure_storage: ^0.0.1
flutter_secure_storage: ^9.0.0
dependencies:
intl: ^0.18.1
equatable: ^2.0.5
freezed_annotation: ^2.4.1
collection: ^1.18.0
logger: ^2.0.2
uuid: ^4.2.1
crypto: ^3.0.3
path_provider: ^2.1.1
url_launcher: ^6.2.2
share_plus: ^7.2.1
device_info_plus: ^9.1.0
package_info_plus: ^5.0.1
connectivity_plus: ^5.0.2
import 'package:intl/intl.dart';
class FormatUtil {
static String formatDate(DateTime date) {
return DateFormat('yyyy-MM-dd HH:mm:ss').format(date);
}
static String formatCurrency(double amount) {
return NumberFormat.currency(symbol: '¥', decimalDigits: 2).format(amount);
}
static String formatNumber(int number) {
return NumberFormat('#,###').format(number);
}
static String timeAgo(DateTime dateTime) {
final diff = DateTime.now().difference(dateTime);
if (diff.inDays > 0) return '${diff.inDays}天前';
if (diff.inHours > 0) return '${diff.inHours}小时前';
if (diff.inMinutes > 0) return '${diff.inMinutes}分钟前';
return '刚刚';
}
}
import 'package:logger/logger.dart';
final logger = Logger(
printer: PrettyPrinter(
methodCount: 0,
errorMethodCount: 8,
lineLength: 120,
colors: true,
printEmojis: true,
printTime: true,
),
);
logger.v('详细日志');
logger.d('调试日志');
logger.i('信息日志');
logger.w('警告日志');
logger.e('错误日志', error: exception, stackTrace: stackTrace);
logger.wtf('严重失败');
dev_dependencies:
flutter_lints: ^3.0.1
flutter_test:
sdk: flutter
json_serializable: ^6.7.1
build_runner: ^2.4.8
mockito: ^5.4.4
flutter_launcher_icons: ^0.13.1
flutter_native_splash: ^2.3.8
retrofit_generator: ^8.0.1
injectable_generator: ^2.4.1
flutter pub global activate devtools
flutter devtools
- Flutter Inspector:查看 Widget 树、布局调试
- 性能:性能分析、帧率监控
- 内存:内存使用分析
- 网络:网络请求监控
- 调试器:Dart 调试器
- 日志:日志查看器
import 'package:flutter/rendering.dart';
debugPaintSizeEnabled = true;
debugPaintBaselinesEnabled = true;
PerformanceOverlay.allEnabled = true;
| 扩展 | ID | 用途 |
|---|
| Flutter | Dart-Code.flutter | Flutter 核心支持 |
| Dart | Dart-Code.dart-code | Dart 语言支持 |
| Awesome Flutter Snippets | Nash.awesome-flutter-snippets | 代码片段 |
| Bloc | felix.boc | Bloc 状态管理支持 |
| Pubspec Assist | jeroen-meijer.pubspec-assist | 包管理助手 |
| Flutter Widget Snippets | alexisvt.flutter-snippets | Widget 片段 |
| Error Lens | usernamehw.errorlens | 内联错误高亮 |