Kotlin + MVVM + LiveData ,实战讲述Flutter跨平台框架应用
在Flutter中使用MVVM架构模式,并结合LiveData来管理状态,可以通过以下方式实现:
- 创建一个
ViewModel
类,它负责管理UI的状态和逻辑:
import 'package:flutter/foundation.dart';
class MyViewModel extends ChangeNotifier {
int _counter = 0;
int get counter => _counter;
void incrementCounter() {
_counter++;
notifyListeners();
}
}
- 在Flutter中使用
ViewModel
,通常在StatefulWidget
的State
类中实现:
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'my_view_model.dart';
class MyPage extends StatefulWidget {
@override
_MyPageState createState() => _MyPageState();
}
class _MyPageState extends State<MyPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('You have pushed the button this many times:'),
// 使用Consumer来直接监听ViewModel中的变化
Consumer<MyViewModel>(
builder: (context, viewModel, _) => Text(
'${viewModel.counter}',
style: Theme.of(context).textTheme.headline4,
),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () => Provider.of<MyViewModel>(context, listen: false).incrementCounter(),
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
- 在
main.dart
中,初始化ViewModel
并使用Provider
包将其提供给MyPage
:
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'my_view_model.dart';
import 'my_page.dart';
void main() {
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => MyViewModel()),
],
child: MaterialApp(
home: MyPage(),
),
),
);
}
以上代码展示了如何在Flutter中使用MVVM模式和Provider包来管理状态。MyViewModel
类负责管理状态,MyPage
类负责渲染UI和事件处理。main.dart
中初始化了ViewModel并通过MultiProvider
将其注入到MyPage
。这样,每当ViewModel中的数据改变时,使用Consumer
的UI组件会自动更新,无需手动操作。
评论已关闭