flutter - Flutter BLoC 问题
问题描述
我目前正在尝试弄清楚如何在一个简单的 TodoList 中实现 BLoC 模式。我现在面临一些问题,不太清楚为什么。似乎来自“TodoBlocProvider”,当我在“add_task_page”中添加新的 Todo 时出现。我知道它有很多代码,可能不是你见过的最好的,但如果有人可以帮助我,那将非常好,非常感谢。
解决方案
我找到了你的问题,如果有帮助请告诉我
用以下内容替换你的 main.dart
import 'package:flutter/material.dart';
import 'package:todo_v2/TodoBlocProvider.dart';
//import 'package:todo_v2/TodoViewModel.dart';
import 'package:todo_v2/add_task_page.dart';
//import 'package:todo_v2/database.dart';
import 'package:todo_v2/listview.dart';
import 'package:todo_v2/todo_bloc.dart';
//import 'package:uuid/uuid.dart';
//import 'Todo.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return TodoBlocProvider(
todoBloc: TodoBloc(),
child: MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// int _index = 0;
@override
Widget build(BuildContext context) {
final todoBloc = TodoBlocProvider.of(context);
return Scaffold(
backgroundColor: Colors.blueGrey,
appBar: AppBar(
title: Text(widget.title),
),
body: StreamBuilder(
stream: todoBloc.todoList,
builder: (BuildContext context, snapData) {
if (snapData.hasData) {
print("hasdata ${snapData.data.length}");
return CustomListView(todos: snapData.data);
} else {
return Container(
child: Text("nodata"),
);
}
}),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: (){
Navigator.push(context, MaterialPageRoute(builder: (context) => NewTodoPage()));
}),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
bottomNavigationBar: BottomAppBar(
shape: CircularNotchedRectangle(),
notchMargin: 4.0,
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
IconButton(
icon: Icon(Icons.event),
onPressed: (){},
),
IconButton(
icon: Icon(Icons.event_available),
onPressed: (){})
],
),
)
);
}
}
推荐阅读
- android - 带有背景颜色的菜单项
- ios - 以编程方式禁用 iOS 模拟器“连接硬件键盘”
- vue.js - axios快速请求时不返回数据
- python - 如何在 Python 中将新行附加到现有的 CSV 文件?
- xml - 如何使用本地 XML 文件创建企业服务?
- javascript - Firebase Cloud Functions - 如何调用另一个函数并返回对象
- netlogo - 海龟变量为空
- jquery - 鼠标悬停在表格 td 中的图像上时显示图像预览
- c++ - 为什么我的 Eratosthenes 代码筛子无限循环。我用几个数字测试过
- datatable - 使用 rmarkdown 在 pdf 中渲染 DT::datatables?