编写flutter程序遇到的问题总结
状态管理器provider
- 在使用provider时,发现一个问题,当provider需要再多个页面进行使用时,会不断的调用空构造函数,生成新的provider,导致数据无法共享
解决办法:在runApp时在根节点初始化provider,子组件会自动获取到根节点的provider,进行共享数据
runApp(ChangeNotifierProvider.value(value: new DataProvider(),child: MyApp(),));
//子组件通过of方式获取,MultiProvider中也不需要再次定义该provider
Provider.of<DataProvider>(context,listen: true);
- 点击空白处收起小键盘时,经常会失效
解决办法:在最外层定义 FocusNode ,在textFiled外层定义GestureDetector包含该组件,并在GestureDetector的点击方法中调用FocusNode.unfocus
TextField(
focusNode: focusNode,
)
- listview滑动触发效果,需要再listview中的itemBuiledr中返回Dismissible
onDismissed: (direction)
dp.deleteIndex(index);
// 提示
Scaffold.of(context).showSnackBar(SnackBar(content: Text("已删除")));
},
- 内置存储SharedPreferences
Future<SharedPreferences> sharedPreferences = SharedPreferences.getInstance();
sharedPreferences.then((value) => {
codes = value.getStringList("codes")==null? codes:value.getStringList("codes").toSet(),
getList()
});
- 去掉debug标签
//MaterialApp里
debugShowCheckedModeBanner: false,
- 安装到真机,需要安装对应的release版本