[Flutter for openharmony第三方库] flutter小精灵的鸿蒙冒险之旅:dio库玩转待办清单

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

咻~ Flutter小精灵空降OpenHarmony!🌟

嘿!今天我要讲一个超有趣的故事——一只可爱的Flutter小精灵,带着它的小伙伴dio库,来到了OpenHarmony的奇妙世界!它们要一起打造一个超萌的待办清单应用!你准备好了吗?让我们开始冒险吧~

第一关:给数据画个可爱的模样 🎨

首先,我们来给待办事项穿上漂亮的小衣服!TodoItem就是一个超级可爱的小盒子~

class TodoItem {
  final int userId;
  final int id;
  final String title;
  final bool completed;

  TodoItem({required this.userId, required this.id, required this.title, required this.completed});

  factory TodoItem.fromJson(Map<String, dynamic> json) => TodoItem(
    userId: json['userId'] as int,
    id: json['id'] as int,
    title: json['title'] as String,
    completed: json['completed'] as bool,
  );
}

看!fromJson就像一个神奇的魔法棒,把JSON数据变成了可爱的TodoItem!✨

第二关:dio小助手,出发!🚀

现在轮到dio小助手出场啦!它是我们的网络小英雄,负责去服务器把待办数据接回来~

class TodoService {
  static const String _baseUrl = 'https://jsonplaceholder.typicode.com';
  final Dio _dio = Dio(BaseOptions(
    connectTimeout: const Duration(seconds: 30),
    receiveTimeout: const Duration(seconds: 30),
    sendTimeout: const Duration(seconds: 30),
    headers: {'Content-Type': 'application/json', 'Accept': 'application/json'},
  ));

  Future<List<TodoItem>> getTodos() async {
    try {
      final response = await _dio.get('$_baseUrl/todos');
      return (response.data as List).map((json) => TodoItem.fromJson(json)).toList();
    } on DioException catch (e) {
      throw Exception(_getCuteErrorMessage(e));
    }
  }

  String _getCuteErrorMessage(DioException e) {
    switch (e.type) {
      case DioExceptionType.connectionTimeout: return '哎呀,等太久啦!⏰';
      case DioExceptionType.connectionError: return '网络小堵车~ 🚗';
      default: return '出了点小状况:${e.message} 😅';
    }
  }
}

错误提示也变得超可爱!用户看到都会心一笑~ 💖

第三关:萌萌UI,变变变!🎭

现在到了最有趣的环节——用状态管理让界面变魔术!数据变了,界面立刻就更新,太神奇啦!

class _TodoListPageState extends State<TodoListPage> {
  final TodoService _todoService = TodoService();
  List<TodoItem> _todos = [];
  bool _isLoading = true;
  String? _errorMessage;

  
  void initState() {
    super.initState();
    _loadTodos();
  }

  Future<void> _loadTodos() async {
    setState(() { _isLoading = true; _errorMessage = null; });
    try {
      setState(() { _todos = await _todoService.getTodos(); _isLoading = false; });
    } catch (e) {
      setState(() { _errorMessage = e.toString(); _isLoading = false; });
    }
  }
}

状态管理就像变魔术,太好玩啦!✨

终极挑战:OpenHarmony设备打卡!📸

特别通行证:给小精灵开绿灯!🚦

在鸿蒙世界里,我们需要给小精灵发一张特别通行证——INTERNET权限!

{
  "module": {
    "name": "entry",
    "type": "entry",
    "requestPermissions": [{"name": "ohos.permission.INTERNET"}]
  }
}

有了这张通行证,小精灵就能自由访问网络啦!🎫

哇!运行截图大赏!📸

【截图位置1:萌萌加载中~ 🔄】
在这里插入图片描述

应用启动啦!一个可爱的加载指示器在转圈圈,就像一只跳舞的小蜜蜂~

【截图位置2:超萌待办清单!📋】
在这里插入图片描述

哇塞!数据加载成功!每个待办都有自己的小卡片,绿色勾勾、橙色小闹钟,既直观又可爱!

【截图位置3:点击刷新,丝滑流畅!🖱️】
在这里插入图片描述

点击刷新按钮,数据重新加载,就像巧克力在口中融化一样顺滑~

圆满结局:冒险成功!🎊

恭喜恭喜!Flutter小精灵和dio小助手在OpenHarmony的冒险之旅圆满成功啦!它们完美地完成了任务,打造了一个超萌的待办清单应用!

dio库在鸿蒙平台上运行得非常顺畅,就像鱼儿在水中游泳一样自然!我们不需要修改任何dio库的源代码,它就能完美地工作在OpenHarmony设备上!这证明了Flutter生态的强大兼容性,也展示了OpenHarmony平台的开放与包容!

新冒险预告!✨

Flutter for OpenHarmony的世界还有很多有趣的东西等待我们去探索!文件上传下载、WebSocket实时通信、更复杂的状态管理……每一个主题都像是一个新的冒险,等待勇敢的开发者去挑战!

本文的完整代码已经托管到AtomGit平台(https://atomgit.com),欢迎大家去围观、学习、甚至贡献代码!

记住,编程不仅仅是写代码,更是一种创造的乐趣!当你看到自己的应用在OpenHarmony设备上完美运行时,那种成就感是无法言喻的!所以,勇敢地迈出第一步吧,Flutter for OpenHarmony的世界等着你来探索!🚀✨

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐