Flutter任务管理插件growerp_task的使用

Flutter任务管理插件growerp_task的使用

这是GrowERP系统中的任务/工作流部分。它包含以下文件维护屏幕:

  • 工作流
  • 待办事项

集成测试

集成测试在示例组件中可用。

它使用本地后端系统。

你也可以使用我们的测试后端系统,设置在 example/assets/cfg/app_settings.json 文件中:

"databaseUrlDebug": "https://backend.growerp.org",
"chatUrlDebug": "wss://chat.growerp.org"

启动测试需要安装并激活 melos(运行 dart global activate melos):

melos build_all
melos l10n
cd example
flutter test integration_test

使用示例组件

与集成测试一样,你可以使用本地后端或我们的测试后端。

在使用核心组件之前,你需要创建一个公司,该操作会发送一封包含密码的邮件。使用这个密码登录,然后核心组件会出现在主菜单中。

示例代码

以下是一个完整的示例代码,展示了如何使用 growerp_task 插件:

/*
 * This GrowERP software is in the public domain under CC0 1.0 Universal plus a
 * Grant of Patent License.
 * 
 * To the extent possible under law, the author(s) have dedicated all
 * copyright and related and neighboring rights to this software to the
 * public domain worldwide. This software is distributed without any
 * warranty.
 * 
 * You should have received a copy of the CC0 Public Domain Dedication
 * along with this software (see the LICENSE.md file). If not, see
 * <http://creativecommons.org/publicdomain/zero/1.0/>.
 */

import 'package:growerp_core/growerp_core.dart';
import 'package:growerp_models/growerp_models.dart';
import 'package:growerp_order_accounting/growerp_order_accounting.dart';
import 'package:growerp_task/growerp_task.dart';
import 'package:growerp_user_company/growerp_user_company.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'menu_options.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:global_configuration/global_configuration.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'router.dart' as router;
import 'package:http/http.dart' as http;
import 'package:package_info_plus/package_info_plus.dart';

Future main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await GlobalConfiguration().loadFromAsset('app_settings');

  PackageInfo packageInfo = await PackageInfo.fromPlatform();
  GlobalConfiguration().updateValue('appName', packageInfo.appName);
  GlobalConfiguration().updateValue('packageName', packageInfo.packageName);
  GlobalConfiguration().updateValue('version', packageInfo.version);
  GlobalConfiguration().updateValue('build', packageInfo.buildNumber);

  // 可以通过长按主屏幕标题更改后端URL。
  SharedPreferences prefs = await SharedPreferences.getInstance();
  String ip = prefs.getString('ip') ?? '';
  String chat = prefs.getString('chat') ?? '';
  String singleCompany = prefs.getString('companyPartyId') ?? '';
  if (ip.isNotEmpty) {
    late http.Response response;
    try {
      response = await http.get(Uri.parse('${ip}rest/s1/growerp/Ping'));
      if (response.statusCode == 200) {
        GlobalConfiguration().updateValue('databaseUrl', ip);
        GlobalConfiguration().updateValue('chatUrl', chat);
        GlobalConfiguration().updateValue('singleCompany', singleCompany);
        debugPrint(
            '=== New ip: $ip , chat: $chat company: $singleCompany Updated!');
      }
    } catch (error) {
      debugPrint('===$ip does not respond...not updating databaseUrl: $error');
    }
  }

  await Hive.initFlutter();

  Bloc.observer = AppBlocObserver();
  runApp(TopApp(
    restClient: RestClient(await buildDioClient()),
    classificationId: GlobalConfiguration().get("classificationId"),
    chatServer: ChatServer(),
    title: 'GrowERP Workflow Management.',
    router: router.generateRoute,
    menuOptions: menuOptions,
    extraDelegates: extraDelegates,
    screens: screens,
  ));
}

List<LocalizationsDelegate<dynamic>> extraDelegates = const [
  UserCompanyLocalizations.delegate,
];

Map<String, Widget> screens = taskScreens..addAll(orderAccountingScreens);
//    {'editTask', TaskServices().editTask(Task())} as Map<String, Widget>;

更多关于Flutter任务管理插件growerp_task的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter任务管理插件growerp_task的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


growerp_task 是一个为 Flutter 应用设计的任务管理插件,旨在帮助开发者轻松集成任务管理功能到他们的应用中。它提供了创建、更新、删除和查询任务的基本功能,适用于各种任务管理场景。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 growerp_task 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  growerp_task: ^1.0.0  # 请根据实际情况使用最新版本

然后运行 flutter pub get 来安装依赖。

基本用法

1. 初始化插件

在应用启动时,你需要初始化 growerp_task 插件。通常可以在 main.dart 文件的 main 函数中进行初始化。

import 'package:flutter/material.dart';
import 'package:growerp_task/growerp_task.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await GrowerpTask.initialize();
  runApp(MyApp());
}

2. 创建任务

你可以使用 GrowerpTask.createTask 方法来创建一个新的任务。

import 'package:growerp_task/growerp_task.dart';

void createTask() async {
  Task task = Task(
    id: '1',
    title: '完成 Flutter 项目',
    description: '完成 Flutter 项目的任务管理模块',
    dueDate: DateTime.now().add(Duration(days: 7)),
    status: TaskStatus.pending,
  );

  await GrowerpTask.createTask(task);
}

3. 更新任务

你可以使用 GrowerpTask.updateTask 方法来更新一个已有的任务。

void updateTask() async {
  Task task = Task(
    id: '1',
    title: '完成 Flutter 项目',
    description: '完成 Flutter 项目的任务管理模块',
    dueDate: DateTime.now().add(Duration(days: 7)),
    status: TaskStatus.completed,
  );

  await GrowerpTask.updateTask(task);
}

4. 删除任务

你可以使用 GrowerpTask.deleteTask 方法来删除一个任务。

void deleteTask() async {
  await GrowerpTask.deleteTask('1');
}

5. 查询任务

你可以使用 GrowerpTask.getTasks 方法来获取所有任务。

void getTasks() async {
  List<Task> tasks = await GrowerpTask.getTasks();
  tasks.forEach((task) {
    print('Task: ${task.title}, Status: ${task.status}');
  });
}

任务状态

growerp_task 插件支持以下几种任务状态:

  • TaskStatus.pending: 任务待办
  • TaskStatus.inProgress: 任务进行中
  • TaskStatus.completed: 任务已完成

示例应用

以下是一个简单的 Flutter 应用示例,展示了如何使用 growerp_task 插件来管理任务。

import 'package:flutter/material.dart';
import 'package:growerp_task/growerp_task.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await GrowerpTask.initialize();
  runApp(TaskManagerApp());
}

class TaskManagerApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TaskListScreen(),
    );
  }
}

class TaskListScreen extends StatefulWidget {
  [@override](/user/override)
  _TaskListScreenState createState() => _TaskListScreenState();
}

class _TaskListScreenState extends State<TaskListScreen> {
  List<Task> tasks = [];

  [@override](/user/override)
  void initState() {
    super.initState();
    _loadTasks();
  }

  void _loadTasks() async {
    List<Task> loadedTasks = await GrowerpTask.getTasks();
    setState(() {
      tasks = loadedTasks;
    });
  }

  void _addTask() async {
    Task newTask = Task(
      id: DateTime.now().toString(),
      title: '新任务',
      description: '这是一个新任务',
      dueDate: DateTime.now().add(Duration(days: 7)),
      status: TaskStatus.pending,
    );

    await GrowerpTask.createTask(newTask);
    _loadTasks();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('任务管理'),
      ),
      body: ListView.builder(
        itemCount: tasks.length,
        itemBuilder: (context, index) {
          Task task = tasks[index];
          return ListTile(
            title: Text(task.title),
            subtitle: Text(task.description),
            trailing: IconButton(
              icon: Icon(Icons.delete),
              onPressed: () async {
                await GrowerpTask.deleteTask(task.id);
                _loadTasks();
              },
            ),
          );
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _addTask,
        child: Icon(Icons.add),
      ),
    );
  }
}
回到顶部