Flutter基础功能插件remedi_base的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter基础功能插件remedi_base的使用

remedi_base module

它具有以下功能。

1. 提供基本的HTTP API服务与Dio包装器。

2. 应用程序配置。

3. 提供应用程序ID。

4. AppContainer。

入门指南

#1. 如何使用?

A. AppConfig。

  • AppConfig 提供应用程序信息,例如版本号、构建编号、构建风味等。
  • runApp() 前调用 AppConfig.init()
  • 在每个入口文件(如 main-dev.dartmain-prod.dart)上运行 setFlavorConfig 以设置产品风味(开发环境或生产环境)。
  • AppContainer() 传递给 runApp()
void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  AppConfig.setFlavorConfig(
    baseUrl: "https://google.com",
    baseWebUrl: "https://naver.com",
    isRelease: kReleaseMode,
    endpoint: "dev",
    enablePrintLog: kReleaseMode,
  );

  // 第一次执行初始化
  await AppConfig.init();

  // 可选
  AppConfig.log();

  runApp(AppContainer(
    app: MaterialApp(
      home: MyApp(),
    ),
  ));
}

B. HTTP API及其他。

B-1. HTTP 请求
  • 提供了四个基于Dio的包装类用于POST、GET、PATCH和DELETE请求。
B-2. 应用程序唯一ID
  • 可通过 AppRepository.appId 获取应用程序唯一ID。
class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  Future<void> initPlatformState() async {
    String platformVersion;

    platformVersion = await AppRepository.instance.appId;

    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: FutureBuilder(
          future: GoogleApiService().request(),
          builder: (context, snapshot) {
            String htmlString = 'about:blank';
            if (snapshot.hasData) {
              htmlString = snapshot.data;
            }
            return ListView(
              children: [Text(htmlString)],
            );
          },
        ),
      ),
    );
  }
}

class GoogleApiService extends DioGetApiService {
  [@override](/user/override)
  String get path => "";

  [@override](/user/override)
  String jsonTo(dynamic json) {
    return json;
  }
}

class GoogleApiDto extends IDto {
  final String html;

  GoogleApiDto({this.html});

  [@override](/user/override)
  Map<String, dynamic> toJson() {
    return {"data": html};
  }
}

示例代码

import 'dart:async';
import 'dart:developer' as dev;

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:remedi_base/remedi_base.dart';

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

  AppConfig.setFlavorConfig(
    baseUrl: "https://google.com",
    baseWebUrl: "https://naver.com",
    isRelease: kReleaseMode,
    endpoint: "dev",
    enablePrintLog: kReleaseMode,
  );

  // 第一次执行初始化
  await AppConfig.init();

  AppConfig.log();

  runApp(AppWrapper(
    app: MaterialApp(
      home: MyApp(),
    ),
    initialJobs: [
      () {
        dev.log("function 1");
      },
      () {
        dev.log("function 2");
      },
      () {
        dev.log("function 3");
      }
    ],
  ));
}

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

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  Future<void> initPlatformState() async {
    if (!mounted) return;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: FutureBuilder(
          builder: (context, snapshot) {
            String htmlString = 'about:blank';
            if (snapshot.hasData) {
              htmlString = "${snapshot.data}";
            }
            return ListView(
              children: [Text(htmlString)],
            );
          },
          future: initPlatformState(),
        ),
      ),
    );
  }
}

更多关于Flutter基础功能插件remedi_base的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter基础功能插件remedi_base的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


remedi_base 是一个 Flutter 基础功能插件,通常用于简化 Flutter 应用开发中的一些常见任务,如网络请求、数据存储、状态管理等。以下是如何使用 remedi_base 插件的一些基本步骤和功能示例。

1. 安装插件

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

dependencies:
  flutter:
    sdk: flutter
  remedi_base: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装插件。

2. 初始化插件

在你的 Flutter 应用的入口文件(通常是 main.dart)中,初始化 remedi_base 插件:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await RemedBase.init();  // 初始化插件
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

3. 使用网络请求功能

remedi_base 通常提供了简化的网络请求功能。以下是一个使用 remedi_base 进行 GET 请求的示例:

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

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

class _MyHomePageState extends State<MyHomePage> {
  String _responseData = '';

  Future<void> _fetchData() async {
    try {
      var response = await RemedBase.get('https://jsonplaceholder.typicode.com/posts/1');
      setState(() {
        _responseData = response.toString();
      });
    } catch (e) {
      setState(() {
        _responseData = 'Failed to load data';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(_responseData),
            ElevatedButton(
              onPressed: _fetchData,
              child: Text('Fetch Data'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 使用数据存储功能

remedi_base 可能还提供了简化的本地数据存储功能。以下是一个使用 remedi_base 存储和读取数据的示例:

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

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

class _MyHomePageState extends State<MyHomePage> {
  String _storedData = '';

  Future<void> _saveData() async {
    await RemedBase.saveData('key', 'Hello, RemedBase!');
  }

  Future<void> _loadData() async {
    var data = await RemedBase.loadData('key');
    setState(() {
      _storedData = data ?? 'No data found';
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(_storedData),
            ElevatedButton(
              onPressed: _saveData,
              child: Text('Save Data'),
            ),
            ElevatedButton(
              onPressed: _loadData,
              child: Text('Load Data'),
            ),
          ],
        ),
      ),
    );
  }
}

5. 使用状态管理功能

remedi_base 可能还提供了简化的状态管理功能。以下是一个使用 remedi_base 进行状态管理的示例:

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

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

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
    RemedBase.setState('counter', _counter);
  }

  [@override](/user/override)
  void initState() {
    super.initState();
    RemedBase.getState('counter').then((value) {
      setState(() {
        _counter = value ?? 0;
      });
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('You have pushed the button this many times:'),
            Text('$_counter', style: Theme.of(context).textTheme.headline4),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!