【问题标题】:Flutter show to split very long text and show by dividing?颤振显示分割很长的文本并通过分割显示?
【发布时间】:2021-01-26 02:58:24
【问题描述】:

我正在将我的 ionic 应用程序迁移到 flutter,我有一些需要拆分和显示的数据。 字符串看起来像这样PRE-AUTHORIZATION=MANDATORY AT NON-PANEL HOSPITALS|||||HOSPITAL NETWORK=220+ FACILITIES NATIONWIDE||||| 我需要在 ||||| 时换行这来分裂这个词=

打字稿中的代码看起来像这样

  const policies = this.wording.split('|').filter(w => w !== '');
  this.displayData = [];
  policies.forEach((policy) => {
    const splited = policy.split('=');
    const displayPolicy = {name: splited[0], value: splited[1]};
    this.displayData.push(displayPolicy);
  });

在应用程序中,字符串如下所示

任何人请告诉我如何在颤振应用程序中显示这些数据,就像在图像中一样谢谢

这是我正在使用的完整代码

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:http/http.dart';
import 'dart:convert';
import 'dart:io';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';

class BenefitScreen extends StatefulWidget {
  @override
  _BenefitScreenState createState() => _BenefitScreenState();
}

class _BenefitScreenState extends State<BenefitScreen> {

  @override
  initState() {
    super.initState();
    doSomeAsyncStuff();
  }

  Future<String> doSomeAsyncStuff() async {
    final storage = new FlutterSecureStorage();
    String value = await storage.read(key: 'company_id');
    print(value);

    String url2 =
        'gttps://api?company_id=${value}';

    final response2 = await http.get(url2);
    var Data = json.decode(response2.body);
    print(Data);
    print(Data["records"][0]["policies"][0]["policywording"]);
    var DisplayData = Data["records"][0]["policies"][0]["policywording"]; // This is the data which need to split 

    return DisplayData;
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        centerTitle: true,
        title: Text('IGI GENERAL INSURANCE'),
      ),
      body: FutureBuilder<String>(
          future: doSomeAsyncStuff(),
          builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
            if (snapshot.hasData) {
              print(snapshot.data);
              return  Text('Here in ned to show data');

            } else if (snapshot.hasError) {
              return Padding(
                padding: const EdgeInsets.only(top: 16),
                child: Text('Error: ${snapshot.error}'),
              );
            } else {
              return Padding(
                padding: EdgeInsets.only(top: 16),
                child: Text('Awaiting result...'),
              );
            }
          }),
    );
  }
}

还有一件事所有字符串都不包含 = 符号来拆分。我已经附上了图片,你可以看到第一个值没有 = 符号并且它以蓝色文本显示。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    typescript中的代码可以转换成如下方法:

    List<Map<String, String>> divideString(String wording) {
      final policies = wording.split('|').where((w) => w != '');
      var displayData = <Map<String, String>>[];
      policies.forEach((policy) {
        final splitted = policy.split('=');
        final displayPolicy = <String, String>{
          'name': splitted[0],
          'value': splitted.length > 1 ? splitted[1] : null,
        };
        displayData.add(displayPolicy);
      });
    
      return displayData;
    }
    

    【讨论】:

    • 谢谢,但它显示此错误无效值:只有有效值是 0:1 如果我删除“值”:splited[1] 它工作正常,但是当我添加它时它显示错误。我认为这是因为每个工作都没有 = 符号并且它会中断?任何解决方案
    • 我修复了代码。我没有注意到关于没有等号的字符串的注释。
    • 非常感谢你能不能定义这个 splited.length > 1 ? splited[1] : null 我不明白
    • 如果你用=拆分值并且字符串中没有等号,那么splitted的长度为1(因为没有什么可以拆分,所以唯一的值是来自的字符串policy 变量),因此您无法到达第二个位置的元素(索引为[1])并且您在= 之后设置null 而不是字符串。如果长度大于 1(因此字符串中有= 符号),则通过使用索引[1] 获取splitted 变量中第二个位置的值来使用= 之后的值。 condition ? if_true : if_false 被广泛称为三元运算符。
    猜你喜欢
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    相关资源
    最近更新 更多