Flutter: provider 使用小部件的小部件构建的依赖注入系统
阅读原文时间:2023年07月08日阅读:3
  • 文档

    dependencies:
    provider:

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

    class Counter with ChangeNotifier {
    Counter() {
    printf('init');
    }
    int _n = 0;
    int get n => _n;
    set n(v) {
    _n = v;
    notifyListeners();
    }
    }

    void main() {
    var app = MultiProvider( providers: [ ChangeNotifierProvider(create: () => Counter()),

      // var counter = Counter();
      // ChangeNotifierProvider.value(value: counter),
    ],
    child: MyApp(),

    );
    runApp(_app);
    }

    class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return MaterialApp(
    home: HomePage(),
    );
    }
    }

    class HomePage extends StatefulWidget {
    @override
    _HomePageState createState() => _HomePageState();
    }

    class _HomePageState extends State {
    @override
    Widget build(BuildContext context) {
    return Scaffold(
    appBar: AppBar(
    title: Text('Home Page'),
    ),
    body: Column(
    children: [
    Center(
    child: Text('home page ${context.watch().n}'),
    ),
    W1(),
    W2(),
    ],
    ),
    floatingActionButton: FloatingActionButton(
    onPressed: () {
    context.read().n++;
    },
    ),
    );
    }
    }

    class W1 extends StatefulWidget {
    @override
    _W1State createState() => _W1State();
    }

    class _W1State extends State {
    @override
    Widget build(BuildContext context) {
    return Container(
    width: 100,
    height: 100,
    child: Text(context.watch().n.toString()),
    );
    }
    }

    class W2 extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return Container(
    width: 100,
    height: 100,
    child: Text(context.watch().n.toString()),
    );
    }
    }

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章