跳到主要内容

这周发生了什么

· 阅读需 8 分钟
Quany
软件工程师

以下是这周编程技术领域的一些重要动态:

工具与平台更新

  • JDK 24 进入发布阶段:JDK 24 已进入首个候选发布阶段,计划于2025年3月18日正式发布。它包含24项新特性,涵盖核心Java库、语言规范、安全库、HotSpot和Java工具等方面。
  • 字节跳动Trae国内版上线:字节跳动的AI编程产品Trae国内版正式上线,配置了先进的AI模型,支持代码补全、理解、Bug修复及自然语言生成代码等功能,为开发者提供高效、智能化的编程体验。

行业趋势

  • AI主导代码生产趋势加速:Anthropic CEO预测,未来3到6个月内AI将编写90%的代码,一年内几乎包揽全部编程工作。这一趋势促使开发者提升AI相关技能,同时也引发对软件工程师职业前景的思考。
  • 低代码/无代码平台兴起:低代码和无代码平台使开发更加便捷,无需深厚编程知识即可构建强大应用,有助于简化开发流程、缩短产品上市时间并促进快速创新。

未来展望

  • AI编程工具持续进化:AI编程助手将更加智能,能够更好地理解开发者意图,自动生成高质量代码,并在代码优化、调试等方面提供更强大支持。
  • 量子计算与编程融合加深:随着量子计算技术的发展,未来可能出现专门针对量子计算的编程语言和工具,推动量子计算在更多领域的应用。

这些动态反映了编程技术领域的快速发展和变革,开发者需要不断学习和适应新技术,以保持竞争力。

----------------------------Flutter

以下是Flutter中常见的状态管理方案:

  1. Provider:由Flutter官方推荐,基于依赖注入,简单易用,适合中小型应用。
  2. Getx:全能框架,用于状态管理、路由和依赖注入,非常适用于低到中等复杂度的应用程序。
  3. Riverpod:由Provider的作者开发,功能更强大、灵活且类型安全,状态管理与BuildContext解耦,适用于大型应用的开发。

以下是目前Flutter中最流行的状态管理方案:

1. Riverpod

  • 特点:由Provider的作者开发,功能更强大、灵活且类型安全,状态管理与BuildContext解耦,适用于大型应用的开发。
  • 使用示例
    final counterProvider = StateNotifierProvider<CounterModel, int>((ref) {
    return CounterModel();
    });

    class CounterModel extends StateNotifier<int> {
    CounterModel() : super(0);

    void increment() {
    state++;
    }
    }

    void main() {
    runApp(ProviderScope(child: MyApp()));
    }

    class MyApp extends StatelessWidget {

    Widget build(BuildContext context) {
    return MaterialApp(
    home: Scaffold(
    appBar: AppBar(title: Text('Riverpod Example')),
    body: Center(
    child: Consumer(
    builder: (context, ref, child) {
    final count = ref.watch(counterProvider);
    return Text('Count: $count');
    },
    ),
    ),
    floatingActionButton: FloatingActionButton(
    onPressed: () => context.read(counterProvider.notifier).increment(),
    child: Icon(Icons.add),
    ),
    ),
    );
    }
    }
  • 优点:解耦上下文,类型安全,易于测试,支持异步状态。

2. Provider

  • 特点:Flutter官方推荐的状态管理方案之一,基于依赖注入,简单易用,适合中小型应用。
  • 使用示例
    class Counter with ChangeNotifier {
    int _count = 0;
    int get count => _count;

    void increment() {
    _count++;
    notifyListeners();
    }
    }

    void main() {
    runApp(
    ChangeNotifierProvider(
    create: (context) => Counter(),
    child: MyApp(),
    ),
    );
    }

    class MyApp extends StatelessWidget {

    Widget build(BuildContext context) {
    return MaterialApp(
    home: Scaffold(
    appBar: AppBar(title: Text('Provider Example')),
    body: Center(
    child: Consumer<Counter>(
    builder: (context, counter, child) {
    return Text('Count: ${counter.count}');
    },
    ),
    ),
    floatingActionButton: FloatingActionButton(
    onPressed: () => Provider.of<Counter>(context, listen: false).increment(),
    child: Icon(Icons.add),
    ),
    ),
    );
    }
    }

3. Getx

  • 特点:全能框架,用于状态管理、路由和依赖注入,非常适用于低到中等复杂度的应用程序。
  • 使用示例
    void main() => runApp(MaterialApp(home: Home()));

    class Home extends StatelessWidget {
    var count = 0.obs;


    Widget build(context) => Scaffold(
    appBar: AppBar(title: Text("counter")),
    body: Center(
    child: Obx(() => Text("$count")),
    ),
    floatingActionButton: FloatingActionButton(
    child: Icon(Icons.add),
    onPressed: () => count++,
    ));
    }
  • 优点:简单易用,性能优秀,内置依赖注入和路由管理功能。

4. Redux

  • 特点:具有集中式存储、操作和减速器的可预测状态管理,适用于需要强大可预测性和工具的应用程序。
  • 使用示例
    enum Actions { Increment }

    int counterReducer(int state, dynamic action) {
    return action == Actions.Increment ? state + 1 : state;
    }

    void main() {
    final store = Store<int>(counterReducer, initialState: 0);
    runApp(FlutterReduxApp(title: 'Flutter Redux Demo', store: store));
    }

    class FlutterReduxApp extends StatelessWidget {
    final Store<int> store;
    final String title;

    FlutterReduxApp({Key key, this.store, this.title}) : super(key: key);


    Widget build(BuildContext context) {
    return StoreProvider<int>(
    store: store,
    child: MaterialApp(
    theme: ThemeData.dark(),
    title: title,
    home: Scaffold(
    appBar: AppBar(title: Text(title)),
    body: Center(
    child: Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: [
    StoreConnector<int, String>(
    converter: (store) => store.state.toString(),
    builder: (context, count) {
    return Text(
    'The button has been pushed this many times: $count',
    style: Theme.of(context).textTheme.display1,
    );
    },
    )
    ],
    ),
    ),
    floatingActionButton: StoreConnector<int, VoidCallback>(
    converter: (store) {
    return () => store.dispatch(Actions.Increment);
    },
    builder: (context, callback) {
    return FloatingActionButton(
    onPressed: callback,
    tooltip: 'Increment',
    child: Icon(Icons.add),
    );
    },
    ),
    ),
    ),
    );
    }
    }

5. BLoC

  • 特点:通过将业务逻辑与UI分离,便于代码复用和测试,适合中大型应用。
  • 使用示例
    class CounterBloc {
    final _counterController = StreamController<int>();
    Stream<int> get counter => _counterController.stream;

    int _count = 0;
    void increment() {
    _count++;
    _counterController.sink.add(_count);
    }

    void dispose() {
    _counterController.close();
    }
    }

    void main() {
    final counterBloc = CounterBloc();
    runApp(Provider.value(value: counterBloc, child: MyApp()));
    }

    class MyApp extends StatelessWidget {

    Widget build(BuildContext context) {
    return MaterialApp(
    home: Scaffold(
    appBar: AppBar(title: Text('BLoC Example')),
    body: Center(
    child: StreamBuilder<int>(
    stream: Provider.of<CounterBloc>(context).counter,
    builder: (context, snapshot) {
    return Text('Count: ${snapshot.data ?? 0}');
    },
    ),
    ),
    floatingActionButton: FloatingActionButton(
    onPressed: () => Provider.of<CounterBloc>(context).increment(),
    child: Icon(Icons.add),
    ),
    ),
    );
    }
    }

6. MobX

  • 特点:采用响应式编程,简化状态管理,适合需要灵活状态管理的项目。
  • 使用示例
    class CounterStore {

    int count = 0;


    void increment() {
    count++;
    }
    }

    void main() {
    final store = CounterStore();
    runApp(Provider.value(value: store, child: MyApp()));
    }

    class MyApp extends StatelessWidget {

    Widget build(BuildContext context) {
    return MaterialApp(
    home: Scaffold(
    appBar: AppBar(title: Text('MobX Example')),
    body: Center(
    child: Observer(
    builder: (_) => Text('Count: ${Provider.of<CounterStore>(context).count}'),
    ),
    ),
    floatingActionButton: FloatingActionButton(
    onPressed: () => Provider.of<CounterStore>(context).increment(),
    child: Icon(Icons.add),
    ),
    ),
    );
    }
    }

这些状态管理方案各有优缺点,选择哪种方案取决于项目的具体需求和复杂度。

flutter 待加库

  • flutter_native_splash:启动屏

微信公众号

微信公众号