Flutter 在InteractiveViewer中的图像上写入

Flutter 在InteractiveViewer中的图像上写入,flutter,Flutter,我正在寻找编辑图像的简单方法, 或者在图像上书写,这样就不必管理我使用的缩放和滚动 import 'package:flutter/material.dart'; void main() =>runApp(MyApp()); class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State&

我正在寻找编辑图像的简单方法, 或者在图像上书写,这样就不必管理我使用的缩放和滚动

import 'package:flutter/material.dart';

void main() =>runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
       home: Center(child:MyInteractiveViewer("Assets/img/carte.png"),),
   );
  }
}

class MyInteractiveViewer extends InteractiveViewer {
  MyInteractiveViewer(String carte):super(
      constrained :false,
      child: Image.asset(carte),
      minScale:0.10,
      maxScale:100.0){
    init();}

  void init(){
    print ("test"+child.toString());
  }

}
谢谢您的反馈

我回答我的问题 我没有找到答案,但我提出了一个解决方案

import 'package:flutter/material.dart';
import 'dart:ui' as ui;
import 'package:flutter/services.dart' show rootBundle;
import 'dart:async';
import 'dart:typed_data';

void main() =>runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String carte = "Assets/img/carte.png";
  ui.Image image;
  bool isImageloaded = false;
  TransformationController controller;
  void initState() {
    super.initState(); //init state
    init();// inii image load
  }

  Future <Null> init() async {
     Matrix4 matrix4 = Matrix4(
       1, 0, 0, 0,
        0, 1, 0, 0,
        0, 0, 1, 0,
        0, 0, 0, 1

    );
      controller = TransformationController(matrix4);

    final ByteData data = await rootBundle.load(carte);
    image = await loadImage(new Uint8List.view(data.buffer));
  }

  Future<ui.Image> loadImage(List<int> img) async {
    final Completer<ui.Image> completer = new Completer();
    ui.decodeImageFromList(img, (ui.Image img) {
      setState(() {
        isImageloaded = true;
      });
      return completer.complete(img);
    });
    return completer.future;
  }



  @override
  Widget build(BuildContext context) {

    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: InteractiveViewer(
            transformationController: controller,//pas très utile mais bon
            minScale:0.1,
            maxScale:5,
            constrained :false,
            child: CustomPaint(
                size: Size(image.width.toDouble(), image.height.toDouble()),
                foregroundPainter: TestPainter(image),
              ),
          ),
        ),
      ),
    );
  }
}


class TestPainter extends CustomPainter {

  final ui.Image image;
  TestPainter(this.image);

  @override
  void paint(Canvas canvas, Size size) {
    final paint = Paint()
      ..color = Colors.blueGrey;
    canvas.drawImage(image, new Offset(0.0, 0.0), paint);
    canvas.drawCircle(Offset(400, 800), 50, paint);
  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) {
    return true;
  }
}
导入“包装:颤振/材料.省道”;
将“dart:ui”导入为ui;
导入“包:flatter/services.dart”显示根包;
导入“dart:async”;
导入“dart:键入的_数据”;
void main()=>runApp(MyApp());
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
字符串carte=“Assets/img/carte.png”;
ui.图像;
bool-isimageload=false;
变换控制器;
void initState(){
super.initState();//init state
init();//inii图像加载
}
Future init()异步{
Matrix4 Matrix4=Matrix4(
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
);
控制器=转换控制器(matrix4);
最终ByteData数据=等待rootBundle.load(carte);
image=wait loadImage(新的Uint8List.view(data.buffer));
}
未来加载映像(列表img)异步{
最终完成者完成者=新完成者();
ui.decodeMageFromList(img,(ui.Image img){
设置状态(){
isImageloaded=true;
});
返回完成符。完成(img);
});
返回completer.future;
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
debugShowCheckedModeBanner:false,
家:脚手架(
正文:中(
子:InteractiveViewer(
转换控制器:控制器,//pas très utile mais bon
最小刻度:0.1,
最大刻度:5,
答案:错,
孩子:定制油漆(
大小:大小(image.width.toDouble(),image.height.toDouble()),
前景画家:测试画家(图片),
),
),
),
),
);
}
}
类TestPainter扩展了CustomPainter{
最终用户界面。图像;
TestPainter(this.image);
@凌驾
空心油漆(帆布,尺寸){
最终油漆=油漆()
…颜色=颜色。蓝灰色;
画布.drawImage(图像,新偏移量(0.0,0.0),绘制);
帆布。画圈(偏移量(400800),50,油漆);
}
@凌驾
bool应重新绘制(自定义代理){
返回true;
}
}
import 'package:flutter/material.dart';
import 'dart:ui' as ui;
import 'package:flutter/services.dart' show rootBundle;
import 'dart:async';
import 'dart:typed_data';

void main() =>runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String carte = "Assets/img/carte.png";
  ui.Image image;
  bool isImageloaded = false;
  TransformationController controller;
  void initState() {
    super.initState(); //init state
    init();// inii image load
  }

  Future <Null> init() async {
     Matrix4 matrix4 = Matrix4(
       1, 0, 0, 0,
        0, 1, 0, 0,
        0, 0, 1, 0,
        0, 0, 0, 1

    );
      controller = TransformationController(matrix4);

    final ByteData data = await rootBundle.load(carte);
    image = await loadImage(new Uint8List.view(data.buffer));
  }

  Future<ui.Image> loadImage(List<int> img) async {
    final Completer<ui.Image> completer = new Completer();
    ui.decodeImageFromList(img, (ui.Image img) {
      setState(() {
        isImageloaded = true;
      });
      return completer.complete(img);
    });
    return completer.future;
  }



  @override
  Widget build(BuildContext context) {

    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: InteractiveViewer(
            transformationController: controller,//pas très utile mais bon
            minScale:0.1,
            maxScale:5,
            constrained :false,
            child: CustomPaint(
                size: Size(image.width.toDouble(), image.height.toDouble()),
                foregroundPainter: TestPainter(image),
              ),
          ),
        ),
      ),
    );
  }
}


class TestPainter extends CustomPainter {

  final ui.Image image;
  TestPainter(this.image);

  @override
  void paint(Canvas canvas, Size size) {
    final paint = Paint()
      ..color = Colors.blueGrey;
    canvas.drawImage(image, new Offset(0.0, 0.0), paint);
    canvas.drawCircle(Offset(400, 800), 50, paint);
  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) {
    return true;
  }
}