List 将列表传递给QR生成器

List 将列表传递给QR生成器,list,dart,flutter,qr-code,List,Dart,Flutter,Qr Code,我是新的编程与颤振和我试图创建一个比萨饼应用程序。首先你制作比萨饼,选择配料,然后你会得到一份你点的比萨饼清单。该列表和qr生成器同样有效,但它们来自单独的教程,我在连接它们时遇到问题。我似乎无法将订单列表传递给发电机 import 'package:flutter/material.dart'; import 'package:qr_flutter/qr_flutter.dart'; import 'package:flutter/services.dart'; import 'dart:as

我是新的编程与颤振和我试图创建一个比萨饼应用程序。首先你制作比萨饼,选择配料,然后你会得到一份你点的比萨饼清单。该列表和qr生成器同样有效,但它们来自单独的教程,我在连接它们时遇到问题。我似乎无法将订单列表传递给发电机

import 'package:flutter/material.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:flutter/services.dart';
import 'dart:async';
import 'dart:typed_data';
import 'dart:ui';
import 'dart:io';
import 'package:flutter/rendering.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pizza_app/screens/review.dart';
import 'package:pizza_app/code/pizza.dart';

 class GenerateQR extends StatefulWidget {
   List<String> _list = new List<String>();
  @override
  State<StatefulWidget> createState() => GenerateQRState();

  GenerateQR(list){

    _list = list;
  }

}

class GenerateQRState extends State<GenerateQR> {

  static const double _topSectionTopPadding = 50.0;
  static const double _topSectionBottomPadding = 20.0;
  static const double _topSectionHeight = 50.0;

  GlobalKey globalKey = new GlobalKey();
  List<String> _dataList = new List<String>();
  //String _dataString = "Hello from this QR";
  String _inputErrorText;
  final TextEditingController _textController =  TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('QR Code Generator'),
        actions: <Widget>[
          IconButton(
            icon: Icon(Icons.share),
            onPressed: _captureAndSharePng,
          )
        ],
      ),
      body: _contentWidget(),
    );
  }

  Future<void> _captureAndSharePng() async {
    try {
      RenderRepaintBoundary boundary = globalKey.currentContext.findRenderObject();
      var image = await boundary.toImage();
      ByteData byteData = await image.toByteData(format: ImageByteFormat.png);
      Uint8List pngBytes = byteData.buffer.asUint8List();

      final tempDir = await getTemporaryDirectory();
      final file = await new File('${tempDir.path}/image.png').create();
      await file.writeAsBytes(pngBytes);

      final channel = const MethodChannel('channel:me.alfian.share/share');
      channel.invokeMethod('shareFile', 'image.png');

    } catch(e) {
      print(e.toString());
    }
  }

  _contentWidget() {
    final bodyHeight = MediaQuery.of(context).size.height - MediaQuery.of(context).viewInsets.bottom;
    return  Container(
      color: const Color(0xFFFFFFFF),
      child:  Column(
        children: <Widget>[
          Padding(
            padding: const EdgeInsets.only(
              top: _topSectionTopPadding,
              left: 20.0,
              right: 10.0,
              bottom: _topSectionBottomPadding,
            ),
            child:  Container(
              height: _topSectionHeight,
              child:  Row(
                mainAxisSize: MainAxisSize.max,
                crossAxisAlignment: CrossAxisAlignment.stretch,
                children: <Widget>[
                  Expanded(
                    child:  TextField(
                      controller: _textController,
                      decoration:  InputDecoration(
                        hintText: "Enter a custom message",
                        errorText: _inputErrorText,
                      ),
                    ),
                  ),
                  Padding(
                    padding: const EdgeInsets.only(left: 10.0),
                    child:  FlatButton(
                      child:  Text("SUBMIT"),
                      onPressed: () {
                        setState((){

                          _dataList.add(_list); // This must be wrong
                          _inputErrorText = null;
                        });
                      },
                    ),
                  )
                ],
              ),
            ),
          ),
          Expanded(
            child:  Center(
              child: RepaintBoundary(
                key: globalKey,
                child: QrImage(
                  data: _dataList,// I think that there is an error here too
                  size: 0.5 * bodyHeight,
                  onError: (ex) {
                    print("[QR] ERROR - $ex");
                    setState((){
                      _inputErrorText = "Error! Maybe your input value is too long?";
                    });
                  },
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
进口“包装:qr_颤振/qr_颤振.飞镖”;
导入“包:flifter/services.dart”;
导入“dart:async”;
导入“dart:键入的_数据”;
导入“dart:ui”;
导入“dart:io”;
导入“package:flatter/rendering.dart”;
导入“package:path_provider/path_provider.dart”;
导入“package:pizza_app/screens/review.dart”;
导入“package:pizza_app/code/pizza.dart”;
类GenerateQR扩展StatefulWidget{
列表_List=新列表();
@凌驾
State createState()=>GenerateQRState();
生成QR(列表){
_列表=列表;
}
}
类GenerateQRState扩展了状态{
静态常数double _=50.0;
静态常数double _topSectionBottomPadding=20.0;
静态常数双上断面高度=50.0;
GlobalKey GlobalKey=新的GlobalKey();
列表_dataList=新列表();
//String _dataString=“来自此QR的你好”;
字符串_inputErrorText;
最终文本编辑控制器_textController=TextEditingController();
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“二维码生成器”),
行动:[
图标按钮(
图标:图标(Icons.share),
按下按钮:\ U captureAndSharePng,
)
],
),
正文:_contentWidget(),
);
}
Future\u captureAndSharePng()异步{
试一试{
RenderRepaintBoundary=globalKey.currentContext.FindEnderObject();
var image=await boundary.toImage();
ByteData ByteData=await image.toByteData(格式:ImageByteFormat.png);
Uint8List pngBytes=byteData.buffer.asUint8List();
final tempDir=await getTemporaryDirectory();
final file=等待新文件('${tempDir.path}/image.png')。create();
wait file.writeAsBytes(PNGB);
final channel=const MethodChannel('channel:me.alfian.share/share');
channel.invokeMethod('shareFile','image.png');
}捕获(e){
打印(如toString());
}
}
_contentWidget(){
final bodyHeight=MediaQuery.of(context).size.height-MediaQuery.of(context).viewInsets.bottom;
返回容器(
颜色:常量颜色(0xFFFFFF),
子:列(
儿童:[
填充物(
填充:仅限常量边设置(
顶部:添加,
左:20.0,
右图:10.0,
底部:顶部和底部填充物,
),
子:容器(
高度:_高度,
孩子:排(
mainAxisSize:mainAxisSize.max,
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
扩大(
孩子:TextField(
控制器:_textController,
装饰:输入装饰(
hintText:“输入自定义消息”,
errorText:\u inputErrorText,
),
),
),
填充物(
填充:仅限常量边集(左:10.0),
孩子:扁平按钮(
儿童:文本(“提交”),
已按下:(){
设置状态(){
_dataList.add(_list);//这一定是错误的
_inputErrorText=null;
});
},
),
)
],
),
),
),
扩大(
儿童:中心(
子:重新绘制边界(
关键:环球银行,
孩子:QrImage(
data:_dataList,//我想这里也有一个错误
尺寸:0.5*车身高度,
onError:(ex){
打印(“[QR]错误-$ex”);
设置状态(){
_inputErrorText=“错误!可能您的输入值太长?”;
});
},
),
),
),
),
],
),
);
}
}
使用合适的分隔符,如管道(
|
)符号,将字符串列表合并为一个字符串:

处理有人在文本字段中键入
|
字符的情况

读取二维码的代码可用于再次将字符串拆分为字符串列表。

使用合适的分隔符,如管道(
)符号,将字符串列表合并为单个字符串:

处理有人在文本字段中键入
|
字符的情况

读取二维码的代码可用于再次将字符串拆分为字符串列表