bravekingzhang / fdflutter

另外一个一个flutter快速开发框架,参考这篇文章https://mp.weixin.qq.com/s/X2b3sviE420Z0T27l7Dang
31 stars 6 forks source link

对于 Flutter 快速开发框架的思考

yet another flutter fast development framework

要打造一个Flutter的快速开发框架,首先要思考的事情是一个快速开发框架需要照顾到哪些功能点,经过2天的思考,我大致整理了一下需要的能力:

那么,基于上面的分析,我就开始做了一些选型,这里基本上就是按照官方Flutter Favorites ,里面推荐的来选了。因为这些建议的库都是目前Flutter社区中比较流行和受欢迎的,能够提供稳定和高效的开发体验。

1. 状态管理:Riverpod

@riverpod
Future<String> boredSuggestion(BoredSuggestionRef ref) async {
  final response = await http.get(
    Uri.https('https://boredapi.com/api/activity'),
  );
  final json = jsonDecode(response.body);
  return json['activity']! as String;
}

class Home extends ConsumerWidget {
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final boredSuggestion = ref.watch(boredSuggestionProvider);
    // Perform a switch-case on the result to handle loading/error states
    return boredSuggestion.when(
      loading: () => Text('loading'),
      error: (error, stackTrace) => Text('error: $error'),
      data: (data) => Text(data),
    );
  }
}

2. 网络请求管理:Dio

final rs = await dio.get(
  url,
  options: Options(responseType: ResponseType.stream), // Set the response type to `stream`.
);
print(rs.data.stream); // Response stream.

3. 路由管理:routemaster

'/protected-route': (route) =>
    canUserAccessPage()
      ? MaterialPage(child: ProtectedPage())
      : Redirect('/no-access'),

4. UI组件库:tdesign_flutter

5. 数据持久化:Hive

var box = Hive.box('myBox');

box.put('name', 'David');

var name = box.get('name');

print('Name: $name');

6. 依赖注入:GetIt

final getIt = GetIt.instance;

void setup() {
  getIt.registerSingleton<AppModel>(AppModel());

// Alternatively you could write it if you don't like global variables
  GetIt.I.registerSingleton<AppModel>(AppModel());
}

MaterialButton(
  child: Text("Update"),
  onPressed: getIt<AppModel>().update   // given that your AppModel has a method update
),

7. 国际化和本地化:flutter_localization

8. 测试和调试:flutter_test, mockito

9. 日志系统:logger

10. CI/CD集成

CI/CD集成通常涉及外部服务,如GitHub Actions、Codemagic等,而非Flutter库。

目录规划

前面已经做完了选型,下来我们可以确立一下我们快速开发框架的目录结构,我们给框架取名为fdflutter,顾名思义,就是fast development flutter,如下:

fdflutter/
├── lib/
│   ├── core/
│   │   ├── api/
│   │   │   └── api_service.dart
│   │   ├── di/
│   │   │   └── injection_container.dart
│   │   ├── localization/
│   │   │   └── localization_service.dart
│   │   ├── routing/
│   │   │   └── router.dart
│   │   └── utils/
│   │       └── logger.dart
│   ├── data/
│   │   ├── datasources/
│   │   │   ├── local_datasource.dart
│   │   │   └── remote_datasource.dart
│   │   └── repositories/
│   │       └── example_repository.dart
│   ├── domain/
│   │   ├── entities/
│   │   │   └── example_entity.dart
│   │   └── usecases/
│   │       └── get_example_data.dart
│   ├── presentation/
│   │   ├── pages/
│   │   │   └── example_page.dart
│   │   └── providers/
│   │       └── example_provider.dart
│   └── main.dart
├── test/
│   ├── data/
│   ├── domain/
│   └── presentation/
├── pubspec.yaml
└── README.md

在这个结构中,我保持了核心功能、数据层、领域层和表示层的划分:

加群讨论

欢迎加群讨论技术?随意打赏,请备注 github 名

image

关注作者微信公众号,与作者交流,第一时间知道作者动态?

image