Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 我如何将数据从方法调用日志传递到body并打印它?_Flutter_Dart_Calllog - Fatal编程技术网

Flutter 我如何将数据从方法调用日志传递到body并打印它?

Flutter 我如何将数据从方法调用日志传递到body并打印它?,flutter,dart,calllog,Flutter,Dart,Calllog,我对使用颤振框架还不熟悉,我想将呼叫日志传递到我的应用程序,以便打印它们。我该怎么做 class _QuoteListState extends State<QuoteList> { Future<bool>_callLogs() async { Iterable<CallLogEntry> entries = await CallLog.get(); } @override Widget build(BuildContext

我对使用颤振框架还不熟悉,我想将呼叫日志传递到我的应用程序,以便打印它们。我该怎么做

class _QuoteListState extends State<QuoteList> {

   Future<bool>_callLogs() async {
     Iterable<CallLogEntry> entries = await CallLog.get();

   }

 @override
 Widget build(BuildContext context) {
   return Scaffold(
     backgroundColor: Colors.grey[200],
     appBar: AppBar(
       title: Text('Calls Log'),
       centerTitle: true,
       backgroundColor: Colors.purple,
     ),
     body: ListView.builder(
       itemCount: entries.length,
       itemBuilder: (context, index){

       }
     )
   );
class”列表状态扩展状态{
Future\u callLogs()异步{
Iterable entries=wait CallLog.get();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:颜色。灰色[200],
appBar:appBar(
标题:文本(“调用日志”),
标题:对,
背景颜色:Colors.purple,
),
正文:ListView.builder(
itemCount:entries.length,
itemBuilder:(上下文,索引){
}
)
);

您必须从异步函数中获取数据并设置为本地变量,因此最好在调用日志中调用setState,并使您的小部件有状态并按如下方式编写

   import 'package:call_log/call_log.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: LogsList(),
  ));
}

class LogsList extends StatefulWidget {
  @override
  _LogsListState createState() => _LogsListState();
}

class _LogsListState extends State<LogsList> {
  @override
  void initState() {
    super.initState();
    _callLogs();
  }

  Future<void> _callLogs() async {
    Iterable<CallLogEntry> entries = await CallLog.get();
    List _data = entries.map((data) => data).toList();
    setState(() {
      _entries = _data;
    });
  }

  List<CallLogEntry> _entries = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.grey[200],
      appBar: AppBar(
        title: Text('Calls Log'),
        centerTitle: true,
        backgroundColor: Colors.purple,
      ),
      body: ListView.builder(
          itemCount: _entries.length,
          itemBuilder: (context, i) {
            final CallLogEntry callLogEntry = _entries[i];

            return ListTile(
              title: Text(callLogEntry.formattedNumber),
              subtitle: Text(callLogEntry.duration.toString()),
            );
          }),
    );
  }
}
import'包:call_log/call_log.dart';
进口“包装:颤振/材料.省道”;
void main(){
runApp(材料应用程序)(
主页:LogsList(),
));
}
类LogsList扩展StatefulWidget{
@凌驾
_LogsListState createState()=>\u LogsListState();
}
类_LogsListState扩展状态{
@凌驾
void initState(){
super.initState();
_调用日志();
}
Future\u callLogs()异步{
Iterable entries=wait CallLog.get();
List _data=entries.map((data)=>data.toList();
设置状态(){
_条目=_数据;
});
}
列表项=[];
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:颜色。灰色[200],
appBar:appBar(
标题:文本(“调用日志”),
标题:对,
背景颜色:Colors.purple,
),
正文:ListView.builder(
itemCount:_entries.length,
itemBuilder:(上下文,i){
final CallLogEntry CallLogEntry=_entries[i];
返回列表块(
标题:文本(callLogEntry.formattedNumber),
字幕:文本(callLogEntry.duration.toString()),
);
}),
);
}
}

确保将其添加到您的项目Android清单中:

您可以使用Future Builder来实现这一点

下面的最小代码模拟您的条件,所以您可以在自己的代码中实现

import 'package:flutter/material.dart';

class DeleteWidget extends StatefulWidget {
  const DeleteWidget({Key key}) : super(key: key);

  @override
  _DeleteWidgetState createState() => _DeleteWidgetState();
}

class _DeleteWidgetState extends State<DeleteWidget> {
  @override
  void initState() {
    super.initState();
  }

  List<int> _data;

  Future<bool> _callLogs() async {
    await Future.delayed(Duration(seconds: 4));
    _data = [6, 5, 4, 3, 2, 1];
    return true;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: Center(
          child: FutureBuilder(
            future: _callLogs(),
            builder: (context, snapshot) {
              if (!snapshot.hasError) {
                if (snapshot.data == true) {
                  return ListView.builder(
                    itemCount: _data.length,
                    itemBuilder: (context, index) {
                      return Text(_data[index].toString());
                    },
                  );
                } else {
                  return Text("Whatever when it returns false");
                }
              } else {
                return Text("Something wents wrong");
              }
            },
          ),
        ),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
类DeleteWidget扩展了StatefulWidget{
constdeleteWidget({Key}):超级(Key:Key);
@凌驾
_DeleteWidgetState createState()=>\u DeleteWidgetState();
}
类_DeleteWidgetState扩展状态{
@凌驾
void initState(){
super.initState();
}
列出数据;
Future\u callLogs()异步{
等待未来。延迟(持续时间(秒:4));
_数据=[6,5,4,3,2,1];
返回true;
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
儿童:中心(
孩子:未来建设者(
未来:_callLogs(),
生成器:(上下文,快照){
如果(!snapshot.hasError){
如果(snapshot.data==true){
返回ListView.builder(
itemCount:_data.length,
itemBuilder:(上下文,索引){
返回文本(_data[index].toString());
},
);
}否则{
返回文本(“无论何时返回false”);
}
}否则{
返回文本(“出错的内容”);
}
},
),
),
),
);
}
}

我必须调用_callLogs()方法还是自动分配值?在initState中,调用了_callLogs()。我按照您的说明做了所有事情,但我仍然没有收到任何数据,条目的长度保持为0。我尝试了调试,看起来它甚至没有经过setState(())方法我已通过在设备上运行更新了代码,请检查。