Flutter系列功能集成插件flutter_series的使用

Flutter系列功能集成插件flutter_series的使用

flutter_series 是一个用于增强 RowColumn 小部件的 Flutter 插件,提供了可选的间距和分隔符。

特性

小部件

小部件 描述
PadColumn 带有可选填充、间距和分隔符的 Column
PadRow 带有可选填充、间距和分隔符的 Row
SizedWidth SizedBox 的简化版。
SizedHeight SizedBox 的简化版。
HDivider 简化的 Divider 小部件。
VDivider 简化的 VerticalDivider 小部件。

函数

函数 描述
navPush 使用 CupertinoPageRoute 风格推送新页面的一种简单方法。

小部件

PadColumn & PadRow 系列

PadColumnPadRow 系列提供了更多的控制能力。

基本的 PadColumnPadRow 与标准的 ColumnRow 类似:

PadColumn(
    children: const [
        Text("flutter_series is"),
        Text("the best flutter package"),
        Text("to date"),
    ],
),

通过添加一些参数,可以实现更复杂的布局:

PadColumn(
    padding: const EdgeInsets.all(20) + MediaQuery.of(context).padding,
    interleaving: Interleaving.fullDivided,
    crossAxisAlignment: CrossAxisAlignment.stretch,
    mainAxisAlignment: MainAxisAlignment.start,
    spacing: 20,
    children: const [
        Text("flutter_series is"),
        Text("the best flutter package"),
        Text("to date"),
    ],
),

变量 interleaving 可以设置为不同的模式,以实现不同的间距效果:

模式 描述
none 不应用间距,就像标准的系列一样。
inBetween 间距出现在子组件之间,但不出现于它们外部。
full 间距出现在子组件之间及其外部。
inBetweenDivided 分隔符出现在子组件之间,但不出现于它们外部。
fullDivided 分隔符出现在子组件之间及其外部。

如果只提供了间距,则系列会自动分配 inBetween 模式的间距:

PadColumn(
    spacing: 20,
    children: const [
        Text("flutter_series is"),
        Text("the best flutter package"),
        Text("to date"),
    ],
),

SizedWidth & SizedHeight

SizedWidthSizedHeightSizedBox 的简化版:

SizedWidth(20) = SizedBox(width: 20),
SizedHeight(20) = SizedBox(height: 20),

HDivider & VDivider

HDividerVDividerDivider 的简化版:

HDivider(20) = Divider(
        height: 20, 
        color: Colors.white.withOpacity(0.3),
    ),
VDivider(20) = VerticalDivider(
        width: 20, 
        color: Colors.white.withOpacity(0.3),
    ),

开始使用

添加依赖

pubspec.yaml 文件中添加依赖:

dependencies:
  flutter_series: ^0.0.1

然后运行以下命令安装依赖:

$ flutter pub add flutter_series

导入包

在你的 Dart 文件中导入包:

import 'package:flutter_series/flutter_series.dart';

完整示例

以下是一个完整的示例代码,展示了如何使用 flutter_series 中的各种小部件:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_series/flutter_series.dart';

void main() {
  runApp(const FlutterSeriesApp());
}

class FlutterSeriesApp extends StatelessWidget {
  const FlutterSeriesApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Series',
      scrollBehavior: const CupertinoScrollBehavior(),
      themeMode: ThemeMode.system,
      theme: ThemeData(
        primarySwatch: Colors.blue,
        brightness: Brightness.light,
        dividerTheme: const DividerThemeData(color: Color(0x8F1F1F1F)),
      ),
      darkTheme: ThemeData(
        primarySwatch: Colors.blue,
        brightness: Brightness.dark,
        dividerTheme: const DividerThemeData(color: Color(0x8AFFFFFF)),
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView(
        padding: const EdgeInsets.all(20) + MediaQuery.of(context).padding,
        children: [
          Text(
            "Need to knows:",
            style: Theme.of(context).textTheme.headline5,
          ),
          const _Housing(
            title: "Default Behaviour",
            // Sized height can be used to split up widgets in a list where finer control is needed.
            child: PadColumn(
              children: [
                _BackedText("flutter_series is"),
                _BackedText("the best flutter package"),
                _BackedText("to date"),
              ],
            ),
          ),
          const _Housing(
            title: "Defined Spacing",
            // defining spacing alone add spacing between each widget.
            child: PadColumn(
              spacing: 10,
              children: [
                _BackedText("flutter_series is"),
                _BackedText("the best flutter package"),
                _BackedText("to date"),
              ],
            ),
          ),
          const _Housing(
            title: "Spacing and CrossAxisAlignment.stretch",
            // all the common main and cross axis alignment functions still work.
            child: PadColumn(
              mainAxisAlignment: MainAxisAlignment.end,
              crossAxisAlignment: CrossAxisAlignment.stretch,
              spacing: 10,
              children: [
                _BackedText("flutter_series is"),
                _BackedText("the best flutter package"),
                _BackedText("to date"),
              ],
            ),
          ),
          const _Housing(
            title: "Simple adding of dividers",
            // dividers can be added by defining interleaving as fullDivided or inBetweenDivided
            child: PadColumn(
              interleaving: Interleaving.inBetweenDivided,
              mainAxisAlignment: MainAxisAlignment.end,
              crossAxisAlignment: CrossAxisAlignment.stretch,
              spacing: 10,
              children: [
                _BackedText("best"),
                _BackedText("flutter"),
                _BackedText("package"),
              ],
            ),
          ),
          const _Housing(
            title: "Works with rows as well",
            // rows work as well
            child: PadRow(
              interleaving: Interleaving.inBetweenDivided,
              mainAxisAlignment: MainAxisAlignment.end,
              crossAxisAlignment: CrossAxisAlignment.center,
              spacing: 20,
              children: [
                _BackedText("best"),
                _BackedText("flutter"),
                _BackedText("package"),
              ],
            ),
          ),
          Text(
            "Interleaving Modes:",
            style: Theme.of(context).textTheme.headline5,
          ),
          const _Housing(
            title: "Interleaving.none",
            child: PadColumn(
              interleaving: Interleaving.none,
              children: [
                _BackedText("flutter_series is"),
                _BackedText("the best flutter package"),
                _BackedText("to date"),
              ],
            ),
          ),
          const _Housing(
            title: "Interleaving.inBetween",
            child: PadColumn(
              interleaving: Interleaving.inBetween,
              children: [
                _BackedText("flutter_series is"),
                _BackedText("the best flutter package"),
                _BackedText("to date"),
              ],
            ),
          ),
          const _Housing(
            title: "Interleaving.full",
            child: PadColumn(
              interleaving: Interleaving.full,
              children: [
                _BackedText("flutter_series is"),
                _BackedText("the best flutter package"),
                _BackedText("to date"),
              ],
            ),
          ),
          const _Housing(
            title: "Interleaving.inBetweenDivided",
            child: PadColumn(
              interleaving: Interleaving.inBetweenDivided,
              children: [
                _BackedText("flutter_series is"),
                _BackedText("the best flutter package"),
                _BackedText("to date"),
              ],
            ),
          ),
          const _Housing(
            title: "Interleaving.fullDivided",
            child: PadColumn(
              interleaving: Interleaving.fullDivided,
              children: [
                _BackedText("flutter_series is"),
                _BackedText("the best flutter package"),
                _BackedText("to date"),
              ],
            ),
          ),
        ],
      ),
    );
  }
}

class _Housing extends StatelessWidget {
  const _Housing({
    Key? key,
    required this.child,
    required this.title,
  }) : super(key: key);

  final Widget child;
  final String title;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return PadColumn(
      interleaving: Interleaving.full,
      spacing: 15,
      children: [
        Text(title),
        Container(
          // color: Colors.blue,
          child: child,
        ),
      ],
    );
  }
}

class _BackedText extends StatelessWidget {
  const _BackedText(this.text, {Key? key}) : super(key: key);

  final String text;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 5),
      decoration: BoxDecoration(
        color: Colors.red,
        borderRadius: BorderRadius.circular(5),
      ),
      child: Text(text),
    );
  }
}

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

1 回复

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


在Flutter开发中,flutter_series 并不是一个官方或广泛认可的插件包名称。不过,假设你提到的 flutter_series 是一个假想的插件集合,用于集成一系列Flutter功能插件,我们可以模拟一个类似的场景,展示如何在Flutter项目中集成和使用多个功能插件。

以下是一个简化的示例,展示如何在Flutter项目中集成并使用几个常见的插件,如用于网络请求的 dio、用于状态管理的 provider、以及用于本地存储的 shared_preferences。虽然这不是 flutter_series,但它能够展示如何集成和使用多个Flutter插件。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加所需的依赖:

dependencies:
  flutter:
    sdk: flutter
  dio: ^4.0.0 # 用于网络请求
  provider: ^6.0.0 # 用于状态管理
  shared_preferences: ^2.0.9 # 用于本地存储

然后运行 flutter pub get 来获取这些依赖。

2. 使用 dio 进行网络请求

创建一个服务类来处理网络请求:

import 'package:dio/dio.dart';

class ApiService {
  final Dio _dio = Dio();

  Future<Map<String, dynamic>> fetchData() async {
    try {
      Response response = await _dio.get('https://api.example.com/data');
      return response.data;
    } catch (e) {
      throw e;
    }
  }
}

3. 使用 provider 进行状态管理

创建一个 ChangeNotifier 类来管理应用状态:

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'api_service.dart';

class DataProvider with ChangeNotifier {
  Map<String, dynamic> _data = {};
  Map<String, dynamic> get data => _data;

  DataProvider() {
    _fetchData();
  }

  Future<void> _fetchData() async {
    final ApiService apiService = ApiService();
    _data = await apiService.fetchData();
    notifyListeners();
  }
}

4. 使用 shared_preferences 进行本地存储

创建一个帮助类来处理本地存储:

import 'package:shared_preferences/shared_preferences.dart';

class PreferencesHelper {
  static SharedPreferences? _preferences;

  static Future<SharedPreferences> get preferences async {
    if (_preferences == null) {
      _preferences = await SharedPreferences.getInstance();
    }
    return _preferences!;
  }

  static Future<void> saveString(String key, String value) async {
    SharedPreferences prefs = await preferences;
    await prefs.setString(key, value);
  }

  static Future<String?> getString(String key) async {
    SharedPreferences prefs = await preferences;
    return prefs.getString(key);
  }
}

5. 在应用中使用这些插件

main.dart 中设置 Provider 并使用这些功能:

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'data_provider.dart';
import 'preferences_helper.dart';

void main() {
  runApp(
    MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (_) => DataProvider()),
      ],
      child: MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Flutter Series Example')),
        body: Center(
          child: Consumer<DataProvider>(
            builder: (context, dataProvider, child) {
              return Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Text('Data from API: ${dataProvider.data['someKey']}'),
                  ElevatedButton(
                    onPressed: () async {
                      await PreferencesHelper.saveString('exampleKey', 'exampleValue');
                      String? value = await PreferencesHelper.getString('exampleKey');
                      ScaffoldMessenger.of(context).showSnackBar(
                        SnackBar(content: Text('Saved value: $value')),
                      );
                    },
                    child: Text('Save to SharedPreferences'),
                  ),
                ],
              );
            },
          ),
        ),
      ),
    );
  }
}

这个示例展示了如何在Flutter项目中集成并使用多个插件。尽管这不是 flutter_series 的具体实现,但它提供了一个模板,你可以根据自己的需求调整和扩展这个示例。

回到顶部