Flutter插件ushio的介绍与使用_Ushio是一个受 SwiftUI 启发的状态管理库

Flutter插件ushio的介绍与使用_Ushio是一个受 SwiftUI 启发的状态管理库

Ushio介绍 🧂

Ushio 是一个受 SwiftUI 启发的状态管理库。

SwiftUI 的差异

支持的功能:

  • <code>@State</code> -> <code>state()</code>, <code>stateList()</code>, <code>stateMap()</code>
  • <code>@StateObject</code> -> <code>stateObject()</code>
  • <code>@Published</code> -> <code>published()</code>, <code>publishedList()</code>, <code>publishedMap()</code>
  • <code>@EnvironmentObject</code> -> <code>environmentObject()</code>

不支持的功能:

  • <code>@ObservedObject</code>

安装Flutter插件ushio

pubspec.yaml 文件中添加依赖:

dependencies:
  ushio: ^x.x.x

然后运行以下命令安装:

flutter pub get

导入包:

import 'package:ushio/ushio.dart';

使用Flutter插件ushio

示例 1:简单的计数器

以下是一个使用 <code>state()</code> 的简单计数器示例。

代码实现:

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

void main() {
  runApp(MyApp());
}

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

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

class _CounterPageState extends State<CounterPage> {
  // 使用 state() 来管理状态
  final counter = state(0);

  void increment() {
    counter.value++;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Ushio Counter Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '${counter.value}',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: increment,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

示例 2:多计数器

以下是一个使用 <code>stateObject()</code><code>published()</code> 的多计数器示例。

代码实现:

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

void main() {
  runApp(MyApp());
}

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

// 使用 stateObject() 管理状态
class CounterManager with StateObject {
  final count = state(0);
}

class MultiCounterPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Multi Counter Example'),
      ),
      body: Center(
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: [
            CounterWidget(),
            CounterWidget(),
          ],
        ),
      ),
    );
  }
}

class CounterWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final manager = stateObject(CounterManager());

    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Text('Count: ${manager.count.value}'),
        ElevatedButton(
          onPressed: () {
            manager.count.value++;
          },
          child: Text('Increment'),
        ),
      ],
    );
  }
}

示例 3:列表与映射

以下是一个使用 <code>stateList()</code><code>stateMap()</code> 的列表与映射示例。

代码实现:

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

void main() {
  runApp(MyApp());
}

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

class CollectionsPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Collections Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ListExample(),
            MapExample(),
          ],
        ),
      ),
    );
  }
}

class ListExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final list = stateList<int>([1, 2, 3]);

    return Column(
      children: [
        Text('List: ${list.value}'),
        ElevatedButton(
          onPressed: () {
            list.value.add(4);
          },
          child: Text('Add to List'),
        ),
      ],
    );
  }
}

class MapExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final map = stateMap<String, int>({});

    return Column(
      children: [
        Text('Map: ${map.value}'),
        ElevatedButton(
          onPressed: () {
            map.value['key'] = 1;
          },
          child: Text('Add to Map'),
        ),
      ],
    );
  }
}

更多关于Flutter插件ushio的介绍与使用_Ushio是一个受 SwiftUI 启发的状态管理库的实战教程也可以访问 https://www.itying.com/category-92-b0.html

回到顶部